From bc81fb8d46641a90245ea8a42f09a459272f3d53 Mon Sep 17 00:00:00 2001 From: edgelessci Date: Tue, 3 Dec 2024 21:47:34 +0000 Subject: [PATCH 001/311] chore: update version.txt to v2.20.0 --- version.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/version.txt b/version.txt index 62717a0a7..c69240131 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -v2.20.0-pre +v2.20.0 From 934751e8da3f4ac34fb5059f5925936e78e40e8e Mon Sep 17 00:00:00 2001 From: edgelessci Date: Tue, 3 Dec 2024 21:47:48 +0000 Subject: [PATCH 002/311] deps: update versions to v2.20.0 --- internal/config/image_enterprise.go | 2 +- s3proxy/deploy/s3proxy/Chart.yaml | 2 +- s3proxy/deploy/s3proxy/values.yaml | 5 +---- 3 files changed, 3 insertions(+), 6 deletions(-) diff --git a/internal/config/image_enterprise.go b/internal/config/image_enterprise.go index 9bd6dd0fd..052a3b6ed 100644 --- a/internal/config/image_enterprise.go +++ b/internal/config/image_enterprise.go @@ -10,5 +10,5 @@ package config const ( // defaultImage is the default image to use. - defaultImage = "ref/main/stream/nightly/v2.20.0-pre.0.20241128194937-5977f0f5b1d3" + defaultImage = "v2.20.0" ) diff --git a/s3proxy/deploy/s3proxy/Chart.yaml b/s3proxy/deploy/s3proxy/Chart.yaml index f07afba51..61d62946b 100644 --- a/s3proxy/deploy/s3proxy/Chart.yaml +++ b/s3proxy/deploy/s3proxy/Chart.yaml @@ -2,4 +2,4 @@ apiVersion: v2 name: s3proxy description: Helm chart to deploy s3proxy. type: application -version: 0.0.0 +version: 2.20.0 diff --git a/s3proxy/deploy/s3proxy/values.yaml b/s3proxy/deploy/s3proxy/values.yaml index cc41d5887..60f9b7717 100644 --- a/s3proxy/deploy/s3proxy/values.yaml +++ b/s3proxy/deploy/s3proxy/values.yaml @@ -1,12 +1,9 @@ # Secrets to use for S3 access. awsAccessKeyID: "replaceme" awsSecretAccessKey: "replaceme" - # Pod image to deploy. -image: "ghcr.io/edgelesssys/constellation/s3proxy:v2.18.0-pre.0.20240807132706-ffde0ef7b7d3" - +image: "ghcr.io/edgelesssys/constellation/s3proxy:v2.20.0" # Control if multipart uploads are blocked. allowMultipart: false - # Number of pod replicas to deploy. replicaCount: 1 From e3968fc3d53b93c615037eaae29999fb3299e135 Mon Sep 17 00:00:00 2001 From: edgelessci Date: Tue, 3 Dec 2024 22:24:06 +0000 Subject: [PATCH 003/311] attestation: hardcode measurements for v2.20.0 --- .../measurements/measurements_enterprise.go | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/internal/attestation/measurements/measurements_enterprise.go b/internal/attestation/measurements/measurements_enterprise.go index ba732512d..c5cd8575b 100644 --- a/internal/attestation/measurements/measurements_enterprise.go +++ b/internal/attestation/measurements/measurements_enterprise.go @@ -19,14 +19,14 @@ package measurements // revive:disable:var-naming var ( - aws_AWSNitroTPM = M{0: {Expected: []byte{0x73, 0x7f, 0x76, 0x7a, 0x12, 0xf5, 0x4e, 0x70, 0xee, 0xcb, 0xc8, 0x68, 0x40, 0x11, 0x32, 0x3a, 0xe2, 0xfe, 0x2d, 0xd9, 0xf9, 0x07, 0x85, 0x57, 0x79, 0x69, 0xd7, 0xa2, 0x01, 0x3e, 0x8c, 0x12}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x52, 0x4e, 0xb1, 0x3d, 0x5e, 0x3e, 0x0f, 0x7c, 0x80, 0xa3, 0x25, 0x33, 0x8d, 0xec, 0x99, 0xc5, 0x02, 0x71, 0xb0, 0x8b, 0xd7, 0x10, 0x38, 0x6f, 0xce, 0x65, 0x19, 0x9f, 0xef, 0x92, 0x14, 0x61}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x87, 0xac, 0x51, 0xf1, 0xb5, 0x4e, 0x67, 0xfb, 0x58, 0xb1, 0x48, 0xe0, 0xa5, 0x93, 0x52, 0x06, 0x21, 0x1b, 0xf6, 0x79, 0x5e, 0xb5, 0x03, 0x49, 0x9d, 0x47, 0x2b, 0x4c, 0x79, 0x4d, 0x9d, 0x74}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xa2, 0xe0, 0x94, 0xad, 0x2f, 0x1f, 0xc8, 0xb5, 0x14, 0x65, 0xfd, 0x68, 0xec, 0x9c, 0xe3, 0xb5, 0xf8, 0x46, 0x7a, 0xa0, 0x31, 0xae, 0x20, 0x56, 0x8a, 0x82, 0xdd, 0xdd, 0x12, 0x9a, 0x10, 0xe7}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - aws_AWSSEVSNP = M{0: {Expected: []byte{0x7b, 0x06, 0x8c, 0x0c, 0x3a, 0xc2, 0x9a, 0xfe, 0x26, 0x41, 0x34, 0x53, 0x6b, 0x9b, 0xe2, 0x6f, 0x1d, 0x4c, 0xcd, 0x57, 0x5b, 0x88, 0xd3, 0xc3, 0xce, 0xab, 0xf3, 0x6a, 0xc9, 0x9c, 0x02, 0x78}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x1f, 0xb0, 0xd4, 0x6b, 0x77, 0x91, 0xe8, 0x51, 0xf9, 0x22, 0xe7, 0xb7, 0x93, 0x99, 0x0a, 0x92, 0x1c, 0xcc, 0x8e, 0xe1, 0xc6, 0x17, 0x20, 0x9e, 0x25, 0xf0, 0x53, 0x8d, 0x38, 0xb7, 0xf8, 0x3f}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xd3, 0xbc, 0xd3, 0xcc, 0x12, 0x2a, 0xc5, 0x1b, 0xb0, 0x71, 0x4a, 0xac, 0x95, 0x4d, 0x8c, 0x95, 0x9e, 0xf1, 0x96, 0x8f, 0x4c, 0x67, 0xce, 0xce, 0x05, 0xdb, 0xfb, 0xb1, 0xda, 0xdc, 0xb9, 0xaf}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x1c, 0xcd, 0x6c, 0x28, 0x4b, 0x3c, 0x7a, 0x0d, 0x59, 0x31, 0x63, 0x7f, 0x60, 0x7c, 0x06, 0x00, 0xec, 0x64, 0x46, 0x26, 0x1d, 0x3e, 0xe5, 0x78, 0xb5, 0x93, 0x25, 0x78, 0xdb, 0xb8, 0x8a, 0xf8}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - azure_AzureSEVSNP = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x85, 0xb8, 0x95, 0x18, 0x35, 0x3a, 0x65, 0x29, 0xe9, 0xb3, 0x55, 0xb2, 0xc4, 0x2a, 0x3b, 0xd9, 0x02, 0x54, 0x59, 0x1a, 0x51, 0xc5, 0x12, 0x8b, 0x90, 0xc3, 0x9a, 0xcb, 0x46, 0x93, 0x91, 0xd1}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x5e, 0x05, 0xc8, 0xe4, 0xea, 0x69, 0x9a, 0x0d, 0xff, 0xe0, 0x5a, 0xe1, 0x0b, 0x0c, 0xe3, 0x92, 0x4c, 0xbe, 0xe5, 0xdd, 0xfe, 0xe5, 0x05, 0x54, 0x18, 0x35, 0x0b, 0x3e, 0x5f, 0x37, 0x21, 0xd9}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xba, 0x3f, 0x88, 0x34, 0xeb, 0xbc, 0x5e, 0xe1, 0xb7, 0x5b, 0x82, 0xa6, 0x77, 0x8f, 0x81, 0xe3, 0x58, 0xa0, 0x0e, 0x04, 0xca, 0xcd, 0xfb, 0xbe, 0x28, 0x7e, 0x95, 0x15, 0x79, 0x2e, 0xc2, 0x76}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - azure_AzureTDX = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xd7, 0xa4, 0x27, 0x21, 0x96, 0x85, 0xf9, 0xa9, 0x4d, 0x9f, 0x5b, 0xcb, 0xb1, 0x97, 0xf1, 0x5b, 0x90, 0x49, 0xe3, 0xea, 0xaa, 0xf7, 0xa6, 0x98, 0xf6, 0x9e, 0x5c, 0x84, 0x20, 0x3e, 0xc8, 0xa6}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x8f, 0x94, 0x38, 0x33, 0x1d, 0xf2, 0x1a, 0x0b, 0x4e, 0x54, 0xf9, 0xd2, 0xea, 0x85, 0x09, 0x86, 0x7a, 0x7e, 0x92, 0x79, 0x6f, 0x7d, 0x29, 0xa6, 0x59, 0x23, 0xd0, 0x81, 0x94, 0xaa, 0xff, 0x0b}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xfb, 0x6e, 0xc9, 0x39, 0xca, 0xa8, 0x0d, 0xa7, 0xd7, 0x3b, 0x12, 0xf0, 0x88, 0x32, 0x8e, 0x2e, 0x56, 0xa6, 0x0a, 0xcc, 0x77, 0xa3, 0x15, 0xb6, 0x28, 0x2d, 0x7a, 0x85, 0xa2, 0xe3, 0x00, 0xd5}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + aws_AWSNitroTPM = M{0: {Expected: []byte{0x73, 0x7f, 0x76, 0x7a, 0x12, 0xf5, 0x4e, 0x70, 0xee, 0xcb, 0xc8, 0x68, 0x40, 0x11, 0x32, 0x3a, 0xe2, 0xfe, 0x2d, 0xd9, 0xf9, 0x07, 0x85, 0x57, 0x79, 0x69, 0xd7, 0xa2, 0x01, 0x3e, 0x8c, 0x12}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x43, 0xb6, 0xdb, 0x79, 0x3d, 0xb5, 0x57, 0x9e, 0x94, 0xe7, 0xc6, 0x87, 0x64, 0x7f, 0x65, 0xf6, 0x75, 0x04, 0x21, 0x2c, 0x49, 0x12, 0x9d, 0x1f, 0xb2, 0x17, 0x81, 0x9d, 0x00, 0x14, 0x41, 0x2f}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xb2, 0x5e, 0x20, 0xb7, 0x03, 0xdf, 0x40, 0x70, 0x5a, 0xcb, 0x96, 0x80, 0x90, 0x42, 0x2d, 0x5a, 0xb7, 0x2c, 0x21, 0x67, 0x16, 0x63, 0xa6, 0x0a, 0x99, 0x56, 0xb0, 0x7f, 0x62, 0x37, 0x00, 0x96}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x6f, 0x38, 0x6d, 0xcd, 0xb9, 0x26, 0x82, 0x82, 0xbe, 0x59, 0x8a, 0x09, 0x7b, 0xb2, 0xeb, 0x64, 0xfc, 0xf6, 0x9b, 0xcd, 0x6c, 0x3e, 0x1d, 0x42, 0x52, 0xd2, 0xb8, 0xaa, 0x17, 0x77, 0x65, 0x16}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + aws_AWSSEVSNP = M{0: {Expected: []byte{0xd6, 0xdf, 0x85, 0x53, 0x58, 0xf5, 0xb1, 0x0f, 0x06, 0xf0, 0xfa, 0xb3, 0xf4, 0x08, 0xad, 0x26, 0xcd, 0x16, 0x5a, 0x29, 0x49, 0xba, 0xd6, 0x9e, 0x2c, 0xc7, 0x56, 0x92, 0x52, 0x9e, 0x66, 0x2a}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x0e, 0xe6, 0x59, 0x44, 0xc6, 0x86, 0x71, 0xc1, 0x51, 0x19, 0xf6, 0x54, 0xc2, 0x1a, 0xfa, 0xd2, 0xd0, 0x71, 0xcd, 0xde, 0x5a, 0x3c, 0x39, 0x5c, 0xce, 0xa7, 0x24, 0xf3, 0x6c, 0xc4, 0x68, 0x4a}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x8a, 0xb8, 0x86, 0xf4, 0x16, 0x80, 0xc1, 0x34, 0x96, 0x5b, 0x25, 0xbc, 0x48, 0xb3, 0x0c, 0x58, 0x64, 0x1a, 0x96, 0xab, 0x29, 0xf1, 0x00, 0xef, 0x89, 0x2a, 0x1a, 0x13, 0xca, 0x4c, 0xda, 0x24}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x28, 0x3d, 0x92, 0xa3, 0x77, 0x42, 0xf8, 0x3c, 0x4b, 0xa2, 0xda, 0xad, 0xdf, 0x5e, 0xf9, 0x1f, 0x9c, 0x9e, 0x29, 0x3b, 0xd4, 0x4b, 0x14, 0x1f, 0xab, 0x68, 0x83, 0xe3, 0x05, 0x65, 0x3a, 0x57}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + azure_AzureSEVSNP = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xb0, 0x68, 0xed, 0x70, 0x71, 0x65, 0xb3, 0x8f, 0x99, 0x8e, 0xdb, 0xec, 0x60, 0xc9, 0x6b, 0x94, 0x47, 0x94, 0x04, 0x19, 0x4d, 0xf5, 0x03, 0xee, 0xcf, 0x8d, 0x80, 0x69, 0xe5, 0x81, 0x80, 0xee}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x30, 0xe5, 0x78, 0x5f, 0xd9, 0x93, 0xd0, 0x57, 0x9c, 0x05, 0x57, 0x14, 0xf4, 0xa1, 0xf9, 0xed, 0x36, 0x56, 0xfb, 0xbb, 0x21, 0x2e, 0x47, 0x40, 0x70, 0xed, 0x2f, 0xd9, 0x61, 0xb6, 0x02, 0x36}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xe2, 0x58, 0xa4, 0xa5, 0x71, 0x07, 0xee, 0x35, 0x40, 0x6b, 0x4b, 0x01, 0x51, 0xb0, 0xdc, 0x63, 0x9f, 0x73, 0x1e, 0x52, 0x37, 0xb8, 0x93, 0x8b, 0x83, 0x25, 0x63, 0x58, 0xe7, 0xd4, 0xd5, 0x4b}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + azure_AzureTDX = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xc5, 0xd9, 0xad, 0x81, 0x3f, 0x92, 0xd3, 0xc6, 0x49, 0x12, 0x47, 0x13, 0x88, 0x40, 0xf1, 0x5f, 0x28, 0xd8, 0x12, 0x34, 0xc9, 0xc2, 0x12, 0x7c, 0xd0, 0x95, 0x32, 0x10, 0xf3, 0x8d, 0x16, 0x95}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xf1, 0x22, 0xd0, 0x9a, 0xe9, 0xd9, 0x54, 0x60, 0x15, 0x40, 0xb7, 0x38, 0xda, 0xc2, 0xdc, 0x6e, 0x53, 0xc5, 0xa7, 0x4a, 0xdc, 0x13, 0x87, 0xe4, 0x95, 0x96, 0x58, 0x10, 0x6a, 0x27, 0xe7, 0x4c}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x16, 0x06, 0xaa, 0xdb, 0xfd, 0x18, 0x7c, 0xa8, 0xb5, 0xcd, 0xd7, 0x2a, 0x17, 0x66, 0xea, 0x55, 0x1f, 0xfd, 0x1c, 0x80, 0x49, 0xd9, 0x32, 0xc9, 0x94, 0x78, 0xa4, 0x76, 0x13, 0x8c, 0x32, 0xf1}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} azure_AzureTrustedLaunch M - gcp_GCPSEVES = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x78, 0x2f, 0xa5, 0xdf, 0x53, 0x65, 0x67, 0x4f, 0x56, 0x16, 0x87, 0x36, 0xff, 0x01, 0x04, 0xe6, 0x04, 0xc3, 0x8c, 0xb6, 0x97, 0xde, 0x62, 0x25, 0xc8, 0xab, 0x6a, 0xe2, 0xab, 0xe8, 0x2b, 0x84}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xd5, 0x2b, 0x7a, 0xce, 0xf7, 0x34, 0xf3, 0x3e, 0x15, 0x88, 0x51, 0x36, 0x3d, 0xd9, 0xfc, 0xcf, 0x25, 0xb0, 0x95, 0x0f, 0x7a, 0x49, 0x78, 0xfb, 0x5c, 0x74, 0x93, 0x9b, 0x95, 0x9f, 0x2d, 0x37}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xd3, 0x46, 0x24, 0x85, 0xb0, 0xac, 0x6e, 0x84, 0x13, 0x53, 0xb3, 0x77, 0x8c, 0x51, 0x50, 0x0c, 0x8f, 0xb3, 0x37, 0x70, 0xe7, 0x0c, 0x83, 0xc5, 0x42, 0x47, 0x3f, 0x99, 0x56, 0x58, 0x95, 0x83}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - gcp_GCPSEVSNP = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x40, 0xab, 0xeb, 0xaf, 0x92, 0x65, 0x20, 0x4d, 0x1e, 0x4c, 0x43, 0x78, 0x76, 0xe4, 0xfc, 0xff, 0x22, 0x66, 0x1b, 0x15, 0x29, 0x1c, 0x64, 0xe8, 0xd1, 0x3e, 0x1b, 0x60, 0xa5, 0x7e, 0x9f, 0x8c}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x4a, 0x0b, 0xc5, 0xe6, 0x15, 0x3b, 0xf4, 0x81, 0x01, 0x07, 0xbe, 0x65, 0xf7, 0x3b, 0x25, 0x1b, 0x85, 0x90, 0x45, 0xd6, 0x88, 0xce, 0xc4, 0x22, 0x08, 0x56, 0x91, 0x3d, 0x06, 0x00, 0xfd, 0x9e}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x12, 0x6e, 0x0b, 0xc8, 0x0c, 0x69, 0x29, 0x18, 0x8e, 0xd1, 0x29, 0x72, 0x4b, 0x6c, 0xba, 0x8c, 0xf4, 0xb5, 0x06, 0x5e, 0xa8, 0x0c, 0x49, 0xa1, 0xce, 0xb9, 0xd5, 0xdc, 0x67, 0xf0, 0x1f, 0xb6}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - openstack_QEMUVTPM = M{4: {Expected: []byte{0x9f, 0x95, 0x8f, 0x98, 0xa5, 0xe6, 0x30, 0x94, 0xcb, 0x32, 0xff, 0x52, 0x52, 0x81, 0xcd, 0x3f, 0x70, 0x3e, 0xa2, 0x66, 0xff, 0x0c, 0x8d, 0xea, 0x66, 0xfa, 0x78, 0xa0, 0x5e, 0x26, 0x62, 0x06}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xce, 0x63, 0xd7, 0x7b, 0x6d, 0xe0, 0xc2, 0xc8, 0xcb, 0xbb, 0xe0, 0xa3, 0x31, 0xab, 0xff, 0xfa, 0x42, 0x65, 0xdf, 0x36, 0x7b, 0xbc, 0xb1, 0x54, 0x11, 0xeb, 0xc5, 0xa2, 0x44, 0xc9, 0x18, 0x67}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xe8, 0xad, 0xba, 0x5a, 0x0a, 0xa4, 0x5e, 0xfb, 0x60, 0xa1, 0x31, 0x96, 0x55, 0xf8, 0xd6, 0xd3, 0x5e, 0x81, 0xc8, 0xf7, 0xf9, 0x20, 0xb2, 0x90, 0x2a, 0xd0, 0x3f, 0x4d, 0xf6, 0x3d, 0x02, 0xaa}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + gcp_GCPSEVES = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x2b, 0x4d, 0x39, 0xd2, 0x79, 0x27, 0xe8, 0xff, 0x7a, 0x3e, 0x96, 0x70, 0x4a, 0xc3, 0x47, 0x26, 0xeb, 0x39, 0x7d, 0x2e, 0xbb, 0xae, 0xf6, 0x7d, 0xab, 0x3e, 0x2d, 0x05, 0x20, 0xf9, 0x02, 0xa1}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xb8, 0xf3, 0xd9, 0x17, 0xe7, 0x91, 0x90, 0x76, 0xae, 0x7a, 0xce, 0x48, 0x4f, 0xaf, 0xdd, 0x9f, 0xd3, 0x78, 0x60, 0x93, 0x5f, 0x72, 0xec, 0x57, 0x90, 0xa0, 0x2b, 0x1d, 0x5c, 0xc3, 0xc5, 0x0f}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xec, 0x9a, 0xab, 0xe9, 0xd9, 0xd8, 0xd9, 0xd6, 0x63, 0x9d, 0x78, 0x20, 0x16, 0x92, 0xe2, 0xf4, 0xcb, 0xec, 0xf6, 0xfc, 0x0e, 0xe2, 0x80, 0xe8, 0xf7, 0x7a, 0x03, 0xb3, 0x6c, 0x5e, 0x3e, 0x3b}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + gcp_GCPSEVSNP = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x12, 0x98, 0x00, 0x8f, 0xa6, 0x82, 0x7e, 0x80, 0x7b, 0x10, 0xe7, 0xcd, 0xbb, 0x8c, 0x97, 0x93, 0xc1, 0xa9, 0x8b, 0x50, 0x99, 0x1a, 0x7c, 0x24, 0xdf, 0x0a, 0xa7, 0x8c, 0xe3, 0xed, 0xd5, 0xfe}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x18, 0x1f, 0xdb, 0x21, 0xad, 0xba, 0x89, 0x6c, 0xbf, 0x52, 0x68, 0x26, 0x67, 0x1a, 0xd4, 0xb6, 0x05, 0x8b, 0x70, 0x42, 0xab, 0x26, 0x63, 0x49, 0xfd, 0x5d, 0x9f, 0xbe, 0xea, 0xa4, 0x12, 0x03}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xb9, 0xa0, 0x6c, 0x3f, 0x1b, 0x95, 0xc5, 0x5e, 0x38, 0x80, 0xb0, 0x12, 0x41, 0x88, 0x66, 0x43, 0x9c, 0xa2, 0xc0, 0x65, 0x29, 0x9c, 0x93, 0x14, 0xfe, 0x49, 0x3b, 0x0f, 0xff, 0xdd, 0xcc, 0xec}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + openstack_QEMUVTPM = M{4: {Expected: []byte{0xc3, 0xb3, 0x01, 0x07, 0x71, 0x61, 0x37, 0x66, 0x56, 0xa1, 0xce, 0x51, 0x93, 0x14, 0xd9, 0x59, 0xbf, 0x7a, 0xc3, 0xd0, 0x9f, 0xd8, 0x34, 0xb7, 0x7a, 0x0b, 0x48, 0xc1, 0xc2, 0xa1, 0x6e, 0x83}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x13, 0x34, 0x8c, 0x05, 0x86, 0xea, 0xa6, 0x22, 0xcf, 0x06, 0xf6, 0x50, 0x75, 0xea, 0x85, 0xba, 0x3d, 0x95, 0xe8, 0xcf, 0x43, 0x77, 0x63, 0xec, 0x44, 0x3e, 0xb9, 0xea, 0x22, 0x48, 0x6a, 0xcd}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xd9, 0x3b, 0x0b, 0x33, 0x44, 0x05, 0x9e, 0x42, 0x82, 0xf0, 0xdf, 0xe5, 0x77, 0x60, 0x01, 0x67, 0x9e, 0xfe, 0x49, 0xe4, 0x7a, 0xd0, 0x4b, 0xb8, 0xc7, 0x4d, 0xc1, 0x5c, 0xad, 0x23, 0x80, 0x09}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} qemu_QEMUTDX M - qemu_QEMUVTPM = M{4: {Expected: []byte{0x74, 0x41, 0x6d, 0x97, 0x76, 0x56, 0x22, 0xdc, 0xdb, 0x71, 0xab, 0x99, 0x11, 0xe1, 0x99, 0x98, 0x5b, 0x9d, 0x75, 0xc0, 0x9e, 0x56, 0xdb, 0xdb, 0x10, 0x7e, 0x1e, 0xbf, 0x89, 0x33, 0x0f, 0x17}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xf4, 0xa0, 0x26, 0xb1, 0x77, 0xf5, 0xa9, 0x93, 0x13, 0xbf, 0x68, 0x72, 0xa7, 0x45, 0xf3, 0xd8, 0x4a, 0xbb, 0x44, 0x29, 0xd7, 0x5d, 0xf6, 0x7d, 0x42, 0x3e, 0x3b, 0x36, 0xfa, 0x7e, 0x75, 0x63}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xd1, 0x5e, 0xb9, 0xb4, 0xd5, 0xff, 0x6f, 0x60, 0xaa, 0x1c, 0x93, 0xe4, 0x45, 0x8b, 0x76, 0xd6, 0xe3, 0x8f, 0x90, 0x06, 0xb4, 0x1b, 0xe5, 0xed, 0x8e, 0x0a, 0x37, 0xec, 0xde, 0x84, 0xd8, 0xc8}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + qemu_QEMUVTPM = M{4: {Expected: []byte{0xbd, 0xcc, 0xb5, 0x34, 0x12, 0xbf, 0xbf, 0x08, 0x7f, 0xb1, 0xe6, 0xe8, 0x23, 0x42, 0xa4, 0xc0, 0x1a, 0xe4, 0xc6, 0x0d, 0x97, 0x44, 0x0b, 0xb7, 0xba, 0x03, 0x02, 0x84, 0xf3, 0xea, 0x0a, 0xad}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xd1, 0xf1, 0x0f, 0x36, 0x4a, 0xc9, 0x50, 0xa6, 0xb4, 0x22, 0x5e, 0xcf, 0x87, 0xd2, 0x12, 0xdd, 0xaa, 0x3d, 0xff, 0xc0, 0x59, 0xfb, 0xc3, 0xf5, 0x7a, 0xe7, 0xfb, 0x8e, 0x74, 0xf2, 0x6a, 0x2f}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xa5, 0x8e, 0x1a, 0xe6, 0x7d, 0x24, 0x42, 0xd3, 0xc9, 0xeb, 0xef, 0x0c, 0x86, 0x21, 0xc3, 0x05, 0x9b, 0xae, 0x83, 0x77, 0x6f, 0x4e, 0xd8, 0xc8, 0x4d, 0x66, 0x11, 0xf7, 0x61, 0x48, 0x6a, 0x3d}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} ) From ab2782a2a2be27fa1cfaec9634f351ddcf5e9bc3 Mon Sep 17 00:00:00 2001 From: edgelessci <71088502+edgelessci@users.noreply.github.com> Date: Wed, 4 Dec 2024 08:30:14 +0100 Subject: [PATCH 004/311] Post v2.20.0 release updates to main (#3525) * docs: release 2.20 * chore: update version.txt to v2.21.0-pre * chore: update CI for v2.20.0 --------- Co-authored-by: edgelessci --- .github/workflows/e2e-test-release.yml | 2 +- .github/workflows/e2e-test-weekly.yml | 2 +- .../_media/SLSA-Badge-full-level3.svg | 47 + .../_media/benchmark_fio_azure_bw.png | Bin 0 -> 30975 bytes .../_media/benchmark_fio_azure_iops.png | Bin 0 -> 29702 bytes .../_media/benchmark_fio_gcp_bw.png | Bin 0 -> 30401 bytes .../_media/benchmark_fio_gcp_iops.png | Bin 0 -> 30221 bytes .../_media/benchmark_net_p2p_azure.png | Bin 0 -> 36902 bytes .../_media/benchmark_net_p2p_gcp.png | Bin 0 -> 36961 bytes .../_media/benchmark_net_p2svc_azure.png | Bin 0 -> 38309 bytes .../_media/benchmark_net_p2svc_gcp.png | Bin 0 -> 38395 bytes .../benchmark_vault/5replicas/max_latency.png | Bin 0 -> 21327 bytes .../5replicas/mean_latency.png | Bin 0 -> 18809 bytes .../benchmark_vault/5replicas/min_latency.png | Bin 0 -> 21414 bytes .../benchmark_vault/5replicas/p99_latency.png | Bin 0 -> 24062 bytes .../_media/concept-constellation.svg | 460 ++++++++++ .../version-2.20/_media/concept-managed.svg | 591 ++++++++++++ .../_media/constellation_oneline.svg | 52 ++ .../version-2.20/_media/example-emojivoto.jpg | Bin 0 -> 141236 bytes .../_media/example-online-boutique.jpg | Bin 0 -> 263458 bytes .../recovery-gcp-serial-console-link.png | Bin 0 -> 46134 bytes .../version-2.20/_media/tcb.svg | 535 +++++++++++ .../version-2.20/architecture/attestation.md | 409 +++++++++ .../architecture/encrypted-storage.md | 62 ++ .../version-2.20/architecture/images.md | 49 + .../version-2.20/architecture/keys.md | 130 +++ .../architecture/microservices.md | 73 ++ .../version-2.20/architecture/networking.md | 22 + .../architecture/observability.md | 74 ++ .../architecture/orchestration.md | 83 ++ .../version-2.20/architecture/overview.md | 30 + .../version-2.20/architecture/versions.md | 21 + .../version-2.20/getting-started/examples.md | 6 + .../getting-started/examples/emojivoto.md | 22 + .../examples/filestash-s3proxy.md | 107 +++ .../examples/horizontal-scaling.md | 98 ++ .../examples/online-boutique.md | 29 + .../getting-started/first-steps-local.md | 277 ++++++ .../getting-started/first-steps.md | 229 +++++ .../version-2.20/getting-started/install.md | 439 +++++++++ .../getting-started/marketplaces.md | 56 ++ docs/versioned_docs/version-2.20/intro.md | 34 + .../version-2.20/overview/clouds.md | 66 ++ .../overview/confidential-kubernetes.md | 42 + .../version-2.20/overview/license.md | 33 + .../overview/performance/application.md | 102 +++ .../overview/performance/compute.md | 11 + .../version-2.20/overview/performance/io.md | 204 +++++ .../overview/performance/performance.md | 17 + .../version-2.20/overview/product.md | 12 + .../overview/security-benefits.md | 22 + .../version-2.20/reference/cli.md | 844 ++++++++++++++++++ .../version-2.20/reference/migration.md | 128 +++ .../version-2.20/reference/slsa.md | 73 ++ .../version-2.20/reference/terraform.md | 37 + .../version-2.20/workflows/cert-manager.md | 13 + .../version-2.20/workflows/config.md | 353 ++++++++ .../version-2.20/workflows/create.md | 93 ++ .../version-2.20/workflows/lb.md | 28 + .../version-2.20/workflows/recovery.md | 179 ++++ .../workflows/reproducible-builds.md | 63 ++ .../version-2.20/workflows/s3proxy.md | 58 ++ .../version-2.20/workflows/sbom.md | 93 ++ .../version-2.20/workflows/scale.md | 122 +++ .../version-2.20/workflows/storage.md | 281 ++++++ .../version-2.20/workflows/terminate.md | 60 ++ .../workflows/terraform-provider.md | 140 +++ .../version-2.20/workflows/troubleshooting.md | 151 ++++ .../version-2.20/workflows/trusted-launch.md | 54 ++ .../version-2.20/workflows/upgrade.md | 110 +++ .../version-2.20/workflows/verify-cli.md | 129 +++ .../version-2.20/workflows/verify-cluster.md | 97 ++ .../version-2.20-sidebars.json | 304 +++++++ docs/versions.json | 1 + version.txt | 2 +- 75 files changed, 7858 insertions(+), 3 deletions(-) create mode 100644 docs/versioned_docs/version-2.20/_media/SLSA-Badge-full-level3.svg create mode 100644 docs/versioned_docs/version-2.20/_media/benchmark_fio_azure_bw.png create mode 100644 docs/versioned_docs/version-2.20/_media/benchmark_fio_azure_iops.png create mode 100644 docs/versioned_docs/version-2.20/_media/benchmark_fio_gcp_bw.png create mode 100644 docs/versioned_docs/version-2.20/_media/benchmark_fio_gcp_iops.png create mode 100644 docs/versioned_docs/version-2.20/_media/benchmark_net_p2p_azure.png create mode 100644 docs/versioned_docs/version-2.20/_media/benchmark_net_p2p_gcp.png create mode 100644 docs/versioned_docs/version-2.20/_media/benchmark_net_p2svc_azure.png create mode 100644 docs/versioned_docs/version-2.20/_media/benchmark_net_p2svc_gcp.png create mode 100644 docs/versioned_docs/version-2.20/_media/benchmark_vault/5replicas/max_latency.png create mode 100644 docs/versioned_docs/version-2.20/_media/benchmark_vault/5replicas/mean_latency.png create mode 100644 docs/versioned_docs/version-2.20/_media/benchmark_vault/5replicas/min_latency.png create mode 100644 docs/versioned_docs/version-2.20/_media/benchmark_vault/5replicas/p99_latency.png create mode 100644 docs/versioned_docs/version-2.20/_media/concept-constellation.svg create mode 100644 docs/versioned_docs/version-2.20/_media/concept-managed.svg create mode 100644 docs/versioned_docs/version-2.20/_media/constellation_oneline.svg create mode 100644 docs/versioned_docs/version-2.20/_media/example-emojivoto.jpg create mode 100644 docs/versioned_docs/version-2.20/_media/example-online-boutique.jpg create mode 100644 docs/versioned_docs/version-2.20/_media/recovery-gcp-serial-console-link.png create mode 100644 docs/versioned_docs/version-2.20/_media/tcb.svg create mode 100644 docs/versioned_docs/version-2.20/architecture/attestation.md create mode 100644 docs/versioned_docs/version-2.20/architecture/encrypted-storage.md create mode 100644 docs/versioned_docs/version-2.20/architecture/images.md create mode 100644 docs/versioned_docs/version-2.20/architecture/keys.md create mode 100644 docs/versioned_docs/version-2.20/architecture/microservices.md create mode 100644 docs/versioned_docs/version-2.20/architecture/networking.md create mode 100644 docs/versioned_docs/version-2.20/architecture/observability.md create mode 100644 docs/versioned_docs/version-2.20/architecture/orchestration.md create mode 100644 docs/versioned_docs/version-2.20/architecture/overview.md create mode 100644 docs/versioned_docs/version-2.20/architecture/versions.md create mode 100644 docs/versioned_docs/version-2.20/getting-started/examples.md create mode 100644 docs/versioned_docs/version-2.20/getting-started/examples/emojivoto.md create mode 100644 docs/versioned_docs/version-2.20/getting-started/examples/filestash-s3proxy.md create mode 100644 docs/versioned_docs/version-2.20/getting-started/examples/horizontal-scaling.md create mode 100644 docs/versioned_docs/version-2.20/getting-started/examples/online-boutique.md create mode 100644 docs/versioned_docs/version-2.20/getting-started/first-steps-local.md create mode 100644 docs/versioned_docs/version-2.20/getting-started/first-steps.md create mode 100644 docs/versioned_docs/version-2.20/getting-started/install.md create mode 100644 docs/versioned_docs/version-2.20/getting-started/marketplaces.md create mode 100644 docs/versioned_docs/version-2.20/intro.md create mode 100644 docs/versioned_docs/version-2.20/overview/clouds.md create mode 100644 docs/versioned_docs/version-2.20/overview/confidential-kubernetes.md create mode 100644 docs/versioned_docs/version-2.20/overview/license.md create mode 100644 docs/versioned_docs/version-2.20/overview/performance/application.md create mode 100644 docs/versioned_docs/version-2.20/overview/performance/compute.md create mode 100644 docs/versioned_docs/version-2.20/overview/performance/io.md create mode 100644 docs/versioned_docs/version-2.20/overview/performance/performance.md create mode 100644 docs/versioned_docs/version-2.20/overview/product.md create mode 100644 docs/versioned_docs/version-2.20/overview/security-benefits.md create mode 100644 docs/versioned_docs/version-2.20/reference/cli.md create mode 100644 docs/versioned_docs/version-2.20/reference/migration.md create mode 100644 docs/versioned_docs/version-2.20/reference/slsa.md create mode 100644 docs/versioned_docs/version-2.20/reference/terraform.md create mode 100644 docs/versioned_docs/version-2.20/workflows/cert-manager.md create mode 100644 docs/versioned_docs/version-2.20/workflows/config.md create mode 100644 docs/versioned_docs/version-2.20/workflows/create.md create mode 100644 docs/versioned_docs/version-2.20/workflows/lb.md create mode 100644 docs/versioned_docs/version-2.20/workflows/recovery.md create mode 100644 docs/versioned_docs/version-2.20/workflows/reproducible-builds.md create mode 100644 docs/versioned_docs/version-2.20/workflows/s3proxy.md create mode 100644 docs/versioned_docs/version-2.20/workflows/sbom.md create mode 100644 docs/versioned_docs/version-2.20/workflows/scale.md create mode 100644 docs/versioned_docs/version-2.20/workflows/storage.md create mode 100644 docs/versioned_docs/version-2.20/workflows/terminate.md create mode 100644 docs/versioned_docs/version-2.20/workflows/terraform-provider.md create mode 100644 docs/versioned_docs/version-2.20/workflows/troubleshooting.md create mode 100644 docs/versioned_docs/version-2.20/workflows/trusted-launch.md create mode 100644 docs/versioned_docs/version-2.20/workflows/upgrade.md create mode 100644 docs/versioned_docs/version-2.20/workflows/verify-cli.md create mode 100644 docs/versioned_docs/version-2.20/workflows/verify-cluster.md create mode 100644 docs/versioned_sidebars/version-2.20-sidebars.json diff --git a/.github/workflows/e2e-test-release.yml b/.github/workflows/e2e-test-release.yml index dce7c9913..716c9138d 100644 --- a/.github/workflows/e2e-test-release.yml +++ b/.github/workflows/e2e-test-release.yml @@ -409,7 +409,7 @@ jobs: fail-fast: false max-parallel: 1 matrix: - fromVersion: ["v2.19.3"] + fromVersion: ["v2.20.0"] attestationVariant: ["gcp-sev-snp", "azure-sev-snp", "azure-tdx", "aws-sev-snp"] name: Run upgrade tests secrets: inherit diff --git a/.github/workflows/e2e-test-weekly.yml b/.github/workflows/e2e-test-weekly.yml index 587abd129..117b2bcce 100644 --- a/.github/workflows/e2e-test-weekly.yml +++ b/.github/workflows/e2e-test-weekly.yml @@ -420,7 +420,7 @@ jobs: fail-fast: false max-parallel: 1 matrix: - fromVersion: ["v2.19.3"] + fromVersion: ["v2.20.0"] attestationVariant: ["gcp-sev-snp", "azure-sev-snp", "azure-tdx", "aws-sev-snp"] name: Run upgrade tests secrets: inherit diff --git a/docs/versioned_docs/version-2.20/_media/SLSA-Badge-full-level3.svg b/docs/versioned_docs/version-2.20/_media/SLSA-Badge-full-level3.svg new file mode 100644 index 000000000..7154d4a13 --- /dev/null +++ b/docs/versioned_docs/version-2.20/_media/SLSA-Badge-full-level3.svg @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/versioned_docs/version-2.20/_media/benchmark_fio_azure_bw.png b/docs/versioned_docs/version-2.20/_media/benchmark_fio_azure_bw.png new file mode 100644 index 0000000000000000000000000000000000000000..a82ebe2d0511dc0a54f663e23c25dc275edaa15c GIT binary patch literal 30975 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�awQ>N&Uf?MYaB0>911Z$XQDz2h_WnZ`HC#RNE z!^--ER8y`idG#DJ^S*`AQZ)A?B2TZ|+U9cym9>-1W^uOW7)R$)K(^14rJp}O1A@Q{ zrD^>B&i3~9ZwxdFrH58lL-w19_n8aC@{_8<#c;ask%ydW%RddczL*aLqkmYN)lE0BH1lmwgU=85$AaQkE| z$SA!pvu{qynrTubh)%=0x;k&Y^)UO=M~e#%SZ((lWO%{q7xTG2qf>|%t@mm~3CN3^ zB;*8ARS=rkK2EE0e&mQyn6ScOm$F^=^?VT&0`)6)?tZ`SpR&h}CF@FdK|>%7xxfiU zx5%czMh3VW2Z$hyW>-x#Aym}S^GjXH)v>N=xpAZIluKVZBI9qG{dRv4lav6lq#;*& zJE5OSoklEO$qBIcmXjfQ;lZ_;sps*hk_p!0mCbP>Q7K(j3Qx&-mLWjRC1eVu8h+zk zgZHp3-edegsM#yW8p;yYBy5|tp7!>c4w~&DSGKS1X}gxuCpY@tcH^hx3qCUN!^4So z?GFP~x3WJzytc*eJMau)MpDwF(lonTEnJuREW26S`p$-zQk+tF9zF6OpItsBhB{*z z?QPYRo+D@ClT1tMUhQXPzZFTzns2`zK69c;0XYg0(_9V(H_;M$4~?EsytW(_KoWp# z@t^?#7qfr*G#4*qBsS`-B}M%=gOG4FRcVtKr&Q)3PRV9QL2RtaK{s<=!FKN7Z=;9l zX->H9b`ZpGFaCGo?JMr35xAw5R&ULgGSc1Y(e68OOQCn2#utg za)wNd_o&;{JHoSw33ThbI|FvL-R)PN;W5NKg{r|22tSQPGc>+a*51m$t+;1T;iL2z zq^+9MCO}T9&0Mpbbq*8n*5=I5xXC)GO0Y8qU!hWnAK)8%KXQT!%Cf|(fs68<&3e|# z^ZAZ@*aDUsvn_?2_M<*w{91**85E)G@70ePN7BSCmMOQGabyl|9@%dJV=my!%^~JS zmRX18${kV#puUvvWjLO|^X0nv0VMXc(1Q8Z$ie@dotLr`j8no=EmIAwyLI|n|IjZ^ zzKRH*%eHNF?-Nglh{%W;-s*IpYp3x#M>B3EZ-SY=g&=9A%^!YYKQ--4?Nz(joabN9 z&n_bS400Dfz{t&$k%?V+QoJZLVDy!YPx0mnEs3o5*AYWn&FeII`v5mBz<&x38|JOx|aQ$U5bqOUiL;=5ol9X+z3G8-vhVV*gk&# z1U?59UF0}`A61SBVG4&ZJa}-I(`iL;3cKJk^a@48$xyK3+BbLW`V@eoy|u8Qw&}&- z&o7ZL5L|a+wsPvFgkAP8^8-z@)NKMC9A2t%obtcO8>`RH=M@&Z0X4?}1)X!x(tz9G|N6yzoOpFvTL73im?9OqLZVg3 z@6NqZ_ZuafRZ`(tXnC0gHwn3t(!~!uRBX)(Z}LaB0gV%|~fZl?QN@Yvb!b6~j$m8;wv(vZV&0mlS7;Zx- zm*TA1E_9!Yej>Wc=K4A%5K2Ib@qEkVN`#-F(U1IsFuS0dScV zKA@LX(bFloizcx~b@r&M1GP|A4;{4vRy|JyT5VV|@xK~ooxJ+*|3@YNZ$h`er&n&p Wd&#xuzHQJ)b^FlcgN%ubHvR|v6RGR~ literal 0 HcmV?d00001 diff --git a/docs/versioned_docs/version-2.20/_media/benchmark_fio_azure_iops.png b/docs/versioned_docs/version-2.20/_media/benchmark_fio_azure_iops.png new file mode 100644 index 0000000000000000000000000000000000000000..1723257a812a773fea286d512d38ed9186a9a46e GIT binary patch literal 29702 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 literal 0 HcmV?d00001 diff --git a/docs/versioned_docs/version-2.20/_media/benchmark_fio_gcp_bw.png b/docs/versioned_docs/version-2.20/_media/benchmark_fio_gcp_bw.png new file mode 100644 index 0000000000000000000000000000000000000000..4f0ecc94bb43d5f9534300605a74aca374da4c3c GIT binary patch literal 30401 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 literal 0 HcmV?d00001 diff --git a/docs/versioned_docs/version-2.20/_media/benchmark_net_p2p_azure.png b/docs/versioned_docs/version-2.20/_media/benchmark_net_p2p_azure.png new file mode 100644 index 0000000000000000000000000000000000000000..9130349c764286e66108a54ffa77a2079807a57b GIT binary patch literal 36902 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 RMnD*58gDV~*w6Df{tphRb0+`* literal 0 HcmV?d00001 diff --git a/docs/versioned_docs/version-2.20/_media/benchmark_net_p2p_gcp.png b/docs/versioned_docs/version-2.20/_media/benchmark_net_p2p_gcp.png new file mode 100644 index 0000000000000000000000000000000000000000..a41557e96c15e5407beadc5011a3f3fa6aaaa71d GIT binary patch literal 36961 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 w{l|Gl!_|L&u}A+)itsPO`I2 zbi=ua-`@M2U;8>g_St8D*TuJ7E?~Yf#`E0uj7OK`FKk-RxSo!VZWBdXN|BCkRUaMQ ziiyA0;%}0U&~xD*!nWtsY?UnZZ5^&z-=vefW@~9`VQXr1{cro5);2~K=6u{j+{cgo zZD?z2X(PhJWA-24z-?h|z$3OhX$yYII!kGF8#+3MYvgN1jAXPC9o@@q6sgl!976`% z90E4=E-#NZG!+aCsIbdONj;L9*mdwSRr>Un&@HS|o9;-xk=nHG(L3WaQng#Q=DSTW z-s=l}H*nNsdTH^eLyt@Ou&`!hda<)ak_op-PgtN!PZ%HHNcKo}vA!4YN_;#W9pyV` zEZ?6$(fw7qg8bq4U#oGi_@5))O4~nw5Tjcm^5+lCx9FJu{DI-rtXItoZj|L-$|$Ykqw6W|0i5RhJel4;76Tbr@!~6Kp;BuMcOa%Xe{j$*C$| z6!5lO=KXQk8O!{c&L<*nbGC{GU)XRL(pSrZ1boZ%mBPfFs3M${PD;lT{TKIDzq8`C zvfrBu1|L;T3aM3pq`bVecr&%>Mru>1_(+Ogae@=OLRiS}K%2@~C3d&P$p#sJ?oji# zoR=}Q_rYRL@6+9iy_sBCX|6BEx=W(lavkE&++Q!^vE-^~z|OeRR!n7(eW}s>szpaZ zBEF$SKlNKl$wfYcaxcH0=5!Orla{Y!ULK9K?XTuI_jrf%Kx}kvoHD0bM}c^K-hMI1 zOWL{i%8$0Oy%03hShITd5r^Sc=kAxPJGO13{>@&sX2Y(SYo8u`4;D&ZxoXu*2{-4R zTpCwcJQh;yhnlYT4aF(PGtZp45zaI4V`wN5pBH;2R&k&`Ki7M| z@V4acl~ym=6__)NUneIgzc;8zvhMzF)K~eM+3B_W{ylnWS3j<-OV-tO8vAwm>eW}( zQF8JB+}{vyN2}K;bazuU;MMWt(M|H&%NHm8{GdWBZ&kDc3vJr!$A{Z*%jMs9I+}Tl z%*@YoYG#w|u3KmLnPgLSfYZWOLueSCVPL-O>vxa04ukuoo3EDC1z@6^u~F3r*2 zH<>c>UjKZSD;f`Ppgu9!n^`>0d2*n?J>O;Bi%+Ys-zt{Ik9e{AiaMBQ8XY`%ur%1B zz=(A(MIU!uRXy00T709#uS{mU-S4R>L0yl<^cFkU*>3-$;^N|=1*+`Nf9{thY3DK< zidKXO>m9ukv!!b+KQFH|I^5kDzwJ#K%eHNuFU&tZ*p!mQ7v+{~-7RC{bl|{&(PqDZ zjE`1-{q@)JnrH=|hWFyiHBoYU;_|+H3N1^m**3+qCrh6lxEqM;qW&5`J>ByCC8u1W z`=Ttqwz27^WLy5c6RVbTJz+lMW{F=Tf5UD;tYg`MW5vOXI&TysWgZnIy*}%yG0z$0BIqzTNi!&8 zsjG^(kT^bo|JRoHsGNV3CE_~sj`IBA{ZTvyygRF0cS_WaZ`4tZDTfZXUVe{SnrBza zfbqQEcqw0n+PH3>Bd;_)w zmjy-QDRCY=c&07KuBJNjVg#2*ZOr9?w%p9&w%lmkl~H|yx`_3!hvngt$)TbS##n(e zp(5#1BOS>Db@8-c-+V{EFVBwmDrcCgCu--a=;-Je*TucWPeou)_I-VRC`ia6?5IjY z%-65dZj*JYjK{B@@+x`a<#naRkIQa)xXrQq&}#wH#!IhXzpnq?;jwIldNJ1%Z1Lj2 z*|lv2ZknhvHA{>0zWm|R1$ceEwi_QjcreiUfDind9}Kk zB#m^LRckjsoYZ=@hulPij*Fa0eZq5pe}9RYAFC2IGvy7+L#iHaXHPS2I+4FP)k1xX ze~CNyWS5Va55pU$@t&jV@825NC&c0o|11G)f|C9q0kdZQb5c^Q*Sx98c>N-wPs+o@ z<0oki@mM?5w~O=B@u%;urG#9pn3`&_KoPV)s#}oP?$jH)T6>BVzHwtkfzhRzE}xyd zc12;W#bev?M&TZFGt63c_1;tnIR5im>h1_^g@HhWu*;}}FM0LOM;kHZSfK30xl9ko zq7Hq3!BKOzx2mB*HRAkJDy!SlY;V}4gtMaL0lLmZ8H^Jj@6u~34C;6++WDuK@adPn ztCkHp$=f{9RqPX78>_UB5{11hUz4O;Xs#F~Ys4D3Ti3OUY?hl6_JfVrR<2y>#j1o2 z;%KHf)SUj5wX3U3Z`U!kA1BK4U8WOMRtg4}ksWQ66CXX{Hb3>$D*uu8-S#virA(vx zByE#OTIK7rd4400#1hxeULH>y%4~R5tP+vxGHt$n&mKe8K&&e9pi*JS%EetuT$io~ z^BYmqho2w1kR#WSYM{W`MrFImti5(C&!&BX{8U-2q{K0eJVz@<1I{MPJi%nG>}sP^^6_2` z#}C_Xa+bZ`k~u84I8k$+s-9(e?M_d$Y18}j)LFck?Y7wrcNuM2_u;W!O4i9|r9@uz zuUC*O90d&y?^f>>&=WX zX}Ms*^rfDlnH%p5^|T|-Z|cU*DoX1v@%Lw4To|v&vFbXXP?FIQ)>|5=By9c5@oR_# z<32&t%G;~xckJJvpsMR8aM~X=!-O(DeNk(wBjVI8?;F=}k;d(L*ATe_aMJ1&tP{70wHxz|iE9vOa#hO!|pBl288f@A#K3UA-(HH8_ei{GP zJu;HKaqo#3*V!>fK7Fr$K7G=WL&2t(*DZta3V;A4vw;ia1r~#7<7d%oZ(ojX;ZKDYV7AvI*1>!XilSGDJT!OX7Ajx<&|vUiCB$vW3qTw zh3*^d{fq*YEgmkT_;?4$#COi*7`!KQ-ArMpvA1X+Zx?3A$xQ~HxT%PTGdW%%nJYWe zxN00_Vgg;}sK?R*uB`IiwNLyvzwa<{mSteqb?#?tG8Lq`9{rL?-!GbK#l*C_ik>Ppy}$Vq8;)R}3W@my=jq|Z%F0UmM$Jbh?&2?6b+?bS=f|(x zemDkChAfALg$1$&a_nfvAMdQ;?zI~HZC4kkO!}$B!tb-)Wx)+|Wp(kY6>(oJ4e-mI z(ez%Tm#ta5HqP?rKcu&|Dn;8nB^Ef1N4?~6aPpWR$^=rr@(^;i_F6m%&c0k?RS#9!Urk+g>7Tyfpzwk)epGBxjSUUYJCDdteP=y$9t zKDoeHdwTt@V=>I)&L`V;i&{@AQ|a3>tCz(a-If=p+j^YPj-99591>mf$Z8?$SJXbC z#f6dLOiRrCMWe+B3t0?IcX;^lviQgi+NW3g=G>Eng|a}tVx#8%nrJ!n zi?(6D;4*#m=WhF^?dylt0PB)8mcS`7xfk2O8*qJu*e%dpVskMZ@f0M!(CLvrVOn} zy*MU!^Mri3gxQcUU{g6Gi{^MafjMtc4vIR$;-kJjfBrm5HCcz3`79oe(~rfO;~;8g ztbw?=y?S1=sG(k{=+AEyc{9=MCFau)aeqosPfeKZ95a59Yi()Tu9>VO-qqcGb5U|& z1bu{$AYJqE7i<^(43i(R`DF=OVMTQ$+9ru8h`Y_D)n&iTeGP(9)nk+AH%)7(a1P}e z*s^8IRrJhXCoBN39CFLC-U9J;PLw`TBmKKfs{7)cVMz#|fww?D3Ojd0Fo)9NL*M%M z@6%N3mt2}T)NJ=%V)fd!L116!MAz!gX^TeLh^<8tG<|>LTjz;N-Zb58>qxr}#ul175NZDNVTT86k6Ax>B|YJQQb8|L#^7`>1-tLyl4O|-9H zJYC=E)_j)+4RfuIL)PpAavz3TGUY%Bp0fHLJh$Fv=J!v-an_r+h68j}OC)Xko=t9v zI(2)cetC#67Aap3F7VF=s*6~18OiUp&z{=Q03=-ou2Tk#Ee9AK^8G{{%92J6r%Hk$ zV3s}>m&w#ni$RXVh%0t?akMl9%0?&mb9g~k0Zb?}FIK}DXo!|4| z{(bfQ>baSjfG}~FAhe&LRD+5j$>oI_4(Zvk5}pVyhw+{=70WR6kMSA>$v|Irg&+cl zt-6ZTi!*aOu3ka?1Ur`1zRHyAQbSq6NUP9@NYeOG``jw#DN^kb@F!TJaHE&9c24N{^|(4**7r z?guqWj{;zC?w*or3orIz5sFoeJVBMsvF$I-vg#@&SB?@}1}J~y&fUAAQ}^2-Zpj)N z#y}fLs&P+asj zWj4%X$?4EH5US!mdYwC7T|5EwEEKPrEQrm^hwBjtcO83V$1w5F1|BI+KGo?JR&AM= zo5nkn#*DvF+3Lr1T!sWvfwRdLN_7~~sev43(!9?i@25S})chOVevaJuk*%m0oqMEo z3S67ki$u=2tvA3*Re7fKR(k7rlRko%!O3;7vmZvwSLWw5L>GrsXYT$*gqO1mT=Ou{`)b(90-&FQWZv zbSZ?18F6JQMa!G_W=2!`=-PDne$Z&N+Uf>}r%v{P^J*UZ|3w_H&|5bN(5g80khA zHk1#NW)*4IpgEIm)0@y$Jo@utmwm2i6u6;Yo#6$y$WB1x`nykJ${x0@c>q1?{n*%S zZ+LDSi`_siFV%*|=#r>*>eQ_oi|Q%@1SfNx_XH9J&Y(`?u17vij zw_>rXwRFY>+Mij|mu}KvFIp&m^-*k7+~VzvvV}wUwl$2rioWPyepAU(ZkY1>> z2M`h(gxS+fNy{TwVxHBVIc99K*X81#dD`xzjN(xp)N9fDyL~YX9Q)DdONMy&gwrho z#am{(7T;>D`?Skpthd5~H4r*MmfUuMQ$j^*$$U{1-=gl6YaTOHkTaS)C-;guyi~28 zpV0N{XAc;2e!jQ9l7UI&Mw^Y4*%oInEtNi#fkc$dKItXi(zpi^MTDQhX-nh4`t1F>}MD{c9t$4xV z3!<9@FwyU;AaNN$kF9OwVGl~7DyrH<^+g`1R-t_QO^i1t*P@CwsEKZMd2#+J<4rf8 z>Za#G)6UJP85?QMjzDJ| zz)#7CIyMz*YIN@ zjFEUGG=R5yl-rP=)a3${(O56m7Q>{-vvFKr7ij0Lz0F_fg( zNM7(*Ud*fujLJ3fobZ@$ZAR|RLyzpHJiq_NQ_I?KLbAb^2~hX))^4u#4#$bP&>4l=8Pe1GRr zm#IPSV*1sq)ut~1JUmj>>H6L-+$uVfr{}hgH4gNQlA}8u?lu)zBkp6nEMWwRfKklx zU5gHlY1&RUbf@Ie)qRc$MB`gt823?(mgmy*0yN!b;?oaZ@)C->Ek4a{yi7 zSfng1Efb6eSKN=-CuDAj-Vz6)k2r$2Zqcn-vxWom!vIipLWwK3yq=uR!i?1)QBck; zSkSE1UHfAwFvSsk7q=(G!D18jVPXyH7P!v+xXX}6WN(Jv{XQQJ!rcUmZenvBYZhad z4|%s_KUgIg2X#n>3U_E{Z(i|zaUQF(+%B=vpAd$&9TwZ zDv&FF=Ly4nLIXcWxQPo{w7>B2@oDLph6%(b-Z;{-^sNM?Sa@=^`3PG!(1!eNdD+3< zHI(n6qM0qWAPz5JPbNU**XSB-nS&;p)h0iG_dLgxnRcdmXiLX~#q(m^gW;E<0EXK| z(7v_@&!c^(IgWO!`8xnB3m8>P746x1Ozn6*t?!fd;ArdfF5cExr&ndpyMBFkfZAzq zijCbqB;k{cG9seQ0J+2t`Y@N;yHjw4tH5QIQ?8#|g!aJQD+wm9C`8N}fIv|M8U8@VFD0>kOLsOV)J5s(;LK6eMOpJ74b37>J-6r+ZNpq91J9SERP8F4w^V2vY%% zLj}w`LN58z>pSRHhx?Zdu3mRuIRs@{k?c08&rv*u3yM%CL4GsMuUzj^i?D{EbTV=L zG*Rf{*a%&62aJ)@R5istE5n$P3poBUXWf2iay9IqJ2m;Xc4#O&40eYdIQxKJ=e(@Y zZ;BB<)p@Qzdh#24xFH}-ec7q&mSTRnKtV@#k7g0O?abM;p%2hDXm~xuB`tcouXpU@ z-L4wP;wM?0Q~ln%9gA(Gqhte_?fE*(!j`jow4G=6y?DW)6sME#JO|ti_3J?VmoKEe zTK|&fY>Sw2gXUXh+WK*IaoWd} zFXauo9!y-&|7vi&NNMTcGZEvgRPJfs44$T>6oc-=>&-FO>&u3Pc)WvmYoL@NI=;N8y&RJXx zv(|2I!U+4I((K~-{-yk1*JtkYn>DAMOrE|r<#Fb~ zsbam76k%H^tcizXp#~~<6u4=Z+tBK{64g`BE0&gR$6s>wyIZCpkl@%&ME-F1x!9cx zBQ2Rc@*NkZCMVOw#75e3h2&}EAplQALLVrOS098_knn`8GVxB)cT>?3Teoi2cz@%O zKzqAXYefZ*hGn<0TAJbIJHLvTel>5Ok~_10!-g7Ka$ypPCnui9KtpnPhDArxhTYsp zumJ%3&vPAEO;2w!P#a6?5BxYtO%aZDtgxQhHA*(jZ%I!-XNrc9`0CZ)(FeFc-qriT zsL6M3UM^P8Mz~nx*=N_89&hnwRJI+h2XmMz!Y=D0BxX^d+(LRPpSen~+F&G}fivHe1sP>0$GbrZ9g8tBne z!4CK!i9i01YGy4Cu7Lri?y>vGrBlQMbe60Og?pvuQJkI~v&d9i7A&MWl2>%&!>tu) zcB$vR_j6cSjGRn7o1;6Lyv9%+8erfh-F0tsy>zI^6K!WP$(uNlRC^ z0~rpfLktar3@xm^1*`W5OJA`2^>r)d@u>JH{j~}Yt#NMQ-i}aoLQVt;z6S}!*N9Fh zK~~mSbUzu!FjP1~R;yePf67up*Zkvqq2i5;9m`A6_3Iz27BJV|74r(_)q7AfigvCTF5$-7#;{Fdt}kMbf0tu{)$Sk770L|% zr1%|Ans4=OOn!tNmE$`5UcjBu-;Q;_3|Cq*%#`8HNmUdsHWK&5i@|8H&_Z=F8KEB? zh`B0`j#;qgX|;K6NvK<6Q&aVzthO-i91A^$15`PBY?9(N+!d}eY+-q87mR+c{F7I& zXybk8s%339Fl&?PnXImPg#LZNq&sr{_A-ER_s|g22)+Erj~_{~+_`Pr8?0oF;)cGe z2vUjt$4@eE2(#q=8@1+}^50wGF6z3^o`Wj)zWsuO=~1pWkE26fU56;V_CI<~mW}EQ zA2}l3TM^!Xx~7+yVxN%s*rc*g?a5%{#@d(UH!}q)!%vVeaj1QF?QDGH2W)@6p=U=@ zn(l7@<`k|PcZE{DxG$@*Jzn;!#zq&LICyw_I<65Y1@;!+H==&{1v+BGTua;iW*xof zTLweNCt<=tn)Lk>p{P%pKj{b~GI19>5rSH5VN9l*AI3%BG;xKEmq`B@xXxO187zt| zd*t`vY2`!>)T$(Si?tbjP zyy%cQE-`39+<~KtZy$Q`&cP^6XwIJDx9|@ssZNPhxPnfty0kExsOs=`xuqWJ*_S;( z#Nv8h0zs$DNka(sY6-eF{~NNRbdE>}U?Rd-z|6bu?J7qCg+%WbGp_jMcs zgG#-3?Xgtrk@-5>zck_sR?h9;m6hBzc1t8>>#IZR9N_LnJ}f-_?p&s|(^dKT`H2n( zq7}l2$J`pBjTkk)yG9)@+&w%aAD16pjwKU!!H3y=+zK)_p#{`oAt#5rQEyJjw3&B? zkn&TPTNCm4;loQ{+&i{zJ;1}0e9~^9`#a>~1i#gkrWc|I5B@U{Q(RI~606z{hN8}O zXl{CBWU9Xx0T*Q$aI0ypT_|{Ib8GtQ;{8kLPXL%zk&QL;`&wpxtP5lDzI-N8d#PY| z;yecDdS+YMxzcwat_T)^k`#!KeU08JE||>V=;Wl%bQFuG!`QF?>z;_sOd>~MP(!zr zFZ(O?W{G~=E%}g>RX59MpIk>jrrf2dj&Nm~G|1x{a$Kg9nlmj%-pgX4TdXkK(~8XZh+`~asI96ap_Q7^2ZDzH!$+lk`HwS7MhvnOv&xvBHmB4wrATI zXcxGugBfRPaD7oGIQQ`Aq4Qprvus|VPDTqeqXe2M$?4?U53#oKM8KKL5{uRX-+Osf z`F)b!qi@Vo^K)}?h(V=9WlEYhrkkjy*<3(fvz_R>?BwKRG&j+2<*d+@a#l>0s~vZn zjJjW(v)=*ceq#AMcNpM?`7&yU5MFrTCJkiVVhi6Xr$4$YiJz^MibpX_ga3(dQn) zv7B@Xm-Hwoc{PY;$!ouHPm7ZPZ2R%WBav91Xv$4a7gc(atnnYObdGPc3Y2$*@uX& zHJLd~kk`M@gi8|F|w=V8JDZC6?1nwyFj5!=lk6$%pG5Dgm}F{-ADbl^~L5bE`oRp{L3( z1(HPDnjyM%0+zPu>1(m*9GgF^Vn zON59{B9>kVW<0;4gAy7&dwp)nz|@FYup%Xr7=!DO*`&%Mv{DKNT1reSyv95q4jEZJolcHYx%sb#-Xz7DD;iF@=W*}s3krmtWyTjvJ{Y4 z7ELYDt!rSuQPh6$UAZX!S`c;n1PX=V1@Ha5+YiegCpC0bXwUXy3j^X25NEW?`w22q zYDVN*Q?GwnZ!_E~oNCb_0aVJ;)!S>p8hG&B;{a@yFHUXroA&d`EaHSw5FFvX)nu(m6np#K(?KIT)U?LfF^o%?d%|ZCp zZll9sV-@2vxTso7EzBgtUZ>)ZqoPG9Z|}#RA-2M2H*m#fpq2w(-f{p$=|H?ML?2t- z=*6Q<(5(FvEVSpb{0KiCY)ttSBI(g?+ELJEORF!-$&kudmEP!GT!+0DI#q`6E``lp z1|vugl>pJgp&>IOMW=Z|JrLFQ7c_0WimG6N9J7hU@`8=;iJLMe&Vc@*Jx@!fqxED` z5h^o*!t>dJ`VB zR`ieysIN9RJ9o!vA7_RMsI0-*c53s{#Ju#|SL1fdblx6L&w1)M2(#IUJbKN4-=l|` zV%(jI+@C&HXT6;zkXyaeVT81MAU$*YUn_hd88=UD{F4r7pcBX9-od3&D}4fC+8#W1 z+aP3IY@;_&YCr0y2I5C@wWfd)1RP zk_+a(cQ1^ttAq#=$}GdGa*NsjCoE=rmoY6EFLo(*0uYNXlxUt=or@ST`9$*u%}AM@ z{|d{92}A7;zj;69E%XOr7e6M4}<2if0~p&f7VD1yEb1U-h$+VkS@i4)bfBkgS*r=E(C zvIb9Bqd(czpmGQ3|A2`$6%`wt#4>TMG`RY-DSBgDbN0&HQ1za)O_ z#SPSsL2F^Fb(L_}2B#c}OjhFgS4tcG=QN9!bQ6O_A#TJ8%OI_8?;7DicBjWk z77fT`Xax1L*eLYT)5F8ke$a0w5tKTD=p#h;EATu+gANKB*Gi*(WI`W`LO$szXwCYK z8?O|&&Jx#wq^AiY$To$f`jlB*gM2Fy&|t}5Mluc5LIsk(^7|VUw}sJS648FJaqqV1 zs5h6pzxfjBw+aCQn3G%pwsKI;zlR8?%Dg!88ePQ*SBP%fuxjLxC`1-)*Q~)xwvtf5DO~04Y4rO&016dP#)VO4mgx0Jr zM;W4%5~vu7U6P>+MAQk3#*9VSD{&pk^&|PyVS*Oz2`D5-Po7kRMfe@TQ}T(BGC5dT zrHFKfgrJt-Pd7E}llMAI=zdRHMi!id0J@E^U6V)J$!Go6AsBYVYki>a*cOy-eGFMdettE1}x&+_UEhNxGH= zDGM0aR>IVX@K~BHjvbf10Ay8-=8V(=`_7|Rq%jO~2`QxYySWokzoqap9q!ng->{fE z`mKLo_o#BdvmKEgP;45YX+!|C9EI9=^zxf~NWZ-mcbSSo8o8=x9KsB0VKN*9GCrds zj6QyzCx3$afPp26JVA^0Jcf|Wtam~za=wS3D$#4FqzKs*+V)c?nLS(!{@zvx$u&_q zUL_XBtW3B>z8$x5<*VBy_%*S4`7Vh70uV)llE$FW);lA?LC7E%ypRrLXWrOS_p(5< z1XHO*n@UE=;|iF+L+)aS`+OqQN>%*oG7$!7WtX7#SE6g;Z|AUNWWZz;?+CSF*dv+@ z+#uJij2Ei}=Cgk1(YL6jhJ=SmD(`)%=V>uqEyiyW_3>>)E{zgIW^%kkjCMrM+97c26v zrustVqda94s77|__a(PWpNlca6N`Eo3x9DAiqnV_Q7VR zpxP#<8>lFlYAU>tQHIoW4Vr#;Z*MfHo+Q<-XpO+15x5_x;bO4BhLA1VLktu|wq+F! zIGSQFM?4_%4Ddm`ZlOCRlxf4i{{VRv5R?1xi-^ltQZexJBcXH}8K!|q;moe?ui-dw z`R!6cXZ^(nhp7`3)AsL%G(HJb@mIG=Q1!vkAErFr7O8fd4Wnd$D7Ibgs ze|oa)fJ6aC`mLo!G&a@um}yIf9Ns_!u=!7`kJ(cHcGqbT^I{RHql7-a@e?nK46niM z!(forqyHG>W4Ds72ekge7sKwu`{2FDnafiO+~1eJookZJJ~Gd)WX~D@n*2s$kvVT)9{qM^c%Nvwb41Qa_lKE`y|J&)r|Kqa$2h2+T z$JIEN-n)O_2&ze(TFM(V{B34)hHmX=4sEy14YOU{#{hsAi$z$!4197pxXjOXFBvI)mO!d7 z1pLbond(Rz#-vrzo@jpLbCto#(gBjlycZdM#NcJSGmQ%kuY|))O6nd7#*@rE;#NfI zsKv}iG(X%ORWc+2SV>f7guPS{hrv7wJBbxMDkxK+N-4*>=q1 zZzGYQ!d#b*qQO}-xoT)}p+$?}o8JR?BUF-gLiq!&4xZWB z3q2U!EDqL!2x7lVIoR*2eXNzp;H(cM65e$XFwIUOiG0{V(kCpo0(yCgTxgHVe@+VwNcdfhp4f<$_?ik*P6) z5@3p}ppX;4hzxc$Pe~ZLURN0VfsiXFv6=ylE`!FB$^ZZ`5aA}F!349I16-Pgb5*MM8T=tdfXeCM6NU>X{Rp1W456vN=rW!C@-Nc zhb@BFYvTF7LD`={^9*ICLGE{htk)+4swQHp6 zKP7Ua#!)<`ACCx>aD#d|Ha1ob?L#X{9nkWGLHXbgL;AIA2c8PGS3;PbMCaom^CIwE z$S*}C7vHRcfAxhh;_BuW>gSI@5Lrt2d%v0)@H-R04S;+qep$$mmN{0LG&(mF&;jsn zf{);ss;wY1E|Y-RWRYutRv1GyQB!vu1YDEHYnB@@l~O{#j$TGINgdvhjdRvj1FtGX zkl8Wm1Arh$G^Z%y>_YargoiZ=OGu<_8ZAe3%@EqE((RRNCg6PnZk&rld%a`69rykF z&k292? zbSPcouw$*7=}ASz6%b36EPryr`W0b`c)#B9FvSr{F zDbyCm5g=137lyV_Sdf(W%2Iy z7Tv5Y6RHu)OZl7!ZlezL=wA8KcCM$RSCZLp* z_;1gkN+&gT{pIpS75ynBN(fZ|0$Mc^0HG@%OjW1U|&9|5u{X`BPo7vZTEhe;ERe$hQP<$uDm4n6MJxHHclK*L?^@9#ypf4I=?>t$N)W-0GIQ zD9-(8K~+IHEu1_Q z3qAvSo>gWI$WrWw52vDgz9+3TP%Y!@RJ;oz@Ent{wG`~vT8w8zLZ~vti31Q3RMRY$ zv#Ah^Fe1oTZ_C@1Z4(W<`R#sT>lmc|$U^{ENt`ZYxpHQh{Q`cV0g0r9Wi-noNt?@! z9<`Vu$aMeU4Yf8B#&s+jkIHc#3LZ$RvlRmb5oq|Gtvi@;Z;n)uQEgIG5xhyLpmb#0 zTtE_B38zdX6og^`Se#%9>}{KY5A(=7y+FSwIy0pjJ5>NvaAXd6{Q#R0FdOw(?M7w> zc5Hrh6&e6d73$dwE=|E`BZ3{Vqw6p+Bo`{8Oe7IjBfP;XV>65d#Di=Vo3x>I){vjT z!le1q!73)!Ab~Ro7gf)FzQsunoWN^RhOXwAC=`dL#|fJWLq?u8w?o)2?$XY-W@|6G z*tfVt8GBsYeqj1I21t1*q^+0GE#762sD#qiKcQ_$A^u&OMFi;`54G|8_z^zAj6A_= zieR7ukkZJ@!P85xCRzl7=QZGruhA-EkS!;{5pTx0iPD3 z1URFxb)^qOv?7z2K__lL7AS9NX<2W4_UzfjQ8E)CF**s@Y69g+o<5niEP(gZK+G|s zpC#HgYUep3Co%Lss%ds^u4pbctTk_sv z%z=|BS|EscfJPCd+|GOLc?}OE1|G(!2Ij9{l3MMCQ74k14Rf1PXOeJLBYFv@n&Qw_ z)QqsAW1!L*LDk1w2_Y&SbZA2eOk{hLR*Lm*4Cpt90C`=+1qK-60`jwtfL8>eU{zm$ zLW2-|<^;kb7ju@)&RhT^uSEmk|F`30$l!NcH`|1}^A2Qs`4KrFraC4B|D7daKEvdn zd+P|VzzsaFZCZ`T%Pfk*Yu}PdR;U2lz(`nFgCBb0dHKHu z%rinTItTKJ^VDE0q{jZn6g^~XwbJeqCbNFsx+-i0LVqwHPwttZ>zd5`u79wk$lf3~ z3;DjEgn^O62BFX}!pF#um|y@#1ut6>q4qTNaf%|)UK*x)0Mlj3Ap$_VSTRSRvPeqE zk0iI?!sXG{{QyO=Vk6196KIhG9fgI~zrMaEIR_(p2Id45%UFQ?IjrF}ZoUK4H4%y+ zUj!(lp`!wH5j25vaS`ye5*UTKNvMf5(+|E)rFU)FH;WxUPxAyx$6tk=Vu_VgG&lf9 zpbrT#4C2f9b?7M6GXCovqAf!IrAG?=2Ti8?pK!p@e|j}n`N+{mtDmW%k?-8GgB5JM zR{i6l8(vj-Nl9*CNLHmkq zz#BjHz5(NIZ_CfTKlLxsithj88B_o1mH)p!@rro^D(@W9){xcNP=DFyxDiS9jzze_9iFXtmUOpPlQi$sJ-la-=BkCDz(&E? zlckIehywXrP+=00W}`qcy;IU13Y~*G0XOw4k~Bum!1p-&V%<6`;SqSN6LqS(M092- zIBkCE?(hnv0}aLRTScRfaz}gOR11^@l5r$3VicWR3EdrMe@GBz7wpfuH`E~w)W)-X z1k`aqtp-ar3S3xy97$GncvH#%>O@_E#z{aX;CXn>dmK`<-%J>=l3*TE{s1n;Y?ny2 z5Yr(76);*HBxaZlFG~1fWYmCxOaQeQ;X&|nkD#s+jgx>^oQEO22^ahFtzp;DCs19? za_@q+bo_QEmC@GcILbF|1SLPq?R%FDeiK5u9;AE3X=Wy|_5+nUkAB&WvoO@tjcU%5 zPJoZ*hrLV=7DE>2hC$4;i?{D2_Z5 zT~0q1>M=RpzYI2C4I6-XZ2tW%X+{x%O-4YG3jI>J$Gk3Pu~jrd{`mu zn1_c4nT7b1*G5dSEL2pe$Y~e1Rt)k}#47^klSy-^K`?@w!g%6_bQ-%X1|_PX8Q{#1 zpw(@g9e}XdDUg)BOZq|W>hV}`SjPi3e=>4}7lI?SG}i@PAS*|~Zx#LKJ|G7YP{nGF z2J7#`4zI(4N(brlAIA|F6zDkh0Qn(?vjChX@#SaR9tz{oGSYmB_27cfbnPedAGb`e~o%YgCM2iX#%^S zI4ZEd%B9}Jh@l<<8C|+bwMR+n~(~HzP7iX}0GN6z-i&R4ro?kD&SOVlB zs4ICA68pz3k+|j3$y39Wupi7O$jmg)^4;XIog`K&D+fP6e{&k}r5t1oN^P^vBRX*k zQI`IwQrLI0KuSs^XSjE7EY?(Rs0Cy;;toS)yk2+d0_3+^oH2z%w>}Y;x2hTCZIkqJ;9oZtGJ$lp#gRE3i8?ix~^O7HGo5;d|*+Q z8Rg|u0YAN}diDZ}gL@gc33H}YK5^NW4ehhe_MatT-V2b)>+vWf@^zOG%_6Uen8@Uy zFogK}feWer{__T0L>@#!1=VdgscZxA7V&+IL-`{_TEK>&+)A96oU-_f8NvXuzu*gS zYgGaZl4FLj{F@m&fTrVjJN)aoqOxvx0_1MZ9MQ^pN3!ww&H*&F%pwJ>H|iCnHKHdF zOs)c(f|UJrPgl~tQ@6sT+%cOKHBw4bPiM~9V(O?dI=O0D!$%8b^}El zzyWYdsJ@AerW7(nh@IPwK_} zAF#odA(WEiZb&%y1-G_{-C*NoVm2tbP9cs%G-zzonnSbOcCB#U)`;0b@>bwZVv3fH zgG}c@Oe3~4IoAsf-#U9g0wsjQ9o5Op!ef7nk3Nd;3&L@iajMBlXl-P)k#uPD_PkiK zOGy3}D%AF0i(^@H7$Z}DeP#``;qydjL$x3}C3$?XN{C;;tgb_@U925kJsAfg_@}(k zM!?{Wn|1SZ>|+tzzE>!SpRL>(gA|pKp`<*VEkt}`w3VG* z@5yCcDC7|3Nh9t?iepR)3Iz&<{Gc)tXSNKb)c%}Cel{XyS5@ISpx zb6t=BjimgK=Mw+bK=$2UJv^9|(#J6HL5@x<)4w>7@MG)0DBO$1?GN93SpRQNIgsj- zt@JPZ`@iq-*#A3V|C?CskBqMOT%x?Dgl=Np`!5&VJLf^~#erjRHs8ja{_i>L_W$mB z|GSRf{kN<6-Dq6(=05lb)Q=Z9Z5Gn{HymiIpK1g;Qr|KBfY@s#q~x_lL3vfHHe-d^ z_Y;KAaX-$HA!-{m13y-xHXv7ogA|PT*3y00-UI!Eocl(CAY_OM*bD{{bpkRn)cVie zu0%0~Ab$l_CHf{gcMZMG+fM==@KGxE<4Nf>Iv_NUhKE}Z5m^ILl){?zJ1(KpBP2@i z7#t-Xw*N%$nOe{7-au>#Xi~)L zA>fr*b+`zPn*99ym+&1)_z5DR5;7~HJ-X?}FHze&`O7hf1OuJu(8M`He3iXOe+3;g zig>6Z>9c^$P%X~^Ua8#T{?4_Gdth-B9`y_chc5b5Bs@WiIR#$BD;U>}bY{SbZa$DshyL9%S`P#1~m z0q~Vico7D|$bYglR_P<+5gOHHn7r^WqA@_LiR;9TMcU%7E`+!M=ZeDho;*GSbOu=a z&@K#2s1L^U91fodEeaR0`);I;vc4`%myYf_^@l(ognlv>RQr~)op4y^$2c+6#SMBX zBfsG@97^yOzlnV!&i5%fgBSoB(UjFScqq}$4C%8KaNabqG(qlz-0?O4KSiXj3Qhf@bH{qFKWIDZbUiT`eyVf zc>%!eNMqR{E{&t-Vi5c%fd+8g$-grGqWk^!;%~+Yz+|N9FW})?8(%+6LGSYe^}?KK zCqJ2CLTD}kh>?igq|X9B+so(y?BNce$Nv9!R10IX@@;}YH!Dy`mJ7}l6-^KEw;j<= z&;jF!1_}W4C`6R*Lsuu*7#x*nxIX|zazM+U6CMHN;YANvhhe1{VbNi@%O|9W_ykbs z2{OI4Vihss2-U)VR)NdF@}&pW@wY%9;v&RJcma3Uu!f9{0z@6fpk#d(1Yi?H5JRQv8Ty;03LW|-BZdz!O_H?kkDhXipcqp z%?KN=h5U$OU=0394zq?zO1A7p>X|cVt^oT{s-fo+$Vud4wD>DTgT?8N`Is>vKTh&k zCx`B09mQj0Mg&Wp9EwN|*Cb&JV0?1a1dh8U$L*5iag`*XHxJkcuFDUnY9MED1(8GI zZsGJfs{#MNQBe?Faa^6ficV}ZV0m<92!KSVt*Iu{hEx38hxQG~hKJ=4Z#ywRC?UV0FCZ4n=|hb@OP5xXp9( zcylC3L-q*xGV)-WRB|LEoKtClU~)2U!UQf42X*J;)7dD0P7AJ!i-c?)gBMJFOAd)>!;aj!myOfK?4dxJE(^ zt~wFLVWXIke6cE?G#Rra4-c8sqc|#w)I-4A&y5GwvBo>be#V&pO!f3Te81oO zzOU=LultG31DKLmlSXKVN{-6nEq{16xvlpYJ048+x^#(9_eJx)^fZ6~jTg&L3d+MQz%qyp5ip7$^5KQ5+OiqMD{1|E-aE2rcnIh5 ztAdZF-?QDuNjG=lTP|CBs+FghcC?9icwp3rMvnrJ7CHSNvccebee_nbdM;2#bW=K1 zq&_63iBBag(~u8P_0~<*wIjX)vGwZJYrF?p|4d~L@X)LNkI-U~>*G5%*F0h1))lW$ zR&UZ-JAo6gahvWD(1ils3&>Wz&1sxCuXBwJ)YQzI@iOzN(VivRtdQp6F4jf%)n*(PYT86t{3;F%!7b~(p+io zM^zz$Zd$_Qyo5=8t7qjmGb^0Kz87cbWgGk*XF6Ka+zxmR5I z3a(Ejlm*6ezaxj_8xtQ5^q-)9=0FEwL)n2Rzb`&sxZ+o}l`Y!6CU)%mO4qQc$puZ! z{ltr&X7k<8*HOJ(&7O@6jpEtJ8dDm#%x)mzIeN-11;ysvvhKxt|Hz=mxy@ejf6AYVJwJFa9mX4= z=Z?@xF$Qc?Fv-_IDW^Tto^&gb zMsQ3(%BVX<*uh0vL`xU9xbxNOHV`l;+O8=IH=ORo)l6c43JW#_-xVh$U?PejOU#R% zQ%4byu6iqLk}7r$98@kZxhBKEBLLb}?z-&sX~YZj50rcwt|p<2NTps0iv4%rvp zI>tcAfSVT=R-Adr5gUU5VjNp=vQTnSL$fdk&wVj zpSL8iszVTKf;vjQOJ>xyY;E=u;CB;JL0-=^gg*K77MaXRZ^U99N%FY$ZYo$w9H&aH zE|ANuetqgzdF9i~B9xwt#{tTbOJk;SCbMkDfv}S_y^ugsU6yM_lb$1&02pf}s&t&t z?n%CYSpIA zp;lc+%lD_!w7h=(`pEMd1-z3%epmDmv7rSQ!-&>B&ngt@-7nVjR*GqZ(8m1M5za(p zpL8>ZNCM3MG>cC1ck`5~0@#y?T?S#hd~2TzOTL_5=}g;e88<$GS0R$Wa(2)pT;4)Y&l=$IR??(R*33%!ip7wvkn3sRL%J;ybn~IQKPBW|z1KbsQo<4N5v9_*D5GkEy zp~brHYed)?_0P$*{u|Kq7qB5R73Dq=I9VHK$m`y2_5UU1T6ymarN!h_Zx39~4L}hD z)-arTp+oQK#2UKxkCR>q;wiIG68j6(PmLorzf_HAbKqtI0Z>17AJ8B~dJyEJolZKF z2NNhWc%WYL$f-WiyEvbw7}3f2`o7s@4#6w)dlH$xaQ@x(p5;YJM@bT2C&rPCiP%Em zX3)oQ+WiPqGX;zvzkhHnNm#dwKRw&*65@)!c9!1mU0V(!b2mKv7SE?X?SJ^lpvUO-1s7NwbnZ~K=1@+}lgG*=qOo>Fyp zf3|-ERnP2i;*sr>eV>pb&q8a+>O|qxonpbwrB1q$D5k>PI5U(YrSzd_`hrmAgFwb;#a5-8g75|C z%U^*hI}9m2U3|7Ol2PCTjO5VCYp66sq9pJT=W$um-5I%5xy}QorV)SiD7$ZY_>u*Z z0P0(*=K-i*p&iT+{*Dztigv75S z*4QL}drS^DMkQ50C8`IPEd6An-{LZE>^aW(DS?^TBoUJ8^WJOAT5-kNK5MIDwU@22 zAdpn#(r9vCXawFFea-EQ2Lm!rLeeWBBf!-t=Eiue20ZGjM5VXGD8s`^GPGqc$Adq1 z8=hP|TsR#3H1bFgfU=?oWw$01f$r|Q^d=Wxnc`lU5G_oLsKVLPxe!{_Or@|^F@mGF zQsx`!NeU;~2t66iq=XT<6i*OstAR3g?YGogqFV?_S{{WwR_1^dYFEcRRUZ|wzdk1r z{iI)N%^FF21m<{gZN~^EO)Yv^`0wf3g3L=3$wsBjY}R4W1hU+_q<+f*VA3CiZL%Zl zYvFNp7c6qqX4@_4 z5Y;Q=G#X#r2gS;ZV(OPKkMTDWbd#%b00-1oKH|=ve8$H^FbctjD4S*ZqcKZAz~kJX+5ZV_ipKK3uS>%pW`VV9S{zNWxJhv)FJ_?ctZGgxJ`R0ELfZQEUQ7i zg^st4VT;-di^$uK`}zvx&-zQ+7-OY4;ecAxx8$1v6c752)l6eGmOO_p%o~V_TcOyqsfp!Uq`x06&Oxq6Ds;U01tPh z<%xyDqqdWwWCh1(9v4R=nTY3|W^q^q^1Qb@goGo~)Xf?NWIvEc;2!j_xNeKyN{e?j z^#$$A6k_^q4Yk!HhO!Ov8~7l97d%-iqC7gu`O@j1oh3SjInppeqKwMTX6Q-myRFQy0-XKqF?XtpAnZf zb*ycp*N|EiL9tu-_>dOrjsu|bJt zgI}$fv2d$_pD9m6D+VU(SY>`QFRfp?{Wiy5uwE|n9+N%9lwM3XsD75a1icc62k|SR zi^?6CKbx-$Hp=jPn3{hGZ)VqU=Hfq+)gxE6x z;aLpQG&iJ1Zn$&Ca13N%V!;iYMkgN#8DVLeMPHwo#bhCrVY~?97qjTD!{*KU>tlUk zgyq;b>$IH5zIib|;Cmw(3pH9*cz#Xt{r)KO`m3@iAKinzbZ~>nV)FzuG6NWWAlPKa zuCKP=#0genzoc%A{Fp;>=t&j0ZUqK2xiQl|tN8E14i zHpUXQckHR3t^PgnUfay=%L+I(#Nq0uY)u!HS?ghQ0@0pOU#QI5%L`XolM_CFQT?fZ z2mN7I33L5ZrRsl@`S*r$MPTyP!^d>wCj(rA{;h-j|8f+pYM=Bvkn53Ag#SH*p(Vf| z_SD8rCs1!qKIS}?t;eYuTN~*)N_u3YQT$)DFZV7=5PvR6;MxIS(w>WKkp$%F#D$Hu zFL7r4HPrRD4Evf)Y}b=%5t|@1ipkhC1b*O* z88hT4a(jMlhZ{IoH=32@Sc1aQbO{2d+meZ;gAyl-&tQ<*wAhU!Ar00O%3^`AvoVOj zy7ldQ+ZU4)N&id29cSQ64^J98zjZ4$3NY@>7#ko=k4^R`*j|9(m`Bd(DHk$r@%gzp zV=ST?nrCzPb?5;AQZ0H--}ATjienEUpUj>CnieJ&i| zsX5lhz-7rfUGFByqRat?l)%)y!=PEgsOx@{*%JtW#%q)`Z6Q4x@_b}EYC#HT?k>8p z?4jvgf{e)X2CA}TGETI5lP3MZvjK@~f(W-=M*6w4hGK$gDhAi*7JEvx3JSn`_&8rCv|cWJd~8flU`U6EP=Y0Yq=P zvHG%K)LPLUCq*yyDFp9{3^g^iS3vZ+DB-$3?DLT<ef3mp*kdWS4>W(50t+@vVi&|Oob>WZkcq|o}Kv0nP zm=T5g7O-D3#*~J@crVcaiWrqXB#ou5pN@9EzLpY7pp!5rvMq3y{Y{XGf33v+E5=J*0}wHVwbR?+Ap z<#=4EsdfwAQ7&AhiR-nNhpSlS@+bM#&OJ(&{wkor)H0!{NwBW$YQ8_3+Kq=L;BJ&n z)a%g0tdHw>34^yz2ILhdS>Bcus>wMMYBFuXxtAAbG?S`^g>_e|BRb%wA|@;l7$rLD zwT?fT-OgVfvu0ac{`wv~NUukcv8lFpd`j3ivW@;AOzy?7nVt{7Dl?N``>D+84YL$o zo4w7^=?F>n9=;8!yFHCxEJpwq7kzqLV;&lSK26C`z>sP*ogO^QL`7_u!4s zAor>^y?bB1Ts#{kt+ck;TX|(By^bAjl`to0v)AgpZYrNYDHulp#Ggbj`aAs5*e&Os zD{_nXG~cgFlOC5QcBT9F95;=89jd=(;Z2HHUL#r>+;MYjG&mOd0SM;h%A*k z_?AbbaIse5n^2J#YCiXet99wp5+5JmeS^F#NsK27giYbJz;|iyHFdr9dQP-RYZIQF z{ISb*b&bn}GVyB?+5@wleI`Rs$Jo^@-M+xg=NByd%4x~IGc^81V1n&_B!+rQDP(I` zr>u6KU^I4Xayj}3d^?j-NvFNcF~qj*2*7~>=eTTvaCWt^p10|;!GrhHk5i3EM??-{ z){uLC?cXm8)JQroqJonLPT%}xTVrh<00cYIbgtikt_-m=IuUav>4E7`Z5=G`Z;Kq2 z2j7!dgVURH;!_ZVFh64!m~J>0X+@u?^v0+-nyq+$Qi}3;g~f3y7HV_lqg7VYb4~4} z=XKNHj>|g?=ckH{e&JIo7TXT8V5^>u`UY4gO6A-S&z)-Oms&eW)rj~VO9Iw$Pc#f{ zo3ZPipU%cmS0?xh5>wP%#}?|_ODly0ae7-0SJgaP1Ccm}8zS{KTpU*M&Gysh&&p@N z{W!#1KfSWiPt`+r6kqH|m0gZsRIUI|G*gS8zSEw+U%zNlMQ;L5TaZE#CE8{?9AUOpsC2etx22zZE9ePl*2VRjN zi6(~Z2##_G#JKUp_WiYbK>ntyWY*~6>MTZsazsk->b$tsvna4Lh6tZzHN5ZEGK9=Edr!XnCnL#gixfbw4ElE{0=veZ+N8#mBppp<3>;uLJw3gm6Hu~J zA5nkZ+Qq2UU8os$L4EDw=+jiXaZ(f{kRHt=$(qBk&~dQkpjy5zSl~_Wk{P6BVo)|f z!wcxMtISJ(^@B7C(YpsaD0j&Y1d){NfYfHT)RH{PAfqt9r2^TsW|j@d?Hu`c>R%Vq zCKn*T&zwf_-h592lhM0m0@Mx)whdakmL(HRyg*DCj*cV9gV(mhbtqGgtWHD+UY}mr zf{ei0m>M|d#+o!qLR?gf3tLBYDJ-NfdleY54Rr80tS(mJBA>;A3^kkPGfbkq>Opg` z(ta75Vhx##GEFL_;%xRDOOdNPPeNG$?aO-SQ#tn zwqjUhamT-!Apalei~n#rikbuFv!JD>rZmR>jt>F%SJdT(l{DLuQ>yLvhn198Rv3tO zE@pIZA>q2Z3)p)w%Jiw{3M`mbD0u7G{l%%< zJBXfKP91~?#e;2qv0a!6!dmg+$Xo|hnWD&>@yh33anB3ddfT_r0nwGe2OQefIY#kB zeK-Y%Pn=8$hQyYUG)Wk10`xn<-AqKx6Kb}=3tX>b{FIZHSlI>L^;K`1LereIb%my- z{TR__tg74i-%6KCDkdg^)+(}+;-qnoU%Q`H`w7GpBHioU-SAxi#Zhb!z2yVuJXfyr zu2!Uf@9U1ZUm4m%VLcKk3GhaHG;7R06j#2C7q?qv}pf);k0Uh+%^bD$A&R>fP0 zd;|sF`d*kaj}=;*esW!+%3%)?@}n%$c0W_~(2Ab7JXWiT@25&Nr*5u^s z4(}Q%GTUM+7T|gnMS)7TUGQEoBOZWoks^1LK|Mf7i*3-?B#2xL;TGqP0mQc)bq?)) zk>1N_94S8}*&%$Gn;c|}&Pj~M-}bjfb`_al7q^osWF#w`J`z9U$^-x=wUq8WIq{)U z5@SRpk17{kgO~_YP5l-#HfNWSi!|?xB$o{-eLoN196yp2MwFAhqdzTYA{c;;5Fm=b zQo5qu3Q0XUS3lr6XSKHm?nO$Z>!g{99ulU6|02l~6|ih5JecO#tb8C|fC=x+5jdbE z{>HD4zp2>G5Ads5fYA#%AW z=7>Bj*1iFHKe5N+E1vWho$&8sBEgSQ*hn8Wp&}`UWOgbs#g2+DjNzHm&*62wm|Uis z>c9ZNRYX4+(M3>{rKiSA(+`lcjHxDSmjf0}hFY}WBW#%2O_1t%nOu^gDb0I4)p`w^ z0_r7=1Rk$uS@pz$P<4pY|AyPCG7bmTA({jUb2G%cPv)2)ZNyZo!0Fd-nnG~AE6HwO zv9hsZe*h(U<&>>7QL)gM1L^D=>PL5Yb`GUpe&vs(l^=&sob1=(kF`tGbsg z_^GUa)RE1Rn+==vIH=lH7TM0uy7Rq}zpRV$@QB>jGO%Pz$ehldns$omHEU3)R(7Ci z_`#7I0_*Py%4zPi-(uJKTQgRSs$A9ZZpqi(XZk%__7-*AsgIOB0gTHXjU;Ohqu428MQ(BTTXFwTxWdJ)@Qt=d&!G+o)s5+ zF@eQr&6*oC5=woE!FJz<3?3YD$Gxvl<*c%lmUY3q)7juTSXS=2}+PhO{&b2Hb9e)N?jN@~qCd#=o(7 zu5dK8)X-SZBc4OQ)rsWfO{1gMZQ7(3aC+XK>|zRf^9YBdbrc5SjkSVDYsH?V%P{@w zRVD+~Eh{UNpSL{N*GHY@s5NrbDCOstt#-E=K62!TFuT}EbptNee4o!473_^ZY3WBYPw)q}iKP@eJ&5i2}qjTrl8$Yrm zet}H!5`Q(XpkU0$*x1-sijm&liD4yApHj^Xc3t@F_3K`WK=!q@2XuENVY|h`tEHvx z2Y=|VJ2t(&me!%f#Kit}hJ}TPx63XDy{Q{8;b?wmL&Nd3_XP^OVfLLGy9uTE!Tk9f zw{G1!A$C&ENw~2sHU28sdGl@*rTVp3*KJxf;_#6p)>E9Eu3w+&;NVtyKRhg~(MC&M zG)1lp($)L)3C3htawlN}(X*f;fAB0%+=NVv=84 z%?nhtpNg$hy{MVt1!;* zVRJNp3-Zp*Xc~0W{SWAVTNW5NuGyN~n*&Q@3ywPW(bLy=AiXa>D!40KOVsGb|#ZXx}X&pOutTW81)rBKR8qxTg0c9M$EGzr| z_nx>-X(;}|mon<)}ZUu@g9ZMswbjJw@ZTQy1@tnfBCzz~!sJ9qB1Yw?0t_p|Jv zh7Gl*pNNl*RnE8S2>ith8k+EHfo76ZGg`5ye#U{V-n@D9Jnx;TlIPDiAil`ViHnOn;eMwxUR2tP7A?B%-oLV@CWC+$5*D_BcUR2${0UCY zY=TUf|fAZlJGV%hy$O=+MEnjO0AL;?;4R+xy>qOj-55 zTTV_+$j+T^OSY{&akRbhqqaSI^aud zH_u8b17z{dyCVOJ!?K z>YQuqZUTjM$8#ru(Ad61dt=u|8m(LJ2nh+Getrr~x6bn5ALufTxW&RVH8nNcJzxFE zM|_}2tPXjVZ1eT>uD-J`b$QRJdkN@oM_8Eal5uG-zj;lWHm!?+LF0)NCmuO=Z1kKt zo#EkT&z(EBa_P94U#mNM4^L$4QFGQ)K)GEZuz4)0AZxlEZCpO1GHmBgt#iY^`uhzH z2|QxHB+$H7t8cGLe;GxyZPQ`*8$ZQ1N#$1~LZ9h39g`z=eQ#Wl+V&7S@jlTuzYUVL z*QiO8%e0crnm12P;X_5(>TiGBbp866?%~&)zqPls>)a$~!TkA(Yn$|0I2KE%;m&jqkjGR9Z7SF&mggGI<)FE6A*&5 zhiI{YH}2lu4!PKN!hm~{lgDbyl~B+fdiCxN)~Gwy0$Z|Q-{Ubpdf~#}M8~btoPHlj z?yE(EQlQ?eJUL!bqln)3@Y?L>>FJ5IY-97|Ha0fl74zKOE?vA>hhVqy=+T}u@N5t` z!ePe1fddDbn~$~c?|tj+_qU$CvPmU|-GBDWm(N3(^z1`gs&n@H$dM0&>zK7_H6)*f zG-1-D4Uv(ZF)?jO^crbx-RQx?hel-Pihu(Lbf{dmgoL!@Zf8>>+qKNw9e#Rw*qE-A zOMx5#x<*E=X!FbYbM`lF?`6xDb#Eid*KAY)cB%X}sYBm6>4DAHgkHXU8SO`%jh5?( zg6JQb0&W@&x|Nx!PLgu%=FK-tG(UuDv}v<}5X%a_c>@_p?1*H1|uOs8i0K?P6-$4s()5>gpHKGO$Fe?#&et zh3j6&T6ZDyXH#84WU-ZWTdQMq1m;~M;E4K!aD6-^tnoU~;PmsxjSVo7Uk6eA6c)eo z{rk&ET6pE$eH~j{+p;UaE~-C@#BMEyT8f1g1-QDqy1CK!t?1pmw@*dV-H1sBh$R|( z7A2~4L8O6yU>0!#9QNuli&hg?x&(|LInp+XiiK#aB%num;Wuq=OdF0Qc_Yhn+;t)6vm`1#bS zez=bYQ%^l1L}Wl+7_ro@8qOqq%E<;ZsB3Jj!S#0U-Fwv1r3tSK2b7Q|U(3wANL9B4 z-7{&XE@S!3E)c_HO%fNUB)F;r**<;pB!Fv){a&X|oyvFbEL~moXg+EdvGCeAh@&bH zs>_cb>ku~;0UthipM#IMcXnkT9459?G{j9yZqDo8KHZ;?>DJBcR8bR>#~tcxDxcKB zTYSr|U7B&uXWl9Qb~sm#Iu>YQ-bQeVh}2XqZgtiAu3b7u>aW|H&TrkZzxCk3xf=&c zj2nP$jP&yxGRdGVugDAGoG&R5#l_=LLoN1lo!7(lDGF9wvZq_NZvAss*0=|$%bNg! zTqKkP-;C1l9O-Y-u#}J_pKbxQ-_M_DwOjEI|5wfh`Rq`iCCf}cu5~3U)qeh2fAmv} Z{Ipv;Zm&N^7q&v795sIAG0R!&{{`ycGXVeq literal 0 HcmV?d00001 diff --git a/docs/versioned_docs/version-2.20/_media/benchmark_net_p2svc_gcp.png b/docs/versioned_docs/version-2.20/_media/benchmark_net_p2svc_gcp.png new file mode 100644 index 0000000000000000000000000000000000000000..55916a1de91094b18b3d47c50fc5f5900adfe9a3 GIT binary patch literal 38395 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
    xlH_*x9qK zS$~ntnP}6tZGC%td!(Ih6)y`5H^7E=)7EYnA0O`kBd*raG}SV%H^tUsFRx^J*%4r;nl*pU89;oQP4Qrzuyd!1<+yR_n1Q!iwI?Yl$$8c+#R03$oEm(= zJIGxAkcT-r?Oa`5vCH@NOA4JCNb$6H@7^1?Zq)~S{^=bYA8)L<@%V9jV`F1;E31vy zua7u<_;A*gh(+>^7>eD%Sw*%)7lHtBs88paN|p|3*0A1m56ZJ`-jP zB0Jy~?@TcwVVG4$XHm?yzbE#n-qn@eoTg8g&kKz<`Vy$zk%uTIH;g*R{9P#_wA za(PI=G0JWoeQ z?1KNR}c6XB2X3 z^k83Z70LZXKh+P(5(`Htc-!mf=$KEKFlE)nIAib1uCeFO_h)2(_L@9fI0tg0GA@>O&t zu~0SXK`CzmtM1B!_PA6U|(a?(bisK1*dNzb3tp^|Wc*_!T`U*}uGhahF+;b3mWbA4_P;UhJ$VU&No? ztzLFt!q1mKLw*1AZ)ZtlkUwD!I)vi=BY#R2zm)v_FaO7WX>Eh`FQ%bAe^B;t{|u77CYYKdX{#$lVa-J*|TShRFvg3WoZ@p z*)NT&-r3|r$&)9m&i_JT-+cN3zP7XCZ_;11Gg|MUeZcvNM&XpdsGOF&P`zMR**9T{ zZ(jSa$mP9rSbg^6?L_h9JE_d9ug#B7^c1(Ywl?%$H8B|&ZAt4(mL!BSY^@(j zdX>~{NiMfM*KR~cK}Ex6k<&3hKTk(T_u|EiV}aW)_r5P*S^9?m_8&O#BH;E0AJ@N_ z7;}|+dwT=7vD{}QelII4YbzC1uSH|bVcWYQA>QR<1X)2!Vas4H^+>y~@1i<8^`>8w zZQOP}AmBxZ&Gc*UmBr!Dul-}hE=xL((FRs>Z2a=&%S96t1;^|1{kS(a883Ajg-e$% z$;*>UtPIwMRaI3jEiG+f5VYxdxlc^&VdL;la{JYl-z-O56qJ>Rhlhh)9KLtH+DOfM zlWi%&$gB4KdoClR61NvmpYk6*{PQiFcXz(6k-NL391TDHw-1lib{)PVb#0!%(88xp zk+P|dhWuV==;x6Ux2ex^&BhuUcjMz(nHVtugP#|F3=0SdaH~g7RWleB6cxE&y=pJM zJ4rJ#G&C_Sje(8rq()bvqeWNV{xUzfjNYHErbtDScK*0z;Z%B?1pgUx$+I^}rS zojZ3h6gghMm!26GYs5*mwzRZ-{3y!J9T?l4ZB(upM1QN@>f*&5?^UmvSDBgL{5EWn zI(n4*WIX;VL*Z{f`r&bz=P$3>X64tfUz?koCwR=qn`74cNj^V?RyM zFZVhsN0W9kfvYcG+}@A<=JvfxQ*Kg8nl&abaJcR>gX3O&A{FD`zt`8-*XHk4zRO8D zP;+nZU{{~luVD6@hNp_pI>pih*N$n|e-Y+5&#!l%gYd6xA#3W*_^6r8# z?b+hyG^5SK@S3W*DbL`kLGBUClsoPOe9oIMQtZB!L;iNQK znjI}FDk7I-WM-b9=s9xuux|V%E78t{=`RBO{5AP(9#g(aNf#_F(--20y6Jq{5;L(d z=0h@=b*M{H6 zEiZd;b8}DUVNxrQk@*h{3_N}M)Ro2WwXw>b&@`hN;}>U7yX;%_BIMG&uSlGW7Pb0N za`gu$jC22A0fE$Psvho`>VAHHv$IY!e0xIP);BhCU#p??tEsP#IeN{-$!QiBJ0>rG z|Necdty}xj7`ejEojb?tuCJ-7dFIRy=_BM#?&4(rZS|i%x&3v0Q;vDVSVvA;U|?WX z8Wn|q{gAn-X{gctEWKB%PQItuY1E?*nk`KACnY6)YtK$=whUqr@@h1Zbe-_{y)^go z$W!)6vp$b9cY* zh-bm*DF$-2Z{18z%D})dBM{S|p|1WkBV%TI+TPBt=KXsy5fSUIJb{j#mwRr;p6gDx zZhtl)qm`x+r+(su_JTL3PxN{?#!?^dauH^sn)yxo@`K?i1Y-GbCz=`>LCsA90cWK!Sin~tG9x1+dC#Phlao`iNiY9slv(}#v#(mFp{C|+fn9%f5JUJWqzFxo z`i*Dh&en^q@Q{jjq3OB1rHt4HZn3Y@pvCA;qLB! zn)P?Y!-rx{BbqaFp&ZBFgs?RZIn2$@Qu-~-ci9F~F?}d@wY`;dcw1nOb-N&MwYY@D ziCFRJ-(HEU8PA?=qo$s0PF9W(G>pgm#$3eA`t<2j$!a`Fukwi#C)CyNEYu)iVfbsO zZ``1ejMI?*dD_=JwEQgg9gVfUj)dromi zMn{i*`xf!w!Kbb+JovB9SJs<0ZNkKR`02Jr8a1=1O5GJK-L5?(c_!7j&FUYvwzYBX z+vhy?(du2~fi3j>;z+K)CYe5aKJOUE)u*=~K71H~%wf6e)=n=kufYbt>bJE~H*VZ` z|Ni|YzTL7r0xNlWcxg2a#r}Xu$FJC_Dz2YGwQ~vVh zOa1&SN4=H{Qd7USW$7b!?@e$?V#cZ+9UbM?h#l!Iz2@#-R9t+`*!VL>I`u?M>Pu!q z^y@colx9ch3Ez`>Nt9?5@P=5WJ;Y6GX#Ch&kGh*$SXf-TRM&5JzTB(Sq7zp~m);zbB&>(F0S=NA)Tp;zU($~(; zPCWI;_V%6R2XONzV#E%KicYze;Fs5L+}J^GKmO@O%xccXx7%D@e_~>094xI75k_q9 z$gv1>o>^SRfo^VYH(7Dy7UJS`72};>9mWtW3LhMMOjd z-nem>P3C-$A_*b)(ipXH#+0qXGkGmn0bsug#oY)I4gLhOCcP0dvhO$k?ZbKyvJ{y0 z^>wM_Qy^r8$Hnzz=^ws!?V2+KDf`xtw_Q0Fjd4d@kvdp*?|vv~$T!?`#hxP72Lto# z=cJ7LtV&M+fnd2QNmCqe1Ivm<+QY3O`cSfR$O=NiIsS)IU3)49|1!_nyJrvntgWwq zZDo0J`pa9avGigd0->(heJ%qzk(dYau|m`$1bYe{)1k3% zh39Utu(3hH5s?0?-)^vkMUYfI4?t8+P3@K(H+R}!f5{)xCTC~BKzxl6wYp!m*oJ%q zoX6gnS8$ytCMxQjoSbi!@#)h$;%le~Q}F;}o*o{l>QVC2BQFvYeO?>CixN?ezidyz z6%iU5iomdmoOI^9N%FhWh5+GeOO z{IG5BZYj6t?=EjQo?&hu!31YzWgUCAfgr24TgJ-+0AV1+7eI4)AV_F%ldyrj7FDp) z8P`n<7Sr?#I`!?d=tEDU~dSU%*3Y`$!qVRK`8(QlwEhf4&zfD}?nZUt=DnaA7xM z__ww!qy%LDSFc|E{u*ODGc)7o@BjBuG$^OFgs>c$|DNBcq^NixN}Yuz?)R^s-LzMkU2*DR!Mi{QlNo83^nFbYgFB zA0Ho2e3ZnwzxF9~V3nhUa+&C6qNAHzUUWQsINz|?<*K{;*RNk)zO|j`X(cJyxl|!r z%u!+bW!g{`Q;ewsr^MC+FE2~kY0p&Z4%}q^-6CVgEa(Fq1$s=u)l#~#EFsf`4 z4xELX0pQ3fDBdT?81+0xs5rl{O1)(f9htg9&I}va$#6$4PxW496cy>sx&T1pTHJ4~FI{qScD^bV zUsYhaf=Gr}RrT`*Axsxf=(W(lac0M(B5M*tVoIUo@XVq|v;LVgXPVtSJw4Bzi;9bj z!?((a@Vb{+!Y1wkVw+@ceD{u@hX+p?DD~s`!ZzY`ot*pDj*PVVvfsajw10x!zhWCn z0OPJ*`e)DbE6g5tbJa z!LWRRuB8_~`=84(?dOmHZ?Uh1JjZq(0oT)*kdDCj4XRobMv_u zCW@#!)6#~8%9r=hZjOtMt-0nxV#!Yo(`R&i%uG#jZ3h&Y+qP{RyeZ562_*q4x6ZuF zyS8tiuH{Zpu{mvEP=cZpRRvbnt)1NOqYnkK-y}xmnR=mt7D=a(=bpb@_J#Lwa)m9T z`bJrlWmFzt!Z6TN?1~)E$i(!d?jV6SKw7xz3h<@l@Ow;vrG^nhsy!LZKpzQe!AW(I6bzSm@_lGX`}AqQIYV$LA7)5&G&PCWM5*TO?L9pW$|6?AyUe07elYqb z{-Hwt3G=j;0lWi-86~x{n_GeMUWeGXUmBuBhQ~W{1kUF;f#G=e?Ad#8A+#ZsLrJj;5!hlaQ3Wg208yKPd1U z;mE_&lkRujcG+;?D!d^~_2db8f~knGaHx3Zz2k~O;^)getS($gO8znVNLfv-9<_>t zeN|T&a#P4|35UfQvs=^Y>FMG7b#I3-GBVn97o4iI$DsC=yDFN0$BC~=Uot~TXT#X~+p$=Bc$u6N!WAA$&bCRt_~<0wf};Lmz|w($lG5ilUi1lKk}9!k55h6 zIm}(xdwRZ9lAj;YzI?Jh+sM>(5P0qD`?$T22vsW=~EA|8aKA?dZ3%(9=f0j~;D!_wJ)113~s%Kyh=u z+42Ias~bDHHEaM~k$}=qCF?vrn>6u=K*$aJI`4a`CQCox>-U`QT6CXzri*JMX-Tm* zc6Uqd-Fp$MXs}>m889n^Nkqx>6&XQOTV$z%#`u0oX=(K;IgPV^*q8c;0(;w!son|8 zZgwPN-mspS@84lAwT=Zt(rvb2h?-^_@z>99VjdF9>%>?80^kP7_XJyFWGDADRy};V zQ`9*EV3?d#{Q@djZ6XxX;}H@%Ia{?uf}?`gf6GDOQQ3K4-rP;3>IXm|YT=L>`L$%q z=+pM+1FGd6q*Suj#DT?m2~!kH6+ZG!8&jPC@CZ#bl)}}xBte#m_^SeTGD0E%=o!gb zUy=a)K6lrj?-D=!eapB{T0d!Ff*YBqu`I`*qY0Ljkijn3 z-rqNM?0i7Tm*5(5}vZgVS1j|9UX& ze0iWc2=&&!eftWFiU2(q4MmV6{|eYL*;n4!Z>OabAG<#NqI)+gB{%a62rPQ6fQRBb z8P9KKZg2mhu&{99@C9a4tO7z^VzZ|)Di;t?s|cVL37+O=W`_`j4>~B{-F;3^PnD)B zzt1ZMS6rUe!|nJquHdq={)Cz`gOWzxJ@R8&3~ZJ1u!rHw-z{ z*VVa6vC7c^Gl68jtf&~^?_UXofv2lF{BvrGM!3y4*ywi#G?s5H)MTyQR3i*5l>LLfe8;Q z%eMCX#BfF|eF((wu6>v}+3JDQNlp~XVfCz6unsyAMiTaQ%16J+%@HB&!+I66DO%F6?Z zD0kY;6N^~UzNn%d5Uos5j1u&%=Cx;fXQBfdhUy;W3dpeCrQs;+a2)iQHaQ#^D? zdM!X;VC0&wBVaJl(LH(E>55=UydgjY!HR<-BG=}|6qB20XJ_5##`fJ)5@l|XeFvaB z+z^wNnYq8y<=6ao)FynH^s-ylqPd}&ax_vY77eQA6-2x+?vt#**M=gFj*gJA=D&9- zmkmw3fsX~f4Pw-U>rWW*Cx#Kt#nneGqqpM+Nz>~=ska)E`jn`usnPW)IFsaAHa|k# zbai$0V>dA|S^oXI?~o&|kAy37=+M4CA^>Yjlmqg<6BHB{S!;UmWSr!_p+rbR0$MBO zST2iu36^C*xzyCue>fd|P^6bHX8{KaR(d(J6K zOUp14dKQ+W4udMq0lxqoW1^##6cnJVB_t%o#U1rrnr+S0&HPp;O`Or9*Kd=eu&Da* z;X_;7LyvEtKWpmg@zHL!5{+IE6^khaQwFW?rjkyUp0=*8a+%l6;Bgn1`R5lZ6?7T2 z5jrrFLqUT58v;e`jA3t#K4gvBgrD9T6lQ;azbG@byUTb+pv1J~u@hsgYq{tBrrAz87nx%b!gB|G#)}N%!>WM{4b@ zN#91sS{|=XRz2C-5j341C>$RK!C|p^74KO z34L8VfiA%PmRB>7vzJ5rr?Ept{^5jWf-3WF{D3Pe}dCTSDBj8fe4*)+Tjz!=rD_dq* z=|H+flq+@|v+N?nPn+3WzxC|5g?j+^cfo$c4b8@_Iht2vP0qBnB97@SdQigWmLM>>XVJ z5P@P9)C=MtQ=q6w669U;XXFM_Qc}?ELAP(C_HrDk+B8$22RvjCvv(@M1t4{e*Ksoy&1?W{6zwV_O?=&j<*N>FH_6j$TurUt=6-C7tR~VIYO( zPW`Ar5d@*R{MW>hZGn6B3Z_9>;Y~x$5iM2)j07?U<8zzZK|B`82dZpbjK8MT= z66TiARsGACzk}PT`l6r#5f}yTMON2D(7?%OYg#l`vK(j>HC&JvDZ?k-kzVE3kSn@OqM`4ud_Njd8W1ZeaSYarljz=YZ3@eb^FH@`$U*`EK{Xl-kpe7v`IVlcCuh?5^h`jIfMkj>P_i^L zdqwnr%-NRzR_eV0C>#XJ3F&Yjr3o|?dhdYTai$ap0OkzL2FQ zcjTsKWl2fNty{O=X3gKQj*L~1ye?i8$vmaTVuR6#1>oVshmY<(ct8u$FgI6}fdP`v zgLm)V-M)Pr%sLg*!Ru0`yNnvHMX)M3IZ6o$0;dzC^$fh5%F}*8g{Ig zDW+_nKtl}nDLf{jXJr*UU~=KY3;QohGtSvcwzg&_CNuLl#{AZofmQH3gd=7(Js+$B zh`1Tg8S(F{$G1Gk{O#)O)QA!L4y~Maa{%8{SiSTj=)G7!eR^>b1rV5ah|~jvgQAFX z&z}ohSPcJswv#~kylSPy7MUv|4A~X05}t%Ik44a}<;z16n8gMdeuvqSQ}jV|y{)Hr ztV17zAaS^8h@L7$@5iaBDF1Lqef=&hw$fok&nJ|B6y2h#(A)e*gX(s~8kq32q4_R>DCuRe5=N zx8$FhQ6^JT#0rDs@^)fLcmP1i(eVeO6IM@Kb+zL18PJSKb-;mTWo73FI_fY`bzA}! z{QUfPS&q;%GNz}cwGWcxMS=8UFGb3kOEHwk$RJ8RRB*@mo`{!jUZ2qM}alncwY?94Xc* zW?X}N#E6e%o06KU+O2TA!Q8^k?CP~^`^&{nfQcjK%6@5K%t=(g;OuevdwaoG0u+mh ziS5|GLqA04+Sn#Sq88GY`K3$lSW3W`pP&Zf=j>TPKq;@~1;}}mhJ4!VQ@_S7aVSyF z9~#_t%<{0XV>H)`i+_POA9V_srXarh%P*5_Dk?rFhe)43egNY$bDzZ+HWREfIOqoa zF|)OtUP~ic$|FuHD+ekiA5Tb4OS8CmaVHZKuV?i0Qb3#ySJsKq{Ro7ZeMOP~q*&L}qal}dd4u*1ln|4>E*SWRaSl0MDL0}oM% z^qST(I_T+#tdGTEtsS0bzqZ6VQZ_KgG_Z=>8N;}U1g!Y8#}cLo@FFN5w6v4ViPV?R z4U8i^8()7c=3nX2E3iv?@#26)jj=EmAyB}79QJdvZxW!Xi~3~Jq0N9)zb0jtr;eRJA72$+gc6q5>F|?`48B_y zk~_)!zkEqf{;|3vx1?klB8`(|Ph;cB0X{P?FKIa%H!7%cp*RJUUJaP-s%~zFe1xcF z2zeV58BVO`Cug_=w*3GTNi=EpzU&x>&8qF=$D3&%F~U%628M?t;^OcHRyMXt_(!~) zK->{sTbbEqdWe4mGJD~e;6U(WU^tA)0Qb&z@)vk=tS$@;@##1@IeB&Zn}0rOk)6j$c2-8pO_l*V*<(9(FRL{!dQ!)jOPsEojY50Ap#JPA0y4;LA@2HlG{O-fd zJ2E<2Smg3RI=HeQxp#lAg%ydpi3tRUV}i7?!WaGmtJMDVT&1xvph?&Guy6I7H#*wd z!Av4w4R<~}U%CYAT_3>NcWybvyPGwXo0<>0G6&}sHeX{E;^P~`47q>ysE`ASDbx$A z2&#`Jdl5#WQ>Gd`Hu+6WO}T;m5D|m74L-M6aM25&>mydZ9@AnfAS=9##dKsN zWVFW;5u=E9pKM%2#DJSOQ&S%n6Qd7?F{81uQRwK=Qh29`wqZcs!+jommz>~tEBJmC z@A~-TJ`vBQ(KMv{fxYL?p9gP+i1vBf4Z?6}q)^!&lr_9CO=*Xd5`0q6Sos7qA5t~B zUTeChGE?Hz6&13)U9kG`6-put-2dtUrj?NBaw66j%QjX|4W z+#+6{fa~+}<;&sc=&+8dPLQ7k)%Ccq7eu}6_bC>@GotLWu9&PdBU?Tu zTGtLml5|>9DxdrGoJxAmFYie!PsL__dBp9gdpO^qc)N4fkSdwxc5+6-KBh=U#%Lzh zgi5oqk*EWv6RM4}Axg=w46F!zeneZ>zwG`0TTiQvV2xmg+?bJ>xl6{Y1Z85F<5~VT zL~wYXjLprJXsU<_M^lr1$qCY}q-2dDJXaczN%AhWWpY$t);vL#+fb^z-LWhNBm<;dQF3%cx!SkY0rr zb=u{uzWy&S?Q%tB9#cEB_a7LVtVEduE3NvI$!N$U>JJGEvlmw6z~6Upz9}GSOSOQ`kX#QBRSCi-r<~oSC_~ z7>Ez_8vusFV!Ml3Rhr5KX#ll$7K$!S9?r%JH>vYxW<%g8FIii|;sNcf_gPO2TS()u zjK_jzo&7m}o%$7ac?w-ieL=_QfQkniX$P=J9MVZ z-g8j;@rvfYdQqLdp9gVxYeJ(CFYiO?;QFDlF}`_YZD>*U_6LHM(4R1j@&WZX^2iF> z7?ziRtX@kQ2ZX|F6S4ZhIV}gzNP^cA-tZlbGz5F6@11j?lOR)Z$h5Y%Cx}?weei{g zlQVamT0XPA{VK;7UO#d<+Ua^k=&-Oe#3;JvjzEF$dq~dpLxl918v44}V>Aj|v*s0h zw-AHr;LuR>s8dv$&hBl><~7GPPx+vc!dI4tg{21+y&pSJU27M0 zHK!XzngAeog~oqnc4^LquaYkJgCEuA}VkT+<2%~ic1 zx22UxVjT1N9i$_{b8zRjp+hK={U%HmuxUxdehrJlnN)Rq2Zz(=8VJlaZ{KoD zO6tW&p|D{UalcbqTKX;u!iM#&4+Je$XA&3io}dBXv!4+Nd3){J`?~P`ke{SimmOiE zffnUp_c8qxOc;o`p34hxp18s=0-H%)9YvEUOonLvxNl*O&I7O<#V+47mLCy5$~u$i z=;<-<-VK!Z&h1YrR8>XxA8i)WOTx%cfuQJePc*#vyRz}K{%olQ-4AYplbL1MmqtFw>h zU;$~dLsSd@26HFL(!|6>vyg3x=>RdytbXp`z^50N2OjMiZDB6hDxaj8bTo68ipWU; zCO?Nxc*Mm9R?aHddN^$0j!6)=H__9J2F`(J2fU)Ojg1Eq1V)_Lj{*)ByrVzG)*Y80 z0mq_~XDAWWn!v9!O$(B_dSp>8V;c~d@TKmT${RHw`1+D~QOlJgXd`X3)Tk_px|5YY zd!~V#5UiLV?>M8YYjNeu3S!MZwTDPvN=iz%rRg@qb`tM;6AwtoDG_*b)h>~>}I#TREce?R9;^7Z@o6J;Yfq^xY^kz!C4*`0UK zQN)LC5iJAV1n(paS4GdB3Br<&8Ur{RcL;u0^x(lIkXG6{Vg%;{j8rKM=`0cT!JQ>f zo<3Fos?Ho7dUgBsMBI@_?PH^4M0eQP0F~rsIIH3LRIsgOAaW3rPU$f*yX0ul%>_>N zh}#r9EHA78;dk%eReCAdL*UVe`}O136CZ{Fs5{WS;Xa3)o}{Ug)>7NLgRf}k#*nu# zY3()2=@=)vT%p;4Hg9jonQv0%pyA`GVe!NIA-MhL$ItEBwQJ)>7)vFkuFfbpT|i|2 zhT1XX36sy*z?UyDdVMt9kn19!6k0#@(yS1LFkX$B#uqzr1HlM`zQji&!qN#c=IzZ3R@&Qs#p%j}h=_Kq z3e2?3_3#f59EJbA`1teS8_t~hf)`^fTw@R77tjcd*?n6q;WDchu9>1h%dYfvo|#|5 zcv?^$t+c?m%o>mTe9s-e&q({2;W(DFRH+IT1(|Cf(6W6&ln@k~1c;Y04LWd^!j!Zb z^PsyhrzjHzH)a-uYuZloMzVi*`(xy9_r`3LHN?V2rI6OdRd9X52y*o^?u;v2?$*Ux zaj|ERzjTc}#<@db@*(fG#6pZ58tSIR=@QB5gR}v3nz$&1{YvKH;V|o`h!Q!nokb+z z+`+U_nj$xOc7o68{v89}ib_hG1LWhM%Y9v4`Z>wnC|VZEuzhOr^Rip`#`kUB67$lkwLd|D=*Q^cjYS4ZFX9!1>M!eJ${GH$fBf~i6@t7cZ z1j@CfME9_njNr3GB&hz~wDh-egJ_{3I<@|LvlR!Cpprd)RtX&0lS|);@0ToU{B~VaHP$K=2@qs?I)aFt;UIWVfRUM}JU6iotRv_h%VBugy@(U7{xici9}Wm`%Q@b2cJc% zr&_*;oYINx0c?Lu37Vk4zyIUiv%q&q6KITuBj8~Vx6l11OHtS?mfw)>qot(<(|#Hb zEe2x|i}ys{+uxroL;Wh4ftQG-y9`u#ioC!Y& zxHLp__}Y<=(ZjjS!_7SmQF>)GEdk7q)*0b7=iK`1qBRCl1RV!9hV60JE))C58f6%$ zg=aQewm)N$qk&MHAZoQkVgcflkB<*DvAc{1$ViBGGjN7( zmR_~Viz@ErrEl4Ar=!(WK8e_Ug(pTUM&?2SX!gYrI$GL~FRNv)%|A7BrA(Ca{yi5V zzgkL2Zw8v!wp%>0iR+T3X=<}2Zfx-MT?mZCyk)(CNG8I(10?|W@#gK@;-Vs?064p# zIAxbDWqeshPx+HFa{?c6I#O;}s-X01YHg(xh?t$8#;9;azyPd36iZ(l-^`9N>QZBb1t-`#*9?|x3-iA-n8K_^ z#KX_;u%a8{KVvE`MGQ{FCJ>^7lo)CLTLTyTWniRK|2pUn#4CfSuA7Jv{d50$1i8p@Wf(K^!%MKgG4oswRRUhPR!@fdjyw-f~}BI+0&6@jkJFaIY{ijJCb$x?zXU6 z+F;jjZNVM}!ByfC=gRNRTq64upd~9{?uro5e;6GNmS~?e_*F#WGKiE!XPX{E!Er|Y(#<8OnBQ!jma z6;IXD{F)&!krzJL>g;@UXI`B#1*&lISun;{2qobYRP*yO=$0%?U_(11rep}|~Df~WM9+A0qr zTAqjYwzrv@*ChOUgG}ws&98OyWUcs?-o`Z!2L=SdLDSyd9osluU!DXkcJ3V0)ulOz zpv0j-X*J+2#>~jblV(cToY-u6Vud?#M4Ui}HUVO@n|V&ou6radXik7j7abT?q#Ky?%`RP1_2Qdm`GmGHAiv+ge@CgC8yIv$cg!{{{tA&|AR3}fOS*;c zF*L4QiZaX5z>tAl2{iVIAR;O{-dkF1nF@6YGBt7EjVq*PT)(4Btt>Ro=EiIUXG{06(*i*D!M~w#J$F^)y z$-@qYNZ@vEBk*I}SfvU|N^pZfK64|@Ur@|qLP1AEhC6kpwTbyRyp4blKsVP=RuKC{ zYJvouBW`v7nZi=r+TLU+7TX+B%1Y4Ozy< zA@EV3U6STak>^~?=xl?5gGe;Ej7L@}+lU=`-i)@s<9D@mbkL`ElPlD9{!=|4`r)Yf!$Y~>LcxN&i5dGQAs zGjX7HW9uAHhIq3N7W{mP=<(Cs>W|N_$-)`7WvN`f3S-i>pz%xCx@C~`F}!7|j~{bX z5aS?j3NN@2MIlN}V!t@|g^O?QfKY)M=`2kB3p(&d0E_nmg)(EcxO~@hrrnlx@9|?Z z7ZHDT~pgw-_Mo-n_yPZj|oMbPmtFRKZ_VyBY*D2n`BIP!P5B&5&%O8Obo0_H&HIb~!Ybp0PF>hrQ{)`kkXpJfywW^Si(DWwEwcMPXBkr>!3`QRJVq!8=4<>2<`1uq5 zv`azbssq0a$sqeExZ&*g-Z(u-9sEkC*o9S0oIOk4uF7AOobddh? z3EdmC1e#T_jYEOK1YAsdro*EAk~F+RLXhAlJ6~lku*Wob&5qp5&bHOjd59<#7sn!j zCfn0z&Y-;<1_OMswzmHM{X0_d-28DtpVOee(1nS8W4OXbKY#u_I(l4;Uj}R;?8YGR z26GVt0GJV*5re}YKD;fK|MI1Sv$M9*ViO-;Cwe_lLSa8D_?#o7qHamMgA2^b$w81@ z@SqP0zju$LNcoN|yNbFx>YRNMpWEBp(;h#D-DVwZ{_hBJKJ*pCKQObSK#+iezl%*a zRxeI^9gALCBKR1kIj*XIie+*?)gt;j>b@iI3AQIsTCCoW1ndhJ*?VBml%lDkw-K#+ z^rglrWV+u^d!9Rb&J52TQ(p0~Hjt)Yt7T;>e&BRqBVPCl>?<&)S znD$NJSjEM~IXSPtHU@Pk=`}Vwx;Q%;)@7l^7w%r_Wmc-r^<$y7r9}ktJUa~tr>gHc zIJGWcxTN*>(a{%Y`L86<`sr*a51^EL*79u*?R>(*P-+gr)Nv&rk;?j&9!$0ay78+A zUA<9JOfy)7RwQrlRnYt3lr?{3 zC&V7L6=imoWV!taQ^suwxi3q{8nVWDaDU@2M^^ezkjtS@CRa}&u=2u-v&K=c#uhkt z@QRAk8l=Et`?U2E*g9EK+#sZI2)vhGxg)_NuqD>R$_}XmGYKW}Ylbo4z-CK@Qx8-h z?>MFhEO6>UgE>mvFLR7HM(5mfI?!aSvm7ETDkWv}N)P*X-Ab0&LgBYUMIjfehJBT` zlV3%W&B($gF_eC2vhsb@Y^i?yI07Xu0+*1+i4%un8WNB5h2IDa-1&=D!a;#^hi?M5 zhXGBX!g*Rti#Db~ke9dr$0G8xzC^M**TtNU`ZxIZXN%1NFkrqNa#)k^NWvWoyW88L z@zW@tl8p138`Gw$v=Qq98@Qj3@8&W4!fxbWs!9-B(;WizL9*;q^YcjN&|T0cW-81G z7?SAh;UUGr@fslx@Br#JK+YRw{X>kDOK0q;sr(E+c6F)kxd%AyHQWz0jYWZt9IQo| zF%IyxYHCg$VL=c#G&0K8;%mM1s@f!}WprWRL+hNb?*MpMVu>UD{qQIY-BUsD2O2{$ zK8QQuAW+b%bG0lixM8yZqy~5|;enf<>^oVatCFQdO+`gZM<)<7fUpcRx3MsGbpS0f zKku?Uulrp8#-sFF)6-A10HY9>t0wKvF;S5h61apZ9hxzz&hgU+$S)3sLHoki1h7@3 z;lwyil`njLcGglf+GxHM<`bA!vEd5O`2xEO!AzIMVsJVhS};OzR#W)*PxV(OZmI-P zYNV%k+Z8RV$k;GGALhBOfDV-su%$k`Ch^QLR?D6-G$ihjf}ym32K!*40VdeC^UfbE zb0Hjm$=CNu(LQyGBsJ*PE$rQ7Wozq7PrTU)U%Akr5vL^#`R;9Rg@k-za6%Cnbn|9~ zwd_H(qu;uHTdz3#e720sIOBQL^C*Ap=byJ;YIy&C9x?Cd&yyM&*uZInzDdQ)hC+m8 zsE;OFBkD`NeoOkX@7~7E!2!ge!541A2)4oqR$Uvx9BfINp+@z*+I_L>a{O`$>13FIE1Mo~a}kl-oQ%e&5AUfqM}aFs?u6~xnAjIY4S`xR!2@V5QOWO z44Xi`KO}v9S{Ys>aBS1#;s*|3uL_^+TufsGP5f9}hpBMxFU~ppl-Qc9tNW$g7M94~ zx-Zkn!!UfSEn6?^t{mRB#73b@jESh5@PkMJ;p9zq^(h|O;y5%|e;br~Y+(OsH* zmLGd=O)ODA(U6aSa`8pb3iJ0%f18gaR zJp%Z`Z)fMHYmGsT{t3?q`ura}5XEE=71cU>)@^ygKA)Ugj?&Lf{Mr_3xh7lYUAw-G zkHx*GwVZp({<~b7Z_d#!IF#ocbxS>pYyZ`rG zWcsM6C?LaI3VWKC;DyE(OmP~hyU-0KAu6hn+>AQlVZbydEubaD^epBSbuN_Um3=e= z(2(giZwQd@pLVM+>i}Co9i^TJbcBgr^76?Oq>Be{zxWPd4+%9j+{LfLIu*)p3#lD$WJt4L-j*`&zKsz^x69-)-IlD(hv zqq?r^zV7>ep8I(Id5+`x9mnrDR9~O*e!s?fp0D%$y`iaoU=U848 z+uvRj{dvdXp^cljzt|YDSL6Dc6NmN&oH_fVB>uJYdiK3K4~{EoDhXEWnNQ~McFTL% znj0!+iM<+b;LCCL9t~>}&G~d!yFg;6P@oDyC|V_}n&1hlE)rD4K^6)c;@(C|MuPtk zH7B9yPbU_|Ehs2x@i9EdYu33}Hzy~D{MmClO|Xx0D-Q+DgA+BeYL9li@a}d#+pF7O zpVI#&XY?{XtLhOB^IrV6=Qg8ES+5yKV`JkRBf|x=&vcXY#6v#pb)sOed{?`S(0!!3 zDaquO^W;#g)Y-=8j=fsrQ#lUZEUc`!kK5GGW0lj}w{O43#P>`u&w?%vJH$XG#7Z&{ZZC>?R{-g#W)-o1O@OYcU?d1UUtvu4j##*v>t#X9cN9b`FR zt|+4;R2Q&WW0QJ#wq;FhN5}E;shRQq19y3CEG*(=rUNwOdutPFrboN)@+q`E*>_7V zY-fW0GFsZj(a6O-=fUQY@1-qSwyCC01C1|a9J=ym`jT$3Z@YQt&V0u$(KV7*Ix}aO z6b}gzyS!$4|JGAAwDJdy+bZ1yMFkJlk?Hb?BTX^TnP|4X+g@t3qe5>wl z^eghUe;;A*=*TT;ReN>C+Tzz{-qR&DHR%rBA3OLq+MTa>xb0B{3kU5=?w)}G&zUhx zyBF@`eSKb;HZ6KyM$xYHHWLF)9Z!r!hCfFiIDY)eDxbZI{@FA%5BBgJVco1g(3EcB z?(Uv)G^0M%Ou@4HDT{>dmu$OlZ?0g?k`C}Hczbr1vyF_}7S3m$s(3gxHC0<%J1}ro zSXg*`!MZm7F_-Pfk00^W`=`GV^c#wNZ}v53SYM)9;XU>3+PXbg!)4v<5iWh-CG0Nd z=X+u6^pg!9=jh^w)Jg_9_MQF$hxMKrPmh%HHKZ81l=|^Voc^F$b-$u>|Dq*Ph6~!C z*+%PJ9Z%{r&k%uc zBoWe~t0cYWrYeF&eWp8u5E3GC4t=!=Wo2a@gPa`)j~_p7Y8v5sn{Dk{;gxNva_Ttw*-&9C=;^PDxr;@0C*!6&2mIsq5pT-RI7o~-k zN_%>GqN4bfn5%1Q@J~rY*6bEtKYqj)uJYAe%3$d$bpMvogzv^x<|sDniwMFWuS9Gt z)2vcfJ$%@xz;im!ZPcpanTflNr{^3VI>6t5&CavZ4qd8v7A0m8)4Zwq$@Zk~+nn3i zOG`H@c2ac3J%4^4OT1YUW?h%$WZP^;vYQt9_ueIF0PWQrlz)H z<;rJ<>0K`^Yw$O@&Vxb)G99Uf3%h(4Jd1oR3rr||&#AcQ=IN6FE4+}2Ko4Gt<<>(8JY3%XOKRAett7k^b0Q6 zq-@)^&TBD7St0kwaA{T+mW4^(emyN&E{Yo5;1(lW!Uj%7JjqI`&IS6^RWXJ=qwpsuFo*KgnM2L{II2uYeT zty~e@D=7r3(&&kt>l#hM3T#TQUx)F;~dS~tCO#yfBRz)dYBCpND z@d-qo^ETs@U{8AXTh$&)9=Nru-} z@@Q>YeUYDB!LP3`bws}0aKP`n%Y0X7=Qf0Q35VIsj10-6ZoXV+K0hhxPc4*p>eH!S z{;h7 zp23+Q%8%z+n}-_e)?ZiMv>~4$*j}5k{D-W)@n1LW|02D2pxl_#9XfQ#V{&Mlh=}*M zD;&t`Gkx~NTND9_kzt?3*^ZK1Z?CS<779e}Sbd6mjY6Pmvf5lRT$%dAYjosuU$R&6 z^0wh8G!XCk@dhp~uKV}zFKrGbqZnPnfOwyGWV5v{^CUwo-gfGgo}At9k=LZ>Nn<;oSjN?>y_e;l(D@WE%4{pKuNGanxx zYwLaqi;s;hEkUp9l2QwHo&FGC>kd&@(RbtA>b^RoA8^(+lZv+l-!2%vC*4?Tq`PuHK9^F*bIe7;sydbNe1dLEPK% zeOY67q>p#cr*%rqXk59#JTG7FP-4cqW&(0yL)N4)625L?Nb;g0#ofDik9RE0&jzZT zD)gQ|T^Sk}5Kxn(pE@_^DJ7M~CagzIOPdsjo^wM=fRc#1q#C0Yl1n3Z{rdIiSy?_K zB^=`!Z)qI`QEvK5b~*LMmoCoq zV{PUD-&wx*P3!4}yIct2FCuy^o6=4hejgbb2?+@SBxVa?I=E(${Xa4lV=Af-H&atn z!@|N6l8D5vvNcTsN3<XCK{Gaq+YhrG8|K&$pVJ8d37eI@=_!#QbY?6rF~Lle6dh zcL~5rP?9zAJBw~Fqo&?rSzTPKOT06`x8XVV8jy6mq@?a+%?GBluW9*ybap0ipq1&T zn#w6LKiq2Q|L~#nK;w2JqZTC6hfvA>Qa+y@d)){^BI-BfL89&7zrVSq#ro0L?(T-U z!qp7>PM_|&zG_49LLk7jtD9S0qONuE^;PI6H6Av;P0>t@5BDq{FgGWgvH^-^i94`-(_V@S4mUHs*iii{}%=F_^-rnBM z&dxv%y<@#KlAEi-q%=yOtzW->%qUEC)9B=+i=Ex);d2ywZr!<~D-?*rLSB>min1M` z5_wHx7NqLkT|P4uJ-d;+3JX)f69rQpw}7ZU(aqc1+CV16kGT=Pi62f^zV!*IM6O{=?-P37=QTl1MNO`X{JI?Tnpy0(k zed^d>uV#F<`spD%yOB$@Onvn!)<53-`t|GKHlv64?rG}i)aE+%OSQSa1*v&2NmSjI z7c*G-UGBz-`eZ`@GByQ{)vG-0l|GPrqo0PW>{7Umv2cz}+ZKR?lerI+w_7hHWa z$jm#(tk65sYr+ulM^p3D)X4Whm6-b#L#^(U|)@@q;2>7rtVQ+btp)a>Y z3mRh%b5u?%EY78;r;i42Ke7Kd=VPq|U=EAy=JH>IS?%hP^7$n7JC0sr=KAdl3L94; z3*mcC93`l4%^3gs^>5nR765NNKhEFg**$TM&--~=nu?m56ZXl@&J8{3&6VX1$%fH! zDim*b+5b4`>^$-O*jrVydUu#yFDNKrYrlMLdf^V}n!37Q7ydmnIyxGSTWB*_--Zou z$&gp{ov+Nc`;I8EuDp*L?+(%!n?y%M@lZ@if#_nhZS%+LJ1c^spFBaO|JL8%605dW zyI~oz80xlUcEL=MJZR1hI`y48-cp5x|I%O)Iq6n5w&1R#Rz6=qot{MEx5NR8FcE@>C>UP3`LyMl>fPMF#Nqr z57nj4udCNDsUAhipZ@;((hsYCiy?oDU&k8UmHa$PRJt-B=T=(OlO-~B`U)8s>gyl|+i#f6RZpQ~CP?qYF^sW7pP4nHMdi-M}amDHB>EXQ5kDx>%#@S-vq^RRB zts6cr-MC}tjKBQU*Gni|L+yp_&CTv03&_u%e|PfY#f!4Cvf+;&q0g$CEdTpRzJ}k( z?fB;|&J>x;fWrRXP9>1l+doLu*l@-OgeOXg%1%~FN=iXt5uq#au5Of;krSX=a&kZU z$-R#?&(IhgIdb1!7AR!%=F)fXV$p}Zd%F`^L4Y@K?Q%S0_#Mi^D>CM`pAZr^I~gA) zz0bJ=@n3afr|ElN{l;rm7kpZn5Jl3p^p!=6C{zlDC2W#aszr6>9$HqHB?melQbmZ zL-hduTkOYv?c296)K)A6T?D8cEz|AJMnaKxp6>$c>Ndl)rxycI2u2}6y+0{#XNTG{ zG&Hnf|LtG}AMYC>!g|Tl9usE`XAh~Xd-tbgMMU@c>j>#8D_^{H=@RcGJ*SeRqa&&_ z@ZC~s_xAP%wiZ8-vNHw+!~I@453+Ei0@VPt)Wm66=eL}M9JR}tZPlvB?ae2}LkbHO zs(?v~-@Rk!;Gm_U3C(4WvhS-)3i9{YN>Eds-sp#3gYs(PX>t-lYhYmD>M9*VL9oAX zZf>rx&(sPF9-tdQFDXQgz++`+LtESJGL-D4BKy!d`}{W)oi}gZsOqjGiq52^rBzo~ z3pvq7mQfBMC!luefM1oApul@AOn3KXAcgwDxC1t+sp|3)MZwREbL_FwD*1|yt`s|6 ze||+htqPGipxO*A$Wq?^<+OHR$(7|CE7$Be=s>Nw?Am4)9@u;tEH1bW$aMXN4Z<1p z4Sx#?s1w_t;9t^je#4RT46Dc=l%Dh~)j2Ox$3fMATswAw;-Me;Dj;J^$ORu=QgMG5 zDipS*ANGExB^BP8rMkpNRyAB{E6=~yz~^5G?JcXZbD9z9(_e zKVr5B)iEDwNh-k`H_Ez?y+=!LZOw;LBj+)}E$e#zRJ7Jna(z!!8}S*~+y4UY0PX#V z`UcR>#4FoaS-DM4PEJH*2s)#2*11PXN&Toliz9b^kdX6rW>?TNZji-%&tYGIjT>Lu zwtIgqx&U>j2Z7p4k1ST0`}r1hf|rMfhnM%yIBh09%2quU);mra-wS3j3WXy^W%)yPJcXJK4z@xY*9_#Z(j8drXk2_<1)% z=o%RbCNAsRa2?!QB}U8G7`+o}63ATUv9~lQ0%@b{kzA1B&^I+L5u%)U^_ZQXoj5w6 z!0;(}pFK6cxMv7y0kF~p4R19=2}EJg_3|sn3Eu+QJ$%8>h*u8X>L`}QRli}R2O1Hz zQX}*|tQdr=B##C|LqjYuM4FgV&_T%qpoih%;kCCwh}ZK_6g|1_WxfP0_BIIa1)jtL z(_Osh@Ba(R3nVFRxd`Z2C-wxYjDxnl%E^HO6=b>_YDCu>Pft&P=k?FZKYrwu_srfU zsTL1?55tI^PHcp^APNB#CBpla3#`Y9cefJ;^b;S+x`_)2oSORijV(mhwoR7Ddc*ql5jnTh zbih@_#59LrEo1C^e}4mrE6;A{9Zu^MJDm?g(x2)c1YDh`AX3C41NZA34tNN($ zWzd_T3APt50vvCldjk;a1920n*MF+&YSC;F+RNC4yjVVv4HIPY6jO4Fft4(&LKlVV zkOXMon*!xU;A*%f`F*&cmg9(m8kni>a00Q5Bd1fBiK3`G(sF)ZVZUgo)! z7@Zx1x&Vb`2#vUK=>=TzVBI310RAYn$>9wN2>tnm*WO1@FALxNdA;<&^3&JSytr=xosr za>bwm4*)BGCG8&0OUIZAx;0F{JBGQ8BhLjM>GM(Qk9Lv23q_^l`*$Xu zT{}Fd&X4cg8KSxqC>jvrM|bzyq@&+a^id&A4wyfC_RJ{r>=Mp%xe6&v6s-kp*1VG< zK0H1?9(W5;7LvLZMz4pn)XBV55sV@mV$@_6Okb*6t2#3yz9Jq8px7;N6S zc93oL>f+K;+GWe+tnXJVqAhU-pdn$UANc!=V{$M%Iecpa#6DyrIk=qN&r05P2`n-^ zM_3IuzWCl?<}*GvmTZ_Fo0ODvW!JU?GC&J1}5Ro zpN7!_jR8tNW(;4_Ei@qgb&D_ *KwhBmqUz1x{AC#zssK!Rl5YaVk=2-mcsqc5mdDo6J=EeSr)NQm^ z6ZgmHjE6U5jR)H=cv%IC2Cy-d)Ro`JZOq?JyJ%sHrYqoBQe@ma)4FZzR>l=8Y%nlD z$b&hE236E0#i~C#8mG<^t#fA0*oDW5_YKSXGDcGxGQ)+b%af1mUMO#l4mT(-2uf+_ zBUnF;8+ng(lwf!*b?(d5JMGY<{TNKQVICjf;kc~PH}19pBT=L*M|NF{b(DlTx4SoA zFh8A)j12lOVk7X*9W`U)aDF=czAK6QQ`HG#VSm*ymGG7=J#G235J=hB*<-zjuHLfbqo=3t2zeS3{5Qo=(0$dS(g+)tvTQ4FM!&C5M^(h^^}l8~#L%9lTHtO%;9sp+l^)5oIOM@W6gu5=n0zS_r!mPin530Zo|zu{9!O?Oa^+?_webm;gHd0v>|>TdS#Ee}9%L*=KP91$t&6 zy-GboR>r1z$9T5trsa%`XInB;n)n`p-e7miAs(ZBl=%x_juI)G6K-^XAjITN8j6q; z+cDtU08LeKUtkSwCa&i*-*1*>+b%Mqm=Ni+kn<((P)Tv|jy8W2@UluasOep36F=8Z_m6bKs^!DwB-y>5DqcH9T(LkyA zoU04g4dC?|)eHjF8Lxg7N5?VX1x#a-zb7exo+Cx9{4it`Q&1>Op2lCR9(abw?5H8`(=je1H^l17ixpLuS$V~dp|wWGtt4^tMe%fl z$sN~J-M+uOlWJCY&c-ICLHvS0XHNyf6%YC&Vm}D!vBf9LmFFl3E124W zP!;p}_UtG4lI0K_EX!WKLIwXeq2y^=K>C&KJ z(+&w~d7r-N!Zaugp|<^#zkWdo(-bA!3Q`eh#&toIk_djGqVPeV`7*dde>S%+Wil$fBy>t?m2K`j8LHs3 z@blYS#8?%yjmh4c171(kU}MU)truGZejRmF!rb@D)vHz_(BusqJ`X3bggFkkwVof> zf!IlCmdI5I?mc`jBqYHtj-H50{A^FnzIJWWESpeCN$1$XP*TDmbi*GK4t93*D_7RP zP&d~ZSuT~bUTjgD|@41zcN3i)ji`||@)15E<; zhfZt|`UVtVkWC^=_1|VmY1u73`tbUociP7ZY}y2!2vgF;FCmbrQ10rqop7VHWKxzu zSr4GsGgUs(Dq&rpa6dA@XY1^fAxptGY)Z^P8DjDk3}R3!=-zBha=MUqF4saRg|{qu z;8eX|ZrmgNq2}15Q4MP-2sYS&{))N(^uhd3M!Y8ttCXpq9*)tPFBmH_YY!T|O1(KJ zI^~YZ>2t9|mNJ$y?kOw9C@2~4F)? zd0jmkYUBn#^w!MpnOzu;7}wuO5bySo?w|k3TQAv!{^f&vmKk7B0u2xK$+-S9`WGfW zr1pAV?9TX*8!EFh#AxenHGBIgGpDJ z%(ln>xbh}Ixz!>0flv;={+87<^Hxzia*WT#ywnoZ$&E``EmX$}^q73}6ih)3SCmJ` zeSO!x@3aq8(H&|JK!;8kh*A?sZ=n1eH*TC797QE{Unv%%(itHj&DIlfDpkjwAp&|uO}9Q(v#Yy%Gg~8j zyKpz3ZlZBa-whSbhpgtAZaX6)A|{91vobU5twR(K@$&MPl$2OnGC67p!#p)$8%^K# zK0Gwk9S#@BxbR>Olm`j}sLW#m5Vq4M*L&U_-Z3C^t5z$l=B^1YsJq=ly5dPcj;59R zzXnE{>J^W1hF((=W*v2xYpOce(AR-7Fn5xjUS8;I(MtnkFhup0aQ(b;@?K}l> zG?G9jOwt2_qz^?qw^N3r1e(b4icerKj zp<*N?By{M$LK}AJtL?>5>|?{%{(cV(o>L2E%FlFC5Kl{>2}7a4_-XmYPl!g$SKxJW z1{$@6TMt???TR%gUy2h%*K6N~B5!C$G%MD`b711z(c3HN&5QXgrg5BXY`Q@9=_@n(V?4I`f2jF9<0KJQ!_bAbi&u9QT!5eXctx&8g}LUES!ieG!S_lNUPa zdfm6JAT*CW)-FN>(x#?+>kF!M|gb&ysD}AqX?U z=hf`&rqVw0@lI<|L~h=+x95$E33NE|`pWX|-v#9uIILYw?48_hfMgGMcT5D**Y9>b ze;xxc;%Xq2e`90y!~Xnq$k80&h2k5m6_0w6*FS!crGv2oZl3iuU@4vWyTL(|5jh7| z+P{5c6;$jR^cp({hoss~#aU@PYs9* zkk?RuztM;qjI)H894T%;{B5Krg?tuf=6e{ekp=^DP}qS_YHFJQ5wjuAL)&@o2-daB zeJuVT&IR;5Q&X9{--so3=#N(a=b|ou=Ze2Yex)agntVX2LjVwK+1d5t%%#Ow}MmKkV5aWR%Yf}a6db6tib zf`S^5Xkb$}FX7?(TC!5n{9zLO^mva(xb(5>&BW+_%sj6x+%3}5*2c)~IqCyknO2W9 zjg4g;dp?o;K{S8NziSFchB-JM;AuF_Ozq+_si83M2*~X&$|Pn>jxi!I?)&Y)1h1%# zKe8vLdSM|S*$B*6xEJa-Gb`&TJd!seA&v0i6^)J0+SqLKBk3Q>Q2Gy7fsFz#&CfGm ztvpb9Ct{kq(K=%6~Lu4pIl4850p4&d8kFbg>) zZ6o>R}^$PSlr0Q1IJ67`d$?{uO3$V%E2>$8ad(O;xg}@;i@OGUz#~-#$-}e)RKix@jQ`hBDAU5I=V6Z|E;j*K56mesN`I zXFqT{_3ScwV0}%EwyL3`GUhaUN$FyQSAgu^a6u|Dzw_hqfY997XrRQ5F$A1fP!BX< z*>LL&ggk#E0F}Q2lGU1&orJHYB%GnZxG<2Rftxn8QK1P|;a(oPVrH`#Q=E9=xvvtT0i79{TwxAU)Ctqtw3T zE`Z{2V?xkFZwi#VN6k-4t-1m;MYY^KJdzxBS?`nFJUoKh5;3^CDxA>a>E$IntI0|f zNqAhHykJNB$QeENX#fq8C{BWD9H~%!1sc2ez=5z_hNx;77S>3eJG5Sd2o! zkl_C!ho`~Lzh|wNI>l-Qi{U*-6ctRic>r(4G(ZQNg|6RW0pZdGmU1W+kP-y9+hF<( z9hfFjQ|hmJ%ek=#c4hff<)j~|GI)Emqc3!=jk2ywW!I5ylg{gAf@+6xQo=>cgGq!?e;bHkP~W1X5GYdSYpqX8pB|IpC0 z$zQ}M=2ZzWOG4$xl(gvU7$4~agEaB-g`h(fqAhn=6R&ONHC_jqVFxXUIR>tJ^_x(% zFc$cg{xI1DS}RJRH~a$4z*7zm4%2m4egG%zl9AE1V!afuTzlWNqxbdGr%yMjg>DHf zCt)UzwqS}H%9?q$sTw0dc&DsZUd4=R*|NZlDqN*M`sd=O(k=&uufb^W03fS4Ue1649Q5?GAtpgfey!}J>8zP^`a zn;&;%eU`Fmt_1>aZS_JXV;%~Aub0}4^8oyGr%V(eZJnHv7lTPD$M~74F&+;^9!`cs zw~*FaWV&1%p&WQMT(BFO5HL(t1gunk(%G;pH8wT^&ELF5s&vmx^LKgAxkl?Q(S8&o zxIdz*k^1xV^J=8|h$fE)=KI8^<#|{Qgae5}QHL-A{7_bgwY7x&g{#%(A4lbf`stUS zpZ_fpq5>`a2MDbl93T^x78aZ7-n@?knS-XO5-v11(PFzopUIq_9CnMfnOqO$$fZ{L zs-)(-Zpph~8ux@}X>#QEmu;*1td+xwF5jg;{~jx2zaaD~J%MbvmG%Gt7kT_6-5zlQ zwQR{7^`|UUyq5fT^8V)tiR$jZ;e4Lq$UlFk{(WNXx9Nb{e5q7Dyku?OjDkbxa{nWv ze%lfLnNeR+`2J?sU;E|1nW`F!$a;oR4kdYS=o;Vu*t3womq;fAY4G~z&wor>zr9<> za^jfT81_Ng>UxizZAsJ>wv$y*Fk`+9Nb;gMTe=40^4Z}+sUzQfMaU{^aPA*g25oI^ z$lrhf<&T&MF?zVU{;*{K&Is7ywO}rV0q!qiTQZQrCjZBG_Ae#2f;24sE5F{;x}R_D z+SxXb;S|$+_$XeDHADUpTFo%x0EKN~Jk5utj zV-W)Q7b*l)Ys`}$ngUdwhuR7$=;p1CQJO%NPRPm_sioln1F#X8XbWK!H=wC#C+&Ff#+6k>10VM-2@V_ySvS#-hR0J=J%q{tax9HmK)Rt91f{}X0jWOJXl>|+lG+OKu@0l zJ6SKowHWlUFQDF$vTnEnD>wJng2*kqb~Trk3G(wRh6g~fz*#7qu7d^$!=Y}z4Sv10 z@SE={Sdzi;H$sW8t0NC#p}+R&qTzuf24W1_HFx{=ZFmi>7AlhiV-!@ZP}g9w*<){? zHsjL{@rOKrgp9HqL8ReuR~wWMqzguwgM&EcWa|S2@Z-lx9^30QjNQP2h|r44%E9^+ z68NjC-Ucne%yOAhu-GwWMa3eReMJhqH&6*qLDjjwv<}sPNG1h6Wc9*VqLa zb3xdhfk;3QTQC}eQVfn`{K{EPB&fTq3#^Yk%z4hJT=FW}fIwrkr$Vt-ruKE4Y` zY;r0B{Eh*32vqc5dT@qCR#sLA96`X80QeH(&;pX9LufgZcd!cf8<1yatT)|x@aVXC zF9%cSj~|TO(&usZ5zokR0MxDk1C#IU%So2*2D38y{#7PE5x;mHp%B%Fj~?-GbIZb# z3)_U{$9B*w=qw|sRpfEjqb>%&sh4+VkF`0LjESB;MAq#WfRDcWVBzBYFv4P}DgA(F ztoP~Du{aOuzRkAz@*&U3Ru^dJbWBVQ+&YVH?0`K#U{bp9_%$AoPnvXuW0(ZTByL)|cbxJKwi71pbEkB>B2kAV?K<`{ zG2KNAw(^UMiFq`Y3e*z4dO00DTXgjFpK}u-6~@pa@KW63`L%=sfu-gUO7Iihi->5$ zQepdy9DSiAZ9}%=sF--j0B9@dN4|R<9)^9}(J@H&D6-?`2re9}i^Oyh7zxK41rXJH zue^N{6Bh?T!(fgZoBYcR3U0?&lpe@sF8B@9&dL=hjvtp_NNx9?tz4b)mIYec7Fcpb zU%BIWR7n>1U2YkzJi#)1s zuE|X8>H&Vre#1cVZNFJxqc+1J|D!4rX_rtoEgNm`z3 zgl&XsF=qUxs5u=>7NlHR@eG@~+55bsqt2Gq57(OGNDfXOkUq)=4V$*SrmCu8nBP}b z6=lQ!mYYi++l8$y1T)|pHmHuE!(kB-yldB5Klybm2WDnWGX=e2Oz)j~&}Fi3VPOGU zDiWsMbF>nqQ1$3me$0ALkzzuV?hWgF+z}fJJ!awFx;@SF4Tvbos`U$ti;{YJh^Qvm z5jf9=UOSHE(A%;aa5y%ehusE7YY4H>t`l~>C_daFFeJo4M>jQzc*ZHT*toc`c&)FC zVTf$>o5_JD9L+N7u^A)L+YU?ruJ?^EPLQ+Yj*iT0*Ghr(N^f)30O0w|edmMV4Z%}% z>sBPm5AZr1FlG-A3~;YrO`gotUcGXTJOwKtAb^7sDB-UV z@hB-5`8O^N#&HH)KU^C?0}?h2Zzxr*IIfOpwiQi%BgV3 zKK1)Qoow{Ac&e2E+h`Eza8OVjFZf_t;RjUtcY<5Lav-l8vq`n!Pexrau@8sGGH=lokEu#vK?kp&9*!?L)5TeEcLNEu1 z%a8Y~SmnP=11Eqx;$It)Pe^~9QpVgPs&w85lRZq+-M_4h;-Kc#ltG14QBgtmk;1oh z^+ZBimjb-ZP+73|ObiTK3KH^YvRDITM&Es?s@Re`OhodJK{UcP!x@A!a9H+i0rhYk z!sinnA5HS-&-2@h;P-F+@&!r;B=fa6T!%(1Fa82D6B*^h?Y7lVZ$RqG4uEWe3S=e! zR0Lpd+cq`X;+I)j4Rh~st_A1)QPZ+>b00q2wtf2u>NHAo{TCy{5}b|EzOE>Mus;cp z7mQ%KaX~8)t>iZb;EBkQCq4?&2*3FuV<%)FzP+HUt1EHyA`CciXZ4kkhm+vrfdv^R zL%1<*OWGrvpB@UpNdJ1|f!mytcZWyg0-E(6)AvPh7tzv7#{6I@b*2PTwS2X zJ8^Wq(gc1<7YuPb1dH)~3%4$zG@&x4=%=<}3m^mTAU|~NI81PNIJZB6_Jom9Y-*}4 z$is|hZ2fWHZUFhf^O$+!>lwi7^iTeR&&>fx1ySMNm6V)1dD3y9(GKt@)W!2bCpHzzDWT7VVr54fon|v`5X8@9Q$ey&20@RLtmA{!E>MjXcR!I_yHLVr+F{R1Ar4w zbk24LnLQLS5u$qoIUUF;Bp_hJIe`727~(*PeNntni1RV9l{~`q8^sr4^*l3Ep7b>g zV$h8-$Nk`7SEvyXI~Vo4jzWt54zr z+B^(125Bd6OeM;qD}#jCpgWvmqmteH>;gsL*Pb4DGf@R=hrb9NhMWr@R#(P$BpyaJ z#s!`^Uu+Mls;*{LPJv}(*SToA<;&AEGMpS7tXnb%0mJ}=`Tde~67l^BmDW1AGK?tI zo{}DDE+Bs7bP%oqNShdW9Fn!k#zkN-cp$Hie5_7R0kZB(Pe7x7Ur~WXZ$;#n+(#Jf zKX4$4gi(6AoL^;DnJWq)fjm zyOa3h3Ou&e&>(7vzz~(^P7EFdj`yMjh=_=E94f@AIaq$qV^!>PzLb{6;bjGOV&M1; zsdJ+lQ{3Y3iO5`ri=S}QPoF+@i?VIuXejb6Cw+9#F=SkZj4MyXR+s7mtRwM_a_nPf zXx@O1>cwcSfXl~g<0LHbHKaBwBfz&p==(B_&$y;#?qAOxf5%Emsi>9CL$TawG%=6SA`#-@Zkb@OI3v zA-NDZEeV({A!=h!U)g;pZGejl^SDN>#}*Nhh2FSG`0!v}{q6Ad0ji{D-E`d=dII@< zDli5yGmDuQ`I5aKwGA@9KzX*$;sP4)4&dkUD_hhQ7UvxD-N$!14;UPu!&xGbM7U@{ zRk(Ma4R)2+-nM?da)OTES}AoodlVHMh91wt`@7<8Vambs@rs!%;)`+8(;c9O7H1%g zny|;9jL-@|yfA?(Ic!E&0*NKc`uCg|aqsCO2SF?@`cIV!>%ZSV(y{ob{nwbp*uT6?ee^X~n}em=k7=jqYyzOVbd&f_?~(|HA|Dxcc4fo%gp5Sz}N zK5?EP$d8f!PeV=+#K^p|AwgWQK664=%{6+g+vO7D#ooCot*{=(ld>o2RnJ{9;4{C% z$|U-LYc?ow&+HJ>Srw%$^E+ow=bqfEb4Pxxq$2ApXbnd_W0CAOPS3UzAn$sbNF=Um3-nBg1FBna)E^)%4KAI$q4R1f`T~BKt@H} z=O(8mxXw_rrtJ!lvs;`VjuN+(UU?{=c-Y}bZF`l5cAoI=61TJ#R4dqMn_zbE(T@Y*JFvgyPN3oD&U+H$y{1&!;j{?mT#~ zp{eQjT(8e$TW;d&B^O{=O#6!3qQ7xiwFC2Jxxxw?JX^d zk3U9#y|%X2y7R?)e|jb+rY&1?Et;Oy)+$YT+O(vp>-($}Oq54NMCcYf4~LN!===M7 zw>wz`F1_?z_=P`<+xD<;*EZ>T0YTjc|Mnm=J$`f-&0fD4jP@v z)+@n~bKNeT1yaGac6zks7)p7} zhI}-ZSzFGNP?e0gal2e~$8DzNV&(X7Q}WI0*B!^&a`nr+4Gj%7G&J(e>R0Q1R-1~P zMt}bNd1KS|)-2tlQc@*PyzR>!D!Q7FDIG@dFpL zJiiBvH(M6W9yp(MQ;-^mFzw&BeT|1;(`C%Lb;Ql zzpkmt0jnc!({6CE2D86xDI*-+)6t=%OXp!=P_QOo~{uX94@F|>bcs!-rO-tk4>r=)o&ZU)tk*KL$uA|l7vx?&~Wo~&^U*uV0-NzQvP z%P%1f-|@?h&73_6$8WM7vUD77OzPX1Q&7M^yQjY{N__N7w*FKo(fD>7Yg!T38yA9I z6LllnJM`wWvr*5Ik}L+_+jis+_f_8Bn@V|~nVeQV=GCi(4-a<#{`KqayLXk$b~kJS zm_B1e3ZexzPDFjr!h$}9G}OA9g}a- zbmz{Uj0`?oTU%NBhYuhA`t=Jx=X1W0s`e#I*QzxmvY?=#je&*5%)(-LVnXknjO16h zzr8M-o{V^S;y-VD#Ic7oLWD1OsG=`6xm909;PIPuD^u?|<68EKi_bk$k$z?OT|Rdf z-^F`*>ixhuCgSViryA+u{5oPog6NU^okgsq?r<9H-@iZRsLSlnpR6cdW8;2mPS2l? zaVT??oL$3{lP;4zE!Jzp$#HMrzV%)l-j{fB9pNfnvbs2W$g&xQ`>rZ@J6fN#KVv4b)uo_wPZ8gzI~|H9b447{>RpuC8VLet7toGM}|uw{GF~j=Zq#e8Dd) zY>yI=7hF&L^z10K)lb*Rq@rWz=~>IW{QhoJvWk9=f#1%{!D|ws=nWzg5}I9ET6xcs zlLsS3%<}6WF;Tv$s@i+xNJnGiuO=0l7LNIm^z0kguS<@$KR@a`b}Km8t2K(5nOQkX z?Cer>mrr(1&d*OVN4r#+9`5c5Z2M_;kL;P#^8D2O`}gPPU1jMn{k903x$}h&&Qa*ELe`|8vwbc`gYyFSKZL>L&7fkpl+~cz7(K^itH)LP8kP{FawJDLC6Lmx-E> z9~-=UGm?@_^z?elWHMaMCd>kF-(H%tJ$GkWP+o>lHLHKEra6G1+9q-JD=NWf{u}kU z;CK+z0o)PVZC1-fI(odR=`-hx398L$>NP`?S*HujI(#!&>y$12(dVVSwRB{#+S4g%isQzvX?7628p~^Ycn^(o&L= zT|cLJ!$opXCUub_$+(&8)~(yIV@H&jHA80^cF)(ZU(qVfJv!RjBv;OsDD4&LGnONc znW*1YG5%Cv|0TvcA}Y%2^5qN4c^z{v3wHlgBU=mz;>@mc;(u98|JS^bH=H=?_RDy( zr{t*P(9hMSNft)NkhXn?4mnK^HQ=A3;F@s3$>!7x_jX8WWL?tQ5kN-pZu(BGdFj%n z)2C0ny3V6Uw=yv7J^OgtF%D<|!(`!e!tu>JBtMJc=44}x@6#H?4cjuV3nk`i+c?EaE_Clb-*24KH?gcOM}EhWX$1GNh|mnjJ4g zV+R=M`TI5wiJS*9(L_bnx?bevS)s+hau{@<8A%#9xO~~+SO3Rk>Z+&o6rYgeFS@nt>hqY|o@umzaGph%K<+pNj+FrhVx#BW86PLJnA)rx$YD5uz z{FMzGHeiTVi&o5&g@uIlkBwz?XKLk{T3TABCaUqaU_cg7SYNqv#oC%v(p9z0+bh?k z|HFghH)!2je*#!-OPpQX{pjQCk`fMf_B$S$@vluxO!kK=u&}UPU?C3)R!9=&=5yR8 zQ~vAsZ%jSsivr;+%*<@U3W*I7kt@9yADfz*7HvH?y-y@rflzH>U1N*5eOpmp{)V&o z?%jzPqDgn{uU^f`&27-*KfuHD;p4}H##}_arLebe$Q~=bzpZ5I<_UDAtBAc8Ti4iaV+eG^p>Kg zEmBfaPW8E%-?6c=JJ{JTX=<`EGtc&TO#Xd`olWMV&$8ao?D|uk1x<5nCFpG)9v&!7 z`-lLVKnAm&?yjz^($_t9lK*GW{Xf>H@$ykSf-rdbFr0Ssw zCl0&`-Yz~n-f3oN*pRHkDJUp-A)JB;Z69h##8nqtwxs3f=lA#b18-ndH{8EzJjG;W z=P>w5H{blhy?ZLys)MzWdBz_ZE?lG}LR(9{mOAn+M9e>PMJnx;zUu>|2n;7`%ttmW z4pgU+-g29n|JU4{4>sY&tV`RrZ{NXS??0W}+2%alIPf-L ziET?4p4rr3>U*!uTx?RuheXE2bfdzYbb_Q>^*57`*`iK@bR{zYSCp0S4)c=xR$nRi zCBvX@wbsftI;p7{vGel!oHC2v(v=6hPdVz$PWJYuUfB2N&9r`(-PtZafwr8Ro6G4v z{|(hfMaydNLDO{SYTfnqTQOt$(OM@a1oRj>0St_dpQetI`zlzWs4x+_3ar8vlH36! z$;ruS*-!hf1Q!&{07(C+iwcj9#w{Ki9bLlqVV$?;BfiE>O-)&Rj+fQqG(Y3ZH2C%F z&xOIb-zQ87*H3nv{_?N?coY8@h~uA{R746pAP^enqrGRfU)c{}HAh;~ z!B0|*IKXfg=O#(WXD>JR>*+>C!LsG&ZPFgIW7E^qm}k1LUC*VeDaRaX`PbHnIeIFX zttH_&HKsi}+K$8a+OJ-{|Ocg3%22_eV>4XwYB(Jy;KRgBJO|z1P1V__1TY&V`uyU}xsQkZY?e zWh=9t6Wzs8k&#|&D|6qzeJi>deCrnISyx_<=;6a|s2}-dMz-L+($YO>the4%@*cCX zv5}SalS>eC+Ig&biuA zQ&g-0b~qa$BIB0un*K!)q1UD;YAY)TzP-EI(TzG} zUaJ4v!~sMjKqL2eb^%|4B5m9_+Ln9S-MuIvAfVv@C80)M6<5)adLjAIK9!)(!-o%( z5O&kEy1XOiqK`rTeSLlRsl;}b`IKQTjXZ!%ZwCbdzZv}Vp;wwy&UF^r-UDP04BRGe zLmHNu+69!d5l5Ux7H3A+$$h*Y?lYFTx(TZNKYncRH?X$$!t6#DxXW?$ zMNZCD%yy%jAW7iIo3{xYV{fnpo7Trl$!BjOR4qQl#v1QD`QX8W*4Ea9goLUi1_}y6 zB_&dM^g9pN%3VJZm`4u`M$7rOOkfX+E8anjf}&jhG> z^rQXALMwm;dff(NP%~dr&Rw1zYe%~jb~<@%VOP0t^;cjFlolwC+i+6&5toVAMwLMo z6%|1BQAGmr>{|?undAUN6!y3)7Mft`fc=GaPab=<8^4SZE^+ke=nLGC@2Kf#=`=hp zl&q@T@@;!pAygFczrV|2)%hY5{j-`QkKV8PYrz-2?GjfF(1Sr<`1BZ-CW#3=4F8m%e``0NSP7!i6 z%kMwco&L}Dz0ixkOw7#E-piUQ)CJn06S~TibVSNDdR^)AuNn|(QDAh`|HqFXRa`Xl zOwVGAqDTR)0io1o>7h26tc5@#2tDP7R#HAs<_!5{-9~26-rwNa=noi#2U>Ru2-rXv z+NT_ST3LARz0uG!KF?QzG5gy($DqeqYK-Mja%SOc4}Y_`J+;@1{RLlDk`2MtC~DQJM1TFFo?B%@!_@rLcj3rd?e`ds$x4w%&~5&f*sF$n5r7&c9xisB zwY3=lV?L`3$>HJQFOGv}qh}Ws2ZI*f)E9C)|=&45=C?lr0)aY4U6K-))TrVXw(h7{=}fDRdylBFa3gEM8s~qnkMZ&I|Ni~Epmt6)o{~sT1oHba0h6Pk0fAVDI`}bzX#+usNt!e7%=;gSD*!TrGIVt5w$cXu< zhxH__fSQhdXkcKbPP|uBQ*(N})1~UpwrkXzvo2=$1a932EIon75BwP{f8pCY3W6)d zlZu&>v-gE{CrT(<(oL9)>+3Mxt5>g33roLh1R)N-zS91DL+Vz-w`~8;a%16k=od$w zMy4|kIy*Z9SaL##K~dMdk|YQP4LM)8m86Oug`~!}Z{-BSHb`3g9Q570cWBBaUaGI(3m82lGg0C(hqBH$ zvsLl<`SlHm3>aBZftBdv`T2Rg!r0U_Y~UI}q%nJunVOl+eSJeAOFz+DMv^V}UwCHT znfLtpG;Oq~#d-9$s=FMW@v_&_FJ?=3e*>|E@U~D9xV5{h>n{7@C)Q>513~xh)nhiu ztV}oY>%3ULUB8Y<>7VurXoGfx?`jTNu=9oWC{P-{Z^bOG0lZ4esu_gh9{XX2?c1$v zZOd?Hfla_M&lJ7`2PwrEApx&UojIs`xURDb3eR(LUOEgagIhxbp=V_^f4!N8NQuUB zpc$0l7tpHIQ`I^Gw?o_g^y!n$m#pqQ`EdXXOtab9S%0qU0Rb=^Rsg0ek6gcTgCxJw zU&kI0GynV*LNGKH&0Hf;(Wfj#IsM|Na!Og(HNhf&w8lmsCtd(FsB#^;oSboOZJPS} z`qqj7t3Wda#n6ZYgM*<_LzV`%l)3t~ye0i&)FCTocJ_>a+UT%b6V$VjH9nJFdO;u( z2m22CZMcutpsE_L%A=%9qbdfm2D{6I?Yx|CWo2bx?~h^5$VZRzJmw~L9>2k81rg7? zz_KO37*2ztiprPq`wt&B;`)=1a_`&c0|@Hv?G4fx=QZ0-YT*KxQpRUnb!>9{suj+jcs{jx zf;Y64jdDXDDT zVlf~SpjAahMJyy#Op+~e^ytzL{fVwu-zO$k+s)zvZr+rUdW{x5H__cR(NpYF-_oL9 zc)Y}Y2D>!7y9CQ{la7N@Hbp%>Y&J?Bh#8&s>9c1L$+pe>CMS3UAMUej&eB~PjPp@e zQd&m&JjRs9&H3=*1LTJTq1BN7(PIw?2xO6j{cmuj+DkkNU&cU@jE?5}alz0qp=}bL&@@<{)JQ?^O?8pdh$aOs7vhk#zg@RHx7e zb#SHONhRzZaH1iM+x7mR0YJeJ*H-7sKnS?GE8f1{B_wopWpM_5P7gepi)P!lZ7~46 zu+gxoFg`l6^~>-d+vlJC8{%AKgmR3{e2L;(|J6;j414q_4m7zb?$4uNBLm5SYG~d5 ze9ysyQ%jR&UzDkEFO(oERW5A76_MBs&_u8I()dMvFZD51K#pFYH7{UZ5KdTEPN{jP z2|_(`s=i#wUqt9w#Wq&%5zc78VVw`OM7e{azAwsWpub7b&$dklG zkLjUY*D0f^y=?wmcUTYhLBwGN@j%-=slJgYUrQD&hXBCI#-@#3_eIac8n;AGPp>Gu z+W0w`WPOx4IN7~HQ>b$hr35?*ZH)c&>{8xXd#Spfp4E4oWw=WSf=Q+KkP!AKSdh^$ z(1@5(1x={Jo}SsCdG*o<)^?E*Jjz(cBaTCWY?W-F&giP=`x5!ch!mkka=xQSJL~Gk zhi9=ZjE#*$%+&E+DuLtrn zQk0W>3u6odWKi8{N+RBWc%#s%Q}40oAT@Wlv=o2|0Hooo!N=-;X?J;@1`Tm+y@J+< zF1!Z3X@|6@#Lk_v^pvR9^73O24&PXC3H*A3T#asWDAU>bc_q7mx45c1BKpR@Pj?QQ)T#kbP3I=kEBAx9PbB9c{T|=<_o@y9522;eoKN(nzRIQqtOK_i|?SuezLGfk3@hTA*V-1MfJXRyFh=vt*s4PQbWxRw?awZ zcYkO#DjS_aOj7caNAD)s&u{~E%e+gT{PTfm13bLEK|w)_uum`B+6szc835|g;?>ni zyYra7FV-dt#j7GCd2%+~UI16&HN6f}d?)k_7^gPhF~?9t^v~A1zhB6+|Vj_qnp5K{Iu|m!eL(ru|RHV>4p7vWAEX_>}0c=P5B_En^ek2gTkcH7qp*5MzGAt(vH{^?&(;Ixi;J#oyg zK007%WaJ1$BFvM!+eDrj0V~HlE@t_uXX|;vX!?6!c}+Olpgl74Y2J^B&>XvQ9*#?^ zk9cZI3eS{fWL};_AP0=;2pE;m&Tb!n6vMP3U_#0t9o|u}jEsm+4{oO)y`uJd)VIOG{8<$v0kYYa-SQ_+ zoM4@yKzrWjWo7`J3q7Il1!QsP7hE(L3WWs)D|m~zLnGjj*oXkwxYK}OfFvw}dVH-r zK{eoH(_bfDi*1i5z8j%=J6w=uVqHJe9Jzob02XDEzUd^|wtIOY?JV4HHM9%m5ejXm4(GusGb(#=t z%xWVZgodhPW655lIvXpw(2#hFM4fHANy2h#N`AiR)R;p5(9k?oY$H+!{^@uV#_0kY zG3F~N5Q1<7z^BvTvAa8@v{h0ugsD8+gztYe28X1hqpOnQQ|*Dp9iotQ`}XbBjbzpG zN#~QEJqxqAg^6(WDnu+H5s|Hwh9HYri>3ZYD)3Um0O|+b41oT@0z0~+quIM959A)l z;HQ)wnq$d5$irg}WAl4e@b`v#!j~b`Uho8>1|knhA_^ow2%BqtLg+H+&6XIiCFv#i zO%14J>9L?Op`kOVyXT(F#4)DxKcW^k_nO{&GJG7?hG8w8T%oBtBz-bC)hfv!2|8 zd#F|7?u6U}w82uSlD1_ltzFALJxKtnzBH`gyMO;GwlB(cwfG(c;o8+RzQgbrazO;JXZG&hs~jzn3(3!j1mY&f$N6p6 ze!klb7F~o7L=<5Kse&qOR1j%C*gEJM*sLbx>xg5Uzf(s<7=kBOvf)dncZYp6=2&~u znE<8m8r3G=d+ty=>t$Y1Q4zi$L$6XXZ{3=>wuQGSkDnlf0vX6_-@Hix&~>kJ9BKZD z0V$b|R>HW4GNQP6359DNWQ5l-e)%tb%>ny;bZ6iz%|pUQo$8=%VNJ06exGI`Ty=QJ%L#0;N;BwnIbMq9y1hv@JQdKnS4 zyL^@O^>^;vS;UV40M;m~dy?>dxW&NdvW<-%xI`yNBV-Y!i(80zW6HK(Fr6&z0);}8 zf$C5U3-Nzm-h_FA@mU*lRQ&Ma1+Xy~g^2njtmPN5jd$9WMiUJD=WiWAjcd+A~L#G*I?H zP59bur!DTA6f848ipT&OLMReF#HGj045%1eG&MC9Z7RELwJ0hoDm&XY_3~i~3L>Hw zp2IVhxQU@5o{8##U+Bmq0K4LFk1)m~K`$ZuL&40_)k#og6%IpmEkX(9l$e<4q(jo7 z#>TFE&?JEm;ob6gH1o|H&`>Mjx*rCLTw5NLxpBvYftn~cW@l#yg^~cV29P~^v>1bb zv-Es9l;Qiil&nN~2)LBEbw@~8SlGjdeS?E$^T$Z<>JH|2kvG(Y?d>5_Qsn=eP=eS@ zB~oSZcbDN#V4nbevK=(K4xirX95As2#ZnYpIy7{AKMydbjm&)Xl!jd|?Vbs2;JJps zg8p#fBAMEC`@HhdOcOOz2i|Ps^EQ9 z6tqaSG#J+B${P=%Sv&2%Ag z$l^HQR;QKq4-TfQ@q&@xx<%vdv~xXxPkW(l92X5xBBzvlzF+btxYQV_SWR;mXf;Sc zIa2WL-~X|Hhqt_mSeT%}tl4WWnCndonyQ!}$xrUM%>gyAB8d0;d8XX!M zf+q~irsqDbh_|nl=ltiM9=&1+K7!uK=PYkB9nfg&=m<(SQWg~MM#bnEHFKGY%c2^Dj@FW`?}M}=rVWAy^FxXEU=!5G$=E(75Nrzy4sMx%`$0-;3}3}oAf>fx z!uZ#(Uyp8Ql&Fwo3E>JTjN~&;Z}3w{#Z<+hkaijY(twWf7_27s0J%bVOiT%yE1>nj z;9&BzXLKA#rW5Z;yZ`)3if;LMivTe~f(r`2yO~|Wz|^!AwJ%FApkK=8%^_p{IUZ39 z6JuihFp^FW7^aNXAQL6M(=6XYKHuqF?v`K6reB={yoSuib9lnWc` z0?dEJ;UJj8ases>+bKl5g6I@_p%;MKnZGT!5TxXM!MUl{kchH=|$4T zFd4&9snli@yCQ-913j8u##{2p5qC)M=#17R^>uNSg&`Q}p)U(Y<+>*ne@J=Wetny#v6Jn{W7S>cXg7cRrFcAo6v*s{fN-DhvSmLgAkSdup!{jfEq%Gh_c^JlN8v|9GOZ zkeP6wU)p^KgxD^2W&TH$Ey9%;y}f@tQLS6YOs)bZ0YD=XaPq{74+Fm-Z3M_6XzCO3 zkBNI9W}BLtBTzItU3v?NHx<8pX>4K=`OhmRW9nm4@txf5VFL%RTKZ)u~o+h}HCn4rG2&#Gq=)4Gs} znJ@aBqUN8?;=F!LOk}C?0@0F$P&BLyU)F`}2Ji-WA)$%RzOk`Ot$EtS3ej1f)?PFb1c3MQvh!$x zkpbFftMS&=)tLylM;~_R>h3xn-+7`z`Lw5WwJJ_(7JU{uet$c36=MuBR_cam(2hzM4st3o!7mizKnx3nA*6LUs8 z1xdGm)rI2;$o`v@9NcUmmq8)&7})`U4HDB}A!qH!&75pVe2-ltYEsRZbRLwj4s@L) zY5pl7;y^q2g|4nHD)q{U9B~aLV2R>HP6Fg13^Ny#Yfmc|% zGOGjDg`^Sw26hFhr$gT+1$dn-j=B9Q?oXct4jibdtINczFkO0jq(wxU{s}aYidP6d z8WQx#3qH*p1AGrsj$*rvOc}ywp%ye`8p5~BB8oPYtD?pooSeLHI07dZe8A5DQy)h~ zxs0~fk=jq6n}PgRBmi4E_ZVo4nAXxm^8!hp`jF8pVq^44{z?NhaF{Ks%9l$6h zI9d*jhN$^7RUUE*isN!}u@m=0LkrN&5Y7V}-n?B*Y44*zafeQ{JK0f%>mpir_ z=Frg+u@3OfXQ77Rm9ShzZF`oHXAit}i>Gy`jEszs&`-GbtE;Q9+Hu_CF&B+xK@ntR zM0=)ZW(uA^XG2gLt9wT;>KmySey`fJl^ODHJy7}qjSO=Hf=CEU?+oICEg}0aKnuy| zcwyUXV`}=sw2m!O2@011S~Xr&hWp~PJayB#=Xze=ZwMc6*?EcbJUI4Hm>ZEmv@6C+ zLMf2)TFjr=y$cpVBSfPqtK%5C80|YGu5v+*b!pW5disPRjK+r%5%U@1QZ5sh zpbiBu$s*&q5{XR( zbCaY_aC0L^CboO`cT%h2K;ebN#jRzCXKG|VJ|}aX>(f)SUAwqXWopz6*aMy)#-d?F znXnlx6Bl?Gi$>Rwp9qo?Kd*9gsEm8>UZ}xI$;r^DFLu`99K%`^+syH075Daz4&gwG zhwzM1{R=Gt{V>6qnV9~h#WDa1FqJ#Ham2yQ%xr~&P1KyrMkVHmde=Pc&3A9#BBc?m z7we};Vq;QV<)5B&gwR3#nhcm;YmGHX|l(tfod9cJL+`8;vs=1m|djVm~dB^;T7 zw324=i#3;CFEg7@)cXDMSA(0E{A05kdX z{Z-$m$OI!_+2i^>7^eA=qeo@H-2oDemY|wL)+$>ZIe?(@Wa$#Vr!zqR@bEAc;1|!I zD<~>@AS~5y?}m!px^*kq4uVmar#ooh|1Re`hv>^W9>z*?+LVy$fvD@4YB<=yFC|ri zUD#2D3(16R**A+MH}xhqM<}D92Dka~MeOYC@EH)bG4#-Y2hIWcHu7X=zvbuWcftuZ z%I^IE{#+jh?5*7`S{4-#hf)$LN-x7U5<*hw7SChLe@f;&oRSnGQcg>5t~E!+2abGB zc!w>hq`OYlbj^T+)y&{nl982F%~}c9N%-ExUxr4NvU7C^!}6R=xCp-7u1dg z(foO*)6Jx-kCreT;q?tV_HTz=@(@^i_Wp=aq9F$>p~l_nw+(HX>s$uKwG+8?v?(K` zk2d0nXh5T2s5~O1#zCq1@$b)A)94_3kj?}m@`3y@uKn+C6Y;xp>Hc1{5eF-GkdwhN zb$r5U#?kUSH=GRa^R)UUjBu4JRQ>&#suMln>E8nb6?`WM-{F7xZGtJ#$w2O=?rof4M$&YV_2Hju9vU)V=|=S+qlnyy9&%pf8OHcfA`ybz(viNX zFM6DbWl;)A3MxKde`x6Y6gDL*ucMx6HW!WdliK=s)sDB|EKz6>j!#5xdz7cT=jUy` ze|LQcw*9+T{riaa)3iey&m}f|sOuM|FzPJGQdCy9QFc~Nm1^T}}pSr)vw~4)W%MP{z`LFu8jcIr7*XJOP2K>mw7z8Yd z;R5&4h=XD4)-s5)e`i8{^x>xJYK5gna0=A1n9u6+FCL}owD$MX&jl8jQtE__O z0fmB$jow4D21>m;;VghOlN1lQmA$22!Fo)pCxMLQ6IAj3pTYA6J|TLC8bq|`Rwtkh z%C5t|snG~=Ps4jBHkKQsw+MQD z!PqTq(W5@$^7 zkE7sj$$PtejYA&qTzbp0a^Hg8Xe&SR7`Bt=OPS~=<@KNK-Y!ED+xYp{CMzl-`K79b zr5+E&d`=#00Ulpza>p4q<7L9Z&JLZcqZ@z_AbNPRd~W7gDvqW^!vC@?gzSUgJ?;*) z?E;fbK8;R@3=#?Gyx^sm^vukA|D1>Yn`F_*IIgA^;yj0=P#7m-?%R&-0U}|QrMDEf zYw4})sruCTcI0#A?!{uMmk)S%To4G~UZ51;hnWou!^F-mi5J6@{Cfz^-NWPdnh#*Z zCK?)6N!Oprao+B$%L|a5G7#^D)(Tu9FG!JMY;5}c!D!X|W*b!8k@VAv%^!3X7Mkw1 zJ2<)ZR`y-CCJV%=jYGCQlDl?2fq@NC2Vxv<6LTlRQw&gW>FHH*)B=_j5(fy@k+d7^ znW8mnQ4x{!bBQ+^pzf;)qww#(@xfvjxlrB;3Tph+J=B^RC2?_NScl5h-My-!BIJ}h z;amNbeKJ6kFWPaEMcs&+AZSlrC;ol;{&P6`f5^V^zIQ@jLlPR_31^wrdL@qF%jnv&nKw?as)w&hJ#} zBmQ5dKA(B;qLsqJ!c!{-QS!|u)Wp`5AhH)aBH7KKQ`1wU z5Or%H1?k2Z~9=|Djb=)YNH{1G*aHQd4wRSzKsh0M`b*fSGkXPdOES8>xiS2%G3!T z@!PvLzN%8P$ZG5zUv2S_&&2K|r@eniF-ov%tTe6cUgEXH&?NQ6M8}ox4e9~%{G0y# zJr$6o`S8`XH`dcG7tEL}LfBp@?)T|9=#eEbS=^Sgj+`l&v{;Eas1E6{Q1ema5DOqGH(8GMe7P_w|+M<|i!&rAKekmKIoSO-xG?XUb3;Tv>u0ISCntes~% z^ect)?&zecm4%gsVd@9XjoAUJ(CJ=9A9(4ihu9V1a0rRjJcq^+W^tHYwTDEaju%;X7pW(xzDDL|K!1yY z5fH->=dllCw1jJH?)_~f$e{TVNQ@Z?z!6@Y9W(&G;O6G;9~eNsr2~!Jgmk=QpNfK; zrHBD9x^j`j0~o#)EeiNEly@LFsD`|)S>s4%fU}jEFq2WK@uK5H76RMkX@~2Esh?jA z7lq-P0tuo*#8N4|9kU(DgDqsvpk@%c{!T}5NRrMqO3%Tu@`jodi8^?|t0aK`X-)?& z5t=K;IYfME`0l?_Hl=hSRf!{LXMx0?WBf^`!$X4o%dA5^o3XmC-tAqFNq(eG?i{s}nz%B=V{D3f(s9D_BgrvBg z#l81bM96`^XBcrt>ZSGN%il*wJV<(PAUY+VY8LE)9 zvS< zo4c?Pag3d5G~Q!zm$NEwD40YeT|V+-1qEjn6&+k$Sae8+fZBBJKHHDR&y%zBhj9*k z;p4tI)*c*o!NjPZWVrnr>##H&+|FQGYEP6GBGmV@)03DQG(A^ zVN4aKYlFF?Ex-1a_)7gddi-1`>lY`rwK~bph^%tcv9N?=xh-5ogoT4L&mPFVhJP|M zt#Kf+EdnAO0-&uYarP+f-8>nds8Eb^8n-(Yl71oI1?{_jgp1}apjqY2Tj=#t4nOX^ zAi3hs&PkH^Af1ov#^LTDp(kH9pe(-_R=f+Bwz+q zIUWR2q7xUZz)>A8Vc$bJzWxX2uxed ze2Q#O8Teg)zw!9JNzl?Lv=lVv%5M0h_y_*pA^d}brpQ#`9wLJUSl{~lx_LYj3{^Ni z#|Ki18bxcuO!$l#%Q3p@(yy-d1CY==f}3zljkRYyLJ8bxt66f4;%aEyo{f17isilRYzRM}&jn;u1`Nd0V4Q&Q43g2ql zsEmE6GzGM*Zn$P>RsgM7tmfpSo{PiDxEzu>e@Q^U*f|p_2)w+C@HE$-@6^D{J+Q}c zjd9+KXFBJn-&Ld0Vp52}@;!10S~w}#l)Z`+2m%Qp7~%6Y z&H-}Y`ud)Dsn30DI2M2xnBbyF0$69tiU%`*(#?PXr^%ibnY9I#02Z3%I;84JTluWu zxJ)dRS5yk=%azv0$Fw1FNA%Qpb&9@Odl9<5Ni9LS0=$Y5pd zKX70aQK2G1+)`_FL&Vv#A^)^7?ATEXRRSfuZ_l2{6uo1lQ;}HJy4u)<@bm_AJb>g7 zIs)k#IfXEvR{GbFpU=K;L`F)?!R8Z~O2YF|q`OHnZ1;tA541B&F%}@nVS92)d$!@B z8^{x@4-@G0@{nxcPeK_+O5=3q`WJl_JK8*u|obW;T=62DI>bVs)stxPj;*d*V~GVpJaS`_rAA`Pq)XX zSA*WeoZb#QVn>6f-B<8cMnbZB+($Dp#td0s;4A0v|LC+;)6Oop(&)_T)0&V0k)+hp zifq3kuYN_0l+YpN$22sUb#EC)oaW}`=dZNus;N=j`{=B$EAdtK_smSvdli^Qq)863 z#KA!%CJS)~QMOGd&*3JTNzXT5P&u?bdiOvnAxU#dU=Av}@-QzqH>GY)`<2_3eMRf< zJmCpda6(eqzZ0QKoH$WeXL{`SZOZkMfD70K_>%`7KEn|^GdBlExpCML%N&#Z({J?Q zM`I{ILyzBmJ8gS;f|nui1mcgD1&eTdVUR_AF(504@&HQyJtT|0)m>NIucf6W;KmJ1 z&-W`sZ>8JUaaoB4R?4xDa@i*gsVhsZk2S{dSW;Q=@VCj}8iKJ0cHGHIaI0Ba6a$eRA z{#NHz*U%sxxgq5b9&(@DwdLeFTsjtQc5ZI1o`O2-?)&dh>}}egCm}v5AaJ+RXcH|h zpWbWNkr#KN?UMRJf~x1zcp>Wzyl(HFJqf%Cs*o^`aDJl*e}rHLBEYXM2{3MeYGotD z$`ge6X2yjhE)8oRJmHHVsgEWlvJqi}>cQX0U{X<0MRZ<<0Q~m*6l@pFAoxBdB_(?p z0^{O(Jt^tR*PI+3=_zr{ZVNqqj#1?XD2uf3-~)a#$_3b0jl#h_xJ8QG3?+Ip5)!9n zYE1JcUy{-KQdgLZ;=1i{sI6uIT<>#naf3__wg@}j&GsH+;hE{_)7%V>R(b6hIpV2m zL8ffArVbY`UQ|-Lb9=84K@b~bZj;U{5}HF?fBtpcxi$^Ls8p8fR zc`~4>mz0H}pr(^3>DAC#j1I-OXKqF38)~k!#;a)szFn<+|?+ z+O%oPRZ=VpTLC5*4r=(`Ra(a6^Kf^UKXq#Nu3bC4=M9_J-~A36RC{~`3Br7Bem0}$ zntVUDpOTkfTwDb2etBu4x$P=DCmt+u_pa%zn641fB_1J1X~2vLuCA?}rp7xw=EOpE zO;#YBdfhr`%X{|jMR*opCO!>z^v|DH6B|y8ufnhe#2MS=+JjR&K7RW2Y*1v9 zm6mWITTkn&H8eJcRa7~1Ci2X8H0~FLg>!RrE-o&l+&XWl^jw!iEeB_lg|)RhQUjqI z-cMnR19!(t*csi}A|@`5Qe)FCe)XyZ$J$}jYiG_Pk=uV&LOYYBrojWo(>}bsyudfr z)zuLNd@IBUjqlmBABgD5)dLzKv-hLFUt-#4dETx-+Y42kl_l_y8yg4*wTC*8r=6ai z?UV3EZUEvqLS#6%Fzg@sO`o#d5fvk}(fq2&qXB_yZ(y~ilJQ-t3nz zUGa*^*T3nCf`fwG@oX%BT9M-JQp0yt@S8?PEY;L?bQI4qa!`nf1;}mLy7iiUqsL^) zsd~!CO3xY_8&Qk#Dg#ps%NX@7t*y!|Sa3=!1EQ8Zs;){%Df>%PZ`WgGef_u=OOvc% zY|;c(oa%S0FZ?QTSC|sdTKXl>$pgfMo$D&8hX>2yuydSi-+DEh!cG(6Z4SXB@VvrL zbJwcmA(plZlOGEW?2j1MA{fZ$`~-!h>e|}qBg(sI{I^BjySG^?s-v^hN;op;_HBgx z&Ykh`DU(mk?Hor3xp0ll;O?KrluMvb@`JWrTqw#)%X$N2^58}-zE($%uKhtzvd`|_ zS{;&)q2IN~@1RSF#Lt--r(2emr+Hcuv`#=m5f$wp9$vsPmSseA=t{IQHEvf59};u) zYi)#W2Ajo{fwT;yeMhr?eIO1uAm5CG->!3E2o##D%H3<>3ED*?$IW2K`s3R-zu8?7 z{Svi*usm8vF6-kXlUMldo8e6_-?@E!e6>6I(POVlu!|0}aB_0)*pa1?4hx2o96^aE z?{Fw=0wdMombI}lWpFy^&OuroKt03;x{j~=8f&nL*0+7(>$T0=+S(xsdmL&-oi0Ie zjE;zK?f{qob&p*b|+^23JrjB=|pX!UN^bo;~a2(3!u8WSk&-rt^Rsq(0>ank@qMzmXyfFLvJiGoAR@>C()tLJiMS%jfn|kZ5%|^ zSa_Q(J;H;KlH{7K$o;qw@&+MDNO;rKl$V;ipPzpmgndXhK<=D|#@ik53=!z-Yt)28>&D=%QDz@GS!?`*4e2ouVsOvr(3Dq9QKFw^&+PTGIIE zXlHs#%k1C3e*B9BSOQ`;0uN5B=Hc8pGM=5C2k2>lq$-RKc3*3;%uGr7Y%YpEg0Tw} zRXkY=?=z*nuumZW9A5LHMp)-wHvG;5&W)@4wbI62#itjuS7a VZqJAB#@`TUPAZ?sk~8rCe*osmgx literal 0 HcmV?d00001 diff --git a/docs/versioned_docs/version-2.20/_media/benchmark_vault/5replicas/p99_latency.png b/docs/versioned_docs/version-2.20/_media/benchmark_vault/5replicas/p99_latency.png new file mode 100644 index 0000000000000000000000000000000000000000..0190118b22f8ea7dbfc862067b06a47bd6ce0d42 GIT binary patch literal 24062 zcmce;c|4Z=zCU^!LzFUQC{sxpL#AXXLxhl!h$JL46(Ukni9(sDB17h>l7tWvLXwJ% z88gor&imH0_TIm}_CDwQab9P=)>_X~Zr6Pc-|y%1o<7%I9c?u_8a5gNfk3BzOj(aW zAXOy(kBXE)AdD<(pCb@VtJRg2^xb2}I4NFk>FdF+*JHd%UUuh~+-zSEneVW+ za&Vb_HdWu-$Uum2?RxTDp3LDvCz@cNs#we4d&>`F;h5s z^5mH_-*F!!TKAb>4I^zCbuV39UH6`d|Iy#) z>F(bD>sR=rM~qBNK^!tJEy?O4W^W(0Ow69LYKo7GjI8x3zViE9S{i?`0r{t~9n->u z#C_Wt7*6WxUH|i2YR|LvwQcjO3qM6nU(e>0txYd1F78Ow>*3P{5hx3O5UaR?0zmK zdfWmIDF+h+gD*JS`VSvWOikBk64oF7p{Aqro*QZV{rzQFSXjfyk5~pj%X|{zkH#y(1&bzZ%$?1LuZY z_c8~zy}o>@;^l|>`o7-Y#<)WZ{dHmAzJ0rt@GK=IltD~PYk)r2j zhnjmoD<(C&UA`>Cv1Q3+eQkB;p(|eVV;wVtO{OL$SH`|71rtwWy1$M^*ktH)dTY_8 z_S*W(d-m+XlH`zf>c#@VQY&=oIpX5t?*1w+uJhUPh~B=wn)|GMeSMYdXFu1}Sl5RO z-K3=RT%7E|9q9b=qxSgK0|yS&Jm4I3Dc-hiTYI+YwW(eTCHf~%o)DK_;TWs96)n4@ zpuD`ighZkJ_ZJHjKOI}vNeMK*n-rD$S+3UA)vbigjkYt8hs4F1>gp;bHD{ZZHTsOU zJUdRVbj#m=%KZ(_jE#+rX8c2SwTh|f;eGq=dM$NVkcly|?Q;9@Xy4J>v^{0_@7_Hp zy5s6Z*T9tf-Me@9@82)w@Pq58=lobyXsDi@o#2BS-m(v_SFQ;2^LIOr4h~v7Iwm9} zh`jP)4!m&gT%JRx>@@!QBtE{YIZ3T9f?UaKq4Vm%z(9XJ9lK;&db+bT$F2tvF)_#K zs|u`}7E6|~h!0&JQC@pvp4R#Cr{3_rk?1pFI!tauBH}HXQ?s$bC;rS zH!UrH`tbB=1pPt~x?eQ7!ERl+`rb}(MDSY(kQQV=cYioZdaJW*>x#`*2vGyEJC3@?o z_@bhsof0usc>~X?clJZ&e;^pP7SXFSJQhw(jr{J8r4 zdyPT{0>zC>=8EbPY`?!1UBWfcP*HtqYx~`v^D}hM@m~!wsp;wJ^i`;0em8GMh?r?7 zHG9sD6gl^)Zr!@|89Jj}1?4YrgrJ0o~4NXnW z>`l^$9j^z-w3{(S%5y{Vpu_8Oj(K6GeC4Mme8wdi8&?RD`e zON;CTMmc3Gs}%D%a-}yu>t}Q22+vX0PqFUUG1gfUvF?H*Zd!6>kB@<&;rgoh^g!PE znve2-TC!0ps^x4R>^hu%w)C5miI!FtN{?DF$2N}7ZEXYVnNObRIx+}He0SQ5sx)V? zl#!9KS)0C~Q3TH(HT*|!bs)tif8|5IJV$+%j+a{%G$kmkKfACw^+dw_)D(BbOtX!I zWQ@=pDaX#8M~@!0x3kmN*H_lYt^Ly4dTnlmX=yI0TN~>ae{E-PzeiTK*h(+WFbKgj5wMCvmwh1c})4^-=b}m&F6;BEa zXFE%-wq#Y*)C4qGq2fMD;E9TgdiLyDkhX!I-t^pDXWn_WBS%POLL(y7=&QCWtaSJG zie37WnV&D_@}{s*LR|c0e{-F(*UDmEZPaFF!B;-(Z@Z(OeqKLGsHH{wy7wl3u5zma z%CMEC<&V;95pM{p!s$b;sSjdeV*LH92kIjxx=QQIKC~5GGK^?KS;X2F$+DoOr4>H= zW(OOat(DcUkr7*KYgCSs%*;%YhOIO-BOL{U3qO4(#>U3FyA|VI_U+pjC-43G>C<=b z-aWmxFpe@Sb?~6~>`;g_#mD%=*Q)O^p@zlcUOc>r3s!I&(lIwr#6AcN4D|O`$vImZ zJEq@pYFh>ulxReE4$>!ni@4C$}ua5y`iG2 zy0+N&;M)8c9%awgUD8hG4bcZtH&Hf50Yc7}T{m^iKq~`?`Y^seIU%jMjK=*`CGg16 zqcKV5A<`U;(*yM^f=2YLtgMWT5|>9lfB2wLtWV0Nck$wIvU=G2;GNgdx*tA#h})_X z$Xr*#?`y?1r)FtoZGA{unt0rI?|9_p;}sk(UAnfu<~==#{iD@BHrHK1A5fH$56!ga8fqB1jZR`N~q7_@wMV! z&7nudvN(T!^sv5PwZ#Q1E8^AmAHRBa0ZX<0dv0Q4`G*hBo4wcOzdMePqmExyz#c8_ z9PcVUbL_yEFJEvg>_>8@6-MBFzAW>jvji59}Gyuw1p!5hk64K8$<=P0ntJv}`?eE86RoPi2mITfm#j%F1%y%Z1nHXjK6#Z|UbdbiU5n znmax1vR2tWGc)tO=#pC3p6~{%&GOtVib|+YJ5Wr&=J5&$WaQ_&025eQS)oxczVfqp zo|$O^$P0Le=W*}e2SC03{Zj>gma~e$O&S%4&SK59x3!_GR{U{w?0j96mR9@qtMuW+ z-gTjS-oAZ{o12rCMny&S%BhD`VTHVTcowHaE#pvG(=B-;IC#s_E57Nv8~q7|z#m;* zUHwf2nrG;KyLRouwr*`{vHkwyH}>IRL(J8gUs_%!N+fw5WBX2~WS%X3eKcSTP?&~> z#@gB%u#4lO^qt$5h4;I@el>DZQoDFDJv-Z>H1+rnR#q8V*^$xFt0SK;0#RXSoXa!X z%pwewCA5FPC$QA_myQDa_oJWd>FRRF3bzt5~wk?HVb*>fDUWn9lw3l9&ksHmXJIdD)z)!LkokI&ZD z7EgkQ^9Kt9!%_M4q2rIxdF9XN8J#|Tx_>UUrKJTW@>GVw?~a00Fopc|SP5W4)IwTL z`5%pq!e|)H&CXcR`GN#RFC2;uwFNf?{eAQ1%^i00nWqbO$+>f_jM5N_-2t14%}Y)8 z%Gj&xtDep;9_#vIzb-8fHEB& zUBy8*0DNn)DBLkXoZnrge{dyKe#bO4jEihf85^^8@TcVD{7lheM_H%5**xhy;U;Se zGOC;HrHU2cW}pHKL(S*0<~D8Ns9n}nr+(QVU1BXmomddi|y>ioBUwS*4|=Y7cgGmihPyNBjZo z5e7B-{oOFu{=zI1k6C5)ElbZ38;NfbEt?5d`lhDdAZtTILpY4BjZLOeUN4r^@bK_- z_U1%qob;fRv|-NKww9Lt!ot5qhUlq(?k5yVY}vBKb+8dtN>D^ZgrA=)Z0yfOS;SRS zLJ+@*NP?7OJX#TM=Iz_JL8kx_>%P0++dV2SO0aRjj@qjod+gY;AwY5mhj9SU&!0c% z-XUXbz00r{4;?h%OXlgYn3ywX&%Sl)d8ZX4xl_(vr~d_&D0TnfpbsdHmKK1XaaR$+ zOV`viE-!Bi)qN)i2VlVb@9zt1tJi>tCSDWRoUwPG91WPC_?b{`v5mZEY>b10V{BqV zq!9m`l$Mpf9S{)l_%Zs&aXjI!%Ony!e0;x9S+PgKKci7{(8^G1Kqed< z9Ys(gM>6o_7JT=E^Z{`=zfkeLdjZAJ!NCCpLjBk=Cnu*nK|yf}K5x5Q>j{jTei!H_ zsmfeeO=^x;@DYBc$*Sm#syqf>SNo8=KW@D?b)BlLm4cI0Qv%Noeed9&wHb{+n5XcO0=Wr>uUg{WkNb!y_ZV`ujh# zgDh1rQRrx*61{bwdYYa-OeDEzX^Dx6xQFXYg9#hU3FP9;3p><2lpTEb>`RBZNcLU< zL3dpFZV2di&wkN@pi0u8Cmxku9cc;WqfzQc!0u}XoWA6?ZY1och1V_l=5 z;d($5Sr1s;!V(P*4kq5WA3$k`+=g;dKk%i%V4fZxafh$HXtq}Ta+AQovXpsgTGtY- z_0=;G{!DrAWvm%WN=nEVHkU4KqNIGgsJXFf1O-37duIWjEXW+Fo%&$Mfg>s^7l2uN zz0UbwGPl5;@BtBE+rB;Dt|K2ffQ5wx!0U9E3WpXBg%{m^pA|%*Z2xQYQhu7RnEH3X~@31E8HfzkdrY z@(Xi2QSxEI6zAnRm)7hne)Wn-e6FjIcx`)7Q~&Yf{X2Jb^z`6 z{W(P|=GLuSSScAZ= zxjd>GY-wq^d(WPZj*dF44b{Snt-k<@Kx9Y2BS8s3mOg&`SarIUg6oyzq1r0BPHD>?`30c9T5_OXZY36kJN*O;*&HlZxWWrj9GriSXGs>gxF1s zmey8)2{CbTaS4gfU%p5lJeZZ9zHNrxG4{sYfp#+=u<)lbG3-lw?JX>N-+0X66nKd@ z{+zvi9Hb_6RgjiakC|Ve(@)}2RY&vcXo6P)V9-)i_xSh^jgAWZIw*>xz3*|t76170 zW04mn6kqsfb~wz0xUC`&oY&OS0{SvDGOF#H+QKQn0_1(*{QFvBM}Fh|=L%5I*|TS* z9J{bG2e1plU_rgBJD5rMjL``z%gzGo04@&bZ}Sxeutj|Wp3Zpv+Vj+@$2mC@=x}p$ za|6WYH{`Yq=?1?V*=Ooo2U>dCJ7BoaO)h@JA$YNLvfdxWAHGKzt{9XD62KGD_IAz@! z3+eVkjHEq22effYUmp;#%EyMzSFpOe8k_JK9<`z2%jD!+V^w7?12o}{eikFpRl@3M zw`}<}<&NbQ2yyAb1D3(Qdnz0j!yu|(vd*A7Vwn)-A7f+B?s5|1<9*eZVJN=iKCfCZ zxSO=Jw6dC7Q{;g@h^f4)_a9!pNSG@{`1;s25R9kz@-rjy%y%+ETiqEI&K$dOhiN2sr zsai3=y1PFWyIQ+2@dQ*xVckfR-1hNNIWHDPt`r#=IjIIQ19%7>M4%ljsK%<`^5x4E zYG}x4=mUn^%2|NSDf`wBJ$~9;RrUMuvaDy%F5&hS8iA=4@8)O zXM+qIWEwSt_mYrN+Su4=MoXv@EAzXC1|bCnALs&rRCbbo-uZ8a3PVjrMQ?qEJkkii z)6>_-z`~+NuYBdoi-d%q==aXo9Cb8NY*FlXJ05q0!WR+Io}{)FOVFbo&jdB*jIlA4 z2lvX`bSf$;*z!y>W`=@EEQTmL=zI_i@Gz|#q6fyt1Rr;j9_tJjI)h^H83ht&Xl!Kk z>h)`3qg*agQTnX}QkC~*j~^|@m@_?ng{CcO|E;R5RLb|A=TvVs^e-yEp&!NKOU`ri z^KU)pY#~X!IZpPF&&!|c)AWHIv|9prC-xJPX-OzQwMfgz9QIi=aq34eMTLzpQz0~v z5`Q3Q`dUI-dJ*WtMEE5XeQ9YUQ`4P+R!;^h4vPAQt3q%5QS6F!S>iUV2WW-sEx$oF zV9Mw_3;V*D>)^p6fCY<&Z92yQQLkTr3-M?1Z?5rG$8i1o(5E~OS zGvBY<(qs?{iuVZ#ndVyp7u|tU;^2_&@9z)26tpQRDXG@pnG%wMiz{jY#b#!7)G(1@ zH>lS!SI53`6Q4MN@Gu4o-&0Cb?BGG%ekMG$9RxycP-&^Rrsnu$V_E}$>>Z^f9jYQp{zorv1qcj4EeQz;xT(uNGD6~>=9ZRa zkdncVQAw$(5GbP_Jt{|YAEBk1P9B09Zg2P4Kyrl0!=L@KMg> znpfbA`TN8O1mj(Qy&6kv>%snhx8L7R`3ZT5!P0p0>{+#?SX~4z8N@92;SwNLJt`)9 z@S#J8e!g-(y3!ZSsc?4Mf*n0SE+L_*ZweB261twBlA^lEzyntK zHhXg2LM#f^5x|aI36kiZ-Mi_@dqze)2OD>?v&ZE8R8SPJ`|u(3Dm9@O6{Gd@=SMaS ztQ3)1S@yUJ3kwT0Why`EtK%l%f)RY2(oTths&oZCAS+;Omt93}m|Fhw!lEK9u;!PJW>Qiw z@87>4yz>wnJG+!@ScBCB+I`RYM+t!M=n~kgG+lgws!2e+G%~_*+Uv``psG=tR=}SS z56Wuq+@YF|x`9o=l7B{ZVq$`moxQ}S`6;w8EOGCPA$4&0J~lM?EcR@wsDLg2Fb5~) z`}gnl&%4%}fKt4@ylSodK}PDr_Cn%Ks3;G5MIiL6rmT~X`l!-ZK~Lt>jQlhd3kZ~L zly}6bAJvE0t-P1rAgo!Qy6CN~t?h$81_cw6q{P94V9&gb-mjtFE!7ro)l^Y|{bUQ6 zy|lChg@arPh$j>L77hXSGPx2qerj^EC9I#7EELk^g$Yg$j?A2#6WQ@ti}WTn+~N=> z@#)H$eZJd)?{K^3N7@9~f_@DQ_=j(`39(#Y>IDEq?RxuXyyVTBH-8o;!tR0=UquD$ z?X_@egh_--%kADX0=x?R484PM#s@ubZ$UIk+MPPfV0I~OH8pFrT*$`7z#ceWKe7BY zyUWGDxn!dXtU%X((~B|(H(J0Bu3mt!+?Ro}?T1?XninyZX zB%;{uTQqp8g6Hfpr+%Oiw4Kn6 zsu`zA5Nd#Oh@1Z~B4V(+`(aE>$)$E-_@gF-o8g;?RTV1_EOs1x92X2f1<$_G5G;bvQZOgsi=lJOJ2Sa zASEoOaFyAN| zF;QK?Qq$x+iMCAeDxo)jddk3nNEeO11{e*kHu+b$$iI;4u`m>cXR}CDs)v=R<^gl?8=ISw;mQ6iVFuO<>BQeiqEO77f$ZNT?)S6Sgv>SBzzUf zpS2NS7ss`=0nh2I*>>!pC(m;o)c!HLlR&ujP}f&RTAJ8ry51BgCUOZ0*`u)G(STDz zX)gCA0jfb=WoAYyVDH|&B4=I*;xjN3^3&-EgtTL-B#<<=Gc$)rN6T7NQJI;U;Zymi zis9p?rQK<;Vj!PFLxaDm9WNK9nuH4fpo}M^e`x4VeKUbju6Akm+8gG|`ugLGVk+wB zpfVXq zh=_=c^z>7PhVATwP0+Q<@UXkPh+oac3rP8=MLMwhLqkK+ix&u{XJ!gE^DWYB`D+gy{c;Kd7r+FMZl5UUuv-Ef)(AG<$BI)-w9CkZ@qP*QT2tecIxx_T+KCZ8*I z<*#4A3=9mw$-s;H7f~={AUZ-lT4Rh6pu<(G_^Tz8-)&5d_r!$fi2fzRl1?HW;? z7t3HJ5E#S9n4LdDa%z66lByl|;p0b8e;G*frPQeNrmx+&ebDy$a2Ao8R?g0O#O)Uh zeXU!@>hk3|oRU9>{z&R2P%dg}>Xy#E|B3SU3kp7RW9Xpx3X0O&+6wiS%I_6a2AIZN ziw^4Q)M0g>TUvO`AR>Xq^$!f-6tBVM179Ypw3?c7PTh*&-iv3DMA)b%N~Le!B>y>M zV{02)MoQSz-AAJzf;$ot!rjc5zd0A;(&2SMF)_jR6=qzc^Fcewq*f9*=2Jty$`K2EijS4__!ONGR%h3>eq48oF z>F7KxD^mzk1-EojhBFgtB0t zwy^__GMT6jO`k56p*s^#tRK=$xT*hav0bUC1=FdoyiqF%NBA8$vGIJ}h=Do9HO6HR z;@_G*{nSK+PY-zndkKlTsMMYdo4!H_B0ApL&z_yq)opf)<+#}SdJfd9U-zJ|8&^4j z|KpDzZ<^J5L;A4(=HfTaKU*T`!@0J}1070y`V@tScj5>^`6#||B?EFbI$hT(!W|0Y znM`I8gM0tl`qcQVNfE@wub1y^<6Z2-!UJxhtEsD-pP$D*3NiZ)_(E?&mhqs%JdIlC z)F~#8GLIRnq`uvhWIpr+f`kgga{1&|2XDy)?~5ydIFN!Et>p=XJ6r$xE~Wb0#0&eh ziBgE2R8tJxG6HmppxDh8Sp|o2z?9VY6@JLra!VeXojRX_f?3xd!kx|D=8D{a5nvD7 z?fnR0A3=WcSptEcSQmAu+;?qM!R2y7x7iTc&2Ty(Ug9+xOOi)g;&_Bau1}lzSc%t~ z`1i^iwh#|FL`Ft)@d#&Ru6QmOHk{$Z9@D#JWFR9O!L_QbO~YSdzweZ^i%dST>k=zE z`x;EZ4<(3hF1}+mf`Wnt1w{&Ce0FB09CC-{<>ffJmkyoF$W&qP6~1`URbajKK~0zk z*4!sj^+6AF5M{JYPC0icB;+zOE>%*a_@H!sgTRS81}kWti3010UTc)>((ZB?VG8Rj zt&qe;?32>dS?TFTJ*N9%8AzmS6CP5`-cYLla?H2m`j;U)zA*F|&D2(EKOM*G!HP1;7TyBgKa0ffAB=gz6ELZ;w- z@a?8$Wqp;2Utxjfeer5|E&*_L_n#|p>~c(sw=*$Sb2>(+MG4i53*;Z{gKAoO_jXeB7=ct=5iLMr$n9x3dLu%RJ6EHeUuf_scD zGA8Cb*cUEU{K5xDP;C&$&_0|g)PU_f-&a=h8kR%rLFwU-Jlp@$RX1Uvzu)N08OI;5 zLb&e02BUJ2M$5_MAR*XzB(KQjqDg^N2ue#wR$EN5IN-^qfNY|TX=R7j^r8RSqg~Ct zhY<=WP3@Q1I*hgq_h63C^1=nvQqO~2T#0o700q^%$`z;l4`er9>0sDEmxs_i3A-CZ}i-*{^SVg)A z08rz#Ixk5$=sYA7Iddw%w9L#m@DTx#k^_F^UpNl+?jbc%^qw0zRa(7_{7t}?oxNrO zy#MNE+0i=jPIi*)fzrN50P&vJ;tOkQAKHYezCDuMIt&62+_`m^oQ+!yq<2uJLozbR z#b_8?fE^(Ygl6%OnwTT@T7nRh(!IF0`Uj1m^@aTz^#}Z>*qsC&`k>ew9bdn`xwhZ{ z#~LvXeO+BRZMiRBI%2KCDtu>+UJl%%q@;wE7c%P(`wl`z@V$E)NfQXUdLj=CZU5?( zE6f}@85sc85tCs;9g3Vgbf}igeUBu6*<=N>1^m+xBW3p1E6OWY!_BP_Oz+8)9t3p| z-~wGx?9$QTL7Lz-=ssEy#ikBB$(t2i5sCMA9hQX@+(Q$BVut3rx%hC>$A5~9BDdZ+ z84^%YOC5$R^9n>30$KXT4HBQ-e0=ZQ+71c}Ynz$3cyz-V5VU$`Tf1Y9-27R#!)ZhK7ej=<3Op1dVbNo3l{tu$_Odw4rtUK=s!&;uR<8 zu*GlG2?8Pt8JU@n&K)3dX`!+f+Pxzk13bVJLP({jr$=triQA|43I9_u+RIgg*s6P+ zVAu7Gk2`>1jgB5deS$Pxn=9vk6GejlpC+UEl{GRY<=3NqCviBUHH35o_$C}%utDOj z=@Nhac4z<01p+_Gf35gDUwF2-y3RnsTf#F!Y72=QScNc)U|p{ncC|&^L%9*2*p80; z(45J_&dv^NHz1$})?0+onR)m~NMJz7g7#k$B|uK_4bP!&B4cRYWPo%KQpM;~RaI5) z?(Qpd?PhRW_D;+nxY&}6hp_zT4-``$(+*;*4V#`R2OK(xjSgO_pioAX$G&}|d3!vm znHeE5KoM&-fJP04^O zQD)UkXJKo`NL<_=Sk05L7kRJGD=Pbm_l;PTNx&mZiPZ8YA0OYjbLX_&A6=-&7bHGJ zemOZgxfcB>56N)&y&8pga|r?>A}@1uZKNHntZ;#X9v(s@#Fb7gs5}Gmxd>YTSA8kD z%NSOtsi6VG`sB&LWXXSh8N!LtadC%%^5Js0z_P5yf~cxW?z)GNoo`Mv&ioun3KHzd ziX-qG866D@iuKj;?He(>k1}Ltx*triEcwSKReEJ?8px~TKg&*>rMcqdH1z$Y$W89n z8go*`R%{bv$!6W;loUzJTKXtPG6J#h+jJ;zGP1K9+W_n--QB(!Ge|Ljm zxw~9fZ3r(sdrlO6xI`5%VK*+?Q|=&M=A<04Ey-a~`=XA{!4^YA8pTHhlIX~^vERyy z*QQOIfQY!5iR%(U&g;W3{LOgmn0g^WQ_}9}?&-NP+e?I7zJBz~=GbrP?bRSZpEz(u zzj}JMadJMmmJXKZ8s@?YZ=w@t2&#l6&ljX`a7JrqAiks2n(6K*NE{;eXFkDl1papJ z+BH5j6uB7HeFij4&6k8<`kx+%a&rVk%^}WCGOwW=08XkthDF$5!0c**aI2f5| zP{>yUle3LR6Bs#{%M&j!Fq=cf!HO1SuJ7zTEH3Vf3dg{wIXOA`6~&TPKwt206X01c zM`{SoRu_ySHa0UQ~WPnPCPt3c)U-t zv$g4!;bnKTB*Bz@+!wc_8EfnlM>G((U^ym+q%ErMIQPAuoA~L2c@eZ}sGeBH-(l6l zF^Sgs3EKc3)_70P69|1aHjB>)MA00T7-JyFLQ(le%3ihw+b+97#MFq1Ye~P>N6ISf z6xtW#X=CI40s_a0b*}{L9D5PM6mAC?78LrVr%#c$kw8WWsQkF`5A+WhKx-H}skjhC z2Lo~ix-o>nl@P@1f%c1_&A0GM1`t(K1X`!FK{9Sp8o|Z~hg&MRdskgsI~Y15kPzhE zT?*I7dV08w}sS5Lq3aPY@L|Pz)*TBc23a0#y3Jdr-QSp9U-GZBghYZl zueAuX>mEo%!l0?UiqR*C3;X+DL6F|wwr_h(!~27x4@Gu8VBzF!ve&v(@J=UIW=~=M zgS(u>ll$-wxMV={dG_paXy{X<9* zf6(rzD2`ZV;jY#lfOHoS_k z|5YT(S_OD{D_dGzD*Pz?+Q(mC9z`ij2Ptup=8%okCf-=0;g>z}@G!A&AFKNMHL`M> zx7rSLLrj@??iDgaJhvHEZ3?*&cBiz|_N+mKPSFqni1VVNP9Hl~3uV7nWd@ZCs{<4t z4%-TmnSK7OZ)msxwgbkw))T;qg$_*#gJ$rLTW>`_+YlbMKV91NF>?P%_ANU}*k~sG zN!sx$s+7Ve<(6VGJIuAt+u3ojv$OBobyi0w7Xwz)4#|y;jj+M&-Bo^fSKRE^2vWL9 z34sokHn@Hum_tTy{Az_7u>>nWdSnBp|NDEOyV0J&>izt+FLUXglScAe#MYYfH;Ycw z{sqE7fglfd(kGpaUp86laX|^VUA46k8%&2Btf3T1uti?|s$vdQ@K2d+)S?i2kQSou zNI_aOC50!xkMPeA5X|m*`EoHFk^wPStOru`{eklMQD)c@kbp1K*^0iS2ZK&NT zw@PcH41%o!#^YIJgd!G!o?e5R{l~`wYx>d|WCMq!lpFi`FMJvf=SlrN;6CFnx9=35 zLQwfZ+?{_ZYX8fiMx6tzH~c&ZA&VklgRp+SIT=Hn0>DLIM5b-@ASt46vT!qyzZXk~ zvdsufYz)(akX>wlzCFCuQdgIL&KHSXCxl)=LqX!vrTrY4SXi!kdLkZ5dm5xO`iTe+d&MWsq*^{dJ(!bn|efI9cCmRXoz&!&=Wc12#qyU$7 z)h3O2#^>K<^xcg;N>3h_2u-)QkETHxZKkI0?usvfn8s`CsQ4THw{EQB*l|oRm6vpt^=B z8VHj*pmHBS{gm_{V!AO-xH_9i^HxVJc{f+ zF&B(@2#Dd_WY5tp0pj3;P`tv<89YEr84SUnLxP9r2+k`@Rb^j;a(|(mwlnSx=9kdsFqH*!-w^)rYHkH7suKq72*)(vrqbKJec`GU;HEo<9& zO9<>309>j>+eL)o=FOWFWcTX_kcD;l@hT5}om|NdMP5y9uZYM5A~HZKmt9>!p!@r@ zzklrOIzC!keu3w_*Lu_ z&*j;DQLdnd4WYWc;t};i81*TW!^c2+YFpF6&K{oF6(x4z1Da+X^#e`?gHxx9^7HRK zcwoIo)NtUp-mJ6aDaB&M^aDU}b8|D=TvZkEZsDO1HpcN%@$BFK0pM6zxDkU5Ku}n) z&R4F0O5M4CU(RjlVd!=TMxd0SFkN3DP3T)V!50`D1Fdds4CcTx`Gccvm={o)fPPSi ziQ_M*{#Yp^zmwq>15bn#HF4OvSLrk{G(hxQwlo|7`g|GM1#uiYXH0=AK1A!K zhRysxOjrF?nE%}q`?o^bQ}>YYh|zmQMS#J+$F=a%na4jf7>hGL5AN&d4I-pbkWebB zhiu|`w1elZ(#1=ik}^W4`?HOhG)b2z7$J=(CKqpIVLcQ{lW;PkT(~LMTBb z3t6-j?YQSzSwerJ!H%12muc@eSRn)D-S<9-V@qn+85r#g2pforA>z{jNfa0z3W0_O z!nDV2ZJ!quxEdKnLJ)@ufBzD+PYTRq5KS@oYJUJd>3+&yUvYPGngr;h^857V3vtp0 zwb$b)XnlxA(f57r$R&UTE7kf|-fuQa!j>gdb72R<>bU9dwg>6U?I!y`}Y|ef-V) z+my94dh(Gg#oSHuH8+AE7v|o;g4Q`+nVv44S{In=D9l@WG>y3*>I4JBlWOPrd(dB! z^YcS731nkSlkh(60_fbv8GZGm*bE@whO%+nu1qrMy}8B}o@c;qi!w61|;l){&$AnYLTP>IZBuUQ}N~YiY*p1d8lkadA00 zum0Q+5NBqYnUaaO#5<#os7z?+P}xHx!2!^gyYqrc1cW(TfW!?mjgYDTXjMS%cT8Jb z5-~kYAUA=8#6r#knnhbfSm!n!I|Po+(^-K2&=iPc%axT!B`L`G1+fSaS#Y+(a4zu` z5)f7!%ou$+YHgT$p#}ozL8g&(8~U`3SCyXpfbHir{O!zMkXwubLLBwwqLPh!i)b*&XGZ^&yvF@?Hc36oXdgS%%*MYl{)jhY-7Q{qF z5ntgMRPdNaCu{ihDHnVQM*&)$U08_FO2_u4c6rO71{vV5C4N!j8=@?vq@>8FLyznm z9lf@;;(;>(V21EVoK;v&AkK)rv?8Kgmsbp%;z{vqL>SA>b@w zVU+_eNcCw6#~Ht{>p(DU#9kO%GOf0?HSA|F>8I&h?sDuOMxztzDJ)ncQIM@0_183C zw2>6j(^4K)r(QVZ&%Bw_!Iv39Nf^3%@EeIQ(NGMWL-qswV8c)BpJC!55WILH;gGTj zf6enQnY@VKHZ#LGz1d>n?5xDJq$aT$*qjAdVIIsF!)?HDMRU?&l}3POSeM8+rhwqKs^6iyffWKg|bFCjhQGERkGr{A^+KQI8nmdgRBDT$hLKvR0DZq z%shlB$8_h2`!a7Bg$Q1RuI2d?XMdM~tgtV_Y#278xMsNF;H7*1hB*FdVDI)T`*{)E z=yb0HmFV_s9?kaTeyQ4D$cT43xJBq)CTMMFlJw^5b1<_IJy@omh^&qJO;w_NHnjGl z#w`~VxMcmEiVS}Z$FDwGYnri97_)SC=8P`mA?*9dYS{25$!L^7ae(%T?7%nl)21(D z%k#elHl%AsU-e8VJJZ7GUR0S!$ZhJNYzeV9mhUd`S-%eA!3E774yw3l9oB1Y2|2+T zU-@5rTq3^!J0LPoMRf>PSNQQ&YSWrG&BO4=+Y}H?J?JGMA>sBh z@&E!S&=|V60voL^kLF;7;azcJ-g9d@2oB9El(NZQhHd)LPL(@Sy zZ;Cqdr=FHB7hzc!|ytfp?mGSrA!O&03DibUvOj9P8oba{6 zi%&FCTc_?)Xz>4&F)=!OwhP0C2v?{jHM6~~w-iHW0`qZo5y)U8m5kID+`$zkKQ8ER zuCA_2BADfXqj-yB79yeE>Yh8$avg9Fh(4b@(L)s`Q53`!6X@M`d!7;k$bm6ts35(- zx?0-vq`L%K6^Nd8>iQYhn-!K~xMx^ai#O3qH2K2T_0-ktnwxcNm6lQ+T8LKfhKqyT z!&g*X>|)sUI9V2EW(0rXDnl<^Vt__4>?W(Q%SaHzRzcX7(90lY`WUOL-%T##E|=O^ zS;W{yGpiA%wr5AU ziZK3UQwTTMuIo+IN|eISmKHHNx!C%F{qMYsh+=6XSHF+cvgc+Bc2mm}!qSgUsSt$7 ziDn$To|4#xw!h)btu&RVL3{ZdTfmiz5;nvi|88RVL{a_TcN~hqMSgI(oS*KmlR&bu z%drKB)#PvL0@dUnOYUzaLCqjmkd1@-`m8FAxuapxN~Es2uoXQ}hkN=bX388d(OdN};>)dMqbs zKFAuDA^la&Vn!U!1DgJvjOeQP7e=OBO#Zao+>3Z86bVcnCXrqN_dp>!A-}X+LgLXD zc*f~%BT`-NH@T>wG&3^l8yMUs#lC5sWGgkufEYQBsu0wBXd)v!+lmt80x2#pIGx1g z0bZf<=uzz9YvB%UHWGLMTVI7&m`DETr=vUynAacAVE#^jKXDXaeENex4hEP{P5}l0 z_2qWhB}umd9;>RUojBP`c<&|~hv+fy&UZZO(|H5u$KtMbAqXC-@eB@RSJ5Swz-qS6 zR46z6jPNE}w)r2~#>S=*nym3``OnXF2Z@{unA9XOlqhr5^P%!(y|ufpr{|p2tp+PB z-GI9>QBgr_Z=`&wqgoWkNpF;+*;Z8ap#4Eqg{pQvG6~~gX~<`I%{0J%=i9v-?`;Sw z-hChG?LJLbb5*=;;ryD&WSTSKq{K5`(Qh@JJ_w^1Ll0@zQsvFXt&KSAsV*E*&|w$4 z8~Kjf0T-Y3KR-`+e8Ao<&}@kuHd${+S1&UQ^Iyn9Jc^56FWadGfbQ(&)aZl?isi`@Np z$MbI#fxnyPTvlct2FYYGm|IfPy6vuVJ```+mT%woht(Z9a)ipy=HkWTs}pB&LM0{F zkX}Iwa(2%a*Wj}`cr!s-PL7n6)YYq3x6;xkef+|vHfmx zR#uRFY)#+P(#r60&R@5%vOpFv*aII1DHpu$L<$KVyt%@u*u=`G$k_Dk*|o8PCi%s} z9XEo`IXQ{)@DN{{@UeU1`a(&Q{Ga>Z4EP!G&rFSHJXF1Cw8W9?6DLIW?IUJqFH4oP)H7q8c0_6ko_xf0OrS_* zDUf`;4v`%*0BDg9kL?Bs!D~J~KYva}MuuUjBTpt{9N(Us2Oq=m0cWZ0`i^5e2GCGp z2pR*#>7^&%6e*q6v#{V%5AE#i^panP5vdR1Q(QAWn(YEI*|I@b<69{9=a)-rELYir-{->Y5MCYF|$ z5rc2Zg5^0oIY}Q_4Z^*1=GLsEw0bCRS`Y9TP8O{6#EBD9wy+!Sy?U@5Ew4n6Q^HS^by#8H$_g#cU_?uuLS9a4meCT zr`7_a{qW&c0yvBmz6aZWEPKsPa}}?hB%=Q+}Bcph|6JF*=5|q&xt$CKj6Jocm+(u)*+;L>G3uT zcJ>me^j0Rq5iDzpPjuwgG|!DA-HZ|6T?NBY*72-6O$u$cxgJx*kS10UysqtcmDBZa z-@3JX_wGdBASFR&Y{~CGet1DpM+A`QehsIfvOy1kSUoc5DNEGPH!mP!7$@UOS>Iaz zNO%8ZRQAvF)(PIsUO!=7rBMY|L;9Q;AD8qjSER4PEz@32%*?d=zz`s#{7f$k%U(}= z?#mfRT@n7(*;Iwcb(Z|*sFkK*bhzJ&ii+mu=4NJ`uJlmR_Jth#Y&!?m9I5sj6D6-+ zEh2CV@f77_+->(3*AR?d9z9A{R0@L*;2yNEb-kZQT?}Oi{1msAm-nVeH?Zv6MJ3<` zxBe}z6cP1tnYwF;PNdUq2{_t0b%f-P2s{OsD_4jE9ZP@KaM@{@BaQmtZFz7ts9#OOIRU}d|^4-78&QX zUn(+wo&NguH@v$^c6&fEKQ0QTLO@`&q7!`P3M@)UzN2oh(>3V2*Fj4Ht9#)>);POp zTCP0+hyWjl*K^<|W+KpQpgMo-hWzt(c_ag04Y4E3q*#xOUT&#B43G(uO4ytuoiAtg z;0!kU`Sa)T4!>gCw*7uwpfm_usV>N2UKj?^PrUDPq3hZMt~+SxXf=9TI5CKR3DZB$ zWq(Cn0qyx|Qc?n5=z$kZEzHebEczx=w&J3v-T3bKCW*%yZCzdC0|V8xTj=OeZ!%3w zUc7zV_3hhodTRXBUbdi={QMTos%9A&8W_wkEMPu#Gr3>$O%vZ5jhyy~@bDKeU%EG2H)nwg+<`c!I4F@*k;Dli&`a&YB40 zWfoU^-ub(Q>Ffbmt5f-=>l^sKCBW!uh+?m)$ZxOlwOPeEFmKdjEn+go=7H1)9l zFOA{_ z)9IddgM`DO5FO<)I1U3m_2PniarckCdcj za4;q%bI0)%;=v?!_*Z%ZMfg@nh_@TBQgF{A?$o%ruekgRtRp%G#|GxLZSgC4mNExzpLhQQWse}8YRPsCVbs*Zc%{VV`j{k!Ao&EKIT z@{Pk{!41YsBCtjDE&IIt<{Z(FZEWz?Szz(hn<${@?{J>ok_!q>rnWY7cI~FZ%1FZd z$bcE(Td-LLd0fY8Lua(*evIKTWQYM)^e8g(@|uBY@D2-vo%NpsN}dcr9lJi$AcY4B zA>cF1NTIR4tE>2fnu5YY%M=MYxsQEQ2$CT3c%nu<6bn|LpAk{USs!w~bbY*(3ONS0 zUmfp{Q+78$B#07s61fr<@cj;1Y3XD1#MdIFccOnlIK;bLh*b)&jUv8MfuB+Tq=m)P zfPhUiUlUfxtf9Ysp2sU>FXfbC^coH-CdMYeUCP0IC|#ZZo|F?A8rs|4ZSEGIn8;-t z(_qEI#6(R_3Q-b6X8Ym9A&)&eHiol>%t@TH3r#l2fT#hXdHak$=?yMn;o#kM@YX&V z;zfasH2%mRnjtb8QD5rR<5yHP2U#QiOL#al3LJtD*6|+iK^ZV7liDO{B}RBa(}ZV} zmYe$tqdU8I_n(s`*7W!9RnztHMo0n1d%(#^dDa%?4yIG8THQLG8!CZ=c6po1p?;0tdi~wT+*yju@69E}K&Pe-&~4 zPfgZw9AX77Y>8eV9*uCM)d3DNIM{^g8f?<+;DFO)F$JL|j83?X1&VlpIyh_97voEU4mO>HOWC+ z8=re&4~uB3Jv}k%sSUdZbVM!m4cXL&pXaIvb`^lC#DT`S$doNm18ZityW(tCmS@8I zO9tipD}_S|pwHk*J9v;du}2d-+S~iPa}?oZGN^~El)$5N6x7YJFFHG29*>bYCkDhYVIdDcGw;C@{pe^qECa?Lo-fct;yhr5F)4HP z{we&PsHE+UnsA zjvL)Jb7Op50^Ey3hie4nbZkT^qjBi6w4(g{ty{MI)D}i+%3PnLkXX{XI%wumzu=`( z&{Uv;sZ?>zcP`h79=`cok#kI=CUEN%?cR1(EX|X=s7k7;hG2!>!!H*Ki5X`6B0El2J7u>7( zaQt$-*dX`y&w-Qd2UJ?E7SUkPbcuv4l4u@mnzL0@rl)P(ga=9M| zbgh1$dJ0t(*_T8licXDjZP!=z@HZbWEQGRn5SI(9ctFP|bE+H~@^K*$%r7nNgS{>> z@$_7Cq?x@~E}k8oM-{JW#fQbd zQ)8XK$i70KUc!~bDzfsfRtOI&DkbjviqwivNQ_hRqzMQ@qR~C<6|@KoAO$gFa=EX9 zR{32jnG1gOnqy|h2}hK{;J^(>xG^oFPAWw|M7@Q20#i)w$71pHojdRE-iA)masE7D zRPQuk>?Mtc&*c9B1vgr`NJOSkzB%Ie`%{vW0nFFxPghh7u;WJHWcPYgc#oZdja9 + diff --git a/docs/versioned_docs/version-2.20/_media/concept-managed.svg b/docs/versioned_docs/version-2.20/_media/concept-managed.svg new file mode 100644 index 000000000..5645a608f --- /dev/null +++ b/docs/versioned_docs/version-2.20/_media/concept-managed.svg @@ -0,0 +1,591 @@ + + diff --git a/docs/versioned_docs/version-2.20/_media/constellation_oneline.svg b/docs/versioned_docs/version-2.20/_media/constellation_oneline.svg new file mode 100644 index 000000000..4e354958a --- /dev/null +++ b/docs/versioned_docs/version-2.20/_media/constellation_oneline.svg @@ -0,0 +1,52 @@ + + + + + + + + diff --git a/docs/versioned_docs/version-2.20/_media/example-emojivoto.jpg b/docs/versioned_docs/version-2.20/_media/example-emojivoto.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4be0d5b26dc70a6fb99a5105c234e6d7ab51a213 GIT binary patch literal 141236 zcmcG12Ut_d_x2>fK1QP$00aC>f*%HW zkCbIXK0n;^E!-pJQ0Vz~Zo+%?!u^9)@C&?H=>N_A*hhpoY;vvv>;f!IOw3G+SeTia zSy@@w*m*hF7cXXC$+MJ;S6~%JP+-;S)mWj;BG|Q?)~#MGx?{tpEnB6eq%b0~iZa_2 zHcLuvLmEM`va+%-W?#XpRc)Gu!IHFqu^lI0`w9T!xGe79>BnUE`l6I zn7VMG&wRQEMzqGcscXW1j_Y9AWj*U-DPEn?jaUtXUdd&~) zPvcqw$AxBOWME`Q#)U%L!Vkj|#zkwkGV$!xVm@_o>Dp~qSa_AZ9wxqGT_<^Pi0|~J za<*kcQlHlkBSWK)?4J$n>Tiwg+rYk$s~)g3prG&=mH<3>xmSI!Zrm*I#uDEL^*7qI z{d!g%;{+lMHIyR`O+!SgyR^X&eirpaT<`8yJ^{IdK~2JQ06j>>9#5lAq|AZrhBmeiWLti^wPNZ>wIgad=9V($Ib!8c>G}M9Qa~dem0^u&!AxiS>nZL z&eYD!29(}&bHF)m4lGrrV$&0-<6pazushttkegPUM{zC)CB9x9Lo7QnPY(Z?sS4j2 zA3ZzKLf!8mz?*fQVa8x-`=p>Fq$d3YQZpygshx$r#vDd^orCmxd)HyDKCDE)lZJnz z{UjAT9Zem7zA*SGSajWwMR^ZSXEMy3K$<1OW>x;wtjM7sn&s6RKg&FkDpEWk!!@OJ z8Bggo{WhjG$H@y+sA4(c{#8%z%;+p>pIpsF{o#!$q%QWY#T&MjTI0u0&BopunYp)^ z#+{`>bEuyKE#@>{;_KzGBV{KnA>UtT)NgRs4j`WYqLAHs4YnY85b0A39O@0s(9IqK zF)kH9BuV3I)>5t7aA)QaBrCXA$dWgK|7nfV5!Z*j^=UE0Lj6fvMh@-z`FQ(F+U6ML zl~&4Iq9UUnGYH;4c(5kMVQuvwY`g7T(j2%l2f8?pDy2ECnFH(glc`*DfN*}@@VelY zw82B=G}R~N%6!#MSS@8<@Q06Xb6TsOgo-#fF{ROiV!Y&&^NBFpW%tjsr=gztd+Y1z z-a2_DkuOf-E_qOzQ*F9t-v!^*ijlrv?>3oBoPDC)tgokdU}%dFY3I6l@ryL+MI!ghRDaSl2pATGDsV!Iwy29Y-0gVDeZzxp8%(Pd zL3|ktv9Q8q4lvAt533TztX^YAr0V8C?i?6n3di%vCXxrn6)|lNzPws`uCH(KY7rKF z{h0JdCb*8Tjl3#u{7NAE&~d(9y4ubRT1OTI)E5EwdiD4z?+PJB&Wgfmow}6JxTyja3AL_cRZhDTY=uVO zPwE^1BC?;@QGGaHRh7!k2?|<~6put)16N@dZYpj|n034*d;Z8&wEEHVknFl8ukSu! zW~@;dyS7)^@I!>_^)r#<{x;4>lzDXu$$NOUl);Z5dl#sKYaCmq2j;-^l9=a~Kk`pY zpPeS`d;@>Q0rJ={Su~$F1*%cm?s*;^Ti{XLo`xY;s{1k`0!xoQ^6u%H%w%b(QUs$Q z$#X-mlzBB#-#$kw2kPIbXJ#JZtR7N$sGht2@BaIM>!5$uP`|GSMH>_DW##R&%-&E)y!q>0Gc&U+;^AYkjp3dl|d%bPJR>wuc&Qegc@0Awc zb+SD7n|?_tqb0SES5i&WxIE%jcMoJpdZ%*w>K#uWuqWSi;qD0v*c)=Hlx&uZkyz>L zS`kiDn9)f%i(6Js-NEets4mjXWh{PFtwmdbCa_UlLofYV^-_(!yKP@CarX2t2-xej zS#@Ud&B>CTreF33X9U}Q!#)15lE~U`I z?z2x-_YE7j&w99uINBM?y-lmX;5M*!#oZgNv~*0s@Y~B(@6CRcBXVzlGx|qaR+&N+ z@_gR8U<*Sc!;-z-)Wsi;i$=v2ZS4y8%Q{rf);Q$xRdlgDsnm544V1s5f&T&;Jcek{ z=p^$E2{iQxqcLXAcOyNCXnY{^P|Ss6JvgO1cltlZ`n){M?h(Kl`qr-B4U}7}uRGhO zS(tlMdnKb_{==)UORJ8U_hWB~uGxL@My}A(yAGcCHJW=(ojxtfuHUjviQVTOF}ipE z3I0U(^EIV<7@G@QR9Fgn8sH#T^dhTtk|w+o>0BQvw6@dEub9~DsGWC^r#N-(`j!TeU2_qSoY4}>Ne>6`Av~%6jpoeWq97ko z6q^!;J#|}%>%zrZJ3gCg*)OiA`19C)5MvMh5BJRO_^4_C!% zKgUxR>l15iA(puxNg$K+$`Yc7BzB&K=4-rSOlz}jZe2pKG{0e!| zT(?)(=1kg8;|s^3*=KmT(g9ZGWX!Q!fZf~iV9oO3jU8V&m{`KspAIrl@@hnR;>)7U zU8DMAHlC~RxP0DGMs`AO*|4D7-6PLUv8s&ry)-HEkoQ^Q*fQvOa(ZdoKlAFmoV}w# z32Y~xE2C&Z?D_FEj7ZcU!T}sFrpnQ$3!qY0+k;%}%Zg}~G z@~t$+9?z9W?=fr!uS9Yx=0MGUIlVh37EvqeR~Wld^R}+$XkkmvnIRlA6$Kecjh*mPQ9gyl=srltl`xbeGL(^qF>Xm6vb?+xm$ zXotGe#X^P@OWxMp5Z7-@-sY!#rswc#t|6*ecmh-Wjsq545sAG@PQwTFl-xw)iV&eI z6#s}I=buAYQFwfGA;fSRgTCQ1^bL!Zd7lTWDDol^2I_NcHq82=il{&OP+FIC0 z+hj!x`k$y_m7w8IyPLvhvy zlxZlmoZB!Q(V7En1f!m#az zVK|J(s^-8fRfD!RV~^-GO@vbGe9&X$fdN%aU^&etVGay_Ar8aP?N8m{btW#Q_TiqW zQVvMa`0m}A19+V|Fgc8$a>IW<+LbdpPK1J9ItOk&{pg0vxlOad9FCwyFaL87aS}Jv zS6^Z}XKBnZC8+$0dVf{l*@)gLa_6b>blc7r6G2*}uFO~1R7whW z69w?Y@P7OUN9=mT?t}N~l9mbdTS%R{% zZw`DSPBUnWo7?TBsW{@NFf>x-XBZ1Erw!tvA16aU9_FO>4gLQd6aMdaR7cPc#AA=d zYtWR^$m399$JQNDc4~u~V~l7Hoa$(5c|iT?5hQ81T!*pgnXkHX^!fA8c*@GS`Mw=; z&AaDhFeK6i{Zqwlz;gh^9aGrF8q%6}#HU!sGT3X%CSJZG_4TLGJTtp#9e?3iQ&Snz4*H9W(*MlV%1h5ARIx0$}L{MlG& zH8(##UhnC;S5}+SM$I?16}%`^moETIb33DD7)g>JGaPy%R+Zm~O|UCE7%k#pxid-4 zOXZ{5t0ky2XJi0pWHrN7dhW{+ku+=l_)fOk$~7}8k^{MU+=c{NYPrHLk{9@uKPTUHq z7z|fi;Zc+#c6G|?^Iijv_=@`NZ*J#quK0vGMUok$)Hv$d9nY=~@*V6nHE1)`UhVyC z=@p-&J8+U8#7)i`Rca=6UfgY>b;V~Cb@R^ zx++X#cJ*tEmAR}qs^6e$fANBlTKjI4kO=l_9@#R}^h4}%t3w`AHrrw~>WY2cZDEvp zk55HCE~nqm+uZYnzhM8nSO;&ZAg7pXBA~U)v?Tc0wF57*o|6xxU%Vi=VM+8Eo(;^t zop-M_OzVW)O*p3GE_yc2e0|IN?$@7Z<4)`uOzf_nTrB6467l5Cnx2j4-wZXp+a6O? zU1An`aP8{@dw>k%Bv!lK=5x%<@$>pQp`F{0jugEy@;dDvX>~)(+musdDdCX{8ozm+ zt2mb5CEGVDW*v@hwBb; zn#qY%M5d@S{?cvtE%HuYYvguVm3*`r<869tz{2=?UXuFAhB1NOGZ|<19K3p|WxA&0 z)N#R53z486gAu-O;Y7Ula|sGt^FlbGoq#4T#RZXbv(SFteh=p{#5EjZ$ag!{7L89} zgha`H9y3h&a8Qsys?p z)@jDbvpMq~5%Nx2pE1C9d_S&KXY)j&q@cQ}Y^>D5`|HGoo^BTr2&i;lOYjO0zjsAt zk(}E`@6^|gVw-#4q#x<8*V8x~ztMWltyxt3o{h#Uimi1w9^f3ZS#>KhY`12N9O^*0 z+qw1OSTQ;C#Roz^y`N}xG;d_!=4W2FuJ<@XK;pLU=C$GBH)gYKlZoy*Y$8hC{CZ=I=n){=wMd*-JDA5l6(%dzoG4qEepQ(s zgduzULdbre5<^~!dx|jp{=q{rY+Iiwub0tz44te#^dw$>6)}X93$0I)FQ1o!ZA@Xu6D~u+`!j-P7=dSiSn%tYaN1In^xwr0!>Qi~` z%pU#b-CEv71m+yRJ0=n5W&{nARFaA`0(Q1%M_!J?KHrNic@DoyaWVtqZLx<4Fk-jnJ#{FbHEMzB-Bbx&>lP}1XW+T`VjAxHQmY)>T> zdghH3^>~H*oiQYVp8Zyr?27UVcS|;0U)`aa|G7soN3J>hdgIYD?v>5g4QuK%+w3gr zj}7ee(%aL^_BNB`qE)zV_F>vscbUSmn``6NuQ-&RV{GN5DDzHMZBQ!yQn3za>gXC@ zVB(=ba#-zvIsWmf#;fUrb;$>=5)`hxP6iYnnTaiUq|vEoeEC!Fp67hB#5V!eSFhLa zJXTX*^(b_`eTSROmsegPxeY#7D4`q2;)+*p+}0FJ8cy$(&S#Yh5p2;KHCk*Jmm_-w z`-la5m&d+Sz%+i{veJp>4*tjMf>!didhLqcP>7x66W9FsSuMWGP}9wAi6JIeapSBo z%heH^)D&-{+fl}=*WUFx62D!oE%o+O7Pm8)Z6}AUv z$7aL^v}KJXq{gOPN-}4u<5!XCjF-CJbT8pRj^BuS^jd1dGO*7~#Vi8%(v@%-`)5!f;KitkR6=TQP%CeZYFMK z7P(Aw#Y3mnp?d`#LdVN%v{zX~trzK}JP3HcU;DgwiUYgf(NDLde5=-J`9UA9vj*?M zcbQjBiqe+6vT1Y0OV`s8&!%aFqtbH)z9ys#EWFEG^v*K^KNf^OHE8SUC^sjm>kQ7e+>1DzQ2x zl~aLZl{7|}i>YMKj|z7i=h}U|ZYY|1H4Ny_0dohVV2^B;9^+oe-ic}1E&=iNBXc6kALM{1A1pK0b3?~y5M*A{&e zBD4Sad0NE5i&a~ntlE8LiPGaP5Ur(rP+e?|1#kZC)$LyD<7>&vTUI@Oe4vU!@gjsx zVCEH>m~u(f=+sp%2eT~&mTYf$Zn&!eftWp_=oR88Q#YS-*UYduEguvFBiJ}fiulGa z-J2g(^fz12BuN>rO%Z)Uhu8D_&GL>M){J?0*cu!xSJr;Lv88(=Ju2dOvvSAlJe~}< zPQg!ZhG(a(UfLvGPi$*5m<-VEL!5V_d-U}?dj zkMZToQt{7%&6`54o)8NU4$?C4FmIZ5tdiKa0ZyLv$a6qx`|<445bqwl=3e!K8N<8z zQM~uVvv!p)OLY>1ap?N!`K)O^-}BD~l$GLiz&mnis^&?F8;x-mW(@c9YUw{2e)z+D z{d*$p$E4Wzd*+by_z_+hvOg_D=JN^KmoXGJJ*W$Cvi`wcJHh|Suw>7gp|Gg%dsP8- zb9HlH(9hI&?K03jsG*|1PZ_R+!BwmcUP<&3#{&hW_{OL^XZk3{;3CZT;{2zkI@BWNc*!mz1!u6v6PqC2M$p65dPO zT3Tc;n`D0@IDUSZ@L6K2=8l==cniI`;dDR`aK%n0^Uo95AK3v@w^d{X&+;*o`fY9D;v^;Ab^Z1?pfw z&;(d;8e9hFfElm`;_$Bpd}0L-!uLwQsE@1|u7)))!k`OJU2JG9sp(^0A@Ys=4Kww&CQ0xRm?^JaxK2sw+sV7W*k2E z{QgXc3;@@408;b5KRfLYK$(Lq ztcw=0@^UQZ;Qc>ebFbmb>7rXqb_^)EX!v#IQ~)YI?ArHrQ>d6si2N`Xsmx)&p;~wT#|Sy9hv|tPrYO z0N_SJ*`o>9xk>6<02USlPEoL)P$5AGU{PB<0r1w^B*deJS`Th{qC|lb@IDC$jJW`; zXSog-eXvk6fal7RrKbr1tU>E>N2_B`+a@#%`%@N0R5YnsNB8q8;`q5U$p@R z60GHupqQcRaI*^Cx~k4p^sZG}Uk3r?-@JImRW){2T7UW~eny~^E>H&opqjH1guGd< z6fzha4F^kzx&I~sSdDF2L^NdBg#|N$+Tk{-oDO+~fCZ0wKBG4(Dao$H-#4H1+e8*E z)~fh$SwIFVHQkJ%xjr2`5%vSG0KbID-MVACXMdXp(0neS$gEXCS}+v|7i%-h2d;lp zEKUOY5ad>d*nh#TZ$#Ff)NxS!5P)be5L$v(2Ry-IBJTgqNa#R`K=LUFZUc|LYZl-@lD@cqWhBS%g0V&Sq9mWNY_VzB+0^72hoZ_1D(Z8UIQmV8bQ&c@bf^KVmd_L%x zJF#Hr8on|qPf!zM^{^(`b=S`P?+Pkd|LilBr?t}Lu}rq5gTagZaL%myqI%0Bf)5q{O+f_$*(lTbfi1Ml5HNk>lL z(|vGh!5#o=n_1jnc1nO~uxiHfJyeg|Z_b{Xd;q z!n=dTB<|J8I$iih8*6Zv28r@9{V#9lVBriVDy3)AQ8K76?s)%m$Ck2oT8(ennGyYj zxRc<D=&=Yguu}pTt+4IuBXb>!jFc(qg`A!kUvN(qjocb1p^Z#|HWTJ~O5kp6H zGco&XrURC`fC)RJew_T+YNle1glP*Y&V%)r9ka|!FE{Do#SCjlKcT;5OK;DCwtlU1 zNA#P)o&kJV{dD7pUv!ae8Trve7<1600W7N!ff38s>}mtrc5)+djRt5VHEC@Ffuu`Q zpMKHAMGcQRu=~rimjNzi37ZSZk3KmB(R9j^xp2d8XuhtsJ*Lj&P7<6c>zd@he%YQ~ z;ACQL=U|_xnBkm_OYN{dp`rEc7fl1GZs#E!upsjUDhW;mlmKL4-;Y8inZ;$x|Ah^F zA&a_rywbUpNHxGURy0hu)=rJ-Vh-t*Qas`Ox`1k;O--vUb9dG7i1uIFkXF-L;orJ_ z+(h7mxgsw27yUxC?J?9g`g8}GpC|#Lr`Ga`FlbiC!ubP#Nl_WSH zE3oF*(D*xkAv4J>Bq1-rO;SVPi*B4KArv%DA@Gm*b#i2wuzLC1;r_SIWPQb&*7Pq9 z^#cv}6bxjKQg4RVYB;(C|p6jJmp6nxy=JzC+H=B)jOpQ## zkzlkhHZfIHAepP5UZM^zL9i#eFt7ybYvE+VlM#k~jY#w=M8X1*4sO6yRNR_+z+m-H z>%(2}8%A8asLQw{kSy5FHp+NRZ)#%_&fb{-zvJRs(>bD}ktEtrFU_&p?OYlaB*eH@ zUq`eU#W!%rb|J_B`);BG?nLP9XIXFiuz9Bt>072?KQx~If0QrL14k^Hn-vh&TRm)s z5wJHP0Wuk)f_l=W7yUkge{Z^QbZEAmn`I@VJ;*?(lkas&hmubs_dmH%yDG*i74Zjt z;5H*)sjK}DV^(+fLIz#>D|U0A!zBb(&I(^En;e1^u(4BS)D~PA?8aU{PL0Y&7h1_} zIDnsC3*`5KfCa=tF`_d*48q7CaDzY|Bp<@@*VMtOZNt``8l}B@6aKNiFyHfC;OgeD z3tKXqThE@CoPqhHpI^L+`2COvx%=iF4G$n8?r?;_iiJrQ3I*Dc4}+2MaD#~Cy`MJ# zpXwxE7;DigHO=ZEKh6E#0iNT}W+!vx(;8Okd6(KJFN&^&Wbi%g9IMAP09=f=x%W8#+T8%=?9lGdjC| zS$Pq(HfVHPzKZ~;>vh?ZzKZ}zt3YpSCG+W*ZJ^mw-!SYSS7_(D81wn$)r8NVnG+2cx+Yu_Ji>li87!Fm4u0AJUdz`LMJk&`Yz!9y|rTF)`l79(wupv6#Ad5gGq=)W@5lSBp++GwW0FBh< z^HcwT>|gW

    7WMUN)A!Dz13)FebQ&t#s<6zabm0Q8^k5Q|R8&{3(_XAh z_^!dxz4|yvA2!I{7hE5@VF?h5dc3*G{6!sgL2>4*M~LDn^w_gB#rVS@(|K4Pd|k_x zO~#4fUB3)fOm`2XDj>uj;`bOZa1$Y@D1!uebLJ{~%f?BJIJhmXN>c<{c#B?T0@Iv( zKm4R#@=r68rx75dL=mJ&AgBw8Q85z_!Wvd9?KXbo=XHvLtr1L6@unpGssJ3nG!~^o zx#`AHY{%8|s^TTWfa%7iPrJFc7KMvzIO1mn)ZM=BIBqEtfmjGMxyBb#qS6sQOpf~W zBU&j{a2)C0su)&bwudP@;=IcA*0^}92RX6enW4Y9w*DL!VFC z1yxOunYPjRJ|)(KI;snsY07ge`d~C1y358PCGfhwT*kt@CGzLUyhS!R2F%uTvD~;+ z42qUH=#6U_E5J4O--%>>!pb#))4y4&*dh>BcjR(vDQ;nF)#$3fS8|e5RSPid^7oV+ zP_QdFJIlT!AKOZUot#$LVwDu-0Of^Nd(5&}VQMj49WZe~&JcDv-gUT2t}?0|i@=Rm zjYYM27PK!W>&yxzs9jeFq4Ui!1)nsk^m_P5PF)M7EzV!yjk?mUBNh!~nUa@CE-p3Z zByW&6R(NaE%tix>n$E}b+(>&sSZdy%NP`l{>@P#aVvrRt$@d%Fsxe5Wl=Wr|)A(WE zn4?>(V!O3_A=-sa2cf|!@J2Swd5o15zemulcPgKGxQ&BD`$CB#f`-?KL6Qt!u@)E` zmTz*!c#GXG)S^{7ORi&n(@m2A^D*qt;r{^TBIc&TP(;M+L73_(3=B$}$HOrS&OKrW z-{i{XxyI&96M$2nTt?2T5cv#;-U;%h0o9dpAP~6Vf0>)W!Cv)nNEM(TlLo{CyMYCP zytNU=qm2TWhkuq>kgJ0APwP;s^%r7Y^0%)L66CddH^)A)a{@A=Iqlo#FjD)<4c&I+ z{$WWeaC{jKam1uk5bX?3-Bd9}H%fLKdPcA|Q=#7dJv_=R0w;)DmXA*)@mxtmW-R^V zp(p^#=WmT=^^Q|e3<|8*?-8I%uP(j+0B>mQz)A(Rv$C#_NCi}4J{5JUh>!vvHhegh zGLV{OrvuKC6-M)~Y@ z;$%y^Q%d#fIuujJo-ptpVh|>cx%2b5ia-bmIp3Rjg(xT(ZSeV{QAnEsYLpaL9@;i4R%Ad#RlEQg%Ibsb@VJ$mNgHU`81 zI8QOG-BzL*#&?I$qy)U}J26!EEwY_ZoLl9Hfzthh>y`z8Ag|i<;t54;T3ro#FH-%K z3LO!guN-1tHPRG})pcKaPoN=9UF37POQcZH1kF}Ka?$6$C9D8p5Dp)-TET*E&XHh#=Ed@xKYbTPkFascO&2Ihm1r^1~>Ei z5uN5#)y?B1yE7?Jf->D=Ga%Ytpy9&~PwOxKQtQ_&R{9^IGdB7@Bd?)cAYd8|%*QXG zK@Z|=IW-8zB)qSTP8kB}97nWZDw^uvC4vhAsy=9O#4_S}P1W-#5VK~p<&{>DXer3_ zVo-D)Q^&`Mfg-U*zqTWQqLgh1FZ+VlXQ8uuIrWw>5mh%TTGwhL<`6Rm)pBui#p>&_ zmHqK36_>EJ9>2`AT&~MTvBx1eu%JO_S@f5x>e=Jz`^66B6%FT?pILSb0bp7J9RNo( z*u6IDJ2uc5k4`-!hTsltto%o#T&{}nbqE5=hHOtUtMaTcs~8*Gej~0b2Ak{g3QJ%q zO!eX*LJV-Nf4?!ySSpoU$rXfY0~%}gh{-mE6uaKHlhy-`va4JBc!tSoNK|vrw=t0l zG-;bpThp5P+-)YB_3VFI|8wp8@ihwFI+I0|`S$P;b;^3+bX*eA+m^$5+%w^afI3l;(Xzz&9ZiC(_ z78YV$58fec6`=#%cL15_zF%mts`5kOaj3E5fw}gKHH8KoxBX?~XNqsl@$VAxG*e2n zXw0?JLN*VQ@5M@4+M#S3yD9ujH7x3@s_LMEwV;x`?DP183OZzI$4Q(;++*+SR8CYoL+GRr!k0n&smpb<1FP*Da+}GGyur$aw$`y@bH&W+e?*sXU zJnh)uf{Kgzy#~O^X5%9WLIf)qg%pczr-Hp>1*3pr;NXUBeSv3ndi8?J7#S_%`d&l7`MF=mbmg_|gx7;+~#ZY12G19$52CzBKVle=7Q`{v@%vt(0 zb1>9A3QQKs=4&9o!~X!vca=q=P-b;vEDjj6n7YhYpP5_`l`BMMQUM%cPy5PYuw(MBPq8~FbKa6k=|@YDrxZ+Ca7Rl+6~ zeHPyl2sP6JgBF{6s0M{;LOuTg-PA7?8yhdI=31$@aqha(kaQj1m-(0>rUOf_gXLI=*`jCq5#NJ@OobTPwP*9w-LH6U@~QQi@wobg@Ur~))3 zqQ99-0WBaCjtt6`CgR`1I98<^BNTqpw)I$&datC>7%J^}#8p79fjzn6DHN(jFN`G0 zIKs#ds%3#@2rr`l05P%v8C&67mNv8$H;*wYj;T3!S1L%alNrp5MphaB08uF$HB2nn zBjJff<|XDe)lG_)8*u{ar;ie^NUJe4Y8qFc{#2zq%4$Z?yTA*nuvbGJv`Lgy|)^^?TE`cESo&Ny1=KUxf*e3BeH6o_m zTfqgVD=U)xuJ3Tf7imW8ntPT)*r>%Nfthy|FSXN`IHOXOaR@BNarcR}X}FZSrnw`O z?aZih+x$d(PEk<#?iM$SBKx(D<^b7)ey99}N}{Y`>~kFuszM9mpIMvyN;f{gvj$cG zR}^hPm}_fnY*y5#97YBG6zXbg+F4Adij)%-Togg5{^#TW0F^34iHUCKHeyz)A;S~| zJ!2%W*_lhJO}T=ry7sY-Nt#CCOcV>JhqR6=V$+3Zo4Z^nD`Ei1a!yjlIIxwD;{Rh&EX`$AP13L86C{1W)C zia?ID&aVX!ojGwSD}FUm3T`ZS(XV(-U?UT}e=wyyMS@;8;s)NO$$LxnC1)m$deKAI z<~R}?z(w6;L$79G%+wWiXbXR6GV4K7?_B=?OO#s6MKV}F--&$_Mr@j)+8<~H)!7t0 zX7Oqs$ zrtS2EASSSmEt?;gP|Zm}z!ZS%5Pi`=6;5ui)bj)&7MGh}k?clC8HFm|y=oSEr8uXf z?@(iLDxif@;7>@jfe3InWB~-IpDJ3eBE~Yswa*o|S%Op*5oLA#_l+qa=BWcX?*}s& zscm4|*BA2|$wH{-gn7QD0R>vw?)ZX;E=JnDXA-cXO4@OI`%3_WV8_Q#tfm#LQL6mI zgdWK+h$0lrFT4V`31NHV{mPOKXebvo_lahl*})Jo{^mC3ZxcC*L*h_sc4}F~q~Em5 zy72{SRg1sJ{{SiOk1_N{6TW43Kru@bak?Tdf%%$XuP`g2+fZdusSlA$Ae)q@fYN~5 z*o+0AsLWazD8m=`K$KTdiTR1+}-Wime zrES9Aj^+geuBf^Wuf$RyGA+Yv=4%k8+Pi(V7&3cvZ2+I#!^SQ<}KBQiaF||>jP?;-G9oA3#ekN!d2BrGPeW- z*eqaPh{3NY(FEhV1bKm9VCq*H?ij3!SE`P@>O5LwAQ4lGmI?v~yr^9hoPu)zS|z%~ zI}(Yf5M6!dOXgBPP_;Xg(Hnm29s)n$L!;q59|?c(PZz>?eh};UPY1$yJ`5|@!g#(D zy!cNa!H-mUJ|95vd>^EL$e;2j{04YF49UUh!T$h-h;i{}{FnKeKV|-AZ`psD{{SWa zVy&=R{{SL3Y9Xs-{{ZTGe)Bl=PeJ%)d$Ce8i1oNA5)UM0m}b0sdW}b$R%huU)|xaA%cg z{I~gnf4YB3pVNPt{{TIo(`7sR^ZV@n`!U^rGQFS7{`)fj06hNtKeof3exL6t+5FG% zvcLDw@3Z>s{`)_^&+D`L>_`3c`fUE2{LDIGRqy(DP@9Y9UL$Ck)J)3y7;oz>W?bqf z^&Yl*Lp6(~ad5X~x5*pWMXyy0fD+2Dz!I;6Js2%ebZP@$-Ta8kK^un~6x}S03IGQ} zmFqh~Pb0Ng%rWFmc6$P*avTmm)pIieofjIdoI)jWP@dm{Te@Isj(rh8YzNS`6%F4O zj!WXNB|{chlUUnN`+`&q7Zv9Bj;2hm1OUEIS2w*-gqd?qVQI6xacr3RMTd6m$(426I8vO z0eFk$32qd3PW^A%VFCbFnbkUhCfUA2yjiCu)OH}|LtNe6ok}3E@fziR9dbl~xJH3J z_WuB=&^SYwySr?q>OA7m2M)b&Qn3M}A~+HIM1q4_6a#?Ep7$RP(~>9`*Xsl|j@5hzaz*Ol1RJ;txzvpgb2x(X3gi5^_iucFRFw`W;1E^u2yea%nFmnM=T&GEZ z{XdZCORIebp~=kBR$ze+&?uD%s2zP36A>`_MljrBzKpn)HmO%CKSL>0>M_1z+4e8T z`1p^QtCjbJ2+nKiRVs5Ip^3M0u3_RbrPQtFItfrCAEzBndO;mWI*e!8KR@GsVC9yU zcJluK5iNUNtkelm4jDj9r88)d%2$a)4rW-W(3mo@xn3nRN$8Z{Q%p=biI=aY2U8M< ziB&2j{?C8Ys`AW?bC;b=?9Z55Z)HypqnJ3Gf2gFjL_E}ebsM~DZs1&PH@Ju_NZK3b zWvJTHb_dcUjrvOI@WepV?t&`krEySCUy>jc4^5iDH3o{<(hYn<7Vk&!NnU)yU$orQ zzwHn?RXVV`2|Z(kB~8>}C~Lex;{ZB0Lg)cnCB49vP0^ejw{GcP)$$-vLFImAQAq86 zVz)fyZ@P_@)0gtD7zEwW`S+6O!~4Y4{{U1q7=k?-{7Mhp!P@+m;+kKi2H*w+f$AO` zm*|-ALYzTDnSlwE8`dD)So0p?xH*7a?16Hz^n$6!iKpqmpj67Mm6#AQDpqBD%9R5! zE+jI<;q(+vC0t^@rAn+uFqw&%l~ST+VH!$_9H-hpAK_Y@9ZQ`<82UJx^ELEyFX_k9 z=YK~})}`|}kJ9ax%-mX=Vq!AA<37v&B=13^xuK&&L@`{7c+i+%U|dh4_~Aly@qw+)i;X zIp2wO^kpuIhrgpQaPxtHbEtNHXOd+v9%filQo?lCth`GlX_L5DrIxXwar#`JJVw=B zva$59X^rkwsY@u#?3G4!+{>AIfUbI*Y7K(CLn8T>yh|}ERIi~vg2;2!d+SJU=)J?L ze3pF0T&J&inTgCulkDH&b)$*+`eqoZsrZD)(4TLjPsh^ZFEYydE?l_5r^nOMaTvGh zG)E3%#E0O1f5MlB0zy(NiSiEH^UzY7xYx5ul1Ljl?A$q+4!8V2Z);H z6ma5UBSywzqAF_<%)I{q5!@n%vlM(qC1PHwWuAUv!sWc7LSeWb+m;;r%o)#_!wGRI z<_3rkvlF~RJ&=T<4%pS$hP}_r^tZhjCPW7NmEu&aYv{m*xs^w!(UIH%^snn2K+F;1 zrX^g#)WZ`D^na+vBF+7u->@(+Et`W};NyXK|lye}gd`^Ej?1;8C~|na9wdY5PY}_WCSdE?!@! zNpj`W(K-F0oW-f@FLLXc^)6|Kq?Ve0~G?} z^a7<_=jgN`l_)rrbrUcnVX0RtB}&JhAKR$Uiadue=1! zdP>H(74a#@&{|eEjd3VKt@j&E8DpPwy~7Uvlez{|ih$ky50o*DxvB4RubAM98yOYnUuS2hLn8DT^~`Oh^1Q%m3;{2#d^)5T^K%`yu&^xow^W6-1e}FcAO%q2ba# zJ(VtIi^X|Wz5!GJ8Y|Wyj;c@`Na{bm|+a+@#b$I0tRIcVCNF=3~@53 zwXDq|RASstt{a0kUl?60RLeJCz9uQlL%B{{XNmedT8p;q>NvM$)~dQ~{NI zMB*f-;z~jy<$VO7v-|#`g)#SzV2H&JabJkB47rzBS%bUq#oRuTu*52WZZ4cXOLc5j zm{xJ-I2IL(Oykx(#hw|ZbitfmLY>Vr!Etb^W(dvCTFRyGxV*s|C2N=$m`AR1nV4X! zJDj23Wb^eFRMRUea{~5Ej8i-{67i{F>paP0nTgUxPQB%BrW}Ofk`CHlp^dN7P&4z0 zjg6irmuE#WV8UIxAOm!Q#~EG+#7fN!12^#iqEpJ_776I6iteEM%|md<5Th_mcm11w zkzjWyL%NAx^DjuA(yGW5bvn!}cQCnMGPCAWUzm{FnOK@im8g=XO}-#;snIWW<#2M$ z>&e33(N;JO%NjN`9b@-xf-c1L_nO3PquM%tbL8-VFO3ZTtaqB7? zmcJ1!l~5&kkEF)qg~X`J0x>4u-{17_K5}g0Ggyl|i&HtcGUg?7<}1?WW;QX@N74vk zs6S`bm~xfmf@Ke+r%#!aA|j`nxv;BDeXc!6(4g(aC17Y3zG_vTa9bB;_FsWuG9OjU z7-GOCBR~rEg&n>VMNAX2Eb5+N>PNm6gn=<^p}t_fyTD@* zNMTxZ5GL*rZU*Qe_D!Ao%DyKFRSc5VxkurllHyO+d`Q z5s6H-z$^-CSF{O%P@ECgCoy2;;q;hKfZO2AN{3j{>xOW?wRwqL8*(|A{{VUD<(?}j zImzi4A-dzTWrYr7eRrraS zR7&v>4NnYAd5Dv7Bg;Q)_x(p&lZn1PrsfmX6Eg!)CuB68eGSy&wH!pYIWr9RQ0@#7 zQByJBaK_?&OjWqcn&tMnpeutAZAI3$zUGgx$~~o`g`J1Y2P^fKlJMuwY48$Q zDpoZExl@VeGh|Yw{xx#`d|oSV^#Ux{7rgV}k9JF({_?f{khZw{#ief;g~Sb{{R?>ISz&=1Nq?;6%wdbY7w7yRfBZ`JpNKbIP0ld`>r%W;{{RuhSc?~*r&+Yjp165IwhZgJ zQjX$Z(LT`!>3GiNW;8!cnTN;s{XUUz)>at2O)%USIF2R~Zp7v#l8TNPn_@$PTXh2$ zWw$U(C&)J(A`gn8{nMN-rPVM%3b2jZ!qy>n0*CE>@G(rv3LM75L9;wcvIKgH{{Rz~ zJk&?Tpk@^F4fiU{#DUx~`@*A)!zMK}?s5gfh8q=8FVR_b#l8p>9Nf)WHXXqgVua}T`P zIh8*<@cxipK^~CIp$0Fkt>Y52DxE-w)K5r|*$g2wSUcc5SLA` zHKV_@=lp?vL3mm|mmH_?6$DCN21<1MIT>hSZ6U&gMkr;|TYe3nVxi8X@1J7)e}HA{ zDqbQq#p-C!((=mrmBYs2Swwdu=4EM2{{TQ*z@C!VH;m4DxDQAR3@Y3wn}yuJm>A3i z4Pl3rC)M*2+@(y|vH1Rf!T0|F#0z{zd=nkRY$2>qx6-;H9HYbNHDl*3ST)=f33Mm< zm~DM){6m66oT8zW9YZlIiOfthM4|SJT*T+8+HZL0+*6niBO&uzEJrYz`&&KT1ch61iTq?6dWd~+% z<3!%(sl|HY5J5VZY-*~Zw0`g}dg?URVAKmdz_(Qqxbn^Y0IBFo#-d_rP{(rlR1BC< zV+YZ*f`}5t*11J;Km(h;Z_dU!uL?Es*(`cvM2 zQ^WdF=fp7<=W?#1c!~seAbYdLbBpa57M!X+^3W6%t`%{85H8CV^9==B$1?9GfLr&K zfD3Q7)OFNfyL99h(9K!9VaWE#2L`>|#2m^u40a=$zOGg!kwrZNzi1vAfj98i)Tg~i zOp28zFM_c=RPq4nq)@g7<>; z_{1e7ftSQh+jV?Y0M>&9A@~B*X^0kRfJ9vyv1Fj&W0-{G1X7)dD*#gnJsh8z_r-pf z@%|0ov$=HCXo_%LtC@c>IBsemyg_!ve5j5Q2ESr|Fk_Bpe)lf$_^A6wLE@FO_=t@C<-30Js<=|1)V83tym$M35T1VUuW)%l zA($TJdx?35u6k8}Kj8bn;us;gA3$e_PT`-R+ZHrFi7+yTfaP8YIhBdkJP3LPmnQ8g zOEqiKQUh>($6>;ys^RLR?3Z@(-DHJvP)LluF2FskgX(b_~M3+8ERx#0R|5m)d2*VYo9e%q{Bzw=9KLvjW`nG{Vhy3!|Eg z5e~_Ad}vwFLSoXj&$hHrC&d=Wp$z~S0|%#5SRO=lphXcJpx$pW5s0GQ?~W!i=oVqqr&JBa<)^{UuyJXS5MDm^Aeg{$OO45eQ?LH9sTp{*l#2 zyvno0W4JIt#qYo%D+aT#1OazlfOn1umNGD+hmstZFWz(i0AQ#LEwSg)D#~B`6Iq!g%v5ojZ@0qs-1}k^2!rMMP5O z-TWQKr+91wn=mSibC=L_4R3E8Z6MmRA; z!3Ozlpq$GdW3~R3{sEV)X2})g`gs^(5F=!`@E%w}To+P$uzL}b1CYK}U(D@{)dSNm zm3#9rA3EV>tHfQ{tQ@k$$WQ}Z3o@pf!&idEo1>+06!gBTFKB&G3-bX<>ekI+N3>Oo-b0op*)S(& zX!dYE{WE#)iZX;@A(!l9*A3hhQEhy2oQB}{VG9G16K9{IVK`j4v2RhV#xCNp+-L26 z{{W|S%$SZKCg#|_&}MNy$S&csQxy`C&lLtINZ7a;htUr)*ClRe$LiW>JhJd3Gz(mA zc}q=+u5x~7375RsK|oLk?Ko0BD2VoR3`kY6c_xuv0k$|Q0tehM$-S=t?eId1+PP01JQAP)bp@G~!L)s) zsT(0o-QtqlPw4=TE&ISUE8W{i+6w`*X>pC~vyuxjT$6YL17)rAxR?pq*yHeilAYEbf^_AQqO<4^G7CexlroPy4%6NeFqNN;0rP+7_vlIS*?zB#9shw1= z4M3__1JqaxTb-uGbM}FPqcm3qKb}0WC@t`4IwChSgNdpiGS#rC)j6)J6Tas z%9Ovc6FUOaM{n^gLzle&00)Um(9BMNJplgexoj19eC^R{ukiHB!y`aiH^JMS4>EvD zO*U^y9pgnD8ev})tL17@e3@@WM-KpjTQotVcU*0U2_RUg22MlP;)d(vXq`1z;%nwB ze*XXw{sER!FK-cII-9YH!|-IY<2iYIw>y^(Q#L&+J4}O!n_t8iWnKs$4F?ufDy-SL zYfZt+s#{R6IK0X`^D(d1ksT(aN^EM(^4xv_b z6f^ErTqN38!(>76fUDrM=Ajt{s>JZaxcCrMQR+ppbsR2OF)Hl+@9=%^@eIMJe(=tI zgK^@Z_?AVKO~L~Mb$2g(7V#a_>J4EDpr8zvtGi$XKcJx^;=q~5JCsPxHsV!N%}mO^ z2~3ppF$N2|%nTYpr07tzusO&^T#W#$wz@HcpFGRP0Ik)ci?q^xjtQyRGA4{EFqfI3 zmsdA6%(yA`{{H}{7DZ2)VAT=$OAK3l&NGfF`Q%DFn!|_kAtOl!k~klIY`GFwKZe=O`Jy%y76~VJ8W8@>YR;M7$_x=5HhUR zH__n&fZ-PY7w;=+Y1sGL0!v5JPcx3A7NTcEC~6O~4{&h0E-Q+L@e-ff2$?C0yi6Vt zK=p@+>}|TJ1s)2VnYaQq4+6P+e8EtaiKk5Ej6npY=9o}u0n#{=p`PFfP1uzJ{6RwBM9&c1!lCp8An`RW z*uMV&;r%9))s`XokGfC=t@W?EN=wD4;r{?lkzsH{LSzpkm`=DEy>A`y#zD%o;J%0w} zvzJBacpy3tnW&b%>O0W#G7e{^&qLplIJ6_?% zanUXSs_ga@HuOhKvnT>(!&t4k*KjB&NUattQn79;Jj&GWdIfHeR~;IT+DxHX7fY)+ zH5>*3eGUgV&qClGjl3W9R> zK-w)|i-AxEGpL}*_?8%>xoe#8kYXj#iH%{O97}ppY7xf6ajGcuP;v&spu%45_5msd zYj1tovT6`6A6EuIKM4Tu;0BRvoTt1YWh<H=5_({G02a}wDyT$? z;g}KG$mJ3%lF%g?0Ovp$zqH?0SaID-rxhG`YuK&LCrl3UG(a<5{X53no?m!)N2{9D zck%uI08rF@7sR^ULN_issMz_A?j;hbl)S#snnv~eORWxGQp^Wcu~sicxGRB^PIlJ zxIu=B_Iv!nCpIe>iRKl`Vgtl?Q;Ue%qH;$bNq9~m;yDuNy+KGLcRxWhmQ&RqAt3+8U<}6gh@i1}t~~03roVYOfpixmidO*s0IFQIMqS+tTI2 zk`9vK0Zg|B5_hb6b5r4ihgUW3OoE_}n}zo;GoIjPApjB78pLWX%(Y)fGcSl27gD0a zYd?qdnvo?lQ9Q?N0P8S#u!Ia5SH47kB6>yO;_mPFeWQ;g1jSY}De)Awvh|Lmk%`c{ z?7zbb0B>WDnx7~RL%j9V6~V`mwcOWlm!wf9v_{(gNnsQ?+j|NMZ@wd4&PXEzOTxXN1G2Fnn66BBL-tee zEY;q0{_$vobkB)DQfXa@^*OiiJGGPc~MS*dmdv-^^% zL*Rf-VW060@ZF0J-UG{sbga6Kyu4oCXomnkAdOQ9`&Z}u8T$VK#4vX`PbhNEzVMky zqQ#Y8hyyP5G|wel;S@g<=oD)C$-4p9BVhBv8mh!sKt%2mnG{2_Eie>zLg;2^=gms7 zv8HcO8!bv36q~C8w(x~OH*Q&98<+B37TjM&Bg%QUP-7JM=&>G`+E%v6j-}AIV!RY? zT93=s8|im#nzpHjPSG+%ECDKb(8J1Bn1s=G%y7K40Bp^c3_Dl4Pm6*4BH>uWd7fBJ z*x|WM$e4WtKV$d(M;O#%%y14bm+#IZYpsD2W`WqLv^ zZxEk@Gm2MFCAgG2{fDIPSYt6dVr-;T+bAL*6CyclQBMf?0KCJ+%?f!ij+Knl)63EZ zu$2Yt?06x-FcOTrI*E6)(kf`Uol_Lz{KSraBD<>~D}d#ChrvAq)Bvm}QrH0IWlvWs zq)33++4Be5qrpMcVq_dt1P!{tY&$UmvjmSEv)+4aE&hQ^Xo2 zH5tFd`d!4Bp(kqf9FaMf5)2Q(;pPq8$N{sn*9VwDQDE7-&V85SqT2&>wDIz<+Bve} z&D8=Pw*=|~0;#QWp=L@5-h3bK3C=BajfQH@VR~sQ#`$vrk-~B-Yv3g~R!djl2PwW7 zYzoL2D4o&WrIcK?ouk=lmag{6lal+*0!{{+CgU8I7?HxoV-hrO*k84x%YBaV;q@OTsT@f)#<1YQhDXx`t89NvT`_ zoGR9^7^FazL3q;7&1r+rRCF{H7K9hBVIFnSs>y1r&IQH2%)YIc+cRV=7H9`JL=4M0 zl+kB%fYWT+V1|{f0NB$U*!0iSmiiUGl9Y>hhHv@-ue81@VYzcJ&@J>C5LYiZ4wE3#|K_q6EZUPmjmSPQnZE3S~T^{p$C>D z23X6eRKrKjVld%s#kZFAxrneDj01%R;hw^3B|TG!4M5_cj10YJaJvU`gA{G?1_|>!7c6 zcTIqyMuf>niryp8^oi(!d2Pm7R}KX>*wVD=jJk;+s_+8zj_X$uvjk~2>`|}0U@4+4 zzH!U4u3fO^90fad^R?}o#kiDK5HF}|K1966(Ct6Hf54H64g5oib258;0&U@-fq|ln z@e~#+GnAc-YMeWPZFNp_D8`&eLnS_NiFChcR>4cf64WVXDDJwBh9|jz7pzW@@lj+h zs#*$alpi%wab;)icX1XsoYUeP6C8~DsTLU|yt$=i(9?kZlQdmS>(OiNFm#}2*aB5p zo+tr`AcdklPqBV~!S^r3Dse8gF;HW$_>Q8gW35I8lRm5YCh7*F>C+VKx34fB&EN}* zLaL{8YXNTrqBEG$K3QpO%0 z-jGBdp#ZMqk%gc;6u}$t88~+hr3MD!C0ks%hk>l53kyMZ*y5CeV{Fp&%7Mu^tzd2z zbOB@#i;&hUA;m+ZJ7W(Ds-OgDyNw4ah_e|1%z{$xsEG(cTqu?ero&k7k#PdY77O5K zw05%-zoFcejQv4h(G&JRf7Eff?mCu=FEh<9mxqGmSdzf`na?P)*hLC$pfV;tx9AQ;@ z6C6+qvV{X+q5`}C5mhU=p#iATYl70mHo8jE5KNavTX}P+cDa$~lj05U5}HLK)y?lb z`)&+%MgH=L5`z8@Sy-Uc5U*=k1@AZ3#FDHQ1znNBMl+Q%gdvN2P;Z*wu`q+?P~D`l zL0TKFvk`0o2EbhoS*uRt06H3~mK6ngD7CnNuOV4b0b{qT7jCaj1CGxjH_hguo-`5x zKrkKXhq2-HzXbkWGjC29*gSO#N16tTB!P|i9F?3agrqLIrmq5i%)B9LOCo`%nr~?9yCW5CP{Qb#QdtRuXYiynv?eHSYz0mhg<)WnLSKCq3PxFaRq`t9Nv8A^ae` zj0Q5(tG42kjABIKnGuN@HpcT;Q$d5EaF-_Ya4Tf}obQT3IN68M1YfR!_h z0#;c9`f~*|z+ec(J7=JPtI2FTHqDaSl(~zT9TLdVHGT(TJ07E8wBAj<=WqB*Adi{` zm-FGt0`}-{9Ip=>Au8Y$DnWA^#phP(IAfyb{>|<3LYjU->GJ}Ih6@r}v5}EVwc5)| zv}y&&Ic3y9rG4f5O#=a<2(&QYJ;69!rTCOi$f<(Z){Oz$#F)36dU#)e;#oA*O>(^- zcZg&_%Uze-GV^fu*wjZ+mU4fO2H|EMPC>6)Wj7BLP-FFn-9AdjEDxxD)uMreexNwrG8H(*?*TbeZpryuZR5x()!Bb;nOGR3% z9ubY`Dn&GKr=u&cFsx}rXTLz3?e~~jb-%T|5rq+8BqbipL2q<{Qn406<&st24g?7U zgBwkjnax|zgaxUybY0!WP>Q$&0=|Q+RSy^;#9M9AbD&TIw{*8KE)JB83NWiSRpzMO zDee0#yB)LDLm6bvZq?1Z!S0cV{zHx6zzurAY+8Av=E~s4B3cE|?*0!W1~HZ;5LvcU zLaSx}00~&dHT{o>?LWbceQqR7%o5X38L_XWjW~8eEN=eb0hT=m_@6vpi5I_PU@aVp z6LuPnRb`dM^RF-HCwxbfFS^$e0zdw+k_GCq>QnEn2YqPMAjAc+{civ4DH6U^cj zIw?fC72UXnqg8%b?JaYds0=eysk;WH3YuGi<16T{qNAy2S%d8o**1XCPh@Aify*m) z@xV=-95KDQ zMG8iacN5^^p@qZul|junIwZBY7K)bJ-hS(pyC~IqGgg@Enc$UEyN*QyT)Dg>oN-LN z>RWP~m6$Cs)Tv6;3T1mjt|s9Nj-aDXSz%_bAZ3YPpYZ;YxVc^~SDC1o%y$?dAq;#7 zL|Ar--fxpB!b1niY5=GdIOV&^vLZ?vu!3o^mnRI+6-5*%q6*;OSkV6fRYt1GDRo=2 z^%u%mlp5J?lx!_;Q6UOyO)Tlo0S9y&oL)to4pBr=(da>NcR$53a5q>#PPvy$!ZS*vyc-0P)t^zau(F4spdP4h{;GK zqm9ZOZJHJtkEI|=c$EaEvGfj5#^r7@P7LcS9TOwWY{h0dH}rc-{(r&uugBAK1Xfqk zV&V(Aj9`mHJg%dl8_lb;=y_d<3$=o*j%vEMU)_dA*6=MYj9FZ^D+~t8jol_06mFgi zfdZ`5i;h-6Py8 zG{<_3%in`u@#p2?@Xg{*bY8-nSvZkg?3$xHlYQP<01l2}}Cw^heDa?L2-__Ke=9Q8qlA z_$bUO^%^FCH8k-Xt|5V$#JR)MaygDs?YI$V?*VRL`Y|wh#43=poys9V+Fy;?I5Rd& zuQHAEE%t`|!E`0$mK{NbFq(dzNqU>Kvhys1?|vWBJwf-4;O1_BF>S=li>UNKCSKSXzi}7zfl0v33fZTp>gj9tvzxvpz|&)h9FiwmItl#8*#2DhF{zM0}++C&JMZdAkm#3c)J0L4>Gv^jPyZX4aNUV}l(dVfPV=$R}m5Muk1*3Q~n0oi&bE zuH{=(L=98H!N%(lbx411m081c9;JlrjiK?E7NYvcR=p{(j|V8*(M z?G;Kfu&BNuJtLM5Bc!me4d3}p^!*9uL_rJjN+->f}lg}W3$wNbI`+jCb zd7l_MJi-sb$M1r`s0M_b1mCPa+dU}n_N6V(7c0rc0G=U3gAi}T_lj&_{V%38@wO2w z7-VpKcqNk|P|ch^KatR!7%&7i)Vg==HKg>Ed4Qo}^DDxFCV7q;-hN`#AWp&v{o$?N z=7TxL=k`Y2{|7_D4g#Lb3fUHONKztR07q6>X_ zg^fT++YHL~mw-85raEOeNKt*XzATBD4pE_v`fcV55(TrWQR`-0Wtn|gfo4r1=TYwk zMXM9Gg~@xXnfWjWLo+CVy32+Ksb(QpLgcWaS=$Z8n#xrk3pbTpgE0pa*aW4M3aznP zXvr?%DG~_1mTc`=t18R-AVtuDb-FFvrO7G?EMqNETgGEJcUxuonVW9_?BF|P{DRO{ zc4$?%s}}4hR4FzZD`2*{P)RFv4W|0R%sF=mY9w4xPG5(x9m7Si&L;J%0T3<9F69kE zN{B5g>1$bW7~bD!5p-O;JC^pyZHC)09t=Y~yejv9Gg~dyJ-@=>4nnt|b{gUdgqUYI z8NzQ}N-*nb4RU9A`%L7{2D#--DT6pu-Fhb)GOHdb@o~=dD*}NZoOtYnpMRMWr&Zd8VyTRt#Y$d4yVTtvIaE>s$xpW zO7Zk}iLN52)KUC@&-gz70QinEHrL`&1J32*U3&F5G>34_N45tGTk2WtOD_##_se{L}h zT^37Io8J5QmYyaZ&yIaoUH})I9zd~=5O^b;<>)H=5M&A#7PPwpvzXR^5Pzm|E0e@GcS}7aaV)jvdxD<@YEWT4;+~-pmENGI zP{~?mkyoro)A*A8v(dHUV-6fo!j^A#g$3okt zMe-b;dYIwFsFfA#6N6+9F(SBfl^rQPqlk$pYuT~(e$n0so@Ig!Hk&#s?oET zeo-3Mb%BMqwL)tMD?>xNX31pE=}O_gJveAwsLLKJ7^^c%s?6-ZVHiqMhnb#oG!5a2 z9@tevnB8!QYXP~_w$!zdt*Y?lK%jjMsDzZt;)br1_~^&EWBvO*LP7J zjd$6wr06j%?J$D~({0j<$F_EYFd^XtVM2wuble%F+$7^yyEf+zLgQ35x%gXyfXcy* zzkuBr_lTjV7vO^e6qLTqvuVyZ>asa_42G_+i)XS+AnxmY1P#Y*f3|!=0Rj~A7t6q) zhq54p0zath`~={{W&`?51+iIgA}SQFfpfHFf8=?FDS3RFxHlPjf#o zn4|?t{f}4HV8VqM9_{B^D{+%jro3@ftXD_04?^D$jMc^k)#wB)4p(yn;8@Jra_t>J zqbf6FjML00V%`JZX1HU9E!HFJ z^nhf!gPcSUCvkYhx!uAouXF@7DQbEU63a!ylyAD#K+Dqtw$w6>64Wk;>`H0`tJWn) zGhECK!Gw8LiS1B9^Do*VWZzMGJhOSAAUkU(0~)w00SFScd?UhGkP5(fcCp8gPaRA* zhB_c0NISxmUL|W4_9c#(@b`y6IHkf$kK4EzA3ir1vThJ-{X2P>@$?U8;M(OT1kQjz z_=XM%i^K{`))`^A z+X@ols2G)SDkAYbr8|Y!aB!NqVIbK8rC^3pm{T)OVTR^wef}TPam_*bm4+2}9-sxQ zDwqkYqb&22zjQ5gZECx>mhc>6JtC(8tL!=TW74=XJqr}`VGttwU<~>blY))0n%}{) z$}-r2vYgAS=!FkEkQ8+467JRt656m8XPn9zhSvqb<;agYCPG%#fUq{43RWv5w7l%5 zDpiQ>_?mrX!N!wR5TGx0zYG`@dKvAbLhjpNP4N9L3@)%vpqA5A*&Hz5XZWZ_Ef}C-(lF#TeDc{{Us)lZGe*V5)m> z=ec0dJH3-LaXb?CYL5|w*)8rb#nbN;9t-ejg|C2P?7{3aQ;_9Hi>RO@beovvVU}P@ z+qISU{?QmKVBL20FHjEz&C=JIHp@djn8}Z6rBq5o60d1U>Ubq(${$!y*!}+iPU>ae z8JoBdh#8um8Hd(8`WM@Cg1|8k8jNtiPJMAGZ1GtNU z0QHB&LEHe-5|=Ona;O&%<(01NP=-?G)$+JJLWNpzBL4u?bzlSXSCVqQsvco0so&e$ z$uT;&yc3i?$C40L7E?%@Al&i{CIK8%E}xYqHUYQF;EY>KjrrkzVDc!p9sd9{@2=qr z;i3NTZ!ixr12V*#{s@KUA=1qmf}wvfK-rNE)pG){qsdGB!7Z@@bi^RMWP$_DrX>KS zZQ>qXn=hElouI|dN`sh7h+IJK1k*&&g`7@h;x4f;pOg51Nk*avyhrs^o4^)9P((4td@!B^WxxzW6?3P2B8-X(_ znp@uU2Ow`^t~M%xP6s@o6q7LAqhZwt#{|sMQ$Z11!*@|!z!X+0C|g9R9#0+;(rCf7 zHZhkgk1!2N1uK=wS()V}k+dK|-lwQC^#|mR+H&$7vz2B6mC8Glayj8~p$rnGwaH!F zC$v`2+YC4$Xq1Bj04#h$D++)#LZGUZDehhw{ik2x3=*@{a73fhRJxi*U_*z}VRP(} z9HgcnI5456A2F70^&e3cf&x4Slyea@1-hwFVq+nq20oV-KSe4jxc%bPcNk)e7sdSl z0E6#;iB)@R37 z!{p{Id7QiIV6u^-FUbcw&R$pj%gW5Puh3`l5ua8Z#1LM!JocdmxC<|*L`Y<6C77B* zP#B3-P=vcsikV8Osrw(l>CKZgM#V&4V@X4Bs_HevnNgRRc7>aQ$PHr~mMgn=I}?=1 z&Wt-+}2FJNYST5P03bHv|%Y7zYVsW@#+;VXV5Dlz6K3=r>=!5WADPw9OCL1K^ zy7h-l4v3QZ{6~dD*wz?vw?nhuV9@!?=ugLpW%uVuu?h+6S0 z*&GHL^q3mkBpX9cNRJ+kBbl*ZfluNgU}~0E!T$hNE-L4Jvi8nuvnXB^vlO>_j0iMA z&5#VL23R)tIJO>=n)*7Q)j-Vr{{X}KP7&0&!UYnUFBsd~FMYvuP$9?9uZ-c;74&U2Y;xUyFwZnqsszB;UB8IlVuCQ!gs`Cy*Mwyu6=4&=tQO-QWxy8I z`ZgTH1#{*%0RV%gc@xX833$pCO;2xxgm9_4vqfGX0AN}#2tXTK7{+ZBTB ztB|EAw=aoc`k_c3ES6Pvtz$KRp>-APVxfcsm{=;Y%l+aA#u;^;{6i5V2?mCtQxM8{ zflNZ4AvoS;&&>YQukc<2=%tk1LHo*&Jwbk9+!Q`0WIqG*8o|)_%NGjQIfMq5Za-Fr z#!j6p!f za{3U;ZTSeO1D@Yl*C&ZVXHuGqt4T<@LjzDTuciU05aX|+$A2H+^zNo>xRaRE#$!ga zFG5p_K7+(?xPj@4VAzm_;lUWbJam5ZpoW9lMl7@tC8s6-*#-kigkZKHhJb zab&S{Es^}Los#*;XTY5Yq|ITaR>5#WX4A|Ap&G|0I!A90Uz z&=}-eTHrlk5ZfvgMak2NUu822(RVv7k=FAI_kzzi2DIjELS8S-8G;>7J?E@&Yw6$b z@cxq;VXiBy&2QWIi1*9N%^bZML8J|ZBTjX*otu&b z#!RN%hr3wuWU~1%p)8ooRf9Ryq_&tB`C^{MX@WH}hOijz@#|afwMaHlPhxYT2(#<18C! zYSt04Wvb)GYzo$_X0>FU3S)@P0j1ZC^|il-6;lK>>>%LKFAp%IAhAo?YP8$8co))> z>cLd;Ld6)lbGDr}JN~kEs<~!jaXG&@e2=8YgQ}W>1}YLOaKPde^py=xW7NNPe`(kF zD;IIg65gfCv$zz&jmkin3>9R+ddyAWyk{|pKXuCrjIK#-TsKeI##kua#~e!Z_mvPh zVEKy{E+X(ni*c_JvvT7M$%=JF{Z4|2DJvdK&8?dH1&o|T%oC# zP@z5_OTK4OX8zyb^#y335sPz|iA#%O2ds0buW)?Du4Wj4;F^@CSd1}j5k)T!;ekPQ za}3GZsE;bstAj&Ta`ZUI(NRc@v_-*2Sigd0VPagW(?kL4o?CnE<_zEhm53REFyw~k ziz}#}B6AJFTPofIYTzaeR7@FcxafPcD_EIX$3hBDqB!b2zE>P$5VMbHvyv*BW+mVm z9^=C-xl$_KcuF7y-3BOd{{V3eLy9a&wG6C)sg>~+!d84r5XN%l(`7d`18)mvJ(gg- zqELXj=AlA?j3$1y&BI61O0capGpTpa#P&<3qvBDFLWx$zMqilGAm*Xcz`fyvT2IUT zKcsaI>L3m6X;tnP>S7&soT+||HGXO^lyVleE(3Ho*<`XD@G}J!kpS78W?smsaZuRb zHQAfe4vUI~N&~{`xH9D2*z~nba57#u0$^LtKtSC(GCvadx&^ddZ5cI~D<2Ve;Mf2f zQisHD+379f=@Q(xZ-|#9 zThSUwk*tmKhbifzZs{r;_P``kELJ!`qf)La6IBlQkI}=_ShM<$zrbYr08Gy3eM0Ij zkly`M1u--fHvpAba}Kfl)?Qt10_N|ytHc~ZYE~g3+e+8F z<(8LW8VjySqiKbF%Xsu5peQ(o8A_feM^kO?5R>s05H?8!^uLh%OJYP)4;9PFmRpHT zvut_%=ZQjERceFQy=>u@d~6Z8F3-8lYv!4;IJWhyNl%zqA z%5#M;f!w7ZglQc9%%p)di_$_w8|jr$l;02+TtlKQDG7)38g^(kOP9JqfZE~)&W>e( z92VNbB(^Y8)+U(vZP^1^Eth5{w}`zNV&fZt^Do{E-=wGo%!4ewL-RG2hcB<;{UXeO zQAgoYBez3?(Sn$bR0B!b#hBYQcYq`%__tNe!9(MJSe?OxXvcZJopZ#f!P5!dfK?+gbVsKi2uyC>uW#*9t`_ba6QKnz37 z0)5p0mJB0A5>m-m5-uJmHN;tXix=FV&~^R}2xyfkp75B9in1s#>1Ism1JtkZOX{cq z0ty5W0>)5E6Q&}E`%ET)3zZm@)Y4r=xV0A%3}1-1{LCZ5Hj7bW#ms*)=W`YPEdKxp z-oFs~6PfpwcXXb9oI+GfB7Fg0NM0a0qAQKWoJ92jwgPcb8>ljdU5TwhnyQ?`P@G3M z7K}tpCf?uQ^y3pQBNKAks*6~QbI~q1H8NlCE;mx#wTg5BzTn&Vf$J8QUjfT2hxK2FM0E(#+s^It=?BY#07A?#QwenD<8x+U*U-Jx z4BugId31ef=coX>hzdVr*bb!(P*Lc|Uu+zAI9_FCgipgB&*ak^9Zu!wjt^&!rKD|# zsO|p%2s9Ub6ZU*XxoG(#vm_cNk#TboZ)ygjc2nq^ATP_!(>jdz>jjP zNK&QuPUV_br(mCni*rYz{o)dz4RZp(E*80|YFK%cxy56`zKwGR{M@l>Ez9N^Vp}q+ z#0|4hK!!6Fz})=5!}?F$jOP4Z;acSj_M9&a#{kgN$8HEE@0>4NRJDfwE-I}=q0+>< zxCQsr3l6kfuXcZO07VprADHNMoD?MUE)v*%FLkKTYRo012GvXxY<^h z-cgh!iaigE?1P=vc!_t zq#C2*8}=#+V=#~e)reKe9DGET?h%cVH_0lZ#e-|2Ezj*bKfql?Xp31V5h)pW#YD0q z9yp1IA4w_2#ZwFBH5VtG>*ay6>=MF-$-!*}YFtEB4o-6#2P|v|VoXD#Rm2)Ti*bC# z#9yAJ;x1y#jb3#Y@fN&A8;I-aEB@wx!S}z!$qm98xzsbMn#33|&RNEJjCTY@%;I%e zm?P_z>)sj7r%W}@X4sfB47!!^Drygyvh^3{FA}qhpRxP?o%Z@$Wz<`kWS4u6If#m50LG_C4>F?q2{aF14K;{K4r!G&!UD>745^SsAV(b*XQA z3xxA1QSaVZ>4bjiv98Dp`9q(f!~nyO5K)di+bSc%UQ>urn2n zZfI5!iR~{VX2ItXU|CA`5_vFZpDaWaA-)V(@*j9nA=m&zjHq>&%(X9?(B8gPsfY0b z!ibRI134S2s9GTo92s4T%NQj)lA7tl3xF-;#zVvelWiC*9qKil$h(`s`U~PWtUSIS zW6bms_1k%CGLOuKSl^@tfO<-jm+1uJ9VJ(P7ZS>qhB;b}{{R;g;xD{)<}ERPA$5Gq zXA^=bpKtIO)ZP6z12GYfvowOpX+gZjbZ1{XdF-&93en^t8fuEg)zJ(=R!dOq9Of2K zaL^i{f?|TbW+Ml3_rzgu+FD#(#unnsm+=_VD;{PEgXsht#r^*Pz$o^JH}5qJZXfCy zob@{Txw!TAhZ4E#>6EN@9FQ=Kd`ua%t6P>Fss$3OBEu}He9Vz_TbEq*04>o}e+HDXXp5|QRI^W12lt(8quWTlIur><@(c!5~E^ch7c)OL4Fj7%EW%JZExy)`_moD|h z>V8k*{U@}*n92;UI+4i2Uy2;XrLfWHDy)gvngx(xRu*#E#8gbBJ0-{{hrA^*g!LGh z23Q?Z-s!2HhzPVf)*wSR*>Me2R|u5!1~%iEbwMpqN()@r9`Vw_48#nG-3{a36gB~y zc7WkFW7ZWh`vXa=s^qIW<;$|yQ zeWsd=g!%(0+OG?$<{vL>j?0?$REE~>^x2B3fi-Oq*aj(unB2uy{jmb8VEyF`5n`p$ zh^2Z=Pta{Lip8mSEDu?FmoPwBAxT(QsnLotD%9ZMm#3dH0o{N$a0yYM;^vq+2WP;6Bw^G0HPfq#JvUe8lUy z%QILqfho`|M`CpxxdgzRp?ri%d~$$U=TIed6~P z{bkfznQkm$ZaV5L*&J{bwt6-D{{V)F>mPZjwagk|;to8_EE<-}mJB^*q)Ui+MGCfw zMaD^W@h&*@kKgIfw6B@XMu~>mej%lrmKxkydCXd44p_YP6cwtm2TBxvpGmWDW0+QA zQ(}5YIgaDJ7aXdih~`oguV$s~vE0A|vE_%8ikStPo;<|Q1<=Kj464gAfvkZ!1h=x) zcM=$)8;_)Y&`YULS(qi{i&0+qpj%bZ1{*y*a6|k3yP2gRH7-@BmoFD8;Zf@5e)`+b zUqosiQ1YI*c5mo7UZu#JD3soqlJ10~1oF8%SYQz>wP4usT(g+t99qW;Oy-w z*#ht8QF)7AV&gGY!?;V;X_e@612LOo=N+YfAqDCkMPx+;ze#7!qcJZ*Zb-OSZN?0V zP1}?dCU)~E3!)Hi6)vvh%A!+=O+v#^y+mtKyOyt^ddwhW;w`wJllXs2%^a>IXEUVk zU{=yV;a_+8jBHoRungq$X@v(=ARrpz2SE0f=z)6AObwX!semv7@ej@d?zJ6#B4fFS zDFSm{`GtzqOn(uvz0W9-{pF7n?)o~Ha|@W2xogzv3JihK&6(cT6fV`?w#QN7`3I7B7>!zQ+&++@_#pjyZ>|!B-B`5KmaJ5G#pBTPg4*x_C{836fv* zmETDl>GFfbqD~t5`v$DU5`a~mA%vNX${f_q#}S7D;Vq?8+)I_=ybNbTi*L-fs-w5e z4%Np~K9$@wE97T;H!Jzk`a^IihG}yZJtbb8$7H;>#0&I+IU>H$ZZ630mw$)!$x^NK zo(WrsJVy?*Jrf1<5d23CL_%l_1JYKSGl@&NRG7ZfoJ1g2$P4~qmW!x>s>Y@qM})0z zZ52h-Tt5-}&YSg$^kyhjW^Nt&{{W1`aO0_UF@9L-yhjX2i1?0XjOX;Ff|mt07v^9< zfz6q$@tO>D!Nj<+h0eZ()M2E0%(3#!Qz(wvi!t$G0W|}g_P@tMyf$`0&zR>L`i^15 z8kg77>1F0`m@MR%xIIq#dWL-5u#V;DQuRG!nR>m=V+=6kxq0o2j}S`Ked6=D*{~eH zXaouj0s4<5nZ{ywE1b+5CEW24_a){o8Ha$nnUkW7z);!k7L;PJk%F+K6ZdG z62=3VinS^i3P^|-pJ{eI`GH77Roo0lk!2smr*}80sKiHuiD41KO~)x*&70)^0HQFt zPfOli_t8%!utC8N{hwkn z(~7#dbS+_QUPLir2GbY$h+{Eym6eN%y=KynPf2C_YFT*vLA8P35gO(`CgDq~he%V* z2g&$s`$w^Pi@eKYxahjSF-JDV zjBzr)?mjgr4BNVkL{3Q648Wj)ME2BmX8c!tpo)%Y4Zx4veYYo z=_uWPDTqgkmlw~_U!jLd?8Y#kD7cr2kc*ZBvgP3QoXHver};%D9J@vlDK1#MW8p6hub{Mr;4_JT; zZ4<*z_+MyuFB&3Q1er}F9NOX&-3S3y2|O-3wT$7ohOR({;`vp_v}*V`fI3+)MHgf> zTwDlZ9}@ahA$-T1)W3-AsD0`R5VIBJ@9_Sljbb(H6A{gE5Z;)Y)M9#09w#xd+o^)i zDqGBTH_yDjkq26ZhVE-V#m4U}$~ni-`oz%_rN+cMjKw?7d0&6fU(sTWW!n|Sxbo%= zthui1BCu2mYKv0X;0b~%H$G8@k>m6`W;x<8?GYTK3@}hVDEW@27x&C0a^U{}Ihf~! z*(_IHw9FDGvUSw{+%s$)%~a%a4;xSpXu<){3#{{WVs@zef#f6q_&>Hh#70WufO=s)A9 z{B-{SmY?#|{#s)FwEqB>pYqfGT7Sz=_-X$D0YBg;{KWqNfSOQxAFidoE+Fm(;)_vZ z%y;4;=HgUUnM=eM%mv+x1(m&f>RVo#sKl{nG+d!nwDYa8RSpQYOJ+w=Rpwf|fh`*& z)Zje0B1B1e3&Z&jYKXfdDLh~0aooZqzz;8L%H^FfE+n(5<512Ck6BX(i1W+^H4Gtc zp!>{Ubh9#^kX>Tdsd>a)MWPLzO|U8` zKGNPG^#*@S!~X!vUStaqa-l(}x9R3t7UO8rS=hv)-Y$p(V2?JzT7%$BR2y7CUf9&y zww3^^ZY%Y(MpL+sF=cLub zl-P3pA9smPD&g(6e4BZMSj4^`#4yED@t8FY?iKS8D^(3{11PSURT>8|bu!+YnsGKf zuvPw{eC|+|A;E<@B4m~7!0|DQmm*OqzG98BJckE%o(ur$sxi;;gyIH})2Q?LPnwyA z?3$ByIDkX%0V#(!+AZ46cZR1h4_rzH$!ocgQ!?+)CGW^U=KM;mOcBPVF7p*)Rl#|K zY*7A^`0iZ(r-$^187l}=Pynjn2+dJ5kP@myX~HM|&`ePRmQf2WC|TU?WbCPR435M9 z0L047#E7Xj9a+P(>72@)aIBkxtl{6)+}t2Vs=5Q1gb=W*>7XX5PHAiZ02V4tZVz6yKz7aocvtIX`#|pl0Cb77{1h_$u3*vgM&&7sGx)T66m#MK0KhT;TDl_9 zsN4c<03}_}@95)16X7-h60Ybx{d9gPwu5Y^HB&xvr70-{u`rkP^$Skei!!!5VXyxH z3Do*+ajM31ACQEh_^EBX*ON?at@K|$md=2F~GjRR^|`OcJUC<`~LKRB3Tkn)GD@xn)pP!CRTx(cEF8g2(Ii?&bynP6Mk3`}wIBcsO2z6~ z3A@JYhTP5qS3#gx z0?Rg+YzqVdDTSJ=#IdzhS_FXW6hUsVR)Wwg#7nC5h#O!U>gg9#t&24PSTurOL-j;n zwBAd|MAophLR*;$*898X81YfzEuBGbED(Sw91f)fG+MJMO$%Do9yNO02sLm6ms7Sa zZ-w46m<5N|bV9I6U5-lJMyw6A(s4A>fu^-8xaT&DK((MYs1SfIjyMqkAdC%(e?iub za{8;KbhANf7N@3{N><=X@$~+?r~d#Pgekre-l>p;(S|OB(WBT_F=$a|)+02q5SGFN zM+mrK+<+!a(r9uyIU($!CoMn#ZDpaw&404xwkW+L?7Lnamw--={hQjz* z0h2Y1ez_w^U743$F&0KzyPIz3LvSId<`;P-fW&e_jjT(UxMbK*E@c4IXw`CY!dx4n@Pl0?H1vG^Ge*LgE9kG_t8*X!K2?XCYln&>bN| zvZM;s6~u9nB;^W^u;e+<>rWM6MA3*4X%VXWX(5BMmF2)4uDwyhfRTnVvKIhB%Ce2` zm4y^icb3aHaHBz0eMXABaQ!Jo?_w2trGf^`wqTV5;jJtHP%crz*&rK0s$D7HMt~@Y z*a0h;R*;Wp65!-%#(qM2#nCMGdTgYEi%l4o48$ImU9DB^_ZSm{cYu0r3*U?q(xaE> z3ud*d=f$Q|R4kV9he(P=1EY;Jh8!8rdVi>D~G1-ZE}|@nP?TXbzv_ct5)y;b`zVHiU6e` z88)z|*??OWGm`G|0+@_iT573YF&{BjLq8BZ0iy*`gXnf?F(Em~qJ?3ogry(0;-DyT zbXZjpQ5*@9!B=g(&+EEjp_XiGU=@*BwV$S&4ZC`+PrM*j2(YLqpleDObmL->n!q1o z+ZHr&O-~Sqqe*E(q{;9gxPgJ7?97Bs(V#fn1zOULe6xu#F0nwdyJ`C(0>q_uOCu-Y zRafpAWt+Ufa`bp^R9dnoR>~K>h*j#A2pcllf<8!1f*?RztJ=S=rQrpNLXR^BYB~6g zGqNSrb1&@#xUHH@<%nz666yo=@wPuO{qY+SmB6*o+$Kh_S5Ptx1&~1tDwF~Eg^%cb zB;oJ~E&l+xrMYH~R%1!557Bq!&s7tmSBMoTAX^(aW=3u^iQm%fxrA)p!FYl3I${my zFx+5s5}d-#$610K+%DFkshG0avI@OLPHqiqtdzzPpLn!EhlzIHpb`a6q2+L!4iYIC zRJsIw8a&i)L8}1m>z)%*5KQ@GwB zabTSkXcV;21p*X>c?RVG?Q)ibd4aBJB2#dcTLD;Ea)ZR>oyy0N=jdRZKBAFFfhi6s z8Wj&h>!B%afpAK?x?1i}yl&Nv05G!CEO>O3$OM4l3gAP;(jl)h_zi8@a!QE@-U1^V z019tFe!K5~Q5F$e9fFazJxvAG#MRIds<9W_hO&%@rC}*n7db`G)>628en%uYFJ*-^HT;P0-}@&MoUMT>18z`d! zw)PDNB9pfU08wH_-2`fsWNyYfA^-wv5qE(~{bRxREsax16}u2YCW>(7pQSb5IDBy} zfw`b^@GK><1sc~%c%&QyO@oE8mYaO@I_Q|gYP`QyAb)EG6ftT7kRa61u99F3*+?8R zQLvieneG?UP{jj+g;1qGL#Q9wBbngAq7aBJT?6A876Q#p+O?KUY>r~AKmjX@*1~5Q& z*eJB8D-h!fPF)^PMB;^6mHr^*)-u{Cr!-gsu9ow~zVh^4@e>s@$>9X=O+v~*{d%21 z>UfwDSO`SoG{g<#GL9wF87e)byS%|y)ly)5#nn}qL1PXCCjp};pC~-4;!~pLwIe|9Dzw%R-9*EBV0WFB^ zj1s_EcCGmukK2`PdWIi(Y%B`J=Id-5P?>2_s>CYT^Lj%tFIE=Q=mGN(7vq%C0O3Ku zv{Nn`gOWKRXP6~s9n6F?<~{ux=5_x7rT+l&*>(L(m!k!DnKWejST6tv{{YQ8fR(*K zRG|GBiz$9cBXamaw)@9@Jv12m#51}dHF)iD((j&=b>PwI7lxM-v=wbaq@g@Nk($x< zvdq=;(0>xHloyoSO{)hC5aUvs!!k0FbE&>%`^<`|StU$XW4vS_`lD%S=?6QwC`lflzE1}OQbYeUzy5F$@>0H5>X4wta1?q=6aVRxb+^p(f zh>i&BGh{H8UXUJViIFU+{jV?nQ%Dx39A;#4^o3C_S~AAXRl`R_zSt5{ZZJ?^0zLF)F6ljYGrylID+aJ^F0hQ%T}Nr#f-xy z;e@r^9H$Yx;x>qkB8lc~sYY+;Z*Z-}iC-}l;yB_}!>JQ7YAf8}j2FZXBV;qg%LKmm z#F>rpEOQLLT71i)0s7({=J27wrw~w^{F6Wg)TJQ3M6d(1C>3t5U@Q(L#}1%|E%7S{ z(3JwcBZy+jS(txT-=(cWBd+nt7J?U_{{S`54!&uP2Ewv){{ZH3oDurk79bl|kN*H~ z+kq%zQ@FgvuGU+{N}}Ad?7$4YZqhM8C}euPz@eJKP^et4DBM97;mkIt10Ev)o+HRg z?hbo`6>YGfjxtYJg}78HH84-86{)#ivX85{WuDM0iJd}Z%ShCgGU{0~5#ki}fM$~@ zcN6AgnT}&_V@<~l1+HSgA)9!ESgbezycfh;x+rYylx}Mf?$A`e+9wlltnM04Ap6Xu zM-*lZ7}8|a)JrEwX`j~e{Uz$h+H1^)o>LnUGiUjuisYK6uC zZ<+=%!E~!uvdBk!DstNiMz|aare)Z?Ee7pj4IgZ4k-cB zRRBQ&oscbUXc#Xjz%)3(s*!-s(LqxQ6=4Evw>w?{MZ+Unw3gG!GTK1BQEtwsEh;%> zoxk# z7)T=(aiSS^%lmj9V~O60f-;3o7dc$ZK zl>!UmTlhlTGXmumsQ79s<<~g+W-4aR<({(noMgF@%AQOK%uDSW4hdM);u&U9Pf1FO z>ew$*z2(;s8I(71SDAKSRWp$1YB*xV>KUBBZIw>yl7hCn%wb0~bt*T8n3UTXh4qsX z;{h|lH^CD!vAL)=Lkxe>+w_lX851|b_Lt}Kw6TFT_rJTtBDr?WNbkJ*lvSSjVQc*6{11LPyYZ393i>TY_?cbSfoJ* z_%MF+dstc&3Im3i0a*MoM7eX@@dawJR)5GSI+_2Ch>=MzDDUL_Z8&+AnN~JkUwKYctRDKDjTUayj20FmU*d#Y6NRlKKuSO||w%n?z0@tf0 ztHVSXKeU045NvxO#p_mZK%kxZHom|t1we;CD8I!_ZbcZjuE06 z*(vTFpa^9>)GsMkK!J4zoW`wG&YP4U5yHrkmp7@VWs2ewpegh|kR=(5q4POh%B_6` za;jZ<^p>!uC-ju}Dxzb|x2QBS%LO$OKSU6_L)HwI5O_>Xg~QS0ngjw$l`)(R!vdBH zO5A8?stCIL*%M{3aW2j!X^H0NnU^skxaxmP%k+;4etX#hgnT5)<56j|b+wqlqje=3!Z zewDNcZUSI66V-l*4JqMq%22dWEykVry#g!AZNi#Lx~T!A0-YAl0Juy!&RPJrfLi7M z0Pt^okSLv;s~1+q+5=NyX?0a$XrL{ii<{&;f~^7so2#r#A$UM-R;?RUs;a8Nny{9L zEsCo+0$~h#dAwGoATJwZ<~N!!XeU&6y+Qu~Z4|Cj738X^L@wykty1m?kkT`E4!AU@ zAYcFjisJ1a?2D;+=P|UvkN*G&2q2CT=4A&EMuwuMDl5qr0S17JU|t71Sya`6J|LaE z?~Y*ez=>Vu8!Jq!l%x{R9PNzY3?>x31bHB|+A6jqS+{*+Jwuf&1X4$P(Wyx^;2RIu zQ^@E+Z>dZDM(*HWCTp%dAgF%xXK0Us2dPh(3zMcEjSP zw^4mgV%?WGh&i!C&qQ`|3u{CNm^qiLs5h0)XZH{cW(CT*KuhWpy&1Vr5nMs8C0h)7 zPhw#k@rYBz%W{HHV8N~+r=}T1@TjhF*fPga9ZP9!97U*FUNIZHk8H*IEw3_%)+I4j zK_yvS#jlfEIp_Q4E$RTaD(tbi^iN%GRG@r_;ZvncIPP>9nG6?1x?tUEQ(Q&rVVjqA znMtNMKegrm0Loru)3=as31?YZA|r2ijkqOkh#`LKC@HQmLpmKGpzbA)FGgi-6`?aC}OxCEtmb1YdXx z>Qg-t68V+x1Y(hW<_DRhFeQAWn)}XR-Rl^d`h=4+Hx}25A=tc zET_z%N5m&6HOv-(8^fkh%TRjmVQ*5B;mart+T|Y*b(rbyIe=5YqVI|QW@pd-&;J16 K-*lqjT literal 0 HcmV?d00001 diff --git a/docs/versioned_docs/version-2.20/_media/recovery-gcp-serial-console-link.png b/docs/versioned_docs/version-2.20/_media/recovery-gcp-serial-console-link.png new file mode 100644 index 0000000000000000000000000000000000000000..eb67f0e99985804d9f258a4bc74d42dfabf0d4a0 GIT binary patch literal 46134 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 fzhzeZch178eTiYWYbMif0YhC`N2%(mP2~Rqh literal 0 HcmV?d00001 diff --git a/docs/versioned_docs/version-2.20/_media/tcb.svg b/docs/versioned_docs/version-2.20/_media/tcb.svg new file mode 100644 index 000000000..e5bcb5b95 --- /dev/null +++ b/docs/versioned_docs/version-2.20/_media/tcb.svg @@ -0,0 +1,535 @@ + + diff --git a/docs/versioned_docs/version-2.20/architecture/attestation.md b/docs/versioned_docs/version-2.20/architecture/attestation.md new file mode 100644 index 000000000..9bd157460 --- /dev/null +++ b/docs/versioned_docs/version-2.20/architecture/attestation.md @@ -0,0 +1,409 @@ +# Attestation + +This page explains Constellation's attestation process and highlights the cornerstones of its trust model. + +## Terms + +The following lists terms and concepts that help to understand the attestation concept of Constellation. + +### Trusted Platform Module (TPM) + +A TPM chip is a dedicated tamper-resistant crypto-processor. +It can securely store artifacts such as passwords, certificates, encryption keys, or *runtime measurements* (more on this below). +When a TPM is implemented in software, it's typically called a *virtual* TPM (vTPM). + +### Runtime measurement + +A runtime measurement is a cryptographic hash of the memory pages of a so called *runtime component*. Runtime components of interest typically include a system's bootloader or OS kernel. + +### Platform Configuration Register (PCR) + +A Platform Configuration Register (PCR) is a memory location in the TPM that has some unique properties. +To store a new value in a PCR, the existing value is extended with a new value as follows: + +``` +PCR[N] = HASHalg( PCR[N] || ArgumentOfExtend ) +``` + +The PCRs are typically used to store runtime measurements. +The new value of a PCR is always an extension of the existing value. +Thus, storing the measurements of multiple components into the same PCR irreversibly links them together. + +### Measured boot + +Measured boot builds on the concept of chained runtime measurements. +Each component in the boot chain loads and measures the next component into the PCR before executing it. +By comparing the resulting PCR values against trusted reference values, the integrity of the entire boot chain and thereby the running system can be ensured. + +### Remote attestation (RA) + +Remote attestation is the process of verifying certain properties of an application or platform, such as integrity and confidentiality, from a remote location. +In the case of a measured boot, the goal is to obtain a signed attestation statement on the PCR values of the boot measurements. +The statement can then be verified and compared to a set of trusted reference values. +This way, the integrity of the platform can be ensured before sharing secrets with it. + +### Confidential virtual machine (CVM) + +Confidential computing (CC) is the protection of data in-use with hardware-based trusted execution environments (TEEs). +With CVMs, TEEs encapsulate entire virtual machines and isolate them against the hypervisor, other VMs, and direct memory access. +After loading the initial VM image into encrypted memory, the hypervisor calls for a secure processor to measure these initial memory pages. +The secure processor locks these pages and generates an attestation report on the initial page measurements. +CVM memory pages are encrypted with a key that resides inside the secure processor, which makes sure only the guest VM can access them. +The attestation report is signed by the secure processor and can be verified using remote attestation via the certificate authority of the hardware vendor. +Such an attestation statement guarantees the confidentiality and integrity of a CVM. + +### Attested TLS (aTLS) + +In a CC environment, attested TLS (aTLS) can be used to establish secure connections between two parties using the remote attestation features of the CC components. + +aTLS modifies the TLS handshake by embedding an attestation statement into the TLS certificate. +Instead of relying on a certificate authority, aTLS uses this attestation statement to establish trust in the certificate. + +The protocol can be used by clients to verify a server certificate, by a server to verify a client certificate, or for mutual verification (mutual aTLS). + +## Overview + +The challenge for Constellation is to lift a CVM's attestation statement to the Kubernetes software layer and make it end-to-end verifiable. +From there, Constellation needs to expand the attestation from a single CVM to the entire cluster. + +The [*JoinService*](microservices.md#joinservice) and [*VerificationService*](microservices.md#verificationservice) are where all runs together. +Internally, the *JoinService* uses remote attestation to securely join CVM nodes to the cluster. +Externally, the *VerificationService* provides an attestation statement for the cluster's CVMs and configuration. + +The following explains the details of both steps. + +## Node attestation + +The idea is that Constellation nodes should have verifiable integrity from the CVM hardware measurement up to the Kubernetes software layer. +The solution is a verifiable boot chain and an integrity-protected runtime environment. + +Constellation uses measured boot within CVMs, measuring each component in the boot process before executing it. +Outside of CC, this is usually implemented via TPMs. +CVM technologies differ in how they implement runtime measurements, but the general concepts are similar to those of a TPM. +For simplicity, TPM terminology like *PCR* is used in the following. + +When a Constellation node image boots inside a CVM, measured boot is used for all stages and components of the boot chain. +This process goes up to the root filesystem. +The root filesystem is mounted read-only with integrity protection. +For the details on the image and boot stages see the [image architecture](../architecture/images.md) documentation. +Any changes to the image will inevitably also change the corresponding PCR values. +To create a node attestation statement, the Constellation image obtains a CVM attestation statement from the hardware. +This includes the runtime measurements and thereby binds the measured boot results to the CVM hardware measurement. + +In addition to the image measurements, Constellation extends a PCR during the [initialization phase](../workflows/create.md) that irrevocably marks the node as initialized. +The measurement is created using the [*clusterID*](../architecture/keys.md#cluster-identity), tying all future attestation statements to this ID. +Thereby, an attestation statement is unique for every cluster and a node can be identified unambiguously as being initialized. + +To verify an attestation, the hardware's signature and a statement are verified first to establish trust in the contained runtime measurements. +If successful, the measurements are verified against the trusted values of the particular Constellation release version. +Finally, the measurement of the *clusterID* can be compared by calculating it with the [master secret](keys.md#master-secret). + +### Runtime measurements + +Constellation uses runtime measurements to implement the measured boot approach. +As stated above, the underlying hardware technology and guest firmware differ in their implementations of runtime measurements. +The following gives a detailed description of the available measurements in the different cloud environments. + +The runtime measurements consist of two types of values: + +* **Measurements produced by the cloud infrastructure and firmware of the CVM**: +These are measurements of closed-source firmware and other values controlled by the cloud provider. +While not being reproducible for the user, some of them can be compared against previously observed values. +Others may change frequently and aren't suitable for verification. +The [signed image measurements](#chain-of-trust) include measurements that are known, previously observed values. + +* **Measurements produced by the Constellation bootloader and boot chain**: +The Constellation Bootloader takes over from the CVM firmware and [measures the rest of the boot chain](images.md). +The Constellation [Bootstrapper](microservices.md#bootstrapper) is the first user mode component that runs in a Constellation image. +It extends PCR registers with the [IDs](keys.md#cluster-identity) of the cluster marking a node as initialized. + +Constellation allows to specify in the config which measurements should be enforced during the attestation process. +Enforcing non-reproducible measurements controlled by the cloud provider means that changes in these values require manual updates to the cluster's config. +By default, Constellation only enforces measurements that are stable values produced by the infrastructure or by Constellation directly. + + + + +Constellation uses the [vTPM](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/nitrotpm.html) (NitroTPM) feature of the [AWS Nitro System](http://aws.amazon.com/ec2/nitro/) on AWS for runtime measurements. + +The vTPM adheres to the [TPM 2.0](https://trustedcomputinggroup.org/resource/tpm-library-specification/) specification. +The VMs are attested by obtaining signed PCR values over the VM's boot configuration from the TPM and comparing them to a known, good state (measured boot). + +The following table lists all PCR values of the vTPM and the measured components. +It also lists what components of the boot chain did the measurements and if the value is reproducible and verifiable. +The latter means that the value can be generated offline and compared to the one in the vTPM. + +| PCR | Components | Measured by | Reproducible and verifiable | +| ----------- | ---------------------------------------------------------------- | -------------------------------------- | --------------------------- | +| 0 | Firmware | AWS | No | +| 1 | Firmware | AWS | No | +| 2 | Firmware | AWS | No | +| 3 | Firmware | AWS | No | +| 4 | Constellation Bootloader, Kernel, initramfs, Kernel command line | AWS, Constellation Bootloader | Yes | +| 5 | Firmware | AWS | No | +| 6 | Firmware | AWS | No | +| 7 | Secure Boot Policy | AWS, Constellation Bootloader | No | +| 8 | - | - | - | +| 9 | initramfs, Kernel command line | Linux Kernel | Yes | +| 10 | User space | Linux IMA | No[^1] | +| 11 | Unified Kernel Image components | Constellation Bootloader | Yes | +| 12 | Reserved | (User space, Constellation Bootloader) | Yes | +| 13 | Reserved | (Constellation Bootloader) | Yes | +| 14 | Secure Boot State | Constellation Bootloader | No | +| 15 | ClusterID | Constellation Bootstrapper | Yes | +| 16–23 | Unused | - | - | + + + + +Constellation uses the [vTPM](https://docs.microsoft.com/en-us/azure/virtual-machines/trusted-launch#vtpm) feature of Azure CVMs for runtime measurements. +This vTPM adheres to the [TPM 2.0](https://trustedcomputinggroup.org/resource/tpm-library-specification/) specification. +It provides a [measured boot](https://docs.microsoft.com/en-us/azure/security/fundamentals/measured-boot-host-attestation#measured-boot) verification that's based on the trusted launch feature of [Trusted Launch VMs](https://docs.microsoft.com/en-us/azure/virtual-machines/trusted-launch). + +The following table lists all PCR values of the vTPM and the measured components. +It also lists what components of the boot chain did the measurements and if the value is reproducible and verifiable. +The latter means that the value can be generated offline and compared to the one in the vTPM. + +| PCR | Components | Measured by | Reproducible and verifiable | +| ----------- | ---------------------------------------------------------------- | -------------------------------------- | --------------------------- | +| 0 | Firmware | Azure | No | +| 1 | Firmware | Azure | No | +| 2 | Firmware | Azure | No | +| 3 | Firmware | Azure | No | +| 4 | Constellation Bootloader, Kernel, initramfs, Kernel command line | Azure, Constellation Bootloader | Yes | +| 5 | Reserved | Azure | No | +| 6 | VM Unique ID | Azure | No | +| 7 | Secure Boot State | Azure, Constellation Bootloader | No | +| 8 | - | - | - | +| 9 | initramfs, Kernel command line | Linux Kernel | Yes | +| 10 | User space | Linux IMA | No[^1] | +| 11 | Unified Kernel Image components | Constellation Bootloader | Yes | +| 12 | Reserved | (User space, Constellation Bootloader) | Yes | +| 13 | Reserved | (Constellation Bootloader) | Yes | +| 14 | Secure Boot State | Constellation Bootloader | No | +| 15 | ClusterID | Constellation Bootstrapper | Yes | +| 16–23 | Unused | - | - | + + + + +Constellation uses the [vTPM](https://cloud.google.com/compute/confidential-vm/docs/about-cvm) feature of CVMs on GCP for runtime measurements. +Note that this vTPM doesn't run inside the hardware-protected CVM context, but is emulated by the hypervisor. + +The vTPM adheres to the [TPM 2.0](https://trustedcomputinggroup.org/resource/tpm-library-specification/) specification. +It provides a [launch attestation report](https://cloud.google.com/compute/confidential-vm/docs/monitoring#about_launch_attestation_report_events) that's based on the measured boot feature of [Shielded VMs](https://cloud.google.com/compute/shielded-vm/docs/shielded-vm#measured-boot). + +The following table lists all PCR values of the vTPM and the measured components. +It also lists what components of the boot chain did the measurements and if the value is reproducible and verifiable. +The latter means that the value can be generated offline and compared to the one in the vTPM. + +| PCR | Components | Measured by | Reproducible and verifiable | +| ----------- | ---------------------------------------------------------------- | -------------------------------------- | --------------------------- | +| 0 | CVM version and technology | GCP | No | +| 1 | Firmware | GCP | No | +| 2 | Firmware | GCP | No | +| 3 | Firmware | GCP | No | +| 4 | Constellation Bootloader, Kernel, initramfs, Kernel command line | GCP, Constellation Bootloader | Yes | +| 5 | Disk GUID partition table | GCP | No | +| 6 | Disk GUID partition table | GCP | No | +| 7 | GCP Secure Boot Policy | GCP, Constellation Bootloader | No | +| 8 | - | - | - | +| 9 | initramfs, Kernel command line | Linux Kernel | Yes | +| 10 | User space | Linux IMA | No[^1] | +| 11 | Unified Kernel Image components | Constellation Bootloader | Yes | +| 12 | Reserved | (User space, Constellation Bootloader) | Yes | +| 13 | Reserved | (Constellation Bootloader) | Yes | +| 14 | Secure Boot State | Constellation Bootloader | No | +| 15 | ClusterID | Constellation Bootstrapper | Yes | +| 16–23 | Unused | - | - | + + + + +Constellation uses a hypervisor-based vTPM for runtime measurements. + +The vTPM adheres to the [TPM 2.0](https://trustedcomputinggroup.org/resource/tpm-library-specification/) specification. +The VMs are attested by obtaining signed PCR values over the VM's boot configuration from the TPM and comparing them to a known, good state (measured boot). + +The following table lists all PCR values of the vTPM and the measured components. +It also lists what components of the boot chain did the measurements and if the value is reproducible and verifiable. +The latter means that the value can be generated offline and compared to the one in the vTPM. + +| PCR | Components | Measured by | Reproducible and verifiable | +| ----------- | ---------------------------------------------------------------- | -------------------------------------- | --------------------------- | +| 0 | Firmware | STACKIT | No | +| 1 | Firmware | STACKIT | No | +| 2 | Firmware | STACKIT | No | +| 3 | Firmware | STACKIT | No | +| 4 | Constellation Bootloader, Kernel, initramfs, Kernel command line | STACKIT, Constellation Bootloader | Yes | +| 5 | Firmware | STACKIT | No | +| 6 | Firmware | STACKIT | No | +| 7 | Secure Boot Policy | STACKIT, Constellation Bootloader | No | +| 8 | - | - | - | +| 9 | initramfs, Kernel command line | Linux Kernel | Yes | +| 10 | User space | Linux IMA | No[^1] | +| 11 | Unified Kernel Image components | Constellation Bootloader | Yes | +| 12 | Reserved | (User space, Constellation Bootloader) | Yes | +| 13 | Reserved | (Constellation Bootloader) | Yes | +| 14 | Secure Boot State | Constellation Bootloader | No | +| 15 | ClusterID | Constellation Bootstrapper | Yes | +| 16–23 | Unused | - | - | + + + + +### CVM verification + +To verify the integrity of the received attestation statement, a chain of trust from the CVM technology to the interface providing the statement has to be established. +For verification of the CVM technology, Constellation may expose additional options in its config file. + + + + +On AWS, AMD SEV-SNP is used to provide runtime encryption to the VMs. +An SEV-SNP attestation report is used to establish trust in the VM. +You may customize certain parameters for verification of the attestation statement using the Constellation config file. + +* TCB versions + + You can set the minimum version numbers of components in the SEV-SNP TCB. + Use the latest versions to enforce that only machines with the most recent firmware updates are allowed to join the cluster. + Alternatively, you can set a lower minimum version to allow slightly out-of-date machines to still be able to join the cluster. + +* AMD Root Key Certificate + + This certificate is the root of trust for verifying the SEV-SNP certificate chain. + +* AMD Signing Key Certificate + + This is the intermediate certificate for verifying the SEV-SNP report's signature. + If it's not specified, the CLI fetches it from the AMD key distribution server. + + + + +On Azure, AMD SEV-SNP is used to provide runtime encryption to the VMs. +An SEV-SNP attestation report is used to establish trust in the vTPM running inside the VM. +You may customize certain parameters for verification of the attestation statement using the Constellation config file. + +* TCB versions + + You can set the minimum version numbers of components in the SEV-SNP TCB. + Use the latest versions to enforce that only machines with the most recent firmware updates are allowed to join the cluster. + Alternatively, you can set a lower minimum version to allow slightly out-of-date machines to still be able to join the cluster. + +* AMD Root Key Certificate + + This certificate is the root of trust for verifying the SEV-SNP certificate chain. + +* Firmware Signer + + This config option allows you to specify how the firmware signer should be verified. + More explicitly, it controls the verification of the `IDKeyDigest` value in the SEV-SNP attestation report. + You can provide a list of accepted key digests and specify a policy on how this list is compared against the reported `IDKeyDigest`. + + + + +On GCP, AMD SEV-SNP is used to provide runtime encryption to the VMs. +An SEV-SNP attestation report is used to establish trust in the VM. +You may customize certain parameters for verification of the attestation statement using the Constellation config file. + +* TCB versions + + You can set the minimum version numbers of components in the SEV-SNP TCB. + Use the latest versions to enforce that only machines with the most recent firmware updates are allowed to join the cluster. + Alternatively, you can set a lower minimum version to allow slightly out-of-date machines to still be able to join the cluster. + +* AMD Root Key Certificate + + This certificate is the root of trust for verifying the SEV-SNP certificate chain. + +* AMD Signing Key Certificate + + This is the intermediate certificate for verifying the SEV-SNP report's signature. + If it's not specified, the CLI fetches it from the AMD key distribution server. + + + + +On STACKIT, AMD SEV-ES is used to provide runtime encryption to the VMs. +The hypervisor-based vTPM is used to establish trust in the VM via [runtime measurements](#runtime-measurements). +There is no additional configuration available for STACKIT. + + + + +## Cluster attestation + +Cluster-facing, Constellation's [*JoinService*](microservices.md#joinservice) verifies each node joining the cluster given the configured ground truth runtime measurements. +User-facing, the [*VerificationService*](microservices.md#verificationservice) provides an interface to verify a node using remote attestation. +By verifying the first node during the [initialization](microservices.md#bootstrapper) and configuring the ground truth measurements that are subsequently enforced by the *JoinService*, the whole cluster is verified in a transitive way. + +### Cluster-facing attestation + +The *JoinService* is provided with the runtime measurements of the whitelisted Constellation image version as the ground truth. +During the initialization and the cluster bootstrapping, each node connects to the *JoinService* using [aTLS](#attested-tls-atls). +During the handshake, the node transmits an attestation statement including its runtime measurements. +The *JoinService* verifies that statement and compares the measurements against the ground truth. +For details of the initialization process check the [microservice descriptions](microservices.md). + +After the initialization, every node updates its runtime measurements with the *clusterID* value, marking it irreversibly as initialized. +When an initialized node tries to join another cluster, its measurements inevitably mismatch the measurements of an uninitialized node and it will be declined. + +### User-facing attestation + +The [*VerificationService*](microservices.md#verificationservice) provides an endpoint for obtaining its hardware-based remote attestation statement, which includes the runtime measurements. +A user can [verify](../workflows/verify-cluster.md) this statement and compare the measurements against the configured ground truth and, thus, verify the identity and integrity of all Constellation components and the cluster configuration. Subsequently, the user knows that the entire cluster is in the expected state and is trustworthy. + +## Putting it all together + +This section puts the aforementioned concepts together and illustrate how trust into a Constellation cluster is established and maintained. + +### CLI and node images + +It all starts with the CLI executable. The CLI is signed by Edgeless Systems. To ensure non-repudiability for CLI releases, Edgeless Systems publishes corresponding signatures to the public ledger of the [sigstore project](https://www.sigstore.dev/). There's a [step-by-step guide](../workflows/verify-cli.md) on how to verify CLI signatures based on sigstore. + +The CLI contains the latest runtime measurements of the Constellation node image for all supported cloud platforms. In case a different version of the node image is to be used, the corresponding runtime measurements can be fetched using the CLI's [fetch-measurements command](../reference/cli.md#constellation-config-fetch-measurements). This command downloads the runtime measurements and the corresponding signature from cdn.confidential.cloud. See for example the following files corresponding to node image v2.16.3: + +* [Measurements](https://cdn.confidential.cloud/constellation/v2/ref/-/stream/stable/v2.16.3/image/measurements.json) +* [Signature](https://cdn.confidential.cloud/constellation/v2/ref/-/stream/stable/v2.16.3/image/measurements.json.sig) + +The CLI contains the long-term public key of Edgeless Systems to verify the signature of downloaded runtime measurements. + +### Cluster creation + +When a cluster is [created](../workflows/create.md), the CLI automatically verifies the runtime measurements of the *first node* using remote attestation. Based on this, the CLI and the first node set up a temporary TLS connection. This [aTLS](#attested-tls-atls) connection is used for two things: + +1. The CLI sends the [master secret](../architecture/keys.md#master-secret) of the to-be-created cluster to the CLI. The master secret is generated by the first node. +2. The first node sends a [kubeconfig file](https://www.redhat.com/sysadmin/kubeconfig) with Kubernetes credentials to the CLI. + +After this, the aTLS connection is closed and the first node bootstraps the Kubernetes cluster. All subsequent interactions between the CLI and the cluster go via the [Kubernetes API](https://kubernetes.io/docs/concepts/overview/kubernetes-api/) server running inside the cluster. The CLI (and other tools like kubectl) use the credentials referenced by the kubeconfig file to authenticate themselves towards the Kubernetes API server and to establish a mTLS connection. + +The CLI connects to the Kubernetes API to write the runtime measurements for the applicable node image to etcd. The JoinService uses these runtime measurements to verify all nodes that join the cluster subsequently. + +### Chain of trust + +In summary, there's a chain of trust based on cryptographic signatures that goes from the user to the cluster via the CLI. This is illustrated in the following diagram. + +```mermaid +flowchart LR + A[User]-- "verifies" -->B[CLI] + B[CLI]-- "verifies" -->C([Runtime measurements]) + D[Edgeless Systems]-- "signs" -->B[CLI] + D[Edgeless Systems]-- "signs" -->C([Runtime measurements]) + B[CLI]-- "verifies (remote attestation)" -->E[First node] + E[First node]-- "verifies (remote attestation)" -->F[Other nodes] + C([Runtime measurements]) -.-> E[First node] + C([Runtime measurements]) -.-> F[Other nodes] +``` + +### Upgrades + +Whenever a cluster is [upgraded](../workflows/upgrade.md) to a new version of the node image, the CLI sends the corresponding runtime measurements via the Kubernetes API server. The new runtime measurements are stored in etcd within the cluster and replace any previous runtime measurements. The new runtime measurements are then used automatically by the JoinService for the verification of new nodes. + +## References + +[^1]: Linux IMA produces runtime measurements of user-space binaries. +However, these measurements aren't deterministic and thus, PCR\[10] can't be compared to a constant value. +Instead, a policy engine must be used to verify the TPM event log against a policy. diff --git a/docs/versioned_docs/version-2.20/architecture/encrypted-storage.md b/docs/versioned_docs/version-2.20/architecture/encrypted-storage.md new file mode 100644 index 000000000..f047fa4a9 --- /dev/null +++ b/docs/versioned_docs/version-2.20/architecture/encrypted-storage.md @@ -0,0 +1,62 @@ +# Encrypted persistent storage + +Confidential VMs provide runtime memory encryption to protect data in use. +In the context of Kubernetes, this is sufficient for the confidentiality and integrity of stateless services. +Consider a front-end web server, for example, that keeps all connection information cached in main memory. +No sensitive data is ever written to an insecure medium. +However, many real-world applications need some form of state or data-lake service that's connected to a persistent storage device and requires encryption at rest. +As described in [Use persistent storage](../workflows/storage.md), cloud service providers (CSPs) use the container storage interface (CSI) to make their storage solutions available to Kubernetes workloads. +These CSI storage solutions often support some sort of encryption. +For example, Google Cloud [encrypts data at rest by default](https://cloud.google.com/security/encryption/default-encryption), without any action required by the customer. + +## Cloud provider-managed encryption + +CSP-managed storage solutions encrypt the data in the cloud backend before writing it physically to disk. +In the context of confidential computing and Constellation, the CSP and its managed services aren't trusted. +Hence, cloud provider-managed encryption protects your data from offline hardware access to physical storage devices. +It doesn't protect it from anyone with infrastructure-level access to the storage backend or a malicious insider in the cloud platform. +Even with "bring your own key" or similar concepts, the CSP performs the encryption process with access to the keys and plaintext data. + +In the security model of Constellation, securing persistent storage and thereby data at rest requires that all cryptographic operations are performed inside a trusted execution environment. +Consequently, using CSP-managed encryption of persistent storage usually isn't an option. + +## Constellation-managed encryption + +Constellation provides CSI drivers for storage solutions in all major clouds with built-in encryption support. +Block storage provisioned by the CSP is [mapped](https://guix.gnu.org/manual/en/html_node/Mapped-Devices.html) using the [dm-crypt](https://www.kernel.org/doc/html/latest/admin-guide/device-mapper/dm-crypt.html), and optionally the [dm-integrity](https://www.kernel.org/doc/html/latest/admin-guide/device-mapper/dm-integrity.html), kernel modules, before it's formatted and accessed by the Kubernetes workloads. +All cryptographic operations happen inside the trusted environment of the confidential Constellation node. + +Note that for integrity-protected disks, [volume expansion](https://kubernetes.io/blog/2018/07/12/resizing-persistent-volumes-using-kubernetes/) isn't supported. + +By default the driver uses data encryption keys (DEKs) issued by the Constellation [*KeyService*](microservices.md#keyservice). +The DEKs are in turn derived from the Constellation's key encryption key (KEK), which is directly derived from the [master secret](keys.md#master-secret). +This is the recommended mode of operation, and also requires the least amount of setup by the cluster administrator. + +Alternatively, the driver can be configured to use a key management system to store and access KEKs and DEKs. + +Refer to [keys and cryptography](keys.md) for more details on key management in Constellation. + +Once deployed and configured, the CSI driver ensures transparent encryption and integrity of all persistent volumes provisioned via its storage class. +Data at rest is secured without any additional actions required by the developer. + +## Cryptographic algorithms + +This section gives an overview of the libraries, cryptographic algorithms, and their configurations, used in Constellation's CSI drivers. + +### dm-crypt + +To interact with the dm-crypt kernel module, Constellation uses [libcryptsetup](https://gitlab.com/cryptsetup/cryptsetup/). +New devices are formatted as [LUKS2](https://gitlab.com/cryptsetup/LUKS2-docs/-/tree/master) partitions with a sector size of 4096 bytes. +The used key derivation function is [Argon2id](https://datatracker.ietf.org/doc/html/rfc9106) with the [recommended parameters for memory-constrained environments](https://datatracker.ietf.org/doc/html/rfc9106#section-7.4) of 3 iterations and 64 MiB of memory, utilizing 4 parallel threads. +For encryption Constellation uses AES in XTS-Plain64. The key size is 512 bit. + +### dm-integrity + +To interact with the dm-integrity kernel module, Constellation uses [libcryptsetup](https://gitlab.com/cryptsetup/cryptsetup/). +When enabled, the used data integrity algorithm is [HMAC](https://datatracker.ietf.org/doc/html/rfc2104) with SHA256 as the hash function. +The tag size is 32 Bytes. + +## Encrypted S3 object storage + +Constellation comes with a service that you can use to transparently retrofit client-side encryption to existing applications that use S3 (AWS or compatible) for storage. +To learn more, check out the [s3proxy documentation](../workflows/s3proxy.md). diff --git a/docs/versioned_docs/version-2.20/architecture/images.md b/docs/versioned_docs/version-2.20/architecture/images.md new file mode 100644 index 000000000..8a9c51d36 --- /dev/null +++ b/docs/versioned_docs/version-2.20/architecture/images.md @@ -0,0 +1,49 @@ +# Constellation images + +Constellation uses a minimal version of Fedora as the operating system running inside confidential VMs. This Linux distribution is optimized for containers and designed to be stateless. +The Constellation images provide measured boot and an immutable filesystem. + +## Measured boot + +```mermaid +flowchart LR + Firmware --> Bootloader + Bootloader --> uki + subgraph uki[Unified Kernel Image] + Kernel[Kernel] + initramfs[Initramfs] + cmdline[Kernel Command Line] + end + uki --> rootfs[Root Filesystem] +``` + +Measured boot uses a Trusted Platform Module (TPM) to measure every part of the boot process. This allows for verification of the integrity of a running system at any point in time. To ensure correct measurements of every stage, each stage is responsible to measure the next stage before transitioning. + +### Firmware + +With confidential VMs, the firmware is the root of trust and is measured automatically at boot. After initialization, the firmware will load and measure the bootloader before executing it. + +### Bootloader + +The bootloader is the first modifiable part of the boot chain. The bootloader is tasked with loading the kernel, initramfs and setting the kernel command line. The Constellation bootloader measures these components before starting the kernel. + +### initramfs + +The initramfs is a small filesystem loaded to prepare the actual root filesystem. The Constellation initramfs maps the block device containing the root filesystem with [dm-verity](https://www.kernel.org/doc/html/latest/admin-guide/device-mapper/verity.html). The initramfs then mounts the root filesystem from the mapped block device. + +dm-verity provides integrity checking using a cryptographic hash tree. When a block is read, its integrity is checked by verifying the tree against a trusted root hash. The initramfs reads this root hash from the previously measured kernel command line. Thus, if any block of the root filesystem's device is modified on disk, trying to read the modified block will result in a kernel panic at runtime. + +After mounting the root filesystem, the initramfs will switch over and start the `init` process of the integrity-protected root filesystem. + +## State disk + +In addition to the read-only root filesystem, each Constellation node has a disk for storing state data. +This disk is mounted readable and writable by the initramfs and contains data that should persist across reboots. +Such data can contain sensitive information and, therefore, must be stored securely. +To that end, the state disk is protected by authenticated encryption. +See the section on [keys and encryption](keys.md#storage-encryption) for more information on the cryptographic primitives in use. + +## Kubernetes components + +During initialization, the [*Bootstrapper*](microservices.md#bootstrapper) downloads and verifies the [Kubernetes components](https://kubernetes.io/docs/concepts/overview/components/) as configured by the user. +They're stored on the state partition and can be updated once new releases need to be installed. diff --git a/docs/versioned_docs/version-2.20/architecture/keys.md b/docs/versioned_docs/version-2.20/architecture/keys.md new file mode 100644 index 000000000..49821cd0b --- /dev/null +++ b/docs/versioned_docs/version-2.20/architecture/keys.md @@ -0,0 +1,130 @@ +# Key management and cryptographic primitives + +Constellation protects and isolates your cluster and workloads. +To that end, cryptography is the foundation that ensures the confidentiality and integrity of all components. +Evaluating the security and compliance of Constellation requires a precise understanding of the cryptographic primitives and keys used. +The following gives an overview of the architecture and explains the technical details. + +## Confidential VMs + +Confidential VM (CVM) technology comes with hardware and software components for memory encryption, isolation, and remote attestation. +For details on the implementations and cryptographic soundness, refer to the hardware vendors' documentation and advisories. + +## Master secret + +The master secret is the cryptographic material used for deriving the [*clusterID*](#cluster-identity) and the *key encryption key (KEK)* for [storage encryption](#storage-encryption). +It's generated during the bootstrapping of a Constellation cluster. +It can either be managed by [Constellation](#constellation-managed-key-management) or an [external key management system](#user-managed-key-management). +In case of [recovery](#recovery-and-migration), the master secret allows to decrypt the state and recover a Constellation cluster. + +## Cluster identity + +The identity of a Constellation cluster is represented by cryptographic [measurements](attestation.md#runtime-measurements): + +The **base measurements** represent the identity of a valid, uninitialized Constellation node. +They depend on the node image, but are otherwise the same for every Constellation cluster. +On node boot, they're determined using the CVM's attestation mechanism and [measured boot up to the read-only root filesystem](images.md). + +The **clusterID** represents the identity of a single initialized Constellation cluster. +It's derived from the master secret and a cryptographically random salt and unique for every Constellation cluster. +The [Bootstrapper](microservices.md#bootstrapper) measures the *clusterID* into its own PCR before executing any code not measured as part of the *base measurements*. +See [Node attestation](attestation.md#node-attestation) for details. + +The remote attestation statement of a Constellation cluster combines the *base measurements* and the *clusterID* for a verifiable, unspoofable, unique identity. + +## Network encryption + +Constellation encrypts all cluster network communication using the [container network interface (CNI)](https://github.com/containernetworking/cni). +See [network encryption](networking.md) for more details. + +The Cilium agent running on each node establishes a secure [WireGuard](https://www.wireguard.com/) tunnel between it and all other known nodes in the cluster. +Each node creates its own [Curve25519](http://cr.yp.to/ecdh.html) encryption key pair and distributes its public key via Kubernetes. +A node uses another node's public key to decrypt and encrypt traffic from and to Cilium-managed endpoints running on that node. +Connections are always encrypted peer-to-peer using [ChaCha20](http://cr.yp.to/chacha.html) with [Poly1305](http://cr.yp.to/mac.html). +WireGuard implements [forward secrecy with key rotation every 2 minutes](https://lists.zx2c4.com/pipermail/wireguard/2017-December/002141.html). + +## Storage encryption + +Constellation supports transparent encryption of persistent storage. +The Linux kernel's device mapper-based encryption features are used to encrypt the data on the block storage level. +Currently, the following primitives are used for block storage encryption: + +* [dm-crypt](https://www.kernel.org/doc/html/latest/admin-guide/device-mapper/dm-crypt.html) +* [dm-integrity](https://www.kernel.org/doc/html/latest/admin-guide/device-mapper/dm-integrity.html) + +Adding primitives for integrity protection in the CVM attacker model are under active development and will be available in a future version of Constellation. +See [encrypted storage](encrypted-storage.md) for more details. + +As a cluster administrator, when creating a cluster, you can use the Constellation [installation program](orchestration.md) to select one of the following methods for key management: + +* Constellation-managed key management +* User-managed key management + +### Constellation-managed key management + +#### Key material and key derivation + +During the creation of a Constellation cluster, the cluster's master secret is used to derive a KEK. +This means creating two clusters with the same master secret will yield the same KEK. +Any data encryption key (DEK) is derived from the KEK via HKDF. +Note that the master secret is recommended to be unique for every cluster and shouldn't be reused (except in case of [recovering](../workflows/recovery.md) a cluster). + +#### State and storage + +The KEK is derived from the master secret during the initialization. +Subsequently, all other key material is derived from the KEK. +Given the same KEK, any DEK can be derived deterministically from a given identifier. +Hence, there is no need to store DEKs. They can be derived on demand. +After the KEK was derived, it's stored in memory only and never leaves the CVM context. + +#### Availability + +Constellation-managed key management has the same availability as the underlying Kubernetes cluster. +Therefore, the KEK is stored in the [distributed Kubernetes etcd storage](https://kubernetes.io/docs/tasks/administer-cluster/configure-upgrade-etcd/) to allow for unexpected but non-fatal (control-plane) node failure. +The etcd storage is backed by the encrypted and integrity protected [state disk](images.md#state-disk) of the nodes. + +#### Recovery + +Constellation clusters can be recovered in the event of a disaster, even when all node machines have been stopped and need to be rebooted. +For details on the process see the [recovery workflow](../workflows/recovery.md). + +### User-managed key management + +User-managed key management is under active development and will be available soon. +In scenarios where constellation-managed key management isn't an option, this mode allows you to keep full control of your keys. +For example, compliance requirements may force you to keep your KEKs in an on-prem key management system (KMS). + +During the creation of a Constellation cluster, you specify a KEK present in a remote KMS. +This follows the common scheme of "bring your own key" (BYOK). +Constellation will support several KMSs for managing the storage and access of your KEK. +Initially, it will support the following KMSs: + +* [AWS KMS](https://aws.amazon.com/kms/) +* [GCP KMS](https://cloud.google.com/security-key-management) +* [Azure Key Vault](https://azure.microsoft.com/en-us/services/key-vault/#product-overview) +* [KMIP-compatible KMS](https://www.oasis-open.org/committees/tc_home.php?wg_abbrev=kmip) + +Storing the keys in Cloud KMS of AWS, Azure, or GCP binds the key usage to the particular cloud identity access management (IAM). +In the future, Constellation will support remote attestation-based access policies for Cloud KMS once available. +Note that using a Cloud KMS limits the isolation and protection to the guarantees of the particular offering. + +KMIP support allows you to use your KMIP-compatible on-prem KMS and keep full control over your keys. +This follows the common scheme of "hold your own key" (HYOK). + +The KEK is used to encrypt per-data "data encryption keys" (DEKs). +DEKs are generated to encrypt your data before storing it on persistent storage. +After being encrypted by the KEK, the DEKs are stored on dedicated cloud storage for persistence. +Currently, Constellation supports the following cloud storage options: + +* [AWS S3](https://aws.amazon.com/s3/) +* [GCP Cloud Storage](https://cloud.google.com/storage) +* [Azure Blob Storage](https://azure.microsoft.com/en-us/services/storage/blobs/#overview) + +The DEKs are only present in plaintext form in the encrypted main memory of the CVMs. +Similarly, the cryptographic operations for encrypting data before writing it to persistent storage are performed in the context of the CVMs. + +#### Recovery and migration + +In the case of a disaster, the KEK can be used to decrypt the DEKs locally and subsequently use them to decrypt and retrieve the data. +In case of migration, configuring the same KEK will provide seamless migration of data. +Thus, only the DEK storage needs to be transferred to the new cluster alongside the encrypted data for seamless migration. diff --git a/docs/versioned_docs/version-2.20/architecture/microservices.md b/docs/versioned_docs/version-2.20/architecture/microservices.md new file mode 100644 index 000000000..90bae783b --- /dev/null +++ b/docs/versioned_docs/version-2.20/architecture/microservices.md @@ -0,0 +1,73 @@ +# Microservices + +Constellation takes care of bootstrapping and initializing a Confidential Kubernetes cluster. +During the lifetime of the cluster, it handles day 2 operations such as key management, remote attestation, and updates. +These features are provided by several microservices: + +* The [Bootstrapper](microservices.md#bootstrapper) initializes a Constellation node and bootstraps the cluster +* The [JoinService](microservices.md#joinservice) joins new nodes to an existing cluster +* The [VerificationService](microservices.md#verificationservice) provides remote attestation functionality +* The [KeyService](microservices.md#keyservice) manages Constellation-internal keys + +The relations between microservices are shown in the following diagram: + +```mermaid +flowchart LR + subgraph admin [Admin's machine] + A[Constellation CLI] + end + subgraph img [Constellation OS image] + B[Constellation OS] + C[Bootstrapper] + end + subgraph Kubernetes + D[JoinService] + E[KeyService] + F[VerificationService] + end + A -- deploys --> + B -- starts --> C + C -- deploys --> D + C -- deploys --> E + C -- deploys --> F +``` + +## Bootstrapper + +The *Bootstrapper* is the first microservice launched after booting a Constellation node image. +It sets up that machine as a Kubernetes node and integrates that node into the Kubernetes cluster. +To this end, the *Bootstrapper* first downloads and verifies the [Kubernetes components](https://kubernetes.io/docs/concepts/overview/components/) at the configured versions. +The *Bootstrapper* tries to find an existing cluster and if successful, communicates with the [JoinService](microservices.md#joinservice) to join the node. +Otherwise, it waits for an initialization request to create a new Kubernetes cluster. + +## JoinService + +The *JoinService* runs as [DaemonSet](https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/) on each control-plane node. +New nodes (at cluster start, or later through autoscaling) send a request to the service over [attested TLS (aTLS)](attestation.md#attested-tls-atls). +The *JoinService* verifies the new node's certificate and attestation statement. +If attestation is successful, the new node is supplied with an encryption key from the [*KeyService*](microservices.md#keyservice) for its state disk, and a Kubernetes bootstrap token. + + +```mermaid +sequenceDiagram + participant New node + participant JoinService + New node->>JoinService: aTLS handshake (server side verification) + JoinService-->>New node: # + New node->>+JoinService: IssueJoinTicket(DiskUUID, NodeName, IsControlPlane) + JoinService->>+KeyService: GetDataKey(DiskUUID) + KeyService-->>-JoinService: DiskEncryptionKey + JoinService-->>-New node: DiskEncryptionKey, KubernetesJoinToken, ... +``` + +## VerificationService + +The *VerificationService* runs as DaemonSet on each node. +It provides user-facing functionality for remote attestation during the cluster's lifetime via an endpoint for [verifying the cluster](attestation.md#cluster-attestation). +Read more about the hardware-based [attestation feature](attestation.md) of Constellation and how to [verify](../workflows/verify-cluster.md) a cluster on the client side. + +## KeyService + +The *KeyService* runs as DaemonSet on each control-plane node. +It implements the key management for the [storage encryption keys](keys.md#storage-encryption) in Constellation. These keys are used for the [state disk](images.md#state-disk) of each node and the [transparently encrypted storage](encrypted-storage.md) for Kubernetes. +Depending on wether the [constellation-managed](keys.md#constellation-managed-key-management) or [user-managed](keys.md#user-managed-key-management) mode is used, the *KeyService* holds the key encryption key (KEK) directly or calls an external key management service (KMS) for key derivation respectively. diff --git a/docs/versioned_docs/version-2.20/architecture/networking.md b/docs/versioned_docs/version-2.20/architecture/networking.md new file mode 100644 index 000000000..e9cbdf029 --- /dev/null +++ b/docs/versioned_docs/version-2.20/architecture/networking.md @@ -0,0 +1,22 @@ +# Network encryption + +Constellation encrypts all pod communication using the [container network interface (CNI)](https://github.com/containernetworking/cni). +To that end, Constellation deploys, configures, and operates the [Cilium](https://cilium.io/) CNI plugin. +Cilium provides [transparent encryption](https://docs.cilium.io/en/stable/security/network/encryption) for all cluster traffic using either IPSec or [WireGuard](https://www.wireguard.com/). +Currently, Constellation only supports WireGuard as the encryption engine. +You can read more about the cryptographic soundness of WireGuard [in their white paper](https://www.wireguard.com/papers/wireguard.pdf). + +Cilium is actively working on implementing a feature called [`host-to-host`](https://github.com/cilium/cilium/pull/19401) encryption mode for WireGuard. +With `host-to-host`, all traffic between nodes will be tunneled via WireGuard (host-to-host, host-to-pod, pod-to-host, pod-to-pod). +Until the `host-to-host` feature is released, Constellation enables `pod-to-pod` encryption. +This mode encrypts all traffic between Kubernetes pods using WireGuard tunnels. + +When using Cilium in the default setup but with encryption enabled, there is a [known issue](https://docs.cilium.io/en/v1.12/gettingstarted/encryption/#egress-traffic-to-not-yet-discovered-remote-endpoints-may-be-unencrypted) +that can cause pod-to-pod traffic to be unencrypted. +To mitigate this issue, Constellation adds a *strict* mode to Cilium's `pod-to-pod` encryption. +This mode changes the default behavior of traffic that's destined for an unknown endpoint to not be send out in plaintext, but instead being dropped. +The strict mode distinguishes between traffic that's send to a pod from traffic that's destined for a cluster-external endpoint by considering the pod's CIDR range. + +Traffic originating from hosts isn't encrypted yet. +This mainly includes health checks from Kubernetes API server. +Also, traffic proxied over the API server via e.g. `kubectl port-forward` isn't encrypted. diff --git a/docs/versioned_docs/version-2.20/architecture/observability.md b/docs/versioned_docs/version-2.20/architecture/observability.md new file mode 100644 index 000000000..0f4daffd4 --- /dev/null +++ b/docs/versioned_docs/version-2.20/architecture/observability.md @@ -0,0 +1,74 @@ +# Observability + +In Kubernetes, observability is the ability to gain insight into the behavior and performance of applications. +It helps identify and resolve issues more effectively, ensuring stability and performance of Kubernetes workloads, reducing downtime and outages, and improving efficiency. +The "three pillars of observability" are logs, metrics, and traces. + +In the context of Confidential Computing, observability is a delicate subject and needs to be applied such that it doesn't leak any sensitive information. +The following gives an overview of where and how you can apply standard observability tools in Constellation. + +## Cloud resource monitoring + +While inaccessible, Constellation's nodes are still visible as black box VMs to the hypervisor. +Resource consumption, such as memory and CPU utilization, can be monitored from the outside and observed via the cloud platforms directly. +Similarly, other resources, such as storage and network and their respective metrics, are visible via the cloud platform. + +## Metrics + +Metrics are numeric representations of data measured over intervals of time. They're essential for understanding system health and gaining insights using telemetry signals. + +By default, Constellation exposes the [metrics for Kubernetes system components](https://kubernetes.io/docs/concepts/cluster-administration/system-metrics/) inside the cluster. +Similarly, the [etcd metrics](https://etcd.io/docs/v3.5/metrics/) endpoints are exposed inside the cluster. +These [metrics endpoints can be disabled](https://kubernetes.io/docs/concepts/cluster-administration/system-metrics/#disabling-metrics). + +You can collect these cluster-internal metrics via tools such as [Prometheus](https://prometheus.io/) or the [Elastic Stack](https://www.elastic.co/de/elastic-stack/). + +Constellation's CNI Cilium also supports [metrics via Prometheus endpoints](https://docs.cilium.io/en/latest/observability/metrics/). +However, in Constellation, they're disabled by default and must be enabled first. + +## Logs + +Logs represent discrete events that usually describe what's happening with your service. +The payload is an actual message emitted from your system along with a metadata section containing a timestamp, labels, and tracking identifiers. + +### System logs + +Detailed system-level logs are accessible via `/var/log` and [journald](https://www.freedesktop.org/software/systemd/man/systemd-journald.service.html) on the nodes directly. +They can be collected from there, for example, via [Filebeat and Logstash](https://www.elastic.co/guide/en/beats/filebeat/current/logstash-output.html), which are tools of the [Elastic Stack](https://www.elastic.co/de/elastic-stack/). + +In case of an error during the initialization, the CLI automatically collects the [Bootstrapper](./microservices.md#bootstrapper) logs and returns these as a file for [troubleshooting](../workflows/troubleshooting.md). Here is an example of such an event: + +```shell-session +Cluster initialization failed. This error is not recoverable. +Terminate your cluster and try again. +Fetched bootstrapper logs are stored in "constellation-cluster.log" +``` + +### Kubernetes logs + +Constellation supports the [Kubernetes logging architecture](https://kubernetes.io/docs/concepts/cluster-administration/logging/). +By default, logs are written to the nodes' encrypted state disks. +These include the Pod and container logs and the [system component logs](https://kubernetes.io/docs/concepts/cluster-administration/logging/#system-component-logs). + +[Constellation services](microservices.md) run as Pods inside the `kube-system` namespace and use the standard container logging mechanism. +The same applies for the [Cilium Pods](https://docs.cilium.io/en/latest/operations/troubleshooting/#logs). + +You can collect logs from within the cluster via tools such as [Fluentd](https://github.com/fluent/fluentd), [Loki](https://github.com/grafana/loki), or the [Elastic Stack](https://www.elastic.co/de/elastic-stack/). + +## Traces + +Modern systems are implemented as interconnected complex and distributed microservices. Understanding request flows and system communications is challenging, mainly because all systems in a chain need to be modified to propagate tracing information. Distributed tracing is a new approach to increasing observability and understanding performance bottlenecks. A trace represents consecutive events that reflect an end-to-end request path in a distributed system. + +Constellation supports [traces for Kubernetes system components](https://kubernetes.io/docs/concepts/cluster-administration/system-traces/). +By default, they're disabled and need to be enabled first. + +Similarly, Cilium can be enabled to [export traces](https://cilium.io/use-cases/metrics-export/). + +You can collect these traces via tools such as [Jaeger](https://www.jaegertracing.io/) or [Zipkin](https://zipkin.io/). + +## Integrations + +Platforms and SaaS solutions such as Datadog, logz.io, Dynatrace, or New Relic facilitate the observability challenge for Kubernetes and provide all-in-one SaaS solutions. +They install agents into the cluster that collect metrics, logs, and tracing information and upload them into the data lake of the platform. +Technically, the agent-based approach is compatible with Constellation, and attaching these platforms is straightforward. +However, you need to evaluate if the exported data might violate Constellation's compliance and privacy guarantees by uploading them to a third-party platform. diff --git a/docs/versioned_docs/version-2.20/architecture/orchestration.md b/docs/versioned_docs/version-2.20/architecture/orchestration.md new file mode 100644 index 000000000..3c8d529e7 --- /dev/null +++ b/docs/versioned_docs/version-2.20/architecture/orchestration.md @@ -0,0 +1,83 @@ +# Orchestrating Constellation clusters + +You can use the CLI to create a cluster on the supported cloud platforms. +The CLI provisions the resources in your cloud environment and initiates the initialization of your cluster. +It uses a set of parameters and an optional configuration file to manage your cluster installation. +The CLI is also used for updating your cluster. + +## Workspaces + +Each Constellation cluster has an associated *workspace*. +The workspace is where data such as the Constellation state and config files are stored. +Each workspace is associated with a single cluster and configuration. +The CLI stores state in the local filesystem making the current directory the active workspace. +Multiple clusters require multiple workspaces, hence, multiple directories. +Note that every operation on a cluster always has to be performed from the directory associated with its workspace. + +You may copy files from the workspace to other locations, +but you shouldn't move or delete them while the cluster is still being used. +The Constellation CLI takes care of managing the workspace. +Only when a cluster was terminated, and you are sure the files aren't needed anymore, should you remove a workspace. + +## Cluster creation process + +To allow for fine-grained configuration of your cluster and cloud environment, Constellation supports an extensive configuration file with strong defaults. [Generating the configuration file](../workflows/config.md) is typically the first thing you do in the workspace. + +Altogether, the following files are generated during the creation of a Constellation cluster and stored in the current workspace: + +* a configuration file +* a state file +* a Base64-encoded master secret +* [Terraform artifacts](../reference/terraform.md), stored in subdirectories +* a Kubernetes `kubeconfig` file. + +After the initialization of your cluster, the CLI will provide you with a Kubernetes `kubeconfig` file. +This file grants you access to your Kubernetes cluster and configures the [kubectl](https://kubernetes.io/docs/concepts/configuration/organize-cluster-access-kubeconfig/) tool. +In addition, the cluster's [identifier](orchestration.md#post-installation-configuration) is returned and stored in the state file. + +### Creation process details + +1. The CLI `apply` command first creates the confidential VM (CVM) resources in your cloud environment and configures the network +2. Each CVM boots the Constellation node image and measures every component in the boot chain +3. The first microservice launched in each node is the [*Bootstrapper*](microservices.md#bootstrapper) +4. The *Bootstrapper* waits until it either receives an initialization request or discovers an initialized cluster +5. The CLI then connects to the *Bootstrapper* of a selected node, sends the configuration, and initiates the initialization of the cluster +6. The *Bootstrapper* of **that** node [initializes the Kubernetes cluster](microservices.md#bootstrapper) and deploys the other Constellation [microservices](microservices.md) including the [*JoinService*](microservices.md#joinservice) +7. Subsequently, the *Bootstrappers* of the other nodes discover the initialized cluster and send join requests to the *JoinService* +8. As part of the join request each node includes an attestation statement of its boot measurements as authentication +9. The *JoinService* verifies the attestation statements and joins the nodes to the Kubernetes cluster +10. This process is repeated for every node joining the cluster later (e.g., through autoscaling) + +## Post-installation configuration + +Post-installation the CLI provides a configuration for [accessing the cluster using the Kubernetes API](https://kubernetes.io/docs/tasks/administer-cluster/access-cluster-api/). +The `kubeconfig` file provides the credentials and configuration for connecting and authenticating to the API server. +Once configured, orchestrate the Kubernetes cluster via `kubectl`. + +After the initialization, the CLI will present you with a couple of tokens: + +* The [*master secret*](keys.md#master-secret) (stored in the `constellation-mastersecret.json` file by default) +* The [*clusterID*](keys.md#cluster-identity) of your cluster in Base64 encoding + +You can read more about these values and their meaning in the guide on [cluster identity](keys.md#cluster-identity). + +The *master secret* must be kept secret and can be used to [recover your cluster](../workflows/recovery.md). +Instead of managing this secret manually, you can [use your key management solution of choice](keys.md#user-managed-key-management) with Constellation. + +The *clusterID* uniquely identifies a cluster and can be used to [verify your cluster](../workflows/verify-cluster.md). + +## Upgrades + +Constellation images and microservices may need to be upgraded to new versions during the lifetime of a cluster. +Constellation implements a rolling update mechanism ensuring no downtime of the control or data plane. +You can upgrade a Constellation cluster with a single operation by using the CLI. +For step-by-step instructions on how to do this, refer to [Upgrade your cluster](../workflows/upgrade.md). + +### Attestation of upgrades + +With every new image, corresponding measurements are released. +During an update procedure, the CLI provides new measurements to the [JoinService](microservices.md#joinservice) securely. +New measurements for an updated image are automatically pulled and verified by the CLI following the [supply chain security concept](attestation.md#chain-of-trust) of Constellation. +The [attestation section](attestation.md#cluster-facing-attestation) describes in detail how these measurements are then used by the JoinService for the attestation of nodes. + + diff --git a/docs/versioned_docs/version-2.20/architecture/overview.md b/docs/versioned_docs/version-2.20/architecture/overview.md new file mode 100644 index 000000000..386f93b2f --- /dev/null +++ b/docs/versioned_docs/version-2.20/architecture/overview.md @@ -0,0 +1,30 @@ +# Overview + +Constellation is a cloud-based confidential orchestration platform. +The foundation of Constellation is Kubernetes and therefore shares the same technology stack and architecture principles. +To learn more about Constellation and Kubernetes, see [product overview](../overview/product.md). + +## About orchestration and updates + +As a cluster administrator, you can use the [Constellation CLI](orchestration.md) to install and deploy a cluster. +Updates are provided in accordance with the [support policy](versions.md). + +## About microservices and attestation + +Constellation manages the nodes and network in your cluster. All nodes are bootstrapped by the [*Bootstrapper*](microservices.md#bootstrapper). They're verified and authenticated by the [*JoinService*](microservices.md#joinservice) before being added to the cluster and the network. Finally, the entire cluster can be verified via the [*VerificationService*](microservices.md#verificationservice) using [remote attestation](attestation.md). + +## About node images and verified boot + +Constellation comes with operating system images for Kubernetes control-plane and worker nodes. +They're highly optimized for running containerized workloads and specifically prepared for running inside confidential VMs. +You can learn more about [the images](images.md) and how verified boot ensures their integrity during boot and beyond. + +## About key management and cryptographic primitives + +Encryption of data at-rest, in-transit, and in-use is the fundamental building block for confidential computing and Constellation. Learn more about the [keys and cryptographic primitives](keys.md) used in Constellation, [encrypted persistent storage](encrypted-storage.md), and [network encryption](networking.md). + +## About observability + +Observability in Kubernetes refers to the capability to troubleshoot issues using telemetry signals such as logs, metrics, and traces. +In the realm of Confidential Computing, it's crucial that observability aligns with confidentiality, necessitating careful implementation. +Learn more about the [observability capabilities in Constellation](./observability.md). diff --git a/docs/versioned_docs/version-2.20/architecture/versions.md b/docs/versioned_docs/version-2.20/architecture/versions.md new file mode 100644 index 000000000..9d5a064e0 --- /dev/null +++ b/docs/versioned_docs/version-2.20/architecture/versions.md @@ -0,0 +1,21 @@ +# Versions and support policy + +All components of Constellation use a three-digit version number of the form `v..`. +The components are released in lock step, usually on the first Tuesday of every month. This release primarily introduces new features, but may also include security or performance improvements. The `MINOR` version will be incremented as part of this release. + +Additional `PATCH` releases may be created on demand, to fix security issues or bugs before the next `MINOR` release window. + +New releases are published on [GitHub](https://github.com/edgelesssys/constellation/releases). + +## Kubernetes support policy + +Constellation is aligned to the [version support policy of Kubernetes](https://kubernetes.io/releases/version-skew-policy/#supported-versions), and therefore usually supports the most recent three minor versions. +When a new minor version of Kubernetes is released, support is added to the next Constellation release, and that version then supports four Kubernetes versions. +Subsequent Constellation releases drop support for the oldest (and deprecated) Kubernetes version. + +The following Kubernetes versions are currently supported: + + +* v1.28.15 +* v1.29.11 +* v1.30.7 diff --git a/docs/versioned_docs/version-2.20/getting-started/examples.md b/docs/versioned_docs/version-2.20/getting-started/examples.md new file mode 100644 index 000000000..fded84980 --- /dev/null +++ b/docs/versioned_docs/version-2.20/getting-started/examples.md @@ -0,0 +1,6 @@ +# Examples + +After you [installed the CLI](install.md) and [created your first cluster](first-steps.md), you're ready to deploy applications. Why not start with one of the following examples? +* [Emojivoto](examples/emojivoto.md): a simple but fun web application +* [Online Boutique](examples/online-boutique.md): an e-commerce demo application by Google consisting of 11 separate microservices +* [Horizontal Pod Autoscaling](examples/horizontal-scaling.md): an example demonstrating Constellation's autoscaling capabilities diff --git a/docs/versioned_docs/version-2.20/getting-started/examples/emojivoto.md b/docs/versioned_docs/version-2.20/getting-started/examples/emojivoto.md new file mode 100644 index 000000000..2bbe27917 --- /dev/null +++ b/docs/versioned_docs/version-2.20/getting-started/examples/emojivoto.md @@ -0,0 +1,22 @@ +# Emojivoto +[Emojivoto](https://github.com/BuoyantIO/emojivoto) is a simple and fun application that's well suited to test the basic functionality of your cluster. + + + +emojivoto - Web UI + + + +1. Deploy the application: + ```bash + kubectl apply -k github.com/BuoyantIO/emojivoto/kustomize/deployment + ``` +2. Wait until it becomes available: + ```bash + kubectl wait --for=condition=available --timeout=60s -n emojivoto --all deployments + ``` +3. Forward the web service to your machine: + ```bash + kubectl -n emojivoto port-forward svc/web-svc 8080:80 + ``` +4. Visit [http://localhost:8080](http://localhost:8080) diff --git a/docs/versioned_docs/version-2.20/getting-started/examples/filestash-s3proxy.md b/docs/versioned_docs/version-2.20/getting-started/examples/filestash-s3proxy.md new file mode 100644 index 000000000..b9a394256 --- /dev/null +++ b/docs/versioned_docs/version-2.20/getting-started/examples/filestash-s3proxy.md @@ -0,0 +1,107 @@ + +# Deploying Filestash + +Filestash is a web frontend for different storage backends, including S3. +It's a useful application to showcase s3proxy in action. + +1. Deploy s3proxy as described in [Deployment](../../workflows/s3proxy.md#deployment). +2. Create a deployment file for Filestash with one pod: + +```sh +cat << EOF > "deployment-filestash.yaml" +apiVersion: apps/v1 +kind: Deployment +metadata: + name: filestash +spec: + replicas: 1 + selector: + matchLabels: + app: filestash + template: + metadata: + labels: + app: filestash + spec: + hostAliases: + - ip: $(kubectl get svc s3proxy-service -o=jsonpath='{.spec.clusterIP}') + hostnames: + - "s3.us-east-1.amazonaws.com" + - "s3.us-east-2.amazonaws.com" + - "s3.us-west-1.amazonaws.com" + - "s3.us-west-2.amazonaws.com" + - "s3.eu-north-1.amazonaws.com" + - "s3.eu-south-1.amazonaws.com" + - "s3.eu-south-2.amazonaws.com" + - "s3.eu-west-1.amazonaws.com" + - "s3.eu-west-2.amazonaws.com" + - "s3.eu-west-3.amazonaws.com" + - "s3.eu-central-1.amazonaws.com" + - "s3.eu-central-2.amazonaws.com" + - "s3.ap-northeast-1.amazonaws.com" + - "s3.ap-northeast-2.amazonaws.com" + - "s3.ap-northeast-3.amazonaws.com" + - "s3.ap-east-1.amazonaws.com" + - "s3.ap-southeast-1.amazonaws.com" + - "s3.ap-southeast-2.amazonaws.com" + - "s3.ap-southeast-3.amazonaws.com" + - "s3.ap-southeast-4.amazonaws.com" + - "s3.ap-south-1.amazonaws.com" + - "s3.ap-south-2.amazonaws.com" + - "s3.me-south-1.amazonaws.com" + - "s3.me-central-1.amazonaws.com" + - "s3.il-central-1.amazonaws.com" + - "s3.af-south-1.amazonaws.com" + - "s3.ca-central-1.amazonaws.com" + - "s3.sa-east-1.amazonaws.com" + containers: + - name: filestash + image: machines/filestash:latest + ports: + - containerPort: 8334 + volumeMounts: + - name: ca-cert + mountPath: /etc/ssl/certs/kube-ca.crt + subPath: kube-ca.crt + volumes: + - name: ca-cert + secret: + secretName: s3proxy-tls + items: + - key: ca.crt + path: kube-ca.crt +EOF +``` + +The pod spec includes the `hostAliases` key, which adds an entry to the pod's `/etc/hosts`. +The entry forwards all requests for any of the currently defined AWS regions to the Kubernetes service `s3proxy-service`. +If you followed the s3proxy [Deployment](../../workflows/s3proxy.md#deployment) guide, this service points to a s3proxy pod. + +The deployment specifies all regions explicitly to prevent accidental data leaks. +If one of your buckets were located in a region that's not part of the `hostAliases` key, traffic towards those buckets would not be redirected to s3proxy. +Similarly, if you want to exclude data for specific regions from going through s3proxy you can remove those regions from the deployment. + +The spec also includes a volume mount for the TLS certificate and adds it to the pod's certificate trust store. +The volume is called `ca-cert`. +The key `ca.crt` of that volume is mounted to `/etc/ssl/certs/kube-ca.crt`, which is the default certificate trust store location for that container's OpenSSL library. +Not adding the CA certificate will result in TLS authentication errors. + +3. Apply the file: `kubectl apply -f deployment-filestash.yaml` + +Afterward, you can use a port forward to access the Filestash pod: +`kubectl port-forward pod/$(kubectl get pod --selector='app=filestash' -o=jsonpath='{.items[*].metadata.name}') 8334:8334` + +4. After browsing to `localhost:8443`, Filestash will ask you to set an administrator password. +After setting it, you can directly leave the admin area by clicking the blue cloud symbol in the top left corner. +Subsequently, you can select S3 as storage backend and enter your credentials. +This will bring you to an overview of your buckets. +If you want to deploy Filestash in production, take a look at its [documentation](https://www.filestash.app/docs/). + +5. To see the logs of s3proxy intercepting requests made to S3, run: `kubectl logs -f pod/$(kubectl get pod --selector='app=s3proxy' -o=jsonpath='{.items[*].metadata.name}')` +Look out for log messages labeled `intercepting`. +There is one such log message for each message that's encrypted, decrypted, or blocked. + +6. Once you have uploaded a file with Filestash, you should be able to view the file in Filestash. +However, if you go to the AWS S3 [Web UI](https://s3.console.aws.amazon.com/s3/home) and download the file you just uploaded in Filestash, you won't be able to read it. +Another way to spot encrypted files without downloading them is to click on a file, scroll to the Metadata section, and look for the header named `x-amz-meta-constellation-encryption`. +This header holds the encrypted data encryption key of the object and is only present on objects that are encrypted by s3proxy. diff --git a/docs/versioned_docs/version-2.20/getting-started/examples/horizontal-scaling.md b/docs/versioned_docs/version-2.20/getting-started/examples/horizontal-scaling.md new file mode 100644 index 000000000..dfaf9e742 --- /dev/null +++ b/docs/versioned_docs/version-2.20/getting-started/examples/horizontal-scaling.md @@ -0,0 +1,98 @@ +# Horizontal Pod Autoscaling +This example demonstrates Constellation's autoscaling capabilities. It's based on the Kubernetes [HorizontalPodAutoscaler Walkthrough](https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough/). During the following steps, Constellation will spawn new VMs on demand, verify them, add them to the cluster, and delete them again when the load has settled down. + +## Requirements +The cluster needs to be initialized with Kubernetes 1.23 or later. In addition, [autoscaling must be enabled](../../workflows/scale.md) to enable Constellation to assign new nodes dynamically. + +Just for this example specifically, the cluster should have as few worker nodes in the beginning as possible. Start with a small cluster with only *one* low-powered node for the control-plane node and *one* low-powered worker node. + +:::info +We tested the example using instances of types `Standard_DC4as_v5` on Azure and `n2d-standard-4` on GCP. +::: + +## Setup + +1. Install the Kubernetes Metrics Server: + ```bash + kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml + ``` + +2. Deploy the HPA example server that's supposed to be scaled under load. + + This manifest is similar to the one from the Kubernetes HPA walkthrough, but with increased CPU limits and requests to facilitate the triggering of node scaling events. + ```bash + cat < + +Online Boutique - Web UI + + + +1. Create a namespace: + ```bash + kubectl create ns boutique + ``` +2. Deploy the application: + ```bash + kubectl apply -n boutique -f https://github.com/GoogleCloudPlatform/microservices-demo/raw/main/release/kubernetes-manifests.yaml + ``` +3. Wait for all services to become available: + ```bash + kubectl wait --for=condition=available --timeout=300s -n boutique --all deployments + ``` +4. Get the frontend's external IP address: + ```shell-session + $ kubectl get service frontend-external -n boutique | awk '{print $4}' + EXTERNAL-IP + + ``` + (`` is a placeholder for the IP assigned by your CSP.) +5. Enter the IP from the result in your browser to browse the online shop. diff --git a/docs/versioned_docs/version-2.20/getting-started/first-steps-local.md b/docs/versioned_docs/version-2.20/getting-started/first-steps-local.md new file mode 100644 index 000000000..98f0302de --- /dev/null +++ b/docs/versioned_docs/version-2.20/getting-started/first-steps-local.md @@ -0,0 +1,277 @@ +# First steps with a local cluster + +A local cluster lets you deploy and test Constellation without a cloud subscription. +You have two options: + +* Use MiniConstellation to automatically deploy a two-node cluster. +* For more fine-grained control, create the cluster using the QEMU provider. + +Both options use virtualization to create a local cluster with control-plane nodes and worker nodes. They **don't** require hardware with Confidential VM (CVM) support. For attestation, they currently use a software-based vTPM provided by KVM/QEMU. + +You need an x64 machine with a Linux OS. +You can use a VM, but it needs nested virtualization. + +## Prerequisites + +* Machine requirements: + * An x86-64 CPU with at least 4 cores (6 cores are recommended) + * At least 4 GB RAM (6 GB are recommended) + * 20 GB of free disk space + * Hardware virtualization enabled in the BIOS/UEFI (often referred to as Intel VT-x or AMD-V/SVM) / nested-virtualization support when using a VM +* Software requirements: + * Linux OS with [KVM kernel module](https://www.linux-kvm.org/page/Main_Page) + * Recommended: Ubuntu 22.04 LTS + * [Docker](https://docs.docker.com/engine/install/) + * [xsltproc](https://gitlab.gnome.org/GNOME/libxslt/-/wikis/home) + * (Optional) [virsh](https://www.libvirt.org/manpages/virsh.html) to observe and access your nodes + +### Software installation on Ubuntu + +```bash +# install Docker +curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg +echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null +sudo apt update +sudo apt install docker-ce +# install other dependencies +sudo apt install xsltproc +sudo snap install kubectl --classic +# install Constellation CLI +curl -LO https://github.com/edgelesssys/constellation/releases/latest/download/constellation-linux-amd64 +sudo install constellation-linux-amd64 /usr/local/bin/constellation +# do not drop forwarded packages +sudo iptables -P FORWARD ACCEPT +``` + +## Create a cluster + + + + + +With the `constellation mini` command, you can deploy and test Constellation locally. This mode is called MiniConstellation. Conceptually, MiniConstellation is similar to [MicroK8s](https://microk8s.io/), [K3s](https://k3s.io/), and [minikube](https://minikube.sigs.k8s.io/docs/). + + +:::caution + +MiniConstellation has specific soft- and hardware requirements such as a Linux OS running on an x86-64 CPU. Pay attention to all [prerequisites](#prerequisites) when setting up. + +::: + +:::note + +Since MiniConstellation runs on your local system, cloud features such as load balancing, +attaching persistent storage, or autoscaling aren't available. + +::: + +The following creates your MiniConstellation cluster (may take up to 10 minutes to complete): + +```bash +constellation mini up +``` + +This will configure your current directory as the [workspace](../architecture/orchestration.md#workspaces) for this cluster. +All `constellation` commands concerning this cluster need to be issued from this directory. + + + + +With the QEMU provider, you can create a local Constellation cluster as if it were in the cloud. The provider uses [QEMU](https://www.qemu.org/) to create multiple VMs for the cluster nodes, which interact with each other. + +:::caution + +Constellation on QEMU has specific soft- and hardware requirements such as a Linux OS running on an x86-64 CPU. Pay attention to all [prerequisites](#prerequisites) when setting up. + +::: + +:::note + +Since Constellation on QEMU runs on your local system, cloud features such as load balancing, +attaching persistent storage, or autoscaling aren't available. + +::: + +1. To set up your local cluster, you need to create a configuration file for Constellation first. + + ```bash + constellation config generate qemu + ``` + + This creates a [configuration file](../workflows/config.md) for QEMU called `constellation-conf.yaml`. After that, your current folder also becomes your [workspace](../architecture/orchestration.md#workspaces). All `constellation` commands for your cluster need to be executed from this directory. + +2. Now you can create your cluster and its nodes. `constellation apply` uses the options set in `constellation-conf.yaml`. + + ```bash + constellation apply -y + ``` + + The Output should look like the following: + + ```shell-session + $ constellation apply -y + Checking for infrastructure changes + The following Constellation cluster will be created: + 3 control-plane nodes of type 2-vCPUs will be created. + 1 worker node of type 2-vCPUs will be created. + Creating + Cloud infrastructure created successfully. + Your Constellation master secret was successfully written to ./constellation-mastersecret.json + Connecting + Initializing cluster + Installing Kubernetes components + Your Constellation cluster was successfully initialized. + + Constellation cluster identifier g6iMP5wRU1b7mpOz2WEISlIYSfdAhB0oNaOg6XEwKFY= + Kubernetes configuration constellation-admin.conf + + You can now connect to your cluster by executing: + export KUBECONFIG="$PWD/constellation-admin.conf" + ``` + + The cluster's identifier will be different in your output. + Keep `constellation-mastersecret.json` somewhere safe. + This will allow you to [recover your cluster](../workflows/recovery.md) in case of a disaster. + + :::info + + Depending on your setup, `constellation apply` may take 10+ minutes to complete. + + ::: + +3. Configure kubectl + + ```bash + export KUBECONFIG="$PWD/constellation-admin.conf" + ``` + + + + +## Connect to the cluster + +Your cluster initially consists of a single control-plane node: + +```shell-session +$ kubectl get nodes +NAME STATUS ROLES AGE VERSION +control-plane-0 Ready control-plane 66s v1.24.6 +``` + +Additional nodes will request to join the cluster shortly. Before each additional node is allowed to join the cluster, its state is verified using remote attestation by the [JoinService](../architecture/microservices.md#joinservice). +If verification passes successfully, the new node receives keys and certificates to join the cluster. + +You can follow this process by viewing the logs of the JoinService: + +```shell-session +$ kubectl logs -n kube-system daemonsets/join-service -f +{"level":"INFO","ts":"2022-10-14T09:32:20Z","caller":"cmd/main.go:48","msg":"Constellation Node Join Service","version":"2.1.0","cloudProvider":"qemu"} +{"level":"INFO","ts":"2022-10-14T09:32:20Z","logger":"validator","caller":"watcher/validator.go:96","msg":"Updating expected measurements"} +... +``` + +Once all nodes have joined your cluster, it may take a couple of minutes for all resources to become available. +You can check on the state of your cluster by running the following: + +```shell-session +$ kubectl get nodes +NAME STATUS ROLES AGE VERSION +control-plane-0 Ready control-plane 2m59s v1.24.6 +worker-0 Ready 32s v1.24.6 +``` + +## Deploy a sample application + +1. Deploy the [emojivoto app](https://github.com/BuoyantIO/emojivoto) + + ```bash + kubectl apply -k github.com/BuoyantIO/emojivoto/kustomize/deployment + ``` + +2. Expose the frontend service locally + + ```bash + kubectl wait --for=condition=available --timeout=60s -n emojivoto --all deployments + kubectl -n emojivoto port-forward svc/web-svc 8080:80 & + curl http://localhost:8080 + kill %1 + ``` + +## Terminate your cluster + + + + +Once you are done, you can clean up the created resources using the following command: + +```bash +constellation mini down +``` + +This will destroy your cluster and clean up your workspace. +The VM image and cluster configuration file (`constellation-conf.yaml`) will be kept and may be reused to create new clusters. + + + + +Once you are done, you can clean up the created resources using the following command: + +```bash +constellation terminate +``` + +This should give the following output: + +```shell-session +$ constellation terminate +You are about to terminate a Constellation cluster. +All of its associated resources will be DESTROYED. +This action is irreversible and ALL DATA WILL BE LOST. +Do you want to continue? [y/n]: +``` + +Confirm with `y` to terminate the cluster: + +```shell-session +Terminating ... +Your Constellation cluster was terminated successfully. +``` + +This will destroy your cluster and clean up your workspace. +The VM image and cluster configuration file (`constellation-conf.yaml`) will be kept and may be reused to create new clusters. + + + + +## Troubleshooting + +Make sure to use the [latest release](https://github.com/edgelesssys/constellation/releases/latest) and check out the [known issues](https://github.com/edgelesssys/constellation/issues?q=is%3Aopen+is%3Aissue+label%3A%22known+issue%22). + +### VMs have no internet access / CLI remains in "Initializing cluster" state + +`iptables` rules may prevent your VMs from accessing the internet. +Make sure your rules aren't dropping forwarded packages. + +List your rules: + +```bash +sudo iptables -S +``` + +The output may look similar to the following: + +```shell-session +-P INPUT ACCEPT +-P FORWARD DROP +-P OUTPUT ACCEPT +-N DOCKER +-N DOCKER-ISOLATION-STAGE-1 +-N DOCKER-ISOLATION-STAGE-2 +-N DOCKER-USER +``` + +If your `FORWARD` chain is set to `DROP`, you need to update your rules: + +```bash +sudo iptables -P FORWARD ACCEPT +``` diff --git a/docs/versioned_docs/version-2.20/getting-started/first-steps.md b/docs/versioned_docs/version-2.20/getting-started/first-steps.md new file mode 100644 index 000000000..128ac2849 --- /dev/null +++ b/docs/versioned_docs/version-2.20/getting-started/first-steps.md @@ -0,0 +1,229 @@ +# First steps with Constellation + +The following steps guide you through the process of creating a cluster and deploying a sample app. This example assumes that you have successfully [installed and set up Constellation](install.md), +and have access to a cloud subscription. + +:::tip +If you don't have a cloud subscription, you can also set up a [local Constellation cluster using virtualization](../getting-started/first-steps-local.md) for testing. +::: + +:::note +If you encounter any problem with the following steps, make sure to use the [latest release](https://github.com/edgelesssys/constellation/releases/latest) and check out the [known issues](https://github.com/edgelesssys/constellation/issues?q=is%3Aopen+is%3Aissue+label%3A%22known+issue%22). +::: + +## Create a cluster + +1. Create the [configuration file](../workflows/config.md) and state file for your cloud provider. If you are following the steps of this guide, there is no need to edit the file. + + + + + ```bash + constellation config generate aws + ``` + + + + + ```bash + constellation config generate azure + ``` + + + + + ```bash + constellation config generate gcp + ``` + + + + + ```bash + constellation config generate stackit + ``` + + + + +2. Create your [IAM configuration](../workflows/config.md#creating-an-iam-configuration). + + + + + ```bash + constellation iam create aws --zone=us-east-2a --prefix=constellTest --update-config + ``` + + This command creates IAM configuration for the AWS zone `us-east-2a` using the prefix `constellTest` for all named resources being created. It also updates the configuration file `constellation-conf.yaml` in your current directory with the IAM values filled in. + + Depending on the attestation variant selected on config generation, different regions are available. + AMD SEV-SNP machines (requires the default attestation variant `awsSEVSNP`) are currently available in the following regions: + * `eu-west-1` + * `us-east-2` + + You can find a list of regions that support AMD SEV-SNP in [AWS's documentation](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/snp-requirements.html). + + NitroTPM machines (requires the attestation variant `awsNitroTPM`) are available in all regions. + Constellation OS images are currently replicated to the following regions: + * `eu-central-1` + * `eu-west-1` + * `eu-west-3` + * `us-east-2` + * `ap-south-1` + + If you require the OS image to be available in another region, [let us know](https://github.com/edgelesssys/constellation/issues/new?assignees=&labels=&template=feature_request.md&title=Support+new+AWS+image+region:+xx-xxxx-x). + + You can find a list of all [regions in AWS's documentation](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-regions-availability-zones.html#concepts-available-regions). + + + + + ```bash + constellation iam create azure --subscriptionID 00000000-0000-0000-0000-000000000000 --region=westus --resourceGroup=constellTest --servicePrincipal=spTest --update-config + ``` + + This command creates IAM configuration on the Azure region `westus` creating a new resource group `constellTest` and a new service principal `spTest`. It also updates the configuration file `constellation-conf.yaml` in your current directory with the IAM values filled in. + + CVMs are available in several Azure regions. Constellation OS images are currently replicated to the following: + + * `germanywestcentral` + * `westus` + * `eastus` + * `northeurope` + * `westeurope` + * `southeastasia` + + If you require the OS image to be available in another region, [let us know](https://github.com/edgelesssys/constellation/issues/new?assignees=&labels=&template=feature_request.md&title=Support+new+Azure+image+region:+xx-xxxx-x). + + You can find a list of all [regions in Azure's documentation](https://azure.microsoft.com/en-us/global-infrastructure/services/?products=virtual-machines®ions=all). + + + + + ```bash + constellation iam create gcp --projectID=yourproject-12345 --zone=europe-west2-a --serviceAccountID=constell-test --update-config + ``` + + This command creates IAM configuration in the GCP project `yourproject-12345` on the GCP zone `europe-west2-a` creating a new service account `constell-test`. It also updates the configuration file `constellation-conf.yaml` in your current directory with the IAM values filled in. + + Note that only regions offering CVMs of the `C2D` or `N2D` series are supported. You can find a [list of all regions in Google's documentation](https://cloud.google.com/compute/docs/regions-zones#available), which you can filter by machine type `C2D` or `N2D`. + + + + + To use Constellation on STACKIT, the cluster will use the User Access Token (UAT) that's generated [during the install step](./install.md). + After creating the accounts, fill in the STACKIT details in `constellation-conf.yaml` under `provider.openstack`: + + * `stackitProjectID`: STACKIT project id (can be found after login on the [STACKIT portal](https://portal.stackit.cloud)) + + + + + :::tip + To learn about all options you have for managing IAM resources and Constellation configuration, see the [Configuration workflow](../workflows/config.md). + ::: + + + +3. Create the cluster. `constellation apply` uses options set in `constellation-conf.yaml`. + If you want to manually manage your cloud resources, for example by using [Terraform](../reference/terraform.md), follow the corresponding instructions in the [Create workflow](../workflows/create.md). + + :::tip + + On Azure, you may need to wait 15+ minutes at this point for role assignments to propagate. + + ::: + + ```bash + constellation apply -y + ``` + + This should look similar to the following: + + ```shell-session + $ constellation apply -y + Checking for infrastructure changes + The following Constellation cluster will be created: + 3 control-plane nodes of type n2d-standard-4 will be created. + 1 worker node of type n2d-standard-4 will be created. + Creating + Cloud infrastructure created successfully + Your Constellation master secret was successfully written to ./constellation-mastersecret.json + Connecting + Initializing cluster + Installing Kubernetes components + Your Constellation cluster was successfully initialized. + + Constellation cluster identifier g6iMP5wRU1b7mpOz2WEISlIYSfdAhB0oNaOg6XEwKFY= + Kubernetes configuration constellation-admin.conf + + You can now connect to your cluster by executing: + export KUBECONFIG="$PWD/constellation-admin.conf" + ``` + + The cluster's identifier will be different in your output. + Keep `constellation-mastersecret.json` somewhere safe. + This will allow you to [recover your cluster](../workflows/recovery.md) in case of a disaster. + + :::info + + Depending on your CSP and region, `constellation apply` may take 10+ minutes to complete. + + ::: + +4. Configure kubectl. + + ```bash + export KUBECONFIG="$PWD/constellation-admin.conf" + ``` + +## Deploy a sample application + +1. Deploy the [emojivoto app](https://github.com/BuoyantIO/emojivoto) + + ```bash + kubectl apply -k github.com/BuoyantIO/emojivoto/kustomize/deployment + ``` + +2. Expose the frontend service locally + + ```bash + kubectl wait --for=condition=available --timeout=60s -n emojivoto --all deployments + kubectl -n emojivoto port-forward svc/web-svc 8080:80 & + curl http://localhost:8080 + kill %1 + ``` + +## Terminate your cluster + +Use the CLI to terminate your cluster. If you manually used [Terraform](../reference/terraform.md) to manage your cloud resources, follow the corresponding instructions in the [Terminate workflow](../workflows/terminate.md). + +```bash +constellation terminate +``` + +This should give the following output: + +```shell-session +$ constellation terminate +You are about to terminate a Constellation cluster. +All of its associated resources will be DESTROYED. +This action is irreversible and ALL DATA WILL BE LOST. +Do you want to continue? [y/n]: +``` + +Confirm with `y` to terminate the cluster: + +```shell-session +Terminating ... +Your Constellation cluster was terminated successfully. +``` + +Optionally, you can also [delete your IAM resources](../workflows/config.md#deleting-an-iam-configuration). diff --git a/docs/versioned_docs/version-2.20/getting-started/install.md b/docs/versioned_docs/version-2.20/getting-started/install.md new file mode 100644 index 000000000..fa481d9b8 --- /dev/null +++ b/docs/versioned_docs/version-2.20/getting-started/install.md @@ -0,0 +1,439 @@ +# Installation and setup + +Constellation runs entirely in your cloud environment and can be controlled via a dedicated [command-line interface (CLI)](../reference/cli.md) or a [Terraform provider](../workflows/terraform-provider.md). + +## Prerequisites + +Make sure the following requirements are met: + +* Your machine is running Linux, macOS, or Windows +* You have admin rights on your machine +* [kubectl](https://kubernetes.io/docs/tasks/tools/) is installed +* Your CSP is Amazon Web Services (AWS), Microsoft Azure, Google Cloud Platform (GCP), or STACKIT + +## Install the Constellation CLI + +:::tip + +If you prefer to use Terraform, you can alternatively use the [Terraform provider](../workflows/terraform-provider.md) to manage the cluster's lifecycle. + +::: + +The CLI executable is available at [GitHub](https://github.com/edgelesssys/constellation/releases). +Install it with the following commands: + + + + +1. Download the CLI: + +```bash +curl -LO https://github.com/edgelesssys/constellation/releases/latest/download/constellation-linux-amd64 +``` + +2. [Verify the signature](../workflows/verify-cli.md) (optional) + +3. Install the CLI to your PATH: + +```bash +sudo install constellation-linux-amd64 /usr/local/bin/constellation +``` + + + + +1. Download the CLI: + +```bash +curl -LO https://github.com/edgelesssys/constellation/releases/latest/download/constellation-linux-arm64 +``` + +2. [Verify the signature](../workflows/verify-cli.md) (optional) + +3. Install the CLI to your PATH: + +```bash +sudo install constellation-linux-arm64 /usr/local/bin/constellation +``` + + + + + +1. Download the CLI: + +```bash +curl -LO https://github.com/edgelesssys/constellation/releases/latest/download/constellation-darwin-arm64 +``` + +2. [Verify the signature](../workflows/verify-cli.md) (optional) + +3. Install the CLI to your PATH: + +```bash +sudo install constellation-darwin-arm64 /usr/local/bin/constellation +``` + + + + + +1. Download the CLI: + +```bash +curl -LO https://github.com/edgelesssys/constellation/releases/latest/download/constellation-darwin-amd64 +``` + +2. [Verify the signature](../workflows/verify-cli.md) (optional) + +3. Install the CLI to your PATH: + +```bash +sudo install constellation-darwin-amd64 /usr/local/bin/constellation +``` + + + + + +1. Download the CLI: + +```bash +Invoke-WebRequest -OutFile ./constellation.exe -Uri 'https://github.com/edgelesssys/constellation/releases/latest/download/constellation-windows-amd64.exe' +``` + +2. [Verify the signature](../workflows/verify-cli.md) (optional) + +3. Install the CLI under `C:\Program Files\Constellation\bin\constellation.exe` + +3. Add the CLI to your PATH: + + 1. Open `Advanced system settings` by searching for the App in the Windows search + 2. Go to the `Advanced` tab + 3. Click `Environment Variables…` + 4. Click variable called `Path` and click `Edit…` + 5. Click `New` + 6. Enter the path to the folder containing the binary you want on your PATH: `C:\Program Files\Constellation\bin` + + + + +:::tip +The CLI supports autocompletion for various shells. To set it up, run `constellation completion` and follow the given steps. +::: + +## Set up cloud credentials + +Constellation makes authenticated calls to the CSP API. Therefore, you need to set up Constellation with the credentials for your CSP. + +:::tip +If you don't have a cloud subscription, you can also set up a [local Constellation cluster using virtualization](../getting-started/first-steps-local.md) for testing. +::: + +### Required permissions + + + + +To set up a Constellation cluster, you need to perform two tasks that require permissions: create the infrastructure and create roles for cluster nodes. Both of these actions can be performed by different users, e.g., an administrator to create roles and a DevOps engineer to create the infrastructure. + +To [create the IAM configuration](../workflows/config.md#creating-an-iam-configuration) for Constellation, you need the following permissions: + +```json +{ + "Version": "2012-10-17", + "Statement": [ + { + "Effect": "Allow", + "Action": [ + "ec2:DescribeAccountAttributes", + "iam:AddRoleToInstanceProfile", + "iam:AttachRolePolicy", + "iam:CreateInstanceProfile", + "iam:CreatePolicy", + "iam:CreateRole", + "iam:DeleteInstanceProfile", + "iam:DeletePolicy", + "iam:DeletePolicyVersion", + "iam:DeleteRole", + "iam:DetachRolePolicy", + "iam:GetInstanceProfile", + "iam:GetPolicy", + "iam:GetPolicyVersion", + "iam:GetRole", + "iam:ListAttachedRolePolicies", + "iam:ListInstanceProfilesForRole", + "iam:ListPolicyVersions", + "iam:ListRolePolicies", + "iam:PassRole", + "iam:RemoveRoleFromInstanceProfile", + "sts:GetCallerIdentity" + ], + "Resource": "*" + } + ] +} +``` + +The built-in `AdministratorAccess` policy is a superset of these permissions. + +To [create a Constellation cluster](../workflows/create.md), see the permissions of [main.tf](https://github.com/edgelesssys/constellation/blob/main/terraform/infrastructure/iam/aws/main.tf). + +The built-in `PowerUserAccess` policy is a superset of these permissions. + +Follow Amazon's guide on [understanding](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html) and [managing policies](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html). + + + + +The following [resource providers need to be registered](https://learn.microsoft.com/en-us/azure/azure-resource-manager/management/resource-providers-and-types#register-resource-provider) in your subscription: + +* `Microsoft.Attestation` +* `Microsoft.Compute` +* `Microsoft.Insights` +* `Microsoft.ManagedIdentity` +* `Microsoft.Network` + +By default, Constellation tries to register these automatically if they haven't been registered before. + +To [create the IAM configuration](../workflows/config.md#creating-an-iam-configuration) for Constellation, you need the following permissions: + +* `*/register/action` \[1] +* `Microsoft.Authorization/roleAssignments/*` +* `Microsoft.Authorization/roleDefinitions/*` +* `Microsoft.ManagedIdentity/userAssignedIdentities/*` +* `Microsoft.Resources/subscriptions/resourcegroups/*` + +The built-in `Owner` role is a superset of these permissions. + +To [create a Constellation cluster](../workflows/create.md), you need the following permissions: + +* `Microsoft.Attestation/attestationProviders/*` +* `Microsoft.Compute/virtualMachineScaleSets/*` +* `Microsoft.Insights/components/*` +* `Microsoft.ManagedIdentity/userAssignedIdentities/*` +* `Microsoft.Network/loadBalancers/*` +* `Microsoft.Network/loadBalancers/backendAddressPools/*` +* `Microsoft.Network/networkSecurityGroups/*` +* `Microsoft.Network/publicIPAddresses/*` +* `Microsoft.Network/virtualNetworks/*` +* `Microsoft.Network/virtualNetworks/subnets/*` +* `Microsoft.Network/natGateways/*` + +The built-in `Contributor` role is a superset of these permissions. + +Follow Microsoft's guide on [understanding](https://learn.microsoft.com/en-us/azure/role-based-access-control/role-definitions) and [assigning roles](https://learn.microsoft.com/en-us/azure/role-based-access-control/role-assignments). + +1: You can omit `*/register/Action` if the resource providers mentioned above are already registered and the `ARM_SKIP_PROVIDER_REGISTRATION` environment variable is set to `true` when creating the IAM configuration. + + + + +Create a new project for Constellation or use an existing one. +Enable the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com) on it. + +To [create the IAM configuration](../workflows/config.md#creating-an-iam-configuration) for Constellation, you need the following permissions: + +* `iam.serviceAccountKeys.create` +* `iam.serviceAccountKeys.delete` +* `iam.serviceAccountKeys.get` +* `iam.serviceAccounts.create` +* `iam.serviceAccounts.delete` +* `iam.serviceAccounts.get` +* `resourcemanager.projects.getIamPolicy` +* `resourcemanager.projects.setIamPolicy` + +Together, the built-in roles `roles/editor` and `roles/resourcemanager.projectIamAdmin` form a superset of these permissions. + +To [create a Constellation cluster](../workflows/create.md), you need the following permissions: + +* `compute.addresses.createInternal` +* `compute.addresses.deleteInternal` +* `compute.addresses.get` +* `compute.addresses.useInternal` +* `compute.backendServices.create` +* `compute.backendServices.delete` +* `compute.backendServices.get` +* `compute.backendServices.use` +* `compute.disks.create` +* `compute.firewalls.create` +* `compute.firewalls.delete` +* `compute.firewalls.get` +* `compute.firewalls.update` +* `compute.globalAddresses.create` +* `compute.globalAddresses.delete` +* `compute.globalAddresses.get` +* `compute.globalAddresses.use` +* `compute.globalForwardingRules.create` +* `compute.globalForwardingRules.delete` +* `compute.globalForwardingRules.get` +* `compute.globalForwardingRules.setLabels` +* `compute.globalOperations.get` +* `compute.healthChecks.create` +* `compute.healthChecks.delete` +* `compute.healthChecks.get` +* `compute.healthChecks.useReadOnly` +* `compute.instanceGroupManagers.create` +* `compute.instanceGroupManagers.delete` +* `compute.instanceGroupManagers.get` +* `compute.instanceGroupManagers.update` +* `compute.instanceGroups.create` +* `compute.instanceGroups.delete` +* `compute.instanceGroups.get` +* `compute.instanceGroups.update` +* `compute.instanceGroups.use` +* `compute.instances.create` +* `compute.instances.setLabels` +* `compute.instances.setMetadata` +* `compute.instances.setTags` +* `compute.instanceTemplates.create` +* `compute.instanceTemplates.delete` +* `compute.instanceTemplates.get` +* `compute.instanceTemplates.useReadOnly` +* `compute.networks.create` +* `compute.networks.delete` +* `compute.networks.get` +* `compute.networks.updatePolicy` +* `compute.routers.create` +* `compute.routers.delete` +* `compute.routers.get` +* `compute.routers.update` +* `compute.subnetworks.create` +* `compute.subnetworks.delete` +* `compute.subnetworks.get` +* `compute.subnetworks.use` +* `compute.targetTcpProxies.create` +* `compute.targetTcpProxies.delete` +* `compute.targetTcpProxies.get` +* `compute.targetTcpProxies.use` +* `iam.serviceAccounts.actAs` + +Together, the built-in roles `roles/editor`, `roles/compute.instanceAdmin` and `roles/resourcemanager.projectIamAdmin` form a superset of these permissions. + +Follow Google's guide on [understanding](https://cloud.google.com/iam/docs/understanding-roles) and [assigning roles](https://cloud.google.com/iam/docs/granting-changing-revoking-access). + + + + +Constellation on STACKIT requires a User Access Token (UAT) for the OpenStack API and a STACKIT service account. +The UAT already has all required permissions by default. +The STACKIT service account needs the `editor` role to create STACKIT LoadBalancers. +Look at the [STACKIT documentation](https://docs.stackit.cloud/stackit/en/getting-started-in-service-accounts-134415831.html) on how to create the service account and assign the role. + + + + +### Authentication + +You need to authenticate with your CSP. The following lists the required steps for *testing* and *production* environments. + +:::note +The steps for a *testing* environment are simpler. However, they may expose secrets to the CSP. If in doubt, follow the *production* steps. +::: + + + + +**Testing** + +You can use the [AWS CloudShell](https://console.aws.amazon.com/cloudshell/home). Make sure you are [authorized to use it](https://docs.aws.amazon.com/cloudshell/latest/userguide/sec-auth-with-identities.html). + +**Production** + +Use the latest version of the [AWS CLI](https://aws.amazon.com/cli/) on a trusted machine: + +```bash +aws configure +``` + +Options and first steps are described in the [AWS CLI documentation](https://docs.aws.amazon.com/cli/index.html). + + + + +**Testing** + +Simply open the [Azure Cloud Shell](https://docs.microsoft.com/en-us/azure/cloud-shell/overview). + +**Production** + +Use the latest version of the [Azure CLI](https://docs.microsoft.com/en-us/cli/azure/) on a trusted machine: + +```bash +az login +``` + +Other options are described in Azure's [authentication guide](https://docs.microsoft.com/en-us/cli/azure/authenticate-azure-cli). + + + + +**Testing** + +You can use the [Google Cloud Shell](https://cloud.google.com/shell). Make sure your [session is authorized](https://cloud.google.com/shell/docs/auth). For example, execute `gsutil` and accept the authorization prompt. + +**Production** + +Use one of the following options on a trusted machine: + +* Use the [`gcloud` CLI](https://cloud.google.com/sdk/gcloud) + + ```bash + gcloud auth application-default login + ``` + + This will ask you to log-in to your Google account and create your credentials. + The Constellation CLI will automatically load these credentials when needed. + +* Set up a service account and pass the credentials manually + + Follow [Google's guide](https://cloud.google.com/docs/authentication/production#manually) for setting up your credentials. + + + + +You need to authenticate with the infrastructure API (OpenStack) and create a service account (STACKIT API). + +1. [Follow the STACKIT documentation](https://docs.stackit.cloud/stackit/en/step-1-generating-of-user-access-token-11763726.html) for obtaining a User Access Token (UAT) to use the infrastructure API +2. Create a configuration file with the credentials from the User Access Token under: + * Linux: `~/.config/openstack/clouds.yaml` + * macOS: `/Users//Library/Application Support/openstack/clouds.yaml` or `/etc/openstack/clouds.yaml` + * Windows: `%AppData%\openstack\clouds.yaml` + + + ```yaml + clouds: + stackit: + auth: + auth_url: https://keystone.api.iaas.eu01.stackit.cloud/v3 + username: REPLACE_WITH_UAT_USERNAME + password: REPLACE_WITH_UAT_PASSWORD + project_id: REPLACE_WITH_STACKIT_PROJECT_ID + project_name: REPLACE_WITH_STACKIT_PROJECT_NAME + user_domain_name: portal_mvp + project_domain_name: portal_mvp + region_name: RegionOne + identity_api_version: 3 + ``` + +:::caution + +`project_id` refers to the ID of your STACKIT project. The STACKIT portal also shows the OpenStack ID that's associated with your project in some places. Make sure you insert the STACKIT project ID in the `clouds.yaml` file. It's of the format XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX. + +::: + +3. [Follow the STACKIT documentation](https://docs.stackit.cloud/stackit/en/getting-started-in-service-accounts-134415831.html) for creating a service account and an access token +4. Assign the `editor` role to the service account by [following the documentation](https://docs.stackit.cloud/stackit/en/getting-started-in-service-accounts-134415831.html) +5. Create a configuration file under `~/.stackit/credentials.json` (`%USERPROFILE%\.stackit\credentials.json` on Windows) + + ```json + {"STACKIT_SERVICE_ACCOUNT_TOKEN":"REPLACE_WITH_TOKEN"} + ``` + + + + + +## Next steps + +You are now ready to [deploy your first confidential Kubernetes cluster and application](first-steps.md). diff --git a/docs/versioned_docs/version-2.20/getting-started/marketplaces.md b/docs/versioned_docs/version-2.20/getting-started/marketplaces.md new file mode 100644 index 000000000..a6763a42a --- /dev/null +++ b/docs/versioned_docs/version-2.20/getting-started/marketplaces.md @@ -0,0 +1,56 @@ +# Using Constellation via Cloud Marketplaces + +Constellation is available through the Marketplaces of AWS, Azure, GCP, and STACKIT. This allows you to create self-managed Constellation clusters that are billed on a pay-per-use basis (hourly, per vCPU) with your CSP account. You can still get direct support by Edgeless Systems. For more information, please [contact us](https://www.edgeless.systems/enterprise-support/). + +This document explains how to run Constellation with the dynamically billed cloud marketplace images. + + + + +To use Constellation's marketplace images, ensure that you are subscribed to the [marketplace offering](https://aws.amazon.com/marketplace/pp/prodview-2mbn65nv57oys) through the web portal. + +Then, enable the use of marketplace images in your Constellation `constellation-conf.yaml` [config file](../workflows/config.md): + +```bash +yq eval -i ".provider.aws.useMarketplaceImage = true" constellation-conf.yaml +``` + + + + +Constellation has a private marketplace plan. Please [contact us](https://www.edgeless.systems/enterprise-support/) to gain access. + +To use a marketplace image, you need to accept the marketplace image's terms once for your subscription with the [Azure CLI](https://learn.microsoft.com/en-us/cli/azure/vm/image/terms?view=azure-cli-latest): + +```bash +az vm image terms accept --publisher edgelesssystems --offer constellation --plan constellation +``` + +Then, enable the use of marketplace images in your Constellation `constellation-conf.yaml` [config file](../workflows/config.md): + +```bash +yq eval -i ".provider.azure.useMarketplaceImage = true" constellation-conf.yaml +``` + + + + +To use a marketplace image, ensure that the account is entitled to use marketplace images by Edgeless Systems by accepting the terms through the [web portal](https://console.cloud.google.com/marketplace/vm/config/edgeless-systems-public/constellation). + +Then, enable the use of marketplace images in your Constellation `constellation-conf.yaml` [config file](../workflows/config.md): + +```bash +yq eval -i ".provider.gcp.useMarketplaceImage = true" constellation-conf.yaml +``` + + + + +On STACKIT, the selected Constellation image is always a marketplace image. You can find more information on the STACKIT portal. + + + + +Ensure that the cluster uses an official release image version (i.e., `.image=vX.Y.Z` in the `constellation-conf.yaml` file). + +From there, you can proceed with the [cluster creation](../workflows/create.md) as usual. diff --git a/docs/versioned_docs/version-2.20/intro.md b/docs/versioned_docs/version-2.20/intro.md new file mode 100644 index 000000000..0bfe86da9 --- /dev/null +++ b/docs/versioned_docs/version-2.20/intro.md @@ -0,0 +1,34 @@ +--- +slug: / +id: intro +--- +# Introduction + +Welcome to the documentation of Constellation! Constellation is a Kubernetes engine that aims to provide the best possible data security. + +![Constellation concept](/img/concept.svg) + + Constellation shields your entire Kubernetes cluster from the underlying cloud infrastructure. Everything inside is always encrypted, including at runtime in memory. For this, Constellation leverages a technology called *confidential computing* and more specifically Confidential VMs. + +:::tip +See the 📄[whitepaper](https://content.edgeless.systems/hubfs/Confidential%20Computing%20Whitepaper.pdf) for more information on confidential computing. +::: + +## Goals + +From a security perspective, Constellation is designed to keep all data always encrypted and to prevent any access from the underlying (cloud) infrastructure. This includes access from datacenter employees, privileged cloud admins, and attackers coming through the infrastructure. Such attackers could be malicious co-tenants escalating their privileges or hackers who managed to compromise a cloud server. + +From a DevOps perspective, Constellation is designed to work just like what you would expect from a modern Kubernetes engine. + +## Use cases + +Constellation provides unique security [features](overview/confidential-kubernetes.md) and [benefits](overview/security-benefits.md). The core use cases are: + +* Increasing the overall security of your clusters +* Increasing the trustworthiness of your SaaS offerings +* Moving sensitive workloads from on-prem to the cloud +* Meeting regulatory requirements + +## Next steps + +You can learn more about the concept of Confidential Kubernetes, features, security benefits, and performance of Constellation in the *Basics* section. To jump right into the action head to *Getting started*. diff --git a/docs/versioned_docs/version-2.20/overview/clouds.md b/docs/versioned_docs/version-2.20/overview/clouds.md new file mode 100644 index 000000000..b2695d28e --- /dev/null +++ b/docs/versioned_docs/version-2.20/overview/clouds.md @@ -0,0 +1,66 @@ +# Feature status of clouds + +What works on which cloud? Currently, Confidential VMs (CVMs) are available in varying quality on the different clouds and software stacks. + +For Constellation, the ideal environment provides the following: + +1. Ability to run arbitrary software and images inside CVMs +2. CVMs based on AMD SEV-SNP (available in EPYC CPUs since the Milan generation) or Intel TDX (available in Xeon CPUs since the Sapphire Rapids generation) +3. Ability for CVM guests to obtain raw hardware attestation statements +4. Reviewable, open-source firmware inside CVMs +5. Capability of the firmware to attest the integrity of the code it passes control to, e.g., with an embedded virtual TPM (vTPM) + +(1) is a functional must-have. (2)--(5) are required for remote attestation that fully keeps the infrastructure/cloud out. Constellation can work without them or with approximations, but won't protect against certain privileged attackers anymore. + +The following table summarizes the state of features for different infrastructures. + +| **Feature** | **AWS** | **Azure** | **GCP** | **STACKIT** | **OpenStack (Yoga)** | +|-----------------------------------|---------|-----------|---------|--------------|----------------------| +| **1. Custom images** | Yes | Yes | Yes | Yes | Yes | +| **2. SEV-SNP or TDX** | Yes | Yes | Yes | No | Depends on kernel/HV | +| **3. Raw guest attestation** | Yes | Yes | Yes | No | Depends on kernel/HV | +| **4. Reviewable firmware** | Yes | No* | No | No | Depends on kernel/HV | +| **5. Confidential measured boot** | No | Yes | No | No | Depends on kernel/HV | + +## Amazon Web Services (AWS) + +Amazon EC2 [supports AMD SEV-SNP](https://aws.amazon.com/de/about-aws/whats-new/2023/04/amazon-ec2-amd-sev-snp/). +Regarding (3), AWS provides direct access to attestation statements. +However, regarding (5), attestation is partially based on the [NitroTPM](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/nitrotpm.html) for [measured boot](../architecture/attestation.md#measured-boot), which is a vTPM managed by the Nitro hypervisor. +Hence, the hypervisor is currently part of Constellation's TCB. +Regarding (4), the [firmware is open source](https://github.com/aws/uefi) and can be reproducibly built. + +## Microsoft Azure + +With its [CVM offering](https://docs.microsoft.com/en-us/azure/confidential-computing/confidential-vm-overview), Azure provides the best foundations for Constellation. +Regarding (3), Azure provides direct access to attestation statements. +The firmware runs in an isolated domain inside the CVM and exposes a vTPM (5), but it's closed source (4). +On SEV-SNP, Azure uses VM Privilege Level (VMPL) isolation for the separation of firmware and the rest of the VM; on TDX, they use TD partitioning. +This firmware is signed by Azure. +The signature is reflected in the attestation statements of CVMs. +Thus, the Azure closed-source firmware becomes part of Constellation's trusted computing base (TCB). + +\* Recently, [Azure announced the open source paravisor OpenHCL](https://techcommunity.microsoft.com/blog/windowsosplatform/openhcl-the-new-open-source-paravisor/4273172). It's the foundation for fully open source and verifiable CVM firmware. Once Azure provides their CVM firmware with reproducible builds based on OpenHCL, (4) switches from *No* to *Yes*. Constellation will support OpenHCL based firmware on Azure in the future. + +## Google Cloud Platform (GCP) + +The [CVMs Generally Available in GCP](https://cloud.google.com/confidential-computing/confidential-vm/docs/confidential-vm-overview#technologies) are based on AMD SEV-ES or SEV-SNP. +Regarding (3), with their SEV-SNP offering Google provides direct access to attestation statements. +However, regarding (5), attestation is partially based on the [Shielded VM vTPM](https://cloud.google.com/compute/shielded-vm/docs/shielded-vm#vtpm) for [measured boot](../architecture/attestation.md#measured-boot), which is a vTPM managed by Google's hypervisor. +Hence, the hypervisor is currently part of Constellation's TCB. +Regarding (4), the CVMs still include closed-source firmware. + +[TDX on Google](https://cloud.google.com/blog/products/identity-security/confidential-vms-on-intel-cpus-your-datas-new-intelligent-defense) is in public preview. +With it, Constellation would have a similar TCB and attestation flow as with the current SEV-SNP offering. + +## STACKIT + +[STACKIT Compute Engine](https://www.stackit.de/en/product/stackit-compute-engine/) supports AMD SEV-ES. A vTPM is used for measured boot, which is a vTPM managed by STACKIT's hypervisor. Hence, the hypervisor is currently part of Constellation's TCB. + +## OpenStack + +OpenStack is an open-source cloud and infrastructure management software. It's used by many smaller CSPs and datacenters. In the latest *Yoga* version, OpenStack has basic support for CVMs. However, much depends on the employed kernel and hypervisor. Features (2)--(4) are likely to be a *Yes* with Linux kernel version 6.2. Thus, going forward, OpenStack on corresponding AMD or Intel hardware will be a viable underpinning for Constellation. + +## Conclusion + +The different clouds and software like the Linux kernel and OpenStack are in the process of building out their support for state-of-the-art CVMs. Azure has already most features in place. For Constellation, the status quo means that the TCB has different shapes on different infrastructures. With broad SEV-SNP support coming to the Linux kernel, we soon expect a normalization of features across infrastructures. diff --git a/docs/versioned_docs/version-2.20/overview/confidential-kubernetes.md b/docs/versioned_docs/version-2.20/overview/confidential-kubernetes.md new file mode 100644 index 000000000..bff8c3322 --- /dev/null +++ b/docs/versioned_docs/version-2.20/overview/confidential-kubernetes.md @@ -0,0 +1,42 @@ +# Confidential Kubernetes + +We use the term *Confidential Kubernetes* to refer to the concept of using confidential-computing technology to shield entire Kubernetes clusters from the infrastructure. The three defining properties of this concept are: + +1. **Workload shielding**: the confidentiality and integrity of all workload-related data and code are enforced. +2. **Control plane shielding**: the confidentiality and integrity of the cluster's control plane, state, and workload configuration are enforced. +3. **Attestation and verifiability**: the two properties above can be verified remotely based on hardware-rooted cryptographic certificates. + +Each of the above properties is equally important. Only with all three in conjunction, an entire cluster can be shielded without gaps. + +## Constellation security features + +Constellation implements the Confidential Kubernetes concept with the following security features. + +* **Runtime encryption**: Constellation runs all Kubernetes nodes inside Confidential VMs (CVMs). This gives runtime encryption for the entire cluster. +* **Network and storage encryption**: Constellation augments this with transparent encryption of the [network](../architecture/networking.md), [persistent storage](../architecture/encrypted-storage.md), and other managed storage like [AWS S3](../architecture/encrypted-storage.md#encrypted-s3-object-storage). Thus, workloads and control plane are truly end-to-end encrypted: at rest, in transit, and at runtime. +* **Transparent key management**: Constellation manages the corresponding [cryptographic keys](../architecture/keys.md) inside CVMs. +* **Node attestation and verification**: Constellation verifies the integrity of each new CVM-based node using [remote attestation](../architecture/attestation.md). Only "good" nodes receive the cryptographic keys required to access the network and storage of a cluster. +* **Confidential computing-optimized images**: A node is "good" if it's running a signed Constellation [node image](../architecture/images.md) inside a CVM and is in the expected state. (Node images are hardware-measured during boot. The measurements are reflected in the attestation statements that are produced by nodes and verified by Constellation.) +* **"Whole cluster" attestation**: Towards the DevOps engineer, Constellation provides a single hardware-rooted certificate from which all of the above can be verified. + +With the above, Constellation wraps an entire cluster into one coherent and verifiable *confidential context*. The concept is depicted in the following. + +![Confidential Kubernetes](../_media/concept-constellation.svg) + +## Comparison: Managed Kubernetes with CVMs + +In comparison, managed Kubernetes with CVMs, as it's for example offered in [AKS](https://azure.microsoft.com/en-us/services/kubernetes-service/) and [GKE](https://cloud.google.com/kubernetes-engine), only provides runtime encryption for certain worker nodes. Here, each worker node is a separate (and typically unverified) confidential context. This only provides limited security benefits as it only prevents direct access to a worker node's memory. The large majority of potential attacks through the infrastructure remain unaffected. This includes attacks through the control plane, access to external key management, and the corruption of worker node images. This leaves many problems unsolved. For instance, *Node A* has no means to verify if *Node B* is "good" and if it's OK to share data with it. Consequently, this approach leaves a large attack surface, as is depicted in the following. + +![Concept: Managed Kubernetes plus CVMs](../_media/concept-managed.svg) + +The following table highlights the key differences in terms of features. + +| | Managed Kubernetes with CVMs | Confidential Kubernetes (Constellation✨) | +|-------------------------------------|------------------------------|--------------------------------------------| +| Runtime encryption | Partial (data plane only)| **Yes** | +| Node image verification | No | **Yes** | +| Full cluster attestation | No | **Yes** | +| Transparent network encryption | No | **Yes** | +| Transparent storage encryption | No | **Yes** | +| Confidential key management | No | **Yes** | +| Cloud agnostic / multi-cloud | No | **Yes** | diff --git a/docs/versioned_docs/version-2.20/overview/license.md b/docs/versioned_docs/version-2.20/overview/license.md new file mode 100644 index 000000000..34122c025 --- /dev/null +++ b/docs/versioned_docs/version-2.20/overview/license.md @@ -0,0 +1,33 @@ +# License + +## Source code + +Constellation's source code is available on [GitHub](https://github.com/edgelesssys/constellation) under the [GNU Affero General Public License v3.0](https://github.com/edgelesssys/constellation/blob/main/LICENSE). + +## Binaries + +Edgeless Systems provides ready-to-use and [signed](../architecture/attestation.md#chain-of-trust) binaries of Constellation. This includes the CLI and the [node images](../architecture/images.md). + +These binaries may be used free of charge within the bounds of Constellation's [**Community License**](#community-license). An [**Enterprise License**](#enterprise-license) can be purchased from Edgeless Systems. + +The Constellation CLI displays relevant license information when you initialize your cluster. You are responsible for staying within the bounds of your respective license. Constellation doesn't enforce any limits so as not to endanger your cluster's availability. + +## Terraform provider + +Edgeless Systems provides a [Terraform provider](https://github.com/edgelesssys/terraform-provider-constellation/releases), which may be used free of charge within the bounds of Constellation's [**Community License**](#community-license). An [**Enterprise License**](#enterprise-license) can be purchased from Edgeless Systems. + +You are responsible for staying within the bounds of your respective license. Constellation doesn't enforce any limits so as not to endanger your cluster's availability. + +## Community License + +You are free to use the Constellation binaries provided by Edgeless Systems to create services for internal consumption, evaluation purposes, or non-commercial use. You must not use the Constellation binaries to provide commercial hosted services to third parties. Edgeless Systems gives no warranties and offers no support. + +## Enterprise License + +Enterprise Licenses don't have the above limitations and come with support and additional features. Find out more at the [product website](https://www.edgeless.systems/products/constellation/). + +Once you have received your Enterprise License file, place it in your [Constellation workspace](../architecture/orchestration.md#workspaces) in a file named `constellation.license`. + +## CSP Marketplaces + +Constellation is available through the Marketplaces of AWS, Azure, GCP, and STACKIT. This allows you to create self-managed Constellation clusters that are billed on a pay-per-use basis (hourly, per vCPU) with your CSP account. You can still get direct support by Edgeless Systems. For more information, please [contact us](https://www.edgeless.systems/enterprise-support/). diff --git a/docs/versioned_docs/version-2.20/overview/performance/application.md b/docs/versioned_docs/version-2.20/overview/performance/application.md new file mode 100644 index 000000000..c67d59644 --- /dev/null +++ b/docs/versioned_docs/version-2.20/overview/performance/application.md @@ -0,0 +1,102 @@ +# Application benchmarks + +## HashiCorp Vault + +[HashiCorp Vault](https://www.vaultproject.io/) is a distributed secrets management software that can be deployed to Kubernetes. +HashiCorp maintains a benchmarking tool for vault, [vault-benchmark](https://github.com/hashicorp/vault-benchmark/). +Vault-benchmark generates load on a Vault deployment and measures response times. + +This article describes the results from running vault-benchmark on Constellation, AKS, and GKE. +You can find the setup for producing the data discussed in this article in the [vault-benchmarks](https://github.com/edgelesssys/vault-benchmarks) repository. + +The Vault API used during benchmarking is the [transits secret engine](https://developer.hashicorp.com/vault/docs/secrets/transit). +This allows services to send data to Vault for encryption, decryption, signing, and verification. + +## Results + +On each run, vault-benchmark sends requests and measures the latencies. +The measured latencies are aggregated through various statistical features. +After running the benchmark n times, the arithmetic mean over a subset of the reported statistics is calculated. +The selected features are arithmetic mean, 99th percentile, minimum, and maximum. + +Arithmetic mean gives a general sense of the latency on each target. +The 99th percentile shows performance in (most likely) erroneous states. +Minimum and maximum mark the range within which latency varies each run. + +The benchmark was configured with 1300 workers and 10 seconds per run. +Those numbers were chosen empirically. +The latency was stabilizing at 10 seconds runtime, not changing with further increase. +Increasing the number of workers beyond 1300 leads to request failures, marking the limit Vault was able to handle in this setup. +All results are based on 100 runs. + +The following data was generated while running five replicas, one primary, and four standby nodes. +All numbers are in seconds if not indicated otherwise. +``` +========== Results AKS ========== +Mean: mean: 1.632200, variance: 0.002057 +P99: mean: 5.480679, variance: 2.263700 +Max: mean: 6.651001, variance: 2.808401 +Min: mean: 0.011415, variance: 0.000133 +========== Results GKE ========== +Mean: mean: 1.656435, variance: 0.003615 +P99: mean: 6.030807, variance: 3.955051 +Max: mean: 7.164843, variance: 3.300004 +Min: mean: 0.010233, variance: 0.000111 +========== Results C11n ========== +Mean: mean: 1.651549, variance: 0.001610 +P99: mean: 5.780422, variance: 3.016106 +Max: mean: 6.942997, variance: 3.075796 +Min: mean: 0.013774, variance: 0.000228 +========== AKS vs C11n ========== +Mean: +1.171577 % (AKS is faster) +P99: +5.185495 % (AKS is faster) +Max: +4.205618 % (AKS is faster) +Min: +17.128781 % (AKS is faster) +========== GKE vs C11n ========== +Mean: -0.295851 % (GKE is slower) +P99: -4.331603 % (GKE is slower) +Max: -3.195248 % (GKE is slower) +Min: +25.710886 % (GKE is faster) +``` + +**Interpretation**: Latencies are all within ~5% of each other. +AKS performs slightly better than GKE and Constellation (C11n) in all cases except minimum latency. +Minimum latency is the lowest for GKE. +Compared to GKE, Constellation had slightly lower peak latencies (99th percentile and maximum), indicating that Constellation could have handled slightly more concurrent accesses than GKE. +Overall, performance is at comparable levels across all three distributions. +Based on these numbers, you can use a similarly sized Constellation cluster to run your existing Vault deployment. + +### Visualization + +The following plots visualize the data presented above as [box plots](https://en.wikipedia.org/wiki/Box_plot). +The whiskers denote the minimum and maximum. +The box stretches from the 25th to the 75th percentile, with the dividing bar marking the 50th percentile. +The circles outside the whiskers denote outliers. + +

    +Mean Latency + +![Mean Latency](../../_media/benchmark_vault/5replicas/mean_latency.png) + +
    + +
    +99th Percentile Latency + +![99th Percentile Latency](../../_media/benchmark_vault/5replicas/p99_latency.png) + +
    + +
    +Maximum Latency + +![Maximum Latency](../../_media/benchmark_vault/5replicas/max_latency.png) + +
    + +
    +Minimum Latency + +![Minimum Latency](../../_media/benchmark_vault/5replicas/min_latency.png) + +
    diff --git a/docs/versioned_docs/version-2.20/overview/performance/compute.md b/docs/versioned_docs/version-2.20/overview/performance/compute.md new file mode 100644 index 000000000..88dd4b1b2 --- /dev/null +++ b/docs/versioned_docs/version-2.20/overview/performance/compute.md @@ -0,0 +1,11 @@ +# Impact of runtime encryption on compute performance + +All nodes in a Constellation cluster are executed inside Confidential VMs (CVMs). Consequently, the performance of Constellation is inherently linked to the performance of these CVMs. + +## AMD and Azure benchmarking + +AMD and Azure have collectively released a [performance benchmark](https://community.amd.com/t5/business/microsoft-azure-confidential-computing-powered-by-3rd-gen-epyc/ba-p/497796) for CVMs that utilize 3rd Gen AMD EPYC processors (Milan) with SEV-SNP. This benchmark, which included a variety of mostly compute-intensive tests such as SPEC CPU 2017 and CoreMark, demonstrated that CVMs experience only minor performance degradation (ranging from 2% to 8%) when compared to standard VMs. Such results are indicative of the performance that can be expected from compute-intensive workloads running with Constellation on Azure. + +## AMD and Google benchmarking + +Similarly, AMD and Google have jointly released a [performance benchmark](https://www.amd.com/system/files/documents/3rd-gen-epyc-gcp-c2d-conf-compute-perf-brief.pdf) for CVMs employing 3rd Gen AMD EPYC processors (Milan) with SEV-SNP. With high-performance computing workloads such as WRF, NAMD, Ansys CFS, and Ansys LS_DYNA, they observed analogous findings, with only minor performance degradation (between 2% and 4%) compared to standard VMs. These outcomes are reflective of the performance that can be expected for compute-intensive workloads running with Constellation on GCP. diff --git a/docs/versioned_docs/version-2.20/overview/performance/io.md b/docs/versioned_docs/version-2.20/overview/performance/io.md new file mode 100644 index 000000000..3ae796f8a --- /dev/null +++ b/docs/versioned_docs/version-2.20/overview/performance/io.md @@ -0,0 +1,204 @@ +# I/O performance benchmarks + +To assess the overall performance of Constellation, this benchmark evaluates Constellation v2.6.0 in terms of storage I/O using [`fio`](https://fio.readthedocs.io/en/latest/fio_doc.html) and network performance using the [Kubernetes Network Benchmark](https://github.com/InfraBuilder/k8s-bench-suite#knb--kubernetes-network-be). + +This benchmark tested Constellation on Azure and GCP and compared the results against the managed Kubernetes offerings AKS and GKE. + +## Configurations + +### Constellation + +The benchmark was conducted with Constellation v2.6.0, Kubernetes v1.25.7, and Cilium v1.12. +It ran on the following infrastructure configurations. + +Constellation on Azure: + +- Nodes: 3 (1 Control-plane, 2 Worker) +- Machines: `DC4as_v5`: 3rd Generation AMD EPYC 7763v (Milan) processor with 4 Cores, 16 GiB memory +- CVM: `true` +- Region: `West US` +- Zone: `2` + +Constellation on GCP: + +- Nodes: 3 (1 Control-plane, 2 Worker) +- Machines: `n2d-standard-4`: 2nd Generation AMD EPYC (Rome) processor with 4 Cores, 16 GiB of memory +- CVM: `true` +- Zone: `europe-west3-b` + +### AKS + +On AKS, the benchmark used Kubernetes `v1.24.9` and nodes with version `AKSUbuntu-1804gen2containerd-2023.02.15`. +AKS ran with the [`kubenet`](https://learn.microsoft.com/en-us/azure/aks/concepts-network#kubenet-basic-networking) CNI and the [default CSI driver](https://learn.microsoft.com/en-us/azure/aks/azure-disk-csi) for Azure Disk. + +The following infrastructure configurations was used: + +- Nodes: 2 (2 Worker) +- Machines: `D4as_v5`: 3rd Generation AMD EPYC 7763v (Milan) processor with 4 Cores, 16 GiB memory +- CVM: `false` +- Region: `West US` +- Zone: `2` + +### GKE + +On GKE, the benchmark used Kubernetes `v1.24.9` and nodes with version `1.24.9-gke.3200`. +GKE ran with the [`kubenet`](https://cloud.google.com/kubernetes-engine/docs/concepts/network-overview) CNI and the [default CSI driver](https://cloud.google.com/kubernetes-engine/docs/how-to/persistent-volumes/gce-pd-csi-driver) for Compute Engine persistent disk. + +The following infrastructure configurations was used: + +- Nodes: 2 (2 Worker) +- Machines: `n2d-standard-4` 2nd Generation AMD EPYC (Rome) processor with 4 Cores, 16 GiB of memory +- CVM: `false` +- Zone: `europe-west3-b` + +## Results + +### Network + +This section gives a thorough analysis of the network performance of Constellation, specifically focusing on measuring TCP and UDP bandwidth. +The benchmark measured the bandwidth of pod-to-pod and pod-to-service connections between two different nodes using [`iperf`](https://iperf.fr/). + +GKE and Constellation on GCP had a maximum network bandwidth of [10 Gbps](https://cloud.google.com/compute/docs/general-purpose-machines#n2d_machines). +AKS with `Standard_D4as_v5` machines a maximum network bandwidth of [12.5 Gbps](https://learn.microsoft.com/en-us/azure/virtual-machines/dasv5-dadsv5-series#dasv5-series). +The Confidential VM equivalent `Standard_DC4as_v5` currently has a network bandwidth of [1.25 Gbps](https://learn.microsoft.com/en-us/azure/virtual-machines/dcasv5-dcadsv5-series#dcasv5-series-products). +Therefore, to make the test comparable, both AKS and Constellation on Azure were running with `Standard_DC4as_v5` machines and 1.25 Gbps bandwidth. + +Constellation on Azure and AKS used an MTU of 1500. +Constellation on GCP used an MTU of 8896. GKE used an MTU of 1450. + +The difference in network bandwidth can largely be attributed to two factors. + +- Constellation's [network encryption](../../architecture/networking.md) via Cilium and WireGuard, which protects data in-transit. +- [AMD SEV using SWIOTLB bounce buffers](https://lore.kernel.org/all/20200204193500.GA15564@ashkalra_ubuntu_server/T/) for all DMA including network I/O. + +#### Pod-to-Pod + +In this scenario, the client Pod connects directly to the server pod via its IP address. + +```mermaid +flowchart LR + subgraph Node A + Client[Client] + end + subgraph Node B + Server[Server] + end + Client ==>|traffic| Server +``` + +The results for "Pod-to-Pod" on Azure are as follows: + +![Network Pod2Pod Azure benchmark graph](../../_media/benchmark_net_p2p_azure.png) + +The results for "Pod-to-Pod" on GCP are as follows: + +![Network Pod2Pod GCP benchmark graph](../../_media/benchmark_net_p2p_gcp.png) + +#### Pod-to-Service + +In this scenario, the client Pod connects to the server Pod via a ClusterIP service. This is more relevant to real-world use cases. + +```mermaid +flowchart LR + subgraph Node A + Client[Client] ==>|traffic| Service[Service] + end + subgraph Node B + Server[Server] + end + Service ==>|traffic| Server +``` + +The results for "Pod-to-Pod" on Azure are as follows: + +![Network Pod2SVC Azure benchmark graph](../../_media/benchmark_net_p2svc_azure.png) + +The results for "Pod-to-Pod" on GCP are as follows: + +![Network Pod2SVC GCP benchmark graph](../../_media/benchmark_net_p2svc_gcp.png) + +In our recent comparison of Constellation on GCP with GKE, Constellation has 58% less TCP bandwidth. However, UDP bandwidth was slightly better with Constellation, thanks to its higher MTU. + +Similarly, when comparing Constellation on Azure with AKS using CVMs, Constellation achieved approximately 10% less TCP and 40% less UDP bandwidth. + +### Storage I/O + +Azure and GCP offer persistent storage for their Kubernetes services AKS and GKE via the Container Storage Interface (CSI). CSI storage in Kubernetes is available via `PersistentVolumes` (PV) and consumed via `PersistentVolumeClaims` (PVC). +Upon requesting persistent storage through a PVC, GKE and AKS will provision a PV as defined by a default [storage class](https://kubernetes.io/docs/concepts/storage/storage-classes/). +Constellation provides persistent storage on Azure and GCP [that's encrypted on the CSI layer](../../architecture/encrypted-storage.md). +Similarly, upon a PVC request, Constellation will provision a PV via a default storage class. + +For Constellation on Azure and AKS, the benchmark ran with Azure Disk storage [Standard SSD](https://learn.microsoft.com/en-us/azure/virtual-machines/disks-types#standard-ssds) of 400 GiB size. +The [DC4as machine type](https://learn.microsoft.com/en-us/azure/virtual-machines/dasv5-dadsv5-series#dasv5-series) with four cores provides the following maximum performance: + +- 6400 (20000 burst) IOPS +- 144 MB/s (600 MB/s burst) throughput + +However, the performance is bound by the capabilities of the [512 GiB Standard SSD size](https://learn.microsoft.com/en-us/azure/virtual-machines/disks-types#standard-ssds) (the size class of 400 GiB volumes): + +- 500 (600 burst) IOPS +- 60 MB/s (150 MB/s burst) throughput + +For Constellation on GCP and GKE, the benchmark ran with Compute Engine Persistent Disk Storage [pd-balanced](https://cloud.google.com/compute/docs/disks) of 400 GiB size. +The N2D machine type with four cores and pd-balanced provides the following [maximum performance](https://cloud.google.com/compute/docs/disks/performance#n2d_vms): + +- 3,000 read IOPS +- 15,000 write IOPS +- 240 MB/s read throughput +- 240 MB/s write throughput + +However, the performance is bound by the capabilities of a [`Zonal balanced PD`](https://cloud.google.com/compute/docs/disks/performance#zonal-persistent-disks) with 400 GiB size: + +- 2400 read IOPS +- 2400 write IOPS +- 112 MB/s read throughput +- 112 MB/s write throughput + +The [`fio`](https://fio.readthedocs.io/en/latest/fio_doc.html) benchmark consists of several tests. +The benchmark used [`Kubestr`](https://github.com/kastenhq/kubestr) to run `fio` in Kubernetes. +The default test performs randomized access patterns that accurately depict worst-case I/O scenarios for most applications. + +The following `fio` settings were used: + +- No Cloud caching +- No OS caching +- Single CPU +- 60 seconds runtime +- 10 seconds ramp-up time +- 10 GiB file +- IOPS: 4 KB blocks and 128 iodepth +- Bandwidth: 1024 KB blocks and 128 iodepth + +For more details, see the [`fio` test configuration](https://github.com/edgelesssys/constellation/blob/main/.github/actions/e2e_benchmark/fio.ini). + +The results for IOPS on Azure are as follows: + +![I/O IOPS Azure benchmark graph](../../_media/benchmark_fio_azure_iops.png) + +The results for IOPS on GCP are as follows: + +![I/O IOPS GCP benchmark graph](../../_media/benchmark_fio_gcp_iops.png) + +The results for bandwidth on Azure are as follows: + +![I/O bandwidth Azure benchmark graph](../../_media/benchmark_fio_azure_bw.png) + +The results for bandwidth on GCP are as follows: + +![I/O bandwidth GCP benchmark graph](../../_media/benchmark_fio_gcp_bw.png) + +On GCP, the results exceed the maximum performance guarantees of the chosen disk type. There are two possible explanations for this. The first is that there may be cloud caching in place that isn't configurable. Alternatively, the underlying provisioned disk size may be larger than what was requested, resulting in higher performance boundaries. + +When comparing Constellation on GCP with GKE, Constellation has similar bandwidth but about 10% less IOPS performance. On Azure, Constellation has similar IOPS performance compared to AKS, where both likely hit the maximum storage performance. However, Constellation has approximately 15% less read and write bandwidth. + +## Conclusion + +Despite the added [security benefits](../security-benefits.md) that Constellation provides, it only incurs a slight performance overhead when compared to managed Kubernetes offerings such as AKS and GKE. In most compute benchmarks, Constellation is on par with it's alternatives. +While it may be slightly slower in certain I/O scenarios due to network and storage encryption, there is ongoing work to reduce this overhead to single digits. + +For instance, storage encryption only adds between 10% to 15% overhead in terms of bandwidth and IOPS. +Meanwhile, the biggest performance impact that Constellation currently faces is network encryption, which can incur up to 58% overhead on a 10 Gbps network. +However, the Cilium team has conducted [benchmarks with Cilium using WireGuard encryption](https://docs.cilium.io/en/latest/operations/performance/benchmark/#encryption-wireguard-ipsec) on a 100 Gbps network that yielded over 15 Gbps. +We're confident that Constellation will provide a similar level of performance with an upcoming release. + +Overall, Constellation strikes a great balance between security and performance, and we're continuously working to improve its performance capabilities while maintaining its high level of security. diff --git a/docs/versioned_docs/version-2.20/overview/performance/performance.md b/docs/versioned_docs/version-2.20/overview/performance/performance.md new file mode 100644 index 000000000..59bf86602 --- /dev/null +++ b/docs/versioned_docs/version-2.20/overview/performance/performance.md @@ -0,0 +1,17 @@ +# Performance analysis of Constellation + +This section provides a comprehensive examination of the performance characteristics of Constellation. + +## Runtime encryption + +Runtime encryption affects compute performance. [Benchmarks by Azure and Google](compute.md) show that the performance degradation of Confidential VMs (CVMs) is small, ranging from 2% to 8% for compute-intensive workloads. + +## I/O performance benchmarks + +We evaluated the [I/O performance](io.md) of Constellation, utilizing a collection of synthetic benchmarks targeting networking and storage. +We further compared this performance to native managed Kubernetes offerings from various cloud providers, to better understand how Constellation stands in relation to standard practices. + +## Application benchmarking + +To gauge Constellation's applicability to well-known applications, we performed a [benchmark of HashiCorp Vault](application.md) running on Constellation. +The results were then compared to deployments on the managed Kubernetes offerings from different cloud providers, providing a tangible perspective on Constellation's performance in actual deployment scenarios. diff --git a/docs/versioned_docs/version-2.20/overview/product.md b/docs/versioned_docs/version-2.20/overview/product.md new file mode 100644 index 000000000..4b5d90706 --- /dev/null +++ b/docs/versioned_docs/version-2.20/overview/product.md @@ -0,0 +1,12 @@ +# Product features + +Constellation is a Kubernetes engine that aims to provide the best possible data security in combination with enterprise-grade scalability and reliability features---and a smooth user experience. + +From a security perspective, Constellation implements the [Confidential Kubernetes](confidential-kubernetes.md) concept and corresponding security features, which shield your entire cluster from the underlying infrastructure. + +From an operational perspective, Constellation provides the following key features: + +* **Native support for different clouds**: Constellation works on Amazon Web Services (AWS), Microsoft Azure, Google Cloud Platform (GCP), and STACKIT. Support for OpenStack-based environments is coming with a future release. Constellation securely interfaces with the cloud infrastructure to provide [cluster autoscaling](https://github.com/kubernetes/autoscaler/tree/master/cluster-autoscaler), [dynamic persistent volumes](https://kubernetes.io/docs/concepts/storage/dynamic-provisioning/), and [service load balancing](https://kubernetes.io/docs/concepts/services-networking/service/#loadbalancer). +* **High availability**: Constellation uses a [multi-master architecture](https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/high-availability/) with a [stacked etcd topology](https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/ha-topology/#stacked-etcd-topology) to ensure high availability. +* **Integrated Day-2 operations**: Constellation lets you securely [upgrade](../workflows/upgrade.md) your cluster to a new release. It also lets you securely [recover](../workflows/recovery.md) a failed cluster. Both with a single command. +* **Support for Terraform**: Constellation includes a [Terraform provider](../workflows/terraform-provider.md) that lets you manage the full lifecycle of your cluster via Terraform. diff --git a/docs/versioned_docs/version-2.20/overview/security-benefits.md b/docs/versioned_docs/version-2.20/overview/security-benefits.md new file mode 100644 index 000000000..51a8b64f5 --- /dev/null +++ b/docs/versioned_docs/version-2.20/overview/security-benefits.md @@ -0,0 +1,22 @@ +# Security benefits and threat model + +Constellation implements the [Confidential Kubernetes](confidential-kubernetes.md) concept and shields entire Kubernetes deployments from the infrastructure. More concretely, Constellation decreases the size of the trusted computing base (TCB) of a Kubernetes deployment. The TCB is the totality of elements in a computing environment that must be trusted not to be compromised. A smaller TCB results in a smaller attack surface. The following diagram shows how Constellation removes the *cloud & datacenter infrastructure* and the *physical hosts*, including the hypervisor, the host OS, and other components, from the TCB (red). Inside the confidential context (green), Kubernetes remains part of the TCB, but its integrity is attested and can be [verified](../workflows/verify-cluster.md). + +![TCB comparison](../_media/tcb.svg) + +Given this background, the following describes the concrete threat classes that Constellation addresses. + +## Insider access + +Employees and third-party contractors of cloud service providers (CSPs) have access to different layers of the cloud infrastructure. +This opens up a large attack surface where workloads and data can be read, copied, or manipulated. With Constellation, Kubernetes deployments are shielded from the infrastructure and thus such accesses are prevented. + +## Infrastructure-based attacks + +Malicious cloud users ("hackers") may break out of their tenancy and access other tenants' data. Advanced attackers may even be able to establish a permanent foothold within the infrastructure and access data over a longer period. Analogously to the *insider access* scenario, Constellation also prevents access to a deployment's data in this scenario. + +## Supply chain attacks + +Supply chain security is receiving lots of attention recently due to an [increasing number of recorded attacks](https://www.enisa.europa.eu/news/enisa-news/understanding-the-increase-in-supply-chain-security-attacks). For instance, a malicious actor could attempt to tamper Constellation node images (including Kubernetes and other software) before they're loaded in the confidential VMs of a cluster. Constellation uses [remote attestation](../architecture/attestation.md) in conjunction with public [transparency logs](../workflows/verify-cli.md) to prevent this. + +In the future, Constellation will extend this feature to customer workloads. This will enable cluster owners to create auditable policies that precisely define which containers can run in a given deployment. diff --git a/docs/versioned_docs/version-2.20/reference/cli.md b/docs/versioned_docs/version-2.20/reference/cli.md new file mode 100644 index 000000000..99acef520 --- /dev/null +++ b/docs/versioned_docs/version-2.20/reference/cli.md @@ -0,0 +1,844 @@ +# CLI reference + + + +Use the Constellation CLI to create and manage your clusters. + +Usage: + +``` +constellation [command] +``` +Commands: + +* [config](#constellation-config): Work with the Constellation configuration file + * [generate](#constellation-config-generate): Generate a default configuration and state file + * [fetch-measurements](#constellation-config-fetch-measurements): Fetch measurements for configured cloud provider and image + * [instance-types](#constellation-config-instance-types): Print the supported instance types for all cloud providers + * [kubernetes-versions](#constellation-config-kubernetes-versions): Print the Kubernetes versions supported by this CLI + * [migrate](#constellation-config-migrate): Migrate a configuration file to a new version +* [create](#constellation-create): Create instances on a cloud platform for your Constellation cluster +* [apply](#constellation-apply): Apply a configuration to a Constellation cluster +* [mini](#constellation-mini): Manage MiniConstellation clusters + * [up](#constellation-mini-up): Create and initialize a new MiniConstellation cluster + * [down](#constellation-mini-down): Destroy a MiniConstellation cluster +* [status](#constellation-status): Show status of a Constellation cluster +* [verify](#constellation-verify): Verify the confidential properties of a Constellation cluster +* [upgrade](#constellation-upgrade): Find and apply upgrades to your Constellation cluster + * [check](#constellation-upgrade-check): Check for possible upgrades + * [apply](#constellation-upgrade-apply): Apply an upgrade to a Constellation cluster +* [recover](#constellation-recover): Recover a completely stopped Constellation cluster +* [terminate](#constellation-terminate): Terminate a Constellation cluster +* [iam](#constellation-iam): Work with the IAM configuration on your cloud provider + * [create](#constellation-iam-create): Create IAM configuration on a cloud platform for your Constellation cluster + * [aws](#constellation-iam-create-aws): Create IAM configuration on AWS for your Constellation cluster + * [azure](#constellation-iam-create-azure): Create IAM configuration on Microsoft Azure for your Constellation cluster + * [gcp](#constellation-iam-create-gcp): Create IAM configuration on GCP for your Constellation cluster + * [destroy](#constellation-iam-destroy): Destroy an IAM configuration and delete local Terraform files + * [upgrade](#constellation-iam-upgrade): Find and apply upgrades to your IAM profile + * [apply](#constellation-iam-upgrade-apply): Apply an upgrade to an IAM profile +* [version](#constellation-version): Display version of this CLI +* [init](#constellation-init): Initialize the Constellation cluster + +## constellation config + +Work with the Constellation configuration file + +### Synopsis + +Work with the Constellation configuration file. + +### Options + +``` + -h, --help help for config +``` + +### Options inherited from parent commands + +``` + --debug enable debug logging + --force disable version compatibility checks - might result in corrupted clusters + --tf-log string Terraform log level (default "NONE") + -C, --workspace string path to the Constellation workspace +``` + +## constellation config generate + +Generate a default configuration and state file + +### Synopsis + +Generate a default configuration and state file for your selected cloud provider. + +``` +constellation config generate {aws|azure|gcp|openstack|qemu|stackit} [flags] +``` + +### Options + +``` + -a, --attestation string attestation variant to use {aws-sev-snp|aws-nitro-tpm|azure-sev-snp|azure-tdx|azure-trustedlaunch|gcp-sev-snp|gcp-sev-es|qemu-vtpm}. If not specified, the default for the cloud provider is used + -h, --help help for generate + -k, --kubernetes string Kubernetes version to use in format MAJOR.MINOR (default "v1.29") + -t, --tags strings additional tags for created resources given a list of key=value +``` + +### Options inherited from parent commands + +``` + --debug enable debug logging + --force disable version compatibility checks - might result in corrupted clusters + --tf-log string Terraform log level (default "NONE") + -C, --workspace string path to the Constellation workspace +``` + +## constellation config fetch-measurements + +Fetch measurements for configured cloud provider and image + +### Synopsis + +Fetch measurements for configured cloud provider and image. + +A config needs to be generated first. + +``` +constellation config fetch-measurements [flags] +``` + +### Options + +``` + -h, --help help for fetch-measurements + -s, --signature-url string alternative URL to fetch measurements' signature from + -u, --url string alternative URL to fetch measurements from +``` + +### Options inherited from parent commands + +``` + --debug enable debug logging + --force disable version compatibility checks - might result in corrupted clusters + --tf-log string Terraform log level (default "NONE") + -C, --workspace string path to the Constellation workspace +``` + +## constellation config instance-types + +Print the supported instance types for all cloud providers + +### Synopsis + +Print the supported instance types for all cloud providers. + +``` +constellation config instance-types [flags] +``` + +### Options + +``` + -h, --help help for instance-types +``` + +### Options inherited from parent commands + +``` + --debug enable debug logging + --force disable version compatibility checks - might result in corrupted clusters + --tf-log string Terraform log level (default "NONE") + -C, --workspace string path to the Constellation workspace +``` + +## constellation config kubernetes-versions + +Print the Kubernetes versions supported by this CLI + +### Synopsis + +Print the Kubernetes versions supported by this CLI. + +``` +constellation config kubernetes-versions [flags] +``` + +### Options + +``` + -h, --help help for kubernetes-versions +``` + +### Options inherited from parent commands + +``` + --debug enable debug logging + --force disable version compatibility checks - might result in corrupted clusters + --tf-log string Terraform log level (default "NONE") + -C, --workspace string path to the Constellation workspace +``` + +## constellation config migrate + +Migrate a configuration file to a new version + +### Synopsis + +Migrate a configuration file to a new version. + +``` +constellation config migrate [flags] +``` + +### Options + +``` + -h, --help help for migrate +``` + +### Options inherited from parent commands + +``` + --debug enable debug logging + --force disable version compatibility checks - might result in corrupted clusters + --tf-log string Terraform log level (default "NONE") + -C, --workspace string path to the Constellation workspace +``` + +## constellation create + +Create instances on a cloud platform for your Constellation cluster + +### Synopsis + +Create instances on a cloud platform for your Constellation cluster. + +``` +constellation create [flags] +``` + +### Options + +``` + -h, --help help for create + -y, --yes create the cluster without further confirmation +``` + +### Options inherited from parent commands + +``` + --debug enable debug logging + --force disable version compatibility checks - might result in corrupted clusters + --tf-log string Terraform log level (default "NONE") + -C, --workspace string path to the Constellation workspace +``` + +## constellation apply + +Apply a configuration to a Constellation cluster + +### Synopsis + +Apply a configuration to a Constellation cluster to initialize or upgrade the cluster. + +``` +constellation apply [flags] +``` + +### Options + +``` + --conformance enable conformance mode + -h, --help help for apply + --merge-kubeconfig merge Constellation kubeconfig file with default kubeconfig file in $HOME/.kube/config + --skip-helm-wait install helm charts without waiting for deployments to be ready + --skip-phases strings comma-separated list of upgrade phases to skip + one or multiple of { infrastructure | init | attestationconfig | certsans | helm | image | k8s } + -y, --yes run command without further confirmation + WARNING: the command might delete or update existing resources without additional checks. Please read the docs. + +``` + +### Options inherited from parent commands + +``` + --debug enable debug logging + --force disable version compatibility checks - might result in corrupted clusters + --tf-log string Terraform log level (default "NONE") + -C, --workspace string path to the Constellation workspace +``` + +## constellation mini + +Manage MiniConstellation clusters + +### Synopsis + +Manage MiniConstellation clusters. + +### Options + +``` + -h, --help help for mini +``` + +### Options inherited from parent commands + +``` + --debug enable debug logging + --force disable version compatibility checks - might result in corrupted clusters + --tf-log string Terraform log level (default "NONE") + -C, --workspace string path to the Constellation workspace +``` + +## constellation mini up + +Create and initialize a new MiniConstellation cluster + +### Synopsis + +Create and initialize a new MiniConstellation cluster. + +A mini cluster consists of a single control-plane and worker node, hosted using QEMU/KVM. + +``` +constellation mini up [flags] +``` + +### Options + +``` + -h, --help help for up + --merge-kubeconfig merge Constellation kubeconfig file with default kubeconfig file in $HOME/.kube/config (default true) +``` + +### Options inherited from parent commands + +``` + --debug enable debug logging + --force disable version compatibility checks - might result in corrupted clusters + --tf-log string Terraform log level (default "NONE") + -C, --workspace string path to the Constellation workspace +``` + +## constellation mini down + +Destroy a MiniConstellation cluster + +### Synopsis + +Destroy a MiniConstellation cluster. + +``` +constellation mini down [flags] +``` + +### Options + +``` + -h, --help help for down + -y, --yes terminate the cluster without further confirmation +``` + +### Options inherited from parent commands + +``` + --debug enable debug logging + --force disable version compatibility checks - might result in corrupted clusters + --tf-log string Terraform log level (default "NONE") + -C, --workspace string path to the Constellation workspace +``` + +## constellation status + +Show status of a Constellation cluster + +### Synopsis + +Show the status of a constellation cluster. + +Shows microservice, image, and Kubernetes versions installed in the cluster. Also shows status of current version upgrades. + +``` +constellation status [flags] +``` + +### Options + +``` + -h, --help help for status +``` + +### Options inherited from parent commands + +``` + --debug enable debug logging + --force disable version compatibility checks - might result in corrupted clusters + --tf-log string Terraform log level (default "NONE") + -C, --workspace string path to the Constellation workspace +``` + +## constellation verify + +Verify the confidential properties of a Constellation cluster + +### Synopsis + +Verify the confidential properties of a Constellation cluster. +If arguments aren't specified, values are read from `constellation-state.yaml`. + +``` +constellation verify [flags] +``` + +### Options + +``` + --cluster-id string expected cluster identifier + -h, --help help for verify + -e, --node-endpoint string endpoint of the node to verify, passed as HOST[:PORT] + -o, --output string print the attestation document in the output format {json|raw} +``` + +### Options inherited from parent commands + +``` + --debug enable debug logging + --force disable version compatibility checks - might result in corrupted clusters + --tf-log string Terraform log level (default "NONE") + -C, --workspace string path to the Constellation workspace +``` + +## constellation upgrade + +Find and apply upgrades to your Constellation cluster + +### Synopsis + +Find and apply upgrades to your Constellation cluster. + +### Options + +``` + -h, --help help for upgrade +``` + +### Options inherited from parent commands + +``` + --debug enable debug logging + --force disable version compatibility checks - might result in corrupted clusters + --tf-log string Terraform log level (default "NONE") + -C, --workspace string path to the Constellation workspace +``` + +## constellation upgrade check + +Check for possible upgrades + +### Synopsis + +Check which upgrades can be applied to your Constellation Cluster. + +``` +constellation upgrade check [flags] +``` + +### Options + +``` + -h, --help help for check + --ref string the reference to use for querying new versions (default "-") + --stream string the stream to use for querying new versions (default "stable") + -u, --update-config update the specified config file with the suggested versions +``` + +### Options inherited from parent commands + +``` + --debug enable debug logging + --force disable version compatibility checks - might result in corrupted clusters + --tf-log string Terraform log level (default "NONE") + -C, --workspace string path to the Constellation workspace +``` + +## constellation upgrade apply + +Apply an upgrade to a Constellation cluster + +### Synopsis + +Apply an upgrade to a Constellation cluster by applying the chosen configuration. + +``` +constellation upgrade apply [flags] +``` + +### Options + +``` + --conformance enable conformance mode + -h, --help help for apply + --skip-helm-wait install helm charts without waiting for deployments to be ready + --skip-phases strings comma-separated list of upgrade phases to skip + one or multiple of { infrastructure | helm | image | k8s } + -y, --yes run upgrades without further confirmation + WARNING: might delete your resources in case you are using cert-manager in your cluster. Please read the docs. + WARNING: might unintentionally overwrite measurements in the running cluster. +``` + +### Options inherited from parent commands + +``` + --debug enable debug logging + --force disable version compatibility checks - might result in corrupted clusters + --tf-log string Terraform log level (default "NONE") + -C, --workspace string path to the Constellation workspace +``` + +## constellation recover + +Recover a completely stopped Constellation cluster + +### Synopsis + +Recover a Constellation cluster by sending a recovery key to an instance in the boot stage. + +This is only required if instances restart without other instances available for bootstrapping. + +``` +constellation recover [flags] +``` + +### Options + +``` + -e, --endpoint string endpoint of the instance, passed as HOST[:PORT] + -h, --help help for recover +``` + +### Options inherited from parent commands + +``` + --debug enable debug logging + --force disable version compatibility checks - might result in corrupted clusters + --tf-log string Terraform log level (default "NONE") + -C, --workspace string path to the Constellation workspace +``` + +## constellation terminate + +Terminate a Constellation cluster + +### Synopsis + +Terminate a Constellation cluster. + +The cluster can't be started again, and all persistent storage will be lost. + +``` +constellation terminate [flags] +``` + +### Options + +``` + -h, --help help for terminate + -y, --yes terminate the cluster without further confirmation +``` + +### Options inherited from parent commands + +``` + --debug enable debug logging + --force disable version compatibility checks - might result in corrupted clusters + --tf-log string Terraform log level (default "NONE") + -C, --workspace string path to the Constellation workspace +``` + +## constellation iam + +Work with the IAM configuration on your cloud provider + +### Synopsis + +Work with the IAM configuration on your cloud provider. + +### Options + +``` + -h, --help help for iam +``` + +### Options inherited from parent commands + +``` + --debug enable debug logging + --force disable version compatibility checks - might result in corrupted clusters + --tf-log string Terraform log level (default "NONE") + -C, --workspace string path to the Constellation workspace +``` + +## constellation iam create + +Create IAM configuration on a cloud platform for your Constellation cluster + +### Synopsis + +Create IAM configuration on a cloud platform for your Constellation cluster. + +### Options + +``` + -h, --help help for create + --update-config update the config file with the specific IAM information + -y, --yes create the IAM configuration without further confirmation +``` + +### Options inherited from parent commands + +``` + --debug enable debug logging + --force disable version compatibility checks - might result in corrupted clusters + --tf-log string Terraform log level (default "NONE") + -C, --workspace string path to the Constellation workspace +``` + +## constellation iam create aws + +Create IAM configuration on AWS for your Constellation cluster + +### Synopsis + +Create IAM configuration on AWS for your Constellation cluster. + +``` +constellation iam create aws [flags] +``` + +### Options + +``` + -h, --help help for aws + --prefix string name prefix for all resources (required) + --zone string AWS availability zone the resources will be created in, e.g., us-east-2a (required) + See the Constellation docs for a list of currently supported regions. +``` + +### Options inherited from parent commands + +``` + --debug enable debug logging + --force disable version compatibility checks - might result in corrupted clusters + --tf-log string Terraform log level (default "NONE") + --update-config update the config file with the specific IAM information + -C, --workspace string path to the Constellation workspace + -y, --yes create the IAM configuration without further confirmation +``` + +## constellation iam create azure + +Create IAM configuration on Microsoft Azure for your Constellation cluster + +### Synopsis + +Create IAM configuration on Microsoft Azure for your Constellation cluster. + +``` +constellation iam create azure [flags] +``` + +### Options + +``` + -h, --help help for azure + --region string region the resources will be created in, e.g., westus (required) + --resourceGroup string name prefix of the two resource groups your cluster / IAM resources will be created in (required) + --servicePrincipal string name of the service principal that will be created (required) + --subscriptionID string subscription ID of the Azure account. Required if the 'ARM_SUBSCRIPTION_ID' environment variable is not set +``` + +### Options inherited from parent commands + +``` + --debug enable debug logging + --force disable version compatibility checks - might result in corrupted clusters + --tf-log string Terraform log level (default "NONE") + --update-config update the config file with the specific IAM information + -C, --workspace string path to the Constellation workspace + -y, --yes create the IAM configuration without further confirmation +``` + +## constellation iam create gcp + +Create IAM configuration on GCP for your Constellation cluster + +### Synopsis + +Create IAM configuration on GCP for your Constellation cluster. + +``` +constellation iam create gcp [flags] +``` + +### Options + +``` + -h, --help help for gcp + --projectID string ID of the GCP project the configuration will be created in (required) + Find it on the welcome screen of your project: https://console.cloud.google.com/welcome + --serviceAccountID string ID for the service account that will be created (required) + Must be 6 to 30 lowercase letters, digits, or hyphens. + --zone string GCP zone the cluster will be deployed in (required) + Find a list of available zones here: https://cloud.google.com/compute/docs/regions-zones#available +``` + +### Options inherited from parent commands + +``` + --debug enable debug logging + --force disable version compatibility checks - might result in corrupted clusters + --tf-log string Terraform log level (default "NONE") + --update-config update the config file with the specific IAM information + -C, --workspace string path to the Constellation workspace + -y, --yes create the IAM configuration without further confirmation +``` + +## constellation iam destroy + +Destroy an IAM configuration and delete local Terraform files + +### Synopsis + +Destroy an IAM configuration and delete local Terraform files. + +``` +constellation iam destroy [flags] +``` + +### Options + +``` + -h, --help help for destroy + -y, --yes destroy the IAM configuration without asking for confirmation +``` + +### Options inherited from parent commands + +``` + --debug enable debug logging + --force disable version compatibility checks - might result in corrupted clusters + --tf-log string Terraform log level (default "NONE") + -C, --workspace string path to the Constellation workspace +``` + +## constellation iam upgrade + +Find and apply upgrades to your IAM profile + +### Synopsis + +Find and apply upgrades to your IAM profile. + +### Options + +``` + -h, --help help for upgrade +``` + +### Options inherited from parent commands + +``` + --debug enable debug logging + --force disable version compatibility checks - might result in corrupted clusters + --tf-log string Terraform log level (default "NONE") + -C, --workspace string path to the Constellation workspace +``` + +## constellation iam upgrade apply + +Apply an upgrade to an IAM profile + +### Synopsis + +Apply an upgrade to an IAM profile. + +``` +constellation iam upgrade apply [flags] +``` + +### Options + +``` + -h, --help help for apply + -y, --yes run upgrades without further confirmation +``` + +### Options inherited from parent commands + +``` + --debug enable debug logging + --force disable version compatibility checks - might result in corrupted clusters + --tf-log string Terraform log level (default "NONE") + -C, --workspace string path to the Constellation workspace +``` + +## constellation version + +Display version of this CLI + +### Synopsis + +Display version of this CLI. + +``` +constellation version [flags] +``` + +### Options + +``` + -h, --help help for version +``` + +### Options inherited from parent commands + +``` + --debug enable debug logging + --force disable version compatibility checks - might result in corrupted clusters + --tf-log string Terraform log level (default "NONE") + -C, --workspace string path to the Constellation workspace +``` + +## constellation init + +Initialize the Constellation cluster + +### Synopsis + +Initialize the Constellation cluster. + +Start your confidential Kubernetes. + +``` +constellation init [flags] +``` + +### Options + +``` + --conformance enable conformance mode + -h, --help help for init + --merge-kubeconfig merge Constellation kubeconfig file with default kubeconfig file in $HOME/.kube/config + --skip-helm-wait install helm charts without waiting for deployments to be ready +``` + +### Options inherited from parent commands + +``` + --debug enable debug logging + --force disable version compatibility checks - might result in corrupted clusters + --tf-log string Terraform log level (default "NONE") + -C, --workspace string path to the Constellation workspace +``` + diff --git a/docs/versioned_docs/version-2.20/reference/migration.md b/docs/versioned_docs/version-2.20/reference/migration.md new file mode 100644 index 000000000..0252c409f --- /dev/null +++ b/docs/versioned_docs/version-2.20/reference/migration.md @@ -0,0 +1,128 @@ +# Migrations + +This document describes breaking changes and migrations between Constellation releases. +Use [`constellation config migrate`](./cli.md#constellation-config-migrate) to automatically update an old config file to a new format. + +## Migrations to v2.19.1 + +### Azure + +* During the upgrade, security rules are migrated and the old ones need to be cleaned up manually by the user. The below script shows how to delete them through the Azure CLI: + +```bash +#!/usr/bin/env bash +name="" # the name provided in the config +uid="" # the cluster id can be retrieved via `yq '.infrastructure.uid' constellation-state.yaml` +resource_group="" # the RG can be retrieved via `yq '.provider.azure.resourceGroup' constellation-conf.yaml` + +rules=( + "kubernetes" + "bootstrapper" + "verify" + "recovery" + "join" + "debugd" + "konnectivity" +) + +for rule in "${rules[@]}"; do + echo "Deleting rule: ${rule}" + az network nsg rule delete \ + --resource-group "${resource_group}" \ + --nsg-name "${name}-${uid}" \ + --name "${rule}" +done + +echo "All specified rules have been deleted." +``` + +## Migrations to v2.19.0 + +### Azure + +* To allow seamless upgrades on Azure when Kubernetes services of type `LoadBalancer` are deployed, the target + load balancer in which the `cloud-controller-manager` creates load balancing rules was changed. Instead of using the load balancer + created and maintained by the CLI's Terraform code, the `cloud-controller-manager` now creates its own load balancer in Azure. + If your Constellation has services of type `LoadBalancer`, please remove them before the upgrade and re-apply them + afterward. + +## Migrating from Azure's service principal authentication to managed identity authentication (during the upgrade to Constellation v2.8.0) + +* The `provider.azure.appClientID` and `provider.azure.appClientSecret` fields are no longer supported and should be removed. +* To keep using an existing UAMI, add the `Owner` permission with the scope of your `resourceGroup`. +* Otherwise, simply [create new Constellation IAM credentials](../workflows/config.md#creating-an-iam-configuration) and use the created UAMI. +* To migrate the authentication for an existing cluster on Azure to an UAMI with the necessary permissions: + 1. Remove the `aadClientId` and `aadClientSecret` from the azureconfig secret. + 2. Set `useManagedIdentityExtension` to `true` and use the `userAssignedIdentity` from the Constellation config for the value of `userAssignedIdentityID`. + 3. Restart the CSI driver, cloud controller manager, cluster autoscaler, and Constellation operator pods. + +## Migrating from CLI versions before 2.10 + +* AWS cluster upgrades require additional IAM permissions for the newly introduced `aws-load-balancer-controller`. Please upgrade your IAM roles using `iam upgrade apply`. This will show necessary changes and apply them, if desired. +* The global `nodeGroups` field was added. +* The fields `instanceType`, `stateDiskSizeGB`, and `stateDiskType` for each cloud provider are now part of the configuration of individual node groups. +* The `constellation create` command no longer uses the flags `--control-plane-count` and `--worker-count`. Instead, the initial node count is configured per node group in the `nodeGroups` field. + +## Migrating from CLI versions before 2.9 + +* The `provider.azure.appClientID` and `provider.azure.clientSecretValue` fields were removed to enforce migration to managed identity authentication + +## Migrating from CLI versions before 2.8 + +* The `measurements` field for each cloud service provider was replaced with a global `attestation` field. +* The `confidentialVM`, `idKeyDigest`, and `enforceIdKeyDigest` fields for the Azure cloud service provider were removed in favor of using the global `attestation` field. +* The optional global field `attestationVariant` was replaced by the now required `attestation` field. + +## Migrating from CLI versions before 2.3 + +* The `sshUsers` field was deprecated in v2.2 and has been removed from the configuration in v2.3. + As an alternative for SSH, check the workflow section [Connect to nodes](../workflows/troubleshooting.md#node-shell-access). +* The `image` field for each cloud service provider has been replaced with a global `image` field. Use the following mapping to migrate your configuration: +
    + Show all + + | CSP | old image | new image | + | ----- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------- | + | AWS | `ami-06b8cbf4837a0a57c` | `v2.2.2` | + | AWS | `ami-02e96dc04a9e438cd` | `v2.2.2` | + | AWS | `ami-028ead928a9034b2f` | `v2.2.2` | + | AWS | `ami-032ac10dd8d8266e3` | `v2.2.1` | + | AWS | `ami-032e0d57cc4395088` | `v2.2.1` | + | AWS | `ami-053c3e49e19b96bdd` | `v2.2.1` | + | AWS | `ami-0e27ebcefc38f648b` | `v2.2.0` | + | AWS | `ami-098cd37f66523b7c3` | `v2.2.0` | + | AWS | `ami-04a87d302e2509aad` | `v2.2.0` | + | Azure | `/subscriptions/0d202bbb-4fa7-4af8-8125-58c269a05435/resourceGroups/constellation-images/providers/Microsoft.Compute/galleries/Constellation/images/constellation/versions/2.2.2` | `v2.2.2` | + | Azure | `/subscriptions/0d202bbb-4fa7-4af8-8125-58c269a05435/resourceGroups/constellation-images/providers/Microsoft.Compute/galleries/Constellation_CVM/images/constellation/versions/2.2.2` | `v2.2.2` | + | Azure | `/subscriptions/0d202bbb-4fa7-4af8-8125-58c269a05435/resourceGroups/constellation-images/providers/Microsoft.Compute/galleries/Constellation/images/constellation/versions/2.2.1` | `v2.2.1` | + | Azure | `/subscriptions/0d202bbb-4fa7-4af8-8125-58c269a05435/resourceGroups/constellation-images/providers/Microsoft.Compute/galleries/Constellation_CVM/images/constellation/versions/2.2.1` | `v2.2.1` | + | Azure | `/subscriptions/0d202bbb-4fa7-4af8-8125-58c269a05435/resourceGroups/constellation-images/providers/Microsoft.Compute/galleries/Constellation/images/constellation/versions/2.2.0` | `v2.2.0` | + | Azure | `/subscriptions/0d202bbb-4fa7-4af8-8125-58c269a05435/resourceGroups/constellation-images/providers/Microsoft.Compute/galleries/Constellation_CVM/images/constellation/versions/2.2.0` | `v2.2.0` | + | Azure | `/subscriptions/0d202bbb-4fa7-4af8-8125-58c269a05435/resourceGroups/constellation-images/providers/Microsoft.Compute/galleries/Constellation/images/constellation/versions/2.1.0` | `v2.1.0` | + | Azure | `/subscriptions/0d202bbb-4fa7-4af8-8125-58c269a05435/resourceGroups/constellation-images/providers/Microsoft.Compute/galleries/Constellation_CVM/images/constellation/versions/2.1.0` | `v2.1.0` | + | Azure | `/subscriptions/0d202bbb-4fa7-4af8-8125-58c269a05435/resourceGroups/constellation-images/providers/Microsoft.Compute/galleries/Constellation/images/constellation/versions/2.0.0` | `v2.0.0` | + | Azure | `/subscriptions/0d202bbb-4fa7-4af8-8125-58c269a05435/resourceGroups/constellation-images/providers/Microsoft.Compute/galleries/Constellation_CVM/images/constellation/versions/2.0.0` | `v2.0.0` | + | GCP | `projects/constellation-images/global/images/constellation-v2-2-2` | `v2.2.2` | + | GCP | `projects/constellation-images/global/images/constellation-v2-2-1` | `v2.2.1` | + | GCP | `projects/constellation-images/global/images/constellation-v2-2-0` | `v2.2.0` | + | GCP | `projects/constellation-images/global/images/constellation-v2-1-0` | `v2.1.0` | + | GCP | `projects/constellation-images/global/images/constellation-v2-0-0` | `v2.0.0` | + +
    +* The `enforcedMeasurements` field has been removed and merged with the `measurements` field. + * To migrate your config containing a new image (`v2.3` or greater), remove the old `measurements` and `enforcedMeasurements` entries from your config and run `constellation fetch-measurements` + * To migrate your config containing an image older than `v2.3`, remove the `enforcedMeasurements` entry and replace the entries in `measurements` as shown in the example below: + + ```diff + measurements: + - 0: DzXCFGCNk8em5ornNZtKi+Wg6Z7qkQfs5CfE3qTkOc8= + + 0: + + expected: DzXCFGCNk8em5ornNZtKi+Wg6Z7qkQfs5CfE3qTkOc8= + + warnOnly: true + - 8: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= + + 8: + + expected: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= + + warnOnly: false + -enforcedMeasurements: + - - 8 + ``` diff --git a/docs/versioned_docs/version-2.20/reference/slsa.md b/docs/versioned_docs/version-2.20/reference/slsa.md new file mode 100644 index 000000000..21f4e713c --- /dev/null +++ b/docs/versioned_docs/version-2.20/reference/slsa.md @@ -0,0 +1,73 @@ +# Supply chain levels for software artifacts (SLSA) adoption + +[Supply chain Levels for Software Artifacts, or SLSA (salsa)](https://slsa.dev/) is a framework for improving and grading a project's build system and engineering processes. SLSA focuses on security improvements for source code storage as well as build system definition, execution, and observation. SLSA is structured in [four levels](https://slsa.dev/spec/v0.1/levels). This page describes the adoption of SLSA for Constellation. + +:::info +SLSA is still in alpha status. The presented levels and their requirements might change in the future. We will adopt any changes into our engineering processes, as they get defined. +::: + +## Level 1 - Adopted + +**[Build - Scripted](https://slsa.dev/spec/v0.1/requirements#scripted-build)** + +All build steps are automated via [Bazel](https://github.com/edgelesssys/constellation/tree/main/bazel/ci) and [GitHub Actions](https://github.com/edgelesssys/constellation/tree/main/.github). + +**[Provenance - Available](https://slsa.dev/spec/v0.1/requirements#available)** + +Provenance for the CLI is generated using the [slsa-github-generator](https://github.com/slsa-framework/slsa-github-generator). + +## Level 2 - Adopted + +**[Source - Version Controlled](https://slsa.dev/spec/v0.1/requirements#version-controlled)** + +Constellation is hosted on GitHub using git. + +**[Build - Build Service](https://slsa.dev/spec/v0.1/requirements#build-service)** + +All builds are carried out by [GitHub Actions](https://github.com/edgelesssys/constellation/tree/main/.github). + +**[Provenance - Authenticated](https://slsa.dev/spec/v0.1/requirements#authenticated)** + +Provenance for the CLI is signed using the [slsa-github-generator](https://github.com/slsa-framework/slsa-github-generator). Learn [how to verify the CLI](../workflows/verify-cli.md) using the signed provenance, before using it for the first time. + +**[Provenance - Service Generated](https://slsa.dev/spec/v0.1/requirements#service-generated)** + +Provenance for the CLI is generated using the [slsa-github-generator](https://github.com/slsa-framework/slsa-github-generator) in GitHub Actions. + +## Level 3 - Adopted + +**[Source - Verified History](https://slsa.dev/spec/v0.1/requirements#verified-history)** + +The [Edgeless Systems](https://github.com/edgelesssys) GitHub organization [requires two-factor authentication](https://docs.github.com/en/organizations/keeping-your-organization-secure/managing-two-factor-authentication-for-your-organization/requiring-two-factor-authentication-in-your-organization) for all members. + +**[Source - Retained Indefinitely](https://slsa.dev/spec/v0.1/requirements#retained-indefinitely)** + +Since we use GitHub to host the repository, an external person can't modify or delete the history. Before a pull request can be merged, an explicit approval from an [Edgeless Systems](https://github.com/edgelesssys) team member is required. + +The same holds true for changes proposed by team members. Each change to `main` needs to be proposed via a pull request and requires at least one approval. + +The [Edgeless Systems](https://github.com/edgelesssys) GitHub organization admins control these settings and are able to make changes to the repository's history should legal requirements necessitate it. These changes require two-party approval following the obliterate policy. + +**[Build - Build as Code](https://slsa.dev/spec/v0.1/requirements#build-as-code)** + +All build files for Constellation are stored in [the same repository](https://github.com/edgelesssys/constellation/tree/main/.github). + +**[Build - Ephemeral Environment](https://slsa.dev/spec/v0.1/requirements#ephemeral-environment)** + +All GitHub Action workflows are executed on [GitHub-hosted runners](https://docs.github.com/en/actions/using-github-hosted-runners/about-github-hosted-runners). These runners are only available during workflow. + +We currently don't use [self-hosted runners](https://docs.github.com/en/actions/hosting-your-own-runners/about-self-hosted-runners). + +**[Build - Isolated](https://slsa.dev/spec/v0.1/requirements#isolated)** + +As outlined in the previous section, we use GitHub-hosted runners, which provide a new, isolated and ephemeral environment for each build. + +Additionally, the [SLSA GitHub generator](https://github.com/slsa-framework/slsa-github-generator#generation-of-provenance) itself is run in an isolated workflow with the artifact hash as defined inputs. + +**[Provenance - Non-falsifiable](https://slsa.dev/spec/v0.1/requirements#non-falsifiable)** + +As outlined by [SLSA GitHub generator](https://github.com/slsa-framework/slsa-github-generator) it already fulfills the non-falsifiable requirements for SLSA Level 3. The generated provenance is signed using [sigstore](https://sigstore.dev/) with an OIDC based proof of identity. + +## Level 4 - In Progress + +We strive to adopt certain aspect of SLSA Level 4 that support our engineering process. At the same time, SLSA is still in alpha status and the biggest changes to SLSA are expected to be around Level 4. diff --git a/docs/versioned_docs/version-2.20/reference/terraform.md b/docs/versioned_docs/version-2.20/reference/terraform.md new file mode 100644 index 000000000..9825a8bb8 --- /dev/null +++ b/docs/versioned_docs/version-2.20/reference/terraform.md @@ -0,0 +1,37 @@ +# Terraform usage + +[Terraform](https://www.terraform.io/) is an Infrastructure as Code (IaC) framework to manage cloud resources. This page explains how Constellation uses it internally and how advanced users may manually use it to have more control over the resource creation. + +:::info +Information on this page is intended for users who are familiar with Terraform. +It's not required for common usage of Constellation. +See the [Terraform documentation](https://developer.hashicorp.com/terraform/docs) if you want to learn more about it. +::: + +## Terraform state files + +Constellation keeps Terraform state files in subdirectories of the workspace together with the corresponding Terraform configuration files and metadata. +The subdirectories are created on the first Constellation CLI action that uses Terraform internally. + +Currently, these subdirectories are: + +* `constellation-terraform` - Terraform state files for the resources of the Constellation cluster +* `constellation-iam-terraform` - Terraform state files for IAM configuration + +As with all commands, commands that work with these files (e.g., `apply`, `terminate`, `iam`) have to be executed from the root of the cluster's [workspace directory](../architecture/orchestration.md#workspaces). You usually don't need and shouldn't manipulate or delete the subdirectories manually. + +## Interacting with Terraform manually + +Manual interaction with Terraform state created by Constellation (i.e., via the Terraform CLI) should only be performed by experienced users. It may lead to unrecoverable loss of cloud resources. For the majority of users and use cases, the interaction done by the [Constellation CLI](cli.md) is sufficient. + +## Terraform debugging + +To debug Terraform issues, the Constellation CLI offers the `tf-log` flag. You can set it to any of [Terraform's log levels](https://developer.hashicorp.com/terraform/internals/debugging): +* `JSON` (JSON-formatted logs at `TRACE` level) +* `TRACE` +* `DEBUG` +* `INFO` +* `WARN` +* `ERROR` + +The log output is written to the `terraform.log` file in the workspace directory. The output is appended to the file on each run. diff --git a/docs/versioned_docs/version-2.20/workflows/cert-manager.md b/docs/versioned_docs/version-2.20/workflows/cert-manager.md new file mode 100644 index 000000000..1d847e8bf --- /dev/null +++ b/docs/versioned_docs/version-2.20/workflows/cert-manager.md @@ -0,0 +1,13 @@ +# Install cert-manager + +:::caution +If you want to use cert-manager with Constellation, pay attention to the following to avoid potential pitfalls. +::: + +Constellation ships with cert-manager preinstalled. +The default installation is part of the `kube-system` namespace, as all other Constellation-managed microservices. +You are free to install more instances of cert-manager into other namespaces. +However, be aware that any new installation needs to use the same version as the one installed with Constellation or rely on the same CRD versions. +Also remember to set the `installCRDs` value to `false` when installing new cert-manager instances. +It will create problems if you have two installations of cert-manager depending on different versions of the installed CRDs. +CRDs are cluster-wide resources and cert-manager depends on specific versions of those CRDs for each release. diff --git a/docs/versioned_docs/version-2.20/workflows/config.md b/docs/versioned_docs/version-2.20/workflows/config.md new file mode 100644 index 000000000..95f791acd --- /dev/null +++ b/docs/versioned_docs/version-2.20/workflows/config.md @@ -0,0 +1,353 @@ +# Configure your cluster + +:::info +This recording presents the essence of this page. It's recommended to read it in full for the motivation and all details. +::: + + + +--- + +Before you can create your cluster, you need to configure the identity and access management (IAM) for your cloud service provider (CSP) and choose machine types for the nodes. + +## Creating the configuration file + +You can generate a configuration file for your CSP by using the following CLI command: + + + + +```bash +constellation config generate aws +``` + + + + +```bash +constellation config generate azure +``` + + + + +```bash +constellation config generate gcp +``` + + + + +```bash +constellation config generate stackit +``` + + + + +This creates the file `constellation-conf.yaml` in the current directory. + +## Choosing a VM type + +Constellation supports the following VM types: + + + +By default, Constellation uses `m6a.xlarge` VMs (4 vCPUs, 16 GB RAM) to create your cluster. +Optionally, you can switch to a different VM type by modifying `instanceType` in the configuration file. +If you are using the default attestation variant `awsSEVSNP`, you can use the instance types described in [AWS's AMD SEV-SNP docs](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/snp-requirements.html). +Please mind the region restrictions mentioned in the [Getting started](../getting-started/first-steps.md#create-a-cluster) section. + +If you are using the attestation variant `awsNitroTPM`, you can choose any of the [nitroTPM-enabled instance types](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/enable-nitrotpm-prerequisites.html). + +The Constellation CLI can also print the supported instance types with: `constellation config instance-types`. + + + + +By default, Constellation uses `Standard_DC4as_v5` CVMs (4 vCPUs, 16 GB RAM) to create your cluster. Optionally, you can switch to a different VM type by modifying `instanceType` in the configuration file. For CVMs, any VM type with a minimum of 4 vCPUs from the [DCasv5 & DCadsv5](https://docs.microsoft.com/en-us/azure/virtual-machines/dcasv5-dcadsv5-series) or [ECasv5 & ECadsv5](https://docs.microsoft.com/en-us/azure/virtual-machines/ecasv5-ecadsv5-series) families is supported. + +You can also run `constellation config instance-types` to get the list of all supported options. + + + + +By default, Constellation uses `n2d-standard-4` VMs (4 vCPUs, 16 GB RAM) to create your cluster. Optionally, you can switch to a different VM type by modifying `instanceType` in the configuration file. Supported are all machines with a minimum of 4 vCPUs from the [C2D](https://cloud.google.com/compute/docs/compute-optimized-machines#c2d_machine_types) or [N2D](https://cloud.google.com/compute/docs/general-purpose-machines#n2d_machines) family. You can run `constellation config instance-types` to get the list of all supported options. + + + + +By default, Constellation uses `m1a.4cd` VMs (4 vCPUs, 30 GB RAM) to create your cluster. +Optionally, you can switch to a different VM type by modifying `instanceType` in the configuration file. + +The following instance types are known to be supported: + +| name | vCPUs | GB RAM | +|----------|-------|--------| +| m1a.4cd | 4 | 30 | +| m1a.8cd | 8 | 60 | +| m1a.16cd | 16 | 120 | +| m1a.30cd | 30 | 230 | + +You can choose any of the SEV-enabled instance types. You can find a list of all supported instance types in the [STACKIT documentation](https://docs.stackit.cloud/stackit/en/virtual-machine-flavors-75137231.html). + +The Constellation CLI can also print the supported instance types with: `constellation config instance-types`. + + + + +Fill the desired VM type into the `instanceType` fields in the `constellation-conf.yml` file. + +## Creating additional node groups + +By default, Constellation creates the node groups `control_plane_default` and `worker_default` for control-plane nodes and workers, respectively. +If you require additional control-plane or worker groups with different instance types, zone placements, or disk sizes, you can add additional node groups to the `constellation-conf.yml` file. +Each node group can be scaled individually. + +Consider the following example for AWS: + +```yaml +nodeGroups: + control_plane_default: + role: control-plane + instanceType: c6a.xlarge + stateDiskSizeGB: 30 + stateDiskType: gp3 + zone: eu-west-1c + initialCount: 3 + worker_default: + role: worker + instanceType: c6a.xlarge + stateDiskSizeGB: 30 + stateDiskType: gp3 + zone: eu-west-1c + initialCount: 2 + high_cpu: + role: worker + instanceType: c6a.24xlarge + stateDiskSizeGB: 128 + stateDiskType: gp3 + zone: eu-west-1c + initialCount: 1 +``` + +This configuration creates an additional node group `high_cpu` with a larger instance type and disk. + +You can use the field `zone` to specify what availability zone nodes of the group are placed in. +On Azure, this field is empty by default and nodes are automatically spread across availability zones. +STACKIT currently offers SEV-enabled CPUs in the `eu01-1`, `eu01-2`, and `eu01-3` zones. +Consult the documentation of your cloud provider for more information: + +* [AWS](https://aws.amazon.com/about-aws/global-infrastructure/regions_az/) +* [Azure](https://azure.microsoft.com/en-us/explore/global-infrastructure/availability-zones) +* [GCP](https://cloud.google.com/compute/docs/regions-zones) +* [STACKIT](https://docs.stackit.cloud/stackit/en/regions-and-availability-zones-75137212.html) + +## Choosing a Kubernetes version + +To learn which Kubernetes versions can be installed with your current CLI, you can run `constellation config kubernetes-versions`. +See also Constellation's [Kubernetes support policy](../architecture/versions.md#kubernetes-support-policy). + +## Creating an IAM configuration + +You can create an IAM configuration for your cluster automatically using the `constellation iam create` command. +If you already have a Constellation configuration file, you can add the `--update-config` flag to the command. This writes the needed IAM fields into your configuration. Furthermore, the flag updates the zone/region of the configuration if it hasn't been set yet. + + + + +You must be authenticated with the [AWS CLI](https://aws.amazon.com/en/cli/) in the shell session with a user that has the [required permissions for IAM creation](../getting-started/install.md#set-up-cloud-credentials). + +```bash +constellation iam create aws --zone=us-east-2a --prefix=constellTest +``` + +This command creates IAM configuration for the AWS zone `us-east-2a` using the prefix `constellTest` for all named resources being created. + +Constellation OS images are currently replicated to the following regions: + +* `eu-central-1` +* `eu-west-1` +* `eu-west-3` +* `us-east-2` +* `ap-south-1` + +If you require the OS image to be available in another region, [let us know](https://github.com/edgelesssys/constellation/issues/new?assignees=&labels=&template=feature_request.md&title=Support+new+AWS+image+region:+xx-xxxx-x). + +You can find a list of all [regions in AWS's documentation](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-regions-availability-zones.html#concepts-available-regions). + +Paste the output into the corresponding fields of the `constellation-conf.yaml` file. + + + + +You must be authenticated with the [Azure CLI](https://learn.microsoft.com/en-us/cli/azure/install-azure-cli) in the shell session with a user that has the [required permissions for IAM creation](../getting-started/install.md#set-up-cloud-credentials). + +```bash +constellation iam create azure --subscriptionID 00000000-0000-0000-0000-000000000000 --region=westus --resourceGroup=constellTest --servicePrincipal=spTest +``` + +This command creates IAM configuration on the Azure region `westus` creating a new resource group `constellTest` and a new service principal `spTest`. + +CVMs are available in several Azure regions. Constellation OS images are currently replicated to the following: + +* `germanywestcentral` +* `westus` +* `eastus` +* `northeurope` +* `westeurope` +* `southeastasia` + +If you require the OS image to be available in another region, [let us know](https://github.com/edgelesssys/constellation/issues/new?assignees=&labels=&template=feature_request.md&title=Support+new+Azure+image+region:+xx-xxxx-x). + +You can find a list of all [regions in Azure's documentation](https://azure.microsoft.com/en-us/global-infrastructure/services/?products=virtual-machines®ions=all). + +Paste the output into the corresponding fields of the `constellation-conf.yaml` file. + + + + +You must be authenticated with the [GCP CLI](https://cloud.google.com/sdk/gcloud) in the shell session with a user that has the [required permissions for IAM creation](../getting-started/install.md#set-up-cloud-credentials). + +```bash +constellation iam create gcp --projectID=yourproject-12345 --zone=europe-west2-a --serviceAccountID=constell-test +``` + +This command creates IAM configuration in the GCP project `yourproject-12345` on the GCP zone `europe-west2-a` creating a new service account `constell-test`. + +Note that only regions offering CVMs of the `C2D` or `N2D` series are supported. You can find a [list of all regions in Google's documentation](https://cloud.google.com/compute/docs/regions-zones#available), which you can filter by machine type `N2D`. + +Paste the output into the corresponding fields of the `constellation-conf.yaml` file. + + + + +STACKIT requires manual creation and configuration of service accounts. Look at the [first steps](../getting-started/first-steps.md) for more information. + + + + +
    +Alternatively, you can manually create the IAM configuration on your CSP. + +The following describes the configuration fields and how you obtain the required information or create the required resources. + + + + +* **region**: The name of your chosen AWS data center region, e.g., `us-east-2`. + + Constellation OS images are currently replicated to the following regions: + * `eu-central-1` + * `eu-west-1` + * `eu-west-3` + * `us-east-2` + * `ap-south-1` + + If you require the OS image to be available in another region, [let us know](https://github.com/edgelesssys/constellation/issues/new?assignees=&labels=&template=feature_request.md&title=Support+new+AWS+image+region:+xx-xxxx-x). + + You can find a list of all [regions in AWS's documentation](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-regions-availability-zones.html#concepts-available-regions). + +* **zone**: The name of your chosen AWS data center availability zone, e.g., `us-east-2a`. + + Learn more about [availability zones in AWS's documentation](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-regions-availability-zones.html#concepts-availability-zones). + +* **iamProfileControlPlane**: The name of an IAM instance profile attached to all control-plane nodes. + + You can create the resource with [Terraform](https://www.terraform.io/). For that, use the [provided Terraform script](https://github.com/edgelesssys/constellation/tree/release/v2.2/hack/terraform/aws/iam) to generate the necessary profile. The profile name will be provided as Terraform output value: `control_plane_instance_profile_name`. + + Alternatively, you can create the AWS profile with a tool of your choice. Use the JSON policy in [main.tf](https://github.com/edgelesssys/constellation/tree/release/v2.2/hack/terraform/aws/iam/main.tf) in the resource `aws_iam_policy.control_plane_policy`. + +* **iamProfileWorkerNodes**: The name of an IAM instance profile attached to all worker nodes. + + You can create the resource with [Terraform](https://www.terraform.io/). For that, use the [provided Terraform script](https://github.com/edgelesssys/constellation/tree/release/v2.2/hack/terraform/aws/iam) to generate the necessary profile. The profile name will be provided as Terraform output value: `worker_nodes_instance_profile_name`. + + Alternatively, you can create the AWS profile with a tool of your choice. Use the JSON policy in [main.tf](https://github.com/edgelesssys/constellation/tree/release/v2.2/hack/terraform/aws/iam/main.tf) in the resource `aws_iam_policy.worker_node_policy`. + + + + +* **subscription**: The UUID of your Azure subscription, e.g., `8b8bd01f-efd9-4113-9bd1-c82137c32da7`. + + You can view your subscription UUID via `az account show` and read the `id` field. For more information refer to [Azure's documentation](https://docs.microsoft.com/en-us/azure/azure-portal/get-subscription-tenant-id#find-your-azure-subscription). + +* **tenant**: The UUID of your Azure tenant, e.g., `3400e5a2-8fe2-492a-886c-38cb66170f25`. + + You can view your tenant UUID via `az account show` and read the `tenant` field. For more information refer to [Azure's documentation](https://docs.microsoft.com/en-us/azure/azure-portal/get-subscription-tenant-id#find-your-azure-ad-tenant). + +* **location**: The Azure datacenter location you want to deploy your cluster in, e.g., `westus`. + + CVMs are available in several Azure regions. Constellation OS images are currently replicated to the following: + + * `germanywestcentral` + * `westus` + * `eastus` + * `northeurope` + * `westeurope` + * `southeastasia` + + If you require the OS image to be available in another region, [let us know](https://github.com/edgelesssys/constellation/issues/new?assignees=&labels=&template=feature_request.md&title=Support+new+Azure+image+region:+xx-xxxx-x). + + You can find a list of all [regions in Azure's documentation](https://azure.microsoft.com/en-us/global-infrastructure/services/?products=virtual-machines®ions=all). + +* **resourceGroup**: [Create a new resource group in Azure](https://learn.microsoft.com/azure/azure-resource-manager/management/manage-resource-groups-portal) for your Constellation cluster. Set this configuration field to the name of the created resource group. + +* **userAssignedIdentity**: [Create a new managed identity in Azure](https://learn.microsoft.com/azure/active-directory/managed-identities-azure-resources/how-manage-user-assigned-managed-identities). You should create the identity in a different resource group as all resources within the cluster resource group will be deleted on cluster termination. + + Add three role assignments to the identity: `Owner`, `Virtual Machine Contributor`, and `Application Insights Component Contributor`. The `scope` of all three should refer to the previously created cluster resource group. + + Set the configuration value to the full ID of the created identity, e.g., `/subscriptions/8b8bd01f-efd9-4113-9bd1-c82137c32da7/resourcegroups/constellation-identity/providers/Microsoft.ManagedIdentity/userAssignedIdentities/constellation-identity`. You can get it by opening the `JSON View` from the `Overview` section of the identity. + + The user-assigned identity is used by instances of the cluster to access other cloud resources. + For more information about managed identities refer to [Azure's documentation](https://docs.microsoft.com/en-us/azure/active-directory/managed-identities-azure-resources/how-manage-user-assigned-managed-identities). + + + + +* **project**: The ID of your GCP project, e.g., `constellation-129857`. + + You can find it on the [welcome screen of your GCP project](https://console.cloud.google.com/welcome). For more information refer to [Google's documentation](https://support.google.com/googleapi/answer/7014113). + +* **region**: The GCP region you want to deploy your cluster in, e.g., `us-west1`. + + You can find a [list of all regions in Google's documentation](https://cloud.google.com/compute/docs/regions-zones#available). + +* **zone**: The GCP zone you want to deploy your cluster in, e.g., `us-west1-a`. + + You can find a [list of all zones in Google's documentation](https://cloud.google.com/compute/docs/regions-zones#available). + +* **serviceAccountKeyPath**: To configure this, you need to create a GCP [service account](https://cloud.google.com/iam/docs/service-accounts) with the following permissions: + + * `Compute Instance Admin (v1) (roles/compute.instanceAdmin.v1)` + * `Compute Network Admin (roles/compute.networkAdmin)` + * `Compute Security Admin (roles/compute.securityAdmin)` + * `Compute Storage Admin (roles/compute.storageAdmin)` + * `Service Account User (roles/iam.serviceAccountUser)` + + Afterward, create and download a new JSON key for this service account. Place the downloaded file in your Constellation workspace, and set the config parameter to the filename, e.g., `constellation-129857-15343dba46cb.json`. + + + + +STACKIT requires manual creation and configuration of service accounts. Look at the [first steps](../getting-started/first-steps.md) for more information. + + + +
    + +Now that you've configured your CSP, you can [create your cluster](./create.md). + +## Deleting an IAM configuration + +You can keep a created IAM configuration and reuse it for new clusters. Alternatively, you can also delete it if you don't want to use it anymore. + +Delete the IAM configuration by executing the following command in the same directory where you executed `constellation iam create` (the directory that contains [`constellation-iam-terraform`](../reference/terraform.md) as a subdirectory): + +```bash +constellation iam destroy +``` + +:::caution +For Azure, deleting the IAM configuration by executing `constellation iam destroy` will delete the whole resource group created by `constellation iam create`. +This also includes any additional resources in the resource group that weren't created by Constellation. +::: diff --git a/docs/versioned_docs/version-2.20/workflows/create.md b/docs/versioned_docs/version-2.20/workflows/create.md new file mode 100644 index 000000000..6074ebb16 --- /dev/null +++ b/docs/versioned_docs/version-2.20/workflows/create.md @@ -0,0 +1,93 @@ +# Create your cluster + +:::info +This recording presents the essence of this page. It's recommended to read it in full for the motivation and all details. +::: + + + +--- + +Creating your cluster happens through multiple phases. +The most significant ones are: + +1. Creating the necessary resources in your cloud environment +2. Bootstrapping the Constellation cluster and setting up a connection +3. Installing the necessary Kubernetes components + +`constellation apply` handles all this in a single command. +You can use the `--skip-phases` flag to skip specific phases of the process. +For example, if you created the infrastructure manually, you can skip the cloud resource creation phase. + +See the [architecture](../architecture/orchestration.md) section for details on the inner workings of this process. + +:::tip +If you don't have a cloud subscription, you can also set up a [local Constellation cluster using virtualization](../getting-started/first-steps-local.md) for testing. +::: + +Before you create the cluster, make sure to have a [valid configuration file](./config.md). + + + + +```bash +constellation apply +``` + +`apply` stores the state of your cluster's cloud resources in a [`constellation-terraform`](../architecture/orchestration.md#cluster-creation-process) directory in your workspace. + + + + +Self-managed infrastructure allows for more flexibility in the setup, by separating the infrastructure setup from the Constellation cluster management. +This provides flexibility in DevOps and can meet potential regulatory requirements. +It's recommended to use Terraform for infrastructure management, but you can use any tool of your choice. + +:::info + + When using Terraform, you can use the [Constellation Terraform provider](./terraform-provider.md) to manage the entire Constellation cluster lifecycle. + +::: + +You can refer to the Terraform files for the selected CSP from the [Constellation GitHub repository](https://github.com/edgelesssys/constellation/tree/main/terraform/infrastructure) for a minimum Constellation cluster configuration. From this base, you can now add, edit, or substitute resources per your own requirements with the infrastructure +management tooling of your choice. You need to keep the essential functionality of the base configuration in order for your cluster to function correctly. + + + +:::info + + On Azure, a manual update to the MAA provider's policy is necessary. + You can apply the update with the following command after creating the infrastructure, with `` being the URL of the MAA provider (i.e., `$(terraform output attestation_url | jq -r)`, when using the minimal Terraform configuration). + + ```bash + constellation maa-patch + ``` + +::: + + + +Make sure all necessary resources are created, e.g., through checking your CSP's portal and retrieve the necessary values, aligned with the outputs (specified in `outputs.tf`) of the base configuration. + +Fill these outputs into the corresponding fields of the `Infrastructure` block inside the `constellation-state.yaml` file. For example, fill the IP or DNS name your cluster can be reached at into the `.Infrastructure.ClusterEndpoint` field. + +With the required cloud resources set up, continue with initializing your cluster. + +```bash +constellation apply --skip-phases=infrastructure +``` + + + + +Finally, configure `kubectl` for your cluster: + +```bash +export KUBECONFIG="$PWD/constellation-admin.conf" +``` + +🏁 That's it. You've successfully created a Constellation cluster. + +### Troubleshooting + +In case `apply` fails, the CLI collects logs from the bootstrapping instance and stores them inside `constellation-cluster.log`. diff --git a/docs/versioned_docs/version-2.20/workflows/lb.md b/docs/versioned_docs/version-2.20/workflows/lb.md new file mode 100644 index 000000000..868e61076 --- /dev/null +++ b/docs/versioned_docs/version-2.20/workflows/lb.md @@ -0,0 +1,28 @@ +# Expose a service + +Constellation integrates the native load balancers of each CSP. Therefore, to expose a service simply [create a service of type `LoadBalancer`](https://kubernetes.io/docs/concepts/services-networking/service/#loadbalancer). + +## Internet-facing LB service on AWS + +To expose your application service externally you might want to use a Kubernetes Service of type `LoadBalancer`. On AWS, load-balancing is achieved through the [AWS Load Balancer Controller](https://kubernetes-sigs.github.io/aws-load-balancer-controller) as in the managed EKS. + +Since recent versions, the controller deploy an internal LB by default requiring to set an annotation `service.beta.kubernetes.io/aws-load-balancer-scheme: internet-facing` to have an internet-facing LB. For more details, see the [official docs](https://kubernetes-sigs.github.io/aws-load-balancer-controller/v2.7/guide/service/nlb/). + +For general information on LB with AWS see [Network load balancing on Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/network-load-balancing.html). + +:::caution +Before terminating the cluster, all LB backed services should be deleted, so that the controller can cleanup the related resources. +::: + +## Ingress on AWS + +The AWS Load Balancer Controller also provisions `Ingress` resources of class `alb`. +AWS Application Load Balancers (ALBs) can be configured with a [`target-type`](https://kubernetes-sigs.github.io/aws-load-balancer-controller/v2.7/guide/ingress/annotations/#target-type). +The target type `ip` requires using the EKS container network solution, which makes it incompatible with Constellation. +If a service can be exposed on a `NodePort`, the target type `instance` can be used. + +See [Application load balancing on Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/alb-ingress.html) for more information. + +:::caution +Ingress handlers backed by AWS ALBs reside outside the Constellation cluster, so they shouldn't be handling sensitive traffic! +::: diff --git a/docs/versioned_docs/version-2.20/workflows/recovery.md b/docs/versioned_docs/version-2.20/workflows/recovery.md new file mode 100644 index 000000000..592ae247b --- /dev/null +++ b/docs/versioned_docs/version-2.20/workflows/recovery.md @@ -0,0 +1,179 @@ +# Recover your cluster + +Recovery of a Constellation cluster means getting it back into a healthy state after too many concurrent node failures in the control plane. +Reasons for an unhealthy cluster can vary from a power outage, or planned reboot, to migration of nodes and regions. +Recovery events are rare, because Constellation is built for high availability and automatically and securely replaces failed nodes. When a node is replaced, Constellation's control plane first verifies the new node before it sends the node the cryptographic keys required to decrypt its [state disk](../architecture/images.md#state-disk). + +Constellation provides a recovery mechanism for cases where the control plane has failed and is unable to replace nodes. +The `constellation recover` command securely connects to all nodes in need of recovery using [attested TLS](../architecture/attestation.md#attested-tls-atls) and provides them with the keys to decrypt their state disks and continue booting. + +## Identify unhealthy clusters + +The first step to recovery is identifying when a cluster becomes unhealthy. +Usually, this can be first observed when the Kubernetes API server becomes unresponsive. + +You can check the health status of the nodes via the cloud service provider (CSP). +Constellation provides logging information on the boot process and status via serial console output. +In the following, you'll find detailed descriptions for identifying clusters stuck in recovery for each CSP. + + + + +First, open the AWS console to view all Auto Scaling Groups (ASGs) in the region of your cluster. Select the ASG of the control plane `--control-plane` and check that enough members are in a *Running* state. + +Second, check the boot logs of these *Instances*. In the ASG's *Instance management* view, select each desired instance. In the upper right corner, select **Action > Monitor and troubleshoot > Get system log**. + +In the serial console output, search for `Waiting for decryption key`. +Similar output to the following means your node was restarted and needs to decrypt the [state disk](../architecture/images.md#state-disk): + +```json +{"level":"INFO","ts":"2022-09-08T10:21:53Z","caller":"cmd/main.go:55","msg":"Starting disk-mapper","version":"2.0.0","cloudProvider":"gcp"} +{"level":"INFO","ts":"2022-09-08T10:21:53Z","logger":"setupManager","caller":"setup/setup.go:72","msg":"Preparing existing state disk"} +{"level":"INFO","ts":"2022-09-08T10:21:53Z","logger":"rejoinClient","caller":"rejoinclient/client.go:65","msg":"Starting RejoinClient"} +{"level":"INFO","ts":"2022-09-08T10:21:53Z","logger":"recoveryServer","caller":"recoveryserver/server.go:59","msg":"Starting RecoveryServer"} +``` + +The node will then try to connect to the [*JoinService*](../architecture/microservices.md#joinservice) and obtain the decryption key. +If this fails due to an unhealthy control plane, you will see log messages similar to the following: + +```json +{"level":"INFO","ts":"2022-09-08T10:21:53Z","logger":"rejoinClient","caller":"rejoinclient/client.go:77","msg":"Received list with JoinService endpoints","endpoints":["192.168.178.4:30090","192.168.178.2:30090"]} +{"level":"INFO","ts":"2022-09-08T10:21:53Z","logger":"rejoinClient","caller":"rejoinclient/client.go:96","msg":"Requesting rejoin ticket","endpoint":"192.168.178.4:30090"} +{"level":"WARN","ts":"2022-09-08T10:21:53Z","logger":"rejoinClient","caller":"rejoinclient/client.go:101","msg":"Failed to rejoin on endpoint","error":"rpc error: code = Unavailable desc = connection error: desc = \"transport: Error while dialing dial tcp 192.168.178.4:30090: connect: connection refused\"","endpoint":"192.168.178.4:30090"} +{"level":"INFO","ts":"2022-09-08T10:21:53Z","logger":"rejoinClient","caller":"rejoinclient/client.go:96","msg":"Requesting rejoin ticket","endpoint":"192.168.178.2:30090"} +{"level":"WARN","ts":"2022-09-08T10:22:13Z","logger":"rejoinClient","caller":"rejoinclient/client.go:101","msg":"Failed to rejoin on endpoint","error":"rpc error: code = Unavailable desc = connection error: desc = \"transport: Error while dialing dial tcp 192.168.178.2:30090: i/o timeout\"","endpoint":"192.168.178.2:30090"} +{"level":"ERROR","ts":"2022-09-08T10:22:13Z","logger":"rejoinClient","caller":"rejoinclient/client.go:110","msg":"Failed to rejoin on all endpoints"} +``` + +This means that you have to recover the node manually. + + + + +In the Azure portal, find the cluster's resource group. +Inside the resource group, open the control plane *Virtual machine scale set* `constellation-scale-set-controlplanes-`. +On the left, go to **Settings** > **Instances** and check that enough members are in a *Running* state. + +Second, check the boot logs of these *Instances*. +In the scale set's *Instances* view, open the details page of the desired instance. +On the left, go to **Support + troubleshooting** > **Serial console**. + +In the serial console output, search for `Waiting for decryption key`. +Similar output to the following means your node was restarted and needs to decrypt the [state disk](../architecture/images.md#state-disk): + +```json +{"level":"INFO","ts":"2022-09-08T09:56:41Z","caller":"cmd/main.go:55","msg":"Starting disk-mapper","version":"2.0.0","cloudProvider":"azure"} +{"level":"INFO","ts":"2022-09-08T09:56:43Z","logger":"setupManager","caller":"setup/setup.go:72","msg":"Preparing existing state disk"} +{"level":"INFO","ts":"2022-09-08T09:56:43Z","logger":"recoveryServer","caller":"recoveryserver/server.go:59","msg":"Starting RecoveryServer"} +{"level":"INFO","ts":"2022-09-08T09:56:43Z","logger":"rejoinClient","caller":"rejoinclient/client.go:65","msg":"Starting RejoinClient"} +``` + +The node will then try to connect to the [*JoinService*](../architecture/microservices.md#joinservice) and obtain the decryption key. +If this fails due to an unhealthy control plane, you will see log messages similar to the following: + +```json +{"level":"INFO","ts":"2022-09-08T09:56:43Z","logger":"rejoinClient","caller":"rejoinclient/client.go:77","msg":"Received list with JoinService endpoints","endpoints":["10.9.0.5:30090","10.9.0.6:30090"]} +{"level":"INFO","ts":"2022-09-08T09:56:43Z","logger":"rejoinClient","caller":"rejoinclient/client.go:96","msg":"Requesting rejoin ticket","endpoint":"10.9.0.5:30090"} +{"level":"WARN","ts":"2022-09-08T09:57:03Z","logger":"rejoinClient","caller":"rejoinclient/client.go:101","msg":"Failed to rejoin on endpoint","error":"rpc error: code = Unavailable desc = connection error: desc = \"transport: Error while dialing dial tcp 10.9.0.5:30090: i/o timeout\"","endpoint":"10.9.0.5:30090"} +{"level":"INFO","ts":"2022-09-08T09:57:03Z","logger":"rejoinClient","caller":"rejoinclient/client.go:96","msg":"Requesting rejoin ticket","endpoint":"10.9.0.6:30090"} +{"level":"WARN","ts":"2022-09-08T09:57:23Z","logger":"rejoinClient","caller":"rejoinclient/client.go:101","msg":"Failed to rejoin on endpoint","error":"rpc error: code = Unavailable desc = connection error: desc = \"transport: Error while dialing dial tcp 10.9.0.6:30090: i/o timeout\"","endpoint":"10.9.0.6:30090"} +{"level":"ERROR","ts":"2022-09-08T09:57:23Z","logger":"rejoinClient","caller":"rejoinclient/client.go:110","msg":"Failed to rejoin on all endpoints"} +``` + +This means that you have to recover the node manually. + + + + +First, check that the control plane *Instance Group* has enough members in a *Ready* state. +In the GCP Console, go to **Instance Groups** and check the group for the cluster's control plane `-control-plane-`. + +Second, check the status of the *VM Instances*. +Go to **VM Instances** and open the details of the desired instance. +Check the serial console output of that instance by opening the **Logs** > **Serial port 1 (console)** page: + +![GCP portal serial console link](../_media/recovery-gcp-serial-console-link.png) + +In the serial console output, search for `Waiting for decryption key`. +Similar output to the following means your node was restarted and needs to decrypt the [state disk](../architecture/images.md#state-disk): + +```json +{"level":"INFO","ts":"2022-09-08T10:21:53Z","caller":"cmd/main.go:55","msg":"Starting disk-mapper","version":"2.0.0","cloudProvider":"gcp"} +{"level":"INFO","ts":"2022-09-08T10:21:53Z","logger":"setupManager","caller":"setup/setup.go:72","msg":"Preparing existing state disk"} +{"level":"INFO","ts":"2022-09-08T10:21:53Z","logger":"rejoinClient","caller":"rejoinclient/client.go:65","msg":"Starting RejoinClient"} +{"level":"INFO","ts":"2022-09-08T10:21:53Z","logger":"recoveryServer","caller":"recoveryserver/server.go:59","msg":"Starting RecoveryServer"} +``` + +The node will then try to connect to the [*JoinService*](../architecture/microservices.md#joinservice) and obtain the decryption key. +If this fails due to an unhealthy control plane, you will see log messages similar to the following: + +```json +{"level":"INFO","ts":"2022-09-08T10:21:53Z","logger":"rejoinClient","caller":"rejoinclient/client.go:77","msg":"Received list with JoinService endpoints","endpoints":["192.168.178.4:30090","192.168.178.2:30090"]} +{"level":"INFO","ts":"2022-09-08T10:21:53Z","logger":"rejoinClient","caller":"rejoinclient/client.go:96","msg":"Requesting rejoin ticket","endpoint":"192.168.178.4:30090"} +{"level":"WARN","ts":"2022-09-08T10:21:53Z","logger":"rejoinClient","caller":"rejoinclient/client.go:101","msg":"Failed to rejoin on endpoint","error":"rpc error: code = Unavailable desc = connection error: desc = \"transport: Error while dialing dial tcp 192.168.178.4:30090: connect: connection refused\"","endpoint":"192.168.178.4:30090"} +{"level":"INFO","ts":"2022-09-08T10:21:53Z","logger":"rejoinClient","caller":"rejoinclient/client.go:96","msg":"Requesting rejoin ticket","endpoint":"192.168.178.2:30090"} +{"level":"WARN","ts":"2022-09-08T10:22:13Z","logger":"rejoinClient","caller":"rejoinclient/client.go:101","msg":"Failed to rejoin on endpoint","error":"rpc error: code = Unavailable desc = connection error: desc = \"transport: Error while dialing dial tcp 192.168.178.2:30090: i/o timeout\"","endpoint":"192.168.178.2:30090"} +{"level":"ERROR","ts":"2022-09-08T10:22:13Z","logger":"rejoinClient","caller":"rejoinclient/client.go:110","msg":"Failed to rejoin on all endpoints"} +``` + +This means that you have to recover the node manually. + + + + +First, open the STACKIT portal to view all servers in your project. Select individual control plane nodes `--control-plane--` and check that enough members are in a *Running* state. + +Second, check the boot logs of these servers. Click on a server name and select **Overview**. Find the **Machine Setup** section and click on **Web console** > **Open console**. + +In the serial console output, search for `Waiting for decryption key`. +Similar output to the following means your node was restarted and needs to decrypt the [state disk](../architecture/images.md#state-disk): + +```json +{"level":"INFO","ts":"2022-09-08T10:21:53Z","caller":"cmd/main.go:55","msg":"Starting disk-mapper","version":"2.0.0","cloudProvider":"gcp"} +{"level":"INFO","ts":"2022-09-08T10:21:53Z","logger":"setupManager","caller":"setup/setup.go:72","msg":"Preparing existing state disk"} +{"level":"INFO","ts":"2022-09-08T10:21:53Z","logger":"rejoinClient","caller":"rejoinclient/client.go:65","msg":"Starting RejoinClient"} +{"level":"INFO","ts":"2022-09-08T10:21:53Z","logger":"recoveryServer","caller":"recoveryserver/server.go:59","msg":"Starting RecoveryServer"} +``` + +The node will then try to connect to the [*JoinService*](../architecture/microservices.md#joinservice) and obtain the decryption key. +If this fails due to an unhealthy control plane, you will see log messages similar to the following: + +```json +{"level":"INFO","ts":"2022-09-08T10:21:53Z","logger":"rejoinClient","caller":"rejoinclient/client.go:77","msg":"Received list with JoinService endpoints","endpoints":["192.168.178.4:30090","192.168.178.2:30090"]} +{"level":"INFO","ts":"2022-09-08T10:21:53Z","logger":"rejoinClient","caller":"rejoinclient/client.go:96","msg":"Requesting rejoin ticket","endpoint":"192.168.178.4:30090"} +{"level":"WARN","ts":"2022-09-08T10:21:53Z","logger":"rejoinClient","caller":"rejoinclient/client.go:101","msg":"Failed to rejoin on endpoint","error":"rpc error: code = Unavailable desc = connection error: desc = \"transport: Error while dialing dial tcp 192.168.178.4:30090: connect: connection refused\"","endpoint":"192.168.178.4:30090"} +{"level":"INFO","ts":"2022-09-08T10:21:53Z","logger":"rejoinClient","caller":"rejoinclient/client.go:96","msg":"Requesting rejoin ticket","endpoint":"192.168.178.2:30090"} +{"level":"WARN","ts":"2022-09-08T10:22:13Z","logger":"rejoinClient","caller":"rejoinclient/client.go:101","msg":"Failed to rejoin on endpoint","error":"rpc error: code = Unavailable desc = connection error: desc = \"transport: Error while dialing dial tcp 192.168.178.2:30090: i/o timeout\"","endpoint":"192.168.178.2:30090"} +{"level":"ERROR","ts":"2022-09-08T10:22:13Z","logger":"rejoinClient","caller":"rejoinclient/client.go:110","msg":"Failed to rejoin on all endpoints"} +``` + +This means that you have to recover the node manually. + + + + +## Recover a cluster + +Recovering a cluster requires the following parameters: + +* The `constellation-state.yaml` file in your working directory or the cluster's endpoint +* The master secret of the cluster + +A cluster can be recovered like this: + +```bash +$ constellation recover +Pushed recovery key. +Pushed recovery key. +Pushed recovery key. +Recovered 3 control-plane nodes. +``` + +In the serial console output of the node you'll see a similar output to the following: + +```json +{"level":"INFO","ts":"2022-09-08T10:26:59Z","logger":"recoveryServer","caller":"recoveryserver/server.go:93","msg":"Received recover call"} +{"level":"INFO","ts":"2022-09-08T10:26:59Z","logger":"recoveryServer","caller":"recoveryserver/server.go:125","msg":"Received state disk key and measurement secret, shutting down server"} +{"level":"INFO","ts":"2022-09-08T10:26:59Z","logger":"recoveryServer.gRPC","caller":"zap/server_interceptors.go:61","msg":"finished streaming call with code OK","grpc.start_time":"2022-09-08T10:26:59Z","system":"grpc","span.kind":"server","grpc.service":"recoverproto.API","grpc.method":"Recover","peer.address":"192.0.2.3:41752","grpc.code":"OK","grpc.time_ms":15.701} +{"level":"INFO","ts":"2022-09-08T10:27:13Z","logger":"rejoinClient","caller":"rejoinclient/client.go:87","msg":"RejoinClient stopped"} +``` diff --git a/docs/versioned_docs/version-2.20/workflows/reproducible-builds.md b/docs/versioned_docs/version-2.20/workflows/reproducible-builds.md new file mode 100644 index 000000000..e3bc46095 --- /dev/null +++ b/docs/versioned_docs/version-2.20/workflows/reproducible-builds.md @@ -0,0 +1,63 @@ +# Reproduce released artifacts + +Constellation has first-class support for [reproducible builds](https://reproducible-builds.org). +Reproducing the released artifacts is an alternative to [signature verification](verify-cli.md) that doesn't require trusting Edgeless Systems' release process. +The following sections describe how to rebuild an artifact and how Constellation ensures that the rebuild reproduces the artifacts bit-by-bit. + +## Build environment prerequisites + +The build systems used by Constellation - [Bazel](https://bazel.build/) and [Nix](https://nixos.org) - are designed for deterministic, reproducible builds. +These two dependencies should be the only prerequisites for a successful build. +However, it can't be ruled out completely that peculiarities of the host affect the build result. +Thus, we recommend the following host setup for best results: + +1. A Linux operating system not older than v5.4. +2. The GNU C library not older than v2.31 (avoid `musl`). +3. GNU `coreutils` not older than v8.30 (avoid `busybox`). +4. An `ext4` filesystem for building. +5. AppArmor turned off. + +This is given, for example, on an Ubuntu 22.04 system, which is also used for reproducibility tests. + +:::note + +To avoid any backwards-compatibility issues, the host software versions should also not be much newer than the Constellation release. + +::: + +## Run the build + +The following instructions outline qualitatively how to reproduce a build. +Constellation implements these instructions in the [Reproducible Builds workflow](https://github.com/edgelesssys/constellation/actions/workflows/reproducible-builds.yml), which continuously tests for reproducibility. +The workflow is a good place to look up specific version numbers and build steps. + +1. Check out the Constellation repository at the tag corresponding to the release. + + ```bash + git clone https://github.com/edgelesssys/constellation.git + cd constellation + git checkout v2.20.0 + ``` + +2. [Install the Bazel release](https://bazel.build/install) specified in `.bazelversion`. +3. [Install Nix](https://nixos.org/download/) (any recent version should do). +4. Run the build with `bazel build $target` for one of the following targets of interest: + + ```data + //cli:cli_enterprise_darwin_amd64 + //cli:cli_enterprise_darwin_arm64 + //cli:cli_enterprise_linux_amd64 + //cli:cli_enterprise_linux_arm64 + //cli:cli_enterprise_windows_amd64 + ``` + +5. Compare the build result with the downloaded release artifact. + + + +## Feedback + +Reproduction failures often indicate a bug in the build system or in the build definitions. +Therefore, we're interested in any reproducibility issues you might encounter. +[Start a bug report](https://github.com/edgelesssys/constellation/issues/new/choose) and describe the details of your build environment. +Make sure to include your result binary or a [`diffoscope`](https://diffoscope.org/) report, if possible. diff --git a/docs/versioned_docs/version-2.20/workflows/s3proxy.md b/docs/versioned_docs/version-2.20/workflows/s3proxy.md new file mode 100644 index 000000000..121e8a461 --- /dev/null +++ b/docs/versioned_docs/version-2.20/workflows/s3proxy.md @@ -0,0 +1,58 @@ +# Install s3proxy + +Constellation includes a transparent client-side encryption proxy for [AWS S3](https://aws.amazon.com/de/s3/) and compatible stores. +s3proxy encrypts objects before sending them to S3 and automatically decrypts them on retrieval, without requiring changes to your application. +With s3proxy, you can use S3 for storage in a confidential way without having to trust the storage provider. + +## Limitations + +Currently, s3proxy has the following limitations: +- Only `PutObject` and `GetObject` requests are encrypted/decrypted by s3proxy. +By default, s3proxy will block requests that may expose unencrypted data to S3 (e.g. UploadPart). +The `allow-multipart` flag disables request blocking for evaluation purposes. +- Using the [Range](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html#API_GetObject_RequestSyntax) header on `GetObject` is currently not supported and will result in an error. + +These limitations will be removed with future iterations of s3proxy. +If you want to use s3proxy but these limitations stop you from doing so, consider [opening an issue](https://github.com/edgelesssys/constellation/issues/new?assignees=&labels=&projects=&template=feature_request.yml). + +## Deployment + +You can add the s3proxy to your Constellation cluster as follows: +1. Add the Edgeless Systems chart repository: + ```bash + helm repo add edgeless https://helm.edgeless.systems/stable + helm repo update + ``` +2. Set ACCESS_KEY and ACCESS_SECRET to valid credentials you want s3proxy to use to interact with S3. +3. Deploy s3proxy: + ```bash + helm install s3proxy edgeless/s3proxy --set awsAccessKeyID="$ACCESS_KEY" --set awsSecretAccessKey="$ACCESS_SECRET" + ``` + +If you want to run a demo application, check out the [Filestash with s3proxy](../getting-started/examples/filestash-s3proxy.md) example. + + +## Technical details + +### Encryption + +s3proxy relies on Google's [Tink Cryptographic Library](https://developers.google.com/tink) to implement cryptographic operations securely. +The used cryptographic primitives are [NIST SP 800 38f](https://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-38F.pdf) for key wrapping and [AES](https://en.wikipedia.org/wiki/Advanced_Encryption_Standard)-[GCM](https://en.wikipedia.org/wiki/Block_cipher_mode_of_operation#Galois/counter_(GCM)) with 256 bit keys for data encryption. + +s3proxy uses [envelope encryption](https://cloud.google.com/kms/docs/envelope-encryption) to encrypt objects. +This means s3proxy uses a key encryption key (KEK) issued by the [KeyService](../architecture/microservices.md#keyservice) to encrypt data encryption keys (DEKs). +Each S3 object is encrypted with its own DEK. +The encrypted DEK is then saved as metadata of the encrypted object. +This enables key rotation of the KEK without re-encrypting the data in S3. +The approach also allows access to objects from different locations, as long as each location has access to the KEK. + +### Traffic interception + +To use s3proxy, you have to redirect your outbound S3 traffic to s3proxy. +This can either be done by modifying your client application or by changing the deployment of your application. + +The necessary deployment modifications are to add DNS redirection and a trusted TLS certificate to the client's trust store. +DNS redirection can be defined for each pod, allowing you to use s3proxy for one application without changing other applications in the same cluster. +Adding a trusted TLS certificate is necessary as clients communicate with s3proxy via HTTPS. +To have your client application trust s3proxy's TLS certificate, the certificate has to be added to the client's certificate trust store. +The [Filestash with s3proxy](../getting-started/examples/filestash-s3proxy.md) example shows how to do this. diff --git a/docs/versioned_docs/version-2.20/workflows/sbom.md b/docs/versioned_docs/version-2.20/workflows/sbom.md new file mode 100644 index 000000000..6c1702dee --- /dev/null +++ b/docs/versioned_docs/version-2.20/workflows/sbom.md @@ -0,0 +1,93 @@ +# Consume software bill of materials (SBOMs) + + + +--- + +Constellation builds produce a [software bill of materials (SBOM)](https://www.ntia.gov/SBOM) for each generated [artifact](../architecture/microservices.md). +You can use SBOMs to make informed decisions about dependencies and vulnerabilities in a given application. Enterprises rely on SBOMs to maintain an inventory of used applications, which allows them to take data-driven approaches to managing risks related to vulnerabilities. + +SBOMs for Constellation are generated using [Syft](https://github.com/anchore/syft), signed using [Cosign](https://github.com/sigstore/cosign), and stored with the produced artifact. + +:::note +The public key for Edgeless Systems' long-term code-signing key is: + +``` +-----BEGIN PUBLIC KEY----- +MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEf8F1hpmwE+YCFXzjGtaQcrL6XZVT +JmEe5iSLvG1SyQSAew7WdMKF6o9t8e2TFuCkzlOhhlws2OHWbiFZnFWCFw== +-----END PUBLIC KEY----- +``` + +The public key is also available for download at [https://edgeless.systems/es.pub](https://edgeless.systems/es.pub) and in the Twitter profile [@EdgelessSystems](https://twitter.com/EdgelessSystems). + +Make sure the key is available in a file named `cosign.pub` to execute the following examples. +::: + +## Verify and download SBOMs + +The following sections detail how to work with each type of artifact to verify and extract the SBOM. + +### Constellation CLI + +The SBOM for Constellation CLI is made available on the [GitHub release page](https://github.com/edgelesssys/constellation/releases). The SBOM (`constellation.spdx.sbom`) and corresponding signature (`constellation.spdx.sbom.sig`) are valid for each Constellation CLI for a given version, regardless of architecture and operating system. + +```bash +curl -LO https://github.com/edgelesssys/constellation/releases/download/v2.2.0/constellation.spdx.sbom +curl -LO https://github.com/edgelesssys/constellation/releases/download/v2.2.0/constellation.spdx.sbom.sig +cosign verify-blob --key cosign.pub --signature constellation.spdx.sbom.sig constellation.spdx.sbom +``` + +### Container Images + +SBOMs for container images are [attached to the image using Cosign](https://docs.sigstore.dev/cosign/signing/other_types/#sboms-software-bill-of-materials) and uploaded to the same registry. + +As a consumer, use cosign to download and verify the SBOM: + +```bash +# Verify and download the attestation statement +cosign verify-attestation ghcr.io/edgelesssys/constellation/verification-service@v2.2.0 --type 'https://cyclonedx.org/bom' --key cosign.pub --output-file verification-service.att.json +# Extract SBOM from attestation statement +jq -r .payload verification-service.att.json | base64 -d > verification-service.cyclonedx.sbom +``` + +A successful verification should result in similar output: + +```shell-session +$ cosign verify-attestation ghcr.io/edgelesssys/constellation/verification-service@v2.2.0 --type 'https://cyclonedx.org/bom' --key cosign.pub --output-file verification-service.sbom + +Verification for ghcr.io/edgelesssys/constellation/verification-service@v2.2.0 -- +The following checks were performed on each of these signatures: + - The cosign claims were validated + - The signatures were verified against the specified public key +$ jq -r .payload verification-service.sbom | base64 -d > verification-service.cyclonedx.sbom +``` + +:::note + +This example considers only the `verification-service`. The same approach works for all containers in the [Constellation container registry](https://github.com/orgs/edgelesssys/packages?repo_name=constellation). + +::: + + + +## Vulnerability scanning + +You can use a plethora of tools to consume SBOMs. This section provides suggestions for tools that are popular and known to produce reliable results, but any tool that consumes [SPDX](https://spdx.dev/) or [CycloneDX](https://cyclonedx.org/) files should work. + +Syft is able to [convert between the two formats](https://github.com/anchore/syft#format-conversion-experimental) in case you require a specific type. + +### Grype + +[Grype](https://github.com/anchore/grype) is a CLI tool that lends itself well for integration into CI/CD systems or local developer machines. It's also able to consume the signed attestation statement directly and does the verification in one go. + +```bash +grype att:verification-service.sbom --key cosign.pub --add-cpes-if-none -q +``` + +### Dependency Track + +[Dependency Track](https://dependencytrack.org/) is one of the oldest and most mature solutions when it comes to managing software inventory and vulnerabilities. Once imported, it continuously scans SBOMs for new vulnerabilities. It supports the CycloneDX format and provides direct guidance on how to comply with [U.S. Executive Order 14028](https://docs.dependencytrack.org/usage/executive-order-14028/). diff --git a/docs/versioned_docs/version-2.20/workflows/scale.md b/docs/versioned_docs/version-2.20/workflows/scale.md new file mode 100644 index 000000000..28f19e3f1 --- /dev/null +++ b/docs/versioned_docs/version-2.20/workflows/scale.md @@ -0,0 +1,122 @@ +# Scale your cluster + +Constellation provides all features of a Kubernetes cluster including scaling and autoscaling. + +## Worker node scaling + +### Autoscaling + +Constellation comes with autoscaling disabled by default. To enable autoscaling, find the scaling group of +worker nodes: + +```bash +kubectl get scalinggroups -o json | yq '.items | .[] | select(.spec.role == "Worker") | [{"name": .metadata.name, "nodeGoupName": .spec.nodeGroupName}]' +``` + +This will output a list of scaling groups with the corresponding cloud provider name (`name`) and the cloud provider agnostic name of the node group (`nodeGroupName`). + +Then, patch the `autoscaling` field of the scaling group resource with the desired `name` to `true`: + +```bash +# Replace with the name of the scaling group you want to enable autoscaling for +worker_group= +kubectl patch scalinggroups $worker_group --patch '{"spec":{"autoscaling": true}}' --type='merge' +kubectl get scalinggroup $worker_group -o jsonpath='{.spec}' | yq -P +``` + +The cluster autoscaler now automatically provisions additional worker nodes so that all pods have a place to run. +You can configure the minimum and maximum number of worker nodes in the scaling group by patching the `min` or +`max` fields of the scaling group resource: + +```bash +kubectl patch scalinggroups $worker_group --patch '{"spec":{"max": 5}}' --type='merge' +kubectl get scalinggroup $worker_group -o jsonpath='{.spec}' | yq -P +``` + +The cluster autoscaler will now never provision more than 5 worker nodes. + +If you want to see the autoscaling in action, try to add a deployment with a lot of replicas, like the +following Nginx deployment. The number of replicas needed to trigger the autoscaling depends on the size of +and count of your worker nodes. Wait for the rollout of the deployment to finish and compare the number of +worker nodes before and after the deployment: + +```bash +kubectl create deployment nginx --image=nginx --replicas 150 +kubectl -n kube-system get nodes +kubectl rollout status deployment nginx +kubectl -n kube-system get nodes +``` + +### Manual scaling + +Alternatively, you can manually scale your cluster up or down: + + + + +1. Go to Auto Scaling Groups and select the worker ASG to scale up. +2. Click **Edit** +3. Set the new (increased) **Desired capacity** and **Update**. + + + + +1. Find your Constellation resource group. +2. Select the `scale-set-workers`. +3. Go to **settings** and **scaling**. +4. Set the new **instance count** and **save**. + + + + +1. In Compute Engine go to [Instance Groups](https://console.cloud.google.com/compute/instanceGroups/). +2. **Edit** the **worker** instance group. +3. Set the new **number of instances** and **save**. + + + + +Dynamic cluster scaling isn't yet supported for STACKIT. +Support will be introduced in one of the upcoming releases. + + + + +## Control-plane node scaling + +Control-plane nodes can **only be scaled manually and only scaled up**! + +To increase the number of control-plane nodes, follow these steps: + + + + +1. Go to Auto Scaling Groups and select the control-plane ASG to scale up. +2. Click **Edit** +3. Set the new (increased) **Desired capacity** and **Update**. + + + + +1. Find your Constellation resource group. +2. Select the `scale-set-controlplanes`. +3. Go to **settings** and **scaling**. +4. Set the new (increased) **instance count** and **save**. + + + + +1. In Compute Engine go to [Instance Groups](https://console.cloud.google.com/compute/instanceGroups/). +2. **Edit** the **control-plane** instance group. +3. Set the new (increased) **number of instances** and **save**. + + + + +Dynamic cluster scaling isn't yet supported for STACKIT. +Support will be introduced in one of the upcoming releases. + + + + +If you scale down the number of control-planes nodes, the removed nodes won't be able to exit the `etcd` cluster correctly. This will endanger the quorum that's required to run a stable Kubernetes control plane. diff --git a/docs/versioned_docs/version-2.20/workflows/storage.md b/docs/versioned_docs/version-2.20/workflows/storage.md new file mode 100644 index 000000000..a5c52be90 --- /dev/null +++ b/docs/versioned_docs/version-2.20/workflows/storage.md @@ -0,0 +1,281 @@ +# Use persistent storage + +Persistent storage in Kubernetes requires cloud-specific configuration. +For abstraction of container storage, Kubernetes offers [volumes](https://kubernetes.io/docs/concepts/storage/volumes/), +allowing users to mount storage solutions directly into containers. +The [Container Storage Interface (CSI)](https://kubernetes-csi.github.io/docs/) is the standard interface for exposing arbitrary block and file storage systems into containers in Kubernetes. +Cloud service providers (CSPs) offer their own CSI-based solutions for cloud storage. + +## Confidential storage + +Most cloud storage solutions support encryption, such as [GCE Persistent Disks (PD)](https://cloud.google.com/kubernetes-engine/docs/how-to/using-cmek). +Constellation supports the available CSI-based storage options for Kubernetes engines in AWS, Azure, GCP, and STACKIT. +However, their encryption takes place in the storage backend and is managed by the CSP. +Thus, using the default CSI drivers for these storage types means trusting the CSP with your persistent data. + +To address this, Constellation provides CSI drivers for AWS EBS, Azure Disk, GCE PD, and OpenStack Cinder, offering [encryption on the node level](../architecture/keys.md#storage-encryption). They enable transparent encryption for persistent volumes without needing to trust the cloud backend. Plaintext data never leaves the confidential VM context, offering you confidential storage. + +For more details see [encrypted persistent storage](../architecture/encrypted-storage.md). + +## CSI drivers + +Constellation supports the following drivers, which offer node-level encryption and optional integrity protection. + + + + +**Constellation CSI driver for AWS Elastic Block Store** +Mount [Elastic Block Store](https://aws.amazon.com/ebs/) storage volumes into your Constellation cluster. +Follow the instructions on how to [install the Constellation CSI driver](#installation) or check out the [repository](https://github.com/edgelesssys/constellation-aws-ebs-csi-driver) for more information. + + + + +**Constellation CSI driver for Azure Disk**: +Mount Azure [Disk Storage](https://azure.microsoft.com/en-us/services/storage/disks/#overview) into your Constellation cluster. +See the instructions on how to [install the Constellation CSI driver](#installation) or check out the [repository](https://github.com/edgelesssys/constellation-azuredisk-csi-driver) for more information. +Since Azure Disks are mounted as `ReadWriteOnce`, they're only available to a single pod. + + + + +**Constellation CSI driver for GCP Persistent Disk**: +Mount [Persistent Disk](https://cloud.google.com/persistent-disk) block storage into your Constellation cluster. +Follow the instructions on how to [install the Constellation CSI driver](#installation) or check out the [repository](https://github.com/edgelesssys/constellation-gcp-compute-persistent-disk-csi-driver) for more information. + + + + +**Constellation CSI driver for STACKIT / OpenStack Cinder** +Mount [Cinder](https://docs.openstack.org/cinder/latest/) block storage volumes into your Constellation cluster. +Follow the instructions on how to [install the Constellation CSI driver](#installation) or check out the [repository](https://github.com/edgelesssys/constellation-cloud-provider-openstack) for more information. + + + + +Note that in case the options above aren't a suitable solution for you, Constellation is compatible with all other CSI-based storage options. For example, you can use [AWS EFS](https://docs.aws.amazon.com/en_en/eks/latest/userguide/efs-csi.html), [Azure Files](https://docs.microsoft.com/en-us/azure/storage/files/storage-files-introduction), or [GCP Filestore](https://cloud.google.com/filestore) with Constellation out of the box. Constellation is just not providing transparent encryption on the node level for these storage types yet. + +## Installation + +The Constellation CLI automatically installs Constellation's CSI driver for the selected CSP in your cluster. +If you don't need a CSI driver or wish to deploy your own, you can disable the automatic installation by setting `deployCSIDriver` to `false` in your Constellation config file. + + + + +AWS comes with two storage classes by default. + +* `encrypted-rwo` + * Uses [SSDs of `gp3` type](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-volume-types.html) + * ext-4 filesystem + * Encryption of all data written to disk +* `integrity-encrypted-rwo` + * Uses [SSDs of `gp3` type](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-volume-types.html) + * ext-4 filesystem + * Encryption of all data written to disk + * Integrity protection of data written to disk + +For more information on encryption algorithms and key sizes, refer to [cryptographic algorithms](../architecture/encrypted-storage.md#cryptographic-algorithms). + +:::info + +The default storage class is set to `encrypted-rwo` for performance reasons. +If you want integrity-protected storage, set the `storageClassName` parameter of your persistent volume claim to `integrity-encrypted-rwo`. + +Alternatively, you can create your own storage class with integrity protection enabled by adding `csi.storage.k8s.io/fstype: ext4-integrity` to the class `parameters`. +Or use another filesystem by specifying another file system type with the suffix `-integrity`, e.g., `csi.storage.k8s.io/fstype: xfs-integrity`. + +Note that volume expansion isn't supported for integrity-protected disks. + +::: + + + + +Azure comes with two storage classes by default. + +* `encrypted-rwo` + * Uses [Standard SSDs](https://learn.microsoft.com/en-us/azure/virtual-machines/disks-types#standard-ssds) + * ext-4 filesystem + * Encryption of all data written to disk +* `integrity-encrypted-rwo` + * Uses [Premium SSDs](https://learn.microsoft.com/en-us/azure/virtual-machines/disks-types#premium-ssds) + * ext-4 filesystem + * Encryption of all data written to disk + * Integrity protection of data written to disk + +For more information on encryption algorithms and key sizes, refer to [cryptographic algorithms](../architecture/encrypted-storage.md#cryptographic-algorithms). + +:::info + +The default storage class is set to `encrypted-rwo` for performance reasons. +If you want integrity-protected storage, set the `storageClassName` parameter of your persistent volume claim to `integrity-encrypted-rwo`. + +Alternatively, you can create your own storage class with integrity protection enabled by adding `csi.storage.k8s.io/fstype: ext4-integrity` to the class `parameters`. +Or use another filesystem by specifying another file system type with the suffix `-integrity`, e.g., `csi.storage.k8s.io/fstype: xfs-integrity`. + +Note that volume expansion isn't supported for integrity-protected disks. + +::: + + + + +GCP comes with two storage classes by default. + +* `encrypted-rwo` + * Uses [standard persistent disks](https://cloud.google.com/compute/docs/disks#pdspecs) + * ext-4 filesystem + * Encryption of all data written to disk +* `integrity-encrypted-rwo` + * Uses [performance (SSD) persistent disks](https://cloud.google.com/compute/docs/disks#pdspecs) + * ext-4 filesystem + * Encryption of all data written to disk + * Integrity protection of data written to disk + +For more information on encryption algorithms and key sizes, refer to [cryptographic algorithms](../architecture/encrypted-storage.md#cryptographic-algorithms). + +:::info + +The default storage class is set to `encrypted-rwo` for performance reasons. +If you want integrity-protected storage, set the `storageClassName` parameter of your persistent volume claim to `integrity-encrypted-rwo`. + +Alternatively, you can create your own storage class with integrity protection enabled by adding `csi.storage.k8s.io/fstype: ext4-integrity` to the class `parameters`. +Or use another filesystem by specifying another file system type with the suffix `-integrity`, e.g., `csi.storage.k8s.io/fstype: xfs-integrity`. + +Note that volume expansion isn't supported for integrity-protected disks. + +::: + + + + +STACKIT comes with two storage classes by default. + +* `encrypted-rwo` + * Uses [disks of `storage_premium_perf1` type](https://docs.stackit.cloud/stackit/en/service-plans-blockstorage-75137974.html) + * ext-4 filesystem + * Encryption of all data written to disk +* `integrity-encrypted-rwo` + * Uses [disks of `storage_premium_perf1` type](https://docs.stackit.cloud/stackit/en/service-plans-blockstorage-75137974.html) + * ext-4 filesystem + * Encryption of all data written to disk + * Integrity protection of data written to disk + +For more information on encryption algorithms and key sizes, refer to [cryptographic algorithms](../architecture/encrypted-storage.md#cryptographic-algorithms). + +:::info + +The default storage class is set to `encrypted-rwo` for performance reasons. +If you want integrity-protected storage, set the `storageClassName` parameter of your persistent volume claim to `integrity-encrypted-rwo`. + +Alternatively, you can create your own storage class with integrity protection enabled by adding `csi.storage.k8s.io/fstype: ext4-integrity` to the class `parameters`. +Or use another filesystem by specifying another file system type with the suffix `-integrity`, e.g., `csi.storage.k8s.io/fstype: xfs-integrity`. + +Note that volume expansion isn't supported for integrity-protected disks. + +::: + + + + +1. Create a [persistent volume](https://kubernetes.io/docs/concepts/storage/persistent-volumes/) + + A [persistent volume claim](https://kubernetes.io/docs/concepts/storage/persistent-volumes/#persistentvolumeclaims) is a request for storage with certain properties. + It can refer to a storage class. + The following creates a persistent volume claim, requesting 20 GB of storage via the `encrypted-rwo` storage class: + + ```bash + cat < + +--- + +You can terminate your cluster using the CLI. For this, you need the Terraform state directory named [`constellation-terraform`](../reference/terraform.md) in the current directory. + +:::danger + +All ephemeral storage and state of your cluster will be lost. Make sure any data is safely stored in persistent storage. Constellation can recreate your cluster and the associated encryption keys, but won't backup your application data automatically. + +::: + + + +Terminate the cluster by running: + +```bash +constellation terminate +``` + +Or without confirmation (e.g., for automation purposes): + +```bash +constellation terminate --yes +``` + +This deletes all resources created by Constellation in your cloud environment. +All local files created by the `apply` command are deleted as well, except for `constellation-mastersecret.json` and the configuration file. + +:::caution + +Termination can fail if additional resources have been created that depend on the ones managed by Constellation. In this case, you need to delete these additional +resources manually. Just run the `terminate` command again afterward to continue the termination process of the cluster. + +::: + + + +Terminate the cluster by running: + +```bash +terraform destroy +``` + +Delete all files that are no longer needed: + +```bash +rm constellation-state.yaml constellation-admin.conf +``` + +Only the `constellation-mastersecret.json` and the configuration file remain. + + + diff --git a/docs/versioned_docs/version-2.20/workflows/terraform-provider.md b/docs/versioned_docs/version-2.20/workflows/terraform-provider.md new file mode 100644 index 000000000..c7a795d3f --- /dev/null +++ b/docs/versioned_docs/version-2.20/workflows/terraform-provider.md @@ -0,0 +1,140 @@ +# Use the Terraform provider + +The Constellation Terraform provider allows to manage the full lifecycle of a Constellation cluster (namely creation, upgrades, and deletion) via Terraform. +The provider is available through the [Terraform registry](https://registry.terraform.io/providers/edgelesssys/constellation/latest) and is released in lock-step with Constellation releases. + +## Prerequisites + +- a Linux / Mac operating system (ARM64/AMD64) +- a Terraform installation of version `v1.4.4` or above + +## Quick setup + +This example shows how to set up a Constellation cluster with the reference IAM and infrastructure setup. This setup is also used when creating a Constellation cluster through the Constellation CLI. You can either consume the IAM / infrastructure modules through a remote source (recommended) or local files. The latter requires downloading the infrastructure and IAM modules for the corresponding CSP from `terraform-modules.zip` on the [Constellation release page](https://github.com/edgelesssys/constellation/releases/latest) and placing them in the Terraform workspace directory. + +1. Create a directory (workspace) for your Constellation cluster. + + ```bash + mkdir constellation-workspace + cd constellation-workspace + ``` + +2. Use one of the [example configurations for using the Constellation Terraform provider](https://github.com/edgelesssys/constellation/tree/main/terraform-provider-constellation/examples/full) or create a `main.tf` file and fill it with the resources you want to create. The [Constellation Terraform provider documentation](https://registry.terraform.io/providers/edgelesssys/constellation/latest) offers thorough documentation on the resources and their attributes. +3. Initialize and apply the Terraform configuration. + + + + Initialize the providers and apply the configuration. + + ```bash + terraform init + terraform apply + ``` + + Optionally, you can prefix the `terraform apply` command with `TF_LOG=INFO` to collect [Terraform logs](https://developer.hashicorp.com/terraform/internals/debugging) while applying the configuration. This may provide helpful output in debugging scenarios. + + + +:::info +On SEV-SNP, you need to manually patch the policy of the MAA provider before creating the Constellation cluster, as this feature isn't available in Azure's Terraform provider yet. The Constellation CLI provides a utility for patching, but you can also do it manually. + + ```bash + terraform init + terraform apply -target module.azure_iam # adjust resource path if not using the example configuration + terraform apply -target module.azure_infrastructure # adjust resource path if not using the example configuration + constellation maa-patch $(terraform output -raw maa_url) # adjust output path / input if not using the example configuration or manually patch the resource + terraform apply -target constellation_cluster.azure_example # adjust resource path if not using the example configuration + ``` + + Use the following policy if manually performing the patch. + + ``` + version= 1.0; + authorizationrules + { + [type=="x-ms-azurevm-default-securebootkeysvalidated", value==false] => deny(); + [type=="x-ms-azurevm-debuggersdisabled", value==false] => deny(); + // The line below was edited to use the MAA provider within Constellation. Do not edit manually. + //[type=="secureboot", value==false] => deny(); + [type=="x-ms-azurevm-signingdisabled", value==false] => deny(); + [type=="x-ms-azurevm-dbvalidated", value==false] => deny(); + [type=="x-ms-azurevm-dbxvalidated", value==false] => deny(); + => permit(); + }; + issuancerules + { + }; + ``` + +::: + + Initialize the providers and apply the configuration. + + ```bash + terraform init + terraform apply + ``` + + Optionally, you can prefix the `terraform apply` command with `TF_LOG=INFO` to collect [Terraform logs](https://developer.hashicorp.com/terraform/internals/debugging) while applying the configuration. This may provide helpful output in debugging scenarios. + + + + + Initialize the providers and apply the configuration. + + ```bash + terraform init + terraform apply + ``` + + Optionally, you can prefix the `terraform apply` command with `TF_LOG=INFO` to collect [Terraform logs](https://developer.hashicorp.com/terraform/internals/debugging) while applying the configuration. This may provide helpful output in debugging scenarios. + + + Initialize the providers and apply the configuration. + + ```bash + terraform init + terraform apply + ``` + + Optionally, you can prefix the `terraform apply` command with `TF_LOG=INFO` to collect [Terraform logs](https://developer.hashicorp.com/terraform/internals/debugging) while applying the configuration. This may provide helpful output in debugging scenarios. + + + +4. Connect to the cluster. + + ```bash + terraform output -raw kubeconfig > constellation-admin.conf + export KUBECONFIG=$(realpath constellation-admin.conf) + ``` + +## Bringing your own infrastructure + +Instead of using the example infrastructure used in the [quick setup](#quick-setup), you can also provide your own infrastructure. +If you need a starting point for a custom infrastructure setup, you can download the infrastructure / IAM Terraform modules for the respective CSP from the Constellation [GitHub releases](https://github.com/edgelesssys/constellation/releases). You can modify and extend the modules per your requirements, while keeping the basic functionality intact. +The module contains: + +- `{csp}`: cloud resources the cluster runs on +- `iam/{csp}`: IAM resources used within the cluster + +When upgrading your cluster, make sure to check the Constellation release notes for potential breaking changes in the reference infrastructure / IAM modules that need to be considered. + +## Cluster upgrades + +:::tip +Also see the [general documentation on cluster upgrades](./upgrade.md). +::: + +The steps for applying the upgrade are as follows: + +1. Update the version constraint of the Constellation Terraform provider in the `required_providers` block in your Terraform configuration. +2. If you explicitly set any of the version attributes of the provider's resources and data sources (e.g. `image_version` or `constellation_microservice_version`), make sure to update them too. Refer to Constellation's [version support policy](https://github.com/edgelesssys/constellation/blob/main/dev-docs/workflows/versions-support.md) for more information on how each Constellation version and its dependencies are supported. +3. Update the IAM / infrastructure configuration. + - For [remote addresses as module sources](https://developer.hashicorp.com/terraform/language/modules/sources#fetching-archives-over-http), update the version number inside the address of the `source` field of the infrastructure / IAM module to the target version. + - For [local paths as module sources](https://developer.hashicorp.com/terraform/language/modules/sources#local-paths) or when [providing your own infrastructure](#bringing-your-own-infrastructure), see the changes made in the reference modules since the upgrade's origin version and adjust your infrastructure / IAM configuration accordingly. +4. Upgrade the Terraform module and provider dependencies and apply the targeted configuration. + +```bash + terraform init -upgrade + terraform apply +``` diff --git a/docs/versioned_docs/version-2.20/workflows/troubleshooting.md b/docs/versioned_docs/version-2.20/workflows/troubleshooting.md new file mode 100644 index 000000000..195bce1cc --- /dev/null +++ b/docs/versioned_docs/version-2.20/workflows/troubleshooting.md @@ -0,0 +1,151 @@ +# Troubleshooting + +This section aids you in finding problems when working with Constellation. + +## Common issues + +### Issues with creating new clusters + +When you create a new cluster, you should always use the [latest release](https://github.com/edgelesssys/constellation/releases/latest). +If something doesn't work, check out the [known issues](https://github.com/edgelesssys/constellation/issues?q=is%3Aopen+is%3Aissue+label%3A%22known+issue%22). + +### Azure: Resource Providers can't be registered + +On Azure, you may receive the following error when running `apply` or `terminate` with limited IAM permissions: + +```shell-session +Error: Error ensuring Resource Providers are registered. + +Terraform automatically attempts to register the Resource Providers it supports to +ensure it's able to provision resources. + +If you don't have permission to register Resource Providers you may wish to use the +"skip_provider_registration" flag in the Provider block to disable this functionality. + +[...] +``` + +To continue, please ensure that the [required resource providers](../getting-started/install.md#required-permissions) have been registered in your subscription by your administrator. + +Afterward, set `ARM_SKIP_PROVIDER_REGISTRATION=true` as an environment variable and either run `apply` or `terminate` again. +For example: + +```bash +ARM_SKIP_PROVIDER_REGISTRATION=true constellation apply +``` + +Or alternatively, for `terminate`: + +```bash +ARM_SKIP_PROVIDER_REGISTRATION=true constellation terminate +``` + +### Azure: Can't update attestation policy + +On Azure, you may receive the following error when running `apply` from within an Azure environment, e.g., an Azure VM: + +```shell-session +An error occurred: patching policies: updating attestation policy: unexpected status code: 403 Forbidden +``` + +The problem occurs because the Azure SDK we use internally attempts to [authenticate towards the Azure API with the managed identity of your current environment instead of the Azure CLI token](https://pkg.go.dev/github.com/Azure/azure-sdk-for-go/sdk/azidentity#DefaultAzureCredential). + +We decided not to deviate from this behavior and comply with the ordering of credentials. + +A solution is to add the [required permissions](../getting-started/install.md#required-permissions) to the managed identity of your environment. For example, the managed identity of your Azure VM, instead of the account that you've authenticated with in the Azure CLI. + +If your setup requires a change in the ordering of credentials, please open an issue and explain your desired behavior. + + + +### Nodes fail to join with error `untrusted measurement value` + +This error indicates that a node's [attestation statement](../architecture/attestation.md) contains measurements that don't match the trusted values expected by the [JoinService](../architecture/microservices.md#joinservice). +This may for example happen if the cloud provider updates the VM's firmware such that it influences the [runtime measurements](../architecture/attestation.md#runtime-measurements) in an unforeseen way. +A failed upgrade due to an erroneous attestation config can also cause this error. +You can change the expected measurements to resolve the failure. + +:::caution + +Attestation and trusted measurements are crucial for the security of your cluster. +Be extra careful when manually changing these settings. +When in doubt, check if the encountered [issue is known](https://github.com/edgelesssys/constellation/issues?q=is%3Aopen+is%3Aissue+label%3A%22known+issue%22) or [contact support](https://github.com/edgelesssys/constellation#support). + +::: + +:::tip + +During an upgrade with modified attestation config, a backup of the current configuration is stored in the `join-config` config map in the `kube-system` namespace under the `attestationConfig_backup` key. To restore the old attestation config after a failed upgrade, replace the value of `attestationConfig` with the value from `attestationConfig_backup`: + +```bash +kubectl patch configmaps -n kube-system join-config -p "{\"data\":{\"attestationConfig\":\"$(kubectl get configmaps -n kube-system join-config -o "jsonpath={.data.attestationConfig_backup}")\"}}" +``` + +::: + +You can use the `apply` command to change measurements of a running cluster: + +1. Modify the `measurements` key in your local `constellation-conf.yaml` to the expected values. +2. Run `constellation apply`. + +Keep in mind that running `apply` also applies any version changes from your config to the cluster. + +You can run these commands to learn about the versions currently configured in the cluster: + +- Kubernetes API server version: `kubectl get nodeversion constellation-version -o json -n kube-system | jq .spec.kubernetesClusterVersion` +- image version: `kubectl get nodeversion constellation-version -o json -n kube-system | jq .spec.imageVersion` +- microservices versions: `helm list --filter 'constellation-services' -n kube-system` + +### Upgrading Kubernetes resources fails + +Constellation manages its Kubernetes resources using Helm. +When applying an upgrade, the charts that are about to be installed, and a values override file `overrides.yaml`, +are saved to disk in your current workspace under `constellation-upgrade/upgrade-/helm-charts/`. +If upgrading the charts using the Constellation CLI fails, you can review these charts and try to manually apply the upgrade. + +:::caution + +Changing and manually applying the charts may destroy cluster resources and can lead to broken Constellation deployments. +Proceed with caution and when in doubt, +check if the encountered [issue is known](https://github.com/edgelesssys/constellation/issues?q=is%3Aopen+is%3Aissue+label%3A%22known+issue%22) or [contact support](https://github.com/edgelesssys/constellation#support). + +::: + +## Diagnosing issues + +### Logs + +To get started on diagnosing issues with Constellation, it's often helpful to collect logs from nodes, pods, or other resources in the cluster. Most logs are available through Kubernetes' standard +[logging interfaces](https://kubernetes.io/docs/concepts/cluster-administration/logging/). + +To debug issues occurring at boot time of the nodes, you can use the serial console interface of the CSP while the machine boots to get a read-only view of the boot logs. + +Apart from that, Constellation also offers further [observability integrations](../architecture/observability.md). + +### Node shell access + +Debugging via a shell on a node is [directly supported by Kubernetes](https://kubernetes.io/docs/tasks/debug/debug-application/debug-running-pod/#node-shell-session). + +1. Figure out which node to connect to: + + ```bash + kubectl get nodes + # or to see more information, such as IPs: + kubectl get nodes -o wide + ``` + +2. Connect to the node: + + ```bash + kubectl debug node/constell-worker-xksa0-000000 -it --image=busybox + ``` + + You will be presented with a prompt. + + The nodes file system is mounted at `/host`. + +3. Once finished, clean up the debug pod: + + ```bash + kubectl delete pod node-debugger-constell-worker-xksa0-000000-bjthj + ``` diff --git a/docs/versioned_docs/version-2.20/workflows/trusted-launch.md b/docs/versioned_docs/version-2.20/workflows/trusted-launch.md new file mode 100644 index 000000000..d6d01d8eb --- /dev/null +++ b/docs/versioned_docs/version-2.20/workflows/trusted-launch.md @@ -0,0 +1,54 @@ +# Use Azure trusted launch VMs + +Constellation also supports [trusted launch VMs](https://docs.microsoft.com/en-us/azure/virtual-machines/trusted-launch) on Microsoft Azure. Trusted launch VMs don't offer the same level of security as Confidential VMs, but are available in more regions and in larger quantities. The main difference between trusted launch VMs and normal VMs is that the former offer vTPM-based remote attestation. When used with trusted launch VMs, Constellation relies on vTPM-based remote attestation to verify nodes. + +:::caution + +Trusted launch VMs don't provide runtime encryption and don't keep the cloud service provider (CSP) out of your trusted computing base. + +::: + +Constellation supports trusted launch VMs with instance types `Standard_D*_v4` and `Standard_E*_v4`. Run `constellation config instance-types` for a list of all supported instance types. + +## VM images + +Azure currently doesn't support [community galleries for trusted launch VMs](https://docs.microsoft.com/en-us/azure/virtual-machines/share-gallery-community). Thus, you need to manually import the Constellation node image into your cloud subscription. + +The latest image is available at `https://cdn.confidential.cloud/constellation/images/azure/trusted-launch/v2.2.0/constellation.img`. Simply adjust the version number to download a newer version. + +After you've downloaded the image, create a resource group `constellation-images` in your Azure subscription and import the image. +You can use a script to do this: + +```bash +wget https://raw.githubusercontent.com/edgelesssys/constellation/main/hack/importAzure.sh +chmod +x importAzure.sh +AZURE_IMAGE_VERSION=2.2.0 AZURE_RESOURCE_GROUP_NAME=constellation-images AZURE_IMAGE_FILE=./constellation.img ./importAzure.sh +``` + +The script creates the following resources: + +1. A new image gallery with the default name `constellation-import` +2. A new image definition with the default name `constellation` +3. The actual image with the provided version. In this case `2.2.0` + +Once the import is completed, use the `ID` of the image version in your `constellation-conf.yaml` for the `image` field. Set `confidentialVM` to `false`. + +Fetch the image measurements: + +```bash +IMAGE_VERSION=2.2.0 +URL=https://public-edgeless-constellation.s3.us-east-2.amazonaws.com//communitygalleries/constellationcvm-b3782fa0-0df7-4f2f-963e-fc7fc42663df/images/constellation/versions/$IMAGE_VERSION/measurements.yaml +constellation config fetch-measurements -u$URL -s$URL.sig +``` + +:::info + +The [`constellation apply`](create.md) command will issue a warning because manually imported images aren't recognized as production grade images: + +```shell-session +Configured image doesn't look like a released production image. Double check image before deploying to production. +``` + +Please ignore this warning. + +::: diff --git a/docs/versioned_docs/version-2.20/workflows/upgrade.md b/docs/versioned_docs/version-2.20/workflows/upgrade.md new file mode 100644 index 000000000..3db2ecad6 --- /dev/null +++ b/docs/versioned_docs/version-2.20/workflows/upgrade.md @@ -0,0 +1,110 @@ +# Upgrade your cluster + +Constellation provides an easy way to upgrade all components of your cluster, without disrupting its availability. +Specifically, you can upgrade the Kubernetes version, the nodes' image, and the Constellation microservices. +You configure the desired versions in your local Constellation configuration and trigger upgrades with the `apply` command. +To learn about available versions you use the `upgrade check` command. +Which versions are available depends on the CLI version you are using. + +## Update the CLI + +Each CLI comes with a set of supported microservice and Kubernetes versions. +Most importantly, a given CLI version can only upgrade a cluster of the previous minor version, but not older ones. +This means that you have to upgrade your CLI and cluster one minor version at a time. + +For example, if you are currently on CLI version v2.6 and the latest version is v2.8, you should + +* upgrade the CLI to v2.7, +* upgrade the cluster to v2.7, +* and only then continue upgrading the CLI (and the cluster) to v2.8 after. + +Also note that if your current Kubernetes version isn't supported by the next CLI version, use your current CLI to upgrade to a newer Kubernetes version first. + +To learn which Kubernetes versions are supported by a particular CLI, run [constellation config kubernetes-versions](../reference/cli.md#constellation-config-kubernetes-versions). + +## Migrate the configuration + +The Constellation configuration file is located in the file `constellation-conf.yaml` in your workspace. +Refer to the [migration reference](../reference/migration.md) to check if you need to update fields in your configuration file. +Use [`constellation config migrate`](../reference/cli.md#constellation-config-migrate) to automatically update an old config file to a new format. + +## Check for upgrades + +To learn which versions the current CLI can upgrade to and what's installed in your cluster, run: + +```bash +# Show possible upgrades +constellation upgrade check + +# Show possible upgrades and write them to config file +constellation upgrade check --update-config +``` + +You can either enter the reported target versions into your config manually or run the above command with the `--update-config` flag. +When using this flag, the `kubernetesVersion`, `image`, `microserviceVersion`, and `attestation` fields are overwritten with the smallest available upgrade. + +## Apply the upgrade + +Once you updated your config with the desired versions, you can trigger the upgrade with this command: + +```bash +constellation apply +``` + +Microservice upgrades will be finished within a few minutes, depending on the cluster size. +If you are interested, you can monitor pods restarting in the `kube-system` namespace with your tool of choice. + +Image and Kubernetes upgrades take longer. +For each node in your cluster, a new node has to be created and joined. +The process usually takes up to ten minutes per node. + +When applying an upgrade, the Helm charts for the upgrade as well as backup files of Constellation-managed Custom Resource Definitions, Custom Resources, and Terraform state are created. +You can use the Terraform state backup to restore previous resources in case an upgrade misconfigured or erroneously deleted a resource. +You can use the Custom Resource (Definition) backup files to restore Custom Resources and Definitions manually (e.g., via `kubectl apply`) if the automatic migration of those resources fails. +You can use the Helm charts to manually apply upgrades to the Kubernetes resources, should an upgrade fail. + +:::note + +For advanced users: the upgrade consists of several phases that can be individually skipped through the `--skip-phases` flag. +The phases are `infrastracture` for the cloud resource management through Terraform, `helm` for the chart management of the microservices, `image` for OS image upgrades, and `k8s` for Kubernetes version upgrades. + +::: + +## Check the status + +Upgrades are asynchronous operations. +After you run `apply`, it will take a while until the upgrade has completed. +To understand if an upgrade is finished, you can run: + +```bash +constellation status +``` + +This command displays the following information: + +* The installed services and their versions +* The image and Kubernetes version the cluster is expecting on each node +* How many nodes are up to date + +Here's an example output: + +```shell-session +Target versions: + Image: v2.6.0 + Kubernetes: v1.25.8 +Service versions: + Cilium: v1.12.1 + cert-manager: v1.10.0 + constellation-operators: v2.6.0 + constellation-services: v2.6.0 +Cluster status: Some node versions are out of date + Image: 23/25 + Kubernetes: 25/25 +``` + +This output indicates that the cluster is running Kubernetes version `1.25.8`, and all nodes have the appropriate binaries installed. +23 out of 25 nodes have already upgraded to the targeted image version of `2.6.0`, while two are still in progress. + +## Apply further upgrades + +After the upgrade is finished, you can run `constellation upgrade check` again to see if there are more upgrades available. If so, repeat the process. diff --git a/docs/versioned_docs/version-2.20/workflows/verify-cli.md b/docs/versioned_docs/version-2.20/workflows/verify-cli.md new file mode 100644 index 000000000..e33569d37 --- /dev/null +++ b/docs/versioned_docs/version-2.20/workflows/verify-cli.md @@ -0,0 +1,129 @@ +# Verify the CLI + +:::info +This recording presents the essence of this page. It's recommended to read it in full for the motivation and all details. +::: + + + +--- + +Edgeless Systems uses [sigstore](https://www.sigstore.dev/) and [SLSA](https://slsa.dev) to ensure supply-chain security for the Constellation CLI and node images ("artifacts"). sigstore consists of three components: [Cosign](https://docs.sigstore.dev/cosign/signing/overview/), [Rekor](https://docs.sigstore.dev/logging/overview), and Fulcio. Edgeless Systems uses Cosign to sign artifacts. All signatures are uploaded to the public Rekor transparency log, which resides at `https://rekor.sigstore.dev`. + +:::note +The public key for Edgeless Systems' long-term code-signing key is: + +``` +-----BEGIN PUBLIC KEY----- +MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEf8F1hpmwE+YCFXzjGtaQcrL6XZVT +JmEe5iSLvG1SyQSAew7WdMKF6o9t8e2TFuCkzlOhhlws2OHWbiFZnFWCFw== +-----END PUBLIC KEY----- +``` + +The public key is also available for download at [https://edgeless.systems/es.pub](https://edgeless.systems/es.pub) and in the Twitter profile [@EdgelessSystems](https://twitter.com/EdgelessSystems). +::: + +The Rekor transparency log is a public append-only ledger that verifies and records signatures and associated metadata. The Rekor transparency log enables everyone to observe the sequence of (software) signatures issued by Edgeless Systems and many other parties. The transparency log allows for the public identification of dubious or malicious signatures. + +You should always ensure that (1) your CLI executable was signed with the private key corresponding to the above public key and that (2) there is a corresponding entry in the Rekor transparency log. Both can be done as described in the following. + +:::info +You don't need to verify the Constellation node images. This is done automatically by your CLI and the rest of Constellation. +::: + +## Verify the signature + +:::info +This guide assumes Linux on an amd64 processor. The exact steps for other platforms differ slightly. +::: + +First, [install the Cosign CLI](https://docs.sigstore.dev/cosign/system_config/installation/). Next, [download](https://github.com/edgelesssys/constellation/releases) and verify the signature that accompanies your CLI executable, for example: + +```shell-session +$ cosign verify-blob --key https://edgeless.systems/es.pub --signature constellation-linux-amd64.sig constellation-linux-amd64 + +Verified OK +``` + +The above performs an offline verification of the provided public key, signature, and executable. To also verify that a corresponding entry exists in the public Rekor transparency log, add the variable `COSIGN_EXPERIMENTAL=1`: + +```shell-session +$ COSIGN_EXPERIMENTAL=1 cosign verify-blob --key https://edgeless.systems/es.pub --signature constellation-linux-amd64.sig constellation-linux-amd64 + +tlog entry verified with uuid: afaba7f6635b3e058888692841848e5514357315be9528474b23f5dcccb82b13 index: 3477047 +Verified OK +``` + +🏁 You now know that your CLI executable was officially released and signed by Edgeless Systems. + +### Optional: Manually inspect the transparency log + +To further inspect the public Rekor transparency log, [install the Rekor CLI](https://docs.sigstore.dev/logging/installation). A search for the CLI executable should give a single UUID. (Note that this UUID contains the UUID from the previous `cosign` command.) + +```shell-session +$ rekor-cli search --artifact constellation-linux-amd64 + +Found matching entries (listed by UUID): +362f8ecba72f4326afaba7f6635b3e058888692841848e5514357315be9528474b23f5dcccb82b13 +``` + +With this UUID you can get the full entry from the transparency log: + +```shell-session +$ rekor-cli get --uuid=362f8ecba72f4326afaba7f6635b3e058888692841848e5514357315be9528474b23f5dcccb82b13 + +LogID: c0d23d6ad406973f9559f3ba2d1ca01f84147d8ffc5b8445c224f98b9591801d +Index: 3477047 +IntegratedTime: 2022-09-12T22:28:16Z +UUID: afaba7f6635b3e058888692841848e5514357315be9528474b23f5dcccb82b13 +Body: { + "HashedRekordObj": { + "data": { + "hash": { + "algorithm": "sha256", + "value": "40e137b9b9b8204d672642fd1e181c6d5ccb50cfc5cc7fcbb06a8c2c78f44aff" + } + }, + "signature": { + "content": "MEUCIQCSER3mGj+j5Pr2kOXTlCIHQC3gT30I7qkLr9Awt6eUUQIgcLUKRIlY50UN8JGwVeNgkBZyYD8HMxwC/LFRWoMn180=", + "publicKey": { + "content": "LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFZjhGMWhwbXdFK1lDRlh6akd0YVFjckw2WFpWVApKbUVlNWlTTHZHMVN5UVNBZXc3V2RNS0Y2bzl0OGUyVEZ1Q2t6bE9oaGx3czJPSFdiaUZabkZXQ0Z3PT0KLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tCg==" + } + } + } +} +``` + +The field `publicKey` should contain Edgeless Systems' public key in Base64 encoding. + +You can get an exhaustive list of artifact signatures issued by Edgeless Systems via the following command: + +```bash +rekor-cli search --public-key https://edgeless.systems/es.pub --pki-format x509 +``` + +Edgeless Systems monitors this list to detect potential unauthorized use of its private key. + +## Verify the provenance + +Provenance attests that a software artifact was produced by a specific repository and build system invocation. For more information on provenance visit [slsa.dev](https://slsa.dev/provenance/v0.2) and learn about the [adoption of SLSA for Constellation](../reference/slsa.md). + +Just as checking its signature proves that the CLI hasn't been manipulated, checking the provenance proves that the artifact was produced by the expected build process and hasn't been tampered with. + +To verify the provenance, first install the [slsa-verifier](https://github.com/slsa-framework/slsa-verifier). Then make sure you have the provenance file (`constellation.intoto.jsonl`) and Constellation CLI downloaded. Both are available on the [GitHub release page](https://github.com/edgelesssys/constellation/releases). + +:::info +The same provenance file is valid for all Constellation CLI executables of a given version independent of the target platform. +::: + +Use the verifier to perform the check: + +```shell-session +$ slsa-verifier verify-artifact constellation-linux-amd64 \ + --provenance-path constellation.intoto.jsonl \ + --source-uri github.com/edgelesssys/constellation + +Verified signature against tlog entry index 7771317 at URL: https://rekor.sigstore.dev/api/v1/log/entries/24296fb24b8ad77af2c04c8b4ae0d5bc5... +Verified build using builder https://github.com/slsa-framework/slsa-github-generator/.github/workflows/generator_generic_slsa3.yml@refs/tags/v1.2.2 at commit 18e9924b416323c37b9cdfd6cc728de8a947424a +PASSED: Verified SLSA provenance +``` diff --git a/docs/versioned_docs/version-2.20/workflows/verify-cluster.md b/docs/versioned_docs/version-2.20/workflows/verify-cluster.md new file mode 100644 index 000000000..b6595ebf2 --- /dev/null +++ b/docs/versioned_docs/version-2.20/workflows/verify-cluster.md @@ -0,0 +1,97 @@ +# Verify your cluster + +Constellation's [attestation feature](../architecture/attestation.md) allows you, or a third party, to verify the integrity and confidentiality of your Constellation cluster. + +## Fetch measurements + +To verify the integrity of Constellation you need trusted measurements to verify against. For each node image released by Edgeless Systems, there are signed measurements, which you can download using the CLI: + +```bash +constellation config fetch-measurements +``` + +This command performs the following steps: + +1. Download the signed measurements for the configured image. By default, this will use Edgeless Systems' public measurement registry. +2. Verify the signature of the measurements. This will use Edgeless Systems' [public key](https://edgeless.systems/es.pub). +3. Write measurements into configuration file. + +The configuration file then contains a list of `measurements` similar to the following: + +```yaml +# ... +measurements: + 0: + expected: "0f35c214608d93c7a6e68ae7359b4a8be5a0e99eea9107ece427c4dea4e439cf" + warnOnly: false + 4: + expected: "02c7a67c01ec70ffaf23d73a12f749ab150a8ac6dc529bda2fe1096a98bf42ea" + warnOnly: false + 5: + expected: "e6949026b72e5045706cd1318889b3874480f7a3f7c5c590912391a2d15e6975" + warnOnly: true + 8: + expected: "0000000000000000000000000000000000000000000000000000000000000000" + warnOnly: false + 9: + expected: "f0a6e8601b00e2fdc57195686cd4ef45eb43a556ac1209b8e25d993213d68384" + warnOnly: false + 11: + expected: "0000000000000000000000000000000000000000000000000000000000000000" + warnOnly: false + 12: + expected: "da99eb6cf7c7fbb692067c87fd5ca0b7117dc293578e4fea41f95d3d3d6af5e2" + warnOnly: false + 13: + expected: "0000000000000000000000000000000000000000000000000000000000000000" + warnOnly: false + 14: + expected: "d7c4cc7ff7933022f013e03bdee875b91720b5b86cf1753cad830f95e791926f" + warnOnly: true + 15: + expected: "0000000000000000000000000000000000000000000000000000000000000000" + warnOnly: false +# ... +``` + +Each entry specifies the expected value of the Constellation node, and whether the measurement should be enforced (`warnOnly: false`), or only a warning should be logged (`warnOnly: true`). +By default, the subset of the [available measurements](../architecture/attestation.md#runtime-measurements) that can be locally reproduced and verified is enforced. + +During attestation, the validating side (CLI or [join service](../architecture/microservices.md#joinservice)) compares each measurement reported by the issuing side (first node or joining node) individually. +For mismatching measurements that have set `warnOnly` to `true` only a warning is emitted. +For mismatching measurements that have set `warnOnly` to `false` an error is emitted and attestation fails. +If attestation fails for a new node, it isn't permitted to join the cluster. + +## The *verify* command + +:::note +The steps below are purely optional. They're automatically executed by `constellation apply` when you initialize your cluster. The `constellation verify` command mostly has an illustrative purpose. +::: + +The `verify` command obtains and verifies an attestation statement from a running Constellation cluster. + +```bash +constellation verify [--cluster-id ...] +``` + +From the attestation statement, the command verifies the following properties: + +* The cluster is using the correct Confidential VM (CVM) type. +* Inside the CVMs, the correct node images are running. The node images are identified through the measurements obtained in the previous step. +* The unique ID of the cluster matches the one from your `constellation-state.yaml` file or passed in via `--cluster-id`. + +Once the above properties are verified, you know that you are talking to the right Constellation cluster and it's in a good and trustworthy shape. + +### Custom arguments + +The `verify` command also allows you to verify any Constellation deployment that you have network access to. For this you need the following: + +* The IP address of a running Constellation cluster's [VerificationService](../architecture/microservices.md#verificationservice). The `VerificationService` is exposed via a `NodePort` service using the external IP address of your cluster. Run `kubectl get nodes -o wide` and look for `EXTERNAL-IP`. +* The cluster's *clusterID*. See [cluster identity](../architecture/keys.md#cluster-identity) for more details. +* A `constellation-conf.yaml` file with the expected measurements of the cluster in your working directory. + +For example: + +```shell-session +constellation verify -e 192.0.2.1 --cluster-id Q29uc3RlbGxhdGlvbkRvY3VtZW50YXRpb25TZWNyZXQ= +``` diff --git a/docs/versioned_sidebars/version-2.20-sidebars.json b/docs/versioned_sidebars/version-2.20-sidebars.json new file mode 100644 index 000000000..c9937ab4f --- /dev/null +++ b/docs/versioned_sidebars/version-2.20-sidebars.json @@ -0,0 +1,304 @@ +{ + "docs": [ + { + "type": "doc", + "label": "Introduction", + "id": "intro" + }, + { + "type": "category", + "label": "Basics", + "link": { + "type": "generated-index" + }, + "items": [ + { + "type": "doc", + "label": "Confidential Kubernetes", + "id": "overview/confidential-kubernetes" + }, + { + "type": "doc", + "label": "Security benefits", + "id": "overview/security-benefits" + }, + { + "type": "doc", + "label": "Product features", + "id": "overview/product" + }, + { + "type": "doc", + "label": "Feature status of clouds", + "id": "overview/clouds" + }, + { + "type": "category", + "label": "Performance", + "link": { + "type": "doc", + "id": "overview/performance/performance" + }, + "items": [ + { + "type": "doc", + "label": "Compute benchmarks", + "id": "overview/performance/compute" + }, + { + "type": "doc", + "label": "I/O benchmarks", + "id": "overview/performance/io" + }, + { + "type": "doc", + "label": "Application benchmarks", + "id": "overview/performance/application" + } + ] + }, + { + "type": "doc", + "label": "License", + "id": "overview/license" + } + ] + }, + { + "type": "category", + "label": "Getting started", + "link": { + "type": "generated-index" + }, + "items": [ + { + "type": "doc", + "label": "Installation", + "id": "getting-started/install" + }, + { + "type": "doc", + "label": "First steps (cloud)", + "id": "getting-started/first-steps" + }, + { + "type": "doc", + "label": "First steps (local)", + "id": "getting-started/first-steps-local" + }, + { + "type": "doc", + "label": "Cloud Marketplaces", + "id": "getting-started/marketplaces" + }, + { + "type": "category", + "label": "Examples", + "link": { + "type": "doc", + "id": "getting-started/examples" + }, + "items": [ + { + "type": "doc", + "label": "Emojivoto", + "id": "getting-started/examples/emojivoto" + }, + { + "type": "doc", + "label": "Online Boutique", + "id": "getting-started/examples/online-boutique" + }, + { + "type": "doc", + "label": "Horizontal Pod Autoscaling", + "id": "getting-started/examples/horizontal-scaling" + }, + { + "type": "doc", + "label": "Filestash with s3proxy", + "id": "getting-started/examples/filestash-s3proxy" + } + ] + } + ] + }, + { + "type": "category", + "label": "Workflows", + "link": { + "type": "generated-index" + }, + "items": [ + { + "type": "doc", + "label": "Verify the CLI", + "id": "workflows/verify-cli" + }, + { + "type": "doc", + "label": "Configure your cluster", + "id": "workflows/config" + }, + { + "type": "doc", + "label": "Create your cluster", + "id": "workflows/create" + }, + { + "type": "doc", + "label": "Scale your cluster", + "id": "workflows/scale" + }, + { + "type": "doc", + "label": "Upgrade your cluster", + "id": "workflows/upgrade" + }, + { + "type": "doc", + "label": "Expose a service", + "id": "workflows/lb" + }, + { + "type": "doc", + "label": "Install cert-manager", + "id": "workflows/cert-manager" + }, + { + "type": "doc", + "label": "Install s3proxy", + "id": "workflows/s3proxy" + }, + { + "type": "doc", + "label": "Terminate your cluster", + "id": "workflows/terminate" + }, + { + "type": "doc", + "label": "Recover your cluster", + "id": "workflows/recovery" + }, + { + "type": "doc", + "label": "Verify your cluster", + "id": "workflows/verify-cluster" + }, + { + "type": "doc", + "label": "Use persistent storage", + "id": "workflows/storage" + }, + { + "type": "doc", + "label": "Use the Terraform provider", + "id": "workflows/terraform-provider" + }, + { + "type": "doc", + "label": "Consume SBOMs", + "id": "workflows/sbom" + }, + { + "type": "doc", + "label": "Reproduce release artifacts", + "id": "workflows/reproducible-builds" + }, + { + "type": "doc", + "label": "Troubleshooting", + "id": "workflows/troubleshooting" + } + ] + }, + { + "type": "category", + "label": "Architecture", + "link": { + "type": "generated-index" + }, + "items": [ + { + "type": "doc", + "label": "Overview", + "id": "architecture/overview" + }, + { + "type": "doc", + "label": "Cluster orchestration", + "id": "architecture/orchestration" + }, + { + "type": "doc", + "label": "Versions and support", + "id": "architecture/versions" + }, + { + "type": "doc", + "label": "Microservices", + "id": "architecture/microservices" + }, + { + "type": "doc", + "label": "Attestation", + "id": "architecture/attestation" + }, + { + "type": "doc", + "label": "Images", + "id": "architecture/images" + }, + { + "type": "doc", + "label": "Keys and cryptographic primitives", + "id": "architecture/keys" + }, + { + "type": "doc", + "label": "Encrypted persistent storage", + "id": "architecture/encrypted-storage" + }, + { + "type": "doc", + "label": "Networking", + "id": "architecture/networking" + }, + { + "type": "doc", + "label": "Observability", + "id": "architecture/observability" + } + ] + }, + { + "type": "category", + "label": "Reference", + "link": { + "type": "generated-index" + }, + "items": [ + { + "type": "doc", + "label": "CLI", + "id": "reference/cli" + }, + { + "type": "doc", + "label": "Configuration migrations", + "id": "reference/migration" + }, + { + "type": "doc", + "label": "Terraform usage", + "id": "reference/terraform" + }, + { + "type": "doc", + "label": "SLSA adoption", + "id": "reference/slsa" + } + ] + } + ] +} diff --git a/docs/versions.json b/docs/versions.json index 89f88399a..0cdf61905 100644 --- a/docs/versions.json +++ b/docs/versions.json @@ -1,4 +1,5 @@ [ + "2.20", "2.19", "2.18", "2.17", diff --git a/version.txt b/version.txt index 62717a0a7..e34e2ae38 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -v2.20.0-pre +v2.21.0-pre From 224e6e397c8363daa3704265ed3e11acc000ab45 Mon Sep 17 00:00:00 2001 From: edgelessci <71088502+edgelessci@users.noreply.github.com> Date: Wed, 4 Dec 2024 10:49:53 +0100 Subject: [PATCH 005/311] image: update measurements and image version (#3527) Co-authored-by: edgelessci --- .../measurements/measurements_enterprise.go | 16 ++++++++-------- internal/config/image_enterprise.go | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/internal/attestation/measurements/measurements_enterprise.go b/internal/attestation/measurements/measurements_enterprise.go index ba732512d..ae53af1e4 100644 --- a/internal/attestation/measurements/measurements_enterprise.go +++ b/internal/attestation/measurements/measurements_enterprise.go @@ -19,14 +19,14 @@ package measurements // revive:disable:var-naming var ( - aws_AWSNitroTPM = M{0: {Expected: []byte{0x73, 0x7f, 0x76, 0x7a, 0x12, 0xf5, 0x4e, 0x70, 0xee, 0xcb, 0xc8, 0x68, 0x40, 0x11, 0x32, 0x3a, 0xe2, 0xfe, 0x2d, 0xd9, 0xf9, 0x07, 0x85, 0x57, 0x79, 0x69, 0xd7, 0xa2, 0x01, 0x3e, 0x8c, 0x12}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x52, 0x4e, 0xb1, 0x3d, 0x5e, 0x3e, 0x0f, 0x7c, 0x80, 0xa3, 0x25, 0x33, 0x8d, 0xec, 0x99, 0xc5, 0x02, 0x71, 0xb0, 0x8b, 0xd7, 0x10, 0x38, 0x6f, 0xce, 0x65, 0x19, 0x9f, 0xef, 0x92, 0x14, 0x61}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x87, 0xac, 0x51, 0xf1, 0xb5, 0x4e, 0x67, 0xfb, 0x58, 0xb1, 0x48, 0xe0, 0xa5, 0x93, 0x52, 0x06, 0x21, 0x1b, 0xf6, 0x79, 0x5e, 0xb5, 0x03, 0x49, 0x9d, 0x47, 0x2b, 0x4c, 0x79, 0x4d, 0x9d, 0x74}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xa2, 0xe0, 0x94, 0xad, 0x2f, 0x1f, 0xc8, 0xb5, 0x14, 0x65, 0xfd, 0x68, 0xec, 0x9c, 0xe3, 0xb5, 0xf8, 0x46, 0x7a, 0xa0, 0x31, 0xae, 0x20, 0x56, 0x8a, 0x82, 0xdd, 0xdd, 0x12, 0x9a, 0x10, 0xe7}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - aws_AWSSEVSNP = M{0: {Expected: []byte{0x7b, 0x06, 0x8c, 0x0c, 0x3a, 0xc2, 0x9a, 0xfe, 0x26, 0x41, 0x34, 0x53, 0x6b, 0x9b, 0xe2, 0x6f, 0x1d, 0x4c, 0xcd, 0x57, 0x5b, 0x88, 0xd3, 0xc3, 0xce, 0xab, 0xf3, 0x6a, 0xc9, 0x9c, 0x02, 0x78}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x1f, 0xb0, 0xd4, 0x6b, 0x77, 0x91, 0xe8, 0x51, 0xf9, 0x22, 0xe7, 0xb7, 0x93, 0x99, 0x0a, 0x92, 0x1c, 0xcc, 0x8e, 0xe1, 0xc6, 0x17, 0x20, 0x9e, 0x25, 0xf0, 0x53, 0x8d, 0x38, 0xb7, 0xf8, 0x3f}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xd3, 0xbc, 0xd3, 0xcc, 0x12, 0x2a, 0xc5, 0x1b, 0xb0, 0x71, 0x4a, 0xac, 0x95, 0x4d, 0x8c, 0x95, 0x9e, 0xf1, 0x96, 0x8f, 0x4c, 0x67, 0xce, 0xce, 0x05, 0xdb, 0xfb, 0xb1, 0xda, 0xdc, 0xb9, 0xaf}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x1c, 0xcd, 0x6c, 0x28, 0x4b, 0x3c, 0x7a, 0x0d, 0x59, 0x31, 0x63, 0x7f, 0x60, 0x7c, 0x06, 0x00, 0xec, 0x64, 0x46, 0x26, 0x1d, 0x3e, 0xe5, 0x78, 0xb5, 0x93, 0x25, 0x78, 0xdb, 0xb8, 0x8a, 0xf8}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - azure_AzureSEVSNP = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x85, 0xb8, 0x95, 0x18, 0x35, 0x3a, 0x65, 0x29, 0xe9, 0xb3, 0x55, 0xb2, 0xc4, 0x2a, 0x3b, 0xd9, 0x02, 0x54, 0x59, 0x1a, 0x51, 0xc5, 0x12, 0x8b, 0x90, 0xc3, 0x9a, 0xcb, 0x46, 0x93, 0x91, 0xd1}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x5e, 0x05, 0xc8, 0xe4, 0xea, 0x69, 0x9a, 0x0d, 0xff, 0xe0, 0x5a, 0xe1, 0x0b, 0x0c, 0xe3, 0x92, 0x4c, 0xbe, 0xe5, 0xdd, 0xfe, 0xe5, 0x05, 0x54, 0x18, 0x35, 0x0b, 0x3e, 0x5f, 0x37, 0x21, 0xd9}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xba, 0x3f, 0x88, 0x34, 0xeb, 0xbc, 0x5e, 0xe1, 0xb7, 0x5b, 0x82, 0xa6, 0x77, 0x8f, 0x81, 0xe3, 0x58, 0xa0, 0x0e, 0x04, 0xca, 0xcd, 0xfb, 0xbe, 0x28, 0x7e, 0x95, 0x15, 0x79, 0x2e, 0xc2, 0x76}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - azure_AzureTDX = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xd7, 0xa4, 0x27, 0x21, 0x96, 0x85, 0xf9, 0xa9, 0x4d, 0x9f, 0x5b, 0xcb, 0xb1, 0x97, 0xf1, 0x5b, 0x90, 0x49, 0xe3, 0xea, 0xaa, 0xf7, 0xa6, 0x98, 0xf6, 0x9e, 0x5c, 0x84, 0x20, 0x3e, 0xc8, 0xa6}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x8f, 0x94, 0x38, 0x33, 0x1d, 0xf2, 0x1a, 0x0b, 0x4e, 0x54, 0xf9, 0xd2, 0xea, 0x85, 0x09, 0x86, 0x7a, 0x7e, 0x92, 0x79, 0x6f, 0x7d, 0x29, 0xa6, 0x59, 0x23, 0xd0, 0x81, 0x94, 0xaa, 0xff, 0x0b}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xfb, 0x6e, 0xc9, 0x39, 0xca, 0xa8, 0x0d, 0xa7, 0xd7, 0x3b, 0x12, 0xf0, 0x88, 0x32, 0x8e, 0x2e, 0x56, 0xa6, 0x0a, 0xcc, 0x77, 0xa3, 0x15, 0xb6, 0x28, 0x2d, 0x7a, 0x85, 0xa2, 0xe3, 0x00, 0xd5}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + aws_AWSNitroTPM = M{0: {Expected: []byte{0x73, 0x7f, 0x76, 0x7a, 0x12, 0xf5, 0x4e, 0x70, 0xee, 0xcb, 0xc8, 0x68, 0x40, 0x11, 0x32, 0x3a, 0xe2, 0xfe, 0x2d, 0xd9, 0xf9, 0x07, 0x85, 0x57, 0x79, 0x69, 0xd7, 0xa2, 0x01, 0x3e, 0x8c, 0x12}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x39, 0xe4, 0x49, 0xf1, 0x12, 0x29, 0x5f, 0x2e, 0x45, 0x6d, 0xa4, 0xa0, 0xd8, 0xaa, 0x5c, 0x1f, 0xe9, 0xf1, 0x39, 0x07, 0xac, 0x44, 0xe1, 0x5a, 0x2d, 0x6c, 0x51, 0x16, 0xb2, 0x0c, 0xd5, 0xad}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x56, 0x81, 0xec, 0x8e, 0x59, 0x2f, 0x9f, 0xa4, 0xba, 0x8f, 0xe5, 0x34, 0x09, 0x48, 0x15, 0xe2, 0x61, 0xd6, 0x10, 0xc6, 0x22, 0x37, 0x0b, 0xbd, 0xfd, 0x16, 0x91, 0x73, 0x47, 0xa8, 0x3b, 0x37}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x54, 0xcd, 0xbf, 0x9c, 0x0d, 0xf8, 0xe3, 0x21, 0x4f, 0x21, 0x24, 0x88, 0xa0, 0x11, 0xe4, 0xcd, 0xe3, 0xa2, 0x53, 0x00, 0x95, 0xa9, 0x8e, 0xfd, 0x75, 0x55, 0x5e, 0xdb, 0x62, 0x10, 0x22, 0x67}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + aws_AWSSEVSNP = M{0: {Expected: []byte{0xd6, 0xdf, 0x85, 0x53, 0x58, 0xf5, 0xb1, 0x0f, 0x06, 0xf0, 0xfa, 0xb3, 0xf4, 0x08, 0xad, 0x26, 0xcd, 0x16, 0x5a, 0x29, 0x49, 0xba, 0xd6, 0x9e, 0x2c, 0xc7, 0x56, 0x92, 0x52, 0x9e, 0x66, 0x2a}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xa7, 0x7c, 0x1e, 0x9d, 0xb7, 0x41, 0x23, 0xab, 0xe9, 0xb7, 0x7d, 0x6c, 0x53, 0x42, 0xfa, 0x1c, 0xb4, 0xca, 0xe1, 0x75, 0x07, 0xac, 0xfc, 0x13, 0x38, 0x91, 0xa2, 0x26, 0x01, 0xa8, 0xc1, 0x7d}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x52, 0x7a, 0xc5, 0x56, 0xc4, 0xa5, 0x5d, 0xcc, 0x2f, 0xb2, 0x6b, 0xad, 0x11, 0xbb, 0x28, 0x97, 0xec, 0x63, 0x3b, 0xf7, 0x73, 0x33, 0xba, 0x34, 0x66, 0x70, 0x86, 0x9b, 0x6b, 0x83, 0x39, 0x1f}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x08, 0xac, 0x98, 0x17, 0x7f, 0x37, 0x12, 0xc6, 0x37, 0x9a, 0x2e, 0x4d, 0x8a, 0x83, 0x52, 0xfb, 0xe3, 0x89, 0x89, 0xc9, 0x2e, 0xad, 0x13, 0xf1, 0xe2, 0xf6, 0x30, 0x82, 0xe1, 0x0a, 0xce, 0x25}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + azure_AzureSEVSNP = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xfe, 0x42, 0xbe, 0xc9, 0x59, 0x48, 0xbe, 0xa2, 0xb2, 0xba, 0x2a, 0xf4, 0x83, 0x81, 0xbb, 0xc8, 0x61, 0x8a, 0xbb, 0x19, 0x87, 0xb6, 0xb9, 0x7e, 0xf0, 0xa5, 0x8f, 0x6a, 0x3b, 0x92, 0x7b, 0x68}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x40, 0x14, 0x29, 0x37, 0xb9, 0xd7, 0x94, 0x09, 0xdc, 0x93, 0x14, 0xd1, 0x7f, 0xd3, 0x02, 0x02, 0x66, 0x5d, 0x47, 0x24, 0x40, 0xcd, 0xdc, 0x29, 0x71, 0xaf, 0x97, 0xcb, 0xc4, 0xf4, 0x10, 0xa2}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x1c, 0xfb, 0x53, 0x03, 0x40, 0xd2, 0xdd, 0xca, 0xbe, 0xb5, 0x0e, 0x6b, 0x6b, 0x39, 0xe4, 0x1c, 0x0f, 0x64, 0x40, 0xed, 0x76, 0x69, 0x5d, 0x38, 0x82, 0x4d, 0x11, 0x82, 0x29, 0xa8, 0xb2, 0x55}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + azure_AzureTDX = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x74, 0xdb, 0x0e, 0x27, 0xff, 0xdb, 0x24, 0x99, 0x95, 0x4e, 0xe7, 0x30, 0x29, 0x84, 0xd2, 0xba, 0xa7, 0xbf, 0x3c, 0x14, 0xf0, 0xfc, 0x5a, 0x68, 0x24, 0x5e, 0x73, 0xe4, 0xf5, 0x95, 0xbc, 0xb4}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xf5, 0xdc, 0x97, 0x9a, 0x8a, 0x3a, 0x63, 0x25, 0xed, 0x5f, 0x40, 0x08, 0x7d, 0xd4, 0x7c, 0x67, 0x5f, 0x70, 0x85, 0x9e, 0xfd, 0x7b, 0x12, 0xf5, 0x6b, 0x20, 0x8e, 0xf0, 0x64, 0xba, 0x9a, 0xcf}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xce, 0xc2, 0xfe, 0xc6, 0xcd, 0x25, 0xa2, 0x6c, 0xc0, 0x9d, 0x9a, 0x95, 0xba, 0x16, 0x00, 0x14, 0x97, 0x1f, 0x8b, 0x6e, 0x85, 0xbb, 0x7f, 0xc0, 0x73, 0x6d, 0x73, 0xfd, 0xf8, 0xdd, 0x17, 0x0e}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} azure_AzureTrustedLaunch M - gcp_GCPSEVES = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x78, 0x2f, 0xa5, 0xdf, 0x53, 0x65, 0x67, 0x4f, 0x56, 0x16, 0x87, 0x36, 0xff, 0x01, 0x04, 0xe6, 0x04, 0xc3, 0x8c, 0xb6, 0x97, 0xde, 0x62, 0x25, 0xc8, 0xab, 0x6a, 0xe2, 0xab, 0xe8, 0x2b, 0x84}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xd5, 0x2b, 0x7a, 0xce, 0xf7, 0x34, 0xf3, 0x3e, 0x15, 0x88, 0x51, 0x36, 0x3d, 0xd9, 0xfc, 0xcf, 0x25, 0xb0, 0x95, 0x0f, 0x7a, 0x49, 0x78, 0xfb, 0x5c, 0x74, 0x93, 0x9b, 0x95, 0x9f, 0x2d, 0x37}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xd3, 0x46, 0x24, 0x85, 0xb0, 0xac, 0x6e, 0x84, 0x13, 0x53, 0xb3, 0x77, 0x8c, 0x51, 0x50, 0x0c, 0x8f, 0xb3, 0x37, 0x70, 0xe7, 0x0c, 0x83, 0xc5, 0x42, 0x47, 0x3f, 0x99, 0x56, 0x58, 0x95, 0x83}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - gcp_GCPSEVSNP = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x40, 0xab, 0xeb, 0xaf, 0x92, 0x65, 0x20, 0x4d, 0x1e, 0x4c, 0x43, 0x78, 0x76, 0xe4, 0xfc, 0xff, 0x22, 0x66, 0x1b, 0x15, 0x29, 0x1c, 0x64, 0xe8, 0xd1, 0x3e, 0x1b, 0x60, 0xa5, 0x7e, 0x9f, 0x8c}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x4a, 0x0b, 0xc5, 0xe6, 0x15, 0x3b, 0xf4, 0x81, 0x01, 0x07, 0xbe, 0x65, 0xf7, 0x3b, 0x25, 0x1b, 0x85, 0x90, 0x45, 0xd6, 0x88, 0xce, 0xc4, 0x22, 0x08, 0x56, 0x91, 0x3d, 0x06, 0x00, 0xfd, 0x9e}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x12, 0x6e, 0x0b, 0xc8, 0x0c, 0x69, 0x29, 0x18, 0x8e, 0xd1, 0x29, 0x72, 0x4b, 0x6c, 0xba, 0x8c, 0xf4, 0xb5, 0x06, 0x5e, 0xa8, 0x0c, 0x49, 0xa1, 0xce, 0xb9, 0xd5, 0xdc, 0x67, 0xf0, 0x1f, 0xb6}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - openstack_QEMUVTPM = M{4: {Expected: []byte{0x9f, 0x95, 0x8f, 0x98, 0xa5, 0xe6, 0x30, 0x94, 0xcb, 0x32, 0xff, 0x52, 0x52, 0x81, 0xcd, 0x3f, 0x70, 0x3e, 0xa2, 0x66, 0xff, 0x0c, 0x8d, 0xea, 0x66, 0xfa, 0x78, 0xa0, 0x5e, 0x26, 0x62, 0x06}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xce, 0x63, 0xd7, 0x7b, 0x6d, 0xe0, 0xc2, 0xc8, 0xcb, 0xbb, 0xe0, 0xa3, 0x31, 0xab, 0xff, 0xfa, 0x42, 0x65, 0xdf, 0x36, 0x7b, 0xbc, 0xb1, 0x54, 0x11, 0xeb, 0xc5, 0xa2, 0x44, 0xc9, 0x18, 0x67}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xe8, 0xad, 0xba, 0x5a, 0x0a, 0xa4, 0x5e, 0xfb, 0x60, 0xa1, 0x31, 0x96, 0x55, 0xf8, 0xd6, 0xd3, 0x5e, 0x81, 0xc8, 0xf7, 0xf9, 0x20, 0xb2, 0x90, 0x2a, 0xd0, 0x3f, 0x4d, 0xf6, 0x3d, 0x02, 0xaa}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + gcp_GCPSEVES = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x13, 0x04, 0x4d, 0xef, 0x65, 0xf2, 0x08, 0x8a, 0xf7, 0xae, 0xd8, 0x6c, 0xfd, 0x21, 0x95, 0xa5, 0x0d, 0xfd, 0x02, 0x0e, 0xb5, 0xc1, 0xf7, 0xce, 0xdd, 0xda, 0x68, 0xf4, 0xf6, 0x26, 0xd7, 0xda}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x7d, 0x2d, 0xe8, 0xc8, 0xf2, 0x19, 0xc6, 0x94, 0x6e, 0xe6, 0xcf, 0x44, 0xa3, 0x5e, 0x8c, 0xfe, 0xcb, 0xe6, 0xa3, 0x84, 0x1f, 0xaf, 0x0c, 0x5c, 0xcc, 0x97, 0xc6, 0x3f, 0xb9, 0x64, 0xdd, 0xbb}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x08, 0x40, 0x5d, 0x70, 0x9d, 0xef, 0xfb, 0x6b, 0x50, 0xb8, 0xdf, 0x64, 0x8d, 0x85, 0x8d, 0x3e, 0xae, 0xb4, 0xaa, 0x73, 0xe1, 0xd7, 0x74, 0xf0, 0xb9, 0x66, 0xf1, 0xe8, 0xa4, 0xe8, 0x0c, 0x95}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + gcp_GCPSEVSNP = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x5c, 0x4b, 0x6e, 0x03, 0x89, 0xea, 0xaf, 0xbd, 0x51, 0xc6, 0x1e, 0xa0, 0x50, 0x1b, 0xdd, 0xec, 0x6c, 0xeb, 0x86, 0x09, 0x06, 0xdd, 0xb3, 0x09, 0xe5, 0xcd, 0x28, 0x33, 0xab, 0x28, 0xec, 0x1f}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xef, 0x15, 0xc5, 0xd6, 0x1d, 0xa3, 0x5f, 0xf0, 0xbf, 0x44, 0x76, 0x0b, 0x68, 0xbc, 0xb0, 0xaf, 0x02, 0xde, 0x0a, 0xcd, 0xeb, 0x12, 0xba, 0x2b, 0xff, 0x6e, 0x2d, 0x2b, 0x4c, 0x4e, 0xe7, 0xae}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x5d, 0x8a, 0xa8, 0xd5, 0x87, 0xac, 0x4a, 0x4e, 0x6f, 0x37, 0x44, 0x7b, 0xf3, 0xf3, 0xee, 0x35, 0x34, 0xcf, 0x82, 0xfe, 0xa3, 0x74, 0x36, 0x94, 0xbd, 0x95, 0x46, 0x47, 0x6a, 0x56, 0x47, 0x5a}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + openstack_QEMUVTPM = M{4: {Expected: []byte{0x67, 0xbd, 0xd4, 0x35, 0x8a, 0xdd, 0x91, 0x98, 0x11, 0xe1, 0xfe, 0xb0, 0xec, 0xa5, 0xd6, 0xb0, 0xa1, 0x62, 0x0f, 0x50, 0x9c, 0xac, 0xf9, 0x30, 0x20, 0xeb, 0xec, 0x67, 0x6c, 0xb5, 0xcf, 0xf7}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x35, 0x57, 0x03, 0x01, 0xeb, 0x62, 0x8f, 0xe6, 0xdb, 0xa3, 0xdd, 0x15, 0x75, 0xbd, 0x4c, 0xb2, 0xd3, 0x24, 0xd7, 0x0e, 0x74, 0xe0, 0xfb, 0xae, 0x83, 0x1c, 0xd4, 0x6f, 0xa7, 0xae, 0x01, 0x24}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x9e, 0x59, 0x4c, 0x46, 0xb7, 0x95, 0x76, 0x3b, 0x86, 0x62, 0x41, 0x29, 0x44, 0xb0, 0x43, 0x97, 0x76, 0xa9, 0xed, 0x2c, 0xa2, 0x7a, 0xe1, 0xf9, 0x48, 0x69, 0x7e, 0x3a, 0xe5, 0x53, 0xff, 0xc5}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} qemu_QEMUTDX M - qemu_QEMUVTPM = M{4: {Expected: []byte{0x74, 0x41, 0x6d, 0x97, 0x76, 0x56, 0x22, 0xdc, 0xdb, 0x71, 0xab, 0x99, 0x11, 0xe1, 0x99, 0x98, 0x5b, 0x9d, 0x75, 0xc0, 0x9e, 0x56, 0xdb, 0xdb, 0x10, 0x7e, 0x1e, 0xbf, 0x89, 0x33, 0x0f, 0x17}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xf4, 0xa0, 0x26, 0xb1, 0x77, 0xf5, 0xa9, 0x93, 0x13, 0xbf, 0x68, 0x72, 0xa7, 0x45, 0xf3, 0xd8, 0x4a, 0xbb, 0x44, 0x29, 0xd7, 0x5d, 0xf6, 0x7d, 0x42, 0x3e, 0x3b, 0x36, 0xfa, 0x7e, 0x75, 0x63}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xd1, 0x5e, 0xb9, 0xb4, 0xd5, 0xff, 0x6f, 0x60, 0xaa, 0x1c, 0x93, 0xe4, 0x45, 0x8b, 0x76, 0xd6, 0xe3, 0x8f, 0x90, 0x06, 0xb4, 0x1b, 0xe5, 0xed, 0x8e, 0x0a, 0x37, 0xec, 0xde, 0x84, 0xd8, 0xc8}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + qemu_QEMUVTPM = M{4: {Expected: []byte{0x07, 0x31, 0x1c, 0xf9, 0xcc, 0xdc, 0x0b, 0x56, 0x08, 0xa9, 0xa2, 0x21, 0xc6, 0xa7, 0xa5, 0x3d, 0x89, 0x46, 0x74, 0x19, 0x73, 0x75, 0xe9, 0x39, 0xe0, 0x91, 0xcc, 0x00, 0x99, 0x9a, 0xbc, 0xab}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xca, 0x75, 0x64, 0xc4, 0x7e, 0x8f, 0x35, 0x27, 0xc8, 0xd6, 0x0b, 0xde, 0x28, 0xaf, 0x7c, 0x43, 0x9a, 0x2c, 0x0c, 0xc9, 0x73, 0x38, 0xa8, 0x53, 0xd8, 0x00, 0x23, 0xa5, 0x48, 0xeb, 0x0b, 0x1d}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x24, 0x69, 0x28, 0x56, 0x31, 0xca, 0x91, 0x96, 0xde, 0x61, 0x21, 0xef, 0x40, 0x39, 0x28, 0x6b, 0x69, 0xec, 0x34, 0x07, 0x7c, 0x3b, 0x5c, 0xa0, 0xd0, 0x41, 0x95, 0xe1, 0x09, 0xce, 0x9c, 0x77}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} ) diff --git a/internal/config/image_enterprise.go b/internal/config/image_enterprise.go index 9bd6dd0fd..19a74d5f6 100644 --- a/internal/config/image_enterprise.go +++ b/internal/config/image_enterprise.go @@ -10,5 +10,5 @@ package config const ( // defaultImage is the default image to use. - defaultImage = "ref/main/stream/nightly/v2.20.0-pre.0.20241128194937-5977f0f5b1d3" + defaultImage = "ref/main/stream/nightly/v2.21.0-pre.0.20241204083014-ab2782a2a2be" ) From 4bf607529b2b48ec0a5809fcbfa03a08d524ba90 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 6 Dec 2024 08:38:20 +0100 Subject: [PATCH 006/311] deps: update module k8s.io/dynamic-resource-allocation to v0.31.3 (#3519) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- go.mod | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/go.mod b/go.mod index 27dae14d0..154b8028b 100644 --- a/go.mod +++ b/go.mod @@ -15,7 +15,7 @@ replace ( k8s.io/controller-manager => k8s.io/controller-manager v0.31.3 k8s.io/cri-client => k8s.io/cri-client v0.31.1 k8s.io/csi-translation-lib => k8s.io/csi-translation-lib v0.31.3 - k8s.io/dynamic-resource-allocation => k8s.io/dynamic-resource-allocation v0.31.1 + k8s.io/dynamic-resource-allocation => k8s.io/dynamic-resource-allocation v0.31.3 k8s.io/endpointslice => k8s.io/endpointslice v0.31.1 k8s.io/kube-aggregator => k8s.io/kube-aggregator v0.31.3 k8s.io/kube-controller-manager => k8s.io/kube-controller-manager v0.31.3 From 36f8c6d5404d56139f80232aa37a38384da68650 Mon Sep 17 00:00:00 2001 From: edgelessci <71088502+edgelessci@users.noreply.github.com> Date: Mon, 9 Dec 2024 08:46:25 +0100 Subject: [PATCH 007/311] image: update locked rpms (#3530) Co-authored-by: edgelessci --- image/mirror/SHA256SUMS | 106 ++++++++++++++++++++-------------------- 1 file changed, 53 insertions(+), 53 deletions(-) diff --git a/image/mirror/SHA256SUMS b/image/mirror/SHA256SUMS index ac3f22b4b..91d85ed36 100644 --- a/image/mirror/SHA256SUMS +++ b/image/mirror/SHA256SUMS @@ -1,5 +1,5 @@ 37abef83e8927b4b48f69fcbdcc249d349c6029cc669401676d01f0ea326999e WALinuxAgent-udev-2.10.0.8-2.fc40.noarch.rpm -eeca1e4f380330d602278b8069c03e0a712f9d7c1c9533c5869c66e5f5fce4a0 aardvark-dns-1.12.2-2.fc40.x86_64.rpm +8f9c8c8be1df166f4285824580c9f6588864c167c8a2d51a6c4621d1ea3f8fde aardvark-dns-1.13.1-1.fc40.x86_64.rpm ac860c52abbc65af5835d1bd97400c531a5635d39bc1d68e36a1fe54863385ea alternatives-1.27-1.fc40.x86_64.rpm 6d0cfcd0e97421b42af58a824c7e99a6cbcdd0e81980b4ea9e0d4051ef723db3 audit-libs-4.0.2-1.fc40.i686.rpm f4ed40457780c13bebf84c1cf8981550da7e0e728e80250aed179eda8915bc7f audit-libs-4.0.2-1.fc40.x86_64.rpm @@ -50,13 +50,13 @@ ac4f1b2eaf5d452512e7b6172c93880c2b501946b71a228adc02d50bb3fb56e0 e2fsprogs-1.47 2e2bf662f060ddd75195e9d3d5f08cdd5d9cc857df3a9bcc45608337ba314a25 ec2-utils-1.2-48.amzn2.noarch.rpm e6231ec4268b3efa928250eb4106311e0f33396422245b938bfed4ba2d79c573 efitools-1.9.2-9.fc38.x86_64.rpm 6ac676d78c2df896f9794a8dffb75ea69c58d202c68f4bcf084f0d264154a666 efivar-libs-39-2.fc40.x86_64.rpm -d4b391ee444de66794804962e441ccdba74e75630a2abbcc9a14b7fd2f7cb535 elfutils-debuginfod-client-0.192-6.fc40.i686.rpm -60befd76c16ce28b1f065fac31e88cdb74d5219421587fcdde2b46abace803c0 elfutils-debuginfod-client-0.192-6.fc40.x86_64.rpm -467cc1d14f1e6ca0a3b893c087ba5ecee2ec44c33b7455b6ad9cc9b2aa1f2f54 elfutils-default-yama-scope-0.192-6.fc40.noarch.rpm -5c4abd06417a9bed0a93adf00ef7a9195101069445fe7f2873408b3d4010a760 elfutils-libelf-0.192-6.fc40.i686.rpm -98d770d563c5898abd6847e728dd793f6ee985904020084c62c7568463614428 elfutils-libelf-0.192-6.fc40.x86_64.rpm -61f3912d147750749d3b4b5031d0f2ca95fa21615a36bd55ea4b4b9be0493e02 elfutils-libs-0.192-6.fc40.i686.rpm -f215ebf2e586330f93c52b228c98912a0b42db9ceeff830b611817401a84252a elfutils-libs-0.192-6.fc40.x86_64.rpm +02bdd06f90ed52f14ed650277fb311bfa75321496a54f08bcf4f3de3bcf738b3 elfutils-debuginfod-client-0.192-7.fc40.i686.rpm +7aea9182c4f0f8818616a3c9ad22e135b2c0213cd20b4876eed4ed50662923ce elfutils-debuginfod-client-0.192-7.fc40.x86_64.rpm +0df162d8f4bddb1b8f9e8f4b94777f06c31024fa1db83a956817e6e1f7b6b6f1 elfutils-default-yama-scope-0.192-7.fc40.noarch.rpm +990ffcb2b37a2a5ff9de49ab55bf48f028baed95bd0be506c1cd87abc9f5cba9 elfutils-libelf-0.192-7.fc40.i686.rpm +afebefb578c9ac9ed6a4575e7d00f3938e0adcf50f60c8fca3365b41be77833e elfutils-libelf-0.192-7.fc40.x86_64.rpm +d52142d916af296e889906eb45997ab24357055a4c5e09c1015b0a4a222ef706 elfutils-libs-0.192-7.fc40.i686.rpm +c120bc4d029536ffa77aab0aab8058df196de83548c24a147f0ab5951412b2a7 elfutils-libs-0.192-7.fc40.x86_64.rpm 95cf8ee199b2e1b3471f920ebad57d3d8178f5e68d37ee35a8a94727473ec8d3 ethtool-6.11-1.fc40.x86_64.rpm 3a5ba168021a01107d6dd4dc7cffe8bb5553c64f236c436979b9fddfdc4cb59d expat-2.6.3-1.fc40.x86_64.rpm 849feb04544096f9bbe16bc78c2198708fe658bdafa08575c911e538a7d31c18 fedora-gpg-keys-40-2.noarch.rpm @@ -217,8 +217,8 @@ bc60959e98e5f690bc3df03bfa8afee2d0cf28e794c4e3c52f19769885771321 libusb1-1.0.27 b6db3e72ae6575127216145c1f65414ea94acd9db26d08c5081cb5d786101c1f libuuid-2.40.2-1.fc40.x86_64.rpm bea578631618692ba5e302beadfdf6d5894e23e5bddaea4b4fca2f377dd1aaac libverto-0.3.2-8.fc40.i686.rpm fadf7dd93c5eee57ba78e0628bf041dbd2ea037ace52f0a5cbac55b363234d27 libverto-0.3.2-8.fc40.x86_64.rpm -a0036606133ba74df47cba7f5349a024bcb6367150a5450ac414508c67d852a9 libxcrypt-4.4.36-10.fc40.i686.rpm -0d93dd9ea48dcfe8f9ecdfc3ec8ac736635334e23fc1cf8ba04e562e0637de17 libxcrypt-4.4.36-10.fc40.x86_64.rpm +c0d73b087b04d47d5256346255c260123d14406f1e07784192320e2093f5f5b7 libxcrypt-4.4.36-11.fc40.i686.rpm +efaf797a0d787aeddc65893a26b0e845824f27e9734bd111b194b551b593a572 libxcrypt-4.4.36-11.fc40.x86_64.rpm a17f9a8894a00ee97a42219b3b21d64bfb850d74059d89ae299210bc477e8967 libxkbcommon-1.6.0-2.fc40.i686.rpm 1f1d0c1e1132016735acc6fc3390102b35f9eb257244547c7b61c32a9c2314cc libxkbcommon-1.6.0-2.fc40.x86_64.rpm 302104acbc7b094958be4f764c14f738462fdb381fc38aac63e0e7eaedaa82a7 libxml2-2.12.8-1.fc40.i686.rpm @@ -239,7 +239,7 @@ b404c27af03bb1e43fb0dc472d5a1fa152e0563fa2e4eefa29199c47578a829b nano-default-e 8a93376ce7423bd1a649a13f4b5105f270b4603f5cf3b3e230bdbda7f25dd788 ncurses-base-6.4-12.20240127.fc40.noarch.rpm 39bba59320e6276a3b7b07bc94d319511bdd7d32ba098fd49723f4d542794d41 ncurses-libs-6.4-12.20240127.fc40.i686.rpm a18edf32e89aefd453998d5d0ec3aa1ea193dac43f80b99db195abd7e8cf1a04 ncurses-libs-6.4-12.20240127.fc40.x86_64.rpm -f1e77a65e098b105ce6a47e386de84937217ed72a0c47f2568ae11da0ea7d75d netavark-1.12.2-1.fc40.x86_64.rpm +35ff2b10ae6da5210d511b1d6d410e8fc0247ef8a12397bd2a8eea9ef5ccfb69 netavark-1.13.0-1.fc40.x86_64.rpm 16172412cfd45453292e18f84fc57e42a3ce92aca72b47ef7e15b44554049cfe nettle-3.9.1-6.fc40.x86_64.rpm 188ce5004e6ed764b4a619b64a4a0f36f1cc4fa919fe0a300599ff1171844144 nftables-1.0.9-3.fc40.x86_64.rpm 784e0fbc9ccb7087c10f4c41edbed13904f94244ff658f308614abe48cdf0d42 npth-1.7-1.fc40.x86_64.rpm @@ -250,9 +250,9 @@ e9fca52d76eb6277b9fec3238226faafc0938806318fad1143a527fdd28a16cf openssl-libs-3 9f0336deb6f1b1524ec48d837622e7e2291995369b0356d7ad1e1d427f3b659a os-prober-1.81-6.fc40.x86_64.rpm 70fba929aab38a9d69a457cef1b01962161a1df2b78dc5a4e86ff4b994b51079 p11-kit-0.25.5-1.fc40.x86_64.rpm c728dbd90872b7597a8ace70a70555bff576231bb6dbde14b75626d601706af8 p11-kit-trust-0.25.5-1.fc40.x86_64.rpm -374bd91b0fb10dd09d543a1aab6328d3801bd9a0bdfbfbf0b594ce79ab3423ce pam-1.6.1-4.fc40.x86_64.rpm -b6251990de342b9f4de8ab7360de435751c0b3e524ea6e1ad78a294d7d541483 pam-libs-1.6.1-4.fc40.i686.rpm -227f1d93b7125b5a71def58146ddaa0853bd489da6707f0564482e290e77930c pam-libs-1.6.1-4.fc40.x86_64.rpm +b3b261e448a25c6550f050ca1813509dd6edbb10f22c02a535548332435b6bc4 pam-1.6.1-5.fc40.x86_64.rpm +753d7b5a6531eec7689414dc1a4ce76ba4d327b8ad0363a9298ee67b565c1d95 pam-libs-1.6.1-5.fc40.i686.rpm +6ca8efd0b2a26cc51917c1c81260d919ef7760f0e0770dc872a78b1b829299cd pam-libs-1.6.1-5.fc40.x86_64.rpm 9bbce784622e02af0371ced8e9a7d26adba7eabd66ecfcb8bbe2d24cf616e3c1 parted-3.6-4.fc40.x86_64.rpm 02c01edaee6fe2af5174562387d530b73ee40e39dbe108ab4553de82228f6621 passt-0^20241030.gee7d0b6-1.fc40.x86_64.rpm 7909af3b8d248c344693b4f7893172d465fde6d1fb8d719f1179f8c971cb786b passt-selinux-0^20241030.gee7d0b6-1.fc40.noarch.rpm @@ -279,26 +279,26 @@ cca50802d4f75306bc37126feb92db79fed44dcdabf76c1556853334995b9d3b publicsuffix-l bcac955e69958e064669ed6e0a394bd9dd2c76e63f558a205ced18a9755012ab python-unversioned-command-3.12.7-1.fc40.noarch.rpm 6d8342314daafde5c5ec4ec2935e74edb9bea107dc8cd72642e322444f264c7d python3-3.12.7-1.fc40.x86_64.rpm 839d6dd1d8ac9b55f14b504eca5ac5e66b8330341608f7c9132cb29816116ecb python3-libs-3.12.7-1.fc40.x86_64.rpm -b406d07cf1eeac69446b2ac98da03a007d7becded2d27fc0dafb83a81de5f708 qemu-user-static-8.2.8-1.fc40.x86_64.rpm -3626a5964fd4640046d86d6a1519c63fec6108a766130745393b7132744c640a qemu-user-static-aarch64-8.2.8-1.fc40.x86_64.rpm -40cb646b14309ec33db43e68436b40b790a22740bd15c3837c5dbe6fe9ae218f qemu-user-static-alpha-8.2.8-1.fc40.x86_64.rpm -023e34e9d3b7d78a9c689a0c2d181be00437a3baeff9a0d2bc675f580093306b qemu-user-static-arm-8.2.8-1.fc40.x86_64.rpm -6d11781749da9f75554137063fa26a349887f8eca7a8cbe00c0723ea181a3feb qemu-user-static-cris-8.2.8-1.fc40.x86_64.rpm -850606227a7a7ecd6d507d2ebeef8bf1e26d324385e4dfe7abe7bd490249caa9 qemu-user-static-hexagon-8.2.8-1.fc40.x86_64.rpm -ceefcc4775d9af7c09c5f287615cee466bf826b77d601201a31ef2554b44d4e4 qemu-user-static-hppa-8.2.8-1.fc40.x86_64.rpm -588471c327509035b27d30949513feaa4ada0d1e1a32ee7f7abff598b8aa2821 qemu-user-static-loongarch64-8.2.8-1.fc40.x86_64.rpm -59b567426e86b0e09a21a5030e6e6dd94cea8cf241c61fade47bc18f5faa1eaf qemu-user-static-m68k-8.2.8-1.fc40.x86_64.rpm -59f1087535ef91ad95e76107fe4239d59542832b8e22c6e43ba9f3fe47d138d1 qemu-user-static-microblaze-8.2.8-1.fc40.x86_64.rpm -03a8264b957d3f37f976f1196dbd97f8adbe891f958090475a615cf871107ac9 qemu-user-static-mips-8.2.8-1.fc40.x86_64.rpm -52d96f0f549e0a0f8928cb3e4d774b3827a8008658eafbea38729f9da3f07f4f qemu-user-static-nios2-8.2.8-1.fc40.x86_64.rpm -7bf21f0df8c3f33b7b2c07692cb29d438549b3d508cd826f6d188e720796a656 qemu-user-static-or1k-8.2.8-1.fc40.x86_64.rpm -33c4b842c85431f142152208047f16c6146f9c4e2eff9888ab0b03133e2051cb qemu-user-static-ppc-8.2.8-1.fc40.x86_64.rpm -3825550e5282568d8faa59cae6d0952460b1c3092ed2b840adb0b4b21e32ae9f qemu-user-static-riscv-8.2.8-1.fc40.x86_64.rpm -b7eab37c189f8cbd42319a5400d81bc90ddb2af8e7d3872e2022918df52f59ae qemu-user-static-s390x-8.2.8-1.fc40.x86_64.rpm -be6e3bca2adc321a1c5c8cb82a05e78a49efc682e83fc564ddb8f8153ed35a48 qemu-user-static-sh4-8.2.8-1.fc40.x86_64.rpm -b46f72d356969cb61dc4f896bf8994bb1c757ec07de34df2929a541c5a46f421 qemu-user-static-sparc-8.2.8-1.fc40.x86_64.rpm -df2448a3cb41a5942f634ae04a8ff830f5250f5ed88a406d48d872bd10a8e0f1 qemu-user-static-x86-8.2.8-1.fc40.x86_64.rpm -c24272c85d0708d2828f763c8e699c1ea8585cbb19398938552267737c33b9ed qemu-user-static-xtensa-8.2.8-1.fc40.x86_64.rpm +d50b24d1a217e5201b4f8350945b7a3bc3fa01a61a8dd8d28e1b9512295238e1 qemu-user-static-8.2.8-2.fc40.x86_64.rpm +11f752c50493eca8f6dddf3140c694d3db4bc808771eaba25978ea2c309b2196 qemu-user-static-aarch64-8.2.8-2.fc40.x86_64.rpm +8598fde32ac72cafcc57f30edbfed1f920c58001dbeecb6932f4de8ce76091ba qemu-user-static-alpha-8.2.8-2.fc40.x86_64.rpm +3f2992c1b134a187105663f32d252cb0fe50874e8cbbe1348e9f3817a09ef1c3 qemu-user-static-arm-8.2.8-2.fc40.x86_64.rpm +9debca3f0a2d8a6a3a9fd79930b343be2d4ab1fade7f67fb3bbd6674e232aadd qemu-user-static-cris-8.2.8-2.fc40.x86_64.rpm +94639ad2de5e2c4779ca0c4b51c3413c7b819a6cffc89eae06bb00ad539892a0 qemu-user-static-hexagon-8.2.8-2.fc40.x86_64.rpm +0adcb370c0f684c10191aefb7e8eb5d0db720701b633f9482606cb0bf70d969a qemu-user-static-hppa-8.2.8-2.fc40.x86_64.rpm +b972de6f95b765b61348eb26769bd67166a6cf91679554ecfd291dcd4ea146f1 qemu-user-static-loongarch64-8.2.8-2.fc40.x86_64.rpm +9b9cc11ea7d30d8ee5255c2b76711adf251a7268bc37c2ca2849bec3e3a916ae qemu-user-static-m68k-8.2.8-2.fc40.x86_64.rpm +c4b9d434f89ceb1f5ed6a8c17daafa8f63c26a0b3f5e9df2d4aeb90794743493 qemu-user-static-microblaze-8.2.8-2.fc40.x86_64.rpm +3eac150092fd0dbb8181dd08647f86b6ebe2879dfcd2ee99562334f8b0b71096 qemu-user-static-mips-8.2.8-2.fc40.x86_64.rpm +5a141c3d6e646904ffbe6da45af44d091087604eb939ef1418a949184a15ebd0 qemu-user-static-nios2-8.2.8-2.fc40.x86_64.rpm +80f9bae5124b65730895b97c8279e4a8ea6e3ffb89aafb60a2b08abe2e890cef qemu-user-static-or1k-8.2.8-2.fc40.x86_64.rpm +3847d1ddbf2fb352ad54a4f094c1e5a39f8924ab2cdd25433182146a966c2885 qemu-user-static-ppc-8.2.8-2.fc40.x86_64.rpm +c7942c1e22240c6aae727b07716ee5bbab201b485f173e246a7c28b7942060aa qemu-user-static-riscv-8.2.8-2.fc40.x86_64.rpm +f3472d9f43b54fbb47e4b828a204947689706ddb0dede9912683c0880fa03f94 qemu-user-static-s390x-8.2.8-2.fc40.x86_64.rpm +3b2118fa1c89cad033d9d723bee6a2129aca7ed9d407668b100b861885b3bf51 qemu-user-static-sh4-8.2.8-2.fc40.x86_64.rpm +07cebe66bf0a9b67d34f29bf38df89bd4ee7db0e2d122bfc4dd61944b57d3b03 qemu-user-static-sparc-8.2.8-2.fc40.x86_64.rpm +6ece8c3814e3885b84eaa61dcfeb585cc63c8a7777eb823eac6ae319a574ba2f qemu-user-static-x86-8.2.8-2.fc40.x86_64.rpm +5a069e041c823e6d25427768d4232c36fb999248ab4cb5af9c47bc29eddbbf0e qemu-user-static-xtensa-8.2.8-2.fc40.x86_64.rpm 8d50fba416f81e4091b144748fff22665ee88699fdc4a372b905d999d05fd3e8 qrencode-libs-4.1.1-7.fc40.i686.rpm 93781052576cc40a2c203bbc1bf865189a11b2c82436e614da9811baedc082fc qrencode-libs-4.1.1-7.fc40.x86_64.rpm 3527582fddcb54892228658b3929ffbb89766941a9794e726216e0800ac05721 readline-8.2-8.fc40.i686.rpm @@ -307,7 +307,7 @@ dacd59edbe4744fd9f6823d672e01eff89f871e88537554f16c0a275a17d04e9 readline-8.2-8 c48c149f4aebfe44d649eea6f7a8eaa229dc8db71ff70b66c7403aa9bd072820 rpm-libs-4.19.1.1-1.fc40.x86_64.rpm 7bebda41ea91faf8cf8911a403c051eb59d444e60f8091d14d10987b713f39ff rpm-plugin-audit-4.19.1.1-1.fc40.x86_64.rpm d400a4e4440bea56566fb1e9582d86d1ac2e07745d37fa6e71f43a8fea05217c rpm-plugin-selinux-4.19.1.1-1.fc40.x86_64.rpm -9015e31297a54b708071d347b7877d885a2a97c3b18a89fa31f1481b6406eb06 rpm-sequoia-1.7.0-1.fc40.x86_64.rpm +7fdc56b6abf0b36209010e2f4cc02febe079b50b0cb1ed7e564045b34059d8a7 rpm-sequoia-1.7.0-3.fc40.x86_64.rpm d87be787717e442016af16c2e58d10f6cadf533cfb2a6e817e7cecf7bedfc1d8 runc-1.2.2-1.fc40.x86_64.rpm 5dbd069183076ed8048c839c31f713c0f6080fb9ebfdda92ac550030688e811b sbsigntools-0.9.5-6.fc40.x86_64.rpm 6a21b2c132a54fd6d9acb846d0a96289ab739b745cdc4c2b31bdbf6b2434a1a7 sed-4.9-1.fc40.x86_64.rpm @@ -318,16 +318,16 @@ cfde0d25ecac7e689ee083b330b78df51d346c2b7557c83a189d5df95c4e2c8d shadow-utils-4 6e9b6b6196f1782419e447ac806c762d002c6930fe39b18999d9b32c24a0ecfc shadow-utils-subid-4.15.1-4.fc40.x86_64.rpm 67eede27af5b4773eb2f7ac794df694be030310d40bce462864c05b8f65c87c3 socat-1.8.0.0-2.fc40.x86_64.rpm a1e23ae521e93ab19d3df77889a6a418c3432025e4880cfd893e40f7165876a7 sqlite-libs-3.45.1-2.fc40.x86_64.rpm -cf80eb17778b4be0c8d31d2ed6478aaf1135da4e283c034573b4e79c3c5c350f systemd-255.14-1.fc40.i686.rpm -bb602e98503df8b961e7ae391805eed444baf44162b8408f6b86b9447e936e3c systemd-255.14-1.fc40.x86_64.rpm -5e5055ac6c18707f58c07dc25033dfc16a3bc0dfb50820165d169a93a6d89e15 systemd-boot-unsigned-255.14-1.fc40.x86_64.rpm -c5e5f2e6789aeb6945e56a31c010e62242dda7a0e8394ac8b4c20c8e5cbdba9f systemd-libs-255.14-1.fc40.i686.rpm -38aca012b5b875240bda5b67e60d698cdd826c4afa0e2fc584452d2c2b68a951 systemd-libs-255.14-1.fc40.x86_64.rpm -191f7622473d6899998c024c7630ff55daa3a04b0b12a0ce82204d8279095fce systemd-networkd-255.14-1.fc40.x86_64.rpm -c651dfc9bc27fc10814bb8d6f06f08df67641fe9a979e10635f968f3e7c07b5d systemd-pam-255.14-1.fc40.i686.rpm -225af60cab0699bac889f02b26e4be38b080266e79f7c9ac89ce4dc93a8545d2 systemd-pam-255.14-1.fc40.x86_64.rpm -59c9c90d52653cab601677b6e867bc73804a5121bd22dc5b8a0c350f23a097e5 systemd-resolved-255.14-1.fc40.x86_64.rpm -62f74c06c1a2fb04dcfa6722b5b91e4eeb31f12da5e529eedaeae881a77c8ce2 systemd-udev-255.14-1.fc40.x86_64.rpm +496f55ea440ce316692c7439171e883faa8716f5326011343f6d6211f1a7feee systemd-255.15-1.fc40.i686.rpm +b50d60c8f95401f6affe46cade4de632597b07eff07999fcce71c7210a3eb387 systemd-255.15-1.fc40.x86_64.rpm +0eb00d002a62db9b8bcb18cecadd0f539f3a594bf91e8848d99633dd4f6217c1 systemd-boot-unsigned-255.15-1.fc40.x86_64.rpm +2acaaf24267353252adced7caf8e60273b11ac2da767931411d98f6148cb575f systemd-libs-255.15-1.fc40.i686.rpm +e6e40ea116b387612db22fe8ade1ef3c2b2cdf11b8a70a6a007af438a19ddca9 systemd-libs-255.15-1.fc40.x86_64.rpm +f62710bc381a1347b2c9b9da291dffec87f78e4c3422fc1b00a90cb4b67a1e06 systemd-networkd-255.15-1.fc40.x86_64.rpm +0dfda625f4e86d3ace91b5e677e188a50f3ab22ee8f827785e3b94b71624836c systemd-pam-255.15-1.fc40.i686.rpm +05214c94a78e75fd867eb490d011bae8c6c1613d8a7616604d030697746f8d12 systemd-pam-255.15-1.fc40.x86_64.rpm +651bb215d1e1f8f0795dd346b282dad08a6ecc3647c199966f7511f5045584d7 systemd-resolved-255.15-1.fc40.x86_64.rpm +ec2783c63888cb1403134bc2a1a1d7104e5d4fa91cf1e4541fe051c8332e4a8f systemd-udev-255.15-1.fc40.x86_64.rpm 65819c502727dc293a71a74b9a5f6b0ba781f12a99c5d5535085f168e5eac56e tar-1.35-3.fc40.x86_64.rpm 0478e12152cc3432a31dfca5ddbc80966800af437c6d7c0b26be307d5e1272e7 tpm2-tools-5.7-1.fc40.x86_64.rpm c3be8a6d0ea23b1d0bf466b19857b97f7ffde811ad7adec0599161059d84cc74 tpm2-tss-4.1.3-1.fc40.x86_64.rpm @@ -339,17 +339,17 @@ c3be8a6d0ea23b1d0bf466b19857b97f7ffde811ad7adec0599161059d84cc74 tpm2-tss-4.1.3 945aa536bc30050abc1870cef167cb944cf78d6628923476db43201a0054574b util-linux-2.40.2-1.fc40.x86_64.rpm 7ec1b5df780c5a30f8e901179480125a6ea87f1f7bad3b69da7f4b351b88c3dd util-linux-core-2.40-0.9.rc1.fc40.x86_64.rpm b1aa4e816c01c08c18924865640f214f717cdfc66837e53a24b8edfb80a86f9d util-linux-core-2.40.2-1.fc40.x86_64.rpm -50879411e244c6531e09376ef87c9f081d1988a88e462404a24835d515211a9a vim-common-9.1.866-1.fc40.x86_64.rpm -3f39232a1cd7fffbdfbb1cd0b64f5107f33c83f3ed335180655f30763c292988 vim-data-9.1.866-1.fc40.noarch.rpm -c99d7857daa246ccd36db2ddedd6a723097d9e3d090464d6fcd3476f572ffee7 vim-enhanced-9.1.866-1.fc40.x86_64.rpm -ec8ea126510e9ba2950bd1f72d78dee97dbbc440d15bf1e5542a9029443d53d6 vim-filesystem-9.1.866-1.fc40.noarch.rpm -c5682a1b02bb02578e9997ae221a7f6c6db711084129824e207fe1febdc55b9d wget2-2.1.0-11.fc40.x86_64.rpm -38aaee4829df7e1a4719991c4fc6d65a1265b6a556b182ecac3145c287c320f4 wget2-libs-2.1.0-11.fc40.x86_64.rpm -a12b44ee7cc5a0e916bcf72e80c4d618abb7406254578e947f3ba9dd0d445d25 wget2-wget-2.1.0-11.fc40.x86_64.rpm +fb78d7a38305025bf2a6f4876cd70ed5d2bd888b4a2df91e35f1426a57267e38 vim-common-9.1.906-1.fc40.x86_64.rpm +f44d05b58d9def775f187b24468aa9e4d21647b6b4303ed92bc994db8d7db986 vim-data-9.1.906-1.fc40.noarch.rpm +3d3ab14b5cd806eade3a5246fefe47b5acf440a1cea9d17c2591fbbdd24cc37a vim-enhanced-9.1.906-1.fc40.x86_64.rpm +175abd5a9e2149da58a203208909681e717c1354050ae9bd71f408b04f5367b3 vim-filesystem-9.1.906-1.fc40.noarch.rpm +5f4aef6a6f19712c142b3e592ff05bba03dee877a0a098df294d876063918805 wget2-2.2.0-1.fc40.x86_64.rpm +a4119091a85b4aa4262a26f6ed2d6653de9b7c4def3636a2b0ad066436f29acd wget2-libs-2.2.0-1.fc40.x86_64.rpm +4948040a53814b1b4b76f6ec9d64ec21f3f2d1196a0a1c5b117f91fa58a267b1 wget2-wget-2.2.0-1.fc40.x86_64.rpm cf0306ceed1c6b3be39060d85f16b1953b464d3a625488b170d3b7aadf600645 which-2.21-41.fc40.x86_64.rpm 4ede95a2fa3bc0ae617c8bf3a375b800163d58733b4829b15d9f038505d79fee whois-nls-5.5.20-3.fc40.noarch.rpm e2195010e857f56b19246f8b821f9391922880b7691b3728a413f540edc890a6 xkeyboard-config-2.41-1.fc40.noarch.rpm -627c89d516a12ab0686eabecfab5f8e952f431a1aedc445aa43a2721c3740f8b xxd-9.1.866-1.fc40.x86_64.rpm +2dbefca406a2daa52c3816940e016edc24db4c94ed45aa89e2e577559536d9c4 xxd-9.1.906-1.fc40.x86_64.rpm ee599a1c4d7ee635e54ec137af4dded83f433b9c8a5976f75ecdcd000b5246e3 xz-5.4.6-3.fc40.x86_64.rpm b92ef78d8ab424c22130e457d0ef691d8197bff61c3b8852205d1b02baba3819 xz-libs-5.4.6-3.fc40.i686.rpm b6ee44b3d7e494b0364f26b7d0b169a8092180af787423cd5e8a47dc0f738a66 xz-libs-5.4.6-3.fc40.x86_64.rpm From d7728fe3ba17562896772d36bb30a4f42f71d510 Mon Sep 17 00:00:00 2001 From: edgelessci <71088502+edgelessci@users.noreply.github.com> Date: Mon, 9 Dec 2024 09:00:04 +0100 Subject: [PATCH 008/311] image: update measurements and image version (#3528) Co-authored-by: edgelessci --- .../measurements/measurements_enterprise.go | 16 ++++++++-------- internal/config/image_enterprise.go | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/internal/attestation/measurements/measurements_enterprise.go b/internal/attestation/measurements/measurements_enterprise.go index ae53af1e4..98aeb9925 100644 --- a/internal/attestation/measurements/measurements_enterprise.go +++ b/internal/attestation/measurements/measurements_enterprise.go @@ -19,14 +19,14 @@ package measurements // revive:disable:var-naming var ( - aws_AWSNitroTPM = M{0: {Expected: []byte{0x73, 0x7f, 0x76, 0x7a, 0x12, 0xf5, 0x4e, 0x70, 0xee, 0xcb, 0xc8, 0x68, 0x40, 0x11, 0x32, 0x3a, 0xe2, 0xfe, 0x2d, 0xd9, 0xf9, 0x07, 0x85, 0x57, 0x79, 0x69, 0xd7, 0xa2, 0x01, 0x3e, 0x8c, 0x12}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x39, 0xe4, 0x49, 0xf1, 0x12, 0x29, 0x5f, 0x2e, 0x45, 0x6d, 0xa4, 0xa0, 0xd8, 0xaa, 0x5c, 0x1f, 0xe9, 0xf1, 0x39, 0x07, 0xac, 0x44, 0xe1, 0x5a, 0x2d, 0x6c, 0x51, 0x16, 0xb2, 0x0c, 0xd5, 0xad}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x56, 0x81, 0xec, 0x8e, 0x59, 0x2f, 0x9f, 0xa4, 0xba, 0x8f, 0xe5, 0x34, 0x09, 0x48, 0x15, 0xe2, 0x61, 0xd6, 0x10, 0xc6, 0x22, 0x37, 0x0b, 0xbd, 0xfd, 0x16, 0x91, 0x73, 0x47, 0xa8, 0x3b, 0x37}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x54, 0xcd, 0xbf, 0x9c, 0x0d, 0xf8, 0xe3, 0x21, 0x4f, 0x21, 0x24, 0x88, 0xa0, 0x11, 0xe4, 0xcd, 0xe3, 0xa2, 0x53, 0x00, 0x95, 0xa9, 0x8e, 0xfd, 0x75, 0x55, 0x5e, 0xdb, 0x62, 0x10, 0x22, 0x67}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - aws_AWSSEVSNP = M{0: {Expected: []byte{0xd6, 0xdf, 0x85, 0x53, 0x58, 0xf5, 0xb1, 0x0f, 0x06, 0xf0, 0xfa, 0xb3, 0xf4, 0x08, 0xad, 0x26, 0xcd, 0x16, 0x5a, 0x29, 0x49, 0xba, 0xd6, 0x9e, 0x2c, 0xc7, 0x56, 0x92, 0x52, 0x9e, 0x66, 0x2a}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xa7, 0x7c, 0x1e, 0x9d, 0xb7, 0x41, 0x23, 0xab, 0xe9, 0xb7, 0x7d, 0x6c, 0x53, 0x42, 0xfa, 0x1c, 0xb4, 0xca, 0xe1, 0x75, 0x07, 0xac, 0xfc, 0x13, 0x38, 0x91, 0xa2, 0x26, 0x01, 0xa8, 0xc1, 0x7d}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x52, 0x7a, 0xc5, 0x56, 0xc4, 0xa5, 0x5d, 0xcc, 0x2f, 0xb2, 0x6b, 0xad, 0x11, 0xbb, 0x28, 0x97, 0xec, 0x63, 0x3b, 0xf7, 0x73, 0x33, 0xba, 0x34, 0x66, 0x70, 0x86, 0x9b, 0x6b, 0x83, 0x39, 0x1f}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x08, 0xac, 0x98, 0x17, 0x7f, 0x37, 0x12, 0xc6, 0x37, 0x9a, 0x2e, 0x4d, 0x8a, 0x83, 0x52, 0xfb, 0xe3, 0x89, 0x89, 0xc9, 0x2e, 0xad, 0x13, 0xf1, 0xe2, 0xf6, 0x30, 0x82, 0xe1, 0x0a, 0xce, 0x25}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - azure_AzureSEVSNP = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xfe, 0x42, 0xbe, 0xc9, 0x59, 0x48, 0xbe, 0xa2, 0xb2, 0xba, 0x2a, 0xf4, 0x83, 0x81, 0xbb, 0xc8, 0x61, 0x8a, 0xbb, 0x19, 0x87, 0xb6, 0xb9, 0x7e, 0xf0, 0xa5, 0x8f, 0x6a, 0x3b, 0x92, 0x7b, 0x68}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x40, 0x14, 0x29, 0x37, 0xb9, 0xd7, 0x94, 0x09, 0xdc, 0x93, 0x14, 0xd1, 0x7f, 0xd3, 0x02, 0x02, 0x66, 0x5d, 0x47, 0x24, 0x40, 0xcd, 0xdc, 0x29, 0x71, 0xaf, 0x97, 0xcb, 0xc4, 0xf4, 0x10, 0xa2}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x1c, 0xfb, 0x53, 0x03, 0x40, 0xd2, 0xdd, 0xca, 0xbe, 0xb5, 0x0e, 0x6b, 0x6b, 0x39, 0xe4, 0x1c, 0x0f, 0x64, 0x40, 0xed, 0x76, 0x69, 0x5d, 0x38, 0x82, 0x4d, 0x11, 0x82, 0x29, 0xa8, 0xb2, 0x55}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - azure_AzureTDX = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x74, 0xdb, 0x0e, 0x27, 0xff, 0xdb, 0x24, 0x99, 0x95, 0x4e, 0xe7, 0x30, 0x29, 0x84, 0xd2, 0xba, 0xa7, 0xbf, 0x3c, 0x14, 0xf0, 0xfc, 0x5a, 0x68, 0x24, 0x5e, 0x73, 0xe4, 0xf5, 0x95, 0xbc, 0xb4}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xf5, 0xdc, 0x97, 0x9a, 0x8a, 0x3a, 0x63, 0x25, 0xed, 0x5f, 0x40, 0x08, 0x7d, 0xd4, 0x7c, 0x67, 0x5f, 0x70, 0x85, 0x9e, 0xfd, 0x7b, 0x12, 0xf5, 0x6b, 0x20, 0x8e, 0xf0, 0x64, 0xba, 0x9a, 0xcf}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xce, 0xc2, 0xfe, 0xc6, 0xcd, 0x25, 0xa2, 0x6c, 0xc0, 0x9d, 0x9a, 0x95, 0xba, 0x16, 0x00, 0x14, 0x97, 0x1f, 0x8b, 0x6e, 0x85, 0xbb, 0x7f, 0xc0, 0x73, 0x6d, 0x73, 0xfd, 0xf8, 0xdd, 0x17, 0x0e}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + aws_AWSNitroTPM = M{0: {Expected: []byte{0x73, 0x7f, 0x76, 0x7a, 0x12, 0xf5, 0x4e, 0x70, 0xee, 0xcb, 0xc8, 0x68, 0x40, 0x11, 0x32, 0x3a, 0xe2, 0xfe, 0x2d, 0xd9, 0xf9, 0x07, 0x85, 0x57, 0x79, 0x69, 0xd7, 0xa2, 0x01, 0x3e, 0x8c, 0x12}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xb2, 0x94, 0x9c, 0x3a, 0x6f, 0x70, 0x8a, 0x33, 0x64, 0x28, 0x8f, 0xa4, 0xed, 0xb1, 0xca, 0x8e, 0x54, 0x1f, 0x76, 0x1e, 0x29, 0x41, 0xf7, 0x3e, 0x84, 0x79, 0x03, 0xa8, 0xd0, 0xab, 0x75, 0x53}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x2e, 0x7b, 0x37, 0x6a, 0x99, 0x01, 0x98, 0x05, 0xe8, 0xa7, 0x12, 0xe4, 0x41, 0x31, 0xae, 0x73, 0xc7, 0xcc, 0xc9, 0x50, 0xc5, 0xa4, 0xc6, 0xac, 0xd1, 0xdb, 0x65, 0x55, 0xc0, 0x56, 0xce, 0x94}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x8f, 0x6f, 0x68, 0x40, 0x1a, 0xc0, 0xad, 0xa3, 0xc1, 0x5d, 0xf7, 0xa1, 0x37, 0xa7, 0xa0, 0xf3, 0x03, 0x6e, 0x1b, 0x18, 0x9b, 0x51, 0x29, 0x5b, 0xd2, 0xd5, 0x04, 0xb8, 0xb7, 0x94, 0xf1, 0x2c}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + aws_AWSSEVSNP = M{0: {Expected: []byte{0xd6, 0xdf, 0x85, 0x53, 0x58, 0xf5, 0xb1, 0x0f, 0x06, 0xf0, 0xfa, 0xb3, 0xf4, 0x08, 0xad, 0x26, 0xcd, 0x16, 0x5a, 0x29, 0x49, 0xba, 0xd6, 0x9e, 0x2c, 0xc7, 0x56, 0x92, 0x52, 0x9e, 0x66, 0x2a}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x26, 0x3b, 0x5a, 0xdf, 0x68, 0x9d, 0xf5, 0x4d, 0xd6, 0xce, 0x00, 0x04, 0x58, 0x99, 0xc0, 0xb0, 0xc5, 0x36, 0x0b, 0xd5, 0xbd, 0xa0, 0xcf, 0x02, 0x92, 0x37, 0xf7, 0x23, 0xee, 0xd0, 0x7a, 0xa8}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x48, 0x1a, 0x01, 0xeb, 0x28, 0xdf, 0xf7, 0x2c, 0x8b, 0xa8, 0xb8, 0xee, 0xe3, 0x81, 0x06, 0x40, 0x39, 0xa4, 0x41, 0xd1, 0x84, 0x5d, 0xee, 0x55, 0xbc, 0x5e, 0x12, 0xbd, 0xb3, 0x4e, 0x72, 0x1d}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xa5, 0x5b, 0xb7, 0xe7, 0x45, 0xc4, 0x8b, 0x11, 0xba, 0xd9, 0xe0, 0x30, 0xee, 0x85, 0x9d, 0x53, 0x36, 0x3b, 0x44, 0xb3, 0x8d, 0x9d, 0x3b, 0xcb, 0x4b, 0xaf, 0x8d, 0xae, 0x3a, 0xf6, 0x73, 0xee}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + azure_AzureSEVSNP = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xae, 0x81, 0x12, 0xd2, 0x6b, 0x71, 0xc0, 0xb9, 0x50, 0xb5, 0xc1, 0xfd, 0x38, 0xa0, 0xbd, 0xa1, 0xc1, 0x40, 0x2d, 0xbb, 0x74, 0x5c, 0x29, 0x9f, 0x5c, 0xc3, 0x3a, 0x6f, 0x99, 0x64, 0x29, 0x4e}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xa3, 0x9b, 0x04, 0xbb, 0xc1, 0x21, 0xda, 0xff, 0x94, 0x52, 0x73, 0x79, 0x56, 0xb7, 0x26, 0xda, 0xa6, 0xf6, 0x94, 0xfb, 0xac, 0x2f, 0x2a, 0x2d, 0x2a, 0x18, 0xd7, 0x19, 0x9a, 0x8d, 0xd0, 0x44}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x2d, 0x04, 0x4e, 0x71, 0x5e, 0x0a, 0x42, 0x5a, 0xce, 0xe5, 0xfa, 0x02, 0xa4, 0x4d, 0xd5, 0x0c, 0xe5, 0xcd, 0x64, 0x56, 0x25, 0xba, 0x63, 0x86, 0x9d, 0x4e, 0x90, 0x19, 0xaf, 0xe3, 0x0f, 0xd8}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + azure_AzureTDX = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x30, 0x7e, 0x42, 0xdb, 0xe2, 0xe8, 0x0f, 0x92, 0x74, 0x61, 0xcc, 0x07, 0x22, 0xb4, 0xf1, 0x98, 0x91, 0x66, 0xd3, 0x59, 0x53, 0x13, 0x0c, 0x53, 0x0c, 0xf8, 0xdf, 0x9a, 0x91, 0x10, 0x55, 0x98}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x70, 0xcd, 0x0f, 0x01, 0x57, 0x69, 0xad, 0xaf, 0x80, 0xc6, 0xe2, 0x12, 0x08, 0xbc, 0x4a, 0x0c, 0xe6, 0x8a, 0xb2, 0xa2, 0xeb, 0xf0, 0x07, 0x20, 0xcc, 0xee, 0xbb, 0xcb, 0xe6, 0xc2, 0xcc, 0x05}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x4a, 0xfa, 0xca, 0x54, 0xcc, 0x0e, 0x9b, 0xe3, 0x57, 0xa0, 0xa9, 0xa8, 0xd6, 0xcb, 0x72, 0xcc, 0x4d, 0xbb, 0x12, 0x16, 0xe2, 0x2d, 0x96, 0x7a, 0x02, 0x0c, 0xfd, 0xc9, 0xad, 0xa3, 0x37, 0x54}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} azure_AzureTrustedLaunch M - gcp_GCPSEVES = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x13, 0x04, 0x4d, 0xef, 0x65, 0xf2, 0x08, 0x8a, 0xf7, 0xae, 0xd8, 0x6c, 0xfd, 0x21, 0x95, 0xa5, 0x0d, 0xfd, 0x02, 0x0e, 0xb5, 0xc1, 0xf7, 0xce, 0xdd, 0xda, 0x68, 0xf4, 0xf6, 0x26, 0xd7, 0xda}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x7d, 0x2d, 0xe8, 0xc8, 0xf2, 0x19, 0xc6, 0x94, 0x6e, 0xe6, 0xcf, 0x44, 0xa3, 0x5e, 0x8c, 0xfe, 0xcb, 0xe6, 0xa3, 0x84, 0x1f, 0xaf, 0x0c, 0x5c, 0xcc, 0x97, 0xc6, 0x3f, 0xb9, 0x64, 0xdd, 0xbb}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x08, 0x40, 0x5d, 0x70, 0x9d, 0xef, 0xfb, 0x6b, 0x50, 0xb8, 0xdf, 0x64, 0x8d, 0x85, 0x8d, 0x3e, 0xae, 0xb4, 0xaa, 0x73, 0xe1, 0xd7, 0x74, 0xf0, 0xb9, 0x66, 0xf1, 0xe8, 0xa4, 0xe8, 0x0c, 0x95}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - gcp_GCPSEVSNP = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x5c, 0x4b, 0x6e, 0x03, 0x89, 0xea, 0xaf, 0xbd, 0x51, 0xc6, 0x1e, 0xa0, 0x50, 0x1b, 0xdd, 0xec, 0x6c, 0xeb, 0x86, 0x09, 0x06, 0xdd, 0xb3, 0x09, 0xe5, 0xcd, 0x28, 0x33, 0xab, 0x28, 0xec, 0x1f}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xef, 0x15, 0xc5, 0xd6, 0x1d, 0xa3, 0x5f, 0xf0, 0xbf, 0x44, 0x76, 0x0b, 0x68, 0xbc, 0xb0, 0xaf, 0x02, 0xde, 0x0a, 0xcd, 0xeb, 0x12, 0xba, 0x2b, 0xff, 0x6e, 0x2d, 0x2b, 0x4c, 0x4e, 0xe7, 0xae}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x5d, 0x8a, 0xa8, 0xd5, 0x87, 0xac, 0x4a, 0x4e, 0x6f, 0x37, 0x44, 0x7b, 0xf3, 0xf3, 0xee, 0x35, 0x34, 0xcf, 0x82, 0xfe, 0xa3, 0x74, 0x36, 0x94, 0xbd, 0x95, 0x46, 0x47, 0x6a, 0x56, 0x47, 0x5a}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - openstack_QEMUVTPM = M{4: {Expected: []byte{0x67, 0xbd, 0xd4, 0x35, 0x8a, 0xdd, 0x91, 0x98, 0x11, 0xe1, 0xfe, 0xb0, 0xec, 0xa5, 0xd6, 0xb0, 0xa1, 0x62, 0x0f, 0x50, 0x9c, 0xac, 0xf9, 0x30, 0x20, 0xeb, 0xec, 0x67, 0x6c, 0xb5, 0xcf, 0xf7}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x35, 0x57, 0x03, 0x01, 0xeb, 0x62, 0x8f, 0xe6, 0xdb, 0xa3, 0xdd, 0x15, 0x75, 0xbd, 0x4c, 0xb2, 0xd3, 0x24, 0xd7, 0x0e, 0x74, 0xe0, 0xfb, 0xae, 0x83, 0x1c, 0xd4, 0x6f, 0xa7, 0xae, 0x01, 0x24}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x9e, 0x59, 0x4c, 0x46, 0xb7, 0x95, 0x76, 0x3b, 0x86, 0x62, 0x41, 0x29, 0x44, 0xb0, 0x43, 0x97, 0x76, 0xa9, 0xed, 0x2c, 0xa2, 0x7a, 0xe1, 0xf9, 0x48, 0x69, 0x7e, 0x3a, 0xe5, 0x53, 0xff, 0xc5}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + gcp_GCPSEVES = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x05, 0x24, 0xd3, 0x5d, 0x7c, 0xdc, 0x12, 0x79, 0x18, 0x72, 0x2b, 0xe8, 0x2d, 0xc0, 0x0c, 0xcf, 0x6a, 0x38, 0x02, 0x8c, 0x74, 0xc0, 0x95, 0x98, 0xe5, 0x70, 0x24, 0xd9, 0xef, 0xd0, 0x5f, 0x74}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xee, 0x10, 0x68, 0x18, 0x9f, 0x98, 0x0d, 0x36, 0xd3, 0x04, 0x68, 0xef, 0x7a, 0x37, 0xe3, 0x3f, 0xd9, 0xa6, 0x3d, 0x27, 0x7b, 0x69, 0xb8, 0x06, 0x6a, 0x80, 0x7a, 0x01, 0xf7, 0xb6, 0xaa, 0x2a}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x4e, 0x64, 0x43, 0x4a, 0x29, 0xbe, 0x44, 0xdc, 0x47, 0xf2, 0x15, 0xe0, 0xa3, 0x07, 0x1c, 0x48, 0x05, 0x5a, 0xe9, 0x9d, 0x9a, 0x72, 0xb5, 0x02, 0xac, 0x34, 0xac, 0x28, 0x9a, 0x06, 0x43, 0x75}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + gcp_GCPSEVSNP = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x33, 0x31, 0xca, 0x86, 0xdf, 0x84, 0x45, 0x4e, 0x84, 0x3d, 0xc7, 0x29, 0xfb, 0x15, 0xb7, 0x66, 0x12, 0xca, 0x54, 0xef, 0x3f, 0x5f, 0xdd, 0x8a, 0x82, 0xb7, 0xd9, 0x54, 0xf7, 0x1c, 0x40, 0xb6}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x71, 0x47, 0xb7, 0xd7, 0x0c, 0x3c, 0x03, 0xe8, 0xae, 0x6c, 0xc8, 0x27, 0x8d, 0xae, 0xed, 0xcc, 0xba, 0xb7, 0x04, 0x18, 0xdd, 0x43, 0x00, 0x25, 0x21, 0x36, 0xa8, 0xb5, 0x4b, 0x53, 0xbc, 0x5f}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x4e, 0x8a, 0x88, 0x9c, 0xee, 0x46, 0xa8, 0x3b, 0xfe, 0xe5, 0xf8, 0xbc, 0x19, 0xb8, 0x22, 0xab, 0xb9, 0xd1, 0xa1, 0xa2, 0x82, 0xfc, 0x44, 0x45, 0x51, 0xa3, 0x1f, 0x35, 0x89, 0xbd, 0x52, 0xfa}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + openstack_QEMUVTPM = M{4: {Expected: []byte{0xeb, 0x18, 0xd0, 0xc4, 0x05, 0xfc, 0x23, 0xf4, 0xb0, 0xa0, 0x54, 0xc6, 0x06, 0x3a, 0x22, 0x94, 0xb7, 0xf8, 0xd7, 0xa2, 0xf5, 0x72, 0x8d, 0x79, 0xb1, 0xa5, 0x8a, 0x4c, 0xe9, 0xe5, 0xaa, 0x75}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xa8, 0xd0, 0xe0, 0x8b, 0xd8, 0x2b, 0x32, 0x3c, 0x97, 0xf3, 0xa2, 0xb6, 0x29, 0xe2, 0x37, 0x73, 0x5a, 0xda, 0xe7, 0x83, 0x9a, 0x01, 0xbc, 0x12, 0x4c, 0x91, 0xad, 0x61, 0xd2, 0x3d, 0x50, 0x3e}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x6e, 0x48, 0x98, 0xfa, 0xbe, 0x51, 0x9d, 0x1c, 0xef, 0x41, 0xf6, 0xdf, 0x35, 0xaa, 0x5a, 0x77, 0xff, 0x44, 0x47, 0x50, 0xce, 0x57, 0xc4, 0x44, 0x2f, 0xbc, 0x47, 0x07, 0xf1, 0xa1, 0x45, 0x8a}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} qemu_QEMUTDX M - qemu_QEMUVTPM = M{4: {Expected: []byte{0x07, 0x31, 0x1c, 0xf9, 0xcc, 0xdc, 0x0b, 0x56, 0x08, 0xa9, 0xa2, 0x21, 0xc6, 0xa7, 0xa5, 0x3d, 0x89, 0x46, 0x74, 0x19, 0x73, 0x75, 0xe9, 0x39, 0xe0, 0x91, 0xcc, 0x00, 0x99, 0x9a, 0xbc, 0xab}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xca, 0x75, 0x64, 0xc4, 0x7e, 0x8f, 0x35, 0x27, 0xc8, 0xd6, 0x0b, 0xde, 0x28, 0xaf, 0x7c, 0x43, 0x9a, 0x2c, 0x0c, 0xc9, 0x73, 0x38, 0xa8, 0x53, 0xd8, 0x00, 0x23, 0xa5, 0x48, 0xeb, 0x0b, 0x1d}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x24, 0x69, 0x28, 0x56, 0x31, 0xca, 0x91, 0x96, 0xde, 0x61, 0x21, 0xef, 0x40, 0x39, 0x28, 0x6b, 0x69, 0xec, 0x34, 0x07, 0x7c, 0x3b, 0x5c, 0xa0, 0xd0, 0x41, 0x95, 0xe1, 0x09, 0xce, 0x9c, 0x77}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + qemu_QEMUVTPM = M{4: {Expected: []byte{0x20, 0x41, 0x07, 0x28, 0xd4, 0xd1, 0x4b, 0x54, 0xec, 0xbb, 0x3c, 0x47, 0xa4, 0x11, 0x9c, 0x71, 0x35, 0x01, 0x5b, 0x44, 0x2b, 0xa0, 0x2f, 0xe4, 0x39, 0xe1, 0xcd, 0x1f, 0xb4, 0xd3, 0x1e, 0x55}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xd9, 0xff, 0x83, 0x0a, 0x98, 0x1c, 0x2b, 0x89, 0x0b, 0x2f, 0x23, 0xf3, 0x67, 0x08, 0x75, 0xd5, 0xf1, 0x3a, 0xd2, 0x14, 0xfe, 0x75, 0xe1, 0x4a, 0x56, 0x0c, 0xda, 0x6b, 0xb7, 0x4e, 0xd5, 0x0b}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xa5, 0xff, 0xdc, 0x06, 0xe9, 0xcc, 0x02, 0x20, 0x73, 0x24, 0x44, 0xe0, 0xab, 0x39, 0xc0, 0x5d, 0x9a, 0x04, 0x31, 0x44, 0xeb, 0x4d, 0x50, 0x5d, 0x24, 0x46, 0xf3, 0x22, 0x80, 0x7d, 0x82, 0xa7}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} ) diff --git a/internal/config/image_enterprise.go b/internal/config/image_enterprise.go index 19a74d5f6..879f779ab 100644 --- a/internal/config/image_enterprise.go +++ b/internal/config/image_enterprise.go @@ -10,5 +10,5 @@ package config const ( // defaultImage is the default image to use. - defaultImage = "ref/main/stream/nightly/v2.21.0-pre.0.20241204083014-ab2782a2a2be" + defaultImage = "ref/main/stream/nightly/v2.21.0-pre.0.20241204104953-224e6e397c83" ) From 469cae4658db4ad8465e8a132008be992550df60 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 9 Dec 2024 16:06:28 +0100 Subject: [PATCH 009/311] deps: update bazel (plugins) (#3515) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- bazel/toolchains/container_images.bzl | 2 +- bazel/toolchains/nixpkgs_deps.bzl | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/bazel/toolchains/container_images.bzl b/bazel/toolchains/container_images.bzl index cd82c6fae..a8e069966 100644 --- a/bazel/toolchains/container_images.bzl +++ b/bazel/toolchains/container_images.bzl @@ -7,7 +7,7 @@ load("@rules_oci//oci:pull.bzl", "oci_pull") def containter_image_deps(): oci_pull( name = "distroless_static", - digest = "sha256:f4a57e8ffd7ba407bdd0eb315bb54ef1f21a2100a7f032e9102e4da34fe7c196", + digest = "sha256:5c7e2b465ac6a2a4e5f4f7f722ce43b147dabe87cb21ac6c4007ae5178a1fa58", image = "gcr.io/distroless/static", platforms = [ "linux/amd64", diff --git a/bazel/toolchains/nixpkgs_deps.bzl b/bazel/toolchains/nixpkgs_deps.bzl index c28c10cef..d5391d01e 100644 --- a/bazel/toolchains/nixpkgs_deps.bzl +++ b/bazel/toolchains/nixpkgs_deps.bzl @@ -5,11 +5,11 @@ load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") def nixpkgs_deps(): http_archive( name = "io_tweag_rules_nixpkgs", - sha256 = "1ce13c13a2f354fd37016d9fb333efeddcb308e89db9b3a8f45eafce57746f49", - strip_prefix = "rules_nixpkgs-668609f0b3627751651cb325166d0e95062be3f7", + sha256 = "0f7ac344873873d89f8286b4971401dca4a1b249421c2f7c7b56a1befe4501cb", + strip_prefix = "rules_nixpkgs-4e169eefd4e9cf38a3569e0b463e93f0c7a3c181", urls = [ - "https://cdn.confidential.cloud/constellation/cas/sha256/1ce13c13a2f354fd37016d9fb333efeddcb308e89db9b3a8f45eafce57746f49", - "https://github.com/tweag/rules_nixpkgs/archive/668609f0b3627751651cb325166d0e95062be3f7.tar.gz", + "https://cdn.confidential.cloud/constellation/cas/sha256/0f7ac344873873d89f8286b4971401dca4a1b249421c2f7c7b56a1befe4501cb", + "https://github.com/tweag/rules_nixpkgs/archive/4e169eefd4e9cf38a3569e0b463e93f0c7a3c181.tar.gz", ], type = "tar.gz", ) From d346848aace655c0deef46a4d90ba23979f84903 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 9 Dec 2024 16:07:01 +0100 Subject: [PATCH 010/311] deps: update module k8s.io/endpointslice to v0.31.3 (#3529) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- go.mod | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/go.mod b/go.mod index 154b8028b..a7da716fe 100644 --- a/go.mod +++ b/go.mod @@ -16,7 +16,7 @@ replace ( k8s.io/cri-client => k8s.io/cri-client v0.31.1 k8s.io/csi-translation-lib => k8s.io/csi-translation-lib v0.31.3 k8s.io/dynamic-resource-allocation => k8s.io/dynamic-resource-allocation v0.31.3 - k8s.io/endpointslice => k8s.io/endpointslice v0.31.1 + k8s.io/endpointslice => k8s.io/endpointslice v0.31.3 k8s.io/kube-aggregator => k8s.io/kube-aggregator v0.31.3 k8s.io/kube-controller-manager => k8s.io/kube-controller-manager v0.31.3 k8s.io/kube-proxy => k8s.io/kube-proxy v0.31.3 From cdb3e461bb5ed6a355e1b689e35e7e44f57ac27f Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 10 Dec 2024 07:13:44 +0100 Subject: [PATCH 011/311] deps: update bazel (core) (#3531) --- .bazelversion | 2 +- MODULE.bazel | 2 +- MODULE.bazel.lock | 3858 ++++++++--------- bazel/release/artifacts/BUILD.bazel | 2 +- csi/test/BUILD.bazel | 4 +- disk-mapper/internal/test/BUILD.bazel | 4 +- e2e/internal/upgrade/BUILD.bazel | 2 +- .../internal/provider/BUILD.bazel | 2 +- 8 files changed, 1938 insertions(+), 1938 deletions(-) diff --git a/.bazelversion b/.bazelversion index eab246c06..815da58b7 100644 --- a/.bazelversion +++ b/.bazelversion @@ -1 +1 @@ -7.3.2 +7.4.1 diff --git a/MODULE.bazel b/MODULE.bazel index 111a0f6ad..ef8740397 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -8,7 +8,7 @@ use_repo(bazel_lib, "jq_toolchains") use_repo(bazel_lib, "yq_toolchains") bazel_dep(name = "bazel_skylib", version = "1.7.1") -bazel_dep(name = "gazelle", version = "0.39.1") +bazel_dep(name = "gazelle", version = "0.40.0") bazel_dep(name = "hermetic_cc_toolchain", version = "3.1.1") bazel_dep(name = "rules_cc", version = "0.1.0") bazel_dep(name = "rules_go", version = "0.50.1", repo_name = "io_bazel_rules_go") diff --git a/MODULE.bazel.lock b/MODULE.bazel.lock index 4782a3045..bdbcb2bf4 100644 --- a/MODULE.bazel.lock +++ b/MODULE.bazel.lock @@ -44,8 +44,8 @@ "https://bcr.bazel.build/modules/gazelle/0.33.0/MODULE.bazel": "a13a0f279b462b784fb8dd52a4074526c4a2afe70e114c7d09066097a46b3350", "https://bcr.bazel.build/modules/gazelle/0.34.0/MODULE.bazel": "abdd8ce4d70978933209db92e436deb3a8b737859e9354fb5fd11fb5c2004c8a", "https://bcr.bazel.build/modules/gazelle/0.36.0/MODULE.bazel": "e375d5d6e9a6ca59b0cb38b0540bc9a05b6aa926d322f2de268ad267a2ee74c0", - "https://bcr.bazel.build/modules/gazelle/0.39.1/MODULE.bazel": "1fa3fefad240e535066fd0e6950dfccd627d36dc699ee0034645e51dbde3980f", - "https://bcr.bazel.build/modules/gazelle/0.39.1/source.json": "f2facfa8c8c9a4d2ebf613754023054c2eb793b88675082216c6be0419eb20a1", + "https://bcr.bazel.build/modules/gazelle/0.40.0/MODULE.bazel": "42ba5378ebe845fca43989a53186ab436d956db498acde790685fe0e8f9c6146", + "https://bcr.bazel.build/modules/gazelle/0.40.0/source.json": "1e5ef6e4d8b9b6836d93273c781e78ff829ea2e077afef7a57298040fa4f010a", "https://bcr.bazel.build/modules/google_benchmark/1.8.2/MODULE.bazel": "a70cf1bba851000ba93b58ae2f6d76490a9feb74192e57ab8e8ff13c34ec50cb", "https://bcr.bazel.build/modules/googletest/1.11.0/MODULE.bazel": "3a83f095183f66345ca86aa13c58b59f9f94a2f81999c093d4eeaa2d262d12f4", "https://bcr.bazel.build/modules/googletest/1.14.0.bcr.1/MODULE.bazel": "22c31a561553727960057361aa33bf20fb2e98584bc4fec007906e27053f80c6", @@ -166,20 +166,20 @@ "@@apple_support~//crosstool:setup.bzl%apple_cc_configure_extension": { "general": { "bzlTransitiveDigest": "PjIds3feoYE8SGbbIq2SFTZy3zmxeO2tQevJZNDo7iY=", - "usagesDigest": "aLmqbvowmHkkBPve05yyDNGN7oh7QE9kBADr3QIZTZs=", + "usagesDigest": "+hz7IHWN6A1oVJJWNDB6yZRG+RYhF76wAYItpAeIUIg=", "recordedFileInputs": {}, "recordedDirentsInputs": {}, "envVariables": {}, "generatedRepoSpecs": { - "local_config_apple_cc": { - "bzlFile": "@@apple_support~//crosstool:setup.bzl", - "ruleClassName": "_apple_cc_autoconf", - "attributes": {} - }, "local_config_apple_cc_toolchains": { "bzlFile": "@@apple_support~//crosstool:setup.bzl", "ruleClassName": "_apple_cc_autoconf_toolchains", "attributes": {} + }, + "local_config_apple_cc": { + "bzlFile": "@@apple_support~//crosstool:setup.bzl", + "ruleClassName": "_apple_cc_autoconf", + "attributes": {} } }, "recordedRepoMappingEntries": [ @@ -193,19 +193,96 @@ }, "@@aspect_bazel_lib~//lib:extensions.bzl%toolchains": { "general": { - "bzlTransitiveDigest": "NQSsfq2SQcHqmSrdUz3fctBGq66C56eokoZzu0MOhBU=", - "usagesDigest": "E1/WNi/RvQIo2JMDoqkXAe3ImUnQhegOYDC/dY2DVAk=", + "bzlTransitiveDigest": "v/pDtu7D4JNhqSOpd0zDAszKx5LE3MDNfIkE9hCiRxI=", + "usagesDigest": "fYLdjLLbgBMhAlI35ZKH2Yam9HsDB1PQd1QXgFMDmCc=", "recordedFileInputs": {}, "recordedDirentsInputs": {}, "envVariables": {}, "generatedRepoSpecs": { - "expand_template_windows_amd64": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:expand_template_toolchain.bzl", - "ruleClassName": "expand_template_platform_repo", + "copy_directory_darwin_amd64": { + "bzlFile": "@@aspect_bazel_lib~//lib/private:copy_directory_toolchain.bzl", + "ruleClassName": "copy_directory_platform_repo", + "attributes": { + "platform": "darwin_amd64" + } + }, + "copy_directory_darwin_arm64": { + "bzlFile": "@@aspect_bazel_lib~//lib/private:copy_directory_toolchain.bzl", + "ruleClassName": "copy_directory_platform_repo", + "attributes": { + "platform": "darwin_arm64" + } + }, + "copy_directory_freebsd_amd64": { + "bzlFile": "@@aspect_bazel_lib~//lib/private:copy_directory_toolchain.bzl", + "ruleClassName": "copy_directory_platform_repo", + "attributes": { + "platform": "freebsd_amd64" + } + }, + "copy_directory_linux_amd64": { + "bzlFile": "@@aspect_bazel_lib~//lib/private:copy_directory_toolchain.bzl", + "ruleClassName": "copy_directory_platform_repo", + "attributes": { + "platform": "linux_amd64" + } + }, + "copy_directory_linux_arm64": { + "bzlFile": "@@aspect_bazel_lib~//lib/private:copy_directory_toolchain.bzl", + "ruleClassName": "copy_directory_platform_repo", + "attributes": { + "platform": "linux_arm64" + } + }, + "copy_directory_windows_amd64": { + "bzlFile": "@@aspect_bazel_lib~//lib/private:copy_directory_toolchain.bzl", + "ruleClassName": "copy_directory_platform_repo", "attributes": { "platform": "windows_amd64" } }, + "copy_directory_toolchains": { + "bzlFile": "@@aspect_bazel_lib~//lib/private:copy_directory_toolchain.bzl", + "ruleClassName": "copy_directory_toolchains_repo", + "attributes": { + "user_repository_name": "copy_directory" + } + }, + "copy_to_directory_darwin_amd64": { + "bzlFile": "@@aspect_bazel_lib~//lib/private:copy_to_directory_toolchain.bzl", + "ruleClassName": "copy_to_directory_platform_repo", + "attributes": { + "platform": "darwin_amd64" + } + }, + "copy_to_directory_darwin_arm64": { + "bzlFile": "@@aspect_bazel_lib~//lib/private:copy_to_directory_toolchain.bzl", + "ruleClassName": "copy_to_directory_platform_repo", + "attributes": { + "platform": "darwin_arm64" + } + }, + "copy_to_directory_freebsd_amd64": { + "bzlFile": "@@aspect_bazel_lib~//lib/private:copy_to_directory_toolchain.bzl", + "ruleClassName": "copy_to_directory_platform_repo", + "attributes": { + "platform": "freebsd_amd64" + } + }, + "copy_to_directory_linux_amd64": { + "bzlFile": "@@aspect_bazel_lib~//lib/private:copy_to_directory_toolchain.bzl", + "ruleClassName": "copy_to_directory_platform_repo", + "attributes": { + "platform": "linux_amd64" + } + }, + "copy_to_directory_linux_arm64": { + "bzlFile": "@@aspect_bazel_lib~//lib/private:copy_to_directory_toolchain.bzl", + "ruleClassName": "copy_to_directory_platform_repo", + "attributes": { + "platform": "linux_arm64" + } + }, "copy_to_directory_windows_amd64": { "bzlFile": "@@aspect_bazel_lib~//lib/private:copy_to_directory_toolchain.bzl", "ruleClassName": "copy_to_directory_platform_repo", @@ -213,6 +290,13 @@ "platform": "windows_amd64" } }, + "copy_to_directory_toolchains": { + "bzlFile": "@@aspect_bazel_lib~//lib/private:copy_to_directory_toolchain.bzl", + "ruleClassName": "copy_to_directory_toolchains_repo", + "attributes": { + "user_repository_name": "copy_to_directory" + } + }, "jq_darwin_amd64": { "bzlFile": "@@aspect_bazel_lib~//lib/private:jq_toolchain.bzl", "ruleClassName": "jq_platform_repo", @@ -221,18 +305,20 @@ "version": "1.7" } }, - "copy_to_directory_freebsd_amd64": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:copy_to_directory_toolchain.bzl", - "ruleClassName": "copy_to_directory_platform_repo", + "jq_darwin_arm64": { + "bzlFile": "@@aspect_bazel_lib~//lib/private:jq_toolchain.bzl", + "ruleClassName": "jq_platform_repo", "attributes": { - "platform": "freebsd_amd64" + "platform": "darwin_arm64", + "version": "1.7" } }, - "expand_template_linux_amd64": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:expand_template_toolchain.bzl", - "ruleClassName": "expand_template_platform_repo", + "jq_linux_amd64": { + "bzlFile": "@@aspect_bazel_lib~//lib/private:jq_toolchain.bzl", + "ruleClassName": "jq_platform_repo", "attributes": { - "platform": "linux_amd64" + "platform": "linux_amd64", + "version": "1.7" } }, "jq_linux_arm64": { @@ -243,6 +329,102 @@ "version": "1.7" } }, + "jq_windows_amd64": { + "bzlFile": "@@aspect_bazel_lib~//lib/private:jq_toolchain.bzl", + "ruleClassName": "jq_platform_repo", + "attributes": { + "platform": "windows_amd64", + "version": "1.7" + } + }, + "jq": { + "bzlFile": "@@aspect_bazel_lib~//lib/private:jq_toolchain.bzl", + "ruleClassName": "jq_host_alias_repo", + "attributes": {} + }, + "jq_toolchains": { + "bzlFile": "@@aspect_bazel_lib~//lib/private:jq_toolchain.bzl", + "ruleClassName": "jq_toolchains_repo", + "attributes": { + "user_repository_name": "jq" + } + }, + "yq_darwin_amd64": { + "bzlFile": "@@aspect_bazel_lib~//lib/private:yq_toolchain.bzl", + "ruleClassName": "yq_platform_repo", + "attributes": { + "platform": "darwin_amd64", + "version": "4.25.2" + } + }, + "yq_darwin_arm64": { + "bzlFile": "@@aspect_bazel_lib~//lib/private:yq_toolchain.bzl", + "ruleClassName": "yq_platform_repo", + "attributes": { + "platform": "darwin_arm64", + "version": "4.25.2" + } + }, + "yq_linux_amd64": { + "bzlFile": "@@aspect_bazel_lib~//lib/private:yq_toolchain.bzl", + "ruleClassName": "yq_platform_repo", + "attributes": { + "platform": "linux_amd64", + "version": "4.25.2" + } + }, + "yq_linux_arm64": { + "bzlFile": "@@aspect_bazel_lib~//lib/private:yq_toolchain.bzl", + "ruleClassName": "yq_platform_repo", + "attributes": { + "platform": "linux_arm64", + "version": "4.25.2" + } + }, + "yq_linux_s390x": { + "bzlFile": "@@aspect_bazel_lib~//lib/private:yq_toolchain.bzl", + "ruleClassName": "yq_platform_repo", + "attributes": { + "platform": "linux_s390x", + "version": "4.25.2" + } + }, + "yq_linux_ppc64le": { + "bzlFile": "@@aspect_bazel_lib~//lib/private:yq_toolchain.bzl", + "ruleClassName": "yq_platform_repo", + "attributes": { + "platform": "linux_ppc64le", + "version": "4.25.2" + } + }, + "yq_windows_amd64": { + "bzlFile": "@@aspect_bazel_lib~//lib/private:yq_toolchain.bzl", + "ruleClassName": "yq_platform_repo", + "attributes": { + "platform": "windows_amd64", + "version": "4.25.2" + } + }, + "yq": { + "bzlFile": "@@aspect_bazel_lib~//lib/private:yq_toolchain.bzl", + "ruleClassName": "yq_host_alias_repo", + "attributes": {} + }, + "yq_toolchains": { + "bzlFile": "@@aspect_bazel_lib~//lib/private:yq_toolchain.bzl", + "ruleClassName": "yq_toolchains_repo", + "attributes": { + "user_repository_name": "yq" + } + }, + "coreutils_darwin_amd64": { + "bzlFile": "@@aspect_bazel_lib~//lib/private:coreutils_toolchain.bzl", + "ruleClassName": "coreutils_platform_repo", + "attributes": { + "platform": "darwin_amd64", + "version": "0.0.27" + } + }, "coreutils_darwin_arm64": { "bzlFile": "@@aspect_bazel_lib~//lib/private:coreutils_toolchain.bzl", "ruleClassName": "coreutils_platform_repo", @@ -251,32 +433,11 @@ "version": "0.0.27" } }, - "copy_to_directory_linux_arm64": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:copy_to_directory_toolchain.bzl", - "ruleClassName": "copy_to_directory_platform_repo", - "attributes": { - "platform": "linux_arm64" - } - }, - "bsd_tar_linux_arm64": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:tar_toolchain.bzl", - "ruleClassName": "bsdtar_binary_repo", - "attributes": { - "platform": "linux_arm64" - } - }, - "copy_directory_darwin_amd64": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:copy_directory_toolchain.bzl", - "ruleClassName": "copy_directory_platform_repo", - "attributes": { - "platform": "darwin_amd64" - } - }, - "coreutils_darwin_amd64": { + "coreutils_linux_amd64": { "bzlFile": "@@aspect_bazel_lib~//lib/private:coreutils_toolchain.bzl", "ruleClassName": "coreutils_platform_repo", "attributes": { - "platform": "darwin_amd64", + "platform": "linux_amd64", "version": "0.0.27" } }, @@ -288,92 +449,31 @@ "version": "0.0.27" } }, - "zstd_linux_arm64": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:zstd_toolchain.bzl", - "ruleClassName": "zstd_binary_repo", + "coreutils_windows_amd64": { + "bzlFile": "@@aspect_bazel_lib~//lib/private:coreutils_toolchain.bzl", + "ruleClassName": "coreutils_platform_repo", "attributes": { - "platform": "linux_arm64" + "platform": "windows_amd64", + "version": "0.0.27" } }, - "yq_linux_s390x": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:yq_toolchain.bzl", - "ruleClassName": "yq_platform_repo", + "coreutils_toolchains": { + "bzlFile": "@@aspect_bazel_lib~//lib/private:coreutils_toolchain.bzl", + "ruleClassName": "coreutils_toolchains_repo", "attributes": { - "platform": "linux_s390x", - "version": "4.25.2" + "user_repository_name": "coreutils" } }, - "yq": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:yq_toolchain.bzl", - "ruleClassName": "yq_host_alias_repo", - "attributes": {} - }, - "expand_template_darwin_amd64": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:expand_template_toolchain.bzl", - "ruleClassName": "expand_template_platform_repo", + "bsd_tar_darwin_amd64": { + "bzlFile": "@@aspect_bazel_lib~//lib/private:tar_toolchain.bzl", + "ruleClassName": "bsdtar_binary_repo", "attributes": { "platform": "darwin_amd64" } }, - "copy_directory_linux_amd64": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:copy_directory_toolchain.bzl", - "ruleClassName": "copy_directory_platform_repo", - "attributes": { - "platform": "linux_amd64" - } - }, - "jq_darwin_arm64": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:jq_toolchain.bzl", - "ruleClassName": "jq_platform_repo", - "attributes": { - "platform": "darwin_arm64", - "version": "1.7" - } - }, - "yq_darwin_amd64": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:yq_toolchain.bzl", - "ruleClassName": "yq_platform_repo", - "attributes": { - "platform": "darwin_amd64", - "version": "4.25.2" - } - }, - "copy_directory_linux_arm64": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:copy_directory_toolchain.bzl", - "ruleClassName": "copy_directory_platform_repo", - "attributes": { - "platform": "linux_arm64" - } - }, - "expand_template_toolchains": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:expand_template_toolchain.bzl", - "ruleClassName": "expand_template_toolchains_repo", - "attributes": { - "user_repository_name": "expand_template" - } - }, - "bats_assert": { - "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", - "ruleClassName": "http_archive", - "attributes": { - "sha256": "98ca3b685f8b8993e48ec057565e6e2abcc541034ed5b0e81f191505682037fd", - "urls": [ - "https://github.com/bats-core/bats-assert/archive/v2.1.0.tar.gz" - ], - "strip_prefix": "bats-assert-2.1.0", - "build_file_content": "load(\"@aspect_bazel_lib//lib:copy_to_directory.bzl\", \"copy_to_directory\")\n\ncopy_to_directory(\n name = \"assert\",\n hardlink = \"on\",\n srcs = glob([\n \"src/**\",\n \"load.bash\",\n ]),\n out = \"bats-assert\",\n visibility = [\"//visibility:public\"]\n)\n" - } - }, - "copy_to_directory_darwin_amd64": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:copy_to_directory_toolchain.bzl", - "ruleClassName": "copy_to_directory_platform_repo", - "attributes": { - "platform": "darwin_amd64" - } - }, - "zstd_darwin_arm64": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:zstd_toolchain.bzl", - "ruleClassName": "zstd_binary_repo", + "bsd_tar_darwin_arm64": { + "bzlFile": "@@aspect_bazel_lib~//lib/private:tar_toolchain.bzl", + "ruleClassName": "bsdtar_binary_repo", "attributes": { "platform": "darwin_arm64" } @@ -385,11 +485,39 @@ "platform": "linux_amd64" } }, - "yq_toolchains": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:yq_toolchain.bzl", - "ruleClassName": "yq_toolchains_repo", + "bsd_tar_linux_arm64": { + "bzlFile": "@@aspect_bazel_lib~//lib/private:tar_toolchain.bzl", + "ruleClassName": "bsdtar_binary_repo", "attributes": { - "user_repository_name": "yq" + "platform": "linux_arm64" + } + }, + "bsd_tar_windows_amd64": { + "bzlFile": "@@aspect_bazel_lib~//lib/private:tar_toolchain.bzl", + "ruleClassName": "bsdtar_binary_repo", + "attributes": { + "platform": "windows_amd64" + } + }, + "bsd_tar_toolchains": { + "bzlFile": "@@aspect_bazel_lib~//lib/private:tar_toolchain.bzl", + "ruleClassName": "tar_toolchains_repo", + "attributes": { + "user_repository_name": "bsd_tar" + } + }, + "zstd_darwin_amd64": { + "bzlFile": "@@aspect_bazel_lib~//lib/private:zstd_toolchain.bzl", + "ruleClassName": "zstd_binary_repo", + "attributes": { + "platform": "darwin_amd64" + } + }, + "zstd_darwin_arm64": { + "bzlFile": "@@aspect_bazel_lib~//lib/private:zstd_toolchain.bzl", + "ruleClassName": "zstd_binary_repo", + "attributes": { + "platform": "darwin_arm64" } }, "zstd_linux_amd64": { @@ -399,6 +527,69 @@ "platform": "linux_amd64" } }, + "zstd_linux_arm64": { + "bzlFile": "@@aspect_bazel_lib~//lib/private:zstd_toolchain.bzl", + "ruleClassName": "zstd_binary_repo", + "attributes": { + "platform": "linux_arm64" + } + }, + "zstd_toolchains": { + "bzlFile": "@@aspect_bazel_lib~//lib/private:zstd_toolchain.bzl", + "ruleClassName": "zstd_toolchains_repo", + "attributes": { + "user_repository_name": "zstd" + } + }, + "expand_template_darwin_amd64": { + "bzlFile": "@@aspect_bazel_lib~//lib/private:expand_template_toolchain.bzl", + "ruleClassName": "expand_template_platform_repo", + "attributes": { + "platform": "darwin_amd64" + } + }, + "expand_template_darwin_arm64": { + "bzlFile": "@@aspect_bazel_lib~//lib/private:expand_template_toolchain.bzl", + "ruleClassName": "expand_template_platform_repo", + "attributes": { + "platform": "darwin_arm64" + } + }, + "expand_template_freebsd_amd64": { + "bzlFile": "@@aspect_bazel_lib~//lib/private:expand_template_toolchain.bzl", + "ruleClassName": "expand_template_platform_repo", + "attributes": { + "platform": "freebsd_amd64" + } + }, + "expand_template_linux_amd64": { + "bzlFile": "@@aspect_bazel_lib~//lib/private:expand_template_toolchain.bzl", + "ruleClassName": "expand_template_platform_repo", + "attributes": { + "platform": "linux_amd64" + } + }, + "expand_template_linux_arm64": { + "bzlFile": "@@aspect_bazel_lib~//lib/private:expand_template_toolchain.bzl", + "ruleClassName": "expand_template_platform_repo", + "attributes": { + "platform": "linux_arm64" + } + }, + "expand_template_windows_amd64": { + "bzlFile": "@@aspect_bazel_lib~//lib/private:expand_template_toolchain.bzl", + "ruleClassName": "expand_template_platform_repo", + "attributes": { + "platform": "windows_amd64" + } + }, + "expand_template_toolchains": { + "bzlFile": "@@aspect_bazel_lib~//lib/private:expand_template_toolchain.bzl", + "ruleClassName": "expand_template_toolchains_repo", + "attributes": { + "user_repository_name": "expand_template" + } + }, "bats_support": { "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", "ruleClassName": "http_archive", @@ -411,95 +602,16 @@ "build_file_content": "load(\"@aspect_bazel_lib//lib:copy_to_directory.bzl\", \"copy_to_directory\")\n\ncopy_to_directory(\n name = \"support\",\n hardlink = \"on\",\n srcs = glob([\n \"src/**\",\n \"load.bash\",\n ]),\n out = \"bats-support\",\n visibility = [\"//visibility:public\"]\n)\n" } }, - "bsd_tar_windows_amd64": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:tar_toolchain.bzl", - "ruleClassName": "bsdtar_binary_repo", + "bats_assert": { + "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", + "ruleClassName": "http_archive", "attributes": { - "platform": "windows_amd64" - } - }, - "jq": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:jq_toolchain.bzl", - "ruleClassName": "jq_host_alias_repo", - "attributes": {} - }, - "expand_template_darwin_arm64": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:expand_template_toolchain.bzl", - "ruleClassName": "expand_template_platform_repo", - "attributes": { - "platform": "darwin_arm64" - } - }, - "bsd_tar_darwin_arm64": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:tar_toolchain.bzl", - "ruleClassName": "bsdtar_binary_repo", - "attributes": { - "platform": "darwin_arm64" - } - }, - "copy_to_directory_linux_amd64": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:copy_to_directory_toolchain.bzl", - "ruleClassName": "copy_to_directory_platform_repo", - "attributes": { - "platform": "linux_amd64" - } - }, - "coreutils_linux_amd64": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:coreutils_toolchain.bzl", - "ruleClassName": "coreutils_platform_repo", - "attributes": { - "platform": "linux_amd64", - "version": "0.0.27" - } - }, - "copy_directory_toolchains": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:copy_directory_toolchain.bzl", - "ruleClassName": "copy_directory_toolchains_repo", - "attributes": { - "user_repository_name": "copy_directory" - } - }, - "yq_linux_amd64": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:yq_toolchain.bzl", - "ruleClassName": "yq_platform_repo", - "attributes": { - "platform": "linux_amd64", - "version": "4.25.2" - } - }, - "copy_to_directory_darwin_arm64": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:copy_to_directory_toolchain.bzl", - "ruleClassName": "copy_to_directory_platform_repo", - "attributes": { - "platform": "darwin_arm64" - } - }, - "coreutils_toolchains": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:coreutils_toolchain.bzl", - "ruleClassName": "coreutils_toolchains_repo", - "attributes": { - "user_repository_name": "coreutils" - } - }, - "copy_directory_freebsd_amd64": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:copy_directory_toolchain.bzl", - "ruleClassName": "copy_directory_platform_repo", - "attributes": { - "platform": "freebsd_amd64" - } - }, - "zstd_darwin_amd64": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:zstd_toolchain.bzl", - "ruleClassName": "zstd_binary_repo", - "attributes": { - "platform": "darwin_amd64" - } - }, - "zstd_toolchains": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:zstd_toolchain.bzl", - "ruleClassName": "zstd_toolchains_repo", - "attributes": { - "user_repository_name": "zstd" + "sha256": "98ca3b685f8b8993e48ec057565e6e2abcc541034ed5b0e81f191505682037fd", + "urls": [ + "https://github.com/bats-core/bats-assert/archive/v2.1.0.tar.gz" + ], + "strip_prefix": "bats-assert-2.1.0", + "build_file_content": "load(\"@aspect_bazel_lib//lib:copy_to_directory.bzl\", \"copy_to_directory\")\n\ncopy_to_directory(\n name = \"assert\",\n hardlink = \"on\",\n srcs = glob([\n \"src/**\",\n \"load.bash\",\n ]),\n out = \"bats-assert\",\n visibility = [\"//visibility:public\"]\n)\n" } }, "bats_file": { @@ -514,35 +626,6 @@ "build_file_content": "load(\"@aspect_bazel_lib//lib:copy_to_directory.bzl\", \"copy_to_directory\")\n\ncopy_to_directory(\n name = \"file\",\n hardlink = \"on\",\n srcs = glob([\n \"src/**\",\n \"load.bash\",\n ]),\n out = \"bats-file\",\n visibility = [\"//visibility:public\"]\n)\n" } }, - "expand_template_linux_arm64": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:expand_template_toolchain.bzl", - "ruleClassName": "expand_template_platform_repo", - "attributes": { - "platform": "linux_arm64" - } - }, - "jq_linux_amd64": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:jq_toolchain.bzl", - "ruleClassName": "jq_platform_repo", - "attributes": { - "platform": "linux_amd64", - "version": "1.7" - } - }, - "bsd_tar_darwin_amd64": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:tar_toolchain.bzl", - "ruleClassName": "bsdtar_binary_repo", - "attributes": { - "platform": "darwin_amd64" - } - }, - "bsd_tar_toolchains": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:tar_toolchain.bzl", - "ruleClassName": "tar_toolchains_repo", - "attributes": { - "user_repository_name": "bsd_tar" - } - }, "bats_toolchains": { "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", "ruleClassName": "http_archive", @@ -554,89 +637,6 @@ "strip_prefix": "bats-core-1.10.0", "build_file_content": "load(\"@local_config_platform//:constraints.bzl\", \"HOST_CONSTRAINTS\")\nload(\"@aspect_bazel_lib//lib/private:bats_toolchain.bzl\", \"bats_toolchain\")\nload(\"@aspect_bazel_lib//lib:copy_to_directory.bzl\", \"copy_to_directory\")\n\ncopy_to_directory(\n name = \"core\",\n hardlink = \"on\",\n srcs = glob([\n \"lib/**\",\n \"libexec/**\"\n ]) + [\"bin/bats\"],\n out = \"bats-core\",\n)\n\nbats_toolchain(\n name = \"toolchain\",\n core = \":core\",\n libraries = [\"@bats_support//:support\", \"@bats_assert//:assert\", \"@bats_file//:file\"]\n)\n\ntoolchain(\n name = \"bats_toolchain\",\n exec_compatible_with = HOST_CONSTRAINTS,\n toolchain = \":toolchain\",\n toolchain_type = \"@aspect_bazel_lib//lib:bats_toolchain_type\",\n)\n" } - }, - "yq_windows_amd64": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:yq_toolchain.bzl", - "ruleClassName": "yq_platform_repo", - "attributes": { - "platform": "windows_amd64", - "version": "4.25.2" - } - }, - "jq_windows_amd64": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:jq_toolchain.bzl", - "ruleClassName": "jq_platform_repo", - "attributes": { - "platform": "windows_amd64", - "version": "1.7" - } - }, - "expand_template_freebsd_amd64": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:expand_template_toolchain.bzl", - "ruleClassName": "expand_template_platform_repo", - "attributes": { - "platform": "freebsd_amd64" - } - }, - "yq_linux_ppc64le": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:yq_toolchain.bzl", - "ruleClassName": "yq_platform_repo", - "attributes": { - "platform": "linux_ppc64le", - "version": "4.25.2" - } - }, - "copy_to_directory_toolchains": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:copy_to_directory_toolchain.bzl", - "ruleClassName": "copy_to_directory_toolchains_repo", - "attributes": { - "user_repository_name": "copy_to_directory" - } - }, - "jq_toolchains": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:jq_toolchain.bzl", - "ruleClassName": "jq_toolchains_repo", - "attributes": { - "user_repository_name": "jq" - } - }, - "copy_directory_darwin_arm64": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:copy_directory_toolchain.bzl", - "ruleClassName": "copy_directory_platform_repo", - "attributes": { - "platform": "darwin_arm64" - } - }, - "copy_directory_windows_amd64": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:copy_directory_toolchain.bzl", - "ruleClassName": "copy_directory_platform_repo", - "attributes": { - "platform": "windows_amd64" - } - }, - "yq_darwin_arm64": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:yq_toolchain.bzl", - "ruleClassName": "yq_platform_repo", - "attributes": { - "platform": "darwin_arm64", - "version": "4.25.2" - } - }, - "coreutils_windows_amd64": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:coreutils_toolchain.bzl", - "ruleClassName": "coreutils_platform_repo", - "attributes": { - "platform": "windows_amd64", - "version": "0.0.27" - } - }, - "yq_linux_arm64": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:yq_toolchain.bzl", - "ruleClassName": "yq_platform_repo", - "attributes": { - "platform": "linux_arm64", - "version": "4.25.2" - } } }, "recordedRepoMappingEntries": [ @@ -660,22 +660,34 @@ }, "@@buildifier_prebuilt~//:defs.bzl%buildifier_prebuilt_deps_extension": { "general": { - "bzlTransitiveDigest": "eXBP0KrRexbBjR0KdxpnbWtfahy0r48xfQb4hBQ4Mcc=", - "usagesDigest": "nThSTPRdiQbhDFl8FRM2nsKJftWMtPBQHrp/mdk716w=", + "bzlTransitiveDigest": "wCVIDn7TlLvw6PNyOj4qjCcL1dhRDKDOZKuBuxemVxY=", + "usagesDigest": "MbIuhDGRTlw07fpxjzM2N+5FUBehV3EnCmO7eEN86tc=", "recordedFileInputs": {}, "recordedDirentsInputs": {}, "envVariables": {}, "generatedRepoSpecs": { - "buildozer_darwin_amd64": { + "buildifier_darwin_amd64": { "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", "ruleClassName": "http_file", "attributes": { "urls": [ - "https://github.com/bazelbuild/buildtools/releases/download/v6.4.0/buildozer-darwin-amd64" + "https://github.com/bazelbuild/buildtools/releases/download/v6.4.0/buildifier-darwin-amd64" ], - "downloaded_file_path": "buildozer", + "downloaded_file_path": "buildifier", "executable": true, - "sha256": "d29e347ecd6b5673d72cb1a8de05bf1b06178dd229ff5eb67fad5100c840cc8e" + "sha256": "eeb47b2de27f60efe549348b183fac24eae80f1479e8b06cac0799c486df5bed" + } + }, + "buildifier_darwin_arm64": { + "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", + "ruleClassName": "http_file", + "attributes": { + "urls": [ + "https://github.com/bazelbuild/buildtools/releases/download/v6.4.0/buildifier-darwin-arm64" + ], + "downloaded_file_path": "buildifier", + "executable": true, + "sha256": "fa07ba0d20165917ca4cc7609f9b19a8a4392898148b7babdf6bb2a7dd963f05" } }, "buildifier_linux_amd64": { @@ -690,6 +702,42 @@ "sha256": "be63db12899f48600bad94051123b1fd7b5251e7661b9168582ce52396132e92" } }, + "buildifier_linux_arm64": { + "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", + "ruleClassName": "http_file", + "attributes": { + "urls": [ + "https://github.com/bazelbuild/buildtools/releases/download/v6.4.0/buildifier-linux-arm64" + ], + "downloaded_file_path": "buildifier", + "executable": true, + "sha256": "18540fc10f86190f87485eb86963e603e41fa022f88a2d1b0cf52ff252b5e1dd" + } + }, + "buildifier_windows_amd64": { + "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", + "ruleClassName": "http_file", + "attributes": { + "urls": [ + "https://github.com/bazelbuild/buildtools/releases/download/v6.4.0/buildifier-windows-amd64.exe" + ], + "downloaded_file_path": "buildifier.exe", + "executable": true, + "sha256": "da8372f35e34b65fb6d997844d041013bb841e55f58b54d596d35e49680fe13c" + } + }, + "buildozer_darwin_amd64": { + "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", + "ruleClassName": "http_file", + "attributes": { + "urls": [ + "https://github.com/bazelbuild/buildtools/releases/download/v6.4.0/buildozer-darwin-amd64" + ], + "downloaded_file_path": "buildozer", + "executable": true, + "sha256": "d29e347ecd6b5673d72cb1a8de05bf1b06178dd229ff5eb67fad5100c840cc8e" + } + }, "buildozer_darwin_arm64": { "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", "ruleClassName": "http_file", @@ -714,18 +762,6 @@ "sha256": "8dfd6345da4e9042daa738d7fdf34f699c5dfce4632f7207956fceedd8494119" } }, - "buildozer_windows_amd64": { - "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", - "ruleClassName": "http_file", - "attributes": { - "urls": [ - "https://github.com/bazelbuild/buildtools/releases/download/v6.4.0/buildozer-windows-amd64.exe" - ], - "downloaded_file_path": "buildozer.exe", - "executable": true, - "sha256": "e7f05bf847f7c3689dd28926460ce6e1097ae97380ac8e6ae7147b7b706ba19b" - } - }, "buildozer_linux_arm64": { "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", "ruleClassName": "http_file", @@ -738,16 +774,16 @@ "sha256": "6559558fded658c8fa7432a9d011f7c4dcbac6b738feae73d2d5c352e5f605fa" } }, - "buildifier_windows_amd64": { + "buildozer_windows_amd64": { "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", "ruleClassName": "http_file", "attributes": { "urls": [ - "https://github.com/bazelbuild/buildtools/releases/download/v6.4.0/buildifier-windows-amd64.exe" + "https://github.com/bazelbuild/buildtools/releases/download/v6.4.0/buildozer-windows-amd64.exe" ], - "downloaded_file_path": "buildifier.exe", + "downloaded_file_path": "buildozer.exe", "executable": true, - "sha256": "da8372f35e34b65fb6d997844d041013bb841e55f58b54d596d35e49680fe13c" + "sha256": "e7f05bf847f7c3689dd28926460ce6e1097ae97380ac8e6ae7147b7b706ba19b" } }, "buildifier_prebuilt_toolchains": { @@ -756,42 +792,6 @@ "attributes": { "assets_json": "[{\"arch\":\"amd64\",\"name\":\"buildifier\",\"platform\":\"darwin\",\"sha256\":\"eeb47b2de27f60efe549348b183fac24eae80f1479e8b06cac0799c486df5bed\",\"version\":\"v6.4.0\"},{\"arch\":\"arm64\",\"name\":\"buildifier\",\"platform\":\"darwin\",\"sha256\":\"fa07ba0d20165917ca4cc7609f9b19a8a4392898148b7babdf6bb2a7dd963f05\",\"version\":\"v6.4.0\"},{\"arch\":\"amd64\",\"name\":\"buildifier\",\"platform\":\"linux\",\"sha256\":\"be63db12899f48600bad94051123b1fd7b5251e7661b9168582ce52396132e92\",\"version\":\"v6.4.0\"},{\"arch\":\"arm64\",\"name\":\"buildifier\",\"platform\":\"linux\",\"sha256\":\"18540fc10f86190f87485eb86963e603e41fa022f88a2d1b0cf52ff252b5e1dd\",\"version\":\"v6.4.0\"},{\"arch\":\"amd64\",\"name\":\"buildifier\",\"platform\":\"windows\",\"sha256\":\"da8372f35e34b65fb6d997844d041013bb841e55f58b54d596d35e49680fe13c\",\"version\":\"v6.4.0\"},{\"arch\":\"amd64\",\"name\":\"buildozer\",\"platform\":\"darwin\",\"sha256\":\"d29e347ecd6b5673d72cb1a8de05bf1b06178dd229ff5eb67fad5100c840cc8e\",\"version\":\"v6.4.0\"},{\"arch\":\"arm64\",\"name\":\"buildozer\",\"platform\":\"darwin\",\"sha256\":\"9b9e71bdbec5e7223871e913b65d12f6d8fa026684daf991f00e52ed36a6978d\",\"version\":\"v6.4.0\"},{\"arch\":\"amd64\",\"name\":\"buildozer\",\"platform\":\"linux\",\"sha256\":\"8dfd6345da4e9042daa738d7fdf34f699c5dfce4632f7207956fceedd8494119\",\"version\":\"v6.4.0\"},{\"arch\":\"arm64\",\"name\":\"buildozer\",\"platform\":\"linux\",\"sha256\":\"6559558fded658c8fa7432a9d011f7c4dcbac6b738feae73d2d5c352e5f605fa\",\"version\":\"v6.4.0\"},{\"arch\":\"amd64\",\"name\":\"buildozer\",\"platform\":\"windows\",\"sha256\":\"e7f05bf847f7c3689dd28926460ce6e1097ae97380ac8e6ae7147b7b706ba19b\",\"version\":\"v6.4.0\"}]" } - }, - "buildifier_darwin_amd64": { - "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", - "ruleClassName": "http_file", - "attributes": { - "urls": [ - "https://github.com/bazelbuild/buildtools/releases/download/v6.4.0/buildifier-darwin-amd64" - ], - "downloaded_file_path": "buildifier", - "executable": true, - "sha256": "eeb47b2de27f60efe549348b183fac24eae80f1479e8b06cac0799c486df5bed" - } - }, - "buildifier_darwin_arm64": { - "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", - "ruleClassName": "http_file", - "attributes": { - "urls": [ - "https://github.com/bazelbuild/buildtools/releases/download/v6.4.0/buildifier-darwin-arm64" - ], - "downloaded_file_path": "buildifier", - "executable": true, - "sha256": "fa07ba0d20165917ca4cc7609f9b19a8a4392898148b7babdf6bb2a7dd963f05" - } - }, - "buildifier_linux_arm64": { - "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", - "ruleClassName": "http_file", - "attributes": { - "urls": [ - "https://github.com/bazelbuild/buildtools/releases/download/v6.4.0/buildifier-linux-arm64" - ], - "downloaded_file_path": "buildifier", - "executable": true, - "sha256": "18540fc10f86190f87485eb86963e603e41fa022f88a2d1b0cf52ff252b5e1dd" - } } }, "recordedRepoMappingEntries": [ @@ -810,8 +810,8 @@ }, "@@hermetic_cc_toolchain~//toolchain:ext.bzl%toolchains": { "general": { - "bzlTransitiveDigest": "L0EDVXQ1bqh5CxjodeVieW+SjWsjwxFXYEKhUNgMY50=", - "usagesDigest": "dNvS5vmHnd33Wm8wEDdfCELM1fuXE9dmHYK9BLQTjPc=", + "bzlTransitiveDigest": "savfNVe5lHMf4Itncd4fhqgp41UPyKO5x7KBci6XiuM=", + "usagesDigest": "s8zOej8f/kCqZuhI0DSS+Y9oyZRfnXcEN6B/aAgjVHU=", "recordedFileInputs": {}, "recordedDirentsInputs": {}, "envVariables": {}, @@ -860,7 +860,7 @@ "@@platforms//host:extension.bzl%host_platform": { "general": { "bzlTransitiveDigest": "xelQcPZH8+tmuOHVjL9vDxMnnQNMlwj0SlvgoqBkm4U=", - "usagesDigest": "oS5QVdWCSAWner9adrekJ2fs1FPUng+yVuoJb9mq6e4=", + "usagesDigest": "vCsjO4h3Yj7ycP6GFCd+8DsFsVKGl3ZNxglvEsg95WM=", "recordedFileInputs": {}, "recordedDirentsInputs": {}, "envVariables": {}, @@ -876,8 +876,8 @@ }, "@@pybind11_bazel~//:python_configure.bzl%extension": { "general": { - "bzlTransitiveDigest": "3LPSHhLo7VQLO+x5c48KQmJdPDwEMqMdeng5XVAZm4Y=", - "usagesDigest": "e/EIZlWEpIWcNL1dkob+QepsV4rx7UmnvodvXa76ycY=", + "bzlTransitiveDigest": "whINYge95GgPtysKDbNHQ0ZlWYdtKybHs5y2tLF+x7Q=", + "usagesDigest": "gNvOHVcAlwgDsNXD0amkv2CC96mnaCThPQoE44y8K+w=", "recordedFileInputs": { "@@pybind11_bazel~//MODULE.bazel": "88af1c246226d87e65be78ed49ecd1e6f5e98648558c14ce99176da041dc378e" }, @@ -912,29 +912,21 @@ }, "@@rules_fuzzing~//fuzzing/private:extensions.bzl%non_module_dependencies": { "general": { - "bzlTransitiveDigest": "aN6cDs7sOfBWTyYmCu+aV9nr3VKpDIZprzN+yGEsNO0=", - "usagesDigest": "X26dvBYyk1211bNrYvtOxec7AmnYf6DQEYUw1L0Oo74=", + "bzlTransitiveDigest": "hVgJRQ3Er45/UUAgNn1Yp2Khcp/Y8WyafA2kXIYmQ5M=", + "usagesDigest": "YnIrdgwnf3iCLfChsltBdZ7yOJh706lpa2vww/i2pDI=", "recordedFileInputs": {}, "recordedDirentsInputs": {}, "envVariables": {}, "generatedRepoSpecs": { - "bazel_skylib": { + "platforms": { "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", "ruleClassName": "http_archive", "attributes": { - "sha256": "cd55a062e763b9349921f0f5db8c3933288dc8ba4f76dd9416aac68acee3cb94", "urls": [ - "https://mirror.bazel.build/github.com/bazelbuild/bazel-skylib/releases/download/1.5.0/bazel-skylib-1.5.0.tar.gz", - "https://github.com/bazelbuild/bazel-skylib/releases/download/1.5.0/bazel-skylib-1.5.0.tar.gz" - ] - } - }, - "rules_fuzzing_jazzer": { - "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", - "ruleClassName": "http_jar", - "attributes": { - "sha256": "ee6feb569d88962d59cb59e8a31eb9d007c82683f3ebc64955fd5b96f277eec2", - "url": "https://repo1.maven.org/maven2/com/code-intelligence/jazzer/0.20.1/jazzer-0.20.1.jar" + "https://mirror.bazel.build/github.com/bazelbuild/platforms/releases/download/0.0.8/platforms-0.0.8.tar.gz", + "https://github.com/bazelbuild/platforms/releases/download/0.0.8/platforms-0.0.8.tar.gz" + ], + "sha256": "8150406605389ececb6da07cbcb509d5637a3ab9a24bc69b1101531367d89d74" } }, "rules_python": { @@ -946,10 +938,16 @@ "url": "https://github.com/bazelbuild/rules_python/releases/download/0.28.0/rules_python-0.28.0.tar.gz" } }, - "rules_fuzzing_oss_fuzz": { - "bzlFile": "@@rules_fuzzing~//fuzzing/private/oss_fuzz:repository.bzl", - "ruleClassName": "oss_fuzz_repository", - "attributes": {} + "bazel_skylib": { + "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", + "ruleClassName": "http_archive", + "attributes": { + "sha256": "cd55a062e763b9349921f0f5db8c3933288dc8ba4f76dd9416aac68acee3cb94", + "urls": [ + "https://mirror.bazel.build/github.com/bazelbuild/bazel-skylib/releases/download/1.5.0/bazel-skylib-1.5.0.tar.gz", + "https://github.com/bazelbuild/bazel-skylib/releases/download/1.5.0/bazel-skylib-1.5.0.tar.gz" + ] + } }, "com_google_absl": { "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", @@ -962,6 +960,11 @@ "integrity": "sha256-7capMWOvWyoYbUaHF/b+I2U6XLMaHmky8KugWvfXYuk=" } }, + "rules_fuzzing_oss_fuzz": { + "bzlFile": "@@rules_fuzzing~//fuzzing/private/oss_fuzz:repository.bzl", + "ruleClassName": "oss_fuzz_repository", + "attributes": {} + }, "honggfuzz": { "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", "ruleClassName": "http_archive", @@ -972,15 +975,12 @@ "strip_prefix": "honggfuzz-2.5" } }, - "platforms": { + "rules_fuzzing_jazzer": { "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", - "ruleClassName": "http_archive", + "ruleClassName": "http_jar", "attributes": { - "urls": [ - "https://mirror.bazel.build/github.com/bazelbuild/platforms/releases/download/0.0.8/platforms-0.0.8.tar.gz", - "https://github.com/bazelbuild/platforms/releases/download/0.0.8/platforms-0.0.8.tar.gz" - ], - "sha256": "8150406605389ececb6da07cbcb509d5637a3ab9a24bc69b1101531367d89d74" + "sha256": "ee6feb569d88962d59cb59e8a31eb9d007c82683f3ebc64955fd5b96f277eec2", + "url": "https://repo1.maven.org/maven2/com/code-intelligence/jazzer/0.20.1/jazzer-0.20.1.jar" } }, "rules_fuzzing_jazzer_api": { @@ -1003,21 +1003,39 @@ }, "@@rules_kotlin~//src/main/starlark/core/repositories:bzlmod_setup.bzl%rules_kotlin_extensions": { "general": { - "bzlTransitiveDigest": "l//eFZVgEUHSUfuQ1zQw9uxmcJku8ikraA2fv/2Pyh0=", - "usagesDigest": "NXmdQOmIAdsAdtLv3dhkX8UQ+0st9iQ0EkR28lUNdHc=", + "bzlTransitiveDigest": "fus14IFJ/1LGWWGKPH/U18VnJCoMjfDt1ckahqCnM0A=", + "usagesDigest": "aJF6fLy82rR95Ff5CZPAqxNoFgOMLMN5ImfBS0nhnkg=", "recordedFileInputs": {}, "recordedDirentsInputs": {}, "envVariables": {}, "generatedRepoSpecs": { - "rules_android": { - "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", - "ruleClassName": "http_archive", + "com_github_jetbrains_kotlin_git": { + "bzlFile": "@@rules_kotlin~//src/main/starlark/core/repositories:compiler.bzl", + "ruleClassName": "kotlin_compiler_git_repository", "attributes": { - "sha256": "cd06d15dd8bb59926e4d65f9003bfc20f9da4b2519985c27e190cddc8b7a7806", - "strip_prefix": "rules_android-0.1.1", "urls": [ - "https://github.com/bazelbuild/rules_android/archive/v0.1.1.zip" - ] + "https://github.com/JetBrains/kotlin/releases/download/v1.9.23/kotlin-compiler-1.9.23.zip" + ], + "sha256": "93137d3aab9afa9b27cb06a824c2324195c6b6f6179d8a8653f440f5bd58be88" + } + }, + "com_github_jetbrains_kotlin": { + "bzlFile": "@@rules_kotlin~//src/main/starlark/core/repositories:compiler.bzl", + "ruleClassName": "kotlin_capabilities_repository", + "attributes": { + "git_repository_name": "com_github_jetbrains_kotlin_git", + "compiler_version": "1.9.23" + } + }, + "com_github_google_ksp": { + "bzlFile": "@@rules_kotlin~//src/main/starlark/core/repositories:ksp.bzl", + "ruleClassName": "ksp_compiler_plugin_repository", + "attributes": { + "urls": [ + "https://github.com/google/ksp/releases/download/1.9.23-1.0.20/artifacts.zip" + ], + "sha256": "ee0618755913ef7fd6511288a232e8fad24838b9af6ea73972a76e81053c8c2d", + "strip_version": "1.9.23-1.0.20" } }, "com_github_pinterest_ktlint": { @@ -1031,33 +1049,15 @@ "executable": true } }, - "com_github_jetbrains_kotlin": { - "bzlFile": "@@rules_kotlin~//src/main/starlark/core/repositories:compiler.bzl", - "ruleClassName": "kotlin_capabilities_repository", - "attributes": { - "git_repository_name": "com_github_jetbrains_kotlin_git", - "compiler_version": "1.9.23" - } - }, - "com_github_jetbrains_kotlin_git": { - "bzlFile": "@@rules_kotlin~//src/main/starlark/core/repositories:compiler.bzl", - "ruleClassName": "kotlin_compiler_git_repository", + "rules_android": { + "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", + "ruleClassName": "http_archive", "attributes": { + "sha256": "cd06d15dd8bb59926e4d65f9003bfc20f9da4b2519985c27e190cddc8b7a7806", + "strip_prefix": "rules_android-0.1.1", "urls": [ - "https://github.com/JetBrains/kotlin/releases/download/v1.9.23/kotlin-compiler-1.9.23.zip" - ], - "sha256": "93137d3aab9afa9b27cb06a824c2324195c6b6f6179d8a8653f440f5bd58be88" - } - }, - "com_github_google_ksp": { - "bzlFile": "@@rules_kotlin~//src/main/starlark/core/repositories:ksp.bzl", - "ruleClassName": "ksp_compiler_plugin_repository", - "attributes": { - "urls": [ - "https://github.com/google/ksp/releases/download/1.9.23-1.0.20/artifacts.zip" - ], - "sha256": "ee0618755913ef7fd6511288a232e8fad24838b9af6ea73972a76e81053c8c2d", - "strip_version": "1.9.23-1.0.20" + "https://github.com/bazelbuild/rules_android/archive/v0.1.1.zip" + ] } } }, @@ -1072,8 +1072,8 @@ }, "@@rules_python~//python/private/pypi:pip.bzl%pip_internal": { "general": { - "bzlTransitiveDigest": "NuFWsw0F1ZHsRw6pAHHojBht90U7WPJQr64a2sg5Ib0=", - "usagesDigest": "/5Os1MEbCgZJ42ZFY1UZAhnLguIdryegbkM9Wq+We6Y=", + "bzlTransitiveDigest": "Ia+WlCPeYdZM39vUMNpEI4N0sQyzLK3j231Xqd6nSHs=", + "usagesDigest": "TpQZ+vwK8BO51MJREI4dcchb2El9aY2gx8ZHcaPAiK8=", "recordedFileInputs": { "@@rules_python~//tools/publish/requirements_linux.txt": "8175b4c8df50ae2f22d1706961884beeb54e7da27bd2447018314a175981997d", "@@rules_python~//tools/publish/requirements_windows.txt": "7673adc71dc1a81d3661b90924d7a7c0fc998cd508b3cb4174337cef3f2de556", @@ -1085,7 +1085,7 @@ "RULES_PYTHON_REPO_DEBUG_VERBOSITY": null }, "generatedRepoSpecs": { - "rules_python_publish_deps_311_charset_normalizer_cp311_cp311_macosx_10_9_x86_64_c57516e5": { + "rules_python_publish_deps_311_backports_tarfile_py3_none_any_77e284d7": { "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", "ruleClassName": "whl_library", "attributes": { @@ -1100,668 +1100,13 @@ "cp311_osx_x86_64", "cp311_windows_x86_64" ], - "filename": "charset_normalizer-3.4.0-cp311-cp311-macosx_10_9_x86_64.whl", + "filename": "backports.tarfile-1.2.0-py3-none-any.whl", "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", "repo": "rules_python_publish_deps_311", - "requirement": "charset-normalizer==3.4.0", - "sha256": "c57516e58fd17d03ebe67e181a4e4e2ccab1168f8c2976c6a334d4f819fe5944", + "requirement": "backports-tarfile==1.2.0", + "sha256": "77e284d754527b01fb1e6fa8a1afe577858ebe4e9dad8919e34c862cb399bc34", "urls": [ - "https://files.pythonhosted.org/packages/77/d5/8c982d58144de49f59571f940e329ad6e8615e1e82ef84584c5eeb5e1d72/charset_normalizer-3.4.0-cp311-cp311-macosx_10_9_x86_64.whl" - ] - } - }, - "rules_python_publish_deps_311_cffi_sdist_1c39c601": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64" - ], - "extra_pip_args": [ - "--index-url", - "https://pypi.org/simple" - ], - "filename": "cffi-1.17.1.tar.gz", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "cffi==1.17.1", - "sha256": "1c39c6016c32bc48dd54561950ebd6836e1670f2ae46128f67cf49e789c52824", - "urls": [ - "https://files.pythonhosted.org/packages/fc/97/c783634659c2920c3fc70419e3af40972dbaf758daa229a7d6ea6135c90d/cffi-1.17.1.tar.gz" - ] - } - }, - "rules_python_publish_deps_311_charset_normalizer_cp311_cp311_macosx_11_0_arm64_6dba5d19": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "charset_normalizer-3.4.0-cp311-cp311-macosx_11_0_arm64.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "charset-normalizer==3.4.0", - "sha256": "6dba5d19c4dfab08e58d5b36304b3f92f3bd5d42c1a3fa37b5ba5cdf6dfcbcee", - "urls": [ - "https://files.pythonhosted.org/packages/bf/19/411a64f01ee971bed3231111b69eb56f9331a769072de479eae7de52296d/charset_normalizer-3.4.0-cp311-cp311-macosx_11_0_arm64.whl" - ] - } - }, - "rules_python_publish_deps_311_urllib3_py3_none_any_ca899ca0": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "urllib3-2.2.3-py3-none-any.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "urllib3==2.2.3", - "sha256": "ca899ca043dcb1bafa3e262d73aa25c465bfb49e0bd9dd5d59f1d0acba2f8fac", - "urls": [ - "https://files.pythonhosted.org/packages/ce/d9/5f4c13cecde62396b0d3fe530a50ccea91e7dfc1ccf0e09c228841bb5ba8/urllib3-2.2.3-py3-none-any.whl" - ] - } - }, - "rules_python_publish_deps_311_charset_normalizer_cp311_cp311_manylinux_2_17_x86_64_3710a975": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "charset-normalizer==3.4.0", - "sha256": "3710a9751938947e6327ea9f3ea6332a09bf0ba0c09cae9cb1f250bd1f1549bc", - "urls": [ - "https://files.pythonhosted.org/packages/eb/5b/6f10bad0f6461fa272bfbbdf5d0023b5fb9bc6217c92bf068fa5a99820f5/charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" - ] - } - }, - "rules_python_publish_deps_311_cryptography_cp39_abi3_manylinux_2_17_x86_64_0f996e72": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64" - ], - "filename": "cryptography-43.0.3-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "cryptography==43.0.3", - "sha256": "0f996e7268af62598f2fc1204afa98a3b5712313a55c4c9d434aef49cadc91d4", - "urls": [ - "https://files.pythonhosted.org/packages/2a/2c/488776a3dc843f95f86d2f957ca0fc3407d0242b50bede7fad1e339be03f/cryptography-43.0.3-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" - ] - } - }, - "rules_python_publish_deps_311_urllib3_sdist_e7d814a8": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "extra_pip_args": [ - "--index-url", - "https://pypi.org/simple" - ], - "filename": "urllib3-2.2.3.tar.gz", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "urllib3==2.2.3", - "sha256": "e7d814a81dad81e6caf2ec9fdedb284ecc9c73076b62654547cc64ccdcae26e9", - "urls": [ - "https://files.pythonhosted.org/packages/ed/63/22ba4ebfe7430b76388e7cd448d5478814d3032121827c12a2cc287e2260/urllib3-2.2.3.tar.gz" - ] - } - }, - "rules_python_publish_deps_311_cryptography_cp39_abi3_musllinux_1_2_aarch64_e1be4655": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64" - ], - "filename": "cryptography-43.0.3-cp39-abi3-musllinux_1_2_aarch64.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "cryptography==43.0.3", - "sha256": "e1be4655c7ef6e1bbe6b5d0403526601323420bcf414598955968c9ef3eb7d16", - "urls": [ - "https://files.pythonhosted.org/packages/21/ce/b9c9ff56c7164d8e2edfb6c9305045fbc0df4508ccfdb13ee66eb8c95b0e/cryptography-43.0.3-cp39-abi3-musllinux_1_2_aarch64.whl" - ] - } - }, - "rules_python_publish_deps_311_nh3_cp37_abi3_manylinux_2_17_armv7l_0411beb0": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "nh3-0.2.18-cp37-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "nh3==0.2.18", - "sha256": "0411beb0589eacb6734f28d5497ca2ed379eafab8ad8c84b31bb5c34072b7164", - "urls": [ - "https://files.pythonhosted.org/packages/05/2b/85977d9e11713b5747595ee61f381bc820749daf83f07b90b6c9964cf932/nh3-0.2.18-cp37-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl" - ] - } - }, - "rules_python_publish_deps_311_charset_normalizer_sdist_223217c3": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "extra_pip_args": [ - "--index-url", - "https://pypi.org/simple" - ], - "filename": "charset_normalizer-3.4.0.tar.gz", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "charset-normalizer==3.4.0", - "sha256": "223217c3d4f82c3ac5e29032b3f1c2eb0fb591b72161f86d93f5719079dae93e", - "urls": [ - "https://files.pythonhosted.org/packages/f2/4f/e1808dc01273379acc506d18f1504eb2d299bd4131743b9fc54d7be4df1e/charset_normalizer-3.4.0.tar.gz" - ] - } - }, - "rules_python_publish_deps_311_charset_normalizer_cp311_cp311_musllinux_1_2_aarch64_47334db7": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_aarch64.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "charset-normalizer==3.4.0", - "sha256": "47334db71978b23ebcf3c0f9f5ee98b8d65992b65c9c4f2d34c2eaf5bcaf0594", - "urls": [ - "https://files.pythonhosted.org/packages/d7/a1/493919799446464ed0299c8eef3c3fad0daf1c3cd48bff9263c731b0d9e2/charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_aarch64.whl" - ] - } - }, - "rules_python_publish_deps_311_cffi_cp311_cp311_manylinux_2_17_ppc64le_46bf4316": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64" - ], - "filename": "cffi-1.17.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "cffi==1.17.1", - "sha256": "46bf43160c1a35f7ec506d254e5c890f3c03648a4dbac12d624e4490a7046cd1", - "urls": [ - "https://files.pythonhosted.org/packages/1c/a0/a4fa9f4f781bda074c3ddd57a572b060fa0df7655d2a4247bbe277200146/cffi-1.17.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl" - ] - } - }, - "rules_python_publish_deps_311_charset_normalizer_cp311_cp311_manylinux_2_17_aarch64_bf4475b8": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "charset-normalizer==3.4.0", - "sha256": "bf4475b82be41b07cc5e5ff94810e6a01f276e37c2d55571e3fe175e467a1a1c", - "urls": [ - "https://files.pythonhosted.org/packages/4c/92/97509850f0d00e9f14a46bc751daabd0ad7765cff29cdfb66c68b6dad57f/charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" - ] - } - }, - "rules_python_publish_deps_311_cryptography_sdist_315b9001": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64" - ], - "extra_pip_args": [ - "--index-url", - "https://pypi.org/simple" - ], - "filename": "cryptography-43.0.3.tar.gz", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "cryptography==43.0.3", - "sha256": "315b9001266a492a6ff443b61238f956b214dbec9910a081ba5b6646a055a805", - "urls": [ - "https://files.pythonhosted.org/packages/0d/05/07b55d1fa21ac18c3a8c79f764e2514e6f6a9698f1be44994f5adf0d29db/cryptography-43.0.3.tar.gz" - ] - } - }, - "rules_python_publish_deps_311_nh3_cp37_abi3_manylinux_2_17_ppc64_5f36b271": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "nh3-0.2.18-cp37-abi3-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "nh3==0.2.18", - "sha256": "5f36b271dae35c465ef5e9090e1fdaba4a60a56f0bb0ba03e0932a66f28b9189", - "urls": [ - "https://files.pythonhosted.org/packages/72/f2/5c894d5265ab80a97c68ca36f25c8f6f0308abac649aaf152b74e7e854a8/nh3-0.2.18-cp37-abi3-manylinux_2_17_ppc64.manylinux2014_ppc64.whl" - ] - } - }, - "rules_python_publish_deps_311_secretstorage_sdist_2403533e": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64" - ], - "extra_pip_args": [ - "--index-url", - "https://pypi.org/simple" - ], - "filename": "SecretStorage-3.3.3.tar.gz", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "secretstorage==3.3.3", - "sha256": "2403533ef369eca6d2ba81718576c5e0f564d5cca1b58f73a8b23e7d4eeebd77", - "urls": [ - "https://files.pythonhosted.org/packages/53/a4/f48c9d79cb507ed1373477dbceaba7401fd8a23af63b837fa61f1dcd3691/SecretStorage-3.3.3.tar.gz" - ] - } - }, - "rules_python_publish_deps_311_jaraco_functools_sdist_70f7e0e2": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "extra_pip_args": [ - "--index-url", - "https://pypi.org/simple" - ], - "filename": "jaraco_functools-4.1.0.tar.gz", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "jaraco-functools==4.1.0", - "sha256": "70f7e0e2ae076498e212562325e805204fc092d7b4c17e0e86c959e249701a9d", - "urls": [ - "https://files.pythonhosted.org/packages/ab/23/9894b3df5d0a6eb44611c36aec777823fc2e07740dabbd0b810e19594013/jaraco_functools-4.1.0.tar.gz" - ] - } - }, - "rules_python_publish_deps_311_pycparser_py3_none_any_c3702b6d": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64" - ], - "filename": "pycparser-2.22-py3-none-any.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "pycparser==2.22", - "sha256": "c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc", - "urls": [ - "https://files.pythonhosted.org/packages/13/a3/a812df4e2dd5696d1f351d58b8fe16a405b234ad2886a0dab9183fb78109/pycparser-2.22-py3-none-any.whl" - ] - } - }, - "rules_python_publish_deps_311_cffi_cp311_cp311_musllinux_1_1_aarch64_a9b15d49": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64" - ], - "filename": "cffi-1.17.1-cp311-cp311-musllinux_1_1_aarch64.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "cffi==1.17.1", - "sha256": "a9b15d491f3ad5d692e11f6b71f7857e7835eb677955c00cc0aefcd0669adaf6", - "urls": [ - "https://files.pythonhosted.org/packages/1a/52/d9a0e523a572fbccf2955f5abe883cfa8bcc570d7faeee06336fbd50c9fc/cffi-1.17.1-cp311-cp311-musllinux_1_1_aarch64.whl" - ] - } - }, - "rules_python_publish_deps_311_idna_sdist_12f65c9b": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "extra_pip_args": [ - "--index-url", - "https://pypi.org/simple" - ], - "filename": "idna-3.10.tar.gz", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "idna==3.10", - "sha256": "12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9", - "urls": [ - "https://files.pythonhosted.org/packages/f1/70/7703c29685631f5a7590aa73f1f1d3fa9a380e654b86af429e0934a32f7d/idna-3.10.tar.gz" - ] - } - }, - "rules_python_publish_deps_311_nh3_cp37_abi3_manylinux_2_17_s390x_19aaba96": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "nh3-0.2.18-cp37-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "nh3==0.2.18", - "sha256": "19aaba96e0f795bd0a6c56291495ff59364f4300d4a39b29a0abc9cb3774a84b", - "urls": [ - "https://files.pythonhosted.org/packages/c2/a8/3bb02d0c60a03ad3a112b76c46971e9480efa98a8946677b5a59f60130ca/nh3-0.2.18-cp37-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl" - ] - } - }, - "rules_python_publish_deps_311_pywin32_ctypes_sdist_d162dc04": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_windows_x86_64" - ], - "extra_pip_args": [ - "--index-url", - "https://pypi.org/simple" - ], - "filename": "pywin32-ctypes-0.2.3.tar.gz", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "pywin32-ctypes==0.2.3", - "sha256": "d162dc04946d704503b2edc4d55f3dba5c1d539ead017afa00142c38b9885755", - "urls": [ - "https://files.pythonhosted.org/packages/85/9f/01a1a99704853cb63f253eea009390c88e7131c67e66a0a02099a8c917cb/pywin32-ctypes-0.2.3.tar.gz" - ] - } - }, - "rules_python_publish_deps_311_readme_renderer_py3_none_any_2fbca89b": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "readme_renderer-44.0-py3-none-any.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "readme-renderer==44.0", - "sha256": "2fbca89b81a08526aadf1357a8c2ae889ec05fb03f5da67f9769c9a592166151", - "urls": [ - "https://files.pythonhosted.org/packages/e1/67/921ec3024056483db83953ae8e48079ad62b92db7880013ca77632921dd0/readme_renderer-44.0-py3-none-any.whl" - ] - } - }, - "rules_python_publish_deps_311_pygments_sdist_786ff802": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "extra_pip_args": [ - "--index-url", - "https://pypi.org/simple" - ], - "filename": "pygments-2.18.0.tar.gz", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "pygments==2.18.0", - "sha256": "786ff802f32e91311bff3889f6e9a86e81505fe99f2735bb6d60ae0c5004f199", - "urls": [ - "https://files.pythonhosted.org/packages/8e/62/8336eff65bcbc8e4cb5d05b55faf041285951b6e80f33e2bff2024788f31/pygments-2.18.0.tar.gz" - ] - } - }, - "rules_python_publish_deps_311_charset_normalizer_cp311_cp311_musllinux_1_2_ppc64le_f1a2f519": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_ppc64le.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "charset-normalizer==3.4.0", - "sha256": "f1a2f519ae173b5b6a2c9d5fa3116ce16e48b3462c8b96dfdded11055e3d6365", - "urls": [ - "https://files.pythonhosted.org/packages/75/d2/0ab54463d3410709c09266dfb416d032a08f97fd7d60e94b8c6ef54ae14b/charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_ppc64le.whl" - ] - } - }, - "rules_python_publish_deps_311_nh3_cp37_abi3_macosx_10_12_x86_64_14c5a72e": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "nh3-0.2.18-cp37-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "nh3==0.2.18", - "sha256": "14c5a72e9fe82aea5fe3072116ad4661af5cf8e8ff8fc5ad3450f123e4925e86", - "urls": [ - "https://files.pythonhosted.org/packages/b3/89/1daff5d9ba5a95a157c092c7c5f39b8dd2b1ddb4559966f808d31cfb67e0/nh3-0.2.18-cp37-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl" - ] - } - }, - "rules_python_publish_deps_311_zipp_py3_none_any_a817ac80": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "zipp-3.20.2-py3-none-any.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "zipp==3.20.2", - "sha256": "a817ac80d6cf4b23bf7f2828b7cabf326f15a001bea8b1f9b49631780ba28350", - "urls": [ - "https://files.pythonhosted.org/packages/62/8b/5ba542fa83c90e09eac972fc9baca7a88e7e7ca4b221a89251954019308b/zipp-3.20.2-py3-none-any.whl" + "https://files.pythonhosted.org/packages/b9/fa/123043af240e49752f1c4bd24da5053b6bd00cad78c2be53c0d1e8b975bc/backports.tarfile-1.2.0-py3-none-any.whl" ] } }, @@ -1794,7 +1139,7 @@ ] } }, - "rules_python_publish_deps_311_jeepney_py3_none_any_c0a454ad": { + "rules_python_publish_deps_311_certifi_py3_none_any_922820b5": { "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", "ruleClassName": "whl_library", "attributes": { @@ -1804,19 +1149,51 @@ "cp311_linux_arm", "cp311_linux_ppc", "cp311_linux_s390x", - "cp311_linux_x86_64" + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" ], - "filename": "jeepney-0.8.0-py3-none-any.whl", + "filename": "certifi-2024.8.30-py3-none-any.whl", "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", "repo": "rules_python_publish_deps_311", - "requirement": "jeepney==0.8.0", - "sha256": "c0a454ad016ca575060802ee4d590dd912e35c122fa04e70306de3d076cce755", + "requirement": "certifi==2024.8.30", + "sha256": "922820b53db7a7257ffbda3f597266d435245903d80737e34f8a45ff3e3230d8", "urls": [ - "https://files.pythonhosted.org/packages/ae/72/2a1e2290f1ab1e06f71f3d0f1646c9e4634e70e1d37491535e19266e8dc9/jeepney-0.8.0-py3-none-any.whl" + "https://files.pythonhosted.org/packages/12/90/3c9ff0512038035f59d279fddeb79f5f1eccd8859f06d6163c58798b9487/certifi-2024.8.30-py3-none-any.whl" ] } }, - "rules_python_publish_deps_311_secretstorage_py3_none_any_f356e662": { + "rules_python_publish_deps_311_certifi_sdist_bec941d2": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "extra_pip_args": [ + "--index-url", + "https://pypi.org/simple" + ], + "filename": "certifi-2024.8.30.tar.gz", + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "certifi==2024.8.30", + "sha256": "bec941d2aa8195e248a60b31ff9f0558284cf01a52591ceda73ea9afffd69fd9", + "urls": [ + "https://files.pythonhosted.org/packages/b0/ee/9b19140fe824b367c04c5e1b369942dd754c4c5462d5674002f75c4dedc1/certifi-2024.8.30.tar.gz" + ] + } + }, + "rules_python_publish_deps_311_cffi_cp311_cp311_manylinux_2_17_aarch64_a1ed2dd2": { "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", "ruleClassName": "whl_library", "attributes": { @@ -1828,13 +1205,848 @@ "cp311_linux_s390x", "cp311_linux_x86_64" ], - "filename": "SecretStorage-3.3.3-py3-none-any.whl", + "filename": "cffi-1.17.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", "repo": "rules_python_publish_deps_311", - "requirement": "secretstorage==3.3.3", - "sha256": "f356e6628222568e3af06f2eba8df495efa13b3b63081dafd4f7d9a7b7bc9f99", + "requirement": "cffi==1.17.1", + "sha256": "a1ed2dd2972641495a3ec98445e09766f077aee98a1c896dcb4ad0d303628e41", "urls": [ - "https://files.pythonhosted.org/packages/54/24/b4293291fa1dd830f353d2cb163295742fa87f179fcc8a20a306a81978b7/SecretStorage-3.3.3-py3-none-any.whl" + "https://files.pythonhosted.org/packages/2e/ea/70ce63780f096e16ce8588efe039d3c4f91deb1dc01e9c73a287939c79a6/cffi-1.17.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + ] + } + }, + "rules_python_publish_deps_311_cffi_cp311_cp311_manylinux_2_17_ppc64le_46bf4316": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64" + ], + "filename": "cffi-1.17.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "cffi==1.17.1", + "sha256": "46bf43160c1a35f7ec506d254e5c890f3c03648a4dbac12d624e4490a7046cd1", + "urls": [ + "https://files.pythonhosted.org/packages/1c/a0/a4fa9f4f781bda074c3ddd57a572b060fa0df7655d2a4247bbe277200146/cffi-1.17.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl" + ] + } + }, + "rules_python_publish_deps_311_cffi_cp311_cp311_manylinux_2_17_s390x_a24ed04c": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64" + ], + "filename": "cffi-1.17.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "cffi==1.17.1", + "sha256": "a24ed04c8ffd54b0729c07cee15a81d964e6fee0e3d4d342a27b020d22959dc6", + "urls": [ + "https://files.pythonhosted.org/packages/62/12/ce8710b5b8affbcdd5c6e367217c242524ad17a02fe5beec3ee339f69f85/cffi-1.17.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl" + ] + } + }, + "rules_python_publish_deps_311_cffi_cp311_cp311_manylinux_2_17_x86_64_610faea7": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64" + ], + "filename": "cffi-1.17.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "cffi==1.17.1", + "sha256": "610faea79c43e44c71e1ec53a554553fa22321b65fae24889706c0a84d4ad86d", + "urls": [ + "https://files.pythonhosted.org/packages/ff/6b/d45873c5e0242196f042d555526f92aa9e0c32355a1be1ff8c27f077fd37/cffi-1.17.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + ] + } + }, + "rules_python_publish_deps_311_cffi_cp311_cp311_musllinux_1_1_aarch64_a9b15d49": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64" + ], + "filename": "cffi-1.17.1-cp311-cp311-musllinux_1_1_aarch64.whl", + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "cffi==1.17.1", + "sha256": "a9b15d491f3ad5d692e11f6b71f7857e7835eb677955c00cc0aefcd0669adaf6", + "urls": [ + "https://files.pythonhosted.org/packages/1a/52/d9a0e523a572fbccf2955f5abe883cfa8bcc570d7faeee06336fbd50c9fc/cffi-1.17.1-cp311-cp311-musllinux_1_1_aarch64.whl" + ] + } + }, + "rules_python_publish_deps_311_cffi_cp311_cp311_musllinux_1_1_x86_64_fc48c783": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64" + ], + "filename": "cffi-1.17.1-cp311-cp311-musllinux_1_1_x86_64.whl", + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "cffi==1.17.1", + "sha256": "fc48c783f9c87e60831201f2cce7f3b2e4846bf4d8728eabe54d60700b318a0b", + "urls": [ + "https://files.pythonhosted.org/packages/f8/4a/34599cac7dfcd888ff54e801afe06a19c17787dfd94495ab0c8d35fe99fb/cffi-1.17.1-cp311-cp311-musllinux_1_1_x86_64.whl" + ] + } + }, + "rules_python_publish_deps_311_cffi_sdist_1c39c601": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64" + ], + "extra_pip_args": [ + "--index-url", + "https://pypi.org/simple" + ], + "filename": "cffi-1.17.1.tar.gz", + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "cffi==1.17.1", + "sha256": "1c39c6016c32bc48dd54561950ebd6836e1670f2ae46128f67cf49e789c52824", + "urls": [ + "https://files.pythonhosted.org/packages/fc/97/c783634659c2920c3fc70419e3af40972dbaf758daa229a7d6ea6135c90d/cffi-1.17.1.tar.gz" + ] + } + }, + "rules_python_publish_deps_311_charset_normalizer_cp311_cp311_macosx_10_9_universal2_0d99dd8f": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "charset_normalizer-3.4.0-cp311-cp311-macosx_10_9_universal2.whl", + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "charset-normalizer==3.4.0", + "sha256": "0d99dd8ff461990f12d6e42c7347fd9ab2532fb70e9621ba520f9e8637161d7c", + "urls": [ + "https://files.pythonhosted.org/packages/9c/61/73589dcc7a719582bf56aae309b6103d2762b526bffe189d635a7fcfd998/charset_normalizer-3.4.0-cp311-cp311-macosx_10_9_universal2.whl" + ] + } + }, + "rules_python_publish_deps_311_charset_normalizer_cp311_cp311_macosx_10_9_x86_64_c57516e5": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "charset_normalizer-3.4.0-cp311-cp311-macosx_10_9_x86_64.whl", + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "charset-normalizer==3.4.0", + "sha256": "c57516e58fd17d03ebe67e181a4e4e2ccab1168f8c2976c6a334d4f819fe5944", + "urls": [ + "https://files.pythonhosted.org/packages/77/d5/8c982d58144de49f59571f940e329ad6e8615e1e82ef84584c5eeb5e1d72/charset_normalizer-3.4.0-cp311-cp311-macosx_10_9_x86_64.whl" + ] + } + }, + "rules_python_publish_deps_311_charset_normalizer_cp311_cp311_macosx_11_0_arm64_6dba5d19": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "charset_normalizer-3.4.0-cp311-cp311-macosx_11_0_arm64.whl", + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "charset-normalizer==3.4.0", + "sha256": "6dba5d19c4dfab08e58d5b36304b3f92f3bd5d42c1a3fa37b5ba5cdf6dfcbcee", + "urls": [ + "https://files.pythonhosted.org/packages/bf/19/411a64f01ee971bed3231111b69eb56f9331a769072de479eae7de52296d/charset_normalizer-3.4.0-cp311-cp311-macosx_11_0_arm64.whl" + ] + } + }, + "rules_python_publish_deps_311_charset_normalizer_cp311_cp311_manylinux_2_17_aarch64_bf4475b8": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "charset-normalizer==3.4.0", + "sha256": "bf4475b82be41b07cc5e5ff94810e6a01f276e37c2d55571e3fe175e467a1a1c", + "urls": [ + "https://files.pythonhosted.org/packages/4c/92/97509850f0d00e9f14a46bc751daabd0ad7765cff29cdfb66c68b6dad57f/charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + ] + } + }, + "rules_python_publish_deps_311_charset_normalizer_cp311_cp311_manylinux_2_17_ppc64le_ce031db0": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "charset-normalizer==3.4.0", + "sha256": "ce031db0408e487fd2775d745ce30a7cd2923667cf3b69d48d219f1d8f5ddeb6", + "urls": [ + "https://files.pythonhosted.org/packages/e2/29/d227805bff72ed6d6cb1ce08eec707f7cfbd9868044893617eb331f16295/charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl" + ] + } + }, + "rules_python_publish_deps_311_charset_normalizer_cp311_cp311_manylinux_2_17_s390x_8ff4e7cd": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "charset-normalizer==3.4.0", + "sha256": "8ff4e7cdfdb1ab5698e675ca622e72d58a6fa2a8aa58195de0c0061288e6e3ea", + "urls": [ + "https://files.pythonhosted.org/packages/13/bc/87c2c9f2c144bedfa62f894c3007cd4530ba4b5351acb10dc786428a50f0/charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl" + ] + } + }, + "rules_python_publish_deps_311_charset_normalizer_cp311_cp311_manylinux_2_17_x86_64_3710a975": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "charset-normalizer==3.4.0", + "sha256": "3710a9751938947e6327ea9f3ea6332a09bf0ba0c09cae9cb1f250bd1f1549bc", + "urls": [ + "https://files.pythonhosted.org/packages/eb/5b/6f10bad0f6461fa272bfbbdf5d0023b5fb9bc6217c92bf068fa5a99820f5/charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + ] + } + }, + "rules_python_publish_deps_311_charset_normalizer_cp311_cp311_musllinux_1_2_aarch64_47334db7": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_aarch64.whl", + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "charset-normalizer==3.4.0", + "sha256": "47334db71978b23ebcf3c0f9f5ee98b8d65992b65c9c4f2d34c2eaf5bcaf0594", + "urls": [ + "https://files.pythonhosted.org/packages/d7/a1/493919799446464ed0299c8eef3c3fad0daf1c3cd48bff9263c731b0d9e2/charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_aarch64.whl" + ] + } + }, + "rules_python_publish_deps_311_charset_normalizer_cp311_cp311_musllinux_1_2_ppc64le_f1a2f519": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_ppc64le.whl", + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "charset-normalizer==3.4.0", + "sha256": "f1a2f519ae173b5b6a2c9d5fa3116ce16e48b3462c8b96dfdded11055e3d6365", + "urls": [ + "https://files.pythonhosted.org/packages/75/d2/0ab54463d3410709c09266dfb416d032a08f97fd7d60e94b8c6ef54ae14b/charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_ppc64le.whl" + ] + } + }, + "rules_python_publish_deps_311_charset_normalizer_cp311_cp311_musllinux_1_2_s390x_63bc5c4a": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_s390x.whl", + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "charset-normalizer==3.4.0", + "sha256": "63bc5c4ae26e4bc6be6469943b8253c0fd4e4186c43ad46e713ea61a0ba49129", + "urls": [ + "https://files.pythonhosted.org/packages/8d/c9/27e41d481557be53d51e60750b85aa40eaf52b841946b3cdeff363105737/charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_s390x.whl" + ] + } + }, + "rules_python_publish_deps_311_charset_normalizer_cp311_cp311_musllinux_1_2_x86_64_bcb4f8ea": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_x86_64.whl", + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "charset-normalizer==3.4.0", + "sha256": "bcb4f8ea87d03bc51ad04add8ceaf9b0f085ac045ab4d74e73bbc2dc033f0236", + "urls": [ + "https://files.pythonhosted.org/packages/ee/44/4f62042ca8cdc0cabf87c0fc00ae27cd8b53ab68be3605ba6d071f742ad3/charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_x86_64.whl" + ] + } + }, + "rules_python_publish_deps_311_charset_normalizer_cp311_cp311_win_amd64_cee4373f": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "charset_normalizer-3.4.0-cp311-cp311-win_amd64.whl", + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "charset-normalizer==3.4.0", + "sha256": "cee4373f4d3ad28f1ab6290684d8e2ebdb9e7a1b74fdc39e4c211995f77bec27", + "urls": [ + "https://files.pythonhosted.org/packages/0b/6e/b13bd47fa9023b3699e94abf565b5a2f0b0be6e9ddac9812182596ee62e4/charset_normalizer-3.4.0-cp311-cp311-win_amd64.whl" + ] + } + }, + "rules_python_publish_deps_311_charset_normalizer_py3_none_any_fe9f97fe": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "charset_normalizer-3.4.0-py3-none-any.whl", + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "charset-normalizer==3.4.0", + "sha256": "fe9f97feb71aa9896b81973a7bbada8c49501dc73e58a10fcef6663af95e5079", + "urls": [ + "https://files.pythonhosted.org/packages/bf/9b/08c0432272d77b04803958a4598a51e2a4b51c06640af8b8f0f908c18bf2/charset_normalizer-3.4.0-py3-none-any.whl" + ] + } + }, + "rules_python_publish_deps_311_charset_normalizer_sdist_223217c3": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "extra_pip_args": [ + "--index-url", + "https://pypi.org/simple" + ], + "filename": "charset_normalizer-3.4.0.tar.gz", + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "charset-normalizer==3.4.0", + "sha256": "223217c3d4f82c3ac5e29032b3f1c2eb0fb591b72161f86d93f5719079dae93e", + "urls": [ + "https://files.pythonhosted.org/packages/f2/4f/e1808dc01273379acc506d18f1504eb2d299bd4131743b9fc54d7be4df1e/charset_normalizer-3.4.0.tar.gz" + ] + } + }, + "rules_python_publish_deps_311_cryptography_cp39_abi3_manylinux_2_17_aarch64_846da004": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64" + ], + "filename": "cryptography-43.0.3-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "cryptography==43.0.3", + "sha256": "846da004a5804145a5f441b8530b4bf35afbf7da70f82409f151695b127213d5", + "urls": [ + "https://files.pythonhosted.org/packages/2f/78/55356eb9075d0be6e81b59f45c7b48df87f76a20e73893872170471f3ee8/cryptography-43.0.3-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + ] + } + }, + "rules_python_publish_deps_311_cryptography_cp39_abi3_manylinux_2_17_x86_64_0f996e72": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64" + ], + "filename": "cryptography-43.0.3-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "cryptography==43.0.3", + "sha256": "0f996e7268af62598f2fc1204afa98a3b5712313a55c4c9d434aef49cadc91d4", + "urls": [ + "https://files.pythonhosted.org/packages/2a/2c/488776a3dc843f95f86d2f957ca0fc3407d0242b50bede7fad1e339be03f/cryptography-43.0.3-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + ] + } + }, + "rules_python_publish_deps_311_cryptography_cp39_abi3_manylinux_2_28_aarch64_f7b178f1": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64" + ], + "filename": "cryptography-43.0.3-cp39-abi3-manylinux_2_28_aarch64.whl", + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "cryptography==43.0.3", + "sha256": "f7b178f11ed3664fd0e995a47ed2b5ff0a12d893e41dd0494f406d1cf555cab7", + "urls": [ + "https://files.pythonhosted.org/packages/7c/04/2345ca92f7a22f601a9c62961741ef7dd0127c39f7310dffa0041c80f16f/cryptography-43.0.3-cp39-abi3-manylinux_2_28_aarch64.whl" + ] + } + }, + "rules_python_publish_deps_311_cryptography_cp39_abi3_manylinux_2_28_x86_64_c2e6fc39": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64" + ], + "filename": "cryptography-43.0.3-cp39-abi3-manylinux_2_28_x86_64.whl", + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "cryptography==43.0.3", + "sha256": "c2e6fc39c4ab499049df3bdf567f768a723a5e8464816e8f009f121a5a9f4405", + "urls": [ + "https://files.pythonhosted.org/packages/ac/25/e715fa0bc24ac2114ed69da33adf451a38abb6f3f24ec207908112e9ba53/cryptography-43.0.3-cp39-abi3-manylinux_2_28_x86_64.whl" + ] + } + }, + "rules_python_publish_deps_311_cryptography_cp39_abi3_musllinux_1_2_aarch64_e1be4655": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64" + ], + "filename": "cryptography-43.0.3-cp39-abi3-musllinux_1_2_aarch64.whl", + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "cryptography==43.0.3", + "sha256": "e1be4655c7ef6e1bbe6b5d0403526601323420bcf414598955968c9ef3eb7d16", + "urls": [ + "https://files.pythonhosted.org/packages/21/ce/b9c9ff56c7164d8e2edfb6c9305045fbc0df4508ccfdb13ee66eb8c95b0e/cryptography-43.0.3-cp39-abi3-musllinux_1_2_aarch64.whl" + ] + } + }, + "rules_python_publish_deps_311_cryptography_cp39_abi3_musllinux_1_2_x86_64_df6b6c6d": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64" + ], + "filename": "cryptography-43.0.3-cp39-abi3-musllinux_1_2_x86_64.whl", + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "cryptography==43.0.3", + "sha256": "df6b6c6d742395dd77a23ea3728ab62f98379eff8fb61be2744d4679ab678f73", + "urls": [ + "https://files.pythonhosted.org/packages/2a/33/b3682992ab2e9476b9c81fff22f02c8b0a1e6e1d49ee1750a67d85fd7ed2/cryptography-43.0.3-cp39-abi3-musllinux_1_2_x86_64.whl" + ] + } + }, + "rules_python_publish_deps_311_cryptography_sdist_315b9001": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64" + ], + "extra_pip_args": [ + "--index-url", + "https://pypi.org/simple" + ], + "filename": "cryptography-43.0.3.tar.gz", + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "cryptography==43.0.3", + "sha256": "315b9001266a492a6ff443b61238f956b214dbec9910a081ba5b6646a055a805", + "urls": [ + "https://files.pythonhosted.org/packages/0d/05/07b55d1fa21ac18c3a8c79f764e2514e6f6a9698f1be44994f5adf0d29db/cryptography-43.0.3.tar.gz" + ] + } + }, + "rules_python_publish_deps_311_docutils_py3_none_any_dafca5b9": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "docutils-0.21.2-py3-none-any.whl", + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "docutils==0.21.2", + "sha256": "dafca5b9e384f0e419294eb4d2ff9fa826435bf15f15b7bd45723e8ad76811b2", + "urls": [ + "https://files.pythonhosted.org/packages/8f/d7/9322c609343d929e75e7e5e6255e614fcc67572cfd083959cdef3b7aad79/docutils-0.21.2-py3-none-any.whl" + ] + } + }, + "rules_python_publish_deps_311_docutils_sdist_3a6b1873": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "extra_pip_args": [ + "--index-url", + "https://pypi.org/simple" + ], + "filename": "docutils-0.21.2.tar.gz", + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "docutils==0.21.2", + "sha256": "3a6b18732edf182daa3cd12775bbb338cf5691468f91eeeb109deff6ebfa986f", + "urls": [ + "https://files.pythonhosted.org/packages/ae/ed/aefcc8cd0ba62a0560c3c18c33925362d46c6075480bfa4df87b28e169a9/docutils-0.21.2.tar.gz" + ] + } + }, + "rules_python_publish_deps_311_idna_py3_none_any_946d195a": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "idna-3.10-py3-none-any.whl", + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "idna==3.10", + "sha256": "946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3", + "urls": [ + "https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl" + ] + } + }, + "rules_python_publish_deps_311_idna_sdist_12f65c9b": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "extra_pip_args": [ + "--index-url", + "https://pypi.org/simple" + ], + "filename": "idna-3.10.tar.gz", + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "idna==3.10", + "sha256": "12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9", + "urls": [ + "https://files.pythonhosted.org/packages/f1/70/7703c29685631f5a7590aa73f1f1d3fa9a380e654b86af429e0934a32f7d/idna-3.10.tar.gz" + ] + } + }, + "rules_python_publish_deps_311_importlib_metadata_py3_none_any_45e54197": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "importlib_metadata-8.5.0-py3-none-any.whl", + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "importlib-metadata==8.5.0", + "sha256": "45e54197d28b7a7f1559e60b95e7c567032b602131fbd588f1497f47880aa68b", + "urls": [ + "https://files.pythonhosted.org/packages/a0/d9/a1e041c5e7caa9a05c925f4bdbdfb7f006d1f74996af53467bc394c97be7/importlib_metadata-8.5.0-py3-none-any.whl" + ] + } + }, + "rules_python_publish_deps_311_importlib_metadata_sdist_71522656": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "extra_pip_args": [ + "--index-url", + "https://pypi.org/simple" + ], + "filename": "importlib_metadata-8.5.0.tar.gz", + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "importlib-metadata==8.5.0", + "sha256": "71522656f0abace1d072b9e5481a48f07c138e00f079c38c8f883823f9c26bd7", + "urls": [ + "https://files.pythonhosted.org/packages/cd/12/33e59336dca5be0c398a7482335911a33aa0e20776128f038019f1a95f1b/importlib_metadata-8.5.0.tar.gz" + ] + } + }, + "rules_python_publish_deps_311_jaraco_classes_py3_none_any_f662826b": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "jaraco.classes-3.4.0-py3-none-any.whl", + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "jaraco-classes==3.4.0", + "sha256": "f662826b6bed8cace05e7ff873ce0f9283b5c924470fe664fff1c2f00f581790", + "urls": [ + "https://files.pythonhosted.org/packages/7f/66/b15ce62552d84bbfcec9a4873ab79d993a1dd4edb922cbfccae192bd5b5f/jaraco.classes-3.4.0-py3-none-any.whl" ] } }, @@ -1867,7 +2079,7 @@ ] } }, - "rules_python_publish_deps_311_charset_normalizer_cp311_cp311_win_amd64_cee4373f": { + "rules_python_publish_deps_311_jaraco_context_py3_none_any_f797fc48": { "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", "ruleClassName": "whl_library", "attributes": { @@ -1882,17 +2094,100 @@ "cp311_osx_x86_64", "cp311_windows_x86_64" ], - "filename": "charset_normalizer-3.4.0-cp311-cp311-win_amd64.whl", + "filename": "jaraco.context-6.0.1-py3-none-any.whl", "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", "repo": "rules_python_publish_deps_311", - "requirement": "charset-normalizer==3.4.0", - "sha256": "cee4373f4d3ad28f1ab6290684d8e2ebdb9e7a1b74fdc39e4c211995f77bec27", + "requirement": "jaraco-context==6.0.1", + "sha256": "f797fc481b490edb305122c9181830a3a5b76d84ef6d1aef2fb9b47ab956f9e4", "urls": [ - "https://files.pythonhosted.org/packages/0b/6e/b13bd47fa9023b3699e94abf565b5a2f0b0be6e9ddac9812182596ee62e4/charset_normalizer-3.4.0-cp311-cp311-win_amd64.whl" + "https://files.pythonhosted.org/packages/ff/db/0c52c4cf5e4bd9f5d7135ec7669a3a767af21b3a308e1ed3674881e52b62/jaraco.context-6.0.1-py3-none-any.whl" ] } }, - "rules_python_publish_deps_311_cryptography_cp39_abi3_musllinux_1_2_x86_64_df6b6c6d": { + "rules_python_publish_deps_311_jaraco_context_sdist_9bae4ea5": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "extra_pip_args": [ + "--index-url", + "https://pypi.org/simple" + ], + "filename": "jaraco_context-6.0.1.tar.gz", + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "jaraco-context==6.0.1", + "sha256": "9bae4ea555cf0b14938dc0aee7c9f32ed303aa20a3b73e7dc80111628792d1b3", + "urls": [ + "https://files.pythonhosted.org/packages/df/ad/f3777b81bf0b6e7bc7514a1656d3e637b2e8e15fab2ce3235730b3e7a4e6/jaraco_context-6.0.1.tar.gz" + ] + } + }, + "rules_python_publish_deps_311_jaraco_functools_py3_none_any_ad159f13": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "jaraco.functools-4.1.0-py3-none-any.whl", + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "jaraco-functools==4.1.0", + "sha256": "ad159f13428bc4acbf5541ad6dec511f91573b90fba04df61dafa2a1231cf649", + "urls": [ + "https://files.pythonhosted.org/packages/9f/4f/24b319316142c44283d7540e76c7b5a6dbd5db623abd86bb7b3491c21018/jaraco.functools-4.1.0-py3-none-any.whl" + ] + } + }, + "rules_python_publish_deps_311_jaraco_functools_sdist_70f7e0e2": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "extra_pip_args": [ + "--index-url", + "https://pypi.org/simple" + ], + "filename": "jaraco_functools-4.1.0.tar.gz", + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "jaraco-functools==4.1.0", + "sha256": "70f7e0e2ae076498e212562325e805204fc092d7b4c17e0e86c959e249701a9d", + "urls": [ + "https://files.pythonhosted.org/packages/ab/23/9894b3df5d0a6eb44611c36aec777823fc2e07740dabbd0b810e19594013/jaraco_functools-4.1.0.tar.gz" + ] + } + }, + "rules_python_publish_deps_311_jeepney_py3_none_any_c0a454ad": { "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", "ruleClassName": "whl_library", "attributes": { @@ -1904,17 +2199,17 @@ "cp311_linux_s390x", "cp311_linux_x86_64" ], - "filename": "cryptography-43.0.3-cp39-abi3-musllinux_1_2_x86_64.whl", + "filename": "jeepney-0.8.0-py3-none-any.whl", "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", "repo": "rules_python_publish_deps_311", - "requirement": "cryptography==43.0.3", - "sha256": "df6b6c6d742395dd77a23ea3728ab62f98379eff8fb61be2744d4679ab678f73", + "requirement": "jeepney==0.8.0", + "sha256": "c0a454ad016ca575060802ee4d590dd912e35c122fa04e70306de3d076cce755", "urls": [ - "https://files.pythonhosted.org/packages/2a/33/b3682992ab2e9476b9c81fff22f02c8b0a1e6e1d49ee1750a67d85fd7ed2/cryptography-43.0.3-cp39-abi3-musllinux_1_2_x86_64.whl" + "https://files.pythonhosted.org/packages/ae/72/2a1e2290f1ab1e06f71f3d0f1646c9e4634e70e1d37491535e19266e8dc9/jeepney-0.8.0-py3-none-any.whl" ] } }, - "rules_python_publish_deps_311_nh3_cp37_abi3_macosx_10_12_x86_64_7b7c2a3c": { + "rules_python_publish_deps_311_jeepney_sdist_5efe48d2": { "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", "ruleClassName": "whl_library", "attributes": { @@ -1924,51 +2219,23 @@ "cp311_linux_arm", "cp311_linux_ppc", "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "nh3-0.2.18-cp37-abi3-macosx_10_12_x86_64.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "nh3==0.2.18", - "sha256": "7b7c2a3c9eb1a827d42539aa64091640bd275b81e097cd1d8d82ef91ffa2e811", - "urls": [ - "https://files.pythonhosted.org/packages/2c/b6/42fc3c69cabf86b6b81e4c051a9b6e249c5ba9f8155590222c2622961f58/nh3-0.2.18-cp37-abi3-macosx_10_12_x86_64.whl" - ] - } - }, - "rules_python_publish_deps_311_requests_toolbelt_sdist_7681a0a3": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" + "cp311_linux_x86_64" ], "extra_pip_args": [ "--index-url", "https://pypi.org/simple" ], - "filename": "requests-toolbelt-1.0.0.tar.gz", + "filename": "jeepney-0.8.0.tar.gz", "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", "repo": "rules_python_publish_deps_311", - "requirement": "requests-toolbelt==1.0.0", - "sha256": "7681a0a3d047012b5bdc0ee37d7f8f07ebe76ab08caeccfc3921ce23c88d5bc6", + "requirement": "jeepney==0.8.0", + "sha256": "5efe48d255973902f6badc3ce55e2aa6c5c3b3bc642059ef3a91247bcfcc5806", "urls": [ - "https://files.pythonhosted.org/packages/f3/61/d7545dafb7ac2230c70d38d31cbfe4cc64f7144dc41f6e4e4b78ecd9f5bb/requests-toolbelt-1.0.0.tar.gz" + "https://files.pythonhosted.org/packages/d6/f4/154cf374c2daf2020e05c3c6a03c91348d59b23c5366e968feb198306fdf/jeepney-0.8.0.tar.gz" ] } }, - "rules_python_publish_deps_311_rich_py3_none_any_9836f509": { + "rules_python_publish_deps_311_keyring_py3_none_any_5426f817": { "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", "ruleClassName": "whl_library", "attributes": { @@ -1983,92 +2250,13 @@ "cp311_osx_x86_64", "cp311_windows_x86_64" ], - "filename": "rich-13.9.3-py3-none-any.whl", + "filename": "keyring-25.4.1-py3-none-any.whl", "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", "repo": "rules_python_publish_deps_311", - "requirement": "rich==13.9.3", - "sha256": "9836f5096eb2172c9e77df411c1b009bace4193d6a481d534fea75ebba758283", + "requirement": "keyring==25.4.1", + "sha256": "5426f817cf7f6f007ba5ec722b1bcad95a75b27d780343772ad76b17cb47b0bf", "urls": [ - "https://files.pythonhosted.org/packages/9a/e2/10e9819cf4a20bd8ea2f5dabafc2e6bf4a78d6a0965daeb60a4b34d1c11f/rich-13.9.3-py3-none-any.whl" - ] - } - }, - "rules_python_publish_deps_311_importlib_metadata_py3_none_any_45e54197": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "importlib_metadata-8.5.0-py3-none-any.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "importlib-metadata==8.5.0", - "sha256": "45e54197d28b7a7f1559e60b95e7c567032b602131fbd588f1497f47880aa68b", - "urls": [ - "https://files.pythonhosted.org/packages/a0/d9/a1e041c5e7caa9a05c925f4bdbdfb7f006d1f74996af53467bc394c97be7/importlib_metadata-8.5.0-py3-none-any.whl" - ] - } - }, - "rules_python_publish_deps_311_twine_py3_none_any_215dbe7b": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "twine-5.1.1-py3-none-any.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "twine==5.1.1", - "sha256": "215dbe7b4b94c2c50a7315c0275d2258399280fbb7d04182c7e55e24b5f93997", - "urls": [ - "https://files.pythonhosted.org/packages/5d/ec/00f9d5fd040ae29867355e559a94e9a8429225a0284a3f5f091a3878bfc0/twine-5.1.1-py3-none-any.whl" - ] - } - }, - "rules_python_publish_deps_311_docutils_sdist_3a6b1873": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "extra_pip_args": [ - "--index-url", - "https://pypi.org/simple" - ], - "filename": "docutils-0.21.2.tar.gz", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "docutils==0.21.2", - "sha256": "3a6b18732edf182daa3cd12775bbb338cf5691468f91eeeb109deff6ebfa986f", - "urls": [ - "https://files.pythonhosted.org/packages/ae/ed/aefcc8cd0ba62a0560c3c18c33925362d46c6075480bfa4df87b28e169a9/docutils-0.21.2.tar.gz" + "https://files.pythonhosted.org/packages/83/25/e6d59e5f0a0508d0dca8bb98c7f7fd3772fc943ac3f53d5ab18a218d32c0/keyring-25.4.1-py3-none-any.whl" ] } }, @@ -2126,32 +2314,7 @@ ] } }, - "rules_python_publish_deps_311_certifi_py3_none_any_922820b5": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "certifi-2024.8.30-py3-none-any.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "certifi==2024.8.30", - "sha256": "922820b53db7a7257ffbda3f597266d435245903d80737e34f8a45ff3e3230d8", - "urls": [ - "https://files.pythonhosted.org/packages/12/90/3c9ff0512038035f59d279fddeb79f5f1eccd8859f06d6163c58798b9487/certifi-2024.8.30-py3-none-any.whl" - ] - } - }, - "rules_python_publish_deps_311_more_itertools_sdist_5482bfef": { + "rules_python_publish_deps_311_markdown_it_py_sdist_e3f60a94": { "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", "ruleClassName": "whl_library", "attributes": { @@ -2170,92 +2333,13 @@ "--index-url", "https://pypi.org/simple" ], - "filename": "more-itertools-10.5.0.tar.gz", + "filename": "markdown-it-py-3.0.0.tar.gz", "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", "repo": "rules_python_publish_deps_311", - "requirement": "more-itertools==10.5.0", - "sha256": "5482bfef7849c25dc3c6dd53a6173ae4795da2a41a80faea6700d9f5846c5da6", + "requirement": "markdown-it-py==3.0.0", + "sha256": "e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb", "urls": [ - "https://files.pythonhosted.org/packages/51/78/65922308c4248e0eb08ebcbe67c95d48615cc6f27854b6f2e57143e9178f/more-itertools-10.5.0.tar.gz" - ] - } - }, - "rules_python_publish_deps_311_nh3_cp37_abi3_win_amd64_8ce0f819": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "nh3-0.2.18-cp37-abi3-win_amd64.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "nh3==0.2.18", - "sha256": "8ce0f819d2f1933953fca255db2471ad58184a60508f03e6285e5114b6254844", - "urls": [ - "https://files.pythonhosted.org/packages/26/8d/53c5b19c4999bdc6ba95f246f4ef35ca83d7d7423e5e38be43ad66544e5d/nh3-0.2.18-cp37-abi3-win_amd64.whl" - ] - } - }, - "rules_python_publish_deps_311_certifi_sdist_bec941d2": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "extra_pip_args": [ - "--index-url", - "https://pypi.org/simple" - ], - "filename": "certifi-2024.8.30.tar.gz", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "certifi==2024.8.30", - "sha256": "bec941d2aa8195e248a60b31ff9f0558284cf01a52591ceda73ea9afffd69fd9", - "urls": [ - "https://files.pythonhosted.org/packages/b0/ee/9b19140fe824b367c04c5e1b369942dd754c4c5462d5674002f75c4dedc1/certifi-2024.8.30.tar.gz" - ] - } - }, - "rules_python_publish_deps_311_charset_normalizer_py3_none_any_fe9f97fe": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "charset_normalizer-3.4.0-py3-none-any.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "charset-normalizer==3.4.0", - "sha256": "fe9f97feb71aa9896b81973a7bbada8c49501dc73e58a10fcef6663af95e5079", - "urls": [ - "https://files.pythonhosted.org/packages/bf/9b/08c0432272d77b04803958a4598a51e2a4b51c06640af8b8f0f908c18bf2/charset_normalizer-3.4.0-py3-none-any.whl" + "https://files.pythonhosted.org/packages/38/71/3b932df36c1a044d397a1f92d1cf91ee0a503d91e470cbd670aa66b07ed0/markdown-it-py-3.0.0.tar.gz" ] } }, @@ -2284,53 +2368,6 @@ ] } }, - "rules_python_publish_deps_311_charset_normalizer_cp311_cp311_musllinux_1_2_x86_64_bcb4f8ea": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_x86_64.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "charset-normalizer==3.4.0", - "sha256": "bcb4f8ea87d03bc51ad04add8ceaf9b0f085ac045ab4d74e73bbc2dc033f0236", - "urls": [ - "https://files.pythonhosted.org/packages/ee/44/4f62042ca8cdc0cabf87c0fc00ae27cd8b53ab68be3605ba6d071f742ad3/charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_x86_64.whl" - ] - } - }, - "rules_python_publish_deps_311_cffi_cp311_cp311_manylinux_2_17_s390x_a24ed04c": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64" - ], - "filename": "cffi-1.17.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "cffi==1.17.1", - "sha256": "a24ed04c8ffd54b0729c07cee15a81d964e6fee0e3d4d342a27b020d22959dc6", - "urls": [ - "https://files.pythonhosted.org/packages/62/12/ce8710b5b8affbcdd5c6e367217c242524ad17a02fe5beec3ee339f69f85/cffi-1.17.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl" - ] - } - }, "rules_python_publish_deps_311_mdurl_sdist_bb413d29": { "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", "ruleClassName": "whl_library", @@ -2360,7 +2397,7 @@ ] } }, - "rules_python_publish_deps_311_keyring_py3_none_any_5426f817": { + "rules_python_publish_deps_311_more_itertools_py3_none_any_037b0d32": { "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", "ruleClassName": "whl_library", "attributes": { @@ -2375,13 +2412,92 @@ "cp311_osx_x86_64", "cp311_windows_x86_64" ], - "filename": "keyring-25.4.1-py3-none-any.whl", + "filename": "more_itertools-10.5.0-py3-none-any.whl", "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", "repo": "rules_python_publish_deps_311", - "requirement": "keyring==25.4.1", - "sha256": "5426f817cf7f6f007ba5ec722b1bcad95a75b27d780343772ad76b17cb47b0bf", + "requirement": "more-itertools==10.5.0", + "sha256": "037b0d3203ce90cca8ab1defbbdac29d5f993fc20131f3664dc8d6acfa872aef", "urls": [ - "https://files.pythonhosted.org/packages/83/25/e6d59e5f0a0508d0dca8bb98c7f7fd3772fc943ac3f53d5ab18a218d32c0/keyring-25.4.1-py3-none-any.whl" + "https://files.pythonhosted.org/packages/48/7e/3a64597054a70f7c86eb0a7d4fc315b8c1ab932f64883a297bdffeb5f967/more_itertools-10.5.0-py3-none-any.whl" + ] + } + }, + "rules_python_publish_deps_311_more_itertools_sdist_5482bfef": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "extra_pip_args": [ + "--index-url", + "https://pypi.org/simple" + ], + "filename": "more-itertools-10.5.0.tar.gz", + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "more-itertools==10.5.0", + "sha256": "5482bfef7849c25dc3c6dd53a6173ae4795da2a41a80faea6700d9f5846c5da6", + "urls": [ + "https://files.pythonhosted.org/packages/51/78/65922308c4248e0eb08ebcbe67c95d48615cc6f27854b6f2e57143e9178f/more-itertools-10.5.0.tar.gz" + ] + } + }, + "rules_python_publish_deps_311_nh3_cp37_abi3_macosx_10_12_x86_64_14c5a72e": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "nh3-0.2.18-cp37-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "nh3==0.2.18", + "sha256": "14c5a72e9fe82aea5fe3072116ad4661af5cf8e8ff8fc5ad3450f123e4925e86", + "urls": [ + "https://files.pythonhosted.org/packages/b3/89/1daff5d9ba5a95a157c092c7c5f39b8dd2b1ddb4559966f808d31cfb67e0/nh3-0.2.18-cp37-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl" + ] + } + }, + "rules_python_publish_deps_311_nh3_cp37_abi3_macosx_10_12_x86_64_7b7c2a3c": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "nh3-0.2.18-cp37-abi3-macosx_10_12_x86_64.whl", + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "nh3==0.2.18", + "sha256": "7b7c2a3c9eb1a827d42539aa64091640bd275b81e097cd1d8d82ef91ffa2e811", + "urls": [ + "https://files.pythonhosted.org/packages/2c/b6/42fc3c69cabf86b6b81e4c051a9b6e249c5ba9f8155590222c2622961f58/nh3-0.2.18-cp37-abi3-macosx_10_12_x86_64.whl" ] } }, @@ -2410,7 +2526,7 @@ ] } }, - "rules_python_publish_deps_311_rfc3986_sdist_97aacf9d": { + "rules_python_publish_deps_311_nh3_cp37_abi3_manylinux_2_17_armv7l_0411beb0": { "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", "ruleClassName": "whl_library", "attributes": { @@ -2425,21 +2541,17 @@ "cp311_osx_x86_64", "cp311_windows_x86_64" ], - "extra_pip_args": [ - "--index-url", - "https://pypi.org/simple" - ], - "filename": "rfc3986-2.0.0.tar.gz", + "filename": "nh3-0.2.18-cp37-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", "repo": "rules_python_publish_deps_311", - "requirement": "rfc3986==2.0.0", - "sha256": "97aacf9dbd4bfd829baad6e6309fa6573aaf1be3f6fa735c8ab05e46cecb261c", + "requirement": "nh3==0.2.18", + "sha256": "0411beb0589eacb6734f28d5497ca2ed379eafab8ad8c84b31bb5c34072b7164", "urls": [ - "https://files.pythonhosted.org/packages/85/40/1520d68bfa07ab5a6f065a186815fb6610c86fe957bc065754e47f7b0840/rfc3986-2.0.0.tar.gz" + "https://files.pythonhosted.org/packages/05/2b/85977d9e11713b5747595ee61f381bc820749daf83f07b90b6c9964cf932/nh3-0.2.18-cp37-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl" ] } }, - "rules_python_publish_deps_311_twine_sdist_9aa08251": { + "rules_python_publish_deps_311_nh3_cp37_abi3_manylinux_2_17_ppc64_5f36b271": { "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", "ruleClassName": "whl_library", "attributes": { @@ -2454,21 +2566,17 @@ "cp311_osx_x86_64", "cp311_windows_x86_64" ], - "extra_pip_args": [ - "--index-url", - "https://pypi.org/simple" - ], - "filename": "twine-5.1.1.tar.gz", + "filename": "nh3-0.2.18-cp37-abi3-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", "repo": "rules_python_publish_deps_311", - "requirement": "twine==5.1.1", - "sha256": "9aa0825139c02b3434d913545c7b847a21c835e11597f5255842d457da2322db", + "requirement": "nh3==0.2.18", + "sha256": "5f36b271dae35c465ef5e9090e1fdaba4a60a56f0bb0ba03e0932a66f28b9189", "urls": [ - "https://files.pythonhosted.org/packages/77/68/bd982e5e949ef8334e6f7dcf76ae40922a8750aa2e347291ae1477a4782b/twine-5.1.1.tar.gz" + "https://files.pythonhosted.org/packages/72/f2/5c894d5265ab80a97c68ca36f25c8f6f0308abac649aaf152b74e7e854a8/nh3-0.2.18-cp37-abi3-manylinux_2_17_ppc64.manylinux2014_ppc64.whl" ] } }, - "rules_python_publish_deps_311_pkginfo_sdist_5df73835": { + "rules_python_publish_deps_311_nh3_cp37_abi3_manylinux_2_17_ppc64le_34c03fa7": { "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", "ruleClassName": "whl_library", "attributes": { @@ -2483,21 +2591,17 @@ "cp311_osx_x86_64", "cp311_windows_x86_64" ], - "extra_pip_args": [ - "--index-url", - "https://pypi.org/simple" - ], - "filename": "pkginfo-1.10.0.tar.gz", + "filename": "nh3-0.2.18-cp37-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", "repo": "rules_python_publish_deps_311", - "requirement": "pkginfo==1.10.0", - "sha256": "5df73835398d10db79f8eecd5cd86b1f6d29317589ea70796994d49399af6297", + "requirement": "nh3==0.2.18", + "sha256": "34c03fa78e328c691f982b7c03d4423bdfd7da69cd707fe572f544cf74ac23ad", "urls": [ - "https://files.pythonhosted.org/packages/2f/72/347ec5be4adc85c182ed2823d8d1c7b51e13b9a6b0c1aae59582eca652df/pkginfo-1.10.0.tar.gz" + "https://files.pythonhosted.org/packages/ab/a7/375afcc710dbe2d64cfbd69e31f82f3e423d43737258af01f6a56d844085/nh3-0.2.18-cp37-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl" ] } }, - "rules_python_publish_deps_311_backports_tarfile_py3_none_any_77e284d7": { + "rules_python_publish_deps_311_nh3_cp37_abi3_manylinux_2_17_s390x_19aaba96": { "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", "ruleClassName": "whl_library", "attributes": { @@ -2512,17 +2616,17 @@ "cp311_osx_x86_64", "cp311_windows_x86_64" ], - "filename": "backports.tarfile-1.2.0-py3-none-any.whl", + "filename": "nh3-0.2.18-cp37-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl", "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", "repo": "rules_python_publish_deps_311", - "requirement": "backports-tarfile==1.2.0", - "sha256": "77e284d754527b01fb1e6fa8a1afe577858ebe4e9dad8919e34c862cb399bc34", + "requirement": "nh3==0.2.18", + "sha256": "19aaba96e0f795bd0a6c56291495ff59364f4300d4a39b29a0abc9cb3774a84b", "urls": [ - "https://files.pythonhosted.org/packages/b9/fa/123043af240e49752f1c4bd24da5053b6bd00cad78c2be53c0d1e8b975bc/backports.tarfile-1.2.0-py3-none-any.whl" + "https://files.pythonhosted.org/packages/c2/a8/3bb02d0c60a03ad3a112b76c46971e9480efa98a8946677b5a59f60130ca/nh3-0.2.18-cp37-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl" ] } }, - "rules_python_publish_deps_311_markdown_it_py_sdist_e3f60a94": { + "rules_python_publish_deps_311_nh3_cp37_abi3_manylinux_2_17_x86_64_de3ceed6": { "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", "ruleClassName": "whl_library", "attributes": { @@ -2537,42 +2641,13 @@ "cp311_osx_x86_64", "cp311_windows_x86_64" ], - "extra_pip_args": [ - "--index-url", - "https://pypi.org/simple" - ], - "filename": "markdown-it-py-3.0.0.tar.gz", + "filename": "nh3-0.2.18-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", "repo": "rules_python_publish_deps_311", - "requirement": "markdown-it-py==3.0.0", - "sha256": "e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb", + "requirement": "nh3==0.2.18", + "sha256": "de3ceed6e661954871d6cd78b410213bdcb136f79aafe22aa7182e028b8c7307", "urls": [ - "https://files.pythonhosted.org/packages/38/71/3b932df36c1a044d397a1f92d1cf91ee0a503d91e470cbd670aa66b07ed0/markdown-it-py-3.0.0.tar.gz" - ] - } - }, - "rules_python_publish_deps_311_charset_normalizer_cp311_cp311_manylinux_2_17_ppc64le_ce031db0": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "charset-normalizer==3.4.0", - "sha256": "ce031db0408e487fd2775d745ce30a7cd2923667cf3b69d48d219f1d8f5ddeb6", - "urls": [ - "https://files.pythonhosted.org/packages/e2/29/d227805bff72ed6d6cb1ce08eec707f7cfbd9868044893617eb331f16295/charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl" + "https://files.pythonhosted.org/packages/1b/63/6ab90d0e5225ab9780f6c9fb52254fa36b52bb7c188df9201d05b647e5e1/nh3-0.2.18-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" ] } }, @@ -2601,7 +2676,7 @@ ] } }, - "rules_python_publish_deps_311_pkginfo_py3_none_any_889a6da2": { + "rules_python_publish_deps_311_nh3_cp37_abi3_musllinux_1_2_armv7l_3a157ab1": { "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", "ruleClassName": "whl_library", "attributes": { @@ -2616,17 +2691,17 @@ "cp311_osx_x86_64", "cp311_windows_x86_64" ], - "filename": "pkginfo-1.10.0-py3-none-any.whl", + "filename": "nh3-0.2.18-cp37-abi3-musllinux_1_2_armv7l.whl", "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", "repo": "rules_python_publish_deps_311", - "requirement": "pkginfo==1.10.0", - "sha256": "889a6da2ed7ffc58ab5b900d888ddce90bce912f2d2de1dc1c26f4cb9fe65097", + "requirement": "nh3==0.2.18", + "sha256": "3a157ab149e591bb638a55c8c6bcb8cdb559c8b12c13a8affaba6cedfe51713a", "urls": [ - "https://files.pythonhosted.org/packages/56/09/054aea9b7534a15ad38a363a2bd974c20646ab1582a387a95b8df1bfea1c/pkginfo-1.10.0-py3-none-any.whl" + "https://files.pythonhosted.org/packages/de/81/c291231463d21da5f8bba82c8167a6d6893cc5419b0639801ee5d3aeb8a9/nh3-0.2.18-cp37-abi3-musllinux_1_2_armv7l.whl" ] } }, - "rules_python_publish_deps_311_idna_py3_none_any_946d195a": { + "rules_python_publish_deps_311_nh3_cp37_abi3_musllinux_1_2_x86_64_36c95d4b": { "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", "ruleClassName": "whl_library", "attributes": { @@ -2641,13 +2716,38 @@ "cp311_osx_x86_64", "cp311_windows_x86_64" ], - "filename": "idna-3.10-py3-none-any.whl", + "filename": "nh3-0.2.18-cp37-abi3-musllinux_1_2_x86_64.whl", "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", "repo": "rules_python_publish_deps_311", - "requirement": "idna==3.10", - "sha256": "946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3", + "requirement": "nh3==0.2.18", + "sha256": "36c95d4b70530b320b365659bb5034341316e6a9b30f0b25fa9c9eff4c27a204", "urls": [ - "https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl" + "https://files.pythonhosted.org/packages/eb/61/73a007c74c37895fdf66e0edcd881f5eaa17a348ff02f4bb4bc906d61085/nh3-0.2.18-cp37-abi3-musllinux_1_2_x86_64.whl" + ] + } + }, + "rules_python_publish_deps_311_nh3_cp37_abi3_win_amd64_8ce0f819": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "nh3-0.2.18-cp37-abi3-win_amd64.whl", + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "nh3==0.2.18", + "sha256": "8ce0f819d2f1933953fca255db2471ad58184a60508f03e6285e5114b6254844", + "urls": [ + "https://files.pythonhosted.org/packages/26/8d/53c5b19c4999bdc6ba95f246f4ef35ca83d7d7423e5e38be43ad66544e5d/nh3-0.2.18-cp37-abi3-win_amd64.whl" ] } }, @@ -2680,7 +2780,32 @@ ] } }, - "rules_python_publish_deps_311_requests_sdist_55365417": { + "rules_python_publish_deps_311_pkginfo_py3_none_any_889a6da2": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "pkginfo-1.10.0-py3-none-any.whl", + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "pkginfo==1.10.0", + "sha256": "889a6da2ed7ffc58ab5b900d888ddce90bce912f2d2de1dc1c26f4cb9fe65097", + "urls": [ + "https://files.pythonhosted.org/packages/56/09/054aea9b7534a15ad38a363a2bd974c20646ab1582a387a95b8df1bfea1c/pkginfo-1.10.0-py3-none-any.whl" + ] + } + }, + "rules_python_publish_deps_311_pkginfo_sdist_5df73835": { "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", "ruleClassName": "whl_library", "attributes": { @@ -2699,17 +2824,17 @@ "--index-url", "https://pypi.org/simple" ], - "filename": "requests-2.32.3.tar.gz", + "filename": "pkginfo-1.10.0.tar.gz", "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", "repo": "rules_python_publish_deps_311", - "requirement": "requests==2.32.3", - "sha256": "55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760", + "requirement": "pkginfo==1.10.0", + "sha256": "5df73835398d10db79f8eecd5cd86b1f6d29317589ea70796994d49399af6297", "urls": [ - "https://files.pythonhosted.org/packages/63/70/2bf7780ad2d390a8d301ad0b550f1581eadbd9a20f896afe06353c2a2913/requests-2.32.3.tar.gz" + "https://files.pythonhosted.org/packages/2f/72/347ec5be4adc85c182ed2823d8d1c7b51e13b9a6b0c1aae59582eca652df/pkginfo-1.10.0.tar.gz" ] } }, - "rules_python_publish_deps_311_cryptography_cp39_abi3_manylinux_2_17_aarch64_846da004": { + "rules_python_publish_deps_311_pycparser_py3_none_any_c3702b6d": { "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", "ruleClassName": "whl_library", "attributes": { @@ -2721,13 +2846,13 @@ "cp311_linux_s390x", "cp311_linux_x86_64" ], - "filename": "cryptography-43.0.3-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", + "filename": "pycparser-2.22-py3-none-any.whl", "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", "repo": "rules_python_publish_deps_311", - "requirement": "cryptography==43.0.3", - "sha256": "846da004a5804145a5f441b8530b4bf35afbf7da70f82409f151695b127213d5", + "requirement": "pycparser==2.22", + "sha256": "c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc", "urls": [ - "https://files.pythonhosted.org/packages/2f/78/55356eb9075d0be6e81b59f45c7b48df87f76a20e73893872170471f3ee8/cryptography-43.0.3-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" + "https://files.pythonhosted.org/packages/13/a3/a812df4e2dd5696d1f351d58b8fe16a405b234ad2886a0dab9183fb78109/pycparser-2.22-py3-none-any.whl" ] } }, @@ -2757,31 +2882,6 @@ ] } }, - "rules_python_publish_deps_311_nh3_cp37_abi3_manylinux_2_17_x86_64_de3ceed6": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "nh3-0.2.18-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "nh3==0.2.18", - "sha256": "de3ceed6e661954871d6cd78b410213bdcb136f79aafe22aa7182e028b8c7307", - "urls": [ - "https://files.pythonhosted.org/packages/1b/63/6ab90d0e5225ab9780f6c9fb52254fa36b52bb7c188df9201d05b647e5e1/nh3-0.2.18-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" - ] - } - }, "rules_python_publish_deps_311_pygments_py3_none_any_b8e6aca0": { "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", "ruleClassName": "whl_library", @@ -2807,7 +2907,7 @@ ] } }, - "rules_python_publish_deps_311_importlib_metadata_sdist_71522656": { + "rules_python_publish_deps_311_pygments_sdist_786ff802": { "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", "ruleClassName": "whl_library", "attributes": { @@ -2826,17 +2926,57 @@ "--index-url", "https://pypi.org/simple" ], - "filename": "importlib_metadata-8.5.0.tar.gz", + "filename": "pygments-2.18.0.tar.gz", "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", "repo": "rules_python_publish_deps_311", - "requirement": "importlib-metadata==8.5.0", - "sha256": "71522656f0abace1d072b9e5481a48f07c138e00f079c38c8f883823f9c26bd7", + "requirement": "pygments==2.18.0", + "sha256": "786ff802f32e91311bff3889f6e9a86e81505fe99f2735bb6d60ae0c5004f199", "urls": [ - "https://files.pythonhosted.org/packages/cd/12/33e59336dca5be0c398a7482335911a33aa0e20776128f038019f1a95f1b/importlib_metadata-8.5.0.tar.gz" + "https://files.pythonhosted.org/packages/8e/62/8336eff65bcbc8e4cb5d05b55faf041285951b6e80f33e2bff2024788f31/pygments-2.18.0.tar.gz" ] } }, - "rules_python_publish_deps_311_nh3_cp37_abi3_musllinux_1_2_armv7l_3a157ab1": { + "rules_python_publish_deps_311_pywin32_ctypes_py3_none_any_8a151337": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_windows_x86_64" + ], + "filename": "pywin32_ctypes-0.2.3-py3-none-any.whl", + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "pywin32-ctypes==0.2.3", + "sha256": "8a1513379d709975552d202d942d9837758905c8d01eb82b8bcc30918929e7b8", + "urls": [ + "https://files.pythonhosted.org/packages/de/3d/8161f7711c017e01ac9f008dfddd9410dff3674334c233bde66e7ba65bbf/pywin32_ctypes-0.2.3-py3-none-any.whl" + ] + } + }, + "rules_python_publish_deps_311_pywin32_ctypes_sdist_d162dc04": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_windows_x86_64" + ], + "extra_pip_args": [ + "--index-url", + "https://pypi.org/simple" + ], + "filename": "pywin32-ctypes-0.2.3.tar.gz", + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "pywin32-ctypes==0.2.3", + "sha256": "d162dc04946d704503b2edc4d55f3dba5c1d539ead017afa00142c38b9885755", + "urls": [ + "https://files.pythonhosted.org/packages/85/9f/01a1a99704853cb63f253eea009390c88e7131c67e66a0a02099a8c917cb/pywin32-ctypes-0.2.3.tar.gz" + ] + } + }, + "rules_python_publish_deps_311_readme_renderer_py3_none_any_2fbca89b": { "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", "ruleClassName": "whl_library", "attributes": { @@ -2851,17 +2991,17 @@ "cp311_osx_x86_64", "cp311_windows_x86_64" ], - "filename": "nh3-0.2.18-cp37-abi3-musllinux_1_2_armv7l.whl", + "filename": "readme_renderer-44.0-py3-none-any.whl", "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", "repo": "rules_python_publish_deps_311", - "requirement": "nh3==0.2.18", - "sha256": "3a157ab149e591bb638a55c8c6bcb8cdb559c8b12c13a8affaba6cedfe51713a", + "requirement": "readme-renderer==44.0", + "sha256": "2fbca89b81a08526aadf1357a8c2ae889ec05fb03f5da67f9769c9a592166151", "urls": [ - "https://files.pythonhosted.org/packages/de/81/c291231463d21da5f8bba82c8167a6d6893cc5419b0639801ee5d3aeb8a9/nh3-0.2.18-cp37-abi3-musllinux_1_2_armv7l.whl" + "https://files.pythonhosted.org/packages/e1/67/921ec3024056483db83953ae8e48079ad62b92db7880013ca77632921dd0/readme_renderer-44.0-py3-none-any.whl" ] } }, - "rules_python_publish_deps_311_jaraco_context_py3_none_any_f797fc48": { + "rules_python_publish_deps_311_readme_renderer_sdist_8712034e": { "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", "ruleClassName": "whl_library", "attributes": { @@ -2876,17 +3016,21 @@ "cp311_osx_x86_64", "cp311_windows_x86_64" ], - "filename": "jaraco.context-6.0.1-py3-none-any.whl", + "extra_pip_args": [ + "--index-url", + "https://pypi.org/simple" + ], + "filename": "readme_renderer-44.0.tar.gz", "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", "repo": "rules_python_publish_deps_311", - "requirement": "jaraco-context==6.0.1", - "sha256": "f797fc481b490edb305122c9181830a3a5b76d84ef6d1aef2fb9b47ab956f9e4", + "requirement": "readme-renderer==44.0", + "sha256": "8712034eabbfa6805cacf1402b4eeb2a73028f72d1166d6f5cb7f9c047c5d1e1", "urls": [ - "https://files.pythonhosted.org/packages/ff/db/0c52c4cf5e4bd9f5d7135ec7669a3a767af21b3a308e1ed3674881e52b62/jaraco.context-6.0.1-py3-none-any.whl" + "https://files.pythonhosted.org/packages/5a/a9/104ec9234c8448c4379768221ea6df01260cd6c2ce13182d4eac531c8342/readme_renderer-44.0.tar.gz" ] } }, - "rules_python_publish_deps_311_more_itertools_py3_none_any_037b0d32": { + "rules_python_publish_deps_311_requests_py3_none_any_70761cfe": { "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", "ruleClassName": "whl_library", "attributes": { @@ -2901,17 +3045,17 @@ "cp311_osx_x86_64", "cp311_windows_x86_64" ], - "filename": "more_itertools-10.5.0-py3-none-any.whl", + "filename": "requests-2.32.3-py3-none-any.whl", "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", "repo": "rules_python_publish_deps_311", - "requirement": "more-itertools==10.5.0", - "sha256": "037b0d3203ce90cca8ab1defbbdac29d5f993fc20131f3664dc8d6acfa872aef", + "requirement": "requests==2.32.3", + "sha256": "70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6", "urls": [ - "https://files.pythonhosted.org/packages/48/7e/3a64597054a70f7c86eb0a7d4fc315b8c1ab932f64883a297bdffeb5f967/more_itertools-10.5.0-py3-none-any.whl" + "https://files.pythonhosted.org/packages/f9/9b/335f9764261e915ed497fcdeb11df5dfd6f7bf257d4a6a2a686d80da4d54/requests-2.32.3-py3-none-any.whl" ] } }, - "rules_python_publish_deps_311_charset_normalizer_cp311_cp311_musllinux_1_2_s390x_63bc5c4a": { + "rules_python_publish_deps_311_requests_sdist_55365417": { "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", "ruleClassName": "whl_library", "attributes": { @@ -2926,17 +3070,21 @@ "cp311_osx_x86_64", "cp311_windows_x86_64" ], - "filename": "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_s390x.whl", + "extra_pip_args": [ + "--index-url", + "https://pypi.org/simple" + ], + "filename": "requests-2.32.3.tar.gz", "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", "repo": "rules_python_publish_deps_311", - "requirement": "charset-normalizer==3.4.0", - "sha256": "63bc5c4ae26e4bc6be6469943b8253c0fd4e4186c43ad46e713ea61a0ba49129", + "requirement": "requests==2.32.3", + "sha256": "55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760", "urls": [ - "https://files.pythonhosted.org/packages/8d/c9/27e41d481557be53d51e60750b85aa40eaf52b841946b3cdeff363105737/charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_s390x.whl" + "https://files.pythonhosted.org/packages/63/70/2bf7780ad2d390a8d301ad0b550f1581eadbd9a20f896afe06353c2a2913/requests-2.32.3.tar.gz" ] } }, - "rules_python_publish_deps_311_nh3_cp37_abi3_manylinux_2_17_ppc64le_34c03fa7": { + "rules_python_publish_deps_311_requests_toolbelt_py2_none_any_cccfdd66": { "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", "ruleClassName": "whl_library", "attributes": { @@ -2951,13 +3099,121 @@ "cp311_osx_x86_64", "cp311_windows_x86_64" ], - "filename": "nh3-0.2.18-cp37-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", + "filename": "requests_toolbelt-1.0.0-py2.py3-none-any.whl", "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", "repo": "rules_python_publish_deps_311", - "requirement": "nh3==0.2.18", - "sha256": "34c03fa78e328c691f982b7c03d4423bdfd7da69cd707fe572f544cf74ac23ad", + "requirement": "requests-toolbelt==1.0.0", + "sha256": "cccfdd665f0a24fcf4726e690f65639d272bb0637b9b92dfd91a5568ccf6bd06", "urls": [ - "https://files.pythonhosted.org/packages/ab/a7/375afcc710dbe2d64cfbd69e31f82f3e423d43737258af01f6a56d844085/nh3-0.2.18-cp37-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl" + "https://files.pythonhosted.org/packages/3f/51/d4db610ef29373b879047326cbf6fa98b6c1969d6f6dc423279de2b1be2c/requests_toolbelt-1.0.0-py2.py3-none-any.whl" + ] + } + }, + "rules_python_publish_deps_311_requests_toolbelt_sdist_7681a0a3": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "extra_pip_args": [ + "--index-url", + "https://pypi.org/simple" + ], + "filename": "requests-toolbelt-1.0.0.tar.gz", + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "requests-toolbelt==1.0.0", + "sha256": "7681a0a3d047012b5bdc0ee37d7f8f07ebe76ab08caeccfc3921ce23c88d5bc6", + "urls": [ + "https://files.pythonhosted.org/packages/f3/61/d7545dafb7ac2230c70d38d31cbfe4cc64f7144dc41f6e4e4b78ecd9f5bb/requests-toolbelt-1.0.0.tar.gz" + ] + } + }, + "rules_python_publish_deps_311_rfc3986_py2_none_any_50b1502b": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "rfc3986-2.0.0-py2.py3-none-any.whl", + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "rfc3986==2.0.0", + "sha256": "50b1502b60e289cb37883f3dfd34532b8873c7de9f49bb546641ce9cbd256ebd", + "urls": [ + "https://files.pythonhosted.org/packages/ff/9a/9afaade874b2fa6c752c36f1548f718b5b83af81ed9b76628329dab81c1b/rfc3986-2.0.0-py2.py3-none-any.whl" + ] + } + }, + "rules_python_publish_deps_311_rfc3986_sdist_97aacf9d": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "extra_pip_args": [ + "--index-url", + "https://pypi.org/simple" + ], + "filename": "rfc3986-2.0.0.tar.gz", + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "rfc3986==2.0.0", + "sha256": "97aacf9dbd4bfd829baad6e6309fa6573aaf1be3f6fa735c8ab05e46cecb261c", + "urls": [ + "https://files.pythonhosted.org/packages/85/40/1520d68bfa07ab5a6f065a186815fb6610c86fe957bc065754e47f7b0840/rfc3986-2.0.0.tar.gz" + ] + } + }, + "rules_python_publish_deps_311_rich_py3_none_any_9836f509": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "rich-13.9.3-py3-none-any.whl", + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "rich==13.9.3", + "sha256": "9836f5096eb2172c9e77df411c1b009bace4193d6a481d534fea75ebba758283", + "urls": [ + "https://files.pythonhosted.org/packages/9a/e2/10e9819cf4a20bd8ea2f5dabafc2e6bf4a78d6a0965daeb60a4b34d1c11f/rich-13.9.3-py3-none-any.whl" ] } }, @@ -2990,32 +3246,7 @@ ] } }, - "rules_python_publish_deps_311_requests_toolbelt_py2_none_any_cccfdd66": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "requests_toolbelt-1.0.0-py2.py3-none-any.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "requests-toolbelt==1.0.0", - "sha256": "cccfdd665f0a24fcf4726e690f65639d272bb0637b9b92dfd91a5568ccf6bd06", - "urls": [ - "https://files.pythonhosted.org/packages/3f/51/d4db610ef29373b879047326cbf6fa98b6c1969d6f6dc423279de2b1be2c/requests_toolbelt-1.0.0-py2.py3-none-any.whl" - ] - } - }, - "rules_python_publish_deps_311_cffi_cp311_cp311_manylinux_2_17_x86_64_610faea7": { + "rules_python_publish_deps_311_secretstorage_py3_none_any_f356e662": { "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", "ruleClassName": "whl_library", "attributes": { @@ -3027,129 +3258,17 @@ "cp311_linux_s390x", "cp311_linux_x86_64" ], - "filename": "cffi-1.17.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", + "filename": "SecretStorage-3.3.3-py3-none-any.whl", "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", "repo": "rules_python_publish_deps_311", - "requirement": "cffi==1.17.1", - "sha256": "610faea79c43e44c71e1ec53a554553fa22321b65fae24889706c0a84d4ad86d", + "requirement": "secretstorage==3.3.3", + "sha256": "f356e6628222568e3af06f2eba8df495efa13b3b63081dafd4f7d9a7b7bc9f99", "urls": [ - "https://files.pythonhosted.org/packages/ff/6b/d45873c5e0242196f042d555526f92aa9e0c32355a1be1ff8c27f077fd37/cffi-1.17.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" + "https://files.pythonhosted.org/packages/54/24/b4293291fa1dd830f353d2cb163295742fa87f179fcc8a20a306a81978b7/SecretStorage-3.3.3-py3-none-any.whl" ] } }, - "rules_python_publish_deps_311_cffi_cp311_cp311_musllinux_1_1_x86_64_fc48c783": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64" - ], - "filename": "cffi-1.17.1-cp311-cp311-musllinux_1_1_x86_64.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "cffi==1.17.1", - "sha256": "fc48c783f9c87e60831201f2cce7f3b2e4846bf4d8728eabe54d60700b318a0b", - "urls": [ - "https://files.pythonhosted.org/packages/f8/4a/34599cac7dfcd888ff54e801afe06a19c17787dfd94495ab0c8d35fe99fb/cffi-1.17.1-cp311-cp311-musllinux_1_1_x86_64.whl" - ] - } - }, - "rules_python_publish_deps_311_cryptography_cp39_abi3_manylinux_2_28_aarch64_f7b178f1": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64" - ], - "filename": "cryptography-43.0.3-cp39-abi3-manylinux_2_28_aarch64.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "cryptography==43.0.3", - "sha256": "f7b178f11ed3664fd0e995a47ed2b5ff0a12d893e41dd0494f406d1cf555cab7", - "urls": [ - "https://files.pythonhosted.org/packages/7c/04/2345ca92f7a22f601a9c62961741ef7dd0127c39f7310dffa0041c80f16f/cryptography-43.0.3-cp39-abi3-manylinux_2_28_aarch64.whl" - ] - } - }, - "rules_python_publish_deps_311_docutils_py3_none_any_dafca5b9": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "docutils-0.21.2-py3-none-any.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "docutils==0.21.2", - "sha256": "dafca5b9e384f0e419294eb4d2ff9fa826435bf15f15b7bd45723e8ad76811b2", - "urls": [ - "https://files.pythonhosted.org/packages/8f/d7/9322c609343d929e75e7e5e6255e614fcc67572cfd083959cdef3b7aad79/docutils-0.21.2-py3-none-any.whl" - ] - } - }, - "rules_python_publish_deps_311_pywin32_ctypes_py3_none_any_8a151337": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_windows_x86_64" - ], - "filename": "pywin32_ctypes-0.2.3-py3-none-any.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "pywin32-ctypes==0.2.3", - "sha256": "8a1513379d709975552d202d942d9837758905c8d01eb82b8bcc30918929e7b8", - "urls": [ - "https://files.pythonhosted.org/packages/de/3d/8161f7711c017e01ac9f008dfddd9410dff3674334c233bde66e7ba65bbf/pywin32_ctypes-0.2.3-py3-none-any.whl" - ] - } - }, - "rules_python_publish_deps_311_nh3_cp37_abi3_musllinux_1_2_x86_64_36c95d4b": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "nh3-0.2.18-cp37-abi3-musllinux_1_2_x86_64.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "nh3==0.2.18", - "sha256": "36c95d4b70530b320b365659bb5034341316e6a9b30f0b25fa9c9eff4c27a204", - "urls": [ - "https://files.pythonhosted.org/packages/eb/61/73a007c74c37895fdf66e0edcd881f5eaa17a348ff02f4bb4bc906d61085/nh3-0.2.18-cp37-abi3-musllinux_1_2_x86_64.whl" - ] - } - }, - "rules_python_publish_deps_311_jeepney_sdist_5efe48d2": { + "rules_python_publish_deps_311_secretstorage_sdist_2403533e": { "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", "ruleClassName": "whl_library", "attributes": { @@ -3165,39 +3284,17 @@ "--index-url", "https://pypi.org/simple" ], - "filename": "jeepney-0.8.0.tar.gz", + "filename": "SecretStorage-3.3.3.tar.gz", "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", "repo": "rules_python_publish_deps_311", - "requirement": "jeepney==0.8.0", - "sha256": "5efe48d255973902f6badc3ce55e2aa6c5c3b3bc642059ef3a91247bcfcc5806", + "requirement": "secretstorage==3.3.3", + "sha256": "2403533ef369eca6d2ba81718576c5e0f564d5cca1b58f73a8b23e7d4eeebd77", "urls": [ - "https://files.pythonhosted.org/packages/d6/f4/154cf374c2daf2020e05c3c6a03c91348d59b23c5366e968feb198306fdf/jeepney-0.8.0.tar.gz" + "https://files.pythonhosted.org/packages/53/a4/f48c9d79cb507ed1373477dbceaba7401fd8a23af63b837fa61f1dcd3691/SecretStorage-3.3.3.tar.gz" ] } }, - "rules_python_publish_deps_311_cryptography_cp39_abi3_manylinux_2_28_x86_64_c2e6fc39": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64" - ], - "filename": "cryptography-43.0.3-cp39-abi3-manylinux_2_28_x86_64.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "cryptography==43.0.3", - "sha256": "c2e6fc39c4ab499049df3bdf567f768a723a5e8464816e8f009f121a5a9f4405", - "urls": [ - "https://files.pythonhosted.org/packages/ac/25/e715fa0bc24ac2114ed69da33adf451a38abb6f3f24ec207908112e9ba53/cryptography-43.0.3-cp39-abi3-manylinux_2_28_x86_64.whl" - ] - } - }, - "rules_python_publish_deps_311_rfc3986_py2_none_any_50b1502b": { + "rules_python_publish_deps_311_twine_py3_none_any_215dbe7b": { "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", "ruleClassName": "whl_library", "attributes": { @@ -3212,13 +3309,121 @@ "cp311_osx_x86_64", "cp311_windows_x86_64" ], - "filename": "rfc3986-2.0.0-py2.py3-none-any.whl", + "filename": "twine-5.1.1-py3-none-any.whl", "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", "repo": "rules_python_publish_deps_311", - "requirement": "rfc3986==2.0.0", - "sha256": "50b1502b60e289cb37883f3dfd34532b8873c7de9f49bb546641ce9cbd256ebd", + "requirement": "twine==5.1.1", + "sha256": "215dbe7b4b94c2c50a7315c0275d2258399280fbb7d04182c7e55e24b5f93997", "urls": [ - "https://files.pythonhosted.org/packages/ff/9a/9afaade874b2fa6c752c36f1548f718b5b83af81ed9b76628329dab81c1b/rfc3986-2.0.0-py2.py3-none-any.whl" + "https://files.pythonhosted.org/packages/5d/ec/00f9d5fd040ae29867355e559a94e9a8429225a0284a3f5f091a3878bfc0/twine-5.1.1-py3-none-any.whl" + ] + } + }, + "rules_python_publish_deps_311_twine_sdist_9aa08251": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "extra_pip_args": [ + "--index-url", + "https://pypi.org/simple" + ], + "filename": "twine-5.1.1.tar.gz", + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "twine==5.1.1", + "sha256": "9aa0825139c02b3434d913545c7b847a21c835e11597f5255842d457da2322db", + "urls": [ + "https://files.pythonhosted.org/packages/77/68/bd982e5e949ef8334e6f7dcf76ae40922a8750aa2e347291ae1477a4782b/twine-5.1.1.tar.gz" + ] + } + }, + "rules_python_publish_deps_311_urllib3_py3_none_any_ca899ca0": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "urllib3-2.2.3-py3-none-any.whl", + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "urllib3==2.2.3", + "sha256": "ca899ca043dcb1bafa3e262d73aa25c465bfb49e0bd9dd5d59f1d0acba2f8fac", + "urls": [ + "https://files.pythonhosted.org/packages/ce/d9/5f4c13cecde62396b0d3fe530a50ccea91e7dfc1ccf0e09c228841bb5ba8/urllib3-2.2.3-py3-none-any.whl" + ] + } + }, + "rules_python_publish_deps_311_urllib3_sdist_e7d814a8": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "extra_pip_args": [ + "--index-url", + "https://pypi.org/simple" + ], + "filename": "urllib3-2.2.3.tar.gz", + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "urllib3==2.2.3", + "sha256": "e7d814a81dad81e6caf2ec9fdedb284ecc9c73076b62654547cc64ccdcae26e9", + "urls": [ + "https://files.pythonhosted.org/packages/ed/63/22ba4ebfe7430b76388e7cd448d5478814d3032121827c12a2cc287e2260/urllib3-2.2.3.tar.gz" + ] + } + }, + "rules_python_publish_deps_311_zipp_py3_none_any_a817ac80": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_python_publish_deps//{name}:{target}", + "experimental_target_platforms": [ + "cp311_linux_aarch64", + "cp311_linux_arm", + "cp311_linux_ppc", + "cp311_linux_s390x", + "cp311_linux_x86_64", + "cp311_osx_aarch64", + "cp311_osx_x86_64", + "cp311_windows_x86_64" + ], + "filename": "zipp-3.20.2-py3-none-any.whl", + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "rules_python_publish_deps_311", + "requirement": "zipp==3.20.2", + "sha256": "a817ac80d6cf4b23bf7f2828b7cabf326f15a001bea8b1f9b49631780ba28350", + "urls": [ + "https://files.pythonhosted.org/packages/62/8b/5ba542fa83c90e09eac972fc9baca7a88e7e7ca4b221a89251954019308b/zipp-3.20.2-py3-none-any.whl" ] } }, @@ -3317,211 +3522,6 @@ ], "groups": {} } - }, - "rules_python_publish_deps_311_charset_normalizer_cp311_cp311_macosx_10_9_universal2_0d99dd8f": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "charset_normalizer-3.4.0-cp311-cp311-macosx_10_9_universal2.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "charset-normalizer==3.4.0", - "sha256": "0d99dd8ff461990f12d6e42c7347fd9ab2532fb70e9621ba520f9e8637161d7c", - "urls": [ - "https://files.pythonhosted.org/packages/9c/61/73589dcc7a719582bf56aae309b6103d2762b526bffe189d635a7fcfd998/charset_normalizer-3.4.0-cp311-cp311-macosx_10_9_universal2.whl" - ] - } - }, - "rules_python_publish_deps_311_jaraco_classes_py3_none_any_f662826b": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "jaraco.classes-3.4.0-py3-none-any.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "jaraco-classes==3.4.0", - "sha256": "f662826b6bed8cace05e7ff873ce0f9283b5c924470fe664fff1c2f00f581790", - "urls": [ - "https://files.pythonhosted.org/packages/7f/66/b15ce62552d84bbfcec9a4873ab79d993a1dd4edb922cbfccae192bd5b5f/jaraco.classes-3.4.0-py3-none-any.whl" - ] - } - }, - "rules_python_publish_deps_311_jaraco_context_sdist_9bae4ea5": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "extra_pip_args": [ - "--index-url", - "https://pypi.org/simple" - ], - "filename": "jaraco_context-6.0.1.tar.gz", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "jaraco-context==6.0.1", - "sha256": "9bae4ea555cf0b14938dc0aee7c9f32ed303aa20a3b73e7dc80111628792d1b3", - "urls": [ - "https://files.pythonhosted.org/packages/df/ad/f3777b81bf0b6e7bc7514a1656d3e637b2e8e15fab2ce3235730b3e7a4e6/jaraco_context-6.0.1.tar.gz" - ] - } - }, - "rules_python_publish_deps_311_requests_py3_none_any_70761cfe": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "requests-2.32.3-py3-none-any.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "requests==2.32.3", - "sha256": "70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6", - "urls": [ - "https://files.pythonhosted.org/packages/f9/9b/335f9764261e915ed497fcdeb11df5dfd6f7bf257d4a6a2a686d80da4d54/requests-2.32.3-py3-none-any.whl" - ] - } - }, - "rules_python_publish_deps_311_readme_renderer_sdist_8712034e": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "extra_pip_args": [ - "--index-url", - "https://pypi.org/simple" - ], - "filename": "readme_renderer-44.0.tar.gz", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "readme-renderer==44.0", - "sha256": "8712034eabbfa6805cacf1402b4eeb2a73028f72d1166d6f5cb7f9c047c5d1e1", - "urls": [ - "https://files.pythonhosted.org/packages/5a/a9/104ec9234c8448c4379768221ea6df01260cd6c2ce13182d4eac531c8342/readme_renderer-44.0.tar.gz" - ] - } - }, - "rules_python_publish_deps_311_cffi_cp311_cp311_manylinux_2_17_aarch64_a1ed2dd2": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64" - ], - "filename": "cffi-1.17.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "cffi==1.17.1", - "sha256": "a1ed2dd2972641495a3ec98445e09766f077aee98a1c896dcb4ad0d303628e41", - "urls": [ - "https://files.pythonhosted.org/packages/2e/ea/70ce63780f096e16ce8588efe039d3c4f91deb1dc01e9c73a287939c79a6/cffi-1.17.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" - ] - } - }, - "rules_python_publish_deps_311_charset_normalizer_cp311_cp311_manylinux_2_17_s390x_8ff4e7cd": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "charset-normalizer==3.4.0", - "sha256": "8ff4e7cdfdb1ab5698e675ca622e72d58a6fa2a8aa58195de0c0061288e6e3ea", - "urls": [ - "https://files.pythonhosted.org/packages/13/bc/87c2c9f2c144bedfa62f894c3007cd4530ba4b5351acb10dc786428a50f0/charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl" - ] - } - }, - "rules_python_publish_deps_311_jaraco_functools_py3_none_any_ad159f13": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "jaraco.functools-4.1.0-py3-none-any.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "jaraco-functools==4.1.0", - "sha256": "ad159f13428bc4acbf5541ad6dec511f91573b90fba04df61dafa2a1231cf649", - "urls": [ - "https://files.pythonhosted.org/packages/9f/4f/24b319316142c44283d7540e76c7b5a6dbd5db623abd86bb7b3491c21018/jaraco.functools-4.1.0-py3-none-any.whl" - ] - } } }, "recordedRepoMappingEntries": [ diff --git a/bazel/release/artifacts/BUILD.bazel b/bazel/release/artifacts/BUILD.bazel index bba7fb0c8..8861d6dfe 100644 --- a/bazel/release/artifacts/BUILD.bazel +++ b/bazel/release/artifacts/BUILD.bazel @@ -70,5 +70,5 @@ go_test( env = platform_container_sums_paths | platform_clis_paths, # keep x_defs = {"runsUnder": "bazel"}, - deps = ["@io_bazel_rules_go//go/runfiles:go_default_library"], + deps = ["@io_bazel_rules_go//go/runfiles"], ) diff --git a/csi/test/BUILD.bazel b/csi/test/BUILD.bazel index 5a27fdf89..c2c5b1071 100644 --- a/csi/test/BUILD.bazel +++ b/csi/test/BUILD.bazel @@ -42,14 +42,14 @@ go_test( "//csi/cryptmapper", "@com_github_stretchr_testify//assert", "@com_github_stretchr_testify//require", - "@io_bazel_rules_go//go/runfiles:go_default_library", + "@io_bazel_rules_go//go/runfiles", "@org_uber_go_goleak//:goleak", ], "@io_bazel_rules_go//go/platform:linux": [ "//csi/cryptmapper", "@com_github_stretchr_testify//assert", "@com_github_stretchr_testify//require", - "@io_bazel_rules_go//go/runfiles:go_default_library", + "@io_bazel_rules_go//go/runfiles", "@org_uber_go_goleak//:goleak", ], "//conditions:default": [], diff --git a/disk-mapper/internal/test/BUILD.bazel b/disk-mapper/internal/test/BUILD.bazel index 8d39f1a03..38e3ac89c 100644 --- a/disk-mapper/internal/test/BUILD.bazel +++ b/disk-mapper/internal/test/BUILD.bazel @@ -29,7 +29,7 @@ go_test( "@com_github_martinjungblut_go_cryptsetup//:go-cryptsetup", "@com_github_stretchr_testify//assert", "@com_github_stretchr_testify//require", - "@io_bazel_rules_go//go/runfiles:go_default_library", + "@io_bazel_rules_go//go/runfiles", "@org_uber_go_goleak//:goleak", ], "@io_bazel_rules_go//go/platform:linux": [ @@ -39,7 +39,7 @@ go_test( "@com_github_martinjungblut_go_cryptsetup//:go-cryptsetup", "@com_github_stretchr_testify//assert", "@com_github_stretchr_testify//require", - "@io_bazel_rules_go//go/runfiles:go_default_library", + "@io_bazel_rules_go//go/runfiles", "@org_uber_go_goleak//:goleak", ], "//conditions:default": [], diff --git a/e2e/internal/upgrade/BUILD.bazel b/e2e/internal/upgrade/BUILD.bazel index 8acfc7e94..b97119e5f 100644 --- a/e2e/internal/upgrade/BUILD.bazel +++ b/e2e/internal/upgrade/BUILD.bazel @@ -20,7 +20,7 @@ go_library( "//internal/versions", "@com_github_spf13_afero//:afero", "@com_github_stretchr_testify//require", - "@io_bazel_rules_go//go/runfiles:go_default_library", + "@io_bazel_rules_go//go/runfiles", "@io_k8s_apimachinery//pkg/apis/meta/v1:meta", "@io_k8s_client_go//kubernetes", "@sh_helm_helm_v3//pkg/action", diff --git a/terraform-provider-constellation/internal/provider/BUILD.bazel b/terraform-provider-constellation/internal/provider/BUILD.bazel index 8f6f573d1..e60064603 100644 --- a/terraform-provider-constellation/internal/provider/BUILD.bazel +++ b/terraform-provider-constellation/internal/provider/BUILD.bazel @@ -110,6 +110,6 @@ go_test( "@com_github_hashicorp_terraform_plugin_testing//terraform", "@com_github_stretchr_testify//assert", "@com_github_stretchr_testify//require", - "@io_bazel_rules_go//go/runfiles:go_default_library", + "@io_bazel_rules_go//go/runfiles", ], ) From 23354f23a5714efc616a08816a255def2268711b Mon Sep 17 00:00:00 2001 From: Moritz Sanft <58110325+msanft@users.noreply.github.com> Date: Tue, 10 Dec 2024 07:13:54 +0100 Subject: [PATCH 012/311] flake: update to Bazel 7.4.1 (#3534) --- flake.lock | 35 +++++++++-------------------------- flake.nix | 22 ++-------------------- 2 files changed, 11 insertions(+), 46 deletions(-) diff --git a/flake.lock b/flake.lock index a633bfa33..400acf062 100644 --- a/flake.lock +++ b/flake.lock @@ -5,11 +5,11 @@ "systems": "systems" }, "locked": { - "lastModified": 1710146030, - "narHash": "sha256-SZ5L6eA7HJ/nmkzGG7/ISclqe6oZdOZTNoesiInkXPQ=", + "lastModified": 1731533236, + "narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=", "owner": "numtide", "repo": "flake-utils", - "rev": "b1d9ab70662946ef0850d488da1c9019f3a9752a", + "rev": "11707dc2f618dd54ca8739b309ec4fc024de578b", "type": "github" }, "original": { @@ -18,29 +18,13 @@ "type": "github" } }, - "nixpkgsBazel": { - "locked": { - "lastModified": 1717414489, - "narHash": "sha256-fhvJv8hkJwotkqxhoSQfvh6UfKG+sTYIQ3hchariEDk=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "c429fa2ffa21229eeadbe37c11a47aff35f53ce0", - "type": "github" - }, - "original": { - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "c429fa2ffa21229eeadbe37c11a47aff35f53ce0", - "type": "github" - } - }, "nixpkgsUnstable": { "locked": { - "lastModified": 1725816686, - "narHash": "sha256-0Kq2MkQ/sQX1rhWJ/ySBBQlBJBUK8mPMDcuDhhdBkSU=", + "lastModified": 1733376361, + "narHash": "sha256-aLJxoTDDSqB+/3orsulE6/qdlX6MzDLIITLZqdgMpqo=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "add0443ee587a0c44f22793b8c8649a0dbc3bb00", + "rev": "929116e316068c7318c54eb4d827f7d9756d5e9c", "type": "github" }, "original": { @@ -53,7 +37,6 @@ "root": { "inputs": { "flake-utils": "flake-utils", - "nixpkgsBazel": "nixpkgsBazel", "nixpkgsUnstable": "nixpkgsUnstable", "uplosi": "uplosi" } @@ -83,11 +66,11 @@ ] }, "locked": { - "lastModified": 1725522308, - "narHash": "sha256-AtsFZ92WkVkH8fd0Xa0D6/PR84/dtOH6gpM4mtn32Hk=", + "lastModified": 1733317519, + "narHash": "sha256-Q/qCh655Cga1nKs4qMF+2JYLxy+mLvFofKxukoREZ3Q=", "owner": "edgelesssys", "repo": "uplosi", - "rev": "c8a482de299b5442f558d7381f0cbf898e0de0e1", + "rev": "137f7b6557087fc198e919b2ef8c167ecbe94f91", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index ddd1521c7..e972da05b 100644 --- a/flake.nix +++ b/flake.nix @@ -5,11 +5,6 @@ nixpkgsUnstable = { url = "github:NixOS/nixpkgs/nixpkgs-unstable"; }; - # TODO(msanft): Remove once https://github.com/NixOS/nixpkgs/commit/c429fa2ffa21229eeadbe37c11a47aff35f53ce0 - # lands in nixpkgs-unstable. - nixpkgsBazel = { - url = "github:NixOS/nixpkgs/c429fa2ffa21229eeadbe37c11a47aff35f53ce0"; - }; flake-utils = { url = "github:numtide/flake-utils"; }; @@ -24,7 +19,6 @@ { self, nixpkgsUnstable, - nixpkgsBazel, flake-utils, uplosi, }: @@ -33,12 +27,10 @@ let pkgsUnstable = import nixpkgsUnstable { inherit system; }; - bazelPkgsUnstable = import nixpkgsBazel { inherit system; }; - callPackage = pkgsUnstable.callPackage; mkosiDev = ( - pkgsUnstable.mkosi.overrideAttrs (oldAttrs: rec { + pkgsUnstable.mkosi.overrideAttrs (oldAttrs: { propagatedBuildInputs = oldAttrs.propagatedBuildInputs ++ (with pkgsUnstable; [ @@ -66,14 +58,6 @@ ); uplosiDev = uplosi.outputs.packages."${system}".uplosi; - - openssl-static = pkgsUnstable.openssl.override { static = true; }; - - bazel_7 = bazelPkgsUnstable.callPackage ./nix/packages/bazel.nix { - pkgs = bazelPkgsUnstable; - nixpkgs = nixpkgsBazel; - }; - in { packages.mkosi = mkosiDev; @@ -104,13 +88,11 @@ packages.awscli2 = pkgsUnstable.awscli2; - packages.bazel_7 = bazel_7; - packages.createrepo_c = pkgsUnstable.createrepo_c; packages.dnf5 = pkgsUnstable.dnf5; - devShells.default = callPackage ./nix/shells/default.nix { inherit bazel_7; }; + devShells.default = callPackage ./nix/shells/default.nix { }; formatter = nixpkgsUnstable.legacyPackages.${system}.nixpkgs-fmt; } From 59b9d54c441df315045bcc1e52b337bc5bffad90 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 10 Dec 2024 08:27:31 +0100 Subject: [PATCH 013/311] deps: update github/codeql-action action to v3.27.6 (#3535) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/codeql.yml | 4 ++-- .github/workflows/scorecard.yml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index 5ffd4cd78..4b30b1f15 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -44,7 +44,7 @@ jobs: cache: false - name: Initialize CodeQL - uses: github/codeql-action/init@f09c1c0a94de965c15400f5634aa42fac8fb8f88 # v3.27.5 + uses: github/codeql-action/init@aa578102511db1f4524ed59b8cc2bae4f6e88195 # v3.27.6 with: languages: ${{ matrix.language }} @@ -63,6 +63,6 @@ jobs: echo "::endgroup::" - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@f09c1c0a94de965c15400f5634aa42fac8fb8f88 # v3.27.5 + uses: github/codeql-action/analyze@aa578102511db1f4524ed59b8cc2bae4f6e88195 # v3.27.6 with: category: "/language:${{ matrix.language }}" diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml index f5c996507..1bd5dbb2b 100644 --- a/.github/workflows/scorecard.yml +++ b/.github/workflows/scorecard.yml @@ -37,6 +37,6 @@ jobs: retention-days: 5 - name: Upload to code-scanning - uses: github/codeql-action/upload-sarif@f09c1c0a94de965c15400f5634aa42fac8fb8f88 # v3.27.5 + uses: github/codeql-action/upload-sarif@aa578102511db1f4524ed59b8cc2bae4f6e88195 # v3.27.6 with: sarif_file: results.sarif From 64b395dba81f0edfb176d01fe5601e726cafd81b Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 10 Dec 2024 09:26:05 +0100 Subject: [PATCH 014/311] deps: update dependency DeterminateSystems/nix-installer to v0.32.1 (#3536) * deps: update dependency DeterminateSystems/nix-installer to v0.32.1 * ci: run reproducible builds workflow on changes --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Markus Rudy --- .github/workflows/reproducible-builds.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/workflows/reproducible-builds.yml b/.github/workflows/reproducible-builds.yml index d0faa32b7..27b5c2f2f 100644 --- a/.github/workflows/reproducible-builds.yml +++ b/.github/workflows/reproducible-builds.yml @@ -13,6 +13,9 @@ on: workflow_dispatch: schedule: - cron: "45 06 * * 1" # Every Monday at 6:45am + pull_request: + paths: + - .github/workflows/reproducible-builds.yml jobs: build-binaries: @@ -54,7 +57,7 @@ jobs: chmod a+x "$HOME/.local/bin/bazel" echo "$HOME/.local/bin" >> "$GITHUB_PATH" - curl -fsSL -o "$HOME/.local/bin/nix-installer" https://github.com/DeterminateSystems/nix-installer/releases/download/v0.26.3/nix-installer-x86_64-linux # renovate:github-release + curl -fsSL -o "$HOME/.local/bin/nix-installer" https://github.com/DeterminateSystems/nix-installer/releases/download/v0.32.1/nix-installer-x86_64-linux # renovate:github-release chmod a+x "$HOME/.local/bin/nix-installer" "$HOME/.local/bin/nix-installer" install --no-confirm From 2596d7c1c295d4296fc0f425f1b334f87ad38db3 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 10 Dec 2024 11:49:03 +0100 Subject: [PATCH 015/311] deps: update dependency kubernetes-sigs/cri-tools to v1.32.0 (#3537) * deps: update dependency kubernetes-sigs/cri-tools to v1.32.0 * deps: tidy all modules --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: edgelessci --- internal/versions/versions.go | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/internal/versions/versions.go b/internal/versions/versions.go index aadeae874..71f7fe9c5 100644 --- a/internal/versions/versions.go +++ b/internal/versions/versions.go @@ -207,8 +207,8 @@ var VersionConfigs = map[ValidK8sVersion]KubernetesVersion{ Extract: true, }, { - Url: "https://github.com/kubernetes-sigs/cri-tools/releases/download/v1.31.1/crictl-v1.31.1-linux-amd64.tar.gz", // renovate:crictl-release - Hash: "sha256:0a03ba6b1e4c253d63627f8d210b2ea07675a8712587e697657b236d06d7d231", + Url: "https://github.com/kubernetes-sigs/cri-tools/releases/download/v1.32.0/crictl-v1.32.0-linux-amd64.tar.gz", // renovate:crictl-release + Hash: "sha256:f050b71d3a73a91a4e0990b90143ed04dcd100cc66f953736fcb6a2730e283c4", InstallPath: constants.BinDir, Extract: true, }, @@ -274,8 +274,8 @@ var VersionConfigs = map[ValidK8sVersion]KubernetesVersion{ Extract: true, }, { - Url: "https://github.com/kubernetes-sigs/cri-tools/releases/download/v1.31.1/crictl-v1.31.1-linux-amd64.tar.gz", // renovate:crictl-release - Hash: "sha256:0a03ba6b1e4c253d63627f8d210b2ea07675a8712587e697657b236d06d7d231", + Url: "https://github.com/kubernetes-sigs/cri-tools/releases/download/v1.32.0/crictl-v1.32.0-linux-amd64.tar.gz", // renovate:crictl-release + Hash: "sha256:f050b71d3a73a91a4e0990b90143ed04dcd100cc66f953736fcb6a2730e283c4", InstallPath: constants.BinDir, Extract: true, }, @@ -341,8 +341,8 @@ var VersionConfigs = map[ValidK8sVersion]KubernetesVersion{ Extract: true, }, { - Url: "https://github.com/kubernetes-sigs/cri-tools/releases/download/v1.31.1/crictl-v1.31.1-linux-amd64.tar.gz", // renovate:crictl-release - Hash: "sha256:0a03ba6b1e4c253d63627f8d210b2ea07675a8712587e697657b236d06d7d231", + Url: "https://github.com/kubernetes-sigs/cri-tools/releases/download/v1.32.0/crictl-v1.32.0-linux-amd64.tar.gz", // renovate:crictl-release + Hash: "sha256:f050b71d3a73a91a4e0990b90143ed04dcd100cc66f953736fcb6a2730e283c4", InstallPath: constants.BinDir, Extract: true, }, From eb08fe1025ae05b99422f26b2258ddcd379a9501 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 10 Dec 2024 11:54:05 +0100 Subject: [PATCH 016/311] deps: update bufbuild/buf to v1.47.2 (#3532) * deps: update bufbuild/buf to v1.47.2 * deps: tidy all modules --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: edgelessci --- bazel/toolchains/ci_deps.bzl | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/bazel/toolchains/ci_deps.bzl b/bazel/toolchains/ci_deps.bzl index 2215f85a8..001d7518f 100644 --- a/bazel/toolchains/ci_deps.bzl +++ b/bazel/toolchains/ci_deps.bzl @@ -270,44 +270,44 @@ def _buf_deps(): strip_prefix = "buf/bin", build_file_content = """exports_files(["buf"], visibility = ["//visibility:public"])""", urls = [ - "https://cdn.confidential.cloud/constellation/cas/sha256/deebd48a6bf85b073d7c7800c17b330376487e86852d4905c76a205b6fd795d4", - "https://github.com/bufbuild/buf/releases/download/v1.45.0/buf-Linux-x86_64.tar.gz", + "https://cdn.confidential.cloud/constellation/cas/sha256/39716cfe0185df3cba21f66ec739620ffb6876c48b2da4338a8c68c290c9b116", + "https://github.com/bufbuild/buf/releases/download/v1.47.2/buf-Linux-x86_64.tar.gz", ], type = "tar.gz", - sha256 = "deebd48a6bf85b073d7c7800c17b330376487e86852d4905c76a205b6fd795d4", + sha256 = "39716cfe0185df3cba21f66ec739620ffb6876c48b2da4338a8c68c290c9b116", ) http_archive( name = "com_github_bufbuild_buf_linux_arm64", strip_prefix = "buf/bin", build_file_content = """exports_files(["buf"], visibility = ["//visibility:public"])""", urls = [ - "https://cdn.confidential.cloud/constellation/cas/sha256/2d3ebfed036881d0615e5b24288cf788791b45848f26e915e3efe7ee9c10735d", - "https://github.com/bufbuild/buf/releases/download/v1.45.0/buf-Linux-aarch64.tar.gz", + "https://cdn.confidential.cloud/constellation/cas/sha256/e7188833039d4e7736de517eba6141b9306f4b60b00974392dac7ce38627321e", + "https://github.com/bufbuild/buf/releases/download/v1.47.2/buf-Linux-aarch64.tar.gz", ], type = "tar.gz", - sha256 = "2d3ebfed036881d0615e5b24288cf788791b45848f26e915e3efe7ee9c10735d", + sha256 = "e7188833039d4e7736de517eba6141b9306f4b60b00974392dac7ce38627321e", ) http_archive( name = "com_github_bufbuild_buf_darwin_amd64", strip_prefix = "buf/bin", build_file_content = """exports_files(["buf"], visibility = ["//visibility:public"])""", urls = [ - "https://cdn.confidential.cloud/constellation/cas/sha256/7fef3c482ac440cc09c40864498ef1f44745fde82428ddf52edd2012d3a036a4", - "https://github.com/bufbuild/buf/releases/download/v1.45.0/buf-Darwin-x86_64.tar.gz", + "https://cdn.confidential.cloud/constellation/cas/sha256/08d1c72b23ae7f4324e0bdd0a700638235726cc312fc8320cd597bd616f69358", + "https://github.com/bufbuild/buf/releases/download/v1.47.2/buf-Darwin-x86_64.tar.gz", ], type = "tar.gz", - sha256 = "7fef3c482ac440cc09c40864498ef1f44745fde82428ddf52edd2012d3a036a4", + sha256 = "08d1c72b23ae7f4324e0bdd0a700638235726cc312fc8320cd597bd616f69358", ) http_archive( name = "com_github_bufbuild_buf_darwin_arm64", strip_prefix = "buf/bin", build_file_content = """exports_files(["buf"], visibility = ["//visibility:public"])""", urls = [ - "https://cdn.confidential.cloud/constellation/cas/sha256/e5309c70c7bb4a06d799ab7c7601c0d647c704085593d5cd981db29f986e469b", - "https://github.com/bufbuild/buf/releases/download/v1.45.0/buf-Darwin-arm64.tar.gz", + "https://cdn.confidential.cloud/constellation/cas/sha256/108c9a6f10167e1fcb753a9f353fc658d25a320b80e1eead8ed31594fbae5de1", + "https://github.com/bufbuild/buf/releases/download/v1.47.2/buf-Darwin-arm64.tar.gz", ], type = "tar.gz", - sha256 = "e5309c70c7bb4a06d799ab7c7601c0d647c704085593d5cd981db29f986e469b", + sha256 = "108c9a6f10167e1fcb753a9f353fc658d25a320b80e1eead8ed31594fbae5de1", ) def _talos_docgen_deps(): From 7a7b6b3655e3304d09e857e44ed14edcb5e29a3c Mon Sep 17 00:00:00 2001 From: Markus Rudy Date: Tue, 10 Dec 2024 13:00:00 +0100 Subject: [PATCH 017/311] ci: exclude CoreDNS chart from renovate (#3541) --- renovate.json5 | 1 + 1 file changed, 1 insertion(+) diff --git a/renovate.json5 b/renovate.json5 index 8424d5473..5d37ae297 100644 --- a/renovate.json5 +++ b/renovate.json5 @@ -14,6 +14,7 @@ "prConcurrentLimit": 4, "ignorePaths": [ "internal/constellation/helm/charts/cilium/**", + "internal/constellation/helm/charts/coredns/**", "internal/constellation/helm/charts/edgeless/csi/charts/aws-csi-driver/**", "internal/constellation/helm/charts/edgeless/csi/charts/azuredisk-csi-driver/**", "internal/constellation/helm/charts/edgeless/csi/charts/gcp-compute-persistent-disk-csi-driver/**", From 54878ddc56db0eda51b8b4ad9137e37830695377 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 10 Dec 2024 15:19:46 +0100 Subject: [PATCH 018/311] deps: update bazel (modules) (major) (#3540) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * deps: update bazel (modules) * deps: tidy all modules * Copy private go_bin_for_host rule from `rules_go` to `/bazel/ci` --------- Signed-off-by: Daniel Weiße Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: edgelessci Co-authored-by: Daniel Weiße --- MODULE.bazel | 8 +- MODULE.bazel.lock | 439 +++++++++++++++--- bazel/ci/BUILD.bazel | 2 +- bazel/ci/go_bin_for_host.bzl | 29 ++ bootstrapper/initproto/init.pb.go | 2 +- debugd/service/debugd.pb.go | 2 +- disk-mapper/recoverproto/recover.pb.go | 2 +- internal/versions/components/components.pb.go | 2 +- joinservice/joinproto/join.pb.go | 2 +- keyservice/keyserviceproto/keyservice.pb.go | 2 +- upgrade-agent/upgradeproto/upgrade.pb.go | 2 +- verify/verifyproto/verify.pb.go | 2 +- 12 files changed, 405 insertions(+), 89 deletions(-) create mode 100644 bazel/ci/go_bin_for_host.bzl diff --git a/MODULE.bazel b/MODULE.bazel index ef8740397..9fa8bd7ac 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -12,11 +12,11 @@ bazel_dep(name = "gazelle", version = "0.40.0") bazel_dep(name = "hermetic_cc_toolchain", version = "3.1.1") bazel_dep(name = "rules_cc", version = "0.1.0") bazel_dep(name = "rules_go", version = "0.50.1", repo_name = "io_bazel_rules_go") -bazel_dep(name = "rules_pkg", version = "0.10.1") -bazel_dep(name = "rules_proto", version = "6.0.2") -bazel_dep(name = "rules_python", version = "0.40.0") +bazel_dep(name = "rules_pkg", version = "1.0.1") +bazel_dep(name = "rules_proto", version = "7.0.2") +bazel_dep(name = "rules_python", version = "1.0.0") -bazel_dep(name = "buildifier_prebuilt", version = "6.4.0", dev_dependency = True) +bazel_dep(name = "buildifier_prebuilt", version = "7.3.1", dev_dependency = True) go_sdk = use_extension("@io_bazel_rules_go//go:extensions.bzl", "go_sdk") go_sdk.download( diff --git a/MODULE.bazel.lock b/MODULE.bazel.lock index bdbcb2bf4..ff7fc36a3 100644 --- a/MODULE.bazel.lock +++ b/MODULE.bazel.lock @@ -21,7 +21,8 @@ "https://bcr.bazel.build/modules/bazel_features/1.17.0/MODULE.bazel": "039de32d21b816b47bd42c778e0454217e9c9caac4a3cf8e15c7231ee3ddee4d", "https://bcr.bazel.build/modules/bazel_features/1.18.0/MODULE.bazel": "1be0ae2557ab3a72a57aeb31b29be347bcdc5d2b1eb1e70f39e3851a7e97041a", "https://bcr.bazel.build/modules/bazel_features/1.19.0/MODULE.bazel": "59adcdf28230d220f0067b1f435b8537dd033bfff8db21335ef9217919c7fb58", - "https://bcr.bazel.build/modules/bazel_features/1.19.0/source.json": "d7bf14517c1b25b9d9c580b0f8795fceeae08a7590f507b76aace528e941375d", + "https://bcr.bazel.build/modules/bazel_features/1.21.0/MODULE.bazel": "675642261665d8eea09989aa3b8afb5c37627f1be178382c320d1b46afba5e3b", + "https://bcr.bazel.build/modules/bazel_features/1.21.0/source.json": "3e8379efaaef53ce35b7b8ba419df829315a880cb0a030e5bb45c96d6d5ecb5f", "https://bcr.bazel.build/modules/bazel_features/1.4.1/MODULE.bazel": "e45b6bb2350aff3e442ae1111c555e27eac1d915e77775f6fdc4b351b758b5d7", "https://bcr.bazel.build/modules/bazel_features/1.9.1/MODULE.bazel": "8f679097876a9b609ad1f60249c49d68bfab783dd9be012faf9d82547b14815a", "https://bcr.bazel.build/modules/bazel_skylib/1.0.3/MODULE.bazel": "bcb0fd896384802d1ad283b4e4eb4d718eebd8cb820b0a2c3a347fb971afd9d8", @@ -36,8 +37,8 @@ "https://bcr.bazel.build/modules/bazel_skylib/1.7.0/MODULE.bazel": "0db596f4563de7938de764cc8deeabec291f55e8ec15299718b93c4423e9796d", "https://bcr.bazel.build/modules/bazel_skylib/1.7.1/MODULE.bazel": "3120d80c5861aa616222ec015332e5f8d3171e062e3e804a2a0253e1be26e59b", "https://bcr.bazel.build/modules/bazel_skylib/1.7.1/source.json": "f121b43eeefc7c29efbd51b83d08631e2347297c95aac9764a701f2a6a2bb953", - "https://bcr.bazel.build/modules/buildifier_prebuilt/6.4.0/MODULE.bazel": "37389c6b5a40c59410b4226d3bb54b08637f393d66e2fa57925c6fcf68e64bf4", - "https://bcr.bazel.build/modules/buildifier_prebuilt/6.4.0/source.json": "83eb01b197ed0b392f797860c9da5ed1bf95f4d0ded994d694a3d44731275916", + "https://bcr.bazel.build/modules/buildifier_prebuilt/7.3.1/MODULE.bazel": "537faf0ad9f5892910074b8e43b4c91c96f1d5d86b6ed04bdbe40cf68aa48b68", + "https://bcr.bazel.build/modules/buildifier_prebuilt/7.3.1/source.json": "55153a5e6ca9c8a7e266c4b46b951e8a010d25ec6062bc35d5d4f89925796bad", "https://bcr.bazel.build/modules/buildozer/7.1.2/MODULE.bazel": "2e8dd40ede9c454042645fd8d8d0cd1527966aa5c919de86661e62953cd73d84", "https://bcr.bazel.build/modules/buildozer/7.1.2/source.json": "c9028a501d2db85793a6996205c8de120944f50a0d570438fcae0457a5f9d1f8", "https://bcr.bazel.build/modules/gazelle/0.32.0/MODULE.bazel": "b499f58a5d0d3537f3cf5b76d8ada18242f64ec474d8391247438bf04f58c7b8", @@ -68,7 +69,8 @@ "https://bcr.bazel.build/modules/protobuf/27.0/MODULE.bazel": "7873b60be88844a0a1d8f80b9d5d20cfbd8495a689b8763e76c6372998d3f64c", "https://bcr.bazel.build/modules/protobuf/27.1/MODULE.bazel": "703a7b614728bb06647f965264967a8ef1c39e09e8f167b3ca0bb1fd80449c0d", "https://bcr.bazel.build/modules/protobuf/29.0-rc2/MODULE.bazel": "6241d35983510143049943fc0d57937937122baf1b287862f9dc8590fc4c37df", - "https://bcr.bazel.build/modules/protobuf/29.0-rc2/source.json": "52101bfd37e38f0d159dee47b71ccbd1f22f7a32192cef5ef2533bb6212f410f", + "https://bcr.bazel.build/modules/protobuf/29.0-rc3/MODULE.bazel": "33c2dfa286578573afc55a7acaea3cada4122b9631007c594bf0729f41c8de92", + "https://bcr.bazel.build/modules/protobuf/29.0-rc3/source.json": "c16a6488fb279ef578da7098e605082d72ed85fc8d843eaae81e7d27d0f4625d", "https://bcr.bazel.build/modules/protobuf/3.19.0/MODULE.bazel": "6b5fbb433f760a99a22b18b6850ed5784ef0e9928a72668b66e4d7ccd47db9b0", "https://bcr.bazel.build/modules/protobuf/3.19.2/MODULE.bazel": "532ffe5f2186b69fdde039efe6df13ba726ff338c6bc82275ad433013fa10573", "https://bcr.bazel.build/modules/protobuf/3.19.6/MODULE.bazel": "9233edc5e1f2ee276a60de3eaa47ac4132302ef9643238f23128fea53ea12858", @@ -81,8 +83,8 @@ "https://bcr.bazel.build/modules/rules_cc/0.0.1/MODULE.bazel": "cb2aa0747f84c6c3a78dad4e2049c154f08ab9d166b1273835a8174940365647", "https://bcr.bazel.build/modules/rules_cc/0.0.10/MODULE.bazel": "ec1705118f7eaedd6e118508d3d26deba2a4e76476ada7e0e3965211be012002", "https://bcr.bazel.build/modules/rules_cc/0.0.13/MODULE.bazel": "0e8529ed7b323dad0775ff924d2ae5af7640b23553dfcd4d34344c7e7a867191", - "https://bcr.bazel.build/modules/rules_cc/0.0.14/MODULE.bazel": "5e343a3aac88b8d7af3b1b6d2093b55c347b8eefc2e7d1442f7a02dc8fea48ac", "https://bcr.bazel.build/modules/rules_cc/0.0.15/MODULE.bazel": "6704c35f7b4a72502ee81f61bf88706b54f06b3cbe5558ac17e2e14666cd5dcc", + "https://bcr.bazel.build/modules/rules_cc/0.0.16/MODULE.bazel": "7661303b8fc1b4d7f532e54e9d6565771fea666fbdf839e0a86affcd02defe87", "https://bcr.bazel.build/modules/rules_cc/0.0.2/MODULE.bazel": "6915987c90970493ab97393024c156ea8fb9f3bea953b2f3ec05c34f19b5695c", "https://bcr.bazel.build/modules/rules_cc/0.0.6/MODULE.bazel": "abf360251023dfe3efcef65ab9d56beefa8394d4176dd29529750e1c57eaa33f", "https://bcr.bazel.build/modules/rules_cc/0.0.8/MODULE.bazel": "964c85c82cfeb6f3855e6a07054fdb159aced38e99a5eecf7bce9d53990afa3e", @@ -99,33 +101,27 @@ "https://bcr.bazel.build/modules/rules_go/0.50.1/source.json": "205765fd30216c70321f84c9a967267684bdc74350af3f3c46c857d9f80a4fa2", "https://bcr.bazel.build/modules/rules_java/4.0.0/MODULE.bazel": "5a78a7ae82cd1a33cef56dc578c7d2a46ed0dca12643ee45edbb8417899e6f74", "https://bcr.bazel.build/modules/rules_java/5.3.5/MODULE.bazel": "a4ec4f2db570171e3e5eb753276ee4b389bae16b96207e9d3230895c99644b86", - "https://bcr.bazel.build/modules/rules_java/6.0.0/MODULE.bazel": "8a43b7df601a7ec1af61d79345c17b31ea1fedc6711fd4abfd013ea612978e39", "https://bcr.bazel.build/modules/rules_java/6.3.0/MODULE.bazel": "a97c7678c19f236a956ad260d59c86e10a463badb7eb2eda787490f4c969b963", - "https://bcr.bazel.build/modules/rules_java/6.4.0/MODULE.bazel": "e986a9fe25aeaa84ac17ca093ef13a4637f6107375f64667a15999f77db6c8f6", "https://bcr.bazel.build/modules/rules_java/6.5.2/MODULE.bazel": "1d440d262d0e08453fa0c4d8f699ba81609ed0e9a9a0f02cd10b3e7942e61e31", "https://bcr.bazel.build/modules/rules_java/7.10.0/MODULE.bazel": "530c3beb3067e870561739f1144329a21c851ff771cd752a49e06e3dc9c2e71a", "https://bcr.bazel.build/modules/rules_java/7.12.2/MODULE.bazel": "579c505165ee757a4280ef83cda0150eea193eed3bef50b1004ba88b99da6de6", - "https://bcr.bazel.build/modules/rules_java/7.12.2/source.json": "b0890f9cda8ff1b8e691a3ac6037b5c14b7fd4134765a3946b89f31ea02e5884", "https://bcr.bazel.build/modules/rules_java/7.2.0/MODULE.bazel": "06c0334c9be61e6cef2c8c84a7800cef502063269a5af25ceb100b192453d4ab", - "https://bcr.bazel.build/modules/rules_java/7.3.2/MODULE.bazel": "50dece891cfdf1741ea230d001aa9c14398062f2b7c066470accace78e412bc2", "https://bcr.bazel.build/modules/rules_java/7.6.1/MODULE.bazel": "2f14b7e8a1aa2f67ae92bc69d1ec0fa8d9f827c4e17ff5e5f02e91caa3b2d0fe", "https://bcr.bazel.build/modules/rules_java/7.6.5/MODULE.bazel": "481164be5e02e4cab6e77a36927683263be56b7e36fef918b458d7a8a1ebadb1", + "https://bcr.bazel.build/modules/rules_java/8.3.2/MODULE.bazel": "7336d5511ad5af0b8615fdc7477535a2e4e723a357b6713af439fe8cf0195017", + "https://bcr.bazel.build/modules/rules_java/8.5.1/MODULE.bazel": "d8a9e38cc5228881f7055a6079f6f7821a073df3744d441978e7a43e20226939", + "https://bcr.bazel.build/modules/rules_java/8.5.1/source.json": "db1a77d81b059e0f84985db67a22f3f579a529a86b7997605be3d214a0abe38e", "https://bcr.bazel.build/modules/rules_jvm_external/4.4.2/MODULE.bazel": "a56b85e418c83eb1839819f0b515c431010160383306d13ec21959ac412d2fe7", "https://bcr.bazel.build/modules/rules_jvm_external/5.1/MODULE.bazel": "33f6f999e03183f7d088c9be518a63467dfd0be94a11d0055fe2d210f89aa909", "https://bcr.bazel.build/modules/rules_jvm_external/5.2/MODULE.bazel": "d9351ba35217ad0de03816ef3ed63f89d411349353077348a45348b096615036", - "https://bcr.bazel.build/modules/rules_jvm_external/5.3/MODULE.bazel": "bf93870767689637164657731849fb887ad086739bd5d360d90007a581d5527d", - "https://bcr.bazel.build/modules/rules_jvm_external/6.1/MODULE.bazel": "75b5fec090dbd46cf9b7d8ea08cf84a0472d92ba3585b476f44c326eda8059c4", "https://bcr.bazel.build/modules/rules_jvm_external/6.3/MODULE.bazel": "c998e060b85f71e00de5ec552019347c8bca255062c990ac02d051bb80a38df0", "https://bcr.bazel.build/modules/rules_jvm_external/6.3/source.json": "6f5f5a5a4419ae4e37c35a5bb0a6ae657ed40b7abc5a5189111b47fcebe43197", - "https://bcr.bazel.build/modules/rules_kotlin/1.9.0/MODULE.bazel": "ef85697305025e5a61f395d4eaede272a5393cee479ace6686dba707de804d59", "https://bcr.bazel.build/modules/rules_kotlin/1.9.6/MODULE.bazel": "d269a01a18ee74d0335450b10f62c9ed81f2321d7958a2934e44272fe82dcef3", "https://bcr.bazel.build/modules/rules_kotlin/1.9.6/source.json": "2faa4794364282db7c06600b7e5e34867a564ae91bda7cae7c29c64e9466b7d5", "https://bcr.bazel.build/modules/rules_license/0.0.3/MODULE.bazel": "627e9ab0247f7d1e05736b59dbb1b6871373de5ad31c3011880b4133cafd4bd0", - "https://bcr.bazel.build/modules/rules_license/0.0.4/MODULE.bazel": "6a88dd22800cf1f9f79ba32cacad0d3a423ed28efa2c2ed5582eaa78dd3ac1e5", "https://bcr.bazel.build/modules/rules_license/0.0.7/MODULE.bazel": "088fbeb0b6a419005b89cf93fe62d9517c0a2b8bb56af3244af65ecfe37e7d5d", "https://bcr.bazel.build/modules/rules_license/1.0.0/MODULE.bazel": "a7fda60eefdf3d8c827262ba499957e4df06f659330bbe6cdbdb975b768bb65c", "https://bcr.bazel.build/modules/rules_license/1.0.0/source.json": "a52c89e54cc311196e478f8382df91c15f7a2bfdf4c6cd0e2675cc2ff0b56efb", - "https://bcr.bazel.build/modules/rules_pkg/0.10.1/MODULE.bazel": "d6e593e048db5f1028f1f05ceb64b123aa6f1c2d43cba049c036443ab2cc2044", "https://bcr.bazel.build/modules/rules_pkg/0.7.0/MODULE.bazel": "df99f03fc7934a4737122518bb87e667e62d780b610910f0447665a7e2be62dc", "https://bcr.bazel.build/modules/rules_pkg/1.0.1/MODULE.bazel": "5b1df97dbc29623bccdf2b0dcd0f5cb08e2f2c9050aab1092fd39a41e82686ff", "https://bcr.bazel.build/modules/rules_pkg/1.0.1/source.json": "bd82e5d7b9ce2d31e380dd9f50c111d678c3bdaca190cb76b0e1c71b05e1ba8a", @@ -138,22 +134,20 @@ "https://bcr.bazel.build/modules/rules_python/0.10.2/MODULE.bazel": "cc82bc96f2997baa545ab3ce73f196d040ffb8756fd2d66125a530031cd90e5f", "https://bcr.bazel.build/modules/rules_python/0.22.1/MODULE.bazel": "26114f0c0b5e93018c0c066d6673f1a2c3737c7e90af95eff30cfee38d0bbac7", "https://bcr.bazel.build/modules/rules_python/0.23.1/MODULE.bazel": "49ffccf0511cb8414de28321f5fcf2a31312b47c40cc21577144b7447f2bf300", - "https://bcr.bazel.build/modules/rules_python/0.24.0/MODULE.bazel": "4bff7f583653d0762cda21303da0643cc4c545ddfd9593337f18dad8d1787801", "https://bcr.bazel.build/modules/rules_python/0.25.0/MODULE.bazel": "72f1506841c920a1afec76975b35312410eea3aa7b63267436bfb1dd91d2d382", "https://bcr.bazel.build/modules/rules_python/0.28.0/MODULE.bazel": "cba2573d870babc976664a912539b320cbaa7114cd3e8f053c720171cde331ed", "https://bcr.bazel.build/modules/rules_python/0.31.0/MODULE.bazel": "93a43dc47ee570e6ec9f5779b2e64c1476a6ce921c48cc9a1678a91dd5f8fd58", "https://bcr.bazel.build/modules/rules_python/0.4.0/MODULE.bazel": "9208ee05fd48bf09ac60ed269791cf17fb343db56c8226a720fbb1cdf467166c", - "https://bcr.bazel.build/modules/rules_python/0.40.0/MODULE.bazel": "9d1a3cd88ed7d8e39583d9ffe56ae8a244f67783ae89b60caafc9f5cf318ada7", - "https://bcr.bazel.build/modules/rules_python/0.40.0/source.json": "939d4bd2e3110f27bfb360292986bb79fd8dcefb874358ccd6cdaa7bda029320", + "https://bcr.bazel.build/modules/rules_python/1.0.0/MODULE.bazel": "898a3d999c22caa585eb062b600f88654bf92efb204fa346fb55f6f8edffca43", + "https://bcr.bazel.build/modules/rules_python/1.0.0/source.json": "b0162a65c6312e45e7912e39abd1a7f8856c2c7e41ecc9b6dc688a6f6400a917", "https://bcr.bazel.build/modules/rules_shell/0.2.0/MODULE.bazel": "fda8a652ab3c7d8fee214de05e7a9916d8b28082234e8d2c0094505c5268ed3c", "https://bcr.bazel.build/modules/rules_shell/0.2.0/source.json": "7f27af3c28037d9701487c4744b5448d26537cc66cdef0d8df7ae85411f8de95", "https://bcr.bazel.build/modules/stardoc/0.5.1/MODULE.bazel": "1a05d92974d0c122f5ccf09291442580317cdd859f07a8655f1db9a60374f9f8", "https://bcr.bazel.build/modules/stardoc/0.5.3/MODULE.bazel": "c7f6948dae6999bf0db32c1858ae345f112cacf98f174c7a8bb707e41b974f1c", - "https://bcr.bazel.build/modules/stardoc/0.5.6/MODULE.bazel": "c43dabc564990eeab55e25ed61c07a1aadafe9ece96a4efabb3f8bf9063b71ef", "https://bcr.bazel.build/modules/stardoc/0.6.2/MODULE.bazel": "7060193196395f5dd668eda046ccbeacebfd98efc77fed418dbe2b82ffaa39fd", "https://bcr.bazel.build/modules/stardoc/0.7.0/MODULE.bazel": "05e3d6d30c099b6770e97da986c53bd31844d7f13d41412480ea265ac9e8079c", - "https://bcr.bazel.build/modules/stardoc/0.7.1/MODULE.bazel": "3548faea4ee5dda5580f9af150e79d0f6aea934fc60c1cc50f4efdd9420759e7", - "https://bcr.bazel.build/modules/stardoc/0.7.1/source.json": "b6500ffcd7b48cd72c29bb67bcac781e12701cc0d6d55d266a652583cfcdab01", + "https://bcr.bazel.build/modules/stardoc/0.7.2/MODULE.bazel": "fc152419aa2ea0f51c29583fab1e8c99ddefd5b3778421845606ee628629e0e5", + "https://bcr.bazel.build/modules/stardoc/0.7.2/source.json": "58b029e5e901d6802967754adf0a9056747e8176f017cfe3607c0851f4d42216", "https://bcr.bazel.build/modules/upb/0.0.0-20220923-a547704/MODULE.bazel": "7298990c00040a0e2f121f6c32544bab27d4452f80d9ce51349b1a28f3005c43", "https://bcr.bazel.build/modules/zlib/1.2.11/MODULE.bazel": "07b389abc85fdbca459b69e2ec656ae5622873af3f845e1c9d80fe179f3effa0", "https://bcr.bazel.build/modules/zlib/1.2.12/MODULE.bazel": "3b1a8834ada2a883674be8cbd36ede1b6ec481477ada359cd2d3ddc562340b27", @@ -660,8 +654,8 @@ }, "@@buildifier_prebuilt~//:defs.bzl%buildifier_prebuilt_deps_extension": { "general": { - "bzlTransitiveDigest": "wCVIDn7TlLvw6PNyOj4qjCcL1dhRDKDOZKuBuxemVxY=", - "usagesDigest": "MbIuhDGRTlw07fpxjzM2N+5FUBehV3EnCmO7eEN86tc=", + "bzlTransitiveDigest": "lqH5eQXGrxGyrPzoegk5Mn6zC3A1P0h+QsA1O/QlXHc=", + "usagesDigest": "yt+GfSH6jiwv+nPT5fzdhb/zB+8RgR4U+dna3WGxrzU=", "recordedFileInputs": {}, "recordedDirentsInputs": {}, "envVariables": {}, @@ -671,11 +665,11 @@ "ruleClassName": "http_file", "attributes": { "urls": [ - "https://github.com/bazelbuild/buildtools/releases/download/v6.4.0/buildifier-darwin-amd64" + "https://github.com/bazelbuild/buildtools/releases/download/v7.3.1/buildifier-darwin-amd64" ], "downloaded_file_path": "buildifier", "executable": true, - "sha256": "eeb47b2de27f60efe549348b183fac24eae80f1479e8b06cac0799c486df5bed" + "sha256": "375f823103d01620aaec20a0c29c6cbca99f4fd0725ae30b93655c6704f44d71" } }, "buildifier_darwin_arm64": { @@ -683,11 +677,11 @@ "ruleClassName": "http_file", "attributes": { "urls": [ - "https://github.com/bazelbuild/buildtools/releases/download/v6.4.0/buildifier-darwin-arm64" + "https://github.com/bazelbuild/buildtools/releases/download/v7.3.1/buildifier-darwin-arm64" ], "downloaded_file_path": "buildifier", "executable": true, - "sha256": "fa07ba0d20165917ca4cc7609f9b19a8a4392898148b7babdf6bb2a7dd963f05" + "sha256": "5a6afc6ac7a09f5455ba0b89bd99d5ae23b4174dc5dc9d6c0ed5ce8caac3f813" } }, "buildifier_linux_amd64": { @@ -695,11 +689,11 @@ "ruleClassName": "http_file", "attributes": { "urls": [ - "https://github.com/bazelbuild/buildtools/releases/download/v6.4.0/buildifier-linux-amd64" + "https://github.com/bazelbuild/buildtools/releases/download/v7.3.1/buildifier-linux-amd64" ], "downloaded_file_path": "buildifier", "executable": true, - "sha256": "be63db12899f48600bad94051123b1fd7b5251e7661b9168582ce52396132e92" + "sha256": "5474cc5128a74e806783d54081f581662c4be8ae65022f557e9281ed5dc88009" } }, "buildifier_linux_arm64": { @@ -707,11 +701,11 @@ "ruleClassName": "http_file", "attributes": { "urls": [ - "https://github.com/bazelbuild/buildtools/releases/download/v6.4.0/buildifier-linux-arm64" + "https://github.com/bazelbuild/buildtools/releases/download/v7.3.1/buildifier-linux-arm64" ], "downloaded_file_path": "buildifier", "executable": true, - "sha256": "18540fc10f86190f87485eb86963e603e41fa022f88a2d1b0cf52ff252b5e1dd" + "sha256": "0bf86c4bfffaf4f08eed77bde5b2082e4ae5039a11e2e8b03984c173c34a561c" } }, "buildifier_windows_amd64": { @@ -719,11 +713,11 @@ "ruleClassName": "http_file", "attributes": { "urls": [ - "https://github.com/bazelbuild/buildtools/releases/download/v6.4.0/buildifier-windows-amd64.exe" + "https://github.com/bazelbuild/buildtools/releases/download/v7.3.1/buildifier-windows-amd64.exe" ], "downloaded_file_path": "buildifier.exe", "executable": true, - "sha256": "da8372f35e34b65fb6d997844d041013bb841e55f58b54d596d35e49680fe13c" + "sha256": "370cd576075ad29930a82f5de132f1a1de4084c784a82514bd4da80c85acf4a8" } }, "buildozer_darwin_amd64": { @@ -731,11 +725,11 @@ "ruleClassName": "http_file", "attributes": { "urls": [ - "https://github.com/bazelbuild/buildtools/releases/download/v6.4.0/buildozer-darwin-amd64" + "https://github.com/bazelbuild/buildtools/releases/download/v7.3.1/buildozer-darwin-amd64" ], "downloaded_file_path": "buildozer", "executable": true, - "sha256": "d29e347ecd6b5673d72cb1a8de05bf1b06178dd229ff5eb67fad5100c840cc8e" + "sha256": "854c9583efc166602276802658cef3f224d60898cfaa60630b33d328db3b0de2" } }, "buildozer_darwin_arm64": { @@ -743,11 +737,11 @@ "ruleClassName": "http_file", "attributes": { "urls": [ - "https://github.com/bazelbuild/buildtools/releases/download/v6.4.0/buildozer-darwin-arm64" + "https://github.com/bazelbuild/buildtools/releases/download/v7.3.1/buildozer-darwin-arm64" ], "downloaded_file_path": "buildozer", "executable": true, - "sha256": "9b9e71bdbec5e7223871e913b65d12f6d8fa026684daf991f00e52ed36a6978d" + "sha256": "31b1bfe20d7d5444be217af78f94c5c43799cdf847c6ce69794b7bf3319c5364" } }, "buildozer_linux_amd64": { @@ -755,11 +749,11 @@ "ruleClassName": "http_file", "attributes": { "urls": [ - "https://github.com/bazelbuild/buildtools/releases/download/v6.4.0/buildozer-linux-amd64" + "https://github.com/bazelbuild/buildtools/releases/download/v7.3.1/buildozer-linux-amd64" ], "downloaded_file_path": "buildozer", "executable": true, - "sha256": "8dfd6345da4e9042daa738d7fdf34f699c5dfce4632f7207956fceedd8494119" + "sha256": "3305e287b3fcc68b9a35fd8515ee617452cd4e018f9e6886b6c7cdbcba8710d4" } }, "buildozer_linux_arm64": { @@ -767,11 +761,11 @@ "ruleClassName": "http_file", "attributes": { "urls": [ - "https://github.com/bazelbuild/buildtools/releases/download/v6.4.0/buildozer-linux-arm64" + "https://github.com/bazelbuild/buildtools/releases/download/v7.3.1/buildozer-linux-arm64" ], "downloaded_file_path": "buildozer", "executable": true, - "sha256": "6559558fded658c8fa7432a9d011f7c4dcbac6b738feae73d2d5c352e5f605fa" + "sha256": "0b5a2a717ac4fc911e1fec8d92af71dbb4fe95b10e5213da0cc3d56cea64a328" } }, "buildozer_windows_amd64": { @@ -779,18 +773,18 @@ "ruleClassName": "http_file", "attributes": { "urls": [ - "https://github.com/bazelbuild/buildtools/releases/download/v6.4.0/buildozer-windows-amd64.exe" + "https://github.com/bazelbuild/buildtools/releases/download/v7.3.1/buildozer-windows-amd64.exe" ], "downloaded_file_path": "buildozer.exe", "executable": true, - "sha256": "e7f05bf847f7c3689dd28926460ce6e1097ae97380ac8e6ae7147b7b706ba19b" + "sha256": "58d41ce53257c5594c9bc86d769f580909269f68de114297f46284fbb9023dcf" } }, "buildifier_prebuilt_toolchains": { "bzlFile": "@@buildifier_prebuilt~//:defs.bzl", "ruleClassName": "_buildifier_toolchain_setup", "attributes": { - "assets_json": "[{\"arch\":\"amd64\",\"name\":\"buildifier\",\"platform\":\"darwin\",\"sha256\":\"eeb47b2de27f60efe549348b183fac24eae80f1479e8b06cac0799c486df5bed\",\"version\":\"v6.4.0\"},{\"arch\":\"arm64\",\"name\":\"buildifier\",\"platform\":\"darwin\",\"sha256\":\"fa07ba0d20165917ca4cc7609f9b19a8a4392898148b7babdf6bb2a7dd963f05\",\"version\":\"v6.4.0\"},{\"arch\":\"amd64\",\"name\":\"buildifier\",\"platform\":\"linux\",\"sha256\":\"be63db12899f48600bad94051123b1fd7b5251e7661b9168582ce52396132e92\",\"version\":\"v6.4.0\"},{\"arch\":\"arm64\",\"name\":\"buildifier\",\"platform\":\"linux\",\"sha256\":\"18540fc10f86190f87485eb86963e603e41fa022f88a2d1b0cf52ff252b5e1dd\",\"version\":\"v6.4.0\"},{\"arch\":\"amd64\",\"name\":\"buildifier\",\"platform\":\"windows\",\"sha256\":\"da8372f35e34b65fb6d997844d041013bb841e55f58b54d596d35e49680fe13c\",\"version\":\"v6.4.0\"},{\"arch\":\"amd64\",\"name\":\"buildozer\",\"platform\":\"darwin\",\"sha256\":\"d29e347ecd6b5673d72cb1a8de05bf1b06178dd229ff5eb67fad5100c840cc8e\",\"version\":\"v6.4.0\"},{\"arch\":\"arm64\",\"name\":\"buildozer\",\"platform\":\"darwin\",\"sha256\":\"9b9e71bdbec5e7223871e913b65d12f6d8fa026684daf991f00e52ed36a6978d\",\"version\":\"v6.4.0\"},{\"arch\":\"amd64\",\"name\":\"buildozer\",\"platform\":\"linux\",\"sha256\":\"8dfd6345da4e9042daa738d7fdf34f699c5dfce4632f7207956fceedd8494119\",\"version\":\"v6.4.0\"},{\"arch\":\"arm64\",\"name\":\"buildozer\",\"platform\":\"linux\",\"sha256\":\"6559558fded658c8fa7432a9d011f7c4dcbac6b738feae73d2d5c352e5f605fa\",\"version\":\"v6.4.0\"},{\"arch\":\"amd64\",\"name\":\"buildozer\",\"platform\":\"windows\",\"sha256\":\"e7f05bf847f7c3689dd28926460ce6e1097ae97380ac8e6ae7147b7b706ba19b\",\"version\":\"v6.4.0\"}]" + "assets_json": "[{\"arch\":\"amd64\",\"name\":\"buildifier\",\"platform\":\"darwin\",\"sha256\":\"375f823103d01620aaec20a0c29c6cbca99f4fd0725ae30b93655c6704f44d71\",\"version\":\"v7.3.1\"},{\"arch\":\"arm64\",\"name\":\"buildifier\",\"platform\":\"darwin\",\"sha256\":\"5a6afc6ac7a09f5455ba0b89bd99d5ae23b4174dc5dc9d6c0ed5ce8caac3f813\",\"version\":\"v7.3.1\"},{\"arch\":\"amd64\",\"name\":\"buildifier\",\"platform\":\"linux\",\"sha256\":\"5474cc5128a74e806783d54081f581662c4be8ae65022f557e9281ed5dc88009\",\"version\":\"v7.3.1\"},{\"arch\":\"arm64\",\"name\":\"buildifier\",\"platform\":\"linux\",\"sha256\":\"0bf86c4bfffaf4f08eed77bde5b2082e4ae5039a11e2e8b03984c173c34a561c\",\"version\":\"v7.3.1\"},{\"arch\":\"amd64\",\"name\":\"buildifier\",\"platform\":\"windows\",\"sha256\":\"370cd576075ad29930a82f5de132f1a1de4084c784a82514bd4da80c85acf4a8\",\"version\":\"v7.3.1\"},{\"arch\":\"amd64\",\"name\":\"buildozer\",\"platform\":\"darwin\",\"sha256\":\"854c9583efc166602276802658cef3f224d60898cfaa60630b33d328db3b0de2\",\"version\":\"v7.3.1\"},{\"arch\":\"arm64\",\"name\":\"buildozer\",\"platform\":\"darwin\",\"sha256\":\"31b1bfe20d7d5444be217af78f94c5c43799cdf847c6ce69794b7bf3319c5364\",\"version\":\"v7.3.1\"},{\"arch\":\"amd64\",\"name\":\"buildozer\",\"platform\":\"linux\",\"sha256\":\"3305e287b3fcc68b9a35fd8515ee617452cd4e018f9e6886b6c7cdbcba8710d4\",\"version\":\"v7.3.1\"},{\"arch\":\"arm64\",\"name\":\"buildozer\",\"platform\":\"linux\",\"sha256\":\"0b5a2a717ac4fc911e1fec8d92af71dbb4fe95b10e5213da0cc3d56cea64a328\",\"version\":\"v7.3.1\"},{\"arch\":\"amd64\",\"name\":\"buildozer\",\"platform\":\"windows\",\"sha256\":\"58d41ce53257c5594c9bc86d769f580909269f68de114297f46284fbb9023dcf\",\"version\":\"v7.3.1\"}]" } } }, @@ -1001,6 +995,29 @@ ] } }, + "@@rules_java~//java:rules_java_deps.bzl%compatibility_proxy": { + "general": { + "bzlTransitiveDigest": "KIX40nDfygEWbU+rq3nYpt3tVgTK/iO8PKh5VMBlN7M=", + "usagesDigest": "pwHZ+26iLgQdwvdZeA5wnAjKnNI3y6XO2VbhOTeo5h8=", + "recordedFileInputs": {}, + "recordedDirentsInputs": {}, + "envVariables": {}, + "generatedRepoSpecs": { + "compatibility_proxy": { + "bzlFile": "@@rules_java~//java:rules_java_deps.bzl", + "ruleClassName": "_compatibility_proxy_repo_rule", + "attributes": {} + } + }, + "recordedRepoMappingEntries": [ + [ + "rules_java~", + "bazel_tools", + "bazel_tools" + ] + ] + } + }, "@@rules_kotlin~//src/main/starlark/core/repositories:bzlmod_setup.bzl%rules_kotlin_extensions": { "general": { "bzlTransitiveDigest": "fus14IFJ/1LGWWGKPH/U18VnJCoMjfDt1ckahqCnM0A=", @@ -1070,13 +1087,15 @@ ] } }, - "@@rules_python~//python/private/pypi:pip.bzl%pip_internal": { + "@@rules_python~//python/extensions:pip.bzl%pip": { "general": { - "bzlTransitiveDigest": "Ia+WlCPeYdZM39vUMNpEI4N0sQyzLK3j231Xqd6nSHs=", - "usagesDigest": "TpQZ+vwK8BO51MJREI4dcchb2El9aY2gx8ZHcaPAiK8=", + "bzlTransitiveDigest": "gJutazNh8a55gHkw92b6OAmolrHFHGYABLiAwXmIg9c=", + "usagesDigest": "MKs5B778/fEkKhBaxuBt3oCCW+wPRuh2AxtITF8AMSU=", "recordedFileInputs": { "@@rules_python~//tools/publish/requirements_linux.txt": "8175b4c8df50ae2f22d1706961884beeb54e7da27bd2447018314a175981997d", + "@@rules_fuzzing~//fuzzing/requirements.txt": "ab04664be026b632a0d2a2446c4f65982b7654f5b6851d2f9d399a19b7242a5b", "@@rules_python~//tools/publish/requirements_windows.txt": "7673adc71dc1a81d3661b90924d7a7c0fc998cd508b3cb4174337cef3f2de556", + "@@protobuf~//python/requirements.txt": "983be60d3cec4b319dcab6d48aeb3f5b2f7c3350f26b3a9e97486c37967c73c5", "@@rules_python~//tools/publish/requirements_darwin.txt": "2994136eab7e57b083c3de76faf46f70fad130bc8e7360a7fed2b288b69e79dc" }, "recordedDirentsInputs": {}, @@ -1085,6 +1104,236 @@ "RULES_PYTHON_REPO_DEBUG_VERBOSITY": null }, "generatedRepoSpecs": { + "pip_deps_310_numpy": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@pip_deps//{name}:{target}", + "python_interpreter_target": "@@rules_python~~python~python_3_10_host//:python", + "repo": "pip_deps_310", + "requirement": "numpy<=1.26.1" + } + }, + "pip_deps_310_setuptools": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@pip_deps//{name}:{target}", + "python_interpreter_target": "@@rules_python~~python~python_3_10_host//:python", + "repo": "pip_deps_310", + "requirement": "setuptools<=70.3.0" + } + }, + "pip_deps_311_numpy": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@pip_deps//{name}:{target}", + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "pip_deps_311", + "requirement": "numpy<=1.26.1" + } + }, + "pip_deps_311_setuptools": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@pip_deps//{name}:{target}", + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "pip_deps_311", + "requirement": "setuptools<=70.3.0" + } + }, + "pip_deps_312_numpy": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@pip_deps//{name}:{target}", + "python_interpreter_target": "@@rules_python~~python~python_3_12_host//:python", + "repo": "pip_deps_312", + "requirement": "numpy<=1.26.1" + } + }, + "pip_deps_312_setuptools": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@pip_deps//{name}:{target}", + "python_interpreter_target": "@@rules_python~~python~python_3_12_host//:python", + "repo": "pip_deps_312", + "requirement": "setuptools<=70.3.0" + } + }, + "pip_deps_38_numpy": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@pip_deps//{name}:{target}", + "python_interpreter_target": "@@rules_python~~python~python_3_8_host//:python", + "repo": "pip_deps_38", + "requirement": "numpy<=1.26.1" + } + }, + "pip_deps_38_setuptools": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@pip_deps//{name}:{target}", + "python_interpreter_target": "@@rules_python~~python~python_3_8_host//:python", + "repo": "pip_deps_38", + "requirement": "setuptools<=70.3.0" + } + }, + "pip_deps_39_numpy": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@pip_deps//{name}:{target}", + "python_interpreter_target": "@@rules_python~~python~python_3_9_host//:python", + "repo": "pip_deps_39", + "requirement": "numpy<=1.26.1" + } + }, + "pip_deps_39_setuptools": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@pip_deps//{name}:{target}", + "python_interpreter_target": "@@rules_python~~python~python_3_9_host//:python", + "repo": "pip_deps_39", + "requirement": "setuptools<=70.3.0" + } + }, + "rules_fuzzing_py_deps_310_absl_py": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_fuzzing_py_deps//{name}:{target}", + "extra_pip_args": [ + "--require-hashes" + ], + "python_interpreter_target": "@@rules_python~~python~python_3_10_host//:python", + "repo": "rules_fuzzing_py_deps_310", + "requirement": "absl-py==2.0.0 --hash=sha256:9a28abb62774ae4e8edbe2dd4c49ffcd45a6a848952a5eccc6a49f3f0fc1e2f3" + } + }, + "rules_fuzzing_py_deps_310_six": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_fuzzing_py_deps//{name}:{target}", + "extra_pip_args": [ + "--require-hashes" + ], + "python_interpreter_target": "@@rules_python~~python~python_3_10_host//:python", + "repo": "rules_fuzzing_py_deps_310", + "requirement": "six==1.16.0 --hash=sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254" + } + }, + "rules_fuzzing_py_deps_311_absl_py": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_fuzzing_py_deps//{name}:{target}", + "extra_pip_args": [ + "--require-hashes" + ], + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "rules_fuzzing_py_deps_311", + "requirement": "absl-py==2.0.0 --hash=sha256:9a28abb62774ae4e8edbe2dd4c49ffcd45a6a848952a5eccc6a49f3f0fc1e2f3" + } + }, + "rules_fuzzing_py_deps_311_six": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_fuzzing_py_deps//{name}:{target}", + "extra_pip_args": [ + "--require-hashes" + ], + "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", + "repo": "rules_fuzzing_py_deps_311", + "requirement": "six==1.16.0 --hash=sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254" + } + }, + "rules_fuzzing_py_deps_312_absl_py": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_fuzzing_py_deps//{name}:{target}", + "extra_pip_args": [ + "--require-hashes" + ], + "python_interpreter_target": "@@rules_python~~python~python_3_12_host//:python", + "repo": "rules_fuzzing_py_deps_312", + "requirement": "absl-py==2.0.0 --hash=sha256:9a28abb62774ae4e8edbe2dd4c49ffcd45a6a848952a5eccc6a49f3f0fc1e2f3" + } + }, + "rules_fuzzing_py_deps_312_six": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_fuzzing_py_deps//{name}:{target}", + "extra_pip_args": [ + "--require-hashes" + ], + "python_interpreter_target": "@@rules_python~~python~python_3_12_host//:python", + "repo": "rules_fuzzing_py_deps_312", + "requirement": "six==1.16.0 --hash=sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254" + } + }, + "rules_fuzzing_py_deps_38_absl_py": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_fuzzing_py_deps//{name}:{target}", + "extra_pip_args": [ + "--require-hashes" + ], + "python_interpreter_target": "@@rules_python~~python~python_3_8_host//:python", + "repo": "rules_fuzzing_py_deps_38", + "requirement": "absl-py==2.0.0 --hash=sha256:9a28abb62774ae4e8edbe2dd4c49ffcd45a6a848952a5eccc6a49f3f0fc1e2f3" + } + }, + "rules_fuzzing_py_deps_38_six": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_fuzzing_py_deps//{name}:{target}", + "extra_pip_args": [ + "--require-hashes" + ], + "python_interpreter_target": "@@rules_python~~python~python_3_8_host//:python", + "repo": "rules_fuzzing_py_deps_38", + "requirement": "six==1.16.0 --hash=sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254" + } + }, + "rules_fuzzing_py_deps_39_absl_py": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_fuzzing_py_deps//{name}:{target}", + "extra_pip_args": [ + "--require-hashes" + ], + "python_interpreter_target": "@@rules_python~~python~python_3_9_host//:python", + "repo": "rules_fuzzing_py_deps_39", + "requirement": "absl-py==2.0.0 --hash=sha256:9a28abb62774ae4e8edbe2dd4c49ffcd45a6a848952a5eccc6a49f3f0fc1e2f3" + } + }, + "rules_fuzzing_py_deps_39_six": { + "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", + "ruleClassName": "whl_library", + "attributes": { + "dep_template": "@rules_fuzzing_py_deps//{name}:{target}", + "extra_pip_args": [ + "--require-hashes" + ], + "python_interpreter_target": "@@rules_python~~python~python_3_9_host//:python", + "repo": "rules_fuzzing_py_deps_39", + "requirement": "six==1.16.0 --hash=sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254" + } + }, "rules_python_publish_deps_311_backports_tarfile_py3_none_any_77e284d7": { "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", "ruleClassName": "whl_library", @@ -3456,6 +3705,40 @@ ] } }, + "pip_deps": { + "bzlFile": "@@rules_python~//python/private/pypi:hub_repository.bzl", + "ruleClassName": "hub_repository", + "attributes": { + "repo_name": "pip_deps", + "extra_hub_aliases": {}, + "whl_map": { + "numpy": "{\"pip_deps_310_numpy\":[{\"version\":\"3.10\"}],\"pip_deps_311_numpy\":[{\"version\":\"3.11\"}],\"pip_deps_312_numpy\":[{\"version\":\"3.12\"}],\"pip_deps_38_numpy\":[{\"version\":\"3.8\"}],\"pip_deps_39_numpy\":[{\"version\":\"3.9\"}]}", + "setuptools": "{\"pip_deps_310_setuptools\":[{\"version\":\"3.10\"}],\"pip_deps_311_setuptools\":[{\"version\":\"3.11\"}],\"pip_deps_312_setuptools\":[{\"version\":\"3.12\"}],\"pip_deps_38_setuptools\":[{\"version\":\"3.8\"}],\"pip_deps_39_setuptools\":[{\"version\":\"3.9\"}]}" + }, + "packages": [ + "numpy", + "setuptools" + ], + "groups": {} + } + }, + "rules_fuzzing_py_deps": { + "bzlFile": "@@rules_python~//python/private/pypi:hub_repository.bzl", + "ruleClassName": "hub_repository", + "attributes": { + "repo_name": "rules_fuzzing_py_deps", + "extra_hub_aliases": {}, + "whl_map": { + "absl_py": "{\"rules_fuzzing_py_deps_310_absl_py\":[{\"version\":\"3.10\"}],\"rules_fuzzing_py_deps_311_absl_py\":[{\"version\":\"3.11\"}],\"rules_fuzzing_py_deps_312_absl_py\":[{\"version\":\"3.12\"}],\"rules_fuzzing_py_deps_38_absl_py\":[{\"version\":\"3.8\"}],\"rules_fuzzing_py_deps_39_absl_py\":[{\"version\":\"3.9\"}]}", + "six": "{\"rules_fuzzing_py_deps_310_six\":[{\"version\":\"3.10\"}],\"rules_fuzzing_py_deps_311_six\":[{\"version\":\"3.11\"}],\"rules_fuzzing_py_deps_312_six\":[{\"version\":\"3.12\"}],\"rules_fuzzing_py_deps_38_six\":[{\"version\":\"3.8\"}],\"rules_fuzzing_py_deps_39_six\":[{\"version\":\"3.9\"}]}" + }, + "packages": [ + "absl_py", + "six" + ], + "groups": {} + } + }, "rules_python_publish_deps": { "bzlFile": "@@rules_python~//python/private/pypi:hub_repository.bzl", "ruleClassName": "hub_repository", @@ -3463,36 +3746,36 @@ "repo_name": "rules_python_publish_deps", "extra_hub_aliases": {}, "whl_map": { - "backports_tarfile": "[{\"filename\":\"backports.tarfile-1.2.0-py3-none-any.whl\",\"repo\":\"rules_python_publish_deps_311_backports_tarfile_py3_none_any_77e284d7\",\"version\":\"3.11\"},{\"filename\":\"backports_tarfile-1.2.0.tar.gz\",\"repo\":\"rules_python_publish_deps_311_backports_tarfile_sdist_d75e02c2\",\"version\":\"3.11\"}]", - "certifi": "[{\"filename\":\"certifi-2024.8.30-py3-none-any.whl\",\"repo\":\"rules_python_publish_deps_311_certifi_py3_none_any_922820b5\",\"version\":\"3.11\"},{\"filename\":\"certifi-2024.8.30.tar.gz\",\"repo\":\"rules_python_publish_deps_311_certifi_sdist_bec941d2\",\"version\":\"3.11\"}]", - "cffi": "[{\"filename\":\"cffi-1.17.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl\",\"repo\":\"rules_python_publish_deps_311_cffi_cp311_cp311_manylinux_2_17_aarch64_a1ed2dd2\",\"version\":\"3.11\"},{\"filename\":\"cffi-1.17.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl\",\"repo\":\"rules_python_publish_deps_311_cffi_cp311_cp311_manylinux_2_17_ppc64le_46bf4316\",\"version\":\"3.11\"},{\"filename\":\"cffi-1.17.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl\",\"repo\":\"rules_python_publish_deps_311_cffi_cp311_cp311_manylinux_2_17_s390x_a24ed04c\",\"version\":\"3.11\"},{\"filename\":\"cffi-1.17.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl\",\"repo\":\"rules_python_publish_deps_311_cffi_cp311_cp311_manylinux_2_17_x86_64_610faea7\",\"version\":\"3.11\"},{\"filename\":\"cffi-1.17.1-cp311-cp311-musllinux_1_1_aarch64.whl\",\"repo\":\"rules_python_publish_deps_311_cffi_cp311_cp311_musllinux_1_1_aarch64_a9b15d49\",\"version\":\"3.11\"},{\"filename\":\"cffi-1.17.1-cp311-cp311-musllinux_1_1_x86_64.whl\",\"repo\":\"rules_python_publish_deps_311_cffi_cp311_cp311_musllinux_1_1_x86_64_fc48c783\",\"version\":\"3.11\"},{\"filename\":\"cffi-1.17.1.tar.gz\",\"repo\":\"rules_python_publish_deps_311_cffi_sdist_1c39c601\",\"version\":\"3.11\"}]", - "charset_normalizer": "[{\"filename\":\"charset_normalizer-3.4.0-cp311-cp311-macosx_10_9_universal2.whl\",\"repo\":\"rules_python_publish_deps_311_charset_normalizer_cp311_cp311_macosx_10_9_universal2_0d99dd8f\",\"version\":\"3.11\"},{\"filename\":\"charset_normalizer-3.4.0-cp311-cp311-macosx_10_9_x86_64.whl\",\"repo\":\"rules_python_publish_deps_311_charset_normalizer_cp311_cp311_macosx_10_9_x86_64_c57516e5\",\"version\":\"3.11\"},{\"filename\":\"charset_normalizer-3.4.0-cp311-cp311-macosx_11_0_arm64.whl\",\"repo\":\"rules_python_publish_deps_311_charset_normalizer_cp311_cp311_macosx_11_0_arm64_6dba5d19\",\"version\":\"3.11\"},{\"filename\":\"charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl\",\"repo\":\"rules_python_publish_deps_311_charset_normalizer_cp311_cp311_manylinux_2_17_aarch64_bf4475b8\",\"version\":\"3.11\"},{\"filename\":\"charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl\",\"repo\":\"rules_python_publish_deps_311_charset_normalizer_cp311_cp311_manylinux_2_17_ppc64le_ce031db0\",\"version\":\"3.11\"},{\"filename\":\"charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl\",\"repo\":\"rules_python_publish_deps_311_charset_normalizer_cp311_cp311_manylinux_2_17_s390x_8ff4e7cd\",\"version\":\"3.11\"},{\"filename\":\"charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl\",\"repo\":\"rules_python_publish_deps_311_charset_normalizer_cp311_cp311_manylinux_2_17_x86_64_3710a975\",\"version\":\"3.11\"},{\"filename\":\"charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_aarch64.whl\",\"repo\":\"rules_python_publish_deps_311_charset_normalizer_cp311_cp311_musllinux_1_2_aarch64_47334db7\",\"version\":\"3.11\"},{\"filename\":\"charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_ppc64le.whl\",\"repo\":\"rules_python_publish_deps_311_charset_normalizer_cp311_cp311_musllinux_1_2_ppc64le_f1a2f519\",\"version\":\"3.11\"},{\"filename\":\"charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_s390x.whl\",\"repo\":\"rules_python_publish_deps_311_charset_normalizer_cp311_cp311_musllinux_1_2_s390x_63bc5c4a\",\"version\":\"3.11\"},{\"filename\":\"charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_x86_64.whl\",\"repo\":\"rules_python_publish_deps_311_charset_normalizer_cp311_cp311_musllinux_1_2_x86_64_bcb4f8ea\",\"version\":\"3.11\"},{\"filename\":\"charset_normalizer-3.4.0-cp311-cp311-win_amd64.whl\",\"repo\":\"rules_python_publish_deps_311_charset_normalizer_cp311_cp311_win_amd64_cee4373f\",\"version\":\"3.11\"},{\"filename\":\"charset_normalizer-3.4.0-py3-none-any.whl\",\"repo\":\"rules_python_publish_deps_311_charset_normalizer_py3_none_any_fe9f97fe\",\"version\":\"3.11\"},{\"filename\":\"charset_normalizer-3.4.0.tar.gz\",\"repo\":\"rules_python_publish_deps_311_charset_normalizer_sdist_223217c3\",\"version\":\"3.11\"}]", - "cryptography": "[{\"filename\":\"cryptography-43.0.3-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl\",\"repo\":\"rules_python_publish_deps_311_cryptography_cp39_abi3_manylinux_2_17_aarch64_846da004\",\"version\":\"3.11\"},{\"filename\":\"cryptography-43.0.3-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl\",\"repo\":\"rules_python_publish_deps_311_cryptography_cp39_abi3_manylinux_2_17_x86_64_0f996e72\",\"version\":\"3.11\"},{\"filename\":\"cryptography-43.0.3-cp39-abi3-manylinux_2_28_aarch64.whl\",\"repo\":\"rules_python_publish_deps_311_cryptography_cp39_abi3_manylinux_2_28_aarch64_f7b178f1\",\"version\":\"3.11\"},{\"filename\":\"cryptography-43.0.3-cp39-abi3-manylinux_2_28_x86_64.whl\",\"repo\":\"rules_python_publish_deps_311_cryptography_cp39_abi3_manylinux_2_28_x86_64_c2e6fc39\",\"version\":\"3.11\"},{\"filename\":\"cryptography-43.0.3-cp39-abi3-musllinux_1_2_aarch64.whl\",\"repo\":\"rules_python_publish_deps_311_cryptography_cp39_abi3_musllinux_1_2_aarch64_e1be4655\",\"version\":\"3.11\"},{\"filename\":\"cryptography-43.0.3-cp39-abi3-musllinux_1_2_x86_64.whl\",\"repo\":\"rules_python_publish_deps_311_cryptography_cp39_abi3_musllinux_1_2_x86_64_df6b6c6d\",\"version\":\"3.11\"},{\"filename\":\"cryptography-43.0.3.tar.gz\",\"repo\":\"rules_python_publish_deps_311_cryptography_sdist_315b9001\",\"version\":\"3.11\"}]", - "docutils": "[{\"filename\":\"docutils-0.21.2-py3-none-any.whl\",\"repo\":\"rules_python_publish_deps_311_docutils_py3_none_any_dafca5b9\",\"version\":\"3.11\"},{\"filename\":\"docutils-0.21.2.tar.gz\",\"repo\":\"rules_python_publish_deps_311_docutils_sdist_3a6b1873\",\"version\":\"3.11\"}]", - "idna": "[{\"filename\":\"idna-3.10-py3-none-any.whl\",\"repo\":\"rules_python_publish_deps_311_idna_py3_none_any_946d195a\",\"version\":\"3.11\"},{\"filename\":\"idna-3.10.tar.gz\",\"repo\":\"rules_python_publish_deps_311_idna_sdist_12f65c9b\",\"version\":\"3.11\"}]", - "importlib_metadata": "[{\"filename\":\"importlib_metadata-8.5.0-py3-none-any.whl\",\"repo\":\"rules_python_publish_deps_311_importlib_metadata_py3_none_any_45e54197\",\"version\":\"3.11\"},{\"filename\":\"importlib_metadata-8.5.0.tar.gz\",\"repo\":\"rules_python_publish_deps_311_importlib_metadata_sdist_71522656\",\"version\":\"3.11\"}]", - "jaraco_classes": "[{\"filename\":\"jaraco.classes-3.4.0-py3-none-any.whl\",\"repo\":\"rules_python_publish_deps_311_jaraco_classes_py3_none_any_f662826b\",\"version\":\"3.11\"},{\"filename\":\"jaraco.classes-3.4.0.tar.gz\",\"repo\":\"rules_python_publish_deps_311_jaraco_classes_sdist_47a024b5\",\"version\":\"3.11\"}]", - "jaraco_context": "[{\"filename\":\"jaraco.context-6.0.1-py3-none-any.whl\",\"repo\":\"rules_python_publish_deps_311_jaraco_context_py3_none_any_f797fc48\",\"version\":\"3.11\"},{\"filename\":\"jaraco_context-6.0.1.tar.gz\",\"repo\":\"rules_python_publish_deps_311_jaraco_context_sdist_9bae4ea5\",\"version\":\"3.11\"}]", - "jaraco_functools": "[{\"filename\":\"jaraco.functools-4.1.0-py3-none-any.whl\",\"repo\":\"rules_python_publish_deps_311_jaraco_functools_py3_none_any_ad159f13\",\"version\":\"3.11\"},{\"filename\":\"jaraco_functools-4.1.0.tar.gz\",\"repo\":\"rules_python_publish_deps_311_jaraco_functools_sdist_70f7e0e2\",\"version\":\"3.11\"}]", - "jeepney": "[{\"filename\":\"jeepney-0.8.0-py3-none-any.whl\",\"repo\":\"rules_python_publish_deps_311_jeepney_py3_none_any_c0a454ad\",\"version\":\"3.11\"},{\"filename\":\"jeepney-0.8.0.tar.gz\",\"repo\":\"rules_python_publish_deps_311_jeepney_sdist_5efe48d2\",\"version\":\"3.11\"}]", - "keyring": "[{\"filename\":\"keyring-25.4.1-py3-none-any.whl\",\"repo\":\"rules_python_publish_deps_311_keyring_py3_none_any_5426f817\",\"version\":\"3.11\"},{\"filename\":\"keyring-25.4.1.tar.gz\",\"repo\":\"rules_python_publish_deps_311_keyring_sdist_b07ebc55\",\"version\":\"3.11\"}]", - "markdown_it_py": "[{\"filename\":\"markdown-it-py-3.0.0.tar.gz\",\"repo\":\"rules_python_publish_deps_311_markdown_it_py_sdist_e3f60a94\",\"version\":\"3.11\"},{\"filename\":\"markdown_it_py-3.0.0-py3-none-any.whl\",\"repo\":\"rules_python_publish_deps_311_markdown_it_py_py3_none_any_35521684\",\"version\":\"3.11\"}]", - "mdurl": "[{\"filename\":\"mdurl-0.1.2-py3-none-any.whl\",\"repo\":\"rules_python_publish_deps_311_mdurl_py3_none_any_84008a41\",\"version\":\"3.11\"},{\"filename\":\"mdurl-0.1.2.tar.gz\",\"repo\":\"rules_python_publish_deps_311_mdurl_sdist_bb413d29\",\"version\":\"3.11\"}]", - "more_itertools": "[{\"filename\":\"more-itertools-10.5.0.tar.gz\",\"repo\":\"rules_python_publish_deps_311_more_itertools_sdist_5482bfef\",\"version\":\"3.11\"},{\"filename\":\"more_itertools-10.5.0-py3-none-any.whl\",\"repo\":\"rules_python_publish_deps_311_more_itertools_py3_none_any_037b0d32\",\"version\":\"3.11\"}]", - "nh3": "[{\"filename\":\"nh3-0.2.18-cp37-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl\",\"repo\":\"rules_python_publish_deps_311_nh3_cp37_abi3_macosx_10_12_x86_64_14c5a72e\",\"version\":\"3.11\"},{\"filename\":\"nh3-0.2.18-cp37-abi3-macosx_10_12_x86_64.whl\",\"repo\":\"rules_python_publish_deps_311_nh3_cp37_abi3_macosx_10_12_x86_64_7b7c2a3c\",\"version\":\"3.11\"},{\"filename\":\"nh3-0.2.18-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl\",\"repo\":\"rules_python_publish_deps_311_nh3_cp37_abi3_manylinux_2_17_aarch64_42c64511\",\"version\":\"3.11\"},{\"filename\":\"nh3-0.2.18-cp37-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl\",\"repo\":\"rules_python_publish_deps_311_nh3_cp37_abi3_manylinux_2_17_armv7l_0411beb0\",\"version\":\"3.11\"},{\"filename\":\"nh3-0.2.18-cp37-abi3-manylinux_2_17_ppc64.manylinux2014_ppc64.whl\",\"repo\":\"rules_python_publish_deps_311_nh3_cp37_abi3_manylinux_2_17_ppc64_5f36b271\",\"version\":\"3.11\"},{\"filename\":\"nh3-0.2.18-cp37-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl\",\"repo\":\"rules_python_publish_deps_311_nh3_cp37_abi3_manylinux_2_17_ppc64le_34c03fa7\",\"version\":\"3.11\"},{\"filename\":\"nh3-0.2.18-cp37-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl\",\"repo\":\"rules_python_publish_deps_311_nh3_cp37_abi3_manylinux_2_17_s390x_19aaba96\",\"version\":\"3.11\"},{\"filename\":\"nh3-0.2.18-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl\",\"repo\":\"rules_python_publish_deps_311_nh3_cp37_abi3_manylinux_2_17_x86_64_de3ceed6\",\"version\":\"3.11\"},{\"filename\":\"nh3-0.2.18-cp37-abi3-musllinux_1_2_aarch64.whl\",\"repo\":\"rules_python_publish_deps_311_nh3_cp37_abi3_musllinux_1_2_aarch64_f0eca9ca\",\"version\":\"3.11\"},{\"filename\":\"nh3-0.2.18-cp37-abi3-musllinux_1_2_armv7l.whl\",\"repo\":\"rules_python_publish_deps_311_nh3_cp37_abi3_musllinux_1_2_armv7l_3a157ab1\",\"version\":\"3.11\"},{\"filename\":\"nh3-0.2.18-cp37-abi3-musllinux_1_2_x86_64.whl\",\"repo\":\"rules_python_publish_deps_311_nh3_cp37_abi3_musllinux_1_2_x86_64_36c95d4b\",\"version\":\"3.11\"},{\"filename\":\"nh3-0.2.18-cp37-abi3-win_amd64.whl\",\"repo\":\"rules_python_publish_deps_311_nh3_cp37_abi3_win_amd64_8ce0f819\",\"version\":\"3.11\"},{\"filename\":\"nh3-0.2.18.tar.gz\",\"repo\":\"rules_python_publish_deps_311_nh3_sdist_94a16692\",\"version\":\"3.11\"}]", - "pkginfo": "[{\"filename\":\"pkginfo-1.10.0-py3-none-any.whl\",\"repo\":\"rules_python_publish_deps_311_pkginfo_py3_none_any_889a6da2\",\"version\":\"3.11\"},{\"filename\":\"pkginfo-1.10.0.tar.gz\",\"repo\":\"rules_python_publish_deps_311_pkginfo_sdist_5df73835\",\"version\":\"3.11\"}]", - "pycparser": "[{\"filename\":\"pycparser-2.22-py3-none-any.whl\",\"repo\":\"rules_python_publish_deps_311_pycparser_py3_none_any_c3702b6d\",\"version\":\"3.11\"},{\"filename\":\"pycparser-2.22.tar.gz\",\"repo\":\"rules_python_publish_deps_311_pycparser_sdist_491c8be9\",\"version\":\"3.11\"}]", - "pygments": "[{\"filename\":\"pygments-2.18.0-py3-none-any.whl\",\"repo\":\"rules_python_publish_deps_311_pygments_py3_none_any_b8e6aca0\",\"version\":\"3.11\"},{\"filename\":\"pygments-2.18.0.tar.gz\",\"repo\":\"rules_python_publish_deps_311_pygments_sdist_786ff802\",\"version\":\"3.11\"}]", - "pywin32_ctypes": "[{\"filename\":\"pywin32-ctypes-0.2.3.tar.gz\",\"repo\":\"rules_python_publish_deps_311_pywin32_ctypes_sdist_d162dc04\",\"version\":\"3.11\"},{\"filename\":\"pywin32_ctypes-0.2.3-py3-none-any.whl\",\"repo\":\"rules_python_publish_deps_311_pywin32_ctypes_py3_none_any_8a151337\",\"version\":\"3.11\"}]", - "readme_renderer": "[{\"filename\":\"readme_renderer-44.0-py3-none-any.whl\",\"repo\":\"rules_python_publish_deps_311_readme_renderer_py3_none_any_2fbca89b\",\"version\":\"3.11\"},{\"filename\":\"readme_renderer-44.0.tar.gz\",\"repo\":\"rules_python_publish_deps_311_readme_renderer_sdist_8712034e\",\"version\":\"3.11\"}]", - "requests": "[{\"filename\":\"requests-2.32.3-py3-none-any.whl\",\"repo\":\"rules_python_publish_deps_311_requests_py3_none_any_70761cfe\",\"version\":\"3.11\"},{\"filename\":\"requests-2.32.3.tar.gz\",\"repo\":\"rules_python_publish_deps_311_requests_sdist_55365417\",\"version\":\"3.11\"}]", - "requests_toolbelt": "[{\"filename\":\"requests-toolbelt-1.0.0.tar.gz\",\"repo\":\"rules_python_publish_deps_311_requests_toolbelt_sdist_7681a0a3\",\"version\":\"3.11\"},{\"filename\":\"requests_toolbelt-1.0.0-py2.py3-none-any.whl\",\"repo\":\"rules_python_publish_deps_311_requests_toolbelt_py2_none_any_cccfdd66\",\"version\":\"3.11\"}]", - "rfc3986": "[{\"filename\":\"rfc3986-2.0.0-py2.py3-none-any.whl\",\"repo\":\"rules_python_publish_deps_311_rfc3986_py2_none_any_50b1502b\",\"version\":\"3.11\"},{\"filename\":\"rfc3986-2.0.0.tar.gz\",\"repo\":\"rules_python_publish_deps_311_rfc3986_sdist_97aacf9d\",\"version\":\"3.11\"}]", - "rich": "[{\"filename\":\"rich-13.9.3-py3-none-any.whl\",\"repo\":\"rules_python_publish_deps_311_rich_py3_none_any_9836f509\",\"version\":\"3.11\"},{\"filename\":\"rich-13.9.3.tar.gz\",\"repo\":\"rules_python_publish_deps_311_rich_sdist_bc1e01b8\",\"version\":\"3.11\"}]", - "secretstorage": "[{\"filename\":\"SecretStorage-3.3.3-py3-none-any.whl\",\"repo\":\"rules_python_publish_deps_311_secretstorage_py3_none_any_f356e662\",\"version\":\"3.11\"},{\"filename\":\"SecretStorage-3.3.3.tar.gz\",\"repo\":\"rules_python_publish_deps_311_secretstorage_sdist_2403533e\",\"version\":\"3.11\"}]", - "twine": "[{\"filename\":\"twine-5.1.1-py3-none-any.whl\",\"repo\":\"rules_python_publish_deps_311_twine_py3_none_any_215dbe7b\",\"version\":\"3.11\"},{\"filename\":\"twine-5.1.1.tar.gz\",\"repo\":\"rules_python_publish_deps_311_twine_sdist_9aa08251\",\"version\":\"3.11\"}]", - "urllib3": "[{\"filename\":\"urllib3-2.2.3-py3-none-any.whl\",\"repo\":\"rules_python_publish_deps_311_urllib3_py3_none_any_ca899ca0\",\"version\":\"3.11\"},{\"filename\":\"urllib3-2.2.3.tar.gz\",\"repo\":\"rules_python_publish_deps_311_urllib3_sdist_e7d814a8\",\"version\":\"3.11\"}]", - "zipp": "[{\"filename\":\"zipp-3.20.2-py3-none-any.whl\",\"repo\":\"rules_python_publish_deps_311_zipp_py3_none_any_a817ac80\",\"version\":\"3.11\"},{\"filename\":\"zipp-3.20.2.tar.gz\",\"repo\":\"rules_python_publish_deps_311_zipp_sdist_bc9eb26f\",\"version\":\"3.11\"}]" + "backports_tarfile": "{\"rules_python_publish_deps_311_backports_tarfile_py3_none_any_77e284d7\":[{\"filename\":\"backports.tarfile-1.2.0-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_backports_tarfile_sdist_d75e02c2\":[{\"filename\":\"backports_tarfile-1.2.0.tar.gz\",\"version\":\"3.11\"}]}", + "certifi": "{\"rules_python_publish_deps_311_certifi_py3_none_any_922820b5\":[{\"filename\":\"certifi-2024.8.30-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_certifi_sdist_bec941d2\":[{\"filename\":\"certifi-2024.8.30.tar.gz\",\"version\":\"3.11\"}]}", + "cffi": "{\"rules_python_publish_deps_311_cffi_cp311_cp311_manylinux_2_17_aarch64_a1ed2dd2\":[{\"filename\":\"cffi-1.17.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_cffi_cp311_cp311_manylinux_2_17_ppc64le_46bf4316\":[{\"filename\":\"cffi-1.17.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_cffi_cp311_cp311_manylinux_2_17_s390x_a24ed04c\":[{\"filename\":\"cffi-1.17.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_cffi_cp311_cp311_manylinux_2_17_x86_64_610faea7\":[{\"filename\":\"cffi-1.17.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_cffi_cp311_cp311_musllinux_1_1_aarch64_a9b15d49\":[{\"filename\":\"cffi-1.17.1-cp311-cp311-musllinux_1_1_aarch64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_cffi_cp311_cp311_musllinux_1_1_x86_64_fc48c783\":[{\"filename\":\"cffi-1.17.1-cp311-cp311-musllinux_1_1_x86_64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_cffi_sdist_1c39c601\":[{\"filename\":\"cffi-1.17.1.tar.gz\",\"version\":\"3.11\"}]}", + "charset_normalizer": "{\"rules_python_publish_deps_311_charset_normalizer_cp311_cp311_macosx_10_9_universal2_0d99dd8f\":[{\"filename\":\"charset_normalizer-3.4.0-cp311-cp311-macosx_10_9_universal2.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_charset_normalizer_cp311_cp311_macosx_10_9_x86_64_c57516e5\":[{\"filename\":\"charset_normalizer-3.4.0-cp311-cp311-macosx_10_9_x86_64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_charset_normalizer_cp311_cp311_macosx_11_0_arm64_6dba5d19\":[{\"filename\":\"charset_normalizer-3.4.0-cp311-cp311-macosx_11_0_arm64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_charset_normalizer_cp311_cp311_manylinux_2_17_aarch64_bf4475b8\":[{\"filename\":\"charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_charset_normalizer_cp311_cp311_manylinux_2_17_ppc64le_ce031db0\":[{\"filename\":\"charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_charset_normalizer_cp311_cp311_manylinux_2_17_s390x_8ff4e7cd\":[{\"filename\":\"charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_charset_normalizer_cp311_cp311_manylinux_2_17_x86_64_3710a975\":[{\"filename\":\"charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_charset_normalizer_cp311_cp311_musllinux_1_2_aarch64_47334db7\":[{\"filename\":\"charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_aarch64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_charset_normalizer_cp311_cp311_musllinux_1_2_ppc64le_f1a2f519\":[{\"filename\":\"charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_ppc64le.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_charset_normalizer_cp311_cp311_musllinux_1_2_s390x_63bc5c4a\":[{\"filename\":\"charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_s390x.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_charset_normalizer_cp311_cp311_musllinux_1_2_x86_64_bcb4f8ea\":[{\"filename\":\"charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_x86_64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_charset_normalizer_cp311_cp311_win_amd64_cee4373f\":[{\"filename\":\"charset_normalizer-3.4.0-cp311-cp311-win_amd64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_charset_normalizer_py3_none_any_fe9f97fe\":[{\"filename\":\"charset_normalizer-3.4.0-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_charset_normalizer_sdist_223217c3\":[{\"filename\":\"charset_normalizer-3.4.0.tar.gz\",\"version\":\"3.11\"}]}", + "cryptography": "{\"rules_python_publish_deps_311_cryptography_cp39_abi3_manylinux_2_17_aarch64_846da004\":[{\"filename\":\"cryptography-43.0.3-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_cryptography_cp39_abi3_manylinux_2_17_x86_64_0f996e72\":[{\"filename\":\"cryptography-43.0.3-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_cryptography_cp39_abi3_manylinux_2_28_aarch64_f7b178f1\":[{\"filename\":\"cryptography-43.0.3-cp39-abi3-manylinux_2_28_aarch64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_cryptography_cp39_abi3_manylinux_2_28_x86_64_c2e6fc39\":[{\"filename\":\"cryptography-43.0.3-cp39-abi3-manylinux_2_28_x86_64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_cryptography_cp39_abi3_musllinux_1_2_aarch64_e1be4655\":[{\"filename\":\"cryptography-43.0.3-cp39-abi3-musllinux_1_2_aarch64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_cryptography_cp39_abi3_musllinux_1_2_x86_64_df6b6c6d\":[{\"filename\":\"cryptography-43.0.3-cp39-abi3-musllinux_1_2_x86_64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_cryptography_sdist_315b9001\":[{\"filename\":\"cryptography-43.0.3.tar.gz\",\"version\":\"3.11\"}]}", + "docutils": "{\"rules_python_publish_deps_311_docutils_py3_none_any_dafca5b9\":[{\"filename\":\"docutils-0.21.2-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_docutils_sdist_3a6b1873\":[{\"filename\":\"docutils-0.21.2.tar.gz\",\"version\":\"3.11\"}]}", + "idna": "{\"rules_python_publish_deps_311_idna_py3_none_any_946d195a\":[{\"filename\":\"idna-3.10-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_idna_sdist_12f65c9b\":[{\"filename\":\"idna-3.10.tar.gz\",\"version\":\"3.11\"}]}", + "importlib_metadata": "{\"rules_python_publish_deps_311_importlib_metadata_py3_none_any_45e54197\":[{\"filename\":\"importlib_metadata-8.5.0-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_importlib_metadata_sdist_71522656\":[{\"filename\":\"importlib_metadata-8.5.0.tar.gz\",\"version\":\"3.11\"}]}", + "jaraco_classes": "{\"rules_python_publish_deps_311_jaraco_classes_py3_none_any_f662826b\":[{\"filename\":\"jaraco.classes-3.4.0-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_jaraco_classes_sdist_47a024b5\":[{\"filename\":\"jaraco.classes-3.4.0.tar.gz\",\"version\":\"3.11\"}]}", + "jaraco_context": "{\"rules_python_publish_deps_311_jaraco_context_py3_none_any_f797fc48\":[{\"filename\":\"jaraco.context-6.0.1-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_jaraco_context_sdist_9bae4ea5\":[{\"filename\":\"jaraco_context-6.0.1.tar.gz\",\"version\":\"3.11\"}]}", + "jaraco_functools": "{\"rules_python_publish_deps_311_jaraco_functools_py3_none_any_ad159f13\":[{\"filename\":\"jaraco.functools-4.1.0-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_jaraco_functools_sdist_70f7e0e2\":[{\"filename\":\"jaraco_functools-4.1.0.tar.gz\",\"version\":\"3.11\"}]}", + "jeepney": "{\"rules_python_publish_deps_311_jeepney_py3_none_any_c0a454ad\":[{\"filename\":\"jeepney-0.8.0-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_jeepney_sdist_5efe48d2\":[{\"filename\":\"jeepney-0.8.0.tar.gz\",\"version\":\"3.11\"}]}", + "keyring": "{\"rules_python_publish_deps_311_keyring_py3_none_any_5426f817\":[{\"filename\":\"keyring-25.4.1-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_keyring_sdist_b07ebc55\":[{\"filename\":\"keyring-25.4.1.tar.gz\",\"version\":\"3.11\"}]}", + "markdown_it_py": "{\"rules_python_publish_deps_311_markdown_it_py_py3_none_any_35521684\":[{\"filename\":\"markdown_it_py-3.0.0-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_markdown_it_py_sdist_e3f60a94\":[{\"filename\":\"markdown-it-py-3.0.0.tar.gz\",\"version\":\"3.11\"}]}", + "mdurl": "{\"rules_python_publish_deps_311_mdurl_py3_none_any_84008a41\":[{\"filename\":\"mdurl-0.1.2-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_mdurl_sdist_bb413d29\":[{\"filename\":\"mdurl-0.1.2.tar.gz\",\"version\":\"3.11\"}]}", + "more_itertools": "{\"rules_python_publish_deps_311_more_itertools_py3_none_any_037b0d32\":[{\"filename\":\"more_itertools-10.5.0-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_more_itertools_sdist_5482bfef\":[{\"filename\":\"more-itertools-10.5.0.tar.gz\",\"version\":\"3.11\"}]}", + "nh3": "{\"rules_python_publish_deps_311_nh3_cp37_abi3_macosx_10_12_x86_64_14c5a72e\":[{\"filename\":\"nh3-0.2.18-cp37-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_nh3_cp37_abi3_macosx_10_12_x86_64_7b7c2a3c\":[{\"filename\":\"nh3-0.2.18-cp37-abi3-macosx_10_12_x86_64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_nh3_cp37_abi3_manylinux_2_17_aarch64_42c64511\":[{\"filename\":\"nh3-0.2.18-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_nh3_cp37_abi3_manylinux_2_17_armv7l_0411beb0\":[{\"filename\":\"nh3-0.2.18-cp37-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_nh3_cp37_abi3_manylinux_2_17_ppc64_5f36b271\":[{\"filename\":\"nh3-0.2.18-cp37-abi3-manylinux_2_17_ppc64.manylinux2014_ppc64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_nh3_cp37_abi3_manylinux_2_17_ppc64le_34c03fa7\":[{\"filename\":\"nh3-0.2.18-cp37-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_nh3_cp37_abi3_manylinux_2_17_s390x_19aaba96\":[{\"filename\":\"nh3-0.2.18-cp37-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_nh3_cp37_abi3_manylinux_2_17_x86_64_de3ceed6\":[{\"filename\":\"nh3-0.2.18-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_nh3_cp37_abi3_musllinux_1_2_aarch64_f0eca9ca\":[{\"filename\":\"nh3-0.2.18-cp37-abi3-musllinux_1_2_aarch64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_nh3_cp37_abi3_musllinux_1_2_armv7l_3a157ab1\":[{\"filename\":\"nh3-0.2.18-cp37-abi3-musllinux_1_2_armv7l.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_nh3_cp37_abi3_musllinux_1_2_x86_64_36c95d4b\":[{\"filename\":\"nh3-0.2.18-cp37-abi3-musllinux_1_2_x86_64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_nh3_cp37_abi3_win_amd64_8ce0f819\":[{\"filename\":\"nh3-0.2.18-cp37-abi3-win_amd64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_nh3_sdist_94a16692\":[{\"filename\":\"nh3-0.2.18.tar.gz\",\"version\":\"3.11\"}]}", + "pkginfo": "{\"rules_python_publish_deps_311_pkginfo_py3_none_any_889a6da2\":[{\"filename\":\"pkginfo-1.10.0-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_pkginfo_sdist_5df73835\":[{\"filename\":\"pkginfo-1.10.0.tar.gz\",\"version\":\"3.11\"}]}", + "pycparser": "{\"rules_python_publish_deps_311_pycparser_py3_none_any_c3702b6d\":[{\"filename\":\"pycparser-2.22-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_pycparser_sdist_491c8be9\":[{\"filename\":\"pycparser-2.22.tar.gz\",\"version\":\"3.11\"}]}", + "pygments": "{\"rules_python_publish_deps_311_pygments_py3_none_any_b8e6aca0\":[{\"filename\":\"pygments-2.18.0-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_pygments_sdist_786ff802\":[{\"filename\":\"pygments-2.18.0.tar.gz\",\"version\":\"3.11\"}]}", + "pywin32_ctypes": "{\"rules_python_publish_deps_311_pywin32_ctypes_py3_none_any_8a151337\":[{\"filename\":\"pywin32_ctypes-0.2.3-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_pywin32_ctypes_sdist_d162dc04\":[{\"filename\":\"pywin32-ctypes-0.2.3.tar.gz\",\"version\":\"3.11\"}]}", + "readme_renderer": "{\"rules_python_publish_deps_311_readme_renderer_py3_none_any_2fbca89b\":[{\"filename\":\"readme_renderer-44.0-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_readme_renderer_sdist_8712034e\":[{\"filename\":\"readme_renderer-44.0.tar.gz\",\"version\":\"3.11\"}]}", + "requests": "{\"rules_python_publish_deps_311_requests_py3_none_any_70761cfe\":[{\"filename\":\"requests-2.32.3-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_requests_sdist_55365417\":[{\"filename\":\"requests-2.32.3.tar.gz\",\"version\":\"3.11\"}]}", + "requests_toolbelt": "{\"rules_python_publish_deps_311_requests_toolbelt_py2_none_any_cccfdd66\":[{\"filename\":\"requests_toolbelt-1.0.0-py2.py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_requests_toolbelt_sdist_7681a0a3\":[{\"filename\":\"requests-toolbelt-1.0.0.tar.gz\",\"version\":\"3.11\"}]}", + "rfc3986": "{\"rules_python_publish_deps_311_rfc3986_py2_none_any_50b1502b\":[{\"filename\":\"rfc3986-2.0.0-py2.py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_rfc3986_sdist_97aacf9d\":[{\"filename\":\"rfc3986-2.0.0.tar.gz\",\"version\":\"3.11\"}]}", + "rich": "{\"rules_python_publish_deps_311_rich_py3_none_any_9836f509\":[{\"filename\":\"rich-13.9.3-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_rich_sdist_bc1e01b8\":[{\"filename\":\"rich-13.9.3.tar.gz\",\"version\":\"3.11\"}]}", + "secretstorage": "{\"rules_python_publish_deps_311_secretstorage_py3_none_any_f356e662\":[{\"filename\":\"SecretStorage-3.3.3-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_secretstorage_sdist_2403533e\":[{\"filename\":\"SecretStorage-3.3.3.tar.gz\",\"version\":\"3.11\"}]}", + "twine": "{\"rules_python_publish_deps_311_twine_py3_none_any_215dbe7b\":[{\"filename\":\"twine-5.1.1-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_twine_sdist_9aa08251\":[{\"filename\":\"twine-5.1.1.tar.gz\",\"version\":\"3.11\"}]}", + "urllib3": "{\"rules_python_publish_deps_311_urllib3_py3_none_any_ca899ca0\":[{\"filename\":\"urllib3-2.2.3-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_urllib3_sdist_e7d814a8\":[{\"filename\":\"urllib3-2.2.3.tar.gz\",\"version\":\"3.11\"}]}", + "zipp": "{\"rules_python_publish_deps_311_zipp_py3_none_any_a817ac80\":[{\"filename\":\"zipp-3.20.2-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_zipp_sdist_bc9eb26f\":[{\"filename\":\"zipp-3.20.2.tar.gz\",\"version\":\"3.11\"}]}" }, "packages": [ "backports_tarfile", @@ -3524,6 +3807,10 @@ } } }, + "moduleExtensionMetadata": { + "useAllRepos": "NO", + "reproducible": false + }, "recordedRepoMappingEntries": [ [ "bazel_features~", diff --git a/bazel/ci/BUILD.bazel b/bazel/ci/BUILD.bazel index 455b136e5..e56bca608 100644 --- a/bazel/ci/BUILD.bazel +++ b/bazel/ci/BUILD.bazel @@ -1,7 +1,7 @@ load("@buildifier_prebuilt//:rules.bzl", "buildifier", "buildifier_test") load("@com_github_ash2k_bazel_tools//multirun:def.bzl", "multirun") load("@gazelle//:def.bzl", "gazelle") -load("@io_bazel_rules_go//go/private/rules:go_bin_for_host.bzl", "go_bin_for_host") +load("//bazel/ci:go_bin_for_host.bzl", "go_bin_for_host") load("//bazel/ci:proto_targets.bzl", "proto_targets") load("//bazel/sh:def.bzl", "noop_warn", "repo_command", "sh_template") diff --git a/bazel/ci/go_bin_for_host.bzl b/bazel/ci/go_bin_for_host.bzl new file mode 100644 index 000000000..97c91f366 --- /dev/null +++ b/bazel/ci/go_bin_for_host.bzl @@ -0,0 +1,29 @@ +""" +Go toolchain for the host platformS +Inspired by https://github.com/bazel-contrib/rules_go/blob/6e4fdcfeb1a333b54ab39ae3413d4ded46d8958d/go/private/rules/go_bin_for_host.bzl +""" + +load("@local_config_platform//:constraints.bzl", "HOST_CONSTRAINTS") + +GO_TOOLCHAIN = "@io_bazel_rules_go//go:toolchain" + +def _ensure_target_cfg(ctx): + if "-exec" in ctx.bin_dir.path or "/host/" in ctx.bin_dir.path: + fail("exec not found") + +def _go_bin_for_host_impl(ctx): + _ensure_target_cfg(ctx) + sdk = ctx.toolchains[GO_TOOLCHAIN].sdk + sdk_files = ctx.runfiles([sdk.go] + sdk.headers + sdk.libs + sdk.srcs + sdk.tools) + return [ + DefaultInfo( + files = depset([sdk.go]), + runfiles = sdk_files, + ), + ] + +go_bin_for_host = rule( + implementation = _go_bin_for_host_impl, + toolchains = [GO_TOOLCHAIN], + exec_compatible_with = HOST_CONSTRAINTS, +) diff --git a/bootstrapper/initproto/init.pb.go b/bootstrapper/initproto/init.pb.go index 2d3b04e93..e32c642d1 100644 --- a/bootstrapper/initproto/init.pb.go +++ b/bootstrapper/initproto/init.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.35.2 -// protoc v5.29.0--rc2 +// protoc v5.29.0--rc3 // source: bootstrapper/initproto/init.proto package initproto diff --git a/debugd/service/debugd.pb.go b/debugd/service/debugd.pb.go index ac419ec40..f8e3fe84a 100644 --- a/debugd/service/debugd.pb.go +++ b/debugd/service/debugd.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.35.2 -// protoc v5.29.0--rc2 +// protoc v5.29.0--rc3 // source: debugd/service/debugd.proto package service diff --git a/disk-mapper/recoverproto/recover.pb.go b/disk-mapper/recoverproto/recover.pb.go index 51fd53b2b..3aaaef9fe 100644 --- a/disk-mapper/recoverproto/recover.pb.go +++ b/disk-mapper/recoverproto/recover.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.35.2 -// protoc v5.29.0--rc2 +// protoc v5.29.0--rc3 // source: disk-mapper/recoverproto/recover.proto package recoverproto diff --git a/internal/versions/components/components.pb.go b/internal/versions/components/components.pb.go index 90083065e..329159a3e 100644 --- a/internal/versions/components/components.pb.go +++ b/internal/versions/components/components.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.35.2 -// protoc v5.29.0--rc2 +// protoc v5.29.0--rc3 // source: internal/versions/components/components.proto package components diff --git a/joinservice/joinproto/join.pb.go b/joinservice/joinproto/join.pb.go index bf5478c02..8e939281a 100644 --- a/joinservice/joinproto/join.pb.go +++ b/joinservice/joinproto/join.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.35.2 -// protoc v5.29.0--rc2 +// protoc v5.29.0--rc3 // source: joinservice/joinproto/join.proto package joinproto diff --git a/keyservice/keyserviceproto/keyservice.pb.go b/keyservice/keyserviceproto/keyservice.pb.go index c311c035a..5dee502e4 100644 --- a/keyservice/keyserviceproto/keyservice.pb.go +++ b/keyservice/keyserviceproto/keyservice.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.35.2 -// protoc v5.29.0--rc2 +// protoc v5.29.0--rc3 // source: keyservice/keyserviceproto/keyservice.proto package keyserviceproto diff --git a/upgrade-agent/upgradeproto/upgrade.pb.go b/upgrade-agent/upgradeproto/upgrade.pb.go index b7181ab52..92d2618e4 100644 --- a/upgrade-agent/upgradeproto/upgrade.pb.go +++ b/upgrade-agent/upgradeproto/upgrade.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.35.2 -// protoc v5.29.0--rc2 +// protoc v5.29.0--rc3 // source: upgrade-agent/upgradeproto/upgrade.proto package upgradeproto diff --git a/verify/verifyproto/verify.pb.go b/verify/verifyproto/verify.pb.go index 3e505ac69..3ffacb623 100644 --- a/verify/verifyproto/verify.pb.go +++ b/verify/verifyproto/verify.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.35.2 -// protoc v5.29.0--rc2 +// protoc v5.29.0--rc3 // source: verify/verifyproto/verify.proto package verifyproto From 37e21b2ff04f89b64e1dd98ad0a872217043c79b Mon Sep 17 00:00:00 2001 From: Markus Rudy Date: Wed, 11 Dec 2024 11:51:58 +0100 Subject: [PATCH 019/311] image: use uplosi from nixpkgs-unstable (#3543) * image: correct sharing profile for Azure gallery * nix: use uplosi from nixpkgs-unstable instead of GitHub --- flake.lock | 26 +------------------------- flake.nix | 10 +--------- internal/osimage/uplosi/uplosi.conf.in | 1 + 3 files changed, 3 insertions(+), 34 deletions(-) diff --git a/flake.lock b/flake.lock index 400acf062..8af6033f5 100644 --- a/flake.lock +++ b/flake.lock @@ -37,8 +37,7 @@ "root": { "inputs": { "flake-utils": "flake-utils", - "nixpkgsUnstable": "nixpkgsUnstable", - "uplosi": "uplosi" + "nixpkgsUnstable": "nixpkgsUnstable" } }, "systems": { @@ -55,29 +54,6 @@ "repo": "default", "type": "github" } - }, - "uplosi": { - "inputs": { - "flake-utils": [ - "flake-utils" - ], - "nixpkgs": [ - "nixpkgsUnstable" - ] - }, - "locked": { - "lastModified": 1733317519, - "narHash": "sha256-Q/qCh655Cga1nKs4qMF+2JYLxy+mLvFofKxukoREZ3Q=", - "owner": "edgelesssys", - "repo": "uplosi", - "rev": "137f7b6557087fc198e919b2ef8c167ecbe94f91", - "type": "github" - }, - "original": { - "owner": "edgelesssys", - "repo": "uplosi", - "type": "github" - } } }, "root": "root", diff --git a/flake.nix b/flake.nix index e972da05b..16bd15b4a 100644 --- a/flake.nix +++ b/flake.nix @@ -8,11 +8,6 @@ flake-utils = { url = "github:numtide/flake-utils"; }; - uplosi = { - url = "github:edgelesssys/uplosi"; - inputs.nixpkgs.follows = "nixpkgsUnstable"; - inputs.flake-utils.follows = "flake-utils"; - }; }; outputs = @@ -20,7 +15,6 @@ self, nixpkgsUnstable, flake-utils, - uplosi, }: flake-utils.lib.eachDefaultSystem ( system: @@ -56,13 +50,11 @@ ]); }) ); - - uplosiDev = uplosi.outputs.packages."${system}".uplosi; in { packages.mkosi = mkosiDev; - packages.uplosi = uplosiDev; + packages.uplosi = pkgsUnstable.uplosi; packages.openssl = callPackage ./nix/cc/openssl.nix { pkgs = pkgsUnstable; }; diff --git a/internal/osimage/uplosi/uplosi.conf.in b/internal/osimage/uplosi/uplosi.conf.in index 74ec45434..2978d31e0 100644 --- a/internal/osimage/uplosi/uplosi.conf.in +++ b/internal/osimage/uplosi/uplosi.conf.in @@ -12,6 +12,7 @@ subscriptionID = "0d202bbb-4fa7-4af8-8125-58c269a05435" location = "northeurope" resourceGroup = "constellation-images" sharingNamePrefix = "constellation" +sharingProfile = "community" sku = "constellation" publisher = "edgelesssys" From be1deb7d4bbab1cfe98ac91f6ba177e7bbcded4c Mon Sep 17 00:00:00 2001 From: Moritz Sanft <58110325+msanft@users.noreply.github.com> Date: Wed, 11 Dec 2024 17:04:13 +0100 Subject: [PATCH 020/311] Revert "operator: use GCP REST API for instance templates (#3361)" (#3544) This reverts commit effb086cd33129a3b4046419b4615b43d4380038. --- .../internal/cloud/gcp/client/BUILD.bazel | 2 - .../internal/cloud/gcp/client/api.go | 11 ++- .../internal/cloud/gcp/client/client.go | 11 +-- .../internal/cloud/gcp/client/client_test.go | 27 ++++-- .../internal/cloud/gcp/client/gcpwrappers.go | 21 ++-- .../internal/cloud/gcp/client/scalinggroup.go | 38 +++++--- .../cloud/gcp/client/scalinggroup_test.go | 97 +++++++++---------- 7 files changed, 113 insertions(+), 94 deletions(-) diff --git a/operators/constellation-node-operator/internal/cloud/gcp/client/BUILD.bazel b/operators/constellation-node-operator/internal/cloud/gcp/client/BUILD.bazel index 54100de98..72548055d 100644 --- a/operators/constellation-node-operator/internal/cloud/gcp/client/BUILD.bazel +++ b/operators/constellation-node-operator/internal/cloud/gcp/client/BUILD.bazel @@ -29,7 +29,6 @@ go_library( "@com_github_spf13_afero//:afero", "@com_google_cloud_go_compute//apiv1", "@com_google_cloud_go_compute//apiv1/computepb", - "@org_golang_google_api//compute/v1:compute", "@org_golang_google_api//googleapi", "@org_golang_google_api//iterator", "@org_golang_google_protobuf//proto", @@ -62,7 +61,6 @@ go_test( "@com_github_stretchr_testify//require", "@com_google_cloud_go_compute//apiv1", "@com_google_cloud_go_compute//apiv1/computepb", - "@org_golang_google_api//compute/v1:compute", "@org_golang_google_api//googleapi", "@org_golang_google_api//iterator", "@org_golang_google_protobuf//proto", diff --git a/operators/constellation-node-operator/internal/cloud/gcp/client/api.go b/operators/constellation-node-operator/internal/cloud/gcp/client/api.go index 15c56ece5..12966da9e 100644 --- a/operators/constellation-node-operator/internal/cloud/gcp/client/api.go +++ b/operators/constellation-node-operator/internal/cloud/gcp/client/api.go @@ -12,7 +12,6 @@ import ( compute "cloud.google.com/go/compute/apiv1" "cloud.google.com/go/compute/apiv1/computepb" "github.com/googleapis/gax-go/v2" - computeREST "google.golang.org/api/compute/v1" ) type projectAPI interface { @@ -28,9 +27,13 @@ type instanceAPI interface { } type instanceTemplateAPI interface { - Get(projectID, template string) (*computeREST.InstanceTemplate, error) - Delete(projectID, template string) (*computeREST.Operation, error) - Insert(projectID string, template *computeREST.InstanceTemplate) (*computeREST.Operation, error) + Close() error + Get(ctx context.Context, req *computepb.GetInstanceTemplateRequest, + opts ...gax.CallOption) (*computepb.InstanceTemplate, error) + Delete(ctx context.Context, req *computepb.DeleteInstanceTemplateRequest, + opts ...gax.CallOption) (Operation, error) + Insert(ctx context.Context, req *computepb.InsertInstanceTemplateRequest, + opts ...gax.CallOption) (Operation, error) } type instanceGroupManagersAPI interface { diff --git a/operators/constellation-node-operator/internal/cloud/gcp/client/client.go b/operators/constellation-node-operator/internal/cloud/gcp/client/client.go index e9dbc3a4e..aa0a46ae7 100644 --- a/operators/constellation-node-operator/internal/cloud/gcp/client/client.go +++ b/operators/constellation-node-operator/internal/cloud/gcp/client/client.go @@ -14,7 +14,6 @@ import ( compute "cloud.google.com/go/compute/apiv1" "github.com/spf13/afero" - computeREST "google.golang.org/api/compute/v1" ) // Client is a client for the Google Compute Engine. @@ -49,17 +48,12 @@ func New(ctx context.Context, configPath string) (*Client, error) { return nil, err } closers = append(closers, insAPI) - - // TODO(msanft): Go back to protobuf-based API when it supports setting - // a confidential instance type. - // See https://github.com/googleapis/google-cloud-go/issues/10873 for the current status. - restClient, err := computeREST.NewService(ctx) + templAPI, err := compute.NewInstanceTemplatesRESTClient(ctx) if err != nil { _ = closeAll(closers) return nil, err } - templAPI := computeREST.NewInstanceTemplatesService(restClient) - + closers = append(closers, templAPI) groupAPI, err := compute.NewInstanceGroupManagersRESTClient(ctx) if err != nil { _ = closeAll(closers) @@ -87,6 +81,7 @@ func (c *Client) Close() error { closers := []closer{ c.projectAPI, c.instanceAPI, + c.instanceTemplateAPI, c.instanceGroupManagersAPI, c.diskAPI, } diff --git a/operators/constellation-node-operator/internal/cloud/gcp/client/client_test.go b/operators/constellation-node-operator/internal/cloud/gcp/client/client_test.go index 58816c561..e7779453b 100644 --- a/operators/constellation-node-operator/internal/cloud/gcp/client/client_test.go +++ b/operators/constellation-node-operator/internal/cloud/gcp/client/client_test.go @@ -12,7 +12,6 @@ import ( compute "cloud.google.com/go/compute/apiv1" "cloud.google.com/go/compute/apiv1/computepb" "github.com/googleapis/gax-go/v2" - computeREST "google.golang.org/api/compute/v1" "google.golang.org/api/iterator" "google.golang.org/protobuf/proto" ) @@ -48,7 +47,7 @@ func (a stubInstanceAPI) Get(_ context.Context, _ *computepb.GetInstanceRequest, } type stubInstanceTemplateAPI struct { - template *computeREST.InstanceTemplate + template *computepb.InstanceTemplate getErr error deleteErr error insertErr error @@ -58,16 +57,30 @@ func (a stubInstanceTemplateAPI) Close() error { return nil } -func (a stubInstanceTemplateAPI) Get(_, _ string) (*computeREST.InstanceTemplate, error) { +func (a stubInstanceTemplateAPI) Get(_ context.Context, _ *computepb.GetInstanceTemplateRequest, + _ ...gax.CallOption, +) (*computepb.InstanceTemplate, error) { return a.template, a.getErr } -func (a stubInstanceTemplateAPI) Delete(_, _ string) (*computeREST.Operation, error) { - return &computeREST.Operation{}, a.deleteErr +func (a stubInstanceTemplateAPI) Delete(_ context.Context, _ *computepb.DeleteInstanceTemplateRequest, + _ ...gax.CallOption, +) (Operation, error) { + return &stubOperation{ + &computepb.Operation{ + Name: proto.String("name"), + }, + }, a.deleteErr } -func (a stubInstanceTemplateAPI) Insert(_ string, _ *computeREST.InstanceTemplate) (*computeREST.Operation, error) { - return &computeREST.Operation{}, a.insertErr +func (a stubInstanceTemplateAPI) Insert(_ context.Context, _ *computepb.InsertInstanceTemplateRequest, + _ ...gax.CallOption, +) (Operation, error) { + return &stubOperation{ + &computepb.Operation{ + Name: proto.String("name"), + }, + }, a.insertErr } type stubInstanceGroupManagersAPI struct { diff --git a/operators/constellation-node-operator/internal/cloud/gcp/client/gcpwrappers.go b/operators/constellation-node-operator/internal/cloud/gcp/client/gcpwrappers.go index da87f596c..3d34efba7 100644 --- a/operators/constellation-node-operator/internal/cloud/gcp/client/gcpwrappers.go +++ b/operators/constellation-node-operator/internal/cloud/gcp/client/gcpwrappers.go @@ -12,27 +12,26 @@ import ( compute "cloud.google.com/go/compute/apiv1" "cloud.google.com/go/compute/apiv1/computepb" "github.com/googleapis/gax-go/v2" - computeREST "google.golang.org/api/compute/v1" ) type instanceTemplateClient struct { - *computeREST.InstanceTemplatesService + *compute.InstanceTemplatesClient } func (c *instanceTemplateClient) Close() error { - return nil // no-op + return c.InstanceTemplatesClient.Close() } -func (c *instanceTemplateClient) Get(project, template string) (*computeREST.InstanceTemplate, error) { - return c.InstanceTemplatesService.Get(project, template).Do() +func (c *instanceTemplateClient) Delete(ctx context.Context, req *computepb.DeleteInstanceTemplateRequest, + opts ...gax.CallOption, +) (Operation, error) { + return c.InstanceTemplatesClient.Delete(ctx, req, opts...) } -func (c *instanceTemplateClient) Delete(project, template string) (*computeREST.Operation, error) { - return c.InstanceTemplatesService.Delete(project, template).Do() -} - -func (c *instanceTemplateClient) Insert(projectID string, template *computeREST.InstanceTemplate) (*computeREST.Operation, error) { - return c.InstanceTemplatesService.Insert(projectID, template).Do() +func (c *instanceTemplateClient) Insert(ctx context.Context, req *computepb.InsertInstanceTemplateRequest, + opts ...gax.CallOption, +) (Operation, error) { + return c.InstanceTemplatesClient.Insert(ctx, req, opts...) } type instanceGroupManagersClient struct { diff --git a/operators/constellation-node-operator/internal/cloud/gcp/client/scalinggroup.go b/operators/constellation-node-operator/internal/cloud/gcp/client/scalinggroup.go index 3f10af753..d5bef4ab7 100644 --- a/operators/constellation-node-operator/internal/cloud/gcp/client/scalinggroup.go +++ b/operators/constellation-node-operator/internal/cloud/gcp/client/scalinggroup.go @@ -16,7 +16,6 @@ import ( "github.com/edgelesssys/constellation/v2/internal/constants" updatev1alpha1 "github.com/edgelesssys/constellation/v2/operators/constellation-node-operator/api/v1alpha1" cspapi "github.com/edgelesssys/constellation/v2/operators/constellation-node-operator/internal/cloud/api" - computeREST "google.golang.org/api/compute/v1" "google.golang.org/api/iterator" ) @@ -50,22 +49,29 @@ func (c *Client) SetScalingGroupImage(ctx context.Context, scalingGroupID, image } // clone template with desired image - if instanceTemplate.Name == "" { + if instanceTemplate.Name == nil { return fmt.Errorf("instance template of scaling group %q has no name", scalingGroupID) } - instanceTemplate.Properties.Disks[0].InitializeParams.SourceImage = imageURI - newTemplateName, err := generateInstanceTemplateName(instanceTemplate.Name) + instanceTemplate.Properties.Disks[0].InitializeParams.SourceImage = &imageURI + newTemplateName, err := generateInstanceTemplateName(*instanceTemplate.Name) if err != nil { return err } - instanceTemplate.Name = newTemplateName - if _, err := c.instanceTemplateAPI.Insert(project, instanceTemplate); err != nil { + instanceTemplate.Name = &newTemplateName + op, err := c.instanceTemplateAPI.Insert(ctx, &computepb.InsertInstanceTemplateRequest{ + Project: project, + InstanceTemplateResource: instanceTemplate, + }) + if err != nil { return fmt.Errorf("cloning instance template: %w", err) } + if err := op.Wait(ctx); err != nil { + return fmt.Errorf("waiting for cloned instance template: %w", err) + } newTemplateURI := joinInstanceTemplateURI(project, newTemplateName) // update instance group manager to use new template - op, err := c.instanceGroupManagersAPI.SetInstanceTemplate(ctx, &computepb.SetInstanceTemplateInstanceGroupManagerRequest{ + op, err = c.instanceGroupManagersAPI.SetInstanceTemplate(ctx, &computepb.SetInstanceTemplateInstanceGroupManagerRequest{ InstanceGroupManager: instanceGroupName, Project: project, Zone: zone, @@ -129,7 +135,10 @@ func (c *Client) ListScalingGroups(ctx context.Context, uid string) ([]cspapi.Sc if len(templateURI) < 1 { continue // invalid template URI } - template, err := c.instanceTemplateAPI.Get(c.projectID, templateURI[len(templateURI)-1]) + template, err := c.instanceTemplateAPI.Get(ctx, &computepb.GetInstanceTemplateRequest{ + Project: c.projectID, + InstanceTemplate: templateURI[len(templateURI)-1], + }) if err != nil { retErr = errors.Join(retErr, fmt.Errorf("getting instance template %q: %w", templateURI[len(templateURI)-1], err)) continue @@ -190,7 +199,7 @@ func (c *Client) ListScalingGroups(ctx context.Context, uid string) ([]cspapi.Sc return results, nil } -func (c *Client) getScalingGroupTemplate(ctx context.Context, scalingGroupID string) (*computeREST.InstanceTemplate, error) { +func (c *Client) getScalingGroupTemplate(ctx context.Context, scalingGroupID string) (*computepb.InstanceTemplate, error) { project, zone, instanceGroupName, err := splitInstanceGroupID(scalingGroupID) if err != nil { return nil, err @@ -210,19 +219,22 @@ func (c *Client) getScalingGroupTemplate(ctx context.Context, scalingGroupID str if err != nil { return nil, fmt.Errorf("splitting instance template name: %w", err) } - instanceTemplate, err := c.instanceTemplateAPI.Get(instanceTemplateProject, instanceTemplateName) + instanceTemplate, err := c.instanceTemplateAPI.Get(ctx, &computepb.GetInstanceTemplateRequest{ + InstanceTemplate: instanceTemplateName, + Project: instanceTemplateProject, + }) if err != nil { return nil, fmt.Errorf("getting instance template %q: %w", instanceTemplateName, err) } return instanceTemplate, nil } -func instanceTemplateSourceImage(instanceTemplate *computeREST.InstanceTemplate) (string, error) { +func instanceTemplateSourceImage(instanceTemplate *computepb.InstanceTemplate) (string, error) { if instanceTemplate.Properties == nil || len(instanceTemplate.Properties.Disks) == 0 || instanceTemplate.Properties.Disks[0].InitializeParams == nil || - instanceTemplate.Properties.Disks[0].InitializeParams.SourceImage == "" { + instanceTemplate.Properties.Disks[0].InitializeParams.SourceImage == nil { return "", errors.New("instance template has no source image") } - return uriNormalize(instanceTemplate.Properties.Disks[0].InitializeParams.SourceImage), nil + return uriNormalize(*instanceTemplate.Properties.Disks[0].InitializeParams.SourceImage), nil } diff --git a/operators/constellation-node-operator/internal/cloud/gcp/client/scalinggroup_test.go b/operators/constellation-node-operator/internal/cloud/gcp/client/scalinggroup_test.go index 01629951d..5fd3b1170 100644 --- a/operators/constellation-node-operator/internal/cloud/gcp/client/scalinggroup_test.go +++ b/operators/constellation-node-operator/internal/cloud/gcp/client/scalinggroup_test.go @@ -16,7 +16,6 @@ import ( cspapi "github.com/edgelesssys/constellation/v2/operators/constellation-node-operator/internal/cloud/api" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - computeREST "google.golang.org/api/compute/v1" "google.golang.org/protobuf/proto" ) @@ -24,7 +23,7 @@ func TestGetScalingGroupImage(t *testing.T) { testCases := map[string]struct { scalingGroupID string instanceGroupManagerTemplateID *string - instanceTemplate *computeREST.InstanceTemplate + instanceTemplate *computepb.InstanceTemplate getInstanceGroupManagerErr error getInstanceTemplateErr error wantImage string @@ -33,12 +32,12 @@ func TestGetScalingGroupImage(t *testing.T) { "getting image works": { scalingGroupID: "projects/project/zones/zone/instanceGroupManagers/instance-group", instanceGroupManagerTemplateID: proto.String("projects/project/global/instanceTemplates/instance-template"), - instanceTemplate: &computeREST.InstanceTemplate{ - Properties: &computeREST.InstanceProperties{ - Disks: []*computeREST.AttachedDisk{ + instanceTemplate: &computepb.InstanceTemplate{ + Properties: &computepb.InstanceProperties{ + Disks: []*computepb.AttachedDisk{ { - InitializeParams: &computeREST.AttachedDiskInitializeParams{ - SourceImage: "https://www.googleapis.com/compute/v1/projects/project/global/images/image", + InitializeParams: &computepb.AttachedDiskInitializeParams{ + SourceImage: proto.String("https://www.googleapis.com/compute/v1/projects/project/global/images/image"), }, }, }, @@ -73,8 +72,8 @@ func TestGetScalingGroupImage(t *testing.T) { "instance template has no disks": { scalingGroupID: "projects/project/zones/zone/instanceGroupManagers/instance-group", instanceGroupManagerTemplateID: proto.String("projects/project/global/instanceTemplates/instance-template"), - instanceTemplate: &computeREST.InstanceTemplate{ - Properties: &computeREST.InstanceProperties{}, + instanceTemplate: &computepb.InstanceTemplate{ + Properties: &computepb.InstanceProperties{}, }, wantErr: true, }, @@ -113,7 +112,7 @@ func TestSetScalingGroupImage(t *testing.T) { scalingGroupID string imageURI string instanceGroupManagerTemplateID *string - instanceTemplate *computeREST.InstanceTemplate + instanceTemplate *computepb.InstanceTemplate getInstanceGroupManagerErr error getInstanceTemplateErr error setInstanceTemplateErr error @@ -124,13 +123,13 @@ func TestSetScalingGroupImage(t *testing.T) { scalingGroupID: "projects/project/zones/zone/instanceGroupManagers/instance-group", imageURI: "projects/project/global/images/image-2", instanceGroupManagerTemplateID: proto.String("projects/project/global/instanceTemplates/instance-template"), - instanceTemplate: &computeREST.InstanceTemplate{ - Name: "instance-template", - Properties: &computeREST.InstanceProperties{ - Disks: []*computeREST.AttachedDisk{ + instanceTemplate: &computepb.InstanceTemplate{ + Name: proto.String("instance-template"), + Properties: &computepb.InstanceProperties{ + Disks: []*computepb.AttachedDisk{ { - InitializeParams: &computeREST.AttachedDiskInitializeParams{ - SourceImage: "https://www.googleapis.com/compute/v1/projects/project/global/images/image-1", + InitializeParams: &computepb.AttachedDiskInitializeParams{ + SourceImage: proto.String("https://www.googleapis.com/compute/v1/projects/project/global/images/image-1"), }, }, }, @@ -141,13 +140,13 @@ func TestSetScalingGroupImage(t *testing.T) { scalingGroupID: "projects/project/zones/zone/instanceGroupManagers/instance-group", imageURI: "projects/project/global/images/image", instanceGroupManagerTemplateID: proto.String("projects/project/global/instanceTemplates/instance-template"), - instanceTemplate: &computeREST.InstanceTemplate{ - Name: "instance-template", - Properties: &computeREST.InstanceProperties{ - Disks: []*computeREST.AttachedDisk{ + instanceTemplate: &computepb.InstanceTemplate{ + Name: proto.String("instance-template"), + Properties: &computepb.InstanceProperties{ + Disks: []*computepb.AttachedDisk{ { - InitializeParams: &computeREST.AttachedDiskInitializeParams{ - SourceImage: "https://www.googleapis.com/compute/v1/projects/project/global/images/image", + InitializeParams: &computepb.AttachedDiskInitializeParams{ + SourceImage: proto.String("https://www.googleapis.com/compute/v1/projects/project/global/images/image"), }, }, }, @@ -183,8 +182,8 @@ func TestSetScalingGroupImage(t *testing.T) { "instance template has no disks": { scalingGroupID: "projects/project/zones/zone/instanceGroupManagers/instance-group", instanceGroupManagerTemplateID: proto.String("projects/project/global/instanceTemplates/instance-template"), - instanceTemplate: &computeREST.InstanceTemplate{ - Properties: &computeREST.InstanceProperties{}, + instanceTemplate: &computepb.InstanceTemplate{ + Properties: &computepb.InstanceProperties{}, }, wantErr: true, }, @@ -192,12 +191,12 @@ func TestSetScalingGroupImage(t *testing.T) { scalingGroupID: "projects/project/zones/zone/instanceGroupManagers/instance-group", imageURI: "projects/project/global/images/image-2", instanceGroupManagerTemplateID: proto.String("projects/project/global/instanceTemplates/instance-template"), - instanceTemplate: &computeREST.InstanceTemplate{ - Properties: &computeREST.InstanceProperties{ - Disks: []*computeREST.AttachedDisk{ + instanceTemplate: &computepb.InstanceTemplate{ + Properties: &computepb.InstanceProperties{ + Disks: []*computepb.AttachedDisk{ { - InitializeParams: &computeREST.AttachedDiskInitializeParams{ - SourceImage: "https://www.googleapis.com/compute/v1/projects/project/global/images/image-1", + InitializeParams: &computepb.AttachedDiskInitializeParams{ + SourceImage: proto.String("https://www.googleapis.com/compute/v1/projects/project/global/images/image-1"), }, }, }, @@ -209,13 +208,13 @@ func TestSetScalingGroupImage(t *testing.T) { scalingGroupID: "projects/project/zones/zone/instanceGroupManagers/instance-group", imageURI: "projects/project/global/images/image-2", instanceGroupManagerTemplateID: proto.String("projects/project/global/instanceTemplates/instance-template"), - instanceTemplate: &computeREST.InstanceTemplate{ - Name: "instance-template-999999999999999999999", - Properties: &computeREST.InstanceProperties{ - Disks: []*computeREST.AttachedDisk{ + instanceTemplate: &computepb.InstanceTemplate{ + Name: proto.String("instance-template-999999999999999999999"), + Properties: &computepb.InstanceProperties{ + Disks: []*computepb.AttachedDisk{ { - InitializeParams: &computeREST.AttachedDiskInitializeParams{ - SourceImage: "https://www.googleapis.com/compute/v1/projects/project/global/images/image-1", + InitializeParams: &computepb.AttachedDiskInitializeParams{ + SourceImage: proto.String("https://www.googleapis.com/compute/v1/projects/project/global/images/image-1"), }, }, }, @@ -227,13 +226,13 @@ func TestSetScalingGroupImage(t *testing.T) { scalingGroupID: "projects/project/zones/zone/instanceGroupManagers/instance-group", imageURI: "projects/project/global/images/image-2", instanceGroupManagerTemplateID: proto.String("projects/project/global/instanceTemplates/instance-template"), - instanceTemplate: &computeREST.InstanceTemplate{ - Name: "instance-template", - Properties: &computeREST.InstanceProperties{ - Disks: []*computeREST.AttachedDisk{ + instanceTemplate: &computepb.InstanceTemplate{ + Name: proto.String("instance-template"), + Properties: &computepb.InstanceProperties{ + Disks: []*computepb.AttachedDisk{ { - InitializeParams: &computeREST.AttachedDiskInitializeParams{ - SourceImage: "https://www.googleapis.com/compute/v1/projects/project/global/images/image-1", + InitializeParams: &computepb.AttachedDiskInitializeParams{ + SourceImage: proto.String("https://www.googleapis.com/compute/v1/projects/project/global/images/image-1"), }, }, }, @@ -246,13 +245,13 @@ func TestSetScalingGroupImage(t *testing.T) { scalingGroupID: "projects/project/zones/zone/instanceGroupManagers/instance-group", imageURI: "projects/project/global/images/image-2", instanceGroupManagerTemplateID: proto.String("projects/project/global/instanceTemplates/instance-template"), - instanceTemplate: &computeREST.InstanceTemplate{ - Name: "instance-template", - Properties: &computeREST.InstanceProperties{ - Disks: []*computeREST.AttachedDisk{ + instanceTemplate: &computepb.InstanceTemplate{ + Name: proto.String("instance-template"), + Properties: &computepb.InstanceProperties{ + Disks: []*computepb.AttachedDisk{ { - InitializeParams: &computeREST.AttachedDiskInitializeParams{ - SourceImage: "https://www.googleapis.com/compute/v1/projects/project/global/images/image-1", + InitializeParams: &computepb.AttachedDiskInitializeParams{ + SourceImage: proto.String("https://www.googleapis.com/compute/v1/projects/project/global/images/image-1"), }, }, }, @@ -449,8 +448,8 @@ func TestListScalingGroups(t *testing.T) { }, }, instanceTemplateAPI: &stubInstanceTemplateAPI{ - template: &computeREST.InstanceTemplate{ - Properties: &computeREST.InstanceProperties{ + template: &computepb.InstanceTemplate{ + Properties: &computepb.InstanceProperties{ Labels: tc.templateLabels, }, }, From 7d0aca054b9eaea92f55ee00a5e99755d3cf9a36 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 12 Dec 2024 09:17:21 +0100 Subject: [PATCH 021/311] deps: update module golang.org/x/crypto to v0.31.0 [SECURITY] (#3546) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- go.mod | 10 +++++----- go.sum | 20 ++++++++++---------- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/go.mod b/go.mod index a7da716fe..0dde424e5 100644 --- a/go.mod +++ b/go.mod @@ -115,11 +115,11 @@ require ( go.etcd.io/etcd/client/pkg/v3 v3.5.17 go.etcd.io/etcd/client/v3 v3.5.17 go.uber.org/goleak v1.3.0 - golang.org/x/crypto v0.29.0 + golang.org/x/crypto v0.31.0 golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f golang.org/x/mod v0.22.0 - golang.org/x/sys v0.27.0 - golang.org/x/text v0.20.0 + golang.org/x/sys v0.28.0 + golang.org/x/text v0.21.0 golang.org/x/tools v0.27.0 google.golang.org/api v0.209.0 google.golang.org/grpc v1.68.0 @@ -373,8 +373,8 @@ require ( go.uber.org/zap v1.27.0 // indirect golang.org/x/net v0.31.0 // indirect golang.org/x/oauth2 v0.24.0 // indirect - golang.org/x/sync v0.9.0 // indirect - golang.org/x/term v0.26.0 // indirect + golang.org/x/sync v0.10.0 // indirect + golang.org/x/term v0.27.0 // indirect golang.org/x/time v0.8.0 // indirect gomodules.xyz/jsonpatch/v2 v2.4.0 // indirect google.golang.org/appengine v1.6.8 // indirect diff --git a/go.sum b/go.sum index 081bdc46c..73ed78cbd 100644 --- a/go.sum +++ b/go.sum @@ -925,8 +925,8 @@ golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5y golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.6.0/go.mod h1:OFC/31mSvZgRz0V1QTNCzfAI1aIRzbiufJtkMIlEp58= golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU= -golang.org/x/crypto v0.29.0 h1:L5SG1JTTXupVV3n6sUqMTeWbjAyfPwoda2DLX8J8FrQ= -golang.org/x/crypto v0.29.0/go.mod h1:+F4F4N5hv6v38hfeYwTdx20oUvLLc+QfrE9Ax9HtgRg= +golang.org/x/crypto v0.31.0 h1:ihbySMvVjLAeSH1IbfcRTkD/iNscyz8rGzjF/E5hV6U= +golang.org/x/crypto v0.31.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f h1:XdNn9LlyWAhLVp6P/i8QYBW+hlyhrhei9uErw2B5GJo= golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f/go.mod h1:D5SMRVC3C2/4+F/DB1wZsLRnSNimn2Sp/NPsCrsv8ak= @@ -969,8 +969,8 @@ golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.9.0 h1:fEo0HyrW1GIgZdpbhCRO0PkJajUS5H9IFUztCgEo2jQ= -golang.org/x/sync v0.9.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.10.0 h1:3NQrjDixjgGwUOCaF8w2+VYHv0Ve/vGYSbdkTa98gmQ= +golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -1000,16 +1000,16 @@ golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.27.0 h1:wBqf8DvsY9Y/2P8gAfPDEYNuS30J4lPHJxXSb/nJZ+s= -golang.org/x/sys v0.27.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= +golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.0.0-20220526004731-065cf7ba2467/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk= -golang.org/x/term v0.26.0 h1:WEQa6V3Gja/BhNxg540hBip/kkaYtRg3cxg4oXSw4AU= -golang.org/x/term v0.26.0/go.mod h1:Si5m1o57C5nBNQo5z1iq+XDijt21BDBDp2bK0QI8e3E= +golang.org/x/term v0.27.0 h1:WP60Sv1nlK1T6SupCHbXzSaN0b9wUmsPoRS9b61A23Q= +golang.org/x/term v0.27.0/go.mod h1:iMsnZpn0cago0GOrHO2+Y7u7JPn5AylBrcoWkElMTSM= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= @@ -1019,8 +1019,8 @@ golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= -golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug= -golang.org/x/text v0.20.0/go.mod h1:D4IsuqiFMhST5bX19pQ9ikHC2GsaKyk/oF+pn3ducp4= +golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo= +golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= golang.org/x/time v0.8.0 h1:9i3RxcPv3PZnitoVGMPDKZSq1xW1gK1Xy3ArNOGZfEg= golang.org/x/time v0.8.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= From 1495a7f6ddfe8e490259aa565216d886c7262840 Mon Sep 17 00:00:00 2001 From: Moritz Sanft <58110325+msanft@users.noreply.github.com> Date: Thu, 12 Dec 2024 09:45:24 +0100 Subject: [PATCH 022/311] docs: correct STACKIT IDs (#3545) We got OpenStack and STACKIT IDs mixed up in our documentation previously. The OpenStack project ID is required in the `clouds.yaml` file, while the STACKIT project ID is required in the Constellation config. This fixes the warning for the OpenStack project ID in `clouds.yaml`, and adds an additional warning for the STACKIT project ID in the configuration section. --- docs/docs/getting-started/first-steps.md | 6 ++++++ docs/docs/getting-started/install.md | 4 ++-- .../version-2.19/getting-started/first-steps.md | 6 ++++++ docs/versioned_docs/version-2.19/getting-started/install.md | 2 +- .../version-2.20/getting-started/first-steps.md | 6 ++++++ docs/versioned_docs/version-2.20/getting-started/install.md | 2 +- 6 files changed, 22 insertions(+), 4 deletions(-) diff --git a/docs/docs/getting-started/first-steps.md b/docs/docs/getting-started/first-steps.md index 128ac2849..b197f659d 100644 --- a/docs/docs/getting-started/first-steps.md +++ b/docs/docs/getting-started/first-steps.md @@ -117,6 +117,12 @@ If you encounter any problem with the following steps, make sure to use the [lat * `stackitProjectID`: STACKIT project id (can be found after login on the [STACKIT portal](https://portal.stackit.cloud)) + :::caution + + `stackitProjectID` refers to the ID of your STACKIT project. The STACKIT portal also shows the OpenStack ID that's associated with your project in some places. Make sure you insert the STACKIT project ID in the `constellation-conf.yaml` file. It's of the format `XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX`. + + ::: + diff --git a/docs/docs/getting-started/install.md b/docs/docs/getting-started/install.md index fa481d9b8..f7b36770a 100644 --- a/docs/docs/getting-started/install.md +++ b/docs/docs/getting-started/install.md @@ -408,7 +408,7 @@ You need to authenticate with the infrastructure API (OpenStack) and create a se auth_url: https://keystone.api.iaas.eu01.stackit.cloud/v3 username: REPLACE_WITH_UAT_USERNAME password: REPLACE_WITH_UAT_PASSWORD - project_id: REPLACE_WITH_STACKIT_PROJECT_ID + project_id: REPLACE_WITH_OPENSTACK_PROJECT_ID project_name: REPLACE_WITH_STACKIT_PROJECT_NAME user_domain_name: portal_mvp project_domain_name: portal_mvp @@ -418,7 +418,7 @@ You need to authenticate with the infrastructure API (OpenStack) and create a se :::caution -`project_id` refers to the ID of your STACKIT project. The STACKIT portal also shows the OpenStack ID that's associated with your project in some places. Make sure you insert the STACKIT project ID in the `clouds.yaml` file. It's of the format XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX. +`project_id` refers to the ID of your OpenStack project. The STACKIT portal also shows the STACKIT ID that's associated with your project in some places. Make sure you insert the OpenStack project ID in the `clouds.yaml` file. ::: diff --git a/docs/versioned_docs/version-2.19/getting-started/first-steps.md b/docs/versioned_docs/version-2.19/getting-started/first-steps.md index 128ac2849..b197f659d 100644 --- a/docs/versioned_docs/version-2.19/getting-started/first-steps.md +++ b/docs/versioned_docs/version-2.19/getting-started/first-steps.md @@ -117,6 +117,12 @@ If you encounter any problem with the following steps, make sure to use the [lat * `stackitProjectID`: STACKIT project id (can be found after login on the [STACKIT portal](https://portal.stackit.cloud)) + :::caution + + `stackitProjectID` refers to the ID of your STACKIT project. The STACKIT portal also shows the OpenStack ID that's associated with your project in some places. Make sure you insert the STACKIT project ID in the `constellation-conf.yaml` file. It's of the format `XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX`. + + ::: + diff --git a/docs/versioned_docs/version-2.19/getting-started/install.md b/docs/versioned_docs/version-2.19/getting-started/install.md index bc0a8c959..29be1e7f6 100644 --- a/docs/versioned_docs/version-2.19/getting-started/install.md +++ b/docs/versioned_docs/version-2.19/getting-started/install.md @@ -418,7 +418,7 @@ You need to authenticate with the infrastructure API (OpenStack) and create a se :::caution -`project_id` refers to the ID of your STACKIT project. The STACKIT portal also shows the OpenStack ID that's associated with your project in some places. Make sure you insert the STACKIT project ID in the `clouds.yaml` file. It's of the format "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX". +`project_id` refers to the ID of your OpenStack project. The STACKIT portal also shows the STACKIT ID that's associated with your project in some places. Make sure you insert the OpenStack project ID in the `clouds.yaml` file. ::: diff --git a/docs/versioned_docs/version-2.20/getting-started/first-steps.md b/docs/versioned_docs/version-2.20/getting-started/first-steps.md index 128ac2849..b197f659d 100644 --- a/docs/versioned_docs/version-2.20/getting-started/first-steps.md +++ b/docs/versioned_docs/version-2.20/getting-started/first-steps.md @@ -117,6 +117,12 @@ If you encounter any problem with the following steps, make sure to use the [lat * `stackitProjectID`: STACKIT project id (can be found after login on the [STACKIT portal](https://portal.stackit.cloud)) + :::caution + + `stackitProjectID` refers to the ID of your STACKIT project. The STACKIT portal also shows the OpenStack ID that's associated with your project in some places. Make sure you insert the STACKIT project ID in the `constellation-conf.yaml` file. It's of the format `XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX`. + + ::: + diff --git a/docs/versioned_docs/version-2.20/getting-started/install.md b/docs/versioned_docs/version-2.20/getting-started/install.md index fa481d9b8..29be1e7f6 100644 --- a/docs/versioned_docs/version-2.20/getting-started/install.md +++ b/docs/versioned_docs/version-2.20/getting-started/install.md @@ -418,7 +418,7 @@ You need to authenticate with the infrastructure API (OpenStack) and create a se :::caution -`project_id` refers to the ID of your STACKIT project. The STACKIT portal also shows the OpenStack ID that's associated with your project in some places. Make sure you insert the STACKIT project ID in the `clouds.yaml` file. It's of the format XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX. +`project_id` refers to the ID of your OpenStack project. The STACKIT portal also shows the STACKIT ID that's associated with your project in some places. Make sure you insert the OpenStack project ID in the `clouds.yaml` file. ::: From 2da0ed6da00d2c95541107958be8d1908298e76c Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 13 Dec 2024 08:12:59 +0100 Subject: [PATCH 023/311] deps: update GitHub action dependencies (#3548) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/build-ccm-gcp.yml | 2 +- .github/workflows/build-os-image-scheduled.yml | 2 +- .github/workflows/codeql.yml | 6 +++--- .github/workflows/draft-release.yml | 4 ++-- .github/workflows/release.yml | 2 +- .github/workflows/scorecard.yml | 2 +- .github/workflows/test-operator-codegen.yml | 2 +- 7 files changed, 10 insertions(+), 10 deletions(-) diff --git a/.github/workflows/build-ccm-gcp.yml b/.github/workflows/build-ccm-gcp.yml index 75e8ce0a7..e74f71961 100644 --- a/.github/workflows/build-ccm-gcp.yml +++ b/.github/workflows/build-ccm-gcp.yml @@ -29,7 +29,7 @@ jobs: fetch-depth: 0 - name: Setup Go environment - uses: actions/setup-go@41dfa10bad2bb2ae585af6ee5bb4d7d973ad74ed # v5.1.0 + uses: actions/setup-go@3041bf56c941b39c61721a86cd11f3bb1338122a # v5.2.0 with: go-version: "1.23.2" cache: false diff --git a/.github/workflows/build-os-image-scheduled.yml b/.github/workflows/build-os-image-scheduled.yml index b4376d67b..8fc51d407 100644 --- a/.github/workflows/build-os-image-scheduled.yml +++ b/.github/workflows/build-os-image-scheduled.yml @@ -65,7 +65,7 @@ jobs: token: ${{ secrets.CI_COMMIT_PUSH_PR }} - name: Setup Go environment - uses: actions/setup-go@41dfa10bad2bb2ae585af6ee5bb4d7d973ad74ed # v5.1.0 + uses: actions/setup-go@3041bf56c941b39c61721a86cd11f3bb1338122a # v5.2.0 with: go-version: "1.23.2" cache: false diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index 4b30b1f15..d206fa4fa 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -38,13 +38,13 @@ jobs: - name: Setup Go environment if: matrix.language == 'go' - uses: actions/setup-go@41dfa10bad2bb2ae585af6ee5bb4d7d973ad74ed # v5.1.0 + uses: actions/setup-go@3041bf56c941b39c61721a86cd11f3bb1338122a # v5.2.0 with: go-version: "1.23.2" cache: false - name: Initialize CodeQL - uses: github/codeql-action/init@aa578102511db1f4524ed59b8cc2bae4f6e88195 # v3.27.6 + uses: github/codeql-action/init@df409f7d9260372bd5f19e5b04e83cb3c43714ae # v3.27.9 with: languages: ${{ matrix.language }} @@ -63,6 +63,6 @@ jobs: echo "::endgroup::" - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@aa578102511db1f4524ed59b8cc2bae4f6e88195 # v3.27.6 + uses: github/codeql-action/analyze@df409f7d9260372bd5f19e5b04e83cb3c43714ae # v3.27.9 with: category: "/language:${{ matrix.language }}" diff --git a/.github/workflows/draft-release.yml b/.github/workflows/draft-release.yml index c77719367..38612425c 100644 --- a/.github/workflows/draft-release.yml +++ b/.github/workflows/draft-release.yml @@ -472,7 +472,7 @@ jobs: - name: Create release with artifacts id: create-release # GitHub endorsed release project. See: https://github.com/actions/create-release - uses: softprops/action-gh-release@01570a1f39cb168c169c802c3bceb9e93fb10974 # v2.1.0 + uses: softprops/action-gh-release@7b4da11513bf3f43f9999e90eabced41ab8bb048 # v2.2.0 with: draft: true generate_release_notes: true @@ -487,7 +487,7 @@ jobs: terraform-module.zip - name: Create Terraform provider release with artifcats - uses: softprops/action-gh-release@01570a1f39cb168c169c802c3bceb9e93fb10974 # v2.1.0 + uses: softprops/action-gh-release@7b4da11513bf3f43f9999e90eabced41ab8bb048 # v2.2.0 with: draft: true generate_release_notes: false diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 2db0f9eee..9bb70b043 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -255,7 +255,7 @@ jobs: ref: ${{ needs.verify-inputs.outputs.WORKING_BRANCH }} - name: Setup Go environment - uses: actions/setup-go@41dfa10bad2bb2ae585af6ee5bb4d7d973ad74ed # v5.1.0 + uses: actions/setup-go@3041bf56c941b39c61721a86cd11f3bb1338122a # v5.2.0 with: go-version: "1.23.2" cache: true diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml index 1bd5dbb2b..ac2bc5817 100644 --- a/.github/workflows/scorecard.yml +++ b/.github/workflows/scorecard.yml @@ -37,6 +37,6 @@ jobs: retention-days: 5 - name: Upload to code-scanning - uses: github/codeql-action/upload-sarif@aa578102511db1f4524ed59b8cc2bae4f6e88195 # v3.27.6 + uses: github/codeql-action/upload-sarif@df409f7d9260372bd5f19e5b04e83cb3c43714ae # v3.27.9 with: sarif_file: results.sarif diff --git a/.github/workflows/test-operator-codegen.yml b/.github/workflows/test-operator-codegen.yml index 06a7129d9..a9776220a 100644 --- a/.github/workflows/test-operator-codegen.yml +++ b/.github/workflows/test-operator-codegen.yml @@ -26,7 +26,7 @@ jobs: ref: ${{ !github.event.pull_request.head.repo.fork && github.head_ref || '' }} - name: Setup Go environment - uses: actions/setup-go@41dfa10bad2bb2ae585af6ee5bb4d7d973ad74ed # v5.1.0 + uses: actions/setup-go@3041bf56c941b39c61721a86cd11f3bb1338122a # v5.2.0 with: go-version: "1.23.2" cache: true From 2da6c7d911eeadd9b1ec7ec2e990a04630d02ea3 Mon Sep 17 00:00:00 2001 From: edgelessci <71088502+edgelessci@users.noreply.github.com> Date: Fri, 13 Dec 2024 08:16:03 +0100 Subject: [PATCH 024/311] image: update measurements and image version (#3549) Co-authored-by: edgelessci --- .../measurements/measurements_enterprise.go | 16 ++++++++-------- internal/config/image_enterprise.go | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/internal/attestation/measurements/measurements_enterprise.go b/internal/attestation/measurements/measurements_enterprise.go index 98aeb9925..a0dd29013 100644 --- a/internal/attestation/measurements/measurements_enterprise.go +++ b/internal/attestation/measurements/measurements_enterprise.go @@ -19,14 +19,14 @@ package measurements // revive:disable:var-naming var ( - aws_AWSNitroTPM = M{0: {Expected: []byte{0x73, 0x7f, 0x76, 0x7a, 0x12, 0xf5, 0x4e, 0x70, 0xee, 0xcb, 0xc8, 0x68, 0x40, 0x11, 0x32, 0x3a, 0xe2, 0xfe, 0x2d, 0xd9, 0xf9, 0x07, 0x85, 0x57, 0x79, 0x69, 0xd7, 0xa2, 0x01, 0x3e, 0x8c, 0x12}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xb2, 0x94, 0x9c, 0x3a, 0x6f, 0x70, 0x8a, 0x33, 0x64, 0x28, 0x8f, 0xa4, 0xed, 0xb1, 0xca, 0x8e, 0x54, 0x1f, 0x76, 0x1e, 0x29, 0x41, 0xf7, 0x3e, 0x84, 0x79, 0x03, 0xa8, 0xd0, 0xab, 0x75, 0x53}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x2e, 0x7b, 0x37, 0x6a, 0x99, 0x01, 0x98, 0x05, 0xe8, 0xa7, 0x12, 0xe4, 0x41, 0x31, 0xae, 0x73, 0xc7, 0xcc, 0xc9, 0x50, 0xc5, 0xa4, 0xc6, 0xac, 0xd1, 0xdb, 0x65, 0x55, 0xc0, 0x56, 0xce, 0x94}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x8f, 0x6f, 0x68, 0x40, 0x1a, 0xc0, 0xad, 0xa3, 0xc1, 0x5d, 0xf7, 0xa1, 0x37, 0xa7, 0xa0, 0xf3, 0x03, 0x6e, 0x1b, 0x18, 0x9b, 0x51, 0x29, 0x5b, 0xd2, 0xd5, 0x04, 0xb8, 0xb7, 0x94, 0xf1, 0x2c}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - aws_AWSSEVSNP = M{0: {Expected: []byte{0xd6, 0xdf, 0x85, 0x53, 0x58, 0xf5, 0xb1, 0x0f, 0x06, 0xf0, 0xfa, 0xb3, 0xf4, 0x08, 0xad, 0x26, 0xcd, 0x16, 0x5a, 0x29, 0x49, 0xba, 0xd6, 0x9e, 0x2c, 0xc7, 0x56, 0x92, 0x52, 0x9e, 0x66, 0x2a}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x26, 0x3b, 0x5a, 0xdf, 0x68, 0x9d, 0xf5, 0x4d, 0xd6, 0xce, 0x00, 0x04, 0x58, 0x99, 0xc0, 0xb0, 0xc5, 0x36, 0x0b, 0xd5, 0xbd, 0xa0, 0xcf, 0x02, 0x92, 0x37, 0xf7, 0x23, 0xee, 0xd0, 0x7a, 0xa8}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x48, 0x1a, 0x01, 0xeb, 0x28, 0xdf, 0xf7, 0x2c, 0x8b, 0xa8, 0xb8, 0xee, 0xe3, 0x81, 0x06, 0x40, 0x39, 0xa4, 0x41, 0xd1, 0x84, 0x5d, 0xee, 0x55, 0xbc, 0x5e, 0x12, 0xbd, 0xb3, 0x4e, 0x72, 0x1d}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xa5, 0x5b, 0xb7, 0xe7, 0x45, 0xc4, 0x8b, 0x11, 0xba, 0xd9, 0xe0, 0x30, 0xee, 0x85, 0x9d, 0x53, 0x36, 0x3b, 0x44, 0xb3, 0x8d, 0x9d, 0x3b, 0xcb, 0x4b, 0xaf, 0x8d, 0xae, 0x3a, 0xf6, 0x73, 0xee}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - azure_AzureSEVSNP = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xae, 0x81, 0x12, 0xd2, 0x6b, 0x71, 0xc0, 0xb9, 0x50, 0xb5, 0xc1, 0xfd, 0x38, 0xa0, 0xbd, 0xa1, 0xc1, 0x40, 0x2d, 0xbb, 0x74, 0x5c, 0x29, 0x9f, 0x5c, 0xc3, 0x3a, 0x6f, 0x99, 0x64, 0x29, 0x4e}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xa3, 0x9b, 0x04, 0xbb, 0xc1, 0x21, 0xda, 0xff, 0x94, 0x52, 0x73, 0x79, 0x56, 0xb7, 0x26, 0xda, 0xa6, 0xf6, 0x94, 0xfb, 0xac, 0x2f, 0x2a, 0x2d, 0x2a, 0x18, 0xd7, 0x19, 0x9a, 0x8d, 0xd0, 0x44}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x2d, 0x04, 0x4e, 0x71, 0x5e, 0x0a, 0x42, 0x5a, 0xce, 0xe5, 0xfa, 0x02, 0xa4, 0x4d, 0xd5, 0x0c, 0xe5, 0xcd, 0x64, 0x56, 0x25, 0xba, 0x63, 0x86, 0x9d, 0x4e, 0x90, 0x19, 0xaf, 0xe3, 0x0f, 0xd8}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - azure_AzureTDX = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x30, 0x7e, 0x42, 0xdb, 0xe2, 0xe8, 0x0f, 0x92, 0x74, 0x61, 0xcc, 0x07, 0x22, 0xb4, 0xf1, 0x98, 0x91, 0x66, 0xd3, 0x59, 0x53, 0x13, 0x0c, 0x53, 0x0c, 0xf8, 0xdf, 0x9a, 0x91, 0x10, 0x55, 0x98}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x70, 0xcd, 0x0f, 0x01, 0x57, 0x69, 0xad, 0xaf, 0x80, 0xc6, 0xe2, 0x12, 0x08, 0xbc, 0x4a, 0x0c, 0xe6, 0x8a, 0xb2, 0xa2, 0xeb, 0xf0, 0x07, 0x20, 0xcc, 0xee, 0xbb, 0xcb, 0xe6, 0xc2, 0xcc, 0x05}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x4a, 0xfa, 0xca, 0x54, 0xcc, 0x0e, 0x9b, 0xe3, 0x57, 0xa0, 0xa9, 0xa8, 0xd6, 0xcb, 0x72, 0xcc, 0x4d, 0xbb, 0x12, 0x16, 0xe2, 0x2d, 0x96, 0x7a, 0x02, 0x0c, 0xfd, 0xc9, 0xad, 0xa3, 0x37, 0x54}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + aws_AWSNitroTPM = M{0: {Expected: []byte{0x73, 0x7f, 0x76, 0x7a, 0x12, 0xf5, 0x4e, 0x70, 0xee, 0xcb, 0xc8, 0x68, 0x40, 0x11, 0x32, 0x3a, 0xe2, 0xfe, 0x2d, 0xd9, 0xf9, 0x07, 0x85, 0x57, 0x79, 0x69, 0xd7, 0xa2, 0x01, 0x3e, 0x8c, 0x12}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x27, 0x7c, 0x09, 0x8d, 0x78, 0x8d, 0x9e, 0x5f, 0x90, 0x64, 0x06, 0x40, 0xd6, 0x9a, 0x24, 0x52, 0xe9, 0xbc, 0xdc, 0x12, 0x46, 0xfc, 0x55, 0x2a, 0xc0, 0x00, 0xfc, 0x85, 0xdf, 0x37, 0x04, 0x62}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x04, 0x6c, 0x84, 0x0a, 0x63, 0x30, 0x2e, 0x7e, 0x3c, 0xaa, 0xcf, 0x98, 0x0c, 0xad, 0x1d, 0x3f, 0x52, 0x0e, 0x9f, 0x3e, 0x64, 0x88, 0x97, 0xdb, 0x04, 0x2d, 0xec, 0x77, 0xc6, 0x4b, 0x66, 0x12}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xea, 0x60, 0x70, 0x05, 0xa5, 0xf3, 0x5a, 0x6f, 0xde, 0x11, 0x0b, 0x3e, 0xbf, 0x36, 0x72, 0x3b, 0x73, 0xf7, 0xb1, 0x19, 0xe9, 0xbc, 0x1a, 0xe7, 0xf2, 0x13, 0xfe, 0x8d, 0x82, 0x3b, 0x39, 0xb6}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + aws_AWSSEVSNP = M{0: {Expected: []byte{0xd6, 0xdf, 0x85, 0x53, 0x58, 0xf5, 0xb1, 0x0f, 0x06, 0xf0, 0xfa, 0xb3, 0xf4, 0x08, 0xad, 0x26, 0xcd, 0x16, 0x5a, 0x29, 0x49, 0xba, 0xd6, 0x9e, 0x2c, 0xc7, 0x56, 0x92, 0x52, 0x9e, 0x66, 0x2a}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xcd, 0xe8, 0x3d, 0x9b, 0x27, 0xac, 0xbe, 0xb7, 0xdf, 0xe7, 0xd2, 0xd4, 0x77, 0xed, 0xce, 0x82, 0x12, 0xe7, 0x77, 0xf3, 0xc2, 0xb1, 0xc4, 0xc7, 0x57, 0x68, 0xb9, 0xfa, 0x95, 0x02, 0x68, 0xdf}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x6e, 0xe7, 0x77, 0x61, 0x37, 0xea, 0xb1, 0x18, 0xd1, 0x35, 0x70, 0xb5, 0xd2, 0x52, 0x15, 0x26, 0x5d, 0x9e, 0x45, 0xd0, 0xcb, 0x33, 0xba, 0x87, 0x3a, 0xa0, 0x03, 0x59, 0x35, 0x31, 0x5d, 0xd0}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xcf, 0x59, 0xbb, 0xe0, 0xb7, 0xa9, 0x07, 0x50, 0xa1, 0xa5, 0x56, 0x6b, 0x00, 0x4e, 0xa0, 0x53, 0xa2, 0x00, 0xc7, 0xbe, 0x66, 0x78, 0x8d, 0x87, 0x5a, 0xf2, 0x70, 0xc0, 0xa3, 0x14, 0x0d, 0x6a}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + azure_AzureSEVSNP = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xad, 0x22, 0x77, 0xcc, 0x24, 0xe2, 0xd9, 0xb3, 0x2b, 0x21, 0x9a, 0xe9, 0x48, 0x7d, 0x03, 0xfd, 0x87, 0xa5, 0x79, 0xd5, 0xc1, 0xd5, 0x07, 0x44, 0x47, 0x6b, 0xed, 0x2e, 0x3c, 0xd3, 0x9b, 0x85}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x94, 0x0b, 0xc1, 0x36, 0xa0, 0xb3, 0xc1, 0x96, 0xfd, 0xcd, 0x3b, 0x15, 0x9c, 0xac, 0x41, 0xaa, 0xc0, 0x5b, 0xd3, 0x1b, 0xe4, 0x04, 0x63, 0x59, 0x4a, 0x06, 0x64, 0x53, 0x01, 0x30, 0xaf, 0x2f}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x65, 0xfe, 0xb7, 0x3c, 0x85, 0x26, 0x3b, 0xa7, 0x22, 0x13, 0x6e, 0x5c, 0xf2, 0xa1, 0x52, 0x86, 0x57, 0x2b, 0xe8, 0xe2, 0x02, 0xd6, 0xd1, 0xe2, 0x6e, 0x2f, 0xd8, 0xea, 0x7e, 0x2f, 0x6a, 0x9b}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + azure_AzureTDX = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x19, 0x3b, 0x52, 0x7d, 0x37, 0x21, 0x92, 0x8e, 0x0b, 0xff, 0xbb, 0x2e, 0x95, 0xc2, 0x1a, 0x42, 0x18, 0x2c, 0x06, 0x6c, 0x9c, 0xd4, 0x0f, 0x04, 0x66, 0x56, 0x5a, 0x7f, 0xc3, 0x0d, 0x67, 0x7e}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xee, 0xea, 0xcd, 0x8a, 0x74, 0xc3, 0xad, 0xe3, 0xac, 0x93, 0x82, 0x0b, 0xbe, 0x54, 0xe3, 0x78, 0x56, 0x6f, 0xc0, 0xa5, 0xba, 0x82, 0x7b, 0xc5, 0x5f, 0x57, 0x8c, 0x99, 0x2e, 0x79, 0xbc, 0xb1}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x72, 0xdb, 0x3e, 0x58, 0xe5, 0x52, 0x1e, 0xc6, 0xae, 0xf3, 0x64, 0xf9, 0xd5, 0x27, 0xc6, 0x3b, 0x3b, 0x11, 0xa2, 0x63, 0x86, 0x16, 0x3d, 0x17, 0x9c, 0xc0, 0xa0, 0x18, 0xfe, 0xc6, 0x0e, 0x26}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} azure_AzureTrustedLaunch M - gcp_GCPSEVES = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x05, 0x24, 0xd3, 0x5d, 0x7c, 0xdc, 0x12, 0x79, 0x18, 0x72, 0x2b, 0xe8, 0x2d, 0xc0, 0x0c, 0xcf, 0x6a, 0x38, 0x02, 0x8c, 0x74, 0xc0, 0x95, 0x98, 0xe5, 0x70, 0x24, 0xd9, 0xef, 0xd0, 0x5f, 0x74}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xee, 0x10, 0x68, 0x18, 0x9f, 0x98, 0x0d, 0x36, 0xd3, 0x04, 0x68, 0xef, 0x7a, 0x37, 0xe3, 0x3f, 0xd9, 0xa6, 0x3d, 0x27, 0x7b, 0x69, 0xb8, 0x06, 0x6a, 0x80, 0x7a, 0x01, 0xf7, 0xb6, 0xaa, 0x2a}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x4e, 0x64, 0x43, 0x4a, 0x29, 0xbe, 0x44, 0xdc, 0x47, 0xf2, 0x15, 0xe0, 0xa3, 0x07, 0x1c, 0x48, 0x05, 0x5a, 0xe9, 0x9d, 0x9a, 0x72, 0xb5, 0x02, 0xac, 0x34, 0xac, 0x28, 0x9a, 0x06, 0x43, 0x75}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - gcp_GCPSEVSNP = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x33, 0x31, 0xca, 0x86, 0xdf, 0x84, 0x45, 0x4e, 0x84, 0x3d, 0xc7, 0x29, 0xfb, 0x15, 0xb7, 0x66, 0x12, 0xca, 0x54, 0xef, 0x3f, 0x5f, 0xdd, 0x8a, 0x82, 0xb7, 0xd9, 0x54, 0xf7, 0x1c, 0x40, 0xb6}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x71, 0x47, 0xb7, 0xd7, 0x0c, 0x3c, 0x03, 0xe8, 0xae, 0x6c, 0xc8, 0x27, 0x8d, 0xae, 0xed, 0xcc, 0xba, 0xb7, 0x04, 0x18, 0xdd, 0x43, 0x00, 0x25, 0x21, 0x36, 0xa8, 0xb5, 0x4b, 0x53, 0xbc, 0x5f}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x4e, 0x8a, 0x88, 0x9c, 0xee, 0x46, 0xa8, 0x3b, 0xfe, 0xe5, 0xf8, 0xbc, 0x19, 0xb8, 0x22, 0xab, 0xb9, 0xd1, 0xa1, 0xa2, 0x82, 0xfc, 0x44, 0x45, 0x51, 0xa3, 0x1f, 0x35, 0x89, 0xbd, 0x52, 0xfa}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - openstack_QEMUVTPM = M{4: {Expected: []byte{0xeb, 0x18, 0xd0, 0xc4, 0x05, 0xfc, 0x23, 0xf4, 0xb0, 0xa0, 0x54, 0xc6, 0x06, 0x3a, 0x22, 0x94, 0xb7, 0xf8, 0xd7, 0xa2, 0xf5, 0x72, 0x8d, 0x79, 0xb1, 0xa5, 0x8a, 0x4c, 0xe9, 0xe5, 0xaa, 0x75}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xa8, 0xd0, 0xe0, 0x8b, 0xd8, 0x2b, 0x32, 0x3c, 0x97, 0xf3, 0xa2, 0xb6, 0x29, 0xe2, 0x37, 0x73, 0x5a, 0xda, 0xe7, 0x83, 0x9a, 0x01, 0xbc, 0x12, 0x4c, 0x91, 0xad, 0x61, 0xd2, 0x3d, 0x50, 0x3e}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x6e, 0x48, 0x98, 0xfa, 0xbe, 0x51, 0x9d, 0x1c, 0xef, 0x41, 0xf6, 0xdf, 0x35, 0xaa, 0x5a, 0x77, 0xff, 0x44, 0x47, 0x50, 0xce, 0x57, 0xc4, 0x44, 0x2f, 0xbc, 0x47, 0x07, 0xf1, 0xa1, 0x45, 0x8a}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + gcp_GCPSEVES = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x53, 0xc6, 0xeb, 0xd1, 0x9f, 0x8e, 0xc8, 0x83, 0xa4, 0xb4, 0x66, 0x80, 0xc3, 0x96, 0xc0, 0xc5, 0xdd, 0x44, 0x1a, 0x99, 0x6e, 0xb9, 0xb4, 0x4a, 0x66, 0xa5, 0xb9, 0xdb, 0xb8, 0xf7, 0xfd, 0xc3}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x6a, 0x1d, 0xd6, 0x2c, 0xbf, 0x05, 0x1c, 0x7f, 0x4d, 0x3c, 0x79, 0xa6, 0x55, 0xbc, 0xa3, 0x8e, 0x68, 0x56, 0x73, 0x08, 0xd7, 0x60, 0xa7, 0x83, 0x60, 0x4d, 0x8a, 0x7c, 0x72, 0x3e, 0xa7, 0xab}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xa7, 0x26, 0x3c, 0x12, 0x87, 0xdc, 0x04, 0x83, 0x83, 0x4c, 0x92, 0x1f, 0x03, 0x2b, 0x78, 0x53, 0xc2, 0x7a, 0x9a, 0xa8, 0x14, 0x93, 0x7c, 0x55, 0x14, 0x02, 0xc7, 0xa0, 0x4b, 0xbd, 0xe6, 0x5b}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + gcp_GCPSEVSNP = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xda, 0x88, 0x29, 0x2b, 0x36, 0xd9, 0x5a, 0x8d, 0xb2, 0x0c, 0x0b, 0xff, 0xfd, 0x65, 0x02, 0x54, 0x89, 0xa9, 0x59, 0x4e, 0x37, 0x49, 0x0d, 0xc3, 0x68, 0x33, 0x18, 0x1c, 0xb7, 0xe8, 0x76, 0x98}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xf0, 0x8d, 0xcb, 0xb1, 0xa8, 0xde, 0xaf, 0x38, 0x1a, 0x9b, 0x42, 0x33, 0xea, 0x16, 0xa2, 0x47, 0x03, 0xce, 0x9f, 0x1c, 0x98, 0x05, 0x55, 0x08, 0x73, 0x5f, 0x1d, 0x5a, 0x8b, 0x1a, 0x2a, 0x8b}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xfd, 0x37, 0x6d, 0xe4, 0x15, 0x14, 0xde, 0xa3, 0x26, 0xba, 0x88, 0xeb, 0xfe, 0xb5, 0x40, 0x21, 0x81, 0x0c, 0xbe, 0xd0, 0x89, 0xa8, 0x7e, 0xbb, 0xf3, 0x4a, 0x2a, 0xba, 0x9b, 0x9f, 0x06, 0xe6}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + openstack_QEMUVTPM = M{4: {Expected: []byte{0xb9, 0x8f, 0x72, 0x85, 0xde, 0x2a, 0xac, 0xd7, 0x0e, 0x84, 0x9d, 0xbd, 0x50, 0x1e, 0x19, 0xda, 0xb0, 0x4a, 0x77, 0xc8, 0x7f, 0x9c, 0x1b, 0x2d, 0x77, 0xd2, 0x78, 0xea, 0x30, 0xea, 0x08, 0x30}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x2b, 0x08, 0xf2, 0xd7, 0x60, 0xc2, 0x5a, 0x8f, 0xef, 0x20, 0x95, 0xd0, 0x4b, 0x80, 0x3c, 0x8f, 0x56, 0xf9, 0xd5, 0xc8, 0x20, 0xda, 0x8b, 0xa8, 0x33, 0xd0, 0x6b, 0xa5, 0xc1, 0xd1, 0xcc, 0xc1}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xe7, 0x6d, 0x29, 0x48, 0xc1, 0x98, 0x9d, 0xae, 0xc3, 0xdc, 0xb2, 0xb3, 0x57, 0x7c, 0xfa, 0xd6, 0xae, 0x41, 0xf5, 0xe6, 0x1c, 0x63, 0x24, 0xc7, 0x9c, 0xbb, 0x6c, 0xea, 0x90, 0xc1, 0x20, 0x14}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} qemu_QEMUTDX M - qemu_QEMUVTPM = M{4: {Expected: []byte{0x20, 0x41, 0x07, 0x28, 0xd4, 0xd1, 0x4b, 0x54, 0xec, 0xbb, 0x3c, 0x47, 0xa4, 0x11, 0x9c, 0x71, 0x35, 0x01, 0x5b, 0x44, 0x2b, 0xa0, 0x2f, 0xe4, 0x39, 0xe1, 0xcd, 0x1f, 0xb4, 0xd3, 0x1e, 0x55}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xd9, 0xff, 0x83, 0x0a, 0x98, 0x1c, 0x2b, 0x89, 0x0b, 0x2f, 0x23, 0xf3, 0x67, 0x08, 0x75, 0xd5, 0xf1, 0x3a, 0xd2, 0x14, 0xfe, 0x75, 0xe1, 0x4a, 0x56, 0x0c, 0xda, 0x6b, 0xb7, 0x4e, 0xd5, 0x0b}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xa5, 0xff, 0xdc, 0x06, 0xe9, 0xcc, 0x02, 0x20, 0x73, 0x24, 0x44, 0xe0, 0xab, 0x39, 0xc0, 0x5d, 0x9a, 0x04, 0x31, 0x44, 0xeb, 0x4d, 0x50, 0x5d, 0x24, 0x46, 0xf3, 0x22, 0x80, 0x7d, 0x82, 0xa7}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + qemu_QEMUVTPM = M{4: {Expected: []byte{0xe0, 0x8e, 0x95, 0xbf, 0x5f, 0xc9, 0x20, 0xb3, 0x44, 0x15, 0x37, 0xce, 0xca, 0x8e, 0xd8, 0x18, 0x28, 0xf2, 0x2a, 0x2d, 0x45, 0x7f, 0x14, 0xc6, 0xe7, 0x33, 0x2d, 0x33, 0xaf, 0x78, 0xd7, 0x74}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x00, 0xc9, 0x31, 0xea, 0x60, 0xf1, 0x05, 0x8e, 0x2d, 0xaa, 0xcf, 0x2e, 0x32, 0xbd, 0xb5, 0xb2, 0x77, 0x15, 0xf3, 0xce, 0xe6, 0xf0, 0x5a, 0xf5, 0x70, 0xf0, 0xa0, 0x4c, 0x96, 0x59, 0x7f, 0x85}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xcc, 0x7d, 0xe5, 0xb5, 0xb6, 0x09, 0x7b, 0xf2, 0xa5, 0xf7, 0x2a, 0xe0, 0x68, 0x50, 0x29, 0x51, 0x1b, 0x5c, 0x59, 0xa5, 0x36, 0xe1, 0xe8, 0x78, 0x36, 0xb2, 0xae, 0x29, 0x07, 0x44, 0x8a, 0x99}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} ) diff --git a/internal/config/image_enterprise.go b/internal/config/image_enterprise.go index 879f779ab..a9b6ffb0c 100644 --- a/internal/config/image_enterprise.go +++ b/internal/config/image_enterprise.go @@ -10,5 +10,5 @@ package config const ( // defaultImage is the default image to use. - defaultImage = "ref/main/stream/nightly/v2.21.0-pre.0.20241204104953-224e6e397c83" + defaultImage = "ref/main/stream/nightly/v2.21.0-pre.0.20241212094524-1495a7f6ddfe" ) From 8496b4ce46a667c38e729cb6313f31551340b41e Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 13 Dec 2024 08:25:52 +0100 Subject: [PATCH 025/311] deps: update dependency DeterminateSystems/nix-installer to v0.32.2 (#3547) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/reproducible-builds.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/reproducible-builds.yml b/.github/workflows/reproducible-builds.yml index 27b5c2f2f..d0ff8a129 100644 --- a/.github/workflows/reproducible-builds.yml +++ b/.github/workflows/reproducible-builds.yml @@ -57,7 +57,7 @@ jobs: chmod a+x "$HOME/.local/bin/bazel" echo "$HOME/.local/bin" >> "$GITHUB_PATH" - curl -fsSL -o "$HOME/.local/bin/nix-installer" https://github.com/DeterminateSystems/nix-installer/releases/download/v0.32.1/nix-installer-x86_64-linux # renovate:github-release + curl -fsSL -o "$HOME/.local/bin/nix-installer" https://github.com/DeterminateSystems/nix-installer/releases/download/v0.32.2/nix-installer-x86_64-linux # renovate:github-release chmod a+x "$HOME/.local/bin/nix-installer" "$HOME/.local/bin/nix-installer" install --no-confirm From 1b050a636f8f746e04d11a6513cea339bd2cdb39 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 13 Dec 2024 08:50:28 +0100 Subject: [PATCH 026/311] deps: update mikepenz/action-junit-report action to v5 (#3550) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/actions/e2e_sonobuoy/action.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/actions/e2e_sonobuoy/action.yml b/.github/actions/e2e_sonobuoy/action.yml index 5671e7c9c..b0d89052d 100644 --- a/.github/actions/e2e_sonobuoy/action.yml +++ b/.github/actions/e2e_sonobuoy/action.yml @@ -70,7 +70,7 @@ runs: - name: Publish test results if: (!env.ACT) && contains(inputs.sonobuoyTestSuiteCmd, '--plugin e2e') - uses: mikepenz/action-junit-report@db71d41eb79864e25ab0337e395c352e84523afe # v4.3.1 + uses: mikepenz/action-junit-report@992d97d6eb2e5f3de985fbf9df6a04386874114d # v5.1.0 with: report_paths: "**/junit_01.xml" fail_on_failure: true From 4b4afffee78a0728121447ba62ceb4ba94f4948b Mon Sep 17 00:00:00 2001 From: edgelessci <71088502+edgelessci@users.noreply.github.com> Date: Sun, 15 Dec 2024 18:15:49 +0100 Subject: [PATCH 027/311] image: update locked rpms (#3551) Co-authored-by: edgelessci --- image/mirror/SHA256SUMS | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/image/mirror/SHA256SUMS b/image/mirror/SHA256SUMS index 91d85ed36..cee969fe8 100644 --- a/image/mirror/SHA256SUMS +++ b/image/mirror/SHA256SUMS @@ -81,12 +81,12 @@ c4cc69bf3a2655b9ee9ac23492d377bac57811c5b4f81fbf43537520ee33c7af gawk-all-langp 554a68e692ccdd0cf71ea67a4c550bac910685465f17eee503732d48ccda9c90 gettext-libs-0.22.5-4.fc40.x86_64.rpm 046971e9f5f0c88737854e1c9e02cce8f5854633575984b235cf3f8b11ec7b91 gettext-runtime-0.22.5-4.fc40.x86_64.rpm 0a32c6874ce180375c2c0b1e2f0c8fed38131a598e5c4ba3866cf3aee1f3f5fc glib2-2.80.3-1.fc40.x86_64.rpm -a2d94eb4028fad9789f0d5561b4c4a7a03020013af2a79be7aea3fb0390b8caf glibc-2.39-22.fc40.i686.rpm -726a1d707dfcf20d1f4c94f76bdba38d166eb574ecc2d83ec438bdc161f3ec27 glibc-2.39-22.fc40.x86_64.rpm -0b502c1140a1f6461dbd63d3daefedded6c705769476cec5e69466aab7693ea6 glibc-common-2.39-22.fc40.x86_64.rpm -c09983bc2c7fbc23e7e622739532b554357103d99161d458c4f0c5eabce5d8c5 glibc-gconv-extra-2.39-22.fc40.i686.rpm -c185634bd4f161c35292daa028823a607c78f1e71727b6c506d640771ddd88aa glibc-gconv-extra-2.39-22.fc40.x86_64.rpm -e99290c1fa76536f0bb0024dbe14527a6d5efcf00436493f705a75c6f76d3df3 glibc-minimal-langpack-2.39-22.fc40.x86_64.rpm +c1ff8d7de3b20a68a45fefc14e1dceab52117f81314bdc83a1245b2bbb403c01 glibc-2.39-30.fc40.i686.rpm +e939e3c1201f0a412e5821b37ca65a85476670bc2598dbc5d5aa82d75bfa3e26 glibc-2.39-30.fc40.x86_64.rpm +46a46492445ab6444c4947d92977a9311185b40d6fb4099d6a41ca875ba76e41 glibc-common-2.39-30.fc40.x86_64.rpm +4828d4a9902c65d37012d6c521cd191a3564f17dceeabe2e4b5f13575a0beab0 glibc-gconv-extra-2.39-30.fc40.i686.rpm +1cee0583e6fbf7a0f498369da6c568af6d96cb00c5763dc3af098eff70821bab glibc-gconv-extra-2.39-30.fc40.x86_64.rpm +3b7c1c1b48ccfb47b498b0b7729a558dd104bc704558adee51ad0bad86898b59 glibc-minimal-langpack-2.39-30.fc40.x86_64.rpm b054d6a9ee3477e935686b327aa47379bd1909eac4ce06c4c45dff1a201ecb49 gmp-6.2.1-8.fc40.x86_64.rpm 0a8b1b3fb625e4d1864ad6726f583e2db5db7f10d9f3564b5916ca7fed1b71cb gnupg2-2.4.4-1.fc40.x86_64.rpm 4425dbd35ab65f25b092d12ac56c4b565371a1c52ac882c8896dbeae7d52bbb1 gnupg2-smime-2.4.4-1.fc40.x86_64.rpm @@ -254,8 +254,8 @@ b3b261e448a25c6550f050ca1813509dd6edbb10f22c02a535548332435b6bc4 pam-1.6.1-5.fc 753d7b5a6531eec7689414dc1a4ce76ba4d327b8ad0363a9298ee67b565c1d95 pam-libs-1.6.1-5.fc40.i686.rpm 6ca8efd0b2a26cc51917c1c81260d919ef7760f0e0770dc872a78b1b829299cd pam-libs-1.6.1-5.fc40.x86_64.rpm 9bbce784622e02af0371ced8e9a7d26adba7eabd66ecfcb8bbe2d24cf616e3c1 parted-3.6-4.fc40.x86_64.rpm -02c01edaee6fe2af5174562387d530b73ee40e39dbe108ab4553de82228f6621 passt-0^20241030.gee7d0b6-1.fc40.x86_64.rpm -7909af3b8d248c344693b4f7893172d465fde6d1fb8d719f1179f8c971cb786b passt-selinux-0^20241030.gee7d0b6-1.fc40.noarch.rpm +49390fb9cb09310813c14c5b0da9d4fe0b82055978c59bd2bde89ebbc8a815b5 passt-0^20241127.gc0fbc7e-1.fc40.x86_64.rpm +566f17db812c6cd850ad7bf9c2632e2f3bfe7c9ce259db2f88d7b0c0a1583766 passt-selinux-0^20241127.gc0fbc7e-1.fc40.noarch.rpm a0fb808d6b7ff8cd9cfdc1a60f213851cecdcace334d6e5aa1e0e54b81d79a25 pcre2-10.44-1.fc40.i686.rpm 73e50df09266fcffda9c24a3738f579dd365c2c187c294da054ef9915edc3851 pcre2-10.44-1.fc40.x86_64.rpm dbec699e88d42fc6fb1df0a8c0b9023941ed1b1b7625694253a612eaf9f2691d pcre2-syntax-10.44-1.fc40.noarch.rpm From abe54a2f7abe0b30ec69e6133f0797394f8fdd87 Mon Sep 17 00:00:00 2001 From: Paul Meyer Date: Mon, 16 Dec 2024 09:23:07 +0100 Subject: [PATCH 028/311] deps: update go-sev-guest to include fix for badram platform info Signed-off-by: Paul Meyer --- go.mod | 2 ++ go.sum | 4 ++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/go.mod b/go.mod index 0dde424e5..e2b616053 100644 --- a/go.mod +++ b/go.mod @@ -2,6 +2,8 @@ module github.com/edgelesssys/constellation/v2 go 1.23.2 +replace github.com/google/go-sev-guest => github.com/katexochen/go-sev-guest v0.0.0-20241216075901-ccd51e9e7b6e + // TODO(daniel-weisse): revert after merging https://github.com/martinjungblut/go-cryptsetup/pull/16. replace github.com/martinjungblut/go-cryptsetup => github.com/daniel-weisse/go-cryptsetup v0.0.0-20230705150314-d8c07bd1723c diff --git a/go.sum b/go.sum index 73ed78cbd..2b373cdbc 100644 --- a/go.sum +++ b/go.sum @@ -456,8 +456,6 @@ github.com/google/go-configfs-tsm v0.2.2 h1:YnJ9rXIOj5BYD7/0DNnzs8AOp7UcvjfTvt21 github.com/google/go-configfs-tsm v0.2.2/go.mod h1:EL1GTDFMb5PZQWDviGfZV9n87WeGTR/JUg13RfwkgRo= github.com/google/go-containerregistry v0.20.2 h1:B1wPJ1SN/S7pB+ZAimcciVD+r+yV/l/DSArMxlbwseo= github.com/google/go-containerregistry v0.20.2/go.mod h1:z38EKdKh4h7IP2gSfUUqEvalZBqs6AoLeWfUy34nQC8= -github.com/google/go-sev-guest v0.11.2-0.20241122204452-64cd695124b1 h1:K33T2ardZgY4LVxPakM85KSip9aag2jTwmOZs4i1dJg= -github.com/google/go-sev-guest v0.11.2-0.20241122204452-64cd695124b1/go.mod h1:8+UOtSaqVIZjJJ9DDmgRko3J/kNc6jI5KLHxoeao7cA= github.com/google/go-tdx-guest v0.3.1 h1:gl0KvjdsD4RrJzyLefDOvFOUH3NAJri/3qvaL5m83Iw= github.com/google/go-tdx-guest v0.3.1/go.mod h1:/rc3d7rnPykOPuY8U9saMyEps0PZDThLk/RygXm04nE= github.com/google/go-tpm v0.9.1 h1:0pGc4X//bAlmZzMKf8iz6IsDo1nYTbYJ6FZN/rg4zdM= @@ -602,6 +600,8 @@ github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/u github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= +github.com/katexochen/go-sev-guest v0.0.0-20241216075901-ccd51e9e7b6e h1:t6R61fMd5IeTSh9qEMDGkh9vtI0Jgh69GDm2lQNSzfE= +github.com/katexochen/go-sev-guest v0.0.0-20241216075901-ccd51e9e7b6e/go.mod h1:SK9vW+uyfuzYdVN0m8BShL3OQCtXZe/JPF7ZkpD3760= github.com/kevinburke/ssh_config v1.2.0 h1:x584FjTGwHzMwvHx18PXxbBVzfnxogHaAReU4gf13a4= github.com/kevinburke/ssh_config v1.2.0/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= github.com/keybase/go-keychain v0.0.0-20231219164618-57a3676c3af6 h1:IsMZxCuZqKuao2vNdfD82fjjgPLfyHLpR41Z88viRWs= From ba0b2521aba2770ae1e512c352d55c52130e0c04 Mon Sep 17 00:00:00 2001 From: edgelessci <71088502+edgelessci@users.noreply.github.com> Date: Wed, 18 Dec 2024 08:38:20 +0100 Subject: [PATCH 029/311] image: update measurements and image version (#3554) Co-authored-by: edgelessci --- .../measurements/measurements_enterprise.go | 16 ++++++++-------- internal/config/image_enterprise.go | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/internal/attestation/measurements/measurements_enterprise.go b/internal/attestation/measurements/measurements_enterprise.go index a0dd29013..f8e9d909f 100644 --- a/internal/attestation/measurements/measurements_enterprise.go +++ b/internal/attestation/measurements/measurements_enterprise.go @@ -19,14 +19,14 @@ package measurements // revive:disable:var-naming var ( - aws_AWSNitroTPM = M{0: {Expected: []byte{0x73, 0x7f, 0x76, 0x7a, 0x12, 0xf5, 0x4e, 0x70, 0xee, 0xcb, 0xc8, 0x68, 0x40, 0x11, 0x32, 0x3a, 0xe2, 0xfe, 0x2d, 0xd9, 0xf9, 0x07, 0x85, 0x57, 0x79, 0x69, 0xd7, 0xa2, 0x01, 0x3e, 0x8c, 0x12}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x27, 0x7c, 0x09, 0x8d, 0x78, 0x8d, 0x9e, 0x5f, 0x90, 0x64, 0x06, 0x40, 0xd6, 0x9a, 0x24, 0x52, 0xe9, 0xbc, 0xdc, 0x12, 0x46, 0xfc, 0x55, 0x2a, 0xc0, 0x00, 0xfc, 0x85, 0xdf, 0x37, 0x04, 0x62}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x04, 0x6c, 0x84, 0x0a, 0x63, 0x30, 0x2e, 0x7e, 0x3c, 0xaa, 0xcf, 0x98, 0x0c, 0xad, 0x1d, 0x3f, 0x52, 0x0e, 0x9f, 0x3e, 0x64, 0x88, 0x97, 0xdb, 0x04, 0x2d, 0xec, 0x77, 0xc6, 0x4b, 0x66, 0x12}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xea, 0x60, 0x70, 0x05, 0xa5, 0xf3, 0x5a, 0x6f, 0xde, 0x11, 0x0b, 0x3e, 0xbf, 0x36, 0x72, 0x3b, 0x73, 0xf7, 0xb1, 0x19, 0xe9, 0xbc, 0x1a, 0xe7, 0xf2, 0x13, 0xfe, 0x8d, 0x82, 0x3b, 0x39, 0xb6}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - aws_AWSSEVSNP = M{0: {Expected: []byte{0xd6, 0xdf, 0x85, 0x53, 0x58, 0xf5, 0xb1, 0x0f, 0x06, 0xf0, 0xfa, 0xb3, 0xf4, 0x08, 0xad, 0x26, 0xcd, 0x16, 0x5a, 0x29, 0x49, 0xba, 0xd6, 0x9e, 0x2c, 0xc7, 0x56, 0x92, 0x52, 0x9e, 0x66, 0x2a}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xcd, 0xe8, 0x3d, 0x9b, 0x27, 0xac, 0xbe, 0xb7, 0xdf, 0xe7, 0xd2, 0xd4, 0x77, 0xed, 0xce, 0x82, 0x12, 0xe7, 0x77, 0xf3, 0xc2, 0xb1, 0xc4, 0xc7, 0x57, 0x68, 0xb9, 0xfa, 0x95, 0x02, 0x68, 0xdf}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x6e, 0xe7, 0x77, 0x61, 0x37, 0xea, 0xb1, 0x18, 0xd1, 0x35, 0x70, 0xb5, 0xd2, 0x52, 0x15, 0x26, 0x5d, 0x9e, 0x45, 0xd0, 0xcb, 0x33, 0xba, 0x87, 0x3a, 0xa0, 0x03, 0x59, 0x35, 0x31, 0x5d, 0xd0}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xcf, 0x59, 0xbb, 0xe0, 0xb7, 0xa9, 0x07, 0x50, 0xa1, 0xa5, 0x56, 0x6b, 0x00, 0x4e, 0xa0, 0x53, 0xa2, 0x00, 0xc7, 0xbe, 0x66, 0x78, 0x8d, 0x87, 0x5a, 0xf2, 0x70, 0xc0, 0xa3, 0x14, 0x0d, 0x6a}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - azure_AzureSEVSNP = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xad, 0x22, 0x77, 0xcc, 0x24, 0xe2, 0xd9, 0xb3, 0x2b, 0x21, 0x9a, 0xe9, 0x48, 0x7d, 0x03, 0xfd, 0x87, 0xa5, 0x79, 0xd5, 0xc1, 0xd5, 0x07, 0x44, 0x47, 0x6b, 0xed, 0x2e, 0x3c, 0xd3, 0x9b, 0x85}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x94, 0x0b, 0xc1, 0x36, 0xa0, 0xb3, 0xc1, 0x96, 0xfd, 0xcd, 0x3b, 0x15, 0x9c, 0xac, 0x41, 0xaa, 0xc0, 0x5b, 0xd3, 0x1b, 0xe4, 0x04, 0x63, 0x59, 0x4a, 0x06, 0x64, 0x53, 0x01, 0x30, 0xaf, 0x2f}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x65, 0xfe, 0xb7, 0x3c, 0x85, 0x26, 0x3b, 0xa7, 0x22, 0x13, 0x6e, 0x5c, 0xf2, 0xa1, 0x52, 0x86, 0x57, 0x2b, 0xe8, 0xe2, 0x02, 0xd6, 0xd1, 0xe2, 0x6e, 0x2f, 0xd8, 0xea, 0x7e, 0x2f, 0x6a, 0x9b}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - azure_AzureTDX = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x19, 0x3b, 0x52, 0x7d, 0x37, 0x21, 0x92, 0x8e, 0x0b, 0xff, 0xbb, 0x2e, 0x95, 0xc2, 0x1a, 0x42, 0x18, 0x2c, 0x06, 0x6c, 0x9c, 0xd4, 0x0f, 0x04, 0x66, 0x56, 0x5a, 0x7f, 0xc3, 0x0d, 0x67, 0x7e}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xee, 0xea, 0xcd, 0x8a, 0x74, 0xc3, 0xad, 0xe3, 0xac, 0x93, 0x82, 0x0b, 0xbe, 0x54, 0xe3, 0x78, 0x56, 0x6f, 0xc0, 0xa5, 0xba, 0x82, 0x7b, 0xc5, 0x5f, 0x57, 0x8c, 0x99, 0x2e, 0x79, 0xbc, 0xb1}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x72, 0xdb, 0x3e, 0x58, 0xe5, 0x52, 0x1e, 0xc6, 0xae, 0xf3, 0x64, 0xf9, 0xd5, 0x27, 0xc6, 0x3b, 0x3b, 0x11, 0xa2, 0x63, 0x86, 0x16, 0x3d, 0x17, 0x9c, 0xc0, 0xa0, 0x18, 0xfe, 0xc6, 0x0e, 0x26}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + aws_AWSNitroTPM = M{0: {Expected: []byte{0x73, 0x7f, 0x76, 0x7a, 0x12, 0xf5, 0x4e, 0x70, 0xee, 0xcb, 0xc8, 0x68, 0x40, 0x11, 0x32, 0x3a, 0xe2, 0xfe, 0x2d, 0xd9, 0xf9, 0x07, 0x85, 0x57, 0x79, 0x69, 0xd7, 0xa2, 0x01, 0x3e, 0x8c, 0x12}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x43, 0x75, 0xf8, 0x1e, 0xe7, 0x78, 0x01, 0x71, 0x46, 0xf4, 0x74, 0x5f, 0x6c, 0x24, 0x69, 0xdd, 0x41, 0x19, 0xf4, 0x09, 0x1c, 0x4d, 0x4e, 0xe5, 0x36, 0x4f, 0xb1, 0x05, 0x23, 0xce, 0xa8, 0x3e}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xcb, 0x4d, 0x8b, 0x7b, 0xa3, 0x31, 0x31, 0xb7, 0x4b, 0x51, 0xb2, 0x24, 0xcb, 0x1d, 0xa1, 0xd2, 0xe9, 0xe0, 0xa8, 0x15, 0x1a, 0xe3, 0xa5, 0xbf, 0x10, 0x38, 0x16, 0xc0, 0x65, 0xef, 0xe1, 0xda}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x06, 0x9b, 0x75, 0xc8, 0x1e, 0xce, 0x53, 0x0a, 0xf8, 0xef, 0x72, 0xcc, 0x84, 0x84, 0x0b, 0x10, 0xe3, 0x0a, 0x6f, 0xbc, 0x87, 0x82, 0xd8, 0x19, 0xf8, 0xdb, 0x52, 0xca, 0x23, 0xec, 0x04, 0x2e}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + aws_AWSSEVSNP = M{0: {Expected: []byte{0xd6, 0xdf, 0x85, 0x53, 0x58, 0xf5, 0xb1, 0x0f, 0x06, 0xf0, 0xfa, 0xb3, 0xf4, 0x08, 0xad, 0x26, 0xcd, 0x16, 0x5a, 0x29, 0x49, 0xba, 0xd6, 0x9e, 0x2c, 0xc7, 0x56, 0x92, 0x52, 0x9e, 0x66, 0x2a}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x9d, 0xf1, 0x89, 0x30, 0xea, 0x3a, 0x14, 0x0b, 0x68, 0x6b, 0xef, 0xdc, 0x86, 0x5a, 0x02, 0x38, 0x10, 0x93, 0x3b, 0x8f, 0xe2, 0x64, 0xbd, 0xfd, 0xf6, 0x8d, 0xed, 0x0b, 0xd7, 0x6d, 0xeb, 0xa9}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x5b, 0x6a, 0xeb, 0x29, 0xb4, 0x71, 0x9c, 0x2d, 0xe0, 0xab, 0xe5, 0x61, 0xdb, 0x3d, 0xa9, 0x6c, 0xfa, 0x8e, 0x06, 0x8d, 0xe3, 0x67, 0x85, 0x20, 0xf5, 0x32, 0x13, 0x29, 0xb0, 0xa8, 0x6e, 0x6f}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xe0, 0x10, 0x62, 0xb8, 0x9a, 0x35, 0xd1, 0xb0, 0x9a, 0xb0, 0x15, 0x47, 0xbb, 0x5c, 0x99, 0xdd, 0xf3, 0xf7, 0x1a, 0x82, 0x74, 0xf5, 0x59, 0x04, 0x94, 0x5f, 0xd3, 0xdd, 0xfc, 0xb0, 0x08, 0x70}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + azure_AzureSEVSNP = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xa7, 0x69, 0x47, 0xc5, 0x71, 0x1c, 0x3b, 0xea, 0x82, 0x1e, 0xc0, 0xe1, 0x43, 0x4c, 0x53, 0x66, 0x11, 0x83, 0x9c, 0x38, 0xbb, 0xb2, 0x54, 0x0c, 0x33, 0x66, 0xb0, 0x02, 0x21, 0x68, 0x53, 0xce}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xfa, 0x76, 0x49, 0x87, 0x1a, 0x83, 0x45, 0xee, 0xe1, 0xf7, 0xd6, 0xa5, 0x5b, 0x8c, 0x55, 0x2b, 0x43, 0xc2, 0x34, 0x7f, 0x10, 0xc3, 0x69, 0x86, 0x1b, 0x9a, 0xf1, 0x88, 0x8c, 0xe4, 0x0e, 0xb3}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x0d, 0x2b, 0xa1, 0x9a, 0x8a, 0x26, 0x2a, 0xa9, 0x4d, 0x00, 0x0f, 0x28, 0xb2, 0x0b, 0xce, 0xdd, 0x24, 0x8d, 0x92, 0x1e, 0xac, 0xcd, 0x9a, 0x4d, 0x89, 0x24, 0x72, 0x12, 0x80, 0x90, 0xb5, 0xc3}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + azure_AzureTDX = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x46, 0x6e, 0x4b, 0x3b, 0x44, 0x5c, 0x1b, 0xb2, 0x2e, 0x3a, 0x2b, 0xf7, 0x93, 0x99, 0xe7, 0x60, 0x3b, 0xc0, 0x93, 0x58, 0xf8, 0x2e, 0x93, 0xec, 0x79, 0xc0, 0x63, 0x47, 0xf8, 0xd7, 0x35, 0x6f}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xed, 0x4f, 0x88, 0x40, 0x03, 0xc9, 0x33, 0x25, 0x0a, 0xf4, 0xed, 0x0f, 0x3c, 0xa1, 0x5e, 0x03, 0xe1, 0x16, 0x40, 0xa7, 0x2b, 0x12, 0x47, 0x97, 0xce, 0x31, 0xe8, 0xd3, 0x25, 0x7b, 0x49, 0xe6}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x09, 0xf3, 0x64, 0xdb, 0x88, 0x15, 0x53, 0x6c, 0x65, 0x1e, 0x7f, 0x59, 0xf3, 0x07, 0xbe, 0x33, 0x14, 0x22, 0xcc, 0x77, 0x0c, 0x2a, 0x6c, 0xf5, 0x35, 0xcc, 0x5e, 0xf6, 0xd9, 0xcb, 0x73, 0x7c}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} azure_AzureTrustedLaunch M - gcp_GCPSEVES = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x53, 0xc6, 0xeb, 0xd1, 0x9f, 0x8e, 0xc8, 0x83, 0xa4, 0xb4, 0x66, 0x80, 0xc3, 0x96, 0xc0, 0xc5, 0xdd, 0x44, 0x1a, 0x99, 0x6e, 0xb9, 0xb4, 0x4a, 0x66, 0xa5, 0xb9, 0xdb, 0xb8, 0xf7, 0xfd, 0xc3}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x6a, 0x1d, 0xd6, 0x2c, 0xbf, 0x05, 0x1c, 0x7f, 0x4d, 0x3c, 0x79, 0xa6, 0x55, 0xbc, 0xa3, 0x8e, 0x68, 0x56, 0x73, 0x08, 0xd7, 0x60, 0xa7, 0x83, 0x60, 0x4d, 0x8a, 0x7c, 0x72, 0x3e, 0xa7, 0xab}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xa7, 0x26, 0x3c, 0x12, 0x87, 0xdc, 0x04, 0x83, 0x83, 0x4c, 0x92, 0x1f, 0x03, 0x2b, 0x78, 0x53, 0xc2, 0x7a, 0x9a, 0xa8, 0x14, 0x93, 0x7c, 0x55, 0x14, 0x02, 0xc7, 0xa0, 0x4b, 0xbd, 0xe6, 0x5b}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - gcp_GCPSEVSNP = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xda, 0x88, 0x29, 0x2b, 0x36, 0xd9, 0x5a, 0x8d, 0xb2, 0x0c, 0x0b, 0xff, 0xfd, 0x65, 0x02, 0x54, 0x89, 0xa9, 0x59, 0x4e, 0x37, 0x49, 0x0d, 0xc3, 0x68, 0x33, 0x18, 0x1c, 0xb7, 0xe8, 0x76, 0x98}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xf0, 0x8d, 0xcb, 0xb1, 0xa8, 0xde, 0xaf, 0x38, 0x1a, 0x9b, 0x42, 0x33, 0xea, 0x16, 0xa2, 0x47, 0x03, 0xce, 0x9f, 0x1c, 0x98, 0x05, 0x55, 0x08, 0x73, 0x5f, 0x1d, 0x5a, 0x8b, 0x1a, 0x2a, 0x8b}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xfd, 0x37, 0x6d, 0xe4, 0x15, 0x14, 0xde, 0xa3, 0x26, 0xba, 0x88, 0xeb, 0xfe, 0xb5, 0x40, 0x21, 0x81, 0x0c, 0xbe, 0xd0, 0x89, 0xa8, 0x7e, 0xbb, 0xf3, 0x4a, 0x2a, 0xba, 0x9b, 0x9f, 0x06, 0xe6}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - openstack_QEMUVTPM = M{4: {Expected: []byte{0xb9, 0x8f, 0x72, 0x85, 0xde, 0x2a, 0xac, 0xd7, 0x0e, 0x84, 0x9d, 0xbd, 0x50, 0x1e, 0x19, 0xda, 0xb0, 0x4a, 0x77, 0xc8, 0x7f, 0x9c, 0x1b, 0x2d, 0x77, 0xd2, 0x78, 0xea, 0x30, 0xea, 0x08, 0x30}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x2b, 0x08, 0xf2, 0xd7, 0x60, 0xc2, 0x5a, 0x8f, 0xef, 0x20, 0x95, 0xd0, 0x4b, 0x80, 0x3c, 0x8f, 0x56, 0xf9, 0xd5, 0xc8, 0x20, 0xda, 0x8b, 0xa8, 0x33, 0xd0, 0x6b, 0xa5, 0xc1, 0xd1, 0xcc, 0xc1}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xe7, 0x6d, 0x29, 0x48, 0xc1, 0x98, 0x9d, 0xae, 0xc3, 0xdc, 0xb2, 0xb3, 0x57, 0x7c, 0xfa, 0xd6, 0xae, 0x41, 0xf5, 0xe6, 0x1c, 0x63, 0x24, 0xc7, 0x9c, 0xbb, 0x6c, 0xea, 0x90, 0xc1, 0x20, 0x14}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + gcp_GCPSEVES = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x7e, 0xc5, 0x19, 0x46, 0xb0, 0xa8, 0x92, 0x4d, 0x94, 0xd5, 0xaa, 0x79, 0xef, 0x3d, 0xaf, 0x3c, 0x2e, 0xdb, 0x62, 0xeb, 0x0b, 0x8e, 0x91, 0xe0, 0x07, 0x95, 0xc1, 0x33, 0x66, 0x70, 0x0b, 0x81}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x2c, 0x5d, 0x28, 0x97, 0xe7, 0xdb, 0x4d, 0x49, 0x29, 0x3e, 0x40, 0xc7, 0xb2, 0xdd, 0x93, 0x34, 0x52, 0x21, 0x1e, 0xe8, 0xd2, 0x0a, 0x0a, 0x3b, 0x41, 0xba, 0x02, 0x1b, 0x53, 0x25, 0xb2, 0x94}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xc9, 0x4e, 0xec, 0xc6, 0xff, 0x75, 0x78, 0xab, 0x47, 0xfa, 0x12, 0xe6, 0x2a, 0x56, 0xf7, 0xd8, 0xd5, 0x20, 0x3f, 0x1c, 0x49, 0x33, 0x08, 0x7d, 0x02, 0xbb, 0x3c, 0xac, 0x01, 0x4e, 0x03, 0x54}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + gcp_GCPSEVSNP = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x14, 0x4b, 0x76, 0x34, 0x8c, 0x43, 0x8d, 0xcd, 0x63, 0xb6, 0xf1, 0x49, 0x27, 0x5e, 0x45, 0x2c, 0xb2, 0xfb, 0x31, 0xd7, 0xf4, 0xdb, 0x97, 0x5f, 0x90, 0x68, 0xff, 0x37, 0x04, 0xbd, 0x9a, 0xc9}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x3c, 0x7a, 0xf2, 0x44, 0x99, 0x32, 0x95, 0xc6, 0xea, 0xc1, 0x20, 0x22, 0xbb, 0x56, 0xc5, 0xa4, 0x68, 0x84, 0x9d, 0x62, 0x6a, 0x35, 0xab, 0xe8, 0x90, 0x0e, 0x07, 0xc0, 0x0e, 0x8a, 0x4e, 0x07}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x3b, 0xb8, 0x0b, 0x88, 0x0a, 0x3b, 0xcd, 0x76, 0xf2, 0xab, 0x4d, 0x19, 0x60, 0x9c, 0x59, 0x3f, 0x0a, 0x6d, 0xa8, 0x8d, 0x71, 0x23, 0xe3, 0x9c, 0x03, 0x9a, 0x82, 0x9b, 0xab, 0x81, 0x6b, 0x76}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + openstack_QEMUVTPM = M{4: {Expected: []byte{0xea, 0xbd, 0xe6, 0xf6, 0x1e, 0xaa, 0x66, 0x5c, 0x7c, 0xdd, 0x0e, 0xe0, 0xa5, 0xb3, 0x14, 0xdf, 0xcc, 0x21, 0x20, 0x00, 0x9d, 0x1b, 0xf2, 0x7d, 0x35, 0x98, 0x71, 0xb4, 0x2e, 0x88, 0x5c, 0xe5}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x81, 0x3f, 0x65, 0xff, 0xe6, 0xf8, 0xc7, 0xbb, 0xe4, 0x36, 0xe5, 0x19, 0xd9, 0x86, 0x0f, 0x41, 0x61, 0x89, 0xcc, 0x27, 0xb1, 0x55, 0x49, 0x4c, 0xd4, 0xeb, 0xe2, 0x59, 0x37, 0x52, 0x33, 0xdb}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x38, 0xa4, 0x46, 0x21, 0x13, 0xf7, 0xca, 0x95, 0xfe, 0xe7, 0x7c, 0xbd, 0x6b, 0x73, 0x65, 0x2b, 0x43, 0xa8, 0xb3, 0x24, 0x87, 0x19, 0xda, 0x44, 0x84, 0x33, 0xea, 0x85, 0xcc, 0xff, 0xcf, 0xe0}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} qemu_QEMUTDX M - qemu_QEMUVTPM = M{4: {Expected: []byte{0xe0, 0x8e, 0x95, 0xbf, 0x5f, 0xc9, 0x20, 0xb3, 0x44, 0x15, 0x37, 0xce, 0xca, 0x8e, 0xd8, 0x18, 0x28, 0xf2, 0x2a, 0x2d, 0x45, 0x7f, 0x14, 0xc6, 0xe7, 0x33, 0x2d, 0x33, 0xaf, 0x78, 0xd7, 0x74}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x00, 0xc9, 0x31, 0xea, 0x60, 0xf1, 0x05, 0x8e, 0x2d, 0xaa, 0xcf, 0x2e, 0x32, 0xbd, 0xb5, 0xb2, 0x77, 0x15, 0xf3, 0xce, 0xe6, 0xf0, 0x5a, 0xf5, 0x70, 0xf0, 0xa0, 0x4c, 0x96, 0x59, 0x7f, 0x85}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xcc, 0x7d, 0xe5, 0xb5, 0xb6, 0x09, 0x7b, 0xf2, 0xa5, 0xf7, 0x2a, 0xe0, 0x68, 0x50, 0x29, 0x51, 0x1b, 0x5c, 0x59, 0xa5, 0x36, 0xe1, 0xe8, 0x78, 0x36, 0xb2, 0xae, 0x29, 0x07, 0x44, 0x8a, 0x99}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + qemu_QEMUVTPM = M{4: {Expected: []byte{0x9c, 0x72, 0x70, 0x95, 0xf1, 0x54, 0x38, 0x6d, 0x69, 0x3e, 0x9c, 0x66, 0x17, 0xfa, 0xf3, 0xe4, 0x9e, 0x99, 0x28, 0x1a, 0x73, 0x41, 0xfa, 0xb3, 0x77, 0x85, 0x84, 0xd1, 0xd0, 0x92, 0xb5, 0x4f}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x29, 0xf0, 0x3d, 0x5a, 0xd7, 0x89, 0x90, 0x1d, 0x23, 0xc4, 0x62, 0x28, 0xaa, 0x89, 0x27, 0x3c, 0xe4, 0x06, 0xfe, 0x2e, 0xa9, 0x49, 0x66, 0xfb, 0x40, 0x00, 0xa4, 0x3a, 0x73, 0xbf, 0x87, 0x2d}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xbd, 0x7f, 0x4b, 0x6d, 0x4f, 0x5f, 0x27, 0x69, 0xd1, 0xa2, 0xb5, 0xfa, 0x59, 0x6c, 0x20, 0xa4, 0x34, 0x7f, 0xe2, 0xcc, 0x68, 0x1e, 0xfa, 0x0a, 0x75, 0xc3, 0x12, 0x8d, 0x98, 0xe6, 0xc9, 0x5e}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} ) diff --git a/internal/config/image_enterprise.go b/internal/config/image_enterprise.go index a9b6ffb0c..a0a6618f6 100644 --- a/internal/config/image_enterprise.go +++ b/internal/config/image_enterprise.go @@ -10,5 +10,5 @@ package config const ( // defaultImage is the default image to use. - defaultImage = "ref/main/stream/nightly/v2.21.0-pre.0.20241212094524-1495a7f6ddfe" + defaultImage = "ref/main/stream/nightly/v2.21.0-pre.0.20241216111606-abe54a2f7abe" ) From 50ab77e37a9eca2793a207dc9d47044f66bc23bd Mon Sep 17 00:00:00 2001 From: Markus Rudy Date: Thu, 19 Dec 2024 14:58:47 +0100 Subject: [PATCH 030/311] image: include files from git reproducibly (#3555) --- image/BUILD.bazel | 12 ++++-------- image/base/BUILD.bazel | 18 +++++++++++++++--- image/initrd/BUILD.bazel | 19 ++++++++++++++++--- 3 files changed, 35 insertions(+), 14 deletions(-) diff --git a/image/BUILD.bazel b/image/BUILD.bazel index 681c6f385..772801b0c 100644 --- a/image/BUILD.bazel +++ b/image/BUILD.bazel @@ -1,16 +1,12 @@ load("@aspect_bazel_lib//lib:copy_file.bzl", "copy_file") load("@rules_pkg//:pkg.bzl", "pkg_tar") -load("@rules_pkg//pkg:mappings.bzl", "pkg_files", "strip_prefix") - -filegroup( - name = "sysroot_tree", - srcs = glob(["sysroot-tree/**"]), -) +load("@rules_pkg//pkg:mappings.bzl", "pkg_attributes", "pkg_files", "strip_prefix") pkg_files( name = "sysroot", - srcs = [":sysroot_tree"], - strip_prefix = strip_prefix.from_pkg() + "sysroot-tree", + srcs = glob(["sysroot-tree/**"]), + attributes = pkg_attributes(mode = "0555"), + strip_prefix = strip_prefix.from_pkg("sysroot-tree"), visibility = ["//visibility:public"], ) diff --git a/image/base/BUILD.bazel b/image/base/BUILD.bazel index 2928787f1..9e613d4fd 100644 --- a/image/base/BUILD.bazel +++ b/image/base/BUILD.bazel @@ -1,5 +1,6 @@ load("@aspect_bazel_lib//lib:copy_to_directory.bzl", "copy_to_directory") load("@rules_pkg//:pkg.bzl", "pkg_tar") +load("@rules_pkg//pkg:mappings.bzl", "pkg_attributes", "pkg_files", "strip_prefix") load("//bazel/mkosi:mkosi_image.bzl", "mkosi_image") copy_to_directory( @@ -33,9 +34,7 @@ copy_to_directory( "mkosi.finalize", "mkosi.postinst", "mkosi.prepare", - ] + glob([ - "mkosi.skeleton/**", - ]), + ], outs = [ kernel_variant, kernel_variant + ".tar", @@ -46,6 +45,7 @@ copy_to_directory( kernel_variant + "-rpmdb.sqlite-wal", ], extra_trees = [ + ":skeleton", "//image:sysroot_tar", "//image:cryptsetup_closure", ], @@ -86,3 +86,15 @@ pkg_tar( tags = ["manual"], visibility = ["//visibility:public"], ) + +pkg_files( + name = "skeleton_files", + srcs = glob(["mkosi.skeleton/**"]), + attributes = pkg_attributes(mode = "0555"), + strip_prefix = strip_prefix.from_pkg("mkosi.skeleton"), +) + +pkg_tar( + name = "skeleton", + srcs = [":skeleton_files"], +) diff --git a/image/initrd/BUILD.bazel b/image/initrd/BUILD.bazel index 6301d6cb5..a959018ec 100644 --- a/image/initrd/BUILD.bazel +++ b/image/initrd/BUILD.bazel @@ -1,17 +1,18 @@ +load("@rules_pkg//:pkg.bzl", "pkg_tar") +load("@rules_pkg//pkg:mappings.bzl", "pkg_attributes", "pkg_files", "strip_prefix") load("//bazel/mkosi:mkosi_image.bzl", "mkosi_image") mkosi_image( name = "initrd", srcs = [ "mkosi.postinst", - ] + glob([ - "mkosi.skeleton/**", - ]), + ], outs = [ "image", "image.cpio.zst", ], extra_trees = [ + ":skeleton", "//image:sysroot_tar", "//image:cryptsetup_closure", "//disk-mapper/cmd:disk-mapper-package.tar", @@ -24,3 +25,15 @@ mkosi_image( ], visibility = ["//visibility:public"], ) + +pkg_files( + name = "skeleton_files", + srcs = glob(["mkosi.skeleton/**"]), + attributes = pkg_attributes(mode = "0555"), + strip_prefix = strip_prefix.from_pkg("mkosi.skeleton"), +) + +pkg_tar( + name = "skeleton", + srcs = [":skeleton_files"], +) From c467ff603b1c0810b3c8cf790331e167ff2c5d59 Mon Sep 17 00:00:00 2001 From: Moritz Sanft <58110325+msanft@users.noreply.github.com> Date: Thu, 19 Dec 2024 19:18:09 +0100 Subject: [PATCH 031/311] ci: enable STACKIT e2e tests (#3556) --- .../actions/constellation_create/action.yml | 13 +- .../constellation_iam_create/action.yml | 18 +++ .github/actions/e2e_test/action.yml | 25 ++- .github/actions/login_stackit/action.yml | 16 ++ .github/actions/notify_stackit/action.yml | 19 +++ .github/actions/terraform_apply/action.yml | 13 ++ .github/workflows/e2e-test-stackit.yml | 153 ++++++++++++++++++ .github/workflows/e2e-test.yml | 13 +- 8 files changed, 263 insertions(+), 7 deletions(-) create mode 100644 .github/actions/login_stackit/action.yml create mode 100644 .github/actions/notify_stackit/action.yml create mode 100644 .github/workflows/e2e-test-stackit.yml diff --git a/.github/actions/constellation_create/action.yml b/.github/actions/constellation_create/action.yml index 63cddf9d8..caec827d6 100644 --- a/.github/actions/constellation_create/action.yml +++ b/.github/actions/constellation_create/action.yml @@ -257,9 +257,9 @@ runs: continue-on-error: true uses: ./.github/actions/artifact_upload with: - name: serial-logs-${{ inputs.artifactNameSuffix }} - path: > - !(terraform).log + name: debug-logs-${{ inputs.artifactNameSuffix }} + path: | + *.log encryptionSecret: ${{ inputs.encryptionSecret }} - name: Prepare terraform state folders @@ -268,9 +268,12 @@ runs: run: | mkdir to-zip cp -r constellation-terraform to-zip - cp -r constellation-iam-terraform to-zip + # constellation-iam-terraform is optional + if [ -d constellation-iam-terraform ]; then + cp -r constellation-iam-terraform to-zip + fi rm -f to-zip/constellation-terraform/plan.zip - rm -rf to-zip/constellation-terraform/.terraform to-zip/constellation-iam-terraform/.terraform + rm -rf to-zip/*/.terraform - name: Upload terraform state if: always() diff --git a/.github/actions/constellation_iam_create/action.yml b/.github/actions/constellation_iam_create/action.yml index a6607d982..4db90d513 100644 --- a/.github/actions/constellation_iam_create/action.yml +++ b/.github/actions/constellation_iam_create/action.yml @@ -42,6 +42,15 @@ inputs: gcpZone: description: "The GCP zone to deploy Constellation in." required: false + # + # STACKIT specific inputs + # + stackitZone: + description: "The STACKIT zone to deploy Constellation in." + required: false + stackitProjectID: + description: "The STACKIT project ID to deploy Constellation in." + required: false runs: using: "composite" @@ -104,3 +113,12 @@ runs: --update-config \ --tf-log=DEBUG \ --yes + + - name: Set STACKIT-specific configuration + shell: bash + env: + STACKIT_PROJECT_ID: ${{ inputs.stackitProjectID }} + run: | + yq eval -i "(.provider.openstack.stackitProjectID) = \"${STACKIT_PROJECT_ID}\"" constellation-conf.yaml + yq eval -i "(.provider.openstack.availabilityZone) = \"${{ inputs.stackitZone }}\"" constellation-conf.yaml + yq eval -i "(.nodeGroups.[].zone) = \"${{ inputs.stackitZone }}\"" constellation-conf.yaml diff --git a/.github/actions/e2e_test/action.yml b/.github/actions/e2e_test/action.yml index c2cca982d..14a31500e 100644 --- a/.github/actions/e2e_test/action.yml +++ b/.github/actions/e2e_test/action.yml @@ -93,6 +93,15 @@ inputs: encryptionSecret: description: "The secret to use for decrypting the artifact." required: true + openStackCloudsYaml: + description: "The contents of ~/.config/openstack/clouds.yaml" + required: false + stackitUat: + description: "The UAT for STACKIT" + required: false + stackitProjectID: + description: "The STACKIT project ID to deploy Constellation in." + required: false outputs: kubeconfig: @@ -229,6 +238,18 @@ runs: with: azure_credentials: ${{ inputs.azureIAMCreateCredentials }} + - name: Login to OpenStack + if: inputs.cloudProvider == 'stackit' + uses: ./.github/actions/login_openstack + with: + clouds_yaml: ${{inputs.openStackCloudsYaml }} + + - name: Login to STACKIT + if: inputs.cloudProvider == 'stackit' + uses: ./.github/actions/login_stackit + with: + serviceAccountToken: ${{ inputs.stackitUat }} + - name: Create prefix id: create-prefix shell: bash @@ -244,7 +265,7 @@ runs: with: attestationVariant: ${{ inputs.attestationVariant }} - - name: Create IAM configuration + - name: Create Constellation config and IAM id: constellation-iam-create uses: ./.github/actions/constellation_iam_create with: @@ -256,6 +277,8 @@ runs: azureRegion: ${{ inputs.regionZone || steps.pick-az-region.outputs.region }} gcpProjectID: ${{ inputs.gcpProject }} gcpZone: ${{ inputs.regionZone || 'europe-west3-b' }} + stackitZone: ${{ inputs.regionZone || 'eu01-2' }} + stackitProjectID: ${{ inputs.stackitProjectID }} kubernetesVersion: ${{ inputs.kubernetesVersion }} additionalTags: "workflow=${{ github.run_id }}" diff --git a/.github/actions/login_stackit/action.yml b/.github/actions/login_stackit/action.yml new file mode 100644 index 000000000..a7ff58425 --- /dev/null +++ b/.github/actions/login_stackit/action.yml @@ -0,0 +1,16 @@ +name: STACKIT login +description: "Login to STACKIT" +inputs: + serviceAccountToken: + description: "Credentials authorized to create Constellation on STACKIT." + required: true +runs: + using: "composite" + steps: + - name: Login to STACKIT + env: + UAT: ${{ inputs.serviceAccountToken }} + shell: bash + run: | + mkdir -p ~/.stackit + echo "${UAT}" > ~/.stackit/credentials.json diff --git a/.github/actions/notify_stackit/action.yml b/.github/actions/notify_stackit/action.yml new file mode 100644 index 000000000..2e64fdac5 --- /dev/null +++ b/.github/actions/notify_stackit/action.yml @@ -0,0 +1,19 @@ +name: Notify STACKIT +description: "Notify STACKIT about test failure" +inputs: + slackToken: + description: "Slack access token." + required: true +runs: + using: "composite" + steps: + - name: Notify STACKIT + env: + SLACK_TOKEN: ${{ inputs.slackToken }} + shell: bash + run: | + curl -X POST \ + -H "Authorization: Bearer $SLACK_TOKEN" \ + -H "Content-type: application/json; charset=utf-8" \ + -d "{\"channel\":\"C0827BT59SM\",\"text\":\"E2E test failed: $GITHUB_SERVER_URL/$GITHUB_REPOSITORY/actions/runs/$GITHUB_RUN_ID\"}" \ + https://slack.com/api/chat.postMessage diff --git a/.github/actions/terraform_apply/action.yml b/.github/actions/terraform_apply/action.yml index ffb893934..cf106b41a 100644 --- a/.github/actions/terraform_apply/action.yml +++ b/.github/actions/terraform_apply/action.yml @@ -29,6 +29,9 @@ runs: "gcpSEVSNP") attestationVariant="gcp-sev-snp" ;; + "qemuVTPM") + attestationVariant="qemu-vtpm" + ;; *) echo "Unknown attestation variant: $(yq '.attestation | keys | .[0]' constellation-conf.yaml)" exit 1 @@ -106,6 +109,16 @@ runs: project_id = "$(yq '.infrastructure.gcp.projectID' constellation-state.yaml)" service_account_key = sensitive("$(cat $(yq '.provider.gcp.serviceAccountKeyPath' constellation-conf.yaml) | base64 -w0)") } + openstack = { + cloud = "stackit" + clouds_yaml_path = "~/.config/openstack/clouds.yaml" + floating_ip_pool_id = "970ace5c-458f-484a-a660-0903bcfd91ad" + deploy_yawol_load_balancer = true + yawol_image_id = "bcd6c13e-75d1-4c3f-bf0f-8f83580cc1be" + yawol_flavor_id = "3b11b27e-6c73-470d-b595-1d85b95a8cdf" + network_id = "$(yq '.infrastructure.networkID' constellation-state.yaml)" + subnet_id = "$(yq '.infrastructure.subnetID' constellation-state.yaml)" + } network_config = { ip_cidr_node = "$(yq '.infrastructure.ipCidrNode' constellation-state.yaml)" ip_cidr_service = "$(yq '.serviceCIDR' constellation-conf.yaml)" diff --git a/.github/workflows/e2e-test-stackit.yml b/.github/workflows/e2e-test-stackit.yml new file mode 100644 index 000000000..9763eec4a --- /dev/null +++ b/.github/workflows/e2e-test-stackit.yml @@ -0,0 +1,153 @@ +name: e2e test STACKIT + +on: + workflow_dispatch: + schedule: + - cron: "0 0 * * *" # Every day at midnight. + +jobs: + find-latest-image: + name: Find latest image + runs-on: ubuntu-24.04 + permissions: + id-token: write + contents: read + outputs: + image-release-stable: ${{ steps.relabel-output.outputs.image-release-stable }} + steps: + - name: Checkout + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + ref: ${{ !github.event.pull_request.head.repo.fork && github.head_ref || '' }} + + - name: Select relevant image + id: select-image-action + uses: ./.github/actions/select_image + with: + osImage: "ref/release/stream/stable/?" + + - name: Relabel output + id: relabel-output + shell: bash + run: | + ref=$(echo 'ref/release/stream/stable/?' | cut -d/ -f2) + stream=$(echo 'ref/release/stream/stable/?' | cut -d/ -f4) + + echo "image-$ref-$stream=${{ steps.select-image-action.outputs.osImage }}" | tee -a "$GITHUB_OUTPUT" + + e2e-stackit: + strategy: + fail-fast: false + max-parallel: 6 + matrix: + kubernetesVersion: [ "1.28", "1.29", "1.30" ] + clusterCreation: [ "cli", "terraform" ] + test: [ "sonobuoy quick" ] + runs-on: ubuntu-24.04 + permissions: + id-token: write + checks: write + contents: read + packages: write + actions: write + needs: [find-latest-image] + steps: + - name: Check out repository + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + fetch-depth: 0 + ref: ${{ !github.event.pull_request.head.repo.fork && github.head_ref || '' }} + + - name: Setup bazel + uses: ./.github/actions/setup_bazel_nix + with: + nixTools: terraform + + - name: Run E2E test + id: e2e_test + uses: ./.github/actions/e2e_test + with: + workerNodesCount: "1" + controlNodesCount: "1" + cloudProvider: stackit + attestationVariant: qemu-vtpm + osImage: ${{ needs.find-latest-image.outputs.image-release-stable }} + isDebugImage: false + cliVersion: ${{ needs.find-latest-image.outputs.image-release-stable || '' }} + kubernetesVersion: ${{ matrix.kubernetesVersion }} + awsOpenSearchDomain: ${{ secrets.AWS_OPENSEARCH_DOMAIN }} + awsOpenSearchUsers: ${{ secrets.AWS_OPENSEARCH_USER }} + awsOpenSearchPwd: ${{ secrets.AWS_OPENSEARCH_PWD }} + gcpProject: constellation-e2e + gcpClusterCreateServiceAccount: "infrastructure-e2e@constellation-e2e.iam.gserviceaccount.com" + gcpIAMCreateServiceAccount: "iam-e2e@constellation-e2e.iam.gserviceaccount.com" + test: ${{ matrix.test }} + azureSubscriptionID: ${{ secrets.AZURE_SUBSCRIPTION_ID }} + azureClusterCreateCredentials: ${{ secrets.AZURE_E2E_CLUSTER_CREDENTIALS }} + azureIAMCreateCredentials: ${{ secrets.AZURE_E2E_IAM_CREDENTIALS }} + registry: ghcr.io + githubToken: ${{ secrets.GITHUB_TOKEN }} + cosignPassword: ${{ secrets.COSIGN_PASSWORD }} + cosignPrivateKey: ${{ secrets.COSIGN_PRIVATE_KEY }} + fetchMeasurements: false + clusterCreation: ${{ matrix.clusterCreation }} + s3AccessKey: ${{ secrets.AWS_ACCESS_KEY_ID_S3PROXY }} + s3SecretKey: ${{ secrets.AWS_SECRET_ACCESS_KEY_S3PROXY }} + encryptionSecret: ${{ secrets.ARTIFACT_ENCRYPT_PASSWD }} + openStackCloudsYaml: ${{ secrets.STACKIT_CI_CLOUDS_YAML }} + stackitUat: ${{ secrets.STACKIT_CI_UAT }} + stackitProjectID: ${{ secrets.STACKIT_CI_PROJECT_ID }} + + - name: Always terminate cluster + if: always() + uses: ./.github/actions/constellation_destroy + with: + kubeconfig: ${{ steps.e2e_test.outputs.kubeconfig }} + clusterCreation: ${{ matrix.clusterCreation }} + cloudProvider: stackit + azureClusterDeleteCredentials: ${{ secrets.AZURE_E2E_CLUSTER_CREDENTIALS }} + gcpClusterDeleteServiceAccount: "infrastructure-e2e@constellation-e2e.iam.gserviceaccount.com" + + - name: Always delete IAM configuration + if: always() + uses: ./.github/actions/constellation_iam_destroy + with: + cloudProvider: stackit + azureCredentials: ${{ secrets.AZURE_E2E_IAM_CREDENTIALS }} + gcpServiceAccount: "iam-e2e@constellation-e2e.iam.gserviceaccount.com" + + - name: Update tfstate + if: always() + env: + GH_TOKEN: ${{ github.token }} + uses: ./.github/actions/update_tfstate + with: + name: terraform-state-${{ steps.e2e_test.outputs.namePrefix }} + runID: ${{ github.run_id }} + encryptionSecret: ${{ secrets.ARTIFACT_ENCRYPT_PASSWD }} + + - name: Notify about failure + if: | + failure() && + github.ref == 'refs/heads/main' && + github.event_name == 'schedule' + continue-on-error: true + uses: ./.github/actions/notify_e2e_failure + with: + projectWriteToken: ${{ secrets.PROJECT_WRITE_TOKEN }} + refStream: "ref/release/stream/stable/?" + test: ${{ matrix.test }} + kubernetesVersion: ${{ matrix.kubernetesVersion }} + provider: stackit + attestationVariant: qemu-vtpm + clusterCreation: ${{ matrix.clusterCreation }} + + - name: Notify STACKIT + if: | + failure() && + github.ref == 'refs/heads/main' && + github.event_name == 'schedule' + continue-on-error: true + uses: ./.github/actions/notify_stackit + with: + slackToken: ${{ secrets.SLACK_TOKEN }} diff --git a/.github/workflows/e2e-test.yml b/.github/workflows/e2e-test.yml index 6efdd03b5..30a649817 100644 --- a/.github/workflows/e2e-test.yml +++ b/.github/workflows/e2e-test.yml @@ -16,6 +16,7 @@ on: - "azure-sev-snp" - "azure-tdx" - "aws-sev-snp" + - "stackit-qemu-vtpm" default: "azure-sev-snp" required: true runner: @@ -137,6 +138,7 @@ jobs: workerNodes: ${{ steps.split-nodeCount.outputs.workerNodes }} controlPlaneNodes: ${{ steps.split-nodeCount.outputs.controlPlaneNodes }} cloudProvider: ${{ steps.split-attestationVariant.outputs.cloudProvider }} + attestationVariant: ${{ steps.split-attestationVariant.outputs.attestationVariant }} steps: - name: Split nodeCount id: split-nodeCount @@ -161,6 +163,12 @@ jobs: attestationVariant="${{ inputs.attestationVariant }}" cloudProvider="${attestationVariant%%-*}" + # special case for STACKIT, as there's no special attestation variant for it + if [[ "${cloudProvider}" == "stackit" ]]; then + attestationVariant="qemu-vtpm" + fi + + echo "attestationVariant=${attestationVariant}" | tee -a "$GITHUB_OUTPUT" echo "cloudProvider=${cloudProvider}" | tee -a "$GITHUB_OUTPUT" find-latest-image: @@ -233,7 +241,7 @@ jobs: workerNodesCount: ${{ needs.generate-input-parameters.outputs.workerNodes }} controlNodesCount: ${{ needs.generate-input-parameters.outputs.controlPlaneNodes }} cloudProvider: ${{ needs.generate-input-parameters.outputs.cloudProvider }} - attestationVariant: ${{ inputs.attestationVariant }} + attestationVariant: ${{ needs.generate-input-parameters.outputs.attestationVariant }} machineType: ${{ inputs.machineType }} regionZone: ${{ inputs.regionZone }} gcpProject: constellation-e2e @@ -262,6 +270,9 @@ jobs: marketplaceImageVersion: ${{ inputs.marketplaceImageVersion }} force: ${{ inputs.force }} encryptionSecret: ${{ secrets.ARTIFACT_ENCRYPT_PASSWD }} + openStackCloudsYaml: ${{ secrets.STACKIT_CI_CLOUDS_YAML }} + stackitUat: ${{ secrets.STACKIT_CI_UAT }} + stackitProjectID: ${{ secrets.STACKIT_CI_PROJECT_ID }} - name: Always terminate cluster if: always() From fcf778e73cf8d9f7c87080b4cb008472aa7744df Mon Sep 17 00:00:00 2001 From: Moritz Sanft <58110325+msanft@users.noreply.github.com> Date: Fri, 20 Dec 2024 10:05:48 +0100 Subject: [PATCH 032/311] ci: only write STACKIT configuration if STACKIT test runs (#3559) --- .github/actions/constellation_iam_create/action.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/actions/constellation_iam_create/action.yml b/.github/actions/constellation_iam_create/action.yml index 4db90d513..91282a927 100644 --- a/.github/actions/constellation_iam_create/action.yml +++ b/.github/actions/constellation_iam_create/action.yml @@ -116,6 +116,7 @@ runs: - name: Set STACKIT-specific configuration shell: bash + if: inputs.cloudProvider == 'stackit' env: STACKIT_PROJECT_ID: ${{ inputs.stackitProjectID }} run: | From 3d9d386538d7f441f0a73e729574cd3438ddb8ba Mon Sep 17 00:00:00 2001 From: edgelessci <71088502+edgelessci@users.noreply.github.com> Date: Mon, 23 Dec 2024 13:59:59 +0100 Subject: [PATCH 033/311] image: update locked rpms (#3560) Co-authored-by: edgelessci --- image/mirror/SHA256SUMS | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/image/mirror/SHA256SUMS b/image/mirror/SHA256SUMS index cee969fe8..fb9867ea9 100644 --- a/image/mirror/SHA256SUMS +++ b/image/mirror/SHA256SUMS @@ -81,12 +81,12 @@ c4cc69bf3a2655b9ee9ac23492d377bac57811c5b4f81fbf43537520ee33c7af gawk-all-langp 554a68e692ccdd0cf71ea67a4c550bac910685465f17eee503732d48ccda9c90 gettext-libs-0.22.5-4.fc40.x86_64.rpm 046971e9f5f0c88737854e1c9e02cce8f5854633575984b235cf3f8b11ec7b91 gettext-runtime-0.22.5-4.fc40.x86_64.rpm 0a32c6874ce180375c2c0b1e2f0c8fed38131a598e5c4ba3866cf3aee1f3f5fc glib2-2.80.3-1.fc40.x86_64.rpm -c1ff8d7de3b20a68a45fefc14e1dceab52117f81314bdc83a1245b2bbb403c01 glibc-2.39-30.fc40.i686.rpm -e939e3c1201f0a412e5821b37ca65a85476670bc2598dbc5d5aa82d75bfa3e26 glibc-2.39-30.fc40.x86_64.rpm -46a46492445ab6444c4947d92977a9311185b40d6fb4099d6a41ca875ba76e41 glibc-common-2.39-30.fc40.x86_64.rpm -4828d4a9902c65d37012d6c521cd191a3564f17dceeabe2e4b5f13575a0beab0 glibc-gconv-extra-2.39-30.fc40.i686.rpm -1cee0583e6fbf7a0f498369da6c568af6d96cb00c5763dc3af098eff70821bab glibc-gconv-extra-2.39-30.fc40.x86_64.rpm -3b7c1c1b48ccfb47b498b0b7729a558dd104bc704558adee51ad0bad86898b59 glibc-minimal-langpack-2.39-30.fc40.x86_64.rpm +fa3fca50d3f8a89109443218fda069d6051a9acd9734213f424b0cd4baf907a9 glibc-2.39-32.fc40.i686.rpm +a0ada3273c02d2c5bb362e5c4227c2af42066257c93946af446be34abe68535b glibc-2.39-32.fc40.x86_64.rpm +4f16dbcaddad818777d4959456bbd39b705aa0460c4e3a7d00854006eb517e81 glibc-common-2.39-32.fc40.x86_64.rpm +98e2276a957fb2466e66754ed3ec963fd20fbb2dd8706fa089cd3e02aa86bb40 glibc-gconv-extra-2.39-32.fc40.i686.rpm +d7641656bc65f1a154211a8b6d46ff3f48c8f63a01dfcec719f966d17e1a06df glibc-gconv-extra-2.39-32.fc40.x86_64.rpm +8e11c9a11d2c327b62604ffca15e0dea590ec077b4c5185f798cf9db2cf96050 glibc-minimal-langpack-2.39-32.fc40.x86_64.rpm b054d6a9ee3477e935686b327aa47379bd1909eac4ce06c4c45dff1a201ecb49 gmp-6.2.1-8.fc40.x86_64.rpm 0a8b1b3fb625e4d1864ad6726f583e2db5db7f10d9f3564b5916ca7fed1b71cb gnupg2-2.4.4-1.fc40.x86_64.rpm 4425dbd35ab65f25b092d12ac56c4b565371a1c52ac882c8896dbeae7d52bbb1 gnupg2-smime-2.4.4-1.fc40.x86_64.rpm @@ -239,12 +239,12 @@ b404c27af03bb1e43fb0dc472d5a1fa152e0563fa2e4eefa29199c47578a829b nano-default-e 8a93376ce7423bd1a649a13f4b5105f270b4603f5cf3b3e230bdbda7f25dd788 ncurses-base-6.4-12.20240127.fc40.noarch.rpm 39bba59320e6276a3b7b07bc94d319511bdd7d32ba098fd49723f4d542794d41 ncurses-libs-6.4-12.20240127.fc40.i686.rpm a18edf32e89aefd453998d5d0ec3aa1ea193dac43f80b99db195abd7e8cf1a04 ncurses-libs-6.4-12.20240127.fc40.x86_64.rpm -35ff2b10ae6da5210d511b1d6d410e8fc0247ef8a12397bd2a8eea9ef5ccfb69 netavark-1.13.0-1.fc40.x86_64.rpm +c425cdd1d0889edb688809ccc2a35a96e67a7dedc119ad540ddd05f8a8997b5e netavark-1.13.1-1.fc40.x86_64.rpm 16172412cfd45453292e18f84fc57e42a3ce92aca72b47ef7e15b44554049cfe nettle-3.9.1-6.fc40.x86_64.rpm 188ce5004e6ed764b4a619b64a4a0f36f1cc4fa919fe0a300599ff1171844144 nftables-1.0.9-3.fc40.x86_64.rpm 784e0fbc9ccb7087c10f4c41edbed13904f94244ff658f308614abe48cdf0d42 npth-1.7-1.fc40.x86_64.rpm f814bc09b50daaab468715088ec056373dbc209a5075306e4ce76f5c55eb2b42 nvme-cli-2.8-1.fc40.x86_64.rpm -b09089231ec94ee1b2dc26e34d8d7f19586d411bc40df7d0e495e559ac2d871a openldap-2.6.7-1.fc40.x86_64.rpm +deed5caa94b7590e42976c73944e882ac6be7ac94b87ea8d476a7dfe4e56c427 openldap-2.6.8-1.fc40.x86_64.rpm 5df04d37e492e5f107cc21e547240f9f98b0b7613320467bc0b08f6aa1b0fb88 openssl-libs-3.2.2-3.fc40.i686.rpm e9fca52d76eb6277b9fec3238226faafc0938806318fad1143a527fdd28a16cf openssl-libs-3.2.2-3.fc40.x86_64.rpm 9f0336deb6f1b1524ec48d837622e7e2291995369b0356d7ad1e1d427f3b659a os-prober-1.81-6.fc40.x86_64.rpm @@ -308,7 +308,7 @@ c48c149f4aebfe44d649eea6f7a8eaa229dc8db71ff70b66c7403aa9bd072820 rpm-libs-4.19. 7bebda41ea91faf8cf8911a403c051eb59d444e60f8091d14d10987b713f39ff rpm-plugin-audit-4.19.1.1-1.fc40.x86_64.rpm d400a4e4440bea56566fb1e9582d86d1ac2e07745d37fa6e71f43a8fea05217c rpm-plugin-selinux-4.19.1.1-1.fc40.x86_64.rpm 7fdc56b6abf0b36209010e2f4cc02febe079b50b0cb1ed7e564045b34059d8a7 rpm-sequoia-1.7.0-3.fc40.x86_64.rpm -d87be787717e442016af16c2e58d10f6cadf533cfb2a6e817e7cecf7bedfc1d8 runc-1.2.2-1.fc40.x86_64.rpm +37ae30870dacd02dc2b0a38b22c4cd9120b504ec46b27d4bc2fbb69394a3d3ce runc-1.2.3-1.fc40.x86_64.rpm 5dbd069183076ed8048c839c31f713c0f6080fb9ebfdda92ac550030688e811b sbsigntools-0.9.5-6.fc40.x86_64.rpm 6a21b2c132a54fd6d9acb846d0a96289ab739b745cdc4c2b31bdbf6b2434a1a7 sed-4.9-1.fc40.x86_64.rpm b4e188db51c7ec2d5f0cba79783eb2df7c14a92c2c6e55a9eb490d28d17d123d selinux-policy-40.29-2.fc40.noarch.rpm @@ -339,17 +339,17 @@ c3be8a6d0ea23b1d0bf466b19857b97f7ffde811ad7adec0599161059d84cc74 tpm2-tss-4.1.3 945aa536bc30050abc1870cef167cb944cf78d6628923476db43201a0054574b util-linux-2.40.2-1.fc40.x86_64.rpm 7ec1b5df780c5a30f8e901179480125a6ea87f1f7bad3b69da7f4b351b88c3dd util-linux-core-2.40-0.9.rc1.fc40.x86_64.rpm b1aa4e816c01c08c18924865640f214f717cdfc66837e53a24b8edfb80a86f9d util-linux-core-2.40.2-1.fc40.x86_64.rpm -fb78d7a38305025bf2a6f4876cd70ed5d2bd888b4a2df91e35f1426a57267e38 vim-common-9.1.906-1.fc40.x86_64.rpm -f44d05b58d9def775f187b24468aa9e4d21647b6b4303ed92bc994db8d7db986 vim-data-9.1.906-1.fc40.noarch.rpm -3d3ab14b5cd806eade3a5246fefe47b5acf440a1cea9d17c2591fbbdd24cc37a vim-enhanced-9.1.906-1.fc40.x86_64.rpm -175abd5a9e2149da58a203208909681e717c1354050ae9bd71f408b04f5367b3 vim-filesystem-9.1.906-1.fc40.noarch.rpm +51e57c8dd885fb8b00b5225e3aa6d037b74ff35cb5f3962d7622af4566e4386e vim-common-9.1.919-1.fc40.x86_64.rpm +b00addd65b86713a3d5507c343cfc750ee9fe656130df464c109f9cd18aa7439 vim-data-9.1.919-1.fc40.noarch.rpm +4eff285f016104291d5515cc103993ead80ba17bebd7b1f7814efb3565a30ea5 vim-enhanced-9.1.919-1.fc40.x86_64.rpm +6642da315fd235087b3b4ee328b0264bc463536e900d6e01a93b70b96ef0d08e vim-filesystem-9.1.919-1.fc40.noarch.rpm 5f4aef6a6f19712c142b3e592ff05bba03dee877a0a098df294d876063918805 wget2-2.2.0-1.fc40.x86_64.rpm a4119091a85b4aa4262a26f6ed2d6653de9b7c4def3636a2b0ad066436f29acd wget2-libs-2.2.0-1.fc40.x86_64.rpm 4948040a53814b1b4b76f6ec9d64ec21f3f2d1196a0a1c5b117f91fa58a267b1 wget2-wget-2.2.0-1.fc40.x86_64.rpm cf0306ceed1c6b3be39060d85f16b1953b464d3a625488b170d3b7aadf600645 which-2.21-41.fc40.x86_64.rpm 4ede95a2fa3bc0ae617c8bf3a375b800163d58733b4829b15d9f038505d79fee whois-nls-5.5.20-3.fc40.noarch.rpm e2195010e857f56b19246f8b821f9391922880b7691b3728a413f540edc890a6 xkeyboard-config-2.41-1.fc40.noarch.rpm -2dbefca406a2daa52c3816940e016edc24db4c94ed45aa89e2e577559536d9c4 xxd-9.1.906-1.fc40.x86_64.rpm +a2043ea6140e797e1ce040fe21e4876911ba38c1af4becf5171940ecb9ba9ddc xxd-9.1.919-1.fc40.x86_64.rpm ee599a1c4d7ee635e54ec137af4dded83f433b9c8a5976f75ecdcd000b5246e3 xz-5.4.6-3.fc40.x86_64.rpm b92ef78d8ab424c22130e457d0ef691d8197bff61c3b8852205d1b02baba3819 xz-libs-5.4.6-3.fc40.i686.rpm b6ee44b3d7e494b0364f26b7d0b169a8092180af787423cd5e8a47dc0f738a66 xz-libs-5.4.6-3.fc40.x86_64.rpm From 44612b1d93d69f3dfac5d6fd8ff4f61e3354b546 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 23 Dec 2024 14:01:26 +0100 Subject: [PATCH 034/311] deps: update Kubernetes versions (#3553) * deps: update Kubernetes versions * deps: tidy all modules --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: edgelessci --- docs/docs/architecture/versions.md | 4 ++-- internal/versions/versions.go | 20 +++++++++---------- .../docs/resources/cluster.md | 2 +- 3 files changed, 13 insertions(+), 13 deletions(-) diff --git a/docs/docs/architecture/versions.md b/docs/docs/architecture/versions.md index 9d5a064e0..f877c8995 100644 --- a/docs/docs/architecture/versions.md +++ b/docs/docs/architecture/versions.md @@ -17,5 +17,5 @@ The following Kubernetes versions are currently supported: * v1.28.15 -* v1.29.11 -* v1.30.7 +* v1.29.12 +* v1.30.8 diff --git a/internal/versions/versions.go b/internal/versions/versions.go index 71f7fe9c5..04cb3927a 100644 --- a/internal/versions/versions.go +++ b/internal/versions/versions.go @@ -183,9 +183,9 @@ const ( //nolint:revive V1_28 ValidK8sVersion = "v1.28.15" // renovate:kubernetes-release //nolint:revive - V1_29 ValidK8sVersion = "v1.29.11" // renovate:kubernetes-release + V1_29 ValidK8sVersion = "v1.29.12" // renovate:kubernetes-release //nolint:revive - V1_30 ValidK8sVersion = "v1.30.7" // renovate:kubernetes-release + V1_30 ValidK8sVersion = "v1.30.8" // renovate:kubernetes-release // Default k8s version deployed by Constellation. Default ValidK8sVersion = V1_29 @@ -265,7 +265,7 @@ var VersionConfigs = map[ValidK8sVersion]KubernetesVersion{ ClusterAutoscalerImage: "registry.k8s.io/autoscaling/cluster-autoscaler:v1.28.7@sha256:77906954da9171425c8c8d3286091818143b6dcf9039abd49b8f33f1502978a1", // renovate:container }, V1_29: { - ClusterVersion: "v1.29.11", // renovate:kubernetes-release + ClusterVersion: "v1.29.12", // renovate:kubernetes-release KubernetesComponents: components.Components{ { Url: "https://github.com/containernetworking/plugins/releases/download/v1.6.0/cni-plugins-linux-amd64-v1.6.0.tgz", // renovate:cni-plugins-release @@ -298,15 +298,15 @@ var VersionConfigs = map[ValidK8sVersion]KubernetesVersion{ Extract: false, }, { - Url: "data:application/json;base64,W3sib3AiOiJyZXBsYWNlIiwicGF0aCI6Ii9zcGVjL2NvbnRhaW5lcnMvMC9pbWFnZSIsInZhbHVlIjoicmVnaXN0cnkuazhzLmlvL2t1YmUtYXBpc2VydmVyOnYxLjI5LjExQHNoYTI1Njo2NTQ1ZjZmNjJjMWYwZjBhZmZmNTM0YzIyNzZiZDI0MmZmZGFjNTRlNzNiMjJjYzEwMzQzNTIyYzcyYjlmNzcxIn1d", + Url: "data:application/json;base64,W3sib3AiOiJyZXBsYWNlIiwicGF0aCI6Ii9zcGVjL2NvbnRhaW5lcnMvMC9pbWFnZSIsInZhbHVlIjoicmVnaXN0cnkuazhzLmlvL2t1YmUtYXBpc2VydmVyOnYxLjI5LjEyQHNoYTI1NjoyODA0YjFlN2I5ZTA4ZjNhMzQ2OGY4ZmQyZjY0ODdjNTU5NjhiOTI5M2VlNTFiOWVmYjg2NWIzMjk4YWNmYTI2In1d", InstallPath: patchFilePath("kube-apiserver"), }, { - Url: "data:application/json;base64,W3sib3AiOiJyZXBsYWNlIiwicGF0aCI6Ii9zcGVjL2NvbnRhaW5lcnMvMC9pbWFnZSIsInZhbHVlIjoicmVnaXN0cnkuazhzLmlvL2t1YmUtY29udHJvbGxlci1tYW5hZ2VyOnYxLjI5LjExQHNoYTI1Njo1OTU1NDgyZDg5NWFhNGE0MTNhNzBhZjUwNjcwNjA1OTIzOGIzNjM3ZmQ3MzA1OTRlNTljOTkwOTU0MjIxZjEzIn1d", + Url: "data:application/json;base64,W3sib3AiOiJyZXBsYWNlIiwicGF0aCI6Ii9zcGVjL2NvbnRhaW5lcnMvMC9pbWFnZSIsInZhbHVlIjoicmVnaXN0cnkuazhzLmlvL2t1YmUtY29udHJvbGxlci1tYW5hZ2VyOnYxLjI5LjEyQHNoYTI1NjplMmYyNmEzZjVlZjNmZDAxZjYzMzBjYWI4YjA3OGNmMzAzY2ZiNmQzNjkxMWEyMTBkMDkxNWQ1MzU5MTBlNDEyIn1d", InstallPath: patchFilePath("kube-controller-manager"), }, { - Url: "data:application/json;base64,W3sib3AiOiJyZXBsYWNlIiwicGF0aCI6Ii9zcGVjL2NvbnRhaW5lcnMvMC9pbWFnZSIsInZhbHVlIjoicmVnaXN0cnkuazhzLmlvL2t1YmUtc2NoZWR1bGVyOnYxLjI5LjExQHNoYTI1NjpmZTA3OGYyNmJmMTQzMDFmNzk0NjhkNzlhNWQyZDQzMWIzNDZhNGFiYjFjYWI0ZTliMWY5YmE4OTE0OTY0MTYxIn1d", + Url: "data:application/json;base64,W3sib3AiOiJyZXBsYWNlIiwicGF0aCI6Ii9zcGVjL2NvbnRhaW5lcnMvMC9pbWFnZSIsInZhbHVlIjoicmVnaXN0cnkuazhzLmlvL2t1YmUtc2NoZWR1bGVyOnYxLjI5LjEyQHNoYTI1NjplZDY2ZTIxMDJmNDcwNWQ0NWRlNzUxM2RlY2YzYWM2MTg3OTcwNDk4NDQwOTMyMzc3OWQxOWU5OGI5NzA1NjhjIn1d", InstallPath: patchFilePath("kube-scheduler"), }, { @@ -332,7 +332,7 @@ var VersionConfigs = map[ValidK8sVersion]KubernetesVersion{ ClusterAutoscalerImage: "registry.k8s.io/autoscaling/cluster-autoscaler:v1.29.5@sha256:76865740be7c965b35ee1524931bb4abfe4c27b5bfad280e84068cd6653ee7bb", // renovate:container }, V1_30: { - ClusterVersion: "v1.30.7", // renovate:kubernetes-release + ClusterVersion: "v1.30.8", // renovate:kubernetes-release KubernetesComponents: components.Components{ { Url: "https://github.com/containernetworking/plugins/releases/download/v1.6.0/cni-plugins-linux-amd64-v1.6.0.tgz", // renovate:cni-plugins-release @@ -365,15 +365,15 @@ var VersionConfigs = map[ValidK8sVersion]KubernetesVersion{ Extract: false, }, { - Url: "data:application/json;base64,W3sib3AiOiJyZXBsYWNlIiwicGF0aCI6Ii9zcGVjL2NvbnRhaW5lcnMvMC9pbWFnZSIsInZhbHVlIjoicmVnaXN0cnkuazhzLmlvL2t1YmUtYXBpc2VydmVyOnYxLjMwLjdAc2hhMjU2OjEzZjRmMGY1ODUwYjM5NzQyMTAxYzY1NmIxYmJkNTA5MGVhY2YyNzA4NGFkODliNDg5ZmM4MjRlZjQ4MmVkOWMifV0=", + Url: "data:application/json;base64,W3sib3AiOiJyZXBsYWNlIiwicGF0aCI6Ii9zcGVjL2NvbnRhaW5lcnMvMC9pbWFnZSIsInZhbHVlIjoicmVnaXN0cnkuazhzLmlvL2t1YmUtYXBpc2VydmVyOnYxLjMwLjhAc2hhMjU2OmYwZTFiM2RlMGMyZTk4ZTZjNmFiZDczZWRmOWQzYjhlNGQ0NDQ2MDY1NmNkZTBlYmI5MmUyZDkyMDY5NjFmY2IifV0=", InstallPath: patchFilePath("kube-apiserver"), }, { - Url: "data:application/json;base64,W3sib3AiOiJyZXBsYWNlIiwicGF0aCI6Ii9zcGVjL2NvbnRhaW5lcnMvMC9pbWFnZSIsInZhbHVlIjoicmVnaXN0cnkuazhzLmlvL2t1YmUtY29udHJvbGxlci1tYW5hZ2VyOnYxLjMwLjdAc2hhMjU2OjViOGRjMjZjMDViMjczY2UxOThmYmFmNGViMTc5ZjNiNmQ2OTE5YzZlMjExNmQzNmRjN2Y4MjU1NTM3NGM2ODcifV0=", + Url: "data:application/json;base64,W3sib3AiOiJyZXBsYWNlIiwicGF0aCI6Ii9zcGVjL2NvbnRhaW5lcnMvMC9pbWFnZSIsInZhbHVlIjoicmVnaXN0cnkuazhzLmlvL2t1YmUtY29udHJvbGxlci1tYW5hZ2VyOnYxLjMwLjhAc2hhMjU2OjEyNGY2NmI3ZTg3N2ViNWE4MGE0MDUwMzA1NzI5OWJiNjBlNmE1ZjIxMzA5MDVmNGUzMjkzZGFiZjE5NGMzOTcifV0=", InstallPath: patchFilePath("kube-controller-manager"), }, { - Url: "data:application/json;base64,W3sib3AiOiJyZXBsYWNlIiwicGF0aCI6Ii9zcGVjL2NvbnRhaW5lcnMvMC9pbWFnZSIsInZhbHVlIjoicmVnaXN0cnkuazhzLmlvL2t1YmUtc2NoZWR1bGVyOnYxLjMwLjdAc2hhMjU2OjAwYjE2ZGI5OTExMDFiNzM2MWYyZjE4MDM1ZTFjNjUyNmMwY2U2YzlhOTU2ODUyNDgyNGI0YmNjZGYxYWZiZDYifV0=", + Url: "data:application/json;base64,W3sib3AiOiJyZXBsYWNlIiwicGF0aCI6Ii9zcGVjL2NvbnRhaW5lcnMvMC9pbWFnZSIsInZhbHVlIjoicmVnaXN0cnkuazhzLmlvL2t1YmUtc2NoZWR1bGVyOnYxLjMwLjhAc2hhMjU2OmM4YmRlYWMyNTkwYzk5YzFhNzdlMzM5OTU0MjNkZGI2NjMzZmY5MGE4MmEyYWE0NTU0NDJlMGE4MDc5ZWY4YzcifV0=", InstallPath: patchFilePath("kube-scheduler"), }, { diff --git a/terraform-provider-constellation/docs/resources/cluster.md b/terraform-provider-constellation/docs/resources/cluster.md index c2a322582..d29cb0f6e 100644 --- a/terraform-provider-constellation/docs/resources/cluster.md +++ b/terraform-provider-constellation/docs/resources/cluster.md @@ -69,7 +69,7 @@ resource "constellation_cluster" "azure_example" { See the [full list of CSPs](https://docs.edgeless.systems/constellation/overview/clouds) that Constellation supports. - `image` (Attributes) Constellation OS Image to use on the nodes. (see [below for nested schema](#nestedatt--image)) - `init_secret` (String) Secret used for initialization of the cluster. -- `kubernetes_version` (String) The Kubernetes version to use for the cluster. The supported versions are [v1.28.15 v1.29.11 v1.30.7]. +- `kubernetes_version` (String) The Kubernetes version to use for the cluster. The supported versions are [v1.28.15 v1.29.12 v1.30.8]. - `master_secret` (String) Hex-encoded 32-byte master secret for the cluster. - `master_secret_salt` (String) Hex-encoded 32-byte master secret salt for the cluster. - `measurement_salt` (String) Hex-encoded 32-byte measurement salt for the cluster. From 19e54a0174a95df4ddafb9718313afaaec2ad532 Mon Sep 17 00:00:00 2001 From: edgelessci <71088502+edgelessci@users.noreply.github.com> Date: Sun, 29 Dec 2024 13:22:19 +0100 Subject: [PATCH 035/311] image: update locked rpms (#3564) Co-authored-by: edgelessci --- image/mirror/SHA256SUMS | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/image/mirror/SHA256SUMS b/image/mirror/SHA256SUMS index fb9867ea9..b05af5cd0 100644 --- a/image/mirror/SHA256SUMS +++ b/image/mirror/SHA256SUMS @@ -217,8 +217,8 @@ bc60959e98e5f690bc3df03bfa8afee2d0cf28e794c4e3c52f19769885771321 libusb1-1.0.27 b6db3e72ae6575127216145c1f65414ea94acd9db26d08c5081cb5d786101c1f libuuid-2.40.2-1.fc40.x86_64.rpm bea578631618692ba5e302beadfdf6d5894e23e5bddaea4b4fca2f377dd1aaac libverto-0.3.2-8.fc40.i686.rpm fadf7dd93c5eee57ba78e0628bf041dbd2ea037ace52f0a5cbac55b363234d27 libverto-0.3.2-8.fc40.x86_64.rpm -c0d73b087b04d47d5256346255c260123d14406f1e07784192320e2093f5f5b7 libxcrypt-4.4.36-11.fc40.i686.rpm -efaf797a0d787aeddc65893a26b0e845824f27e9734bd111b194b551b593a572 libxcrypt-4.4.36-11.fc40.x86_64.rpm +b8add82e1794a5624bf6b6dbbc6ad96e542e6215dbdc96ab3dc1c547c70d3257 libxcrypt-4.4.36-12.fc40.i686.rpm +fdc08da848ae56ce326ef900b6d2532c046bf7d4719e84d4be073bf58d623b47 libxcrypt-4.4.36-12.fc40.x86_64.rpm a17f9a8894a00ee97a42219b3b21d64bfb850d74059d89ae299210bc477e8967 libxkbcommon-1.6.0-2.fc40.i686.rpm 1f1d0c1e1132016735acc6fc3390102b35f9eb257244547c7b61c32a9c2314cc libxkbcommon-1.6.0-2.fc40.x86_64.rpm 302104acbc7b094958be4f764c14f738462fdb381fc38aac63e0e7eaedaa82a7 libxml2-2.12.8-1.fc40.i686.rpm @@ -254,8 +254,8 @@ b3b261e448a25c6550f050ca1813509dd6edbb10f22c02a535548332435b6bc4 pam-1.6.1-5.fc 753d7b5a6531eec7689414dc1a4ce76ba4d327b8ad0363a9298ee67b565c1d95 pam-libs-1.6.1-5.fc40.i686.rpm 6ca8efd0b2a26cc51917c1c81260d919ef7760f0e0770dc872a78b1b829299cd pam-libs-1.6.1-5.fc40.x86_64.rpm 9bbce784622e02af0371ced8e9a7d26adba7eabd66ecfcb8bbe2d24cf616e3c1 parted-3.6-4.fc40.x86_64.rpm -49390fb9cb09310813c14c5b0da9d4fe0b82055978c59bd2bde89ebbc8a815b5 passt-0^20241127.gc0fbc7e-1.fc40.x86_64.rpm -566f17db812c6cd850ad7bf9c2632e2f3bfe7c9ce259db2f88d7b0c0a1583766 passt-selinux-0^20241127.gc0fbc7e-1.fc40.noarch.rpm +c974aaedb25dbef6641edfe7a6671c38f114a607a10930f11d76715bb50b8dca passt-0^20241211.g09478d5-1.fc40.x86_64.rpm +4ea0e7215b5c9a7e98960c7c42931a0440361d8427099c7722b2c8cb37f15e4c passt-selinux-0^20241211.g09478d5-1.fc40.noarch.rpm a0fb808d6b7ff8cd9cfdc1a60f213851cecdcace334d6e5aa1e0e54b81d79a25 pcre2-10.44-1.fc40.i686.rpm 73e50df09266fcffda9c24a3738f579dd365c2c187c294da054ef9915edc3851 pcre2-10.44-1.fc40.x86_64.rpm dbec699e88d42fc6fb1df0a8c0b9023941ed1b1b7625694253a612eaf9f2691d pcre2-syntax-10.44-1.fc40.noarch.rpm @@ -276,9 +276,9 @@ af85755cda79959a19161ebc26a45e507003298bd97b472b9ab0d512afa5e46a protobuf-c-1.5 45ff2e9814aa059f323b23710c73309d41d36306667a3004f5fbb86b0cab4484 psmisc-23.6-6.fc40.x86_64.rpm cca50802d4f75306bc37126feb92db79fed44dcdabf76c1556853334995b9d3b publicsuffix-list-dafsa-20240107-3.fc40.noarch.rpm 7c703b431508f44c5184b5c1df052ed0f49b7439d68aa3597a9a57a5b26bd648 python-pip-wheel-23.3.2-2.fc40.noarch.rpm -bcac955e69958e064669ed6e0a394bd9dd2c76e63f558a205ced18a9755012ab python-unversioned-command-3.12.7-1.fc40.noarch.rpm -6d8342314daafde5c5ec4ec2935e74edb9bea107dc8cd72642e322444f264c7d python3-3.12.7-1.fc40.x86_64.rpm -839d6dd1d8ac9b55f14b504eca5ac5e66b8330341608f7c9132cb29816116ecb python3-libs-3.12.7-1.fc40.x86_64.rpm +86e17167996c17798e116974f42e63dc2e0ac6bce1c10a47416d421c785a5ea4 python-unversioned-command-3.12.8-2.fc40.noarch.rpm +5526220160d59c64689dd2c017a03a26a909c5c50f7973c8bf3750f8f39ca114 python3-3.12.8-2.fc40.x86_64.rpm +0905050a05fce20538191ad45e61bca86d61877f58da47df1b59465d034a4ae6 python3-libs-3.12.8-2.fc40.x86_64.rpm d50b24d1a217e5201b4f8350945b7a3bc3fa01a61a8dd8d28e1b9512295238e1 qemu-user-static-8.2.8-2.fc40.x86_64.rpm 11f752c50493eca8f6dddf3140c694d3db4bc808771eaba25978ea2c309b2196 qemu-user-static-aarch64-8.2.8-2.fc40.x86_64.rpm 8598fde32ac72cafcc57f30edbfed1f920c58001dbeecb6932f4de8ce76091ba qemu-user-static-alpha-8.2.8-2.fc40.x86_64.rpm From 7dd743b69ee1dea5b1527c17965e83f8189c5223 Mon Sep 17 00:00:00 2001 From: edgelessci <71088502+edgelessci@users.noreply.github.com> Date: Sun, 5 Jan 2025 15:50:36 +0100 Subject: [PATCH 036/311] image: update locked rpms (#3567) Co-authored-by: edgelessci --- image/mirror/SHA256SUMS | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/image/mirror/SHA256SUMS b/image/mirror/SHA256SUMS index b05af5cd0..a2d8eafd2 100644 --- a/image/mirror/SHA256SUMS +++ b/image/mirror/SHA256SUMS @@ -27,7 +27,7 @@ ea1f43ef9a4b02a9c66726ee386f090145696fb93dff80d593ac82126f8037ec cracklib-2.9.1 fe24641e69545c428890a4b094f015c03f65a6c30c3db7bb0de7672bab66bfd6 cracklib-dicts-2.9.11-5.fc40.x86_64.rpm f3f3e5f6a1c1bee67c0c6598a48143c36827f90a095897d649580a174468cdbc criu-4.0-1.fc40.x86_64.rpm bbdb6014e2bd87db1bb2d4795a57cbb08bfdb03777c2b9730a3f45f7977fc4c9 criu-libs-4.0-1.fc40.x86_64.rpm -d388aa1a184a3ed04c68a39f81a9dcc39088b1f279d49d3631db608da6611937 crun-1.18.2-1.fc40.x86_64.rpm +99e18641538356e84e4898dd6b05c6637ef8eff46df8ec837f0fb78f87ad6f27 crun-1.19.1-1.fc40.x86_64.rpm d7a62ff0193375607d28d8fe7eedf3ff5b6ddac154e1474d79787b9f32ae298d crypto-policies-20241011-1.git5930b9a.fc40.noarch.rpm 0f1d436f879fa30f18adca576a1f91bb1a8d1ac42cff5f35c1d15e6dffc506fa crypto-policies-scripts-20241011-1.git5930b9a.fc40.noarch.rpm 26aadc06a9f98c58ca6250d811e749ee5fa76059b37445ec28b50ee73d548174 cryptsetup-2.7.5-1.fc40.x86_64.rpm @@ -81,12 +81,12 @@ c4cc69bf3a2655b9ee9ac23492d377bac57811c5b4f81fbf43537520ee33c7af gawk-all-langp 554a68e692ccdd0cf71ea67a4c550bac910685465f17eee503732d48ccda9c90 gettext-libs-0.22.5-4.fc40.x86_64.rpm 046971e9f5f0c88737854e1c9e02cce8f5854633575984b235cf3f8b11ec7b91 gettext-runtime-0.22.5-4.fc40.x86_64.rpm 0a32c6874ce180375c2c0b1e2f0c8fed38131a598e5c4ba3866cf3aee1f3f5fc glib2-2.80.3-1.fc40.x86_64.rpm -fa3fca50d3f8a89109443218fda069d6051a9acd9734213f424b0cd4baf907a9 glibc-2.39-32.fc40.i686.rpm -a0ada3273c02d2c5bb362e5c4227c2af42066257c93946af446be34abe68535b glibc-2.39-32.fc40.x86_64.rpm -4f16dbcaddad818777d4959456bbd39b705aa0460c4e3a7d00854006eb517e81 glibc-common-2.39-32.fc40.x86_64.rpm -98e2276a957fb2466e66754ed3ec963fd20fbb2dd8706fa089cd3e02aa86bb40 glibc-gconv-extra-2.39-32.fc40.i686.rpm -d7641656bc65f1a154211a8b6d46ff3f48c8f63a01dfcec719f966d17e1a06df glibc-gconv-extra-2.39-32.fc40.x86_64.rpm -8e11c9a11d2c327b62604ffca15e0dea590ec077b4c5185f798cf9db2cf96050 glibc-minimal-langpack-2.39-32.fc40.x86_64.rpm +4a0cc12fb936afe9bafa10e65a2382ceb5d3527dca31edf6f582730c06c6cbe3 glibc-2.39-33.fc40.i686.rpm +7e6ec3b69b313065f0552ba72636b49ae1504aa13a18e98899c6dfea64e81698 glibc-2.39-33.fc40.x86_64.rpm +61a7a7eed34433eb05a5ce2156ca3e85afe5b9f26bbf69e4acac77139b430068 glibc-common-2.39-33.fc40.x86_64.rpm +2e3c0ce27ffa93e3af48bab5a0e3e3903026b6cab09e4b12c1ca5e0454292da6 glibc-gconv-extra-2.39-33.fc40.i686.rpm +11b66a6b5a32492854bb51e6b58bc3b6a5a96ad0bdbe1a59c208786306053784 glibc-gconv-extra-2.39-33.fc40.x86_64.rpm +97833431611221385a39324253a72fb12a696dedf031c479455c5a8a637f56e7 glibc-minimal-langpack-2.39-33.fc40.x86_64.rpm b054d6a9ee3477e935686b327aa47379bd1909eac4ce06c4c45dff1a201ecb49 gmp-6.2.1-8.fc40.x86_64.rpm 0a8b1b3fb625e4d1864ad6726f583e2db5db7f10d9f3564b5916ca7fed1b71cb gnupg2-2.4.4-1.fc40.x86_64.rpm 4425dbd35ab65f25b092d12ac56c4b565371a1c52ac882c8896dbeae7d52bbb1 gnupg2-smime-2.4.4-1.fc40.x86_64.rpm @@ -217,12 +217,12 @@ bc60959e98e5f690bc3df03bfa8afee2d0cf28e794c4e3c52f19769885771321 libusb1-1.0.27 b6db3e72ae6575127216145c1f65414ea94acd9db26d08c5081cb5d786101c1f libuuid-2.40.2-1.fc40.x86_64.rpm bea578631618692ba5e302beadfdf6d5894e23e5bddaea4b4fca2f377dd1aaac libverto-0.3.2-8.fc40.i686.rpm fadf7dd93c5eee57ba78e0628bf041dbd2ea037ace52f0a5cbac55b363234d27 libverto-0.3.2-8.fc40.x86_64.rpm -b8add82e1794a5624bf6b6dbbc6ad96e542e6215dbdc96ab3dc1c547c70d3257 libxcrypt-4.4.36-12.fc40.i686.rpm -fdc08da848ae56ce326ef900b6d2532c046bf7d4719e84d4be073bf58d623b47 libxcrypt-4.4.36-12.fc40.x86_64.rpm +89d7d4ad87de0762399b5ab771b0bd12beac974e974371fe6f5f6b8f21b102e7 libxcrypt-4.4.37-1.fc40.i686.rpm +16276f01cc23d1b5b716bce2696b958a694f869f6f56a85fb5cc1bcfc4193062 libxcrypt-4.4.37-1.fc40.x86_64.rpm a17f9a8894a00ee97a42219b3b21d64bfb850d74059d89ae299210bc477e8967 libxkbcommon-1.6.0-2.fc40.i686.rpm 1f1d0c1e1132016735acc6fc3390102b35f9eb257244547c7b61c32a9c2314cc libxkbcommon-1.6.0-2.fc40.x86_64.rpm -302104acbc7b094958be4f764c14f738462fdb381fc38aac63e0e7eaedaa82a7 libxml2-2.12.8-1.fc40.i686.rpm -ed8d18570524445954dae5aff6239d9cc987cf8b3313fcd48c42f1b79b8eb247 libxml2-2.12.8-1.fc40.x86_64.rpm +db2c5422aeef81940a186b597df582b75a0f156e481262bef262f1b69ea1b799 libxml2-2.12.9-1.fc40.i686.rpm +1d33dae8642a772dc8fae5c8e2e81010d0536e8158f8fafb27e51fa1ee645df0 libxml2-2.12.9-1.fc40.x86_64.rpm cd866911efd52e3a70655df3da9d71ad2f4a326463aeaa381493a7547e14871d libzstd-1.5.6-1.fc40.i686.rpm bed3075b9ff919eded25cb45e9e03b8a7c63bcc8e893ec28c999aecaa68c51d3 libzstd-1.5.6-1.fc40.x86_64.rpm 81409455da42a5ffdcf5b8cc711632ce037fec25d5ae00cbfda5010c9db04157 lua-libs-5.4.6-5.fc40.x86_64.rpm @@ -339,17 +339,17 @@ c3be8a6d0ea23b1d0bf466b19857b97f7ffde811ad7adec0599161059d84cc74 tpm2-tss-4.1.3 945aa536bc30050abc1870cef167cb944cf78d6628923476db43201a0054574b util-linux-2.40.2-1.fc40.x86_64.rpm 7ec1b5df780c5a30f8e901179480125a6ea87f1f7bad3b69da7f4b351b88c3dd util-linux-core-2.40-0.9.rc1.fc40.x86_64.rpm b1aa4e816c01c08c18924865640f214f717cdfc66837e53a24b8edfb80a86f9d util-linux-core-2.40.2-1.fc40.x86_64.rpm -51e57c8dd885fb8b00b5225e3aa6d037b74ff35cb5f3962d7622af4566e4386e vim-common-9.1.919-1.fc40.x86_64.rpm -b00addd65b86713a3d5507c343cfc750ee9fe656130df464c109f9cd18aa7439 vim-data-9.1.919-1.fc40.noarch.rpm -4eff285f016104291d5515cc103993ead80ba17bebd7b1f7814efb3565a30ea5 vim-enhanced-9.1.919-1.fc40.x86_64.rpm -6642da315fd235087b3b4ee328b0264bc463536e900d6e01a93b70b96ef0d08e vim-filesystem-9.1.919-1.fc40.noarch.rpm +5e136771bde612c9ad1c5baaa13cfe66ef0ab004baf01cab7193978da46d92ee vim-common-9.1.984-1.fc40.x86_64.rpm +820aad4f6047ed8b51c1e78210c66e5aee3c0b8b871f0777373df52e71f8cbde vim-data-9.1.984-1.fc40.noarch.rpm +4a6722b072ed050b9c9414ab2c3a81a39d3593f9487771ade9aadd7c5199441a vim-enhanced-9.1.984-1.fc40.x86_64.rpm +fe95052d95a2e29b7794596623a36cfbfa87b91b2a08a397f43299596dfa76a1 vim-filesystem-9.1.984-1.fc40.noarch.rpm 5f4aef6a6f19712c142b3e592ff05bba03dee877a0a098df294d876063918805 wget2-2.2.0-1.fc40.x86_64.rpm a4119091a85b4aa4262a26f6ed2d6653de9b7c4def3636a2b0ad066436f29acd wget2-libs-2.2.0-1.fc40.x86_64.rpm 4948040a53814b1b4b76f6ec9d64ec21f3f2d1196a0a1c5b117f91fa58a267b1 wget2-wget-2.2.0-1.fc40.x86_64.rpm cf0306ceed1c6b3be39060d85f16b1953b464d3a625488b170d3b7aadf600645 which-2.21-41.fc40.x86_64.rpm 4ede95a2fa3bc0ae617c8bf3a375b800163d58733b4829b15d9f038505d79fee whois-nls-5.5.20-3.fc40.noarch.rpm e2195010e857f56b19246f8b821f9391922880b7691b3728a413f540edc890a6 xkeyboard-config-2.41-1.fc40.noarch.rpm -a2043ea6140e797e1ce040fe21e4876911ba38c1af4becf5171940ecb9ba9ddc xxd-9.1.919-1.fc40.x86_64.rpm +71fb8f29bfe63e02383be3221ec6a2f782e47022c3cab03966fcb19dce8b2dcf xxd-9.1.984-1.fc40.x86_64.rpm ee599a1c4d7ee635e54ec137af4dded83f433b9c8a5976f75ecdcd000b5246e3 xz-5.4.6-3.fc40.x86_64.rpm b92ef78d8ab424c22130e457d0ef691d8197bff61c3b8852205d1b02baba3819 xz-libs-5.4.6-3.fc40.i686.rpm b6ee44b3d7e494b0364f26b7d0b169a8092180af787423cd5e8a47dc0f738a66 xz-libs-5.4.6-3.fc40.x86_64.rpm From 88f26bc16186094ca702d32d992f0dbc8afda02b Mon Sep 17 00:00:00 2001 From: edgelessci <71088502+edgelessci@users.noreply.github.com> Date: Mon, 6 Jan 2025 10:22:25 +0100 Subject: [PATCH 037/311] image: update measurements and image version (#3566) Co-authored-by: edgelessci --- .../measurements/measurements_enterprise.go | 16 ++++++++-------- internal/config/image_enterprise.go | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/internal/attestation/measurements/measurements_enterprise.go b/internal/attestation/measurements/measurements_enterprise.go index f8e9d909f..ff1ea02a3 100644 --- a/internal/attestation/measurements/measurements_enterprise.go +++ b/internal/attestation/measurements/measurements_enterprise.go @@ -19,14 +19,14 @@ package measurements // revive:disable:var-naming var ( - aws_AWSNitroTPM = M{0: {Expected: []byte{0x73, 0x7f, 0x76, 0x7a, 0x12, 0xf5, 0x4e, 0x70, 0xee, 0xcb, 0xc8, 0x68, 0x40, 0x11, 0x32, 0x3a, 0xe2, 0xfe, 0x2d, 0xd9, 0xf9, 0x07, 0x85, 0x57, 0x79, 0x69, 0xd7, 0xa2, 0x01, 0x3e, 0x8c, 0x12}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x43, 0x75, 0xf8, 0x1e, 0xe7, 0x78, 0x01, 0x71, 0x46, 0xf4, 0x74, 0x5f, 0x6c, 0x24, 0x69, 0xdd, 0x41, 0x19, 0xf4, 0x09, 0x1c, 0x4d, 0x4e, 0xe5, 0x36, 0x4f, 0xb1, 0x05, 0x23, 0xce, 0xa8, 0x3e}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xcb, 0x4d, 0x8b, 0x7b, 0xa3, 0x31, 0x31, 0xb7, 0x4b, 0x51, 0xb2, 0x24, 0xcb, 0x1d, 0xa1, 0xd2, 0xe9, 0xe0, 0xa8, 0x15, 0x1a, 0xe3, 0xa5, 0xbf, 0x10, 0x38, 0x16, 0xc0, 0x65, 0xef, 0xe1, 0xda}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x06, 0x9b, 0x75, 0xc8, 0x1e, 0xce, 0x53, 0x0a, 0xf8, 0xef, 0x72, 0xcc, 0x84, 0x84, 0x0b, 0x10, 0xe3, 0x0a, 0x6f, 0xbc, 0x87, 0x82, 0xd8, 0x19, 0xf8, 0xdb, 0x52, 0xca, 0x23, 0xec, 0x04, 0x2e}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - aws_AWSSEVSNP = M{0: {Expected: []byte{0xd6, 0xdf, 0x85, 0x53, 0x58, 0xf5, 0xb1, 0x0f, 0x06, 0xf0, 0xfa, 0xb3, 0xf4, 0x08, 0xad, 0x26, 0xcd, 0x16, 0x5a, 0x29, 0x49, 0xba, 0xd6, 0x9e, 0x2c, 0xc7, 0x56, 0x92, 0x52, 0x9e, 0x66, 0x2a}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x9d, 0xf1, 0x89, 0x30, 0xea, 0x3a, 0x14, 0x0b, 0x68, 0x6b, 0xef, 0xdc, 0x86, 0x5a, 0x02, 0x38, 0x10, 0x93, 0x3b, 0x8f, 0xe2, 0x64, 0xbd, 0xfd, 0xf6, 0x8d, 0xed, 0x0b, 0xd7, 0x6d, 0xeb, 0xa9}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x5b, 0x6a, 0xeb, 0x29, 0xb4, 0x71, 0x9c, 0x2d, 0xe0, 0xab, 0xe5, 0x61, 0xdb, 0x3d, 0xa9, 0x6c, 0xfa, 0x8e, 0x06, 0x8d, 0xe3, 0x67, 0x85, 0x20, 0xf5, 0x32, 0x13, 0x29, 0xb0, 0xa8, 0x6e, 0x6f}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xe0, 0x10, 0x62, 0xb8, 0x9a, 0x35, 0xd1, 0xb0, 0x9a, 0xb0, 0x15, 0x47, 0xbb, 0x5c, 0x99, 0xdd, 0xf3, 0xf7, 0x1a, 0x82, 0x74, 0xf5, 0x59, 0x04, 0x94, 0x5f, 0xd3, 0xdd, 0xfc, 0xb0, 0x08, 0x70}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - azure_AzureSEVSNP = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xa7, 0x69, 0x47, 0xc5, 0x71, 0x1c, 0x3b, 0xea, 0x82, 0x1e, 0xc0, 0xe1, 0x43, 0x4c, 0x53, 0x66, 0x11, 0x83, 0x9c, 0x38, 0xbb, 0xb2, 0x54, 0x0c, 0x33, 0x66, 0xb0, 0x02, 0x21, 0x68, 0x53, 0xce}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xfa, 0x76, 0x49, 0x87, 0x1a, 0x83, 0x45, 0xee, 0xe1, 0xf7, 0xd6, 0xa5, 0x5b, 0x8c, 0x55, 0x2b, 0x43, 0xc2, 0x34, 0x7f, 0x10, 0xc3, 0x69, 0x86, 0x1b, 0x9a, 0xf1, 0x88, 0x8c, 0xe4, 0x0e, 0xb3}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x0d, 0x2b, 0xa1, 0x9a, 0x8a, 0x26, 0x2a, 0xa9, 0x4d, 0x00, 0x0f, 0x28, 0xb2, 0x0b, 0xce, 0xdd, 0x24, 0x8d, 0x92, 0x1e, 0xac, 0xcd, 0x9a, 0x4d, 0x89, 0x24, 0x72, 0x12, 0x80, 0x90, 0xb5, 0xc3}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - azure_AzureTDX = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x46, 0x6e, 0x4b, 0x3b, 0x44, 0x5c, 0x1b, 0xb2, 0x2e, 0x3a, 0x2b, 0xf7, 0x93, 0x99, 0xe7, 0x60, 0x3b, 0xc0, 0x93, 0x58, 0xf8, 0x2e, 0x93, 0xec, 0x79, 0xc0, 0x63, 0x47, 0xf8, 0xd7, 0x35, 0x6f}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xed, 0x4f, 0x88, 0x40, 0x03, 0xc9, 0x33, 0x25, 0x0a, 0xf4, 0xed, 0x0f, 0x3c, 0xa1, 0x5e, 0x03, 0xe1, 0x16, 0x40, 0xa7, 0x2b, 0x12, 0x47, 0x97, 0xce, 0x31, 0xe8, 0xd3, 0x25, 0x7b, 0x49, 0xe6}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x09, 0xf3, 0x64, 0xdb, 0x88, 0x15, 0x53, 0x6c, 0x65, 0x1e, 0x7f, 0x59, 0xf3, 0x07, 0xbe, 0x33, 0x14, 0x22, 0xcc, 0x77, 0x0c, 0x2a, 0x6c, 0xf5, 0x35, 0xcc, 0x5e, 0xf6, 0xd9, 0xcb, 0x73, 0x7c}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + aws_AWSNitroTPM = M{0: {Expected: []byte{0x73, 0x7f, 0x76, 0x7a, 0x12, 0xf5, 0x4e, 0x70, 0xee, 0xcb, 0xc8, 0x68, 0x40, 0x11, 0x32, 0x3a, 0xe2, 0xfe, 0x2d, 0xd9, 0xf9, 0x07, 0x85, 0x57, 0x79, 0x69, 0xd7, 0xa2, 0x01, 0x3e, 0x8c, 0x12}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x44, 0x69, 0x81, 0xed, 0xd3, 0xc7, 0x93, 0x1d, 0x9f, 0x7e, 0xd0, 0x82, 0x85, 0x5c, 0x70, 0xac, 0xbb, 0x8d, 0x9d, 0x11, 0x6e, 0x57, 0xb1, 0x04, 0xb7, 0x2b, 0x19, 0x42, 0x81, 0x2a, 0x68, 0x42}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x6b, 0x0c, 0x34, 0x4c, 0xa0, 0x1b, 0x33, 0x4e, 0x88, 0x55, 0xec, 0x2f, 0x4b, 0xe1, 0x3d, 0x2a, 0x0f, 0x9f, 0x81, 0x05, 0xaa, 0x9e, 0x8c, 0x99, 0xc3, 0x4d, 0x11, 0x9c, 0xcf, 0x62, 0xa6, 0x67}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x43, 0x90, 0x3f, 0x8e, 0x5e, 0x11, 0x5b, 0x77, 0xbf, 0xb1, 0xf1, 0xc1, 0xc4, 0x3d, 0x64, 0xb3, 0xa9, 0x06, 0x80, 0x12, 0x12, 0x60, 0x47, 0xba, 0x8f, 0x27, 0x2f, 0xd1, 0x83, 0x24, 0x18, 0x72}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + aws_AWSSEVSNP = M{0: {Expected: []byte{0xd6, 0xdf, 0x85, 0x53, 0x58, 0xf5, 0xb1, 0x0f, 0x06, 0xf0, 0xfa, 0xb3, 0xf4, 0x08, 0xad, 0x26, 0xcd, 0x16, 0x5a, 0x29, 0x49, 0xba, 0xd6, 0x9e, 0x2c, 0xc7, 0x56, 0x92, 0x52, 0x9e, 0x66, 0x2a}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x6b, 0x75, 0xf0, 0x51, 0x1a, 0x1a, 0x87, 0xd4, 0x27, 0xeb, 0xb0, 0x4f, 0x53, 0x07, 0x27, 0x7e, 0x7e, 0x90, 0x46, 0x95, 0xcc, 0x65, 0xf4, 0x6b, 0xf7, 0xfe, 0x93, 0x5c, 0xdf, 0x8a, 0xc2, 0xa2}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x49, 0x4a, 0x2f, 0x2f, 0x7d, 0x3a, 0x3b, 0x9a, 0x59, 0x6f, 0x7a, 0x7f, 0x9b, 0x12, 0x2a, 0xa9, 0xac, 0x89, 0x08, 0x82, 0x1d, 0xdc, 0x04, 0x3a, 0x90, 0x51, 0x0d, 0xb7, 0x21, 0xa4, 0x97, 0x32}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x9c, 0xde, 0xb2, 0x73, 0xf5, 0x96, 0x81, 0x8d, 0xa9, 0x73, 0xbf, 0x4c, 0x38, 0x4c, 0xe0, 0x73, 0xd4, 0x4b, 0xfa, 0xbd, 0x41, 0x76, 0xd3, 0xd5, 0x0d, 0x45, 0xc4, 0xc7, 0xae, 0xfd, 0xc3, 0x6d}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + azure_AzureSEVSNP = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x42, 0xa3, 0x08, 0x06, 0x3f, 0x98, 0x4d, 0x27, 0x7d, 0xe4, 0x41, 0x27, 0xff, 0x0e, 0x18, 0x08, 0x81, 0xb2, 0x85, 0x17, 0x89, 0x6a, 0xa2, 0x78, 0xce, 0xe9, 0x1c, 0x8c, 0xc6, 0xc4, 0xbc, 0x59}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x7a, 0xa0, 0x8c, 0x00, 0x78, 0xfe, 0x17, 0x5c, 0x8f, 0xa4, 0x61, 0x85, 0x16, 0x70, 0xe6, 0xd9, 0x08, 0x7e, 0x99, 0x09, 0x37, 0xe1, 0x37, 0x87, 0x4f, 0x3f, 0x11, 0xff, 0x74, 0xd3, 0x28, 0x00}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x96, 0x54, 0x5f, 0x91, 0xc7, 0xe8, 0x11, 0xd7, 0x93, 0x98, 0x7e, 0x50, 0x19, 0x58, 0x6b, 0x2c, 0x89, 0x00, 0x3f, 0xf9, 0x84, 0xf9, 0x38, 0xa0, 0xeb, 0x24, 0xf1, 0x9b, 0x1a, 0x16, 0xdc, 0x00}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + azure_AzureTDX = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x38, 0xb7, 0x70, 0x2f, 0x7d, 0x10, 0x39, 0x3a, 0x81, 0x44, 0xa7, 0x2b, 0x16, 0x3f, 0xe4, 0xc5, 0x04, 0x43, 0x26, 0x46, 0x4d, 0x1b, 0x30, 0xd5, 0x19, 0x02, 0x61, 0xbc, 0x66, 0x4a, 0x1e, 0xb8}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x35, 0x3c, 0xfc, 0x83, 0x55, 0x11, 0x25, 0x62, 0xf4, 0xbc, 0x92, 0xbd, 0x32, 0x61, 0x1e, 0x74, 0xda, 0x5f, 0x7f, 0x57, 0x04, 0x6b, 0x58, 0xc8, 0xad, 0x03, 0x26, 0x70, 0xdc, 0x0b, 0x7e, 0xc3}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x84, 0xe4, 0xaf, 0x86, 0x1e, 0x6d, 0x86, 0x37, 0x63, 0xf9, 0x3f, 0x50, 0xfb, 0x94, 0xe1, 0x58, 0xb4, 0x06, 0xce, 0x39, 0x14, 0x49, 0x06, 0x82, 0x72, 0x7f, 0xc0, 0xc5, 0xd0, 0x75, 0x0e, 0xc9}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} azure_AzureTrustedLaunch M - gcp_GCPSEVES = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x7e, 0xc5, 0x19, 0x46, 0xb0, 0xa8, 0x92, 0x4d, 0x94, 0xd5, 0xaa, 0x79, 0xef, 0x3d, 0xaf, 0x3c, 0x2e, 0xdb, 0x62, 0xeb, 0x0b, 0x8e, 0x91, 0xe0, 0x07, 0x95, 0xc1, 0x33, 0x66, 0x70, 0x0b, 0x81}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x2c, 0x5d, 0x28, 0x97, 0xe7, 0xdb, 0x4d, 0x49, 0x29, 0x3e, 0x40, 0xc7, 0xb2, 0xdd, 0x93, 0x34, 0x52, 0x21, 0x1e, 0xe8, 0xd2, 0x0a, 0x0a, 0x3b, 0x41, 0xba, 0x02, 0x1b, 0x53, 0x25, 0xb2, 0x94}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xc9, 0x4e, 0xec, 0xc6, 0xff, 0x75, 0x78, 0xab, 0x47, 0xfa, 0x12, 0xe6, 0x2a, 0x56, 0xf7, 0xd8, 0xd5, 0x20, 0x3f, 0x1c, 0x49, 0x33, 0x08, 0x7d, 0x02, 0xbb, 0x3c, 0xac, 0x01, 0x4e, 0x03, 0x54}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - gcp_GCPSEVSNP = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x14, 0x4b, 0x76, 0x34, 0x8c, 0x43, 0x8d, 0xcd, 0x63, 0xb6, 0xf1, 0x49, 0x27, 0x5e, 0x45, 0x2c, 0xb2, 0xfb, 0x31, 0xd7, 0xf4, 0xdb, 0x97, 0x5f, 0x90, 0x68, 0xff, 0x37, 0x04, 0xbd, 0x9a, 0xc9}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x3c, 0x7a, 0xf2, 0x44, 0x99, 0x32, 0x95, 0xc6, 0xea, 0xc1, 0x20, 0x22, 0xbb, 0x56, 0xc5, 0xa4, 0x68, 0x84, 0x9d, 0x62, 0x6a, 0x35, 0xab, 0xe8, 0x90, 0x0e, 0x07, 0xc0, 0x0e, 0x8a, 0x4e, 0x07}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x3b, 0xb8, 0x0b, 0x88, 0x0a, 0x3b, 0xcd, 0x76, 0xf2, 0xab, 0x4d, 0x19, 0x60, 0x9c, 0x59, 0x3f, 0x0a, 0x6d, 0xa8, 0x8d, 0x71, 0x23, 0xe3, 0x9c, 0x03, 0x9a, 0x82, 0x9b, 0xab, 0x81, 0x6b, 0x76}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - openstack_QEMUVTPM = M{4: {Expected: []byte{0xea, 0xbd, 0xe6, 0xf6, 0x1e, 0xaa, 0x66, 0x5c, 0x7c, 0xdd, 0x0e, 0xe0, 0xa5, 0xb3, 0x14, 0xdf, 0xcc, 0x21, 0x20, 0x00, 0x9d, 0x1b, 0xf2, 0x7d, 0x35, 0x98, 0x71, 0xb4, 0x2e, 0x88, 0x5c, 0xe5}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x81, 0x3f, 0x65, 0xff, 0xe6, 0xf8, 0xc7, 0xbb, 0xe4, 0x36, 0xe5, 0x19, 0xd9, 0x86, 0x0f, 0x41, 0x61, 0x89, 0xcc, 0x27, 0xb1, 0x55, 0x49, 0x4c, 0xd4, 0xeb, 0xe2, 0x59, 0x37, 0x52, 0x33, 0xdb}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x38, 0xa4, 0x46, 0x21, 0x13, 0xf7, 0xca, 0x95, 0xfe, 0xe7, 0x7c, 0xbd, 0x6b, 0x73, 0x65, 0x2b, 0x43, 0xa8, 0xb3, 0x24, 0x87, 0x19, 0xda, 0x44, 0x84, 0x33, 0xea, 0x85, 0xcc, 0xff, 0xcf, 0xe0}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + gcp_GCPSEVES = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x26, 0x64, 0x91, 0xae, 0x50, 0xc6, 0xe1, 0x7f, 0x46, 0x42, 0xff, 0xf1, 0xfd, 0x28, 0x8b, 0x05, 0x2f, 0x8e, 0x1f, 0xc0, 0xa3, 0x3f, 0xea, 0x7a, 0x6a, 0xdc, 0x82, 0x89, 0x80, 0x03, 0xb8, 0xe8}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x80, 0xd7, 0x9b, 0x0c, 0x79, 0x56, 0x29, 0x14, 0x22, 0xd1, 0xad, 0xa2, 0xe0, 0x5c, 0x9f, 0x32, 0xce, 0x0e, 0xc7, 0x78, 0x48, 0x78, 0xab, 0xc1, 0xe1, 0xe8, 0x03, 0x04, 0xbc, 0x93, 0x27, 0xce}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xfe, 0x3c, 0x3c, 0xcc, 0x7e, 0xc4, 0xf1, 0x1f, 0x5a, 0x62, 0xc3, 0x3b, 0xa3, 0x02, 0xf0, 0x40, 0x84, 0x3a, 0x35, 0xae, 0x5e, 0xa8, 0x7e, 0xf0, 0xce, 0xd7, 0x2d, 0x3b, 0xf2, 0x40, 0x62, 0x7d}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + gcp_GCPSEVSNP = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xe4, 0x20, 0xf5, 0x90, 0x33, 0xe5, 0xab, 0xc1, 0x95, 0x87, 0xef, 0x01, 0xd9, 0x2b, 0xf4, 0x1b, 0xf6, 0xf9, 0x11, 0x93, 0xd2, 0xdc, 0x32, 0x17, 0xea, 0x41, 0xfa, 0x16, 0x36, 0x39, 0x34, 0xfb}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xe0, 0x4a, 0x71, 0x8e, 0x68, 0x72, 0xbc, 0xa0, 0x7c, 0xf6, 0xbf, 0xc9, 0xf2, 0x69, 0xda, 0xb2, 0x54, 0xbf, 0xdb, 0x90, 0xe9, 0x5b, 0x43, 0x19, 0x61, 0xeb, 0x2f, 0x9b, 0x87, 0xd6, 0xa5, 0x0e}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x5d, 0x4b, 0x7c, 0x29, 0x49, 0x61, 0xc9, 0xc2, 0x5e, 0x00, 0xcc, 0x1d, 0xf4, 0xaa, 0xbf, 0x15, 0x85, 0x23, 0xba, 0xc7, 0xa8, 0xed, 0xf7, 0x27, 0x95, 0x36, 0x8a, 0xf9, 0x66, 0x40, 0x68, 0x32}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + openstack_QEMUVTPM = M{4: {Expected: []byte{0xee, 0x3a, 0x27, 0x9e, 0x0d, 0x5a, 0xec, 0xf3, 0xee, 0x08, 0xdc, 0x17, 0x2e, 0xb8, 0x14, 0xdd, 0x8e, 0x0a, 0x7c, 0x79, 0xa2, 0x94, 0x71, 0x71, 0x38, 0x77, 0xcf, 0xfa, 0x8b, 0x31, 0x01, 0x50}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xf1, 0x77, 0x8b, 0xbb, 0xe4, 0xda, 0x77, 0xc4, 0xb9, 0x18, 0xe4, 0x54, 0x2e, 0x7d, 0xcc, 0x7b, 0xf2, 0xa3, 0xbb, 0x95, 0x7f, 0x73, 0x4d, 0x82, 0x18, 0xf1, 0x36, 0x4e, 0x2a, 0xbe, 0xa7, 0x53}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x75, 0xc9, 0xa3, 0x5f, 0x07, 0xce, 0x2e, 0x6b, 0x13, 0x06, 0x08, 0x84, 0xcb, 0xf7, 0x9b, 0x50, 0x5c, 0x50, 0xf7, 0x85, 0x87, 0x9a, 0x91, 0xd3, 0x2c, 0xc3, 0x81, 0x3b, 0x7a, 0x6b, 0x18, 0xa4}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} qemu_QEMUTDX M - qemu_QEMUVTPM = M{4: {Expected: []byte{0x9c, 0x72, 0x70, 0x95, 0xf1, 0x54, 0x38, 0x6d, 0x69, 0x3e, 0x9c, 0x66, 0x17, 0xfa, 0xf3, 0xe4, 0x9e, 0x99, 0x28, 0x1a, 0x73, 0x41, 0xfa, 0xb3, 0x77, 0x85, 0x84, 0xd1, 0xd0, 0x92, 0xb5, 0x4f}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x29, 0xf0, 0x3d, 0x5a, 0xd7, 0x89, 0x90, 0x1d, 0x23, 0xc4, 0x62, 0x28, 0xaa, 0x89, 0x27, 0x3c, 0xe4, 0x06, 0xfe, 0x2e, 0xa9, 0x49, 0x66, 0xfb, 0x40, 0x00, 0xa4, 0x3a, 0x73, 0xbf, 0x87, 0x2d}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xbd, 0x7f, 0x4b, 0x6d, 0x4f, 0x5f, 0x27, 0x69, 0xd1, 0xa2, 0xb5, 0xfa, 0x59, 0x6c, 0x20, 0xa4, 0x34, 0x7f, 0xe2, 0xcc, 0x68, 0x1e, 0xfa, 0x0a, 0x75, 0xc3, 0x12, 0x8d, 0x98, 0xe6, 0xc9, 0x5e}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + qemu_QEMUVTPM = M{4: {Expected: []byte{0xa5, 0x50, 0x43, 0xb9, 0xac, 0xd1, 0x3c, 0x4c, 0x29, 0x05, 0x16, 0x7b, 0x4d, 0x51, 0x80, 0x92, 0x5b, 0xce, 0x31, 0x46, 0x39, 0x85, 0x46, 0xaa, 0x8a, 0xa7, 0x69, 0xa5, 0xe5, 0xe5, 0x3f, 0xb1}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xd2, 0xcc, 0x55, 0x0e, 0x66, 0xc3, 0x32, 0xcb, 0xbe, 0x3c, 0xbb, 0x75, 0x05, 0xbf, 0x75, 0x66, 0xde, 0xba, 0xe7, 0x37, 0x69, 0xf7, 0x8f, 0x9f, 0x3e, 0xeb, 0x7e, 0xaa, 0x87, 0x86, 0x53, 0x52}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x11, 0x02, 0x65, 0x0b, 0xd3, 0xe9, 0xbc, 0x5a, 0xe5, 0x0b, 0x52, 0x98, 0xd2, 0x36, 0xb0, 0x69, 0xaa, 0x9c, 0xd1, 0x92, 0xc2, 0x96, 0x00, 0xca, 0x1e, 0xfa, 0x5d, 0x45, 0x73, 0x9b, 0x50, 0xc9}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} ) diff --git a/internal/config/image_enterprise.go b/internal/config/image_enterprise.go index a0a6618f6..f0ad593c9 100644 --- a/internal/config/image_enterprise.go +++ b/internal/config/image_enterprise.go @@ -10,5 +10,5 @@ package config const ( // defaultImage is the default image to use. - defaultImage = "ref/main/stream/nightly/v2.21.0-pre.0.20241216111606-abe54a2f7abe" + defaultImage = "ref/main/stream/nightly/v2.21.0-pre.0.20241229132219-19e54a0174a9" ) From 40e25c3046027d0a8f1a5d56adf368cd05392aa3 Mon Sep 17 00:00:00 2001 From: edgelessci <71088502+edgelessci@users.noreply.github.com> Date: Wed, 8 Jan 2025 08:40:44 +0100 Subject: [PATCH 038/311] image: update measurements and image version (#3569) Co-authored-by: edgelessci --- .../measurements/measurements_enterprise.go | 16 ++++++++-------- internal/config/image_enterprise.go | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/internal/attestation/measurements/measurements_enterprise.go b/internal/attestation/measurements/measurements_enterprise.go index ff1ea02a3..e5c4db9a6 100644 --- a/internal/attestation/measurements/measurements_enterprise.go +++ b/internal/attestation/measurements/measurements_enterprise.go @@ -19,14 +19,14 @@ package measurements // revive:disable:var-naming var ( - aws_AWSNitroTPM = M{0: {Expected: []byte{0x73, 0x7f, 0x76, 0x7a, 0x12, 0xf5, 0x4e, 0x70, 0xee, 0xcb, 0xc8, 0x68, 0x40, 0x11, 0x32, 0x3a, 0xe2, 0xfe, 0x2d, 0xd9, 0xf9, 0x07, 0x85, 0x57, 0x79, 0x69, 0xd7, 0xa2, 0x01, 0x3e, 0x8c, 0x12}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x44, 0x69, 0x81, 0xed, 0xd3, 0xc7, 0x93, 0x1d, 0x9f, 0x7e, 0xd0, 0x82, 0x85, 0x5c, 0x70, 0xac, 0xbb, 0x8d, 0x9d, 0x11, 0x6e, 0x57, 0xb1, 0x04, 0xb7, 0x2b, 0x19, 0x42, 0x81, 0x2a, 0x68, 0x42}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x6b, 0x0c, 0x34, 0x4c, 0xa0, 0x1b, 0x33, 0x4e, 0x88, 0x55, 0xec, 0x2f, 0x4b, 0xe1, 0x3d, 0x2a, 0x0f, 0x9f, 0x81, 0x05, 0xaa, 0x9e, 0x8c, 0x99, 0xc3, 0x4d, 0x11, 0x9c, 0xcf, 0x62, 0xa6, 0x67}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x43, 0x90, 0x3f, 0x8e, 0x5e, 0x11, 0x5b, 0x77, 0xbf, 0xb1, 0xf1, 0xc1, 0xc4, 0x3d, 0x64, 0xb3, 0xa9, 0x06, 0x80, 0x12, 0x12, 0x60, 0x47, 0xba, 0x8f, 0x27, 0x2f, 0xd1, 0x83, 0x24, 0x18, 0x72}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - aws_AWSSEVSNP = M{0: {Expected: []byte{0xd6, 0xdf, 0x85, 0x53, 0x58, 0xf5, 0xb1, 0x0f, 0x06, 0xf0, 0xfa, 0xb3, 0xf4, 0x08, 0xad, 0x26, 0xcd, 0x16, 0x5a, 0x29, 0x49, 0xba, 0xd6, 0x9e, 0x2c, 0xc7, 0x56, 0x92, 0x52, 0x9e, 0x66, 0x2a}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x6b, 0x75, 0xf0, 0x51, 0x1a, 0x1a, 0x87, 0xd4, 0x27, 0xeb, 0xb0, 0x4f, 0x53, 0x07, 0x27, 0x7e, 0x7e, 0x90, 0x46, 0x95, 0xcc, 0x65, 0xf4, 0x6b, 0xf7, 0xfe, 0x93, 0x5c, 0xdf, 0x8a, 0xc2, 0xa2}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x49, 0x4a, 0x2f, 0x2f, 0x7d, 0x3a, 0x3b, 0x9a, 0x59, 0x6f, 0x7a, 0x7f, 0x9b, 0x12, 0x2a, 0xa9, 0xac, 0x89, 0x08, 0x82, 0x1d, 0xdc, 0x04, 0x3a, 0x90, 0x51, 0x0d, 0xb7, 0x21, 0xa4, 0x97, 0x32}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x9c, 0xde, 0xb2, 0x73, 0xf5, 0x96, 0x81, 0x8d, 0xa9, 0x73, 0xbf, 0x4c, 0x38, 0x4c, 0xe0, 0x73, 0xd4, 0x4b, 0xfa, 0xbd, 0x41, 0x76, 0xd3, 0xd5, 0x0d, 0x45, 0xc4, 0xc7, 0xae, 0xfd, 0xc3, 0x6d}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - azure_AzureSEVSNP = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x42, 0xa3, 0x08, 0x06, 0x3f, 0x98, 0x4d, 0x27, 0x7d, 0xe4, 0x41, 0x27, 0xff, 0x0e, 0x18, 0x08, 0x81, 0xb2, 0x85, 0x17, 0x89, 0x6a, 0xa2, 0x78, 0xce, 0xe9, 0x1c, 0x8c, 0xc6, 0xc4, 0xbc, 0x59}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x7a, 0xa0, 0x8c, 0x00, 0x78, 0xfe, 0x17, 0x5c, 0x8f, 0xa4, 0x61, 0x85, 0x16, 0x70, 0xe6, 0xd9, 0x08, 0x7e, 0x99, 0x09, 0x37, 0xe1, 0x37, 0x87, 0x4f, 0x3f, 0x11, 0xff, 0x74, 0xd3, 0x28, 0x00}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x96, 0x54, 0x5f, 0x91, 0xc7, 0xe8, 0x11, 0xd7, 0x93, 0x98, 0x7e, 0x50, 0x19, 0x58, 0x6b, 0x2c, 0x89, 0x00, 0x3f, 0xf9, 0x84, 0xf9, 0x38, 0xa0, 0xeb, 0x24, 0xf1, 0x9b, 0x1a, 0x16, 0xdc, 0x00}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - azure_AzureTDX = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x38, 0xb7, 0x70, 0x2f, 0x7d, 0x10, 0x39, 0x3a, 0x81, 0x44, 0xa7, 0x2b, 0x16, 0x3f, 0xe4, 0xc5, 0x04, 0x43, 0x26, 0x46, 0x4d, 0x1b, 0x30, 0xd5, 0x19, 0x02, 0x61, 0xbc, 0x66, 0x4a, 0x1e, 0xb8}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x35, 0x3c, 0xfc, 0x83, 0x55, 0x11, 0x25, 0x62, 0xf4, 0xbc, 0x92, 0xbd, 0x32, 0x61, 0x1e, 0x74, 0xda, 0x5f, 0x7f, 0x57, 0x04, 0x6b, 0x58, 0xc8, 0xad, 0x03, 0x26, 0x70, 0xdc, 0x0b, 0x7e, 0xc3}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x84, 0xe4, 0xaf, 0x86, 0x1e, 0x6d, 0x86, 0x37, 0x63, 0xf9, 0x3f, 0x50, 0xfb, 0x94, 0xe1, 0x58, 0xb4, 0x06, 0xce, 0x39, 0x14, 0x49, 0x06, 0x82, 0x72, 0x7f, 0xc0, 0xc5, 0xd0, 0x75, 0x0e, 0xc9}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + aws_AWSNitroTPM = M{0: {Expected: []byte{0x73, 0x7f, 0x76, 0x7a, 0x12, 0xf5, 0x4e, 0x70, 0xee, 0xcb, 0xc8, 0x68, 0x40, 0x11, 0x32, 0x3a, 0xe2, 0xfe, 0x2d, 0xd9, 0xf9, 0x07, 0x85, 0x57, 0x79, 0x69, 0xd7, 0xa2, 0x01, 0x3e, 0x8c, 0x12}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xfe, 0xfe, 0x78, 0x95, 0x09, 0xb8, 0xb5, 0x8d, 0x32, 0x02, 0x94, 0xcd, 0x24, 0xd8, 0x4b, 0x16, 0x0e, 0x6e, 0xef, 0x5b, 0x58, 0xb3, 0xb1, 0xc2, 0x8f, 0xec, 0x4b, 0x45, 0x6e, 0x03, 0x05, 0x50}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xa7, 0xe5, 0x1d, 0xf5, 0x40, 0xfb, 0x51, 0x2a, 0xb4, 0x6e, 0x98, 0x09, 0xfb, 0xba, 0xe7, 0x7b, 0x87, 0x84, 0xb8, 0xf9, 0x12, 0xad, 0xd6, 0xf0, 0x24, 0x77, 0xf4, 0x27, 0x6b, 0xa9, 0x98, 0x5b}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x6e, 0x2b, 0x5c, 0x50, 0x5c, 0x56, 0xe2, 0xe8, 0x4d, 0xbd, 0x8d, 0x7f, 0xe8, 0x26, 0x75, 0x29, 0x2b, 0x79, 0xf9, 0x4b, 0x27, 0x91, 0x1b, 0xe9, 0x92, 0x18, 0xd6, 0x52, 0x9a, 0xaf, 0x62, 0xef}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + aws_AWSSEVSNP = M{0: {Expected: []byte{0xd6, 0xdf, 0x85, 0x53, 0x58, 0xf5, 0xb1, 0x0f, 0x06, 0xf0, 0xfa, 0xb3, 0xf4, 0x08, 0xad, 0x26, 0xcd, 0x16, 0x5a, 0x29, 0x49, 0xba, 0xd6, 0x9e, 0x2c, 0xc7, 0x56, 0x92, 0x52, 0x9e, 0x66, 0x2a}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xf4, 0x32, 0x70, 0x5a, 0xe0, 0x46, 0xa4, 0xd8, 0x5e, 0x06, 0x07, 0x39, 0x51, 0x41, 0x21, 0x63, 0x53, 0xe9, 0xd7, 0xf3, 0x2c, 0x58, 0xef, 0x72, 0x46, 0x62, 0x22, 0xe8, 0x3b, 0x37, 0x20, 0x13}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x6c, 0x6b, 0x13, 0xd4, 0x57, 0xb7, 0xb6, 0xa4, 0x3c, 0x01, 0xca, 0x7c, 0x97, 0xf6, 0x50, 0xed, 0x82, 0x9c, 0xdd, 0x1e, 0xa6, 0x8b, 0x64, 0x23, 0x2e, 0xd5, 0x86, 0x52, 0x46, 0x52, 0xf6, 0xe3}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x0c, 0x2b, 0x9f, 0xe1, 0xf9, 0x00, 0x2c, 0x13, 0x4d, 0x65, 0xf6, 0x7f, 0x49, 0x13, 0x4e, 0x4b, 0xb8, 0x94, 0x4c, 0xa3, 0xd2, 0xc6, 0x5c, 0x8a, 0x50, 0x78, 0x91, 0xa1, 0x4f, 0xc5, 0x87, 0x5c}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + azure_AzureSEVSNP = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x82, 0x72, 0xc5, 0x54, 0x96, 0xc9, 0xe9, 0x95, 0x5b, 0x2f, 0x2d, 0xc0, 0x13, 0x76, 0x5e, 0xb1, 0x94, 0x66, 0xb0, 0x2d, 0x68, 0xa1, 0x50, 0xb5, 0x98, 0x26, 0x53, 0xc6, 0x89, 0x1b, 0x6a, 0x5b}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x8e, 0x37, 0x05, 0x6c, 0xf4, 0x37, 0x3b, 0xcc, 0x22, 0xf6, 0x84, 0x74, 0x3c, 0xbc, 0x2b, 0x5e, 0xac, 0xec, 0x99, 0x0a, 0xf6, 0x7c, 0x6b, 0x40, 0xec, 0x2a, 0xc8, 0x55, 0xbc, 0xbe, 0x99, 0xfd}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x7f, 0x24, 0xf9, 0x99, 0x75, 0x62, 0x87, 0xbd, 0x38, 0xa7, 0xcb, 0x11, 0xb7, 0x2f, 0x07, 0xca, 0x48, 0x53, 0xe9, 0xf4, 0x99, 0x5a, 0xf9, 0xc8, 0x62, 0x12, 0x5d, 0x2e, 0xd8, 0x91, 0x53, 0x31}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + azure_AzureTDX = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x5b, 0xaa, 0xae, 0x68, 0x9e, 0x62, 0xe6, 0x64, 0x92, 0x98, 0x03, 0x61, 0x78, 0xdf, 0x8b, 0x26, 0xde, 0x44, 0xda, 0x9d, 0x27, 0xd9, 0x78, 0x83, 0x06, 0xbb, 0xac, 0xe7, 0x92, 0xfe, 0xe8, 0x68}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xc6, 0x45, 0x2d, 0xde, 0x34, 0x18, 0x6d, 0x94, 0x12, 0x11, 0xdf, 0xd5, 0x75, 0x44, 0x50, 0x64, 0x27, 0x5b, 0x3c, 0x6b, 0x4e, 0x87, 0xcf, 0x7c, 0xf3, 0xd9, 0x5d, 0x47, 0xf5, 0xa3, 0xea, 0x75}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x2e, 0xb2, 0x00, 0xe4, 0x58, 0xf7, 0xbb, 0xce, 0xc1, 0x77, 0xe3, 0x9c, 0xfb, 0xda, 0x59, 0xd7, 0xc0, 0x0f, 0x2d, 0xa7, 0x81, 0xe6, 0x6d, 0x82, 0x65, 0xaf, 0x96, 0x9e, 0x90, 0x0e, 0x54, 0x34}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} azure_AzureTrustedLaunch M - gcp_GCPSEVES = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x26, 0x64, 0x91, 0xae, 0x50, 0xc6, 0xe1, 0x7f, 0x46, 0x42, 0xff, 0xf1, 0xfd, 0x28, 0x8b, 0x05, 0x2f, 0x8e, 0x1f, 0xc0, 0xa3, 0x3f, 0xea, 0x7a, 0x6a, 0xdc, 0x82, 0x89, 0x80, 0x03, 0xb8, 0xe8}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x80, 0xd7, 0x9b, 0x0c, 0x79, 0x56, 0x29, 0x14, 0x22, 0xd1, 0xad, 0xa2, 0xe0, 0x5c, 0x9f, 0x32, 0xce, 0x0e, 0xc7, 0x78, 0x48, 0x78, 0xab, 0xc1, 0xe1, 0xe8, 0x03, 0x04, 0xbc, 0x93, 0x27, 0xce}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xfe, 0x3c, 0x3c, 0xcc, 0x7e, 0xc4, 0xf1, 0x1f, 0x5a, 0x62, 0xc3, 0x3b, 0xa3, 0x02, 0xf0, 0x40, 0x84, 0x3a, 0x35, 0xae, 0x5e, 0xa8, 0x7e, 0xf0, 0xce, 0xd7, 0x2d, 0x3b, 0xf2, 0x40, 0x62, 0x7d}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - gcp_GCPSEVSNP = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xe4, 0x20, 0xf5, 0x90, 0x33, 0xe5, 0xab, 0xc1, 0x95, 0x87, 0xef, 0x01, 0xd9, 0x2b, 0xf4, 0x1b, 0xf6, 0xf9, 0x11, 0x93, 0xd2, 0xdc, 0x32, 0x17, 0xea, 0x41, 0xfa, 0x16, 0x36, 0x39, 0x34, 0xfb}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xe0, 0x4a, 0x71, 0x8e, 0x68, 0x72, 0xbc, 0xa0, 0x7c, 0xf6, 0xbf, 0xc9, 0xf2, 0x69, 0xda, 0xb2, 0x54, 0xbf, 0xdb, 0x90, 0xe9, 0x5b, 0x43, 0x19, 0x61, 0xeb, 0x2f, 0x9b, 0x87, 0xd6, 0xa5, 0x0e}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x5d, 0x4b, 0x7c, 0x29, 0x49, 0x61, 0xc9, 0xc2, 0x5e, 0x00, 0xcc, 0x1d, 0xf4, 0xaa, 0xbf, 0x15, 0x85, 0x23, 0xba, 0xc7, 0xa8, 0xed, 0xf7, 0x27, 0x95, 0x36, 0x8a, 0xf9, 0x66, 0x40, 0x68, 0x32}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - openstack_QEMUVTPM = M{4: {Expected: []byte{0xee, 0x3a, 0x27, 0x9e, 0x0d, 0x5a, 0xec, 0xf3, 0xee, 0x08, 0xdc, 0x17, 0x2e, 0xb8, 0x14, 0xdd, 0x8e, 0x0a, 0x7c, 0x79, 0xa2, 0x94, 0x71, 0x71, 0x38, 0x77, 0xcf, 0xfa, 0x8b, 0x31, 0x01, 0x50}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xf1, 0x77, 0x8b, 0xbb, 0xe4, 0xda, 0x77, 0xc4, 0xb9, 0x18, 0xe4, 0x54, 0x2e, 0x7d, 0xcc, 0x7b, 0xf2, 0xa3, 0xbb, 0x95, 0x7f, 0x73, 0x4d, 0x82, 0x18, 0xf1, 0x36, 0x4e, 0x2a, 0xbe, 0xa7, 0x53}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x75, 0xc9, 0xa3, 0x5f, 0x07, 0xce, 0x2e, 0x6b, 0x13, 0x06, 0x08, 0x84, 0xcb, 0xf7, 0x9b, 0x50, 0x5c, 0x50, 0xf7, 0x85, 0x87, 0x9a, 0x91, 0xd3, 0x2c, 0xc3, 0x81, 0x3b, 0x7a, 0x6b, 0x18, 0xa4}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + gcp_GCPSEVES = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xc8, 0x47, 0x47, 0x45, 0xbe, 0x8b, 0x83, 0x74, 0x6b, 0xf9, 0x40, 0x74, 0xd3, 0x42, 0x55, 0x52, 0x7a, 0xb2, 0xca, 0x4e, 0x94, 0x9b, 0xda, 0x7b, 0x23, 0x54, 0x6e, 0xc9, 0x80, 0x1e, 0xe1, 0x48}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x0e, 0xd9, 0xd7, 0xe9, 0x4a, 0x99, 0x1e, 0x8b, 0x9e, 0x13, 0xfb, 0x28, 0x88, 0xe6, 0x72, 0x90, 0x9b, 0x3d, 0x75, 0x1c, 0x82, 0x74, 0xa3, 0x06, 0xe3, 0x28, 0x72, 0x69, 0x36, 0x93, 0xc7, 0x17}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x45, 0x9f, 0x36, 0xd9, 0x73, 0x4e, 0x0c, 0x7a, 0x8f, 0x0e, 0x90, 0x23, 0x6b, 0x90, 0xa2, 0xb9, 0xaa, 0xed, 0x42, 0x2f, 0x40, 0x56, 0xc6, 0x00, 0xa2, 0x7a, 0xb7, 0xb1, 0x04, 0x3a, 0x2c, 0xaf}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + gcp_GCPSEVSNP = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x54, 0x55, 0x46, 0xde, 0xb2, 0x38, 0x94, 0xce, 0x7d, 0x8b, 0x87, 0x65, 0x8f, 0xd3, 0x90, 0xed, 0xcb, 0x23, 0xa7, 0x8d, 0x26, 0x7d, 0x0f, 0xba, 0x94, 0x0e, 0x9a, 0xd7, 0xa3, 0x5d, 0x75, 0xe1}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x78, 0x8c, 0x5d, 0x07, 0x17, 0x64, 0x50, 0x05, 0xda, 0xd2, 0x04, 0xf4, 0x9c, 0x94, 0xdc, 0x21, 0x4d, 0xd4, 0xfd, 0xa9, 0x90, 0x35, 0x8c, 0xf6, 0x8b, 0xcd, 0x26, 0xde, 0x42, 0x76, 0x01, 0x96}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x1b, 0xe2, 0xaf, 0xeb, 0xc8, 0x31, 0xf8, 0x23, 0x1d, 0x45, 0xcd, 0xb0, 0x7c, 0x6f, 0x0d, 0x0b, 0xa6, 0x91, 0xe8, 0x0c, 0xb8, 0xfa, 0xee, 0x89, 0x15, 0xa8, 0xd4, 0x66, 0xa5, 0xc7, 0xc3, 0xf6}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + openstack_QEMUVTPM = M{4: {Expected: []byte{0x83, 0x0b, 0xcb, 0xe0, 0x47, 0x4d, 0x80, 0x1c, 0xe4, 0x72, 0xcd, 0x1a, 0x35, 0xd5, 0x63, 0xb1, 0xd2, 0xac, 0x1c, 0x04, 0x1e, 0x7f, 0xab, 0xc9, 0x93, 0xe8, 0xca, 0x3b, 0xef, 0x51, 0x2c, 0xb6}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x74, 0xfe, 0x2a, 0x0a, 0x9f, 0x99, 0x70, 0x20, 0x21, 0xe2, 0x41, 0xe2, 0x65, 0x04, 0xff, 0xf7, 0x6f, 0xfc, 0xab, 0x0d, 0x14, 0xd7, 0x5f, 0x0b, 0xac, 0x16, 0xeb, 0xb1, 0xd7, 0xb6, 0x6e, 0xad}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x14, 0x76, 0x32, 0xfe, 0x92, 0x00, 0xeb, 0x14, 0x32, 0x7b, 0xa7, 0xf0, 0xa0, 0x37, 0xfa, 0xf1, 0xb9, 0xff, 0xaa, 0x97, 0xad, 0x33, 0x42, 0xd2, 0xf6, 0xf1, 0x8c, 0x21, 0xfe, 0x97, 0xce, 0x65}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} qemu_QEMUTDX M - qemu_QEMUVTPM = M{4: {Expected: []byte{0xa5, 0x50, 0x43, 0xb9, 0xac, 0xd1, 0x3c, 0x4c, 0x29, 0x05, 0x16, 0x7b, 0x4d, 0x51, 0x80, 0x92, 0x5b, 0xce, 0x31, 0x46, 0x39, 0x85, 0x46, 0xaa, 0x8a, 0xa7, 0x69, 0xa5, 0xe5, 0xe5, 0x3f, 0xb1}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xd2, 0xcc, 0x55, 0x0e, 0x66, 0xc3, 0x32, 0xcb, 0xbe, 0x3c, 0xbb, 0x75, 0x05, 0xbf, 0x75, 0x66, 0xde, 0xba, 0xe7, 0x37, 0x69, 0xf7, 0x8f, 0x9f, 0x3e, 0xeb, 0x7e, 0xaa, 0x87, 0x86, 0x53, 0x52}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x11, 0x02, 0x65, 0x0b, 0xd3, 0xe9, 0xbc, 0x5a, 0xe5, 0x0b, 0x52, 0x98, 0xd2, 0x36, 0xb0, 0x69, 0xaa, 0x9c, 0xd1, 0x92, 0xc2, 0x96, 0x00, 0xca, 0x1e, 0xfa, 0x5d, 0x45, 0x73, 0x9b, 0x50, 0xc9}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + qemu_QEMUVTPM = M{4: {Expected: []byte{0x98, 0xc1, 0xd8, 0x4d, 0x01, 0xf2, 0x60, 0x22, 0xb9, 0x63, 0x3c, 0x91, 0x9e, 0x7f, 0x69, 0x15, 0x91, 0xa3, 0x0c, 0x72, 0x4c, 0xc6, 0x18, 0x0e, 0xc7, 0x25, 0x50, 0x25, 0x75, 0x11, 0xdf, 0x00}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x8e, 0x3c, 0x08, 0x5b, 0xcc, 0x5a, 0x57, 0xf1, 0x8f, 0xf4, 0xf8, 0x4f, 0x04, 0xfb, 0x7c, 0x2e, 0x7a, 0x31, 0xac, 0xf6, 0x59, 0x92, 0xd4, 0x25, 0xa6, 0xc3, 0xbc, 0x6a, 0x33, 0x3a, 0x3b, 0xf8}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xd4, 0x29, 0xf7, 0x72, 0x51, 0xe0, 0x38, 0x18, 0xb5, 0xe7, 0x75, 0x83, 0x2e, 0x96, 0xf6, 0x5d, 0x0a, 0x53, 0x12, 0x46, 0xdf, 0x88, 0x43, 0xb5, 0x76, 0xd0, 0x00, 0x2f, 0x3a, 0x70, 0x78, 0x33}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} ) diff --git a/internal/config/image_enterprise.go b/internal/config/image_enterprise.go index f0ad593c9..c814389de 100644 --- a/internal/config/image_enterprise.go +++ b/internal/config/image_enterprise.go @@ -10,5 +10,5 @@ package config const ( // defaultImage is the default image to use. - defaultImage = "ref/main/stream/nightly/v2.21.0-pre.0.20241229132219-19e54a0174a9" + defaultImage = "ref/main/stream/nightly/v2.21.0-pre.0.20250106102225-88f26bc16186" ) From 094f5e87a6a28d8ec299d234fae00ca56b6f7e71 Mon Sep 17 00:00:00 2001 From: edgelessci <71088502+edgelessci@users.noreply.github.com> Date: Fri, 10 Jan 2025 08:03:42 +0100 Subject: [PATCH 039/311] image: update measurements and image version (#3571) Co-authored-by: edgelessci --- .../measurements/measurements_enterprise.go | 16 ++++++++-------- internal/config/image_enterprise.go | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/internal/attestation/measurements/measurements_enterprise.go b/internal/attestation/measurements/measurements_enterprise.go index e5c4db9a6..3d892554f 100644 --- a/internal/attestation/measurements/measurements_enterprise.go +++ b/internal/attestation/measurements/measurements_enterprise.go @@ -19,14 +19,14 @@ package measurements // revive:disable:var-naming var ( - aws_AWSNitroTPM = M{0: {Expected: []byte{0x73, 0x7f, 0x76, 0x7a, 0x12, 0xf5, 0x4e, 0x70, 0xee, 0xcb, 0xc8, 0x68, 0x40, 0x11, 0x32, 0x3a, 0xe2, 0xfe, 0x2d, 0xd9, 0xf9, 0x07, 0x85, 0x57, 0x79, 0x69, 0xd7, 0xa2, 0x01, 0x3e, 0x8c, 0x12}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xfe, 0xfe, 0x78, 0x95, 0x09, 0xb8, 0xb5, 0x8d, 0x32, 0x02, 0x94, 0xcd, 0x24, 0xd8, 0x4b, 0x16, 0x0e, 0x6e, 0xef, 0x5b, 0x58, 0xb3, 0xb1, 0xc2, 0x8f, 0xec, 0x4b, 0x45, 0x6e, 0x03, 0x05, 0x50}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xa7, 0xe5, 0x1d, 0xf5, 0x40, 0xfb, 0x51, 0x2a, 0xb4, 0x6e, 0x98, 0x09, 0xfb, 0xba, 0xe7, 0x7b, 0x87, 0x84, 0xb8, 0xf9, 0x12, 0xad, 0xd6, 0xf0, 0x24, 0x77, 0xf4, 0x27, 0x6b, 0xa9, 0x98, 0x5b}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x6e, 0x2b, 0x5c, 0x50, 0x5c, 0x56, 0xe2, 0xe8, 0x4d, 0xbd, 0x8d, 0x7f, 0xe8, 0x26, 0x75, 0x29, 0x2b, 0x79, 0xf9, 0x4b, 0x27, 0x91, 0x1b, 0xe9, 0x92, 0x18, 0xd6, 0x52, 0x9a, 0xaf, 0x62, 0xef}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - aws_AWSSEVSNP = M{0: {Expected: []byte{0xd6, 0xdf, 0x85, 0x53, 0x58, 0xf5, 0xb1, 0x0f, 0x06, 0xf0, 0xfa, 0xb3, 0xf4, 0x08, 0xad, 0x26, 0xcd, 0x16, 0x5a, 0x29, 0x49, 0xba, 0xd6, 0x9e, 0x2c, 0xc7, 0x56, 0x92, 0x52, 0x9e, 0x66, 0x2a}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xf4, 0x32, 0x70, 0x5a, 0xe0, 0x46, 0xa4, 0xd8, 0x5e, 0x06, 0x07, 0x39, 0x51, 0x41, 0x21, 0x63, 0x53, 0xe9, 0xd7, 0xf3, 0x2c, 0x58, 0xef, 0x72, 0x46, 0x62, 0x22, 0xe8, 0x3b, 0x37, 0x20, 0x13}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x6c, 0x6b, 0x13, 0xd4, 0x57, 0xb7, 0xb6, 0xa4, 0x3c, 0x01, 0xca, 0x7c, 0x97, 0xf6, 0x50, 0xed, 0x82, 0x9c, 0xdd, 0x1e, 0xa6, 0x8b, 0x64, 0x23, 0x2e, 0xd5, 0x86, 0x52, 0x46, 0x52, 0xf6, 0xe3}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x0c, 0x2b, 0x9f, 0xe1, 0xf9, 0x00, 0x2c, 0x13, 0x4d, 0x65, 0xf6, 0x7f, 0x49, 0x13, 0x4e, 0x4b, 0xb8, 0x94, 0x4c, 0xa3, 0xd2, 0xc6, 0x5c, 0x8a, 0x50, 0x78, 0x91, 0xa1, 0x4f, 0xc5, 0x87, 0x5c}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - azure_AzureSEVSNP = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x82, 0x72, 0xc5, 0x54, 0x96, 0xc9, 0xe9, 0x95, 0x5b, 0x2f, 0x2d, 0xc0, 0x13, 0x76, 0x5e, 0xb1, 0x94, 0x66, 0xb0, 0x2d, 0x68, 0xa1, 0x50, 0xb5, 0x98, 0x26, 0x53, 0xc6, 0x89, 0x1b, 0x6a, 0x5b}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x8e, 0x37, 0x05, 0x6c, 0xf4, 0x37, 0x3b, 0xcc, 0x22, 0xf6, 0x84, 0x74, 0x3c, 0xbc, 0x2b, 0x5e, 0xac, 0xec, 0x99, 0x0a, 0xf6, 0x7c, 0x6b, 0x40, 0xec, 0x2a, 0xc8, 0x55, 0xbc, 0xbe, 0x99, 0xfd}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x7f, 0x24, 0xf9, 0x99, 0x75, 0x62, 0x87, 0xbd, 0x38, 0xa7, 0xcb, 0x11, 0xb7, 0x2f, 0x07, 0xca, 0x48, 0x53, 0xe9, 0xf4, 0x99, 0x5a, 0xf9, 0xc8, 0x62, 0x12, 0x5d, 0x2e, 0xd8, 0x91, 0x53, 0x31}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - azure_AzureTDX = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x5b, 0xaa, 0xae, 0x68, 0x9e, 0x62, 0xe6, 0x64, 0x92, 0x98, 0x03, 0x61, 0x78, 0xdf, 0x8b, 0x26, 0xde, 0x44, 0xda, 0x9d, 0x27, 0xd9, 0x78, 0x83, 0x06, 0xbb, 0xac, 0xe7, 0x92, 0xfe, 0xe8, 0x68}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xc6, 0x45, 0x2d, 0xde, 0x34, 0x18, 0x6d, 0x94, 0x12, 0x11, 0xdf, 0xd5, 0x75, 0x44, 0x50, 0x64, 0x27, 0x5b, 0x3c, 0x6b, 0x4e, 0x87, 0xcf, 0x7c, 0xf3, 0xd9, 0x5d, 0x47, 0xf5, 0xa3, 0xea, 0x75}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x2e, 0xb2, 0x00, 0xe4, 0x58, 0xf7, 0xbb, 0xce, 0xc1, 0x77, 0xe3, 0x9c, 0xfb, 0xda, 0x59, 0xd7, 0xc0, 0x0f, 0x2d, 0xa7, 0x81, 0xe6, 0x6d, 0x82, 0x65, 0xaf, 0x96, 0x9e, 0x90, 0x0e, 0x54, 0x34}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + aws_AWSNitroTPM = M{0: {Expected: []byte{0x73, 0x7f, 0x76, 0x7a, 0x12, 0xf5, 0x4e, 0x70, 0xee, 0xcb, 0xc8, 0x68, 0x40, 0x11, 0x32, 0x3a, 0xe2, 0xfe, 0x2d, 0xd9, 0xf9, 0x07, 0x85, 0x57, 0x79, 0x69, 0xd7, 0xa2, 0x01, 0x3e, 0x8c, 0x12}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xf1, 0x51, 0x9e, 0x3c, 0x53, 0xcb, 0x04, 0xaa, 0x45, 0x8f, 0x7d, 0x5c, 0xdd, 0xa0, 0x8e, 0x58, 0x0b, 0x7b, 0x87, 0x6d, 0x9c, 0xbc, 0x12, 0xd6, 0x8a, 0x11, 0x80, 0x80, 0xdd, 0x19, 0xf4, 0xdf}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x73, 0x0d, 0x1b, 0xa4, 0xf5, 0x17, 0xfe, 0xa3, 0x19, 0x87, 0x4d, 0xdb, 0x22, 0xce, 0x0b, 0x5c, 0x91, 0xd9, 0xf6, 0x1a, 0x57, 0x71, 0xe4, 0x80, 0xf9, 0xe3, 0x4a, 0x60, 0x31, 0xea, 0xca, 0xc2}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xd4, 0x66, 0xbe, 0xd6, 0x2b, 0xb4, 0xbf, 0x0f, 0x17, 0x8a, 0x0f, 0x4b, 0x7d, 0x00, 0xc8, 0x81, 0x97, 0x01, 0x0f, 0x47, 0x91, 0x96, 0x58, 0x20, 0xa0, 0xfd, 0xd2, 0x0f, 0x2e, 0xa3, 0x41, 0x60}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + aws_AWSSEVSNP = M{0: {Expected: []byte{0xd6, 0xdf, 0x85, 0x53, 0x58, 0xf5, 0xb1, 0x0f, 0x06, 0xf0, 0xfa, 0xb3, 0xf4, 0x08, 0xad, 0x26, 0xcd, 0x16, 0x5a, 0x29, 0x49, 0xba, 0xd6, 0x9e, 0x2c, 0xc7, 0x56, 0x92, 0x52, 0x9e, 0x66, 0x2a}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x61, 0xbe, 0xfb, 0xa8, 0xa3, 0x4a, 0xf6, 0x72, 0x93, 0x23, 0x22, 0x8f, 0xa9, 0xdb, 0x09, 0x74, 0xb5, 0xd1, 0x39, 0x22, 0x01, 0xd7, 0x59, 0xfc, 0x8d, 0x57, 0x31, 0x81, 0xdd, 0x30, 0xb0, 0x3b}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xf1, 0xf8, 0x9c, 0xd7, 0x62, 0x0c, 0xba, 0x09, 0xd1, 0x22, 0xda, 0xf0, 0xc9, 0x2f, 0x65, 0xdc, 0x37, 0x99, 0x81, 0x14, 0xf7, 0x78, 0x4a, 0x5a, 0x4d, 0x98, 0x2d, 0x2a, 0x84, 0x4b, 0xa8, 0x1e}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xbe, 0x88, 0x41, 0xcc, 0x71, 0x2a, 0xf8, 0x76, 0x5b, 0xe8, 0x58, 0x21, 0xfa, 0xd1, 0x87, 0x4f, 0x4a, 0x19, 0x35, 0x6c, 0xbe, 0xe7, 0x56, 0x09, 0x58, 0xcb, 0x29, 0x18, 0xe6, 0x8a, 0xab, 0xd2}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + azure_AzureSEVSNP = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x50, 0x30, 0xd7, 0x1d, 0xa7, 0xff, 0xfb, 0x9f, 0x95, 0xfa, 0x31, 0x83, 0xa1, 0x32, 0xe7, 0xd4, 0x36, 0x62, 0x30, 0x9e, 0x4d, 0x95, 0x80, 0x24, 0x60, 0xd4, 0x66, 0x07, 0x4a, 0x67, 0xe3, 0xa7}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x21, 0xc8, 0xc6, 0x07, 0xc7, 0xd6, 0x81, 0x54, 0xac, 0xbd, 0x59, 0xa7, 0x97, 0x5e, 0x7a, 0xbb, 0x10, 0xfc, 0x67, 0x3d, 0x90, 0x7a, 0x9f, 0xd5, 0x92, 0xa6, 0xd9, 0xb0, 0xfb, 0xdf, 0xad, 0xba}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x75, 0xb4, 0xbd, 0x01, 0x6b, 0xae, 0x27, 0x90, 0x05, 0x11, 0xf8, 0x03, 0xa2, 0x17, 0x04, 0x9e, 0xe1, 0xae, 0x65, 0xe0, 0xe6, 0x5c, 0xd8, 0x13, 0x8f, 0x75, 0xd8, 0x9b, 0x2a, 0xd6, 0x5b, 0xbb}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + azure_AzureTDX = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x86, 0xb9, 0x0b, 0xfc, 0xd3, 0x8f, 0x67, 0x27, 0x6c, 0xad, 0x8f, 0xbe, 0x04, 0x47, 0x78, 0x21, 0x7c, 0x8b, 0x51, 0xe2, 0x1f, 0x88, 0xc2, 0x6a, 0x6c, 0x8d, 0x3e, 0x9c, 0xab, 0x07, 0x67, 0xf4}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x32, 0x47, 0xe9, 0xde, 0xab, 0x86, 0x62, 0x41, 0x82, 0x2f, 0x5f, 0xe5, 0xde, 0x58, 0x0e, 0x2c, 0xf9, 0x14, 0x51, 0x56, 0xdf, 0xd1, 0x0d, 0xb2, 0x41, 0x85, 0x62, 0x73, 0x93, 0x36, 0xb1, 0xe7}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x0e, 0x18, 0x67, 0x1c, 0xa9, 0x91, 0x9b, 0xf4, 0xbc, 0x5f, 0x31, 0x15, 0x42, 0xa2, 0x11, 0x7d, 0xb9, 0xeb, 0x9c, 0xf2, 0xf8, 0x71, 0xc8, 0x37, 0x2c, 0x14, 0xf1, 0x7c, 0x00, 0xed, 0x59, 0x83}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} azure_AzureTrustedLaunch M - gcp_GCPSEVES = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xc8, 0x47, 0x47, 0x45, 0xbe, 0x8b, 0x83, 0x74, 0x6b, 0xf9, 0x40, 0x74, 0xd3, 0x42, 0x55, 0x52, 0x7a, 0xb2, 0xca, 0x4e, 0x94, 0x9b, 0xda, 0x7b, 0x23, 0x54, 0x6e, 0xc9, 0x80, 0x1e, 0xe1, 0x48}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x0e, 0xd9, 0xd7, 0xe9, 0x4a, 0x99, 0x1e, 0x8b, 0x9e, 0x13, 0xfb, 0x28, 0x88, 0xe6, 0x72, 0x90, 0x9b, 0x3d, 0x75, 0x1c, 0x82, 0x74, 0xa3, 0x06, 0xe3, 0x28, 0x72, 0x69, 0x36, 0x93, 0xc7, 0x17}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x45, 0x9f, 0x36, 0xd9, 0x73, 0x4e, 0x0c, 0x7a, 0x8f, 0x0e, 0x90, 0x23, 0x6b, 0x90, 0xa2, 0xb9, 0xaa, 0xed, 0x42, 0x2f, 0x40, 0x56, 0xc6, 0x00, 0xa2, 0x7a, 0xb7, 0xb1, 0x04, 0x3a, 0x2c, 0xaf}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - gcp_GCPSEVSNP = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x54, 0x55, 0x46, 0xde, 0xb2, 0x38, 0x94, 0xce, 0x7d, 0x8b, 0x87, 0x65, 0x8f, 0xd3, 0x90, 0xed, 0xcb, 0x23, 0xa7, 0x8d, 0x26, 0x7d, 0x0f, 0xba, 0x94, 0x0e, 0x9a, 0xd7, 0xa3, 0x5d, 0x75, 0xe1}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x78, 0x8c, 0x5d, 0x07, 0x17, 0x64, 0x50, 0x05, 0xda, 0xd2, 0x04, 0xf4, 0x9c, 0x94, 0xdc, 0x21, 0x4d, 0xd4, 0xfd, 0xa9, 0x90, 0x35, 0x8c, 0xf6, 0x8b, 0xcd, 0x26, 0xde, 0x42, 0x76, 0x01, 0x96}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x1b, 0xe2, 0xaf, 0xeb, 0xc8, 0x31, 0xf8, 0x23, 0x1d, 0x45, 0xcd, 0xb0, 0x7c, 0x6f, 0x0d, 0x0b, 0xa6, 0x91, 0xe8, 0x0c, 0xb8, 0xfa, 0xee, 0x89, 0x15, 0xa8, 0xd4, 0x66, 0xa5, 0xc7, 0xc3, 0xf6}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - openstack_QEMUVTPM = M{4: {Expected: []byte{0x83, 0x0b, 0xcb, 0xe0, 0x47, 0x4d, 0x80, 0x1c, 0xe4, 0x72, 0xcd, 0x1a, 0x35, 0xd5, 0x63, 0xb1, 0xd2, 0xac, 0x1c, 0x04, 0x1e, 0x7f, 0xab, 0xc9, 0x93, 0xe8, 0xca, 0x3b, 0xef, 0x51, 0x2c, 0xb6}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x74, 0xfe, 0x2a, 0x0a, 0x9f, 0x99, 0x70, 0x20, 0x21, 0xe2, 0x41, 0xe2, 0x65, 0x04, 0xff, 0xf7, 0x6f, 0xfc, 0xab, 0x0d, 0x14, 0xd7, 0x5f, 0x0b, 0xac, 0x16, 0xeb, 0xb1, 0xd7, 0xb6, 0x6e, 0xad}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x14, 0x76, 0x32, 0xfe, 0x92, 0x00, 0xeb, 0x14, 0x32, 0x7b, 0xa7, 0xf0, 0xa0, 0x37, 0xfa, 0xf1, 0xb9, 0xff, 0xaa, 0x97, 0xad, 0x33, 0x42, 0xd2, 0xf6, 0xf1, 0x8c, 0x21, 0xfe, 0x97, 0xce, 0x65}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + gcp_GCPSEVES = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x6f, 0x3d, 0xc1, 0x12, 0x8a, 0x3a, 0x6a, 0x63, 0x39, 0xf5, 0xef, 0xe0, 0x6f, 0xaf, 0x79, 0xed, 0xb5, 0x66, 0x00, 0xc8, 0xcd, 0x0d, 0x86, 0xe3, 0xaf, 0xa6, 0x72, 0x4a, 0x35, 0xc0, 0x0e, 0x58}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x3a, 0x87, 0xd0, 0x63, 0x83, 0xd8, 0xfb, 0x1e, 0x2a, 0xf6, 0x50, 0x50, 0x4b, 0xaf, 0x9c, 0xe3, 0xc2, 0xbe, 0x6a, 0x22, 0x43, 0xd1, 0xed, 0x1d, 0x2e, 0x36, 0x01, 0x0a, 0xb3, 0x3f, 0x56, 0xa0}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x1f, 0x88, 0x23, 0x00, 0x26, 0x14, 0xe4, 0x32, 0x33, 0x11, 0xf7, 0x62, 0xff, 0xa3, 0xde, 0x8d, 0xc6, 0x0d, 0x56, 0x55, 0x8b, 0xde, 0x62, 0x0b, 0x96, 0x31, 0x66, 0xf2, 0x15, 0x94, 0x38, 0xee}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + gcp_GCPSEVSNP = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xd5, 0xd1, 0xc1, 0xa0, 0x8c, 0x81, 0x99, 0xca, 0xdb, 0x71, 0x5e, 0x2b, 0x01, 0x78, 0x41, 0xe3, 0x55, 0x8d, 0x26, 0x94, 0xa7, 0xec, 0xd1, 0xb1, 0x1e, 0x8d, 0xc0, 0x15, 0xbd, 0x26, 0x10, 0x4c}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x0f, 0x95, 0x6b, 0x6a, 0xcd, 0xc0, 0xbe, 0x6e, 0xff, 0xad, 0xcc, 0x92, 0xc4, 0xda, 0xe7, 0x86, 0xb5, 0x23, 0xde, 0xc1, 0x19, 0xc8, 0x0a, 0x12, 0xc8, 0xef, 0xd2, 0x73, 0x60, 0x8f, 0x73, 0x2c}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xf7, 0x14, 0xaf, 0x16, 0xef, 0x85, 0x02, 0x3f, 0x12, 0x9c, 0x04, 0xb8, 0x65, 0x19, 0x2d, 0xd0, 0xa2, 0x50, 0xf6, 0x93, 0xf6, 0xde, 0x67, 0xed, 0x4f, 0x41, 0xd4, 0x73, 0x97, 0xe4, 0x32, 0x7c}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + openstack_QEMUVTPM = M{4: {Expected: []byte{0x8d, 0xbb, 0x82, 0x6c, 0x79, 0xe4, 0x14, 0x31, 0x6d, 0xa6, 0x3e, 0xec, 0xa9, 0x59, 0x13, 0x8a, 0x07, 0xce, 0x6f, 0x72, 0x3d, 0xdb, 0x10, 0x5f, 0x2f, 0x84, 0x0e, 0xba, 0x80, 0x19, 0x04, 0xe8}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xbb, 0x23, 0xf1, 0x47, 0x14, 0x0a, 0xb5, 0x4b, 0xa5, 0x0f, 0xbc, 0x90, 0xf7, 0xbb, 0x54, 0xef, 0xf0, 0xf5, 0x5a, 0x8b, 0x84, 0x5a, 0xb0, 0x9f, 0x31, 0xfb, 0x5e, 0xdc, 0x62, 0xbb, 0x62, 0xec}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x58, 0x01, 0xc3, 0x78, 0x52, 0x3a, 0x95, 0xe9, 0x8f, 0x7f, 0xca, 0xa3, 0x6b, 0xc0, 0x50, 0x29, 0x4b, 0x8a, 0xb9, 0xb9, 0xf4, 0xde, 0x85, 0x76, 0x0e, 0xa8, 0x8b, 0x07, 0x1b, 0x2f, 0xfa, 0x4f}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} qemu_QEMUTDX M - qemu_QEMUVTPM = M{4: {Expected: []byte{0x98, 0xc1, 0xd8, 0x4d, 0x01, 0xf2, 0x60, 0x22, 0xb9, 0x63, 0x3c, 0x91, 0x9e, 0x7f, 0x69, 0x15, 0x91, 0xa3, 0x0c, 0x72, 0x4c, 0xc6, 0x18, 0x0e, 0xc7, 0x25, 0x50, 0x25, 0x75, 0x11, 0xdf, 0x00}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x8e, 0x3c, 0x08, 0x5b, 0xcc, 0x5a, 0x57, 0xf1, 0x8f, 0xf4, 0xf8, 0x4f, 0x04, 0xfb, 0x7c, 0x2e, 0x7a, 0x31, 0xac, 0xf6, 0x59, 0x92, 0xd4, 0x25, 0xa6, 0xc3, 0xbc, 0x6a, 0x33, 0x3a, 0x3b, 0xf8}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xd4, 0x29, 0xf7, 0x72, 0x51, 0xe0, 0x38, 0x18, 0xb5, 0xe7, 0x75, 0x83, 0x2e, 0x96, 0xf6, 0x5d, 0x0a, 0x53, 0x12, 0x46, 0xdf, 0x88, 0x43, 0xb5, 0x76, 0xd0, 0x00, 0x2f, 0x3a, 0x70, 0x78, 0x33}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + qemu_QEMUVTPM = M{4: {Expected: []byte{0xc4, 0x80, 0xb5, 0x7f, 0xe8, 0x59, 0x52, 0xda, 0xc8, 0xa5, 0x29, 0x81, 0xa6, 0x82, 0x83, 0x06, 0xe0, 0xf6, 0x60, 0x7c, 0x74, 0x7d, 0xe0, 0x3a, 0x98, 0x38, 0x1e, 0x22, 0x32, 0xda, 0x6b, 0x79}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x90, 0x17, 0xc1, 0x0d, 0xcf, 0xe7, 0xfa, 0xd4, 0x29, 0x0d, 0x18, 0xc1, 0x93, 0x51, 0x6a, 0x95, 0x67, 0x6d, 0x17, 0xcc, 0xa7, 0x6c, 0x28, 0xa0, 0x9c, 0x7d, 0x45, 0xac, 0xe0, 0xf2, 0x34, 0x4a}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x39, 0xb9, 0xf0, 0x7b, 0xa3, 0x1b, 0x68, 0xc7, 0xb4, 0xa6, 0x45, 0x8e, 0xd5, 0xcc, 0x68, 0xf3, 0x1a, 0x52, 0xc9, 0x58, 0xd9, 0xab, 0x46, 0x3f, 0x1f, 0x91, 0xc4, 0x39, 0xb8, 0x60, 0x1f, 0xb7}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} ) diff --git a/internal/config/image_enterprise.go b/internal/config/image_enterprise.go index c814389de..ead94e9ec 100644 --- a/internal/config/image_enterprise.go +++ b/internal/config/image_enterprise.go @@ -10,5 +10,5 @@ package config const ( // defaultImage is the default image to use. - defaultImage = "ref/main/stream/nightly/v2.21.0-pre.0.20250106102225-88f26bc16186" + defaultImage = "ref/main/stream/nightly/v2.21.0-pre.0.20250108084044-40e25c304602" ) From 91ffc681897a0c2c2f8d10c88b38ea04e3af35f1 Mon Sep 17 00:00:00 2001 From: edgelessci <71088502+edgelessci@users.noreply.github.com> Date: Sun, 12 Jan 2025 10:55:56 +0100 Subject: [PATCH 040/311] image: update locked rpms (#3572) Co-authored-by: edgelessci --- image/mirror/SHA256SUMS | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/image/mirror/SHA256SUMS b/image/mirror/SHA256SUMS index a2d8eafd2..dde1f87df 100644 --- a/image/mirror/SHA256SUMS +++ b/image/mirror/SHA256SUMS @@ -147,7 +147,7 @@ c890a19d2c4a3da836bae1db40b778fe0339cd0d26bddfbe584aaccb1a0f1485 libcom_err-1.4 e3dc770fc4c48bec2da9ac948bcd43e053608d0397ad0a57056409a7d427289d libcurl-minimal-8.6.0-10.fc40.x86_64.rpm 700d56839e1bc16c08f71c505a7e62f655e4c18f4bf71bf2f36f3854f829e6f5 libeconf-0.6.2-2.fc40.i686.rpm 2ef764049e121ee2a9fa5d0296e6e2dd0abc7541040b8e49d67960bd9bde74e4 libeconf-0.6.2-2.fc40.x86_64.rpm -b003de79beac86385d212fce137417439e8ec7cb863115d560e02834c84efd1e libedit-3.1-53.20240808cvs.fc40.x86_64.rpm +7a91572e9639617937c13cd103ac5571075f37fa533d796be108aa8a4937432d libedit-3.1-54.20250104cvs.fc40.x86_64.rpm c4adcee5dd9e22ea50d6c318ac4936a8df708121741958ce5aa8f038c46c61a9 libevent-2.1.12-12.fc40.x86_64.rpm a1ba3045c99ef1b266383f0801731a68f9e0cb069a6c808267ad33b759381907 libfdisk-2.40-0.9.rc1.fc40.i686.rpm 17f02ca51b90580887d739f52b995034e0929fc6bcd92be308554a2f5337bbe4 libfdisk-2.40-0.9.rc1.fc40.x86_64.rpm @@ -204,7 +204,7 @@ c8bbfa2762cc601f8a97d8d5a39a658f0e91ba477ebebd798b30f7fc8ffdd457 libss-1.47.0-5 89e7282e0a94d641871dfed423ba2ce6f8b088eaf9aabdea1805708bcafa6a01 libstdc++-14.2.1-3.fc40.x86_64.rpm d92173d6fbfb7e2af3b35a8554229e247666e15dc5b36cba43b7bbfc4144b781 libtasn1-4.19.0-6.fc40.x86_64.rpm 9ca680998686ee852fa8e1667cd6e7c436bfd5fe7da898bd314d808303d447f8 libtextstyle-0.22.5-4.fc40.x86_64.rpm -a660c40fc2af9578a7cf283bd18df6ae00d68f25b7d102f4e4f49a3805f6c575 libtirpc-1.3.6-1.fc40.x86_64.rpm +189e8f25a80a67db1722cb42f2800235df3eadd9cb93d3bcd13853bf09122d5f libtirpc-1.3.6-1.rc3.fc40.x86_64.rpm e5d150d23f95e4a23288b84145af442607a88bf457c0e04b325b1d1e8e708c2b libtool-ltdl-2.4.7-10.fc40.x86_64.rpm e541a1c8397dccf159b3602eb6bbb381ba21c544db337a3b3bfc49ccc2ef5c21 libunistring-1.1-7.fc40.i686.rpm 58719c2f205b23598e31b72144ab55215947ad8fca96af46a641288692c159d2 libunistring-1.1-7.fc40.x86_64.rpm @@ -217,8 +217,8 @@ bc60959e98e5f690bc3df03bfa8afee2d0cf28e794c4e3c52f19769885771321 libusb1-1.0.27 b6db3e72ae6575127216145c1f65414ea94acd9db26d08c5081cb5d786101c1f libuuid-2.40.2-1.fc40.x86_64.rpm bea578631618692ba5e302beadfdf6d5894e23e5bddaea4b4fca2f377dd1aaac libverto-0.3.2-8.fc40.i686.rpm fadf7dd93c5eee57ba78e0628bf041dbd2ea037ace52f0a5cbac55b363234d27 libverto-0.3.2-8.fc40.x86_64.rpm -89d7d4ad87de0762399b5ab771b0bd12beac974e974371fe6f5f6b8f21b102e7 libxcrypt-4.4.37-1.fc40.i686.rpm -16276f01cc23d1b5b716bce2696b958a694f869f6f56a85fb5cc1bcfc4193062 libxcrypt-4.4.37-1.fc40.x86_64.rpm +92cfec827fb61991f9a8082d254b3aa070ed6b24bc0f2c95fbb41e31b2c9b0e1 libxcrypt-4.4.37-4.fc40.i686.rpm +76fddf1c2e81e78187bb7d1eba5bae6b11bd572bd1e50727df0199470dfd2717 libxcrypt-4.4.37-4.fc40.x86_64.rpm a17f9a8894a00ee97a42219b3b21d64bfb850d74059d89ae299210bc477e8967 libxkbcommon-1.6.0-2.fc40.i686.rpm 1f1d0c1e1132016735acc6fc3390102b35f9eb257244547c7b61c32a9c2314cc libxkbcommon-1.6.0-2.fc40.x86_64.rpm db2c5422aeef81940a186b597df582b75a0f156e481262bef262f1b69ea1b799 libxml2-2.12.9-1.fc40.i686.rpm @@ -318,16 +318,16 @@ cfde0d25ecac7e689ee083b330b78df51d346c2b7557c83a189d5df95c4e2c8d shadow-utils-4 6e9b6b6196f1782419e447ac806c762d002c6930fe39b18999d9b32c24a0ecfc shadow-utils-subid-4.15.1-4.fc40.x86_64.rpm 67eede27af5b4773eb2f7ac794df694be030310d40bce462864c05b8f65c87c3 socat-1.8.0.0-2.fc40.x86_64.rpm a1e23ae521e93ab19d3df77889a6a418c3432025e4880cfd893e40f7165876a7 sqlite-libs-3.45.1-2.fc40.x86_64.rpm -496f55ea440ce316692c7439171e883faa8716f5326011343f6d6211f1a7feee systemd-255.15-1.fc40.i686.rpm -b50d60c8f95401f6affe46cade4de632597b07eff07999fcce71c7210a3eb387 systemd-255.15-1.fc40.x86_64.rpm -0eb00d002a62db9b8bcb18cecadd0f539f3a594bf91e8848d99633dd4f6217c1 systemd-boot-unsigned-255.15-1.fc40.x86_64.rpm -2acaaf24267353252adced7caf8e60273b11ac2da767931411d98f6148cb575f systemd-libs-255.15-1.fc40.i686.rpm -e6e40ea116b387612db22fe8ade1ef3c2b2cdf11b8a70a6a007af438a19ddca9 systemd-libs-255.15-1.fc40.x86_64.rpm -f62710bc381a1347b2c9b9da291dffec87f78e4c3422fc1b00a90cb4b67a1e06 systemd-networkd-255.15-1.fc40.x86_64.rpm -0dfda625f4e86d3ace91b5e677e188a50f3ab22ee8f827785e3b94b71624836c systemd-pam-255.15-1.fc40.i686.rpm -05214c94a78e75fd867eb490d011bae8c6c1613d8a7616604d030697746f8d12 systemd-pam-255.15-1.fc40.x86_64.rpm -651bb215d1e1f8f0795dd346b282dad08a6ecc3647c199966f7511f5045584d7 systemd-resolved-255.15-1.fc40.x86_64.rpm -ec2783c63888cb1403134bc2a1a1d7104e5d4fa91cf1e4541fe051c8332e4a8f systemd-udev-255.15-1.fc40.x86_64.rpm +50d517b44eeb126c05afcbc2e450bd5bfa1c6af0e9744e5a8fa749b0bbbd872e systemd-255.16-1.fc40.i686.rpm +f86b4e2a602905aeb1a87b2e0fcab9e783fa3347adb40d4e04c288ae0321f79f systemd-255.16-1.fc40.x86_64.rpm +7987560126dd84f8101bfc0e10455ed055f313c5df419d41417ebfcd7de16d97 systemd-boot-unsigned-255.16-1.fc40.x86_64.rpm +2c84b527acc9f776cae03fde6fe891f2d845b3b3aeea96758bf5f761f058fe5f systemd-libs-255.16-1.fc40.i686.rpm +2af80a3733c9cfee40b3a0cabb7263d9420182def1a072ef0b763915e8336f00 systemd-libs-255.16-1.fc40.x86_64.rpm +8ca37445fcbbd8a003fc67283694c0bd9299022d85acae8c53f0c828eeb07fa4 systemd-networkd-255.16-1.fc40.x86_64.rpm +d59030b779fdc989af950179ce808639a58878e6b8db4458fa7f7217c1b3b833 systemd-pam-255.16-1.fc40.i686.rpm +930aebc2ad9ada1be1ff85f2c2c6cedb1ca4ad81d7848b8a60955ce2f42a08a1 systemd-pam-255.16-1.fc40.x86_64.rpm +1c121a6537bb8922b3062f3d98ce5c825527cf55f9cbc65dbc1c4aba9ba79023 systemd-resolved-255.16-1.fc40.x86_64.rpm +6afe2b3d2bca4bdeb3bbd4a1dddc162f19863085db0f07c64a3bb9763e1ff2e4 systemd-udev-255.16-1.fc40.x86_64.rpm 65819c502727dc293a71a74b9a5f6b0ba781f12a99c5d5535085f168e5eac56e tar-1.35-3.fc40.x86_64.rpm 0478e12152cc3432a31dfca5ddbc80966800af437c6d7c0b26be307d5e1272e7 tpm2-tools-5.7-1.fc40.x86_64.rpm c3be8a6d0ea23b1d0bf466b19857b97f7ffde811ad7adec0599161059d84cc74 tpm2-tss-4.1.3-1.fc40.x86_64.rpm From 9f59990c7d830ad4fdb5108e6aad685fed415d8a Mon Sep 17 00:00:00 2001 From: Moritz Sanft <58110325+msanft@users.noreply.github.com> Date: Tue, 14 Jan 2025 11:41:04 +0100 Subject: [PATCH 041/311] renovate: match dl.k8s.io for K8s releases (#3573) We have a version mismatch in our Kubernetes (e.g. `kubadm`) versions and the versions the CLI expects to have right now, as the Renovate rule didn't match the `dl.k8s.io` URLs introduced in https://github.com/edgelesssys/constellation/commit/c1714aaf92ed04f6795bf52002256a9cb4fdba76. This fixes the issue by adjusting the Regex. Updates should work again when the versions are back in sync. --- renovate.json5 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/renovate.json5 b/renovate.json5 index 5d37ae297..2ff365329 100644 --- a/renovate.json5 +++ b/renovate.json5 @@ -235,9 +235,9 @@ "fileMatch": ["(^|\\/)versions.go$"], "matchStrings": [ // Match kubernetes releases. - // example match:' "https://storage.googleapis.com/kubernetes-release/release/v1.2.3/foo" // renovate:kubernetes-release' + // example match:' "https://dl.k8s.io/v1.2.3/foo" // renovate:kubernetes-release' // (v1.2.3 -> currentValue) - " \"https:\\/\\/storage\\.googleapis\\.com\\/kubernetes-release\\/release\\/(?[^\\/\\s\"]+)\\/[^\"]+\"[^\\n]+\\/\\/ renovate:kubernetes-release", + " \"https:\\/\\/dl\\.k8s\\.io\\/(?[^\\/\\s\"]+)\\/[^\"]+\"[^\\n]+\\/\\/ renovate:kubernetes-release", // Match kubernetes releases. // example match:' " "v1.2.3" // renovate:kubernetes-release"' // (v1.2.3 -> currentValue) From 2ba6b66cee9275bbd494e79f338c4abbcfe9f527 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 14 Jan 2025 12:30:12 +0100 Subject: [PATCH 042/311] deps: update Kubernetes versions (#3574) * deps: update Kubernetes versions * deps: tidy all modules --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: edgelessci --- internal/versions/versions.go | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/internal/versions/versions.go b/internal/versions/versions.go index 04cb3927a..95a9d81b0 100644 --- a/internal/versions/versions.go +++ b/internal/versions/versions.go @@ -280,20 +280,20 @@ var VersionConfigs = map[ValidK8sVersion]KubernetesVersion{ Extract: true, }, { - Url: "https://dl.k8s.io/v1.29.11/bin/linux/amd64/kubelet", // renovate:kubernetes-release - Hash: "sha256:1aaa9025cceac0c9a4df295a58aa79d8932a5b13a43c8910412c9ef970c42d21", + Url: "https://dl.k8s.io/v1.29.12/bin/linux/amd64/kubelet", // renovate:kubernetes-release + Hash: "sha256:45475d908f6c44bfbf994fec91a4d5ceebf41d93c9f3867e687b2fa67b57b5b0", InstallPath: constants.KubeletPath, Extract: false, }, { - Url: "https://dl.k8s.io/v1.29.11/bin/linux/amd64/kubeadm", // renovate:kubernetes-release - Hash: "sha256:6cf3567bd69a14859fb80fb39a09196dc2de1729ae72566e7e4819c5600e49c6", + Url: "https://dl.k8s.io/v1.29.12/bin/linux/amd64/kubeadm", // renovate:kubernetes-release + Hash: "sha256:bce712631bc425726b45930e58b00790c2ab3deec4282f86af353ea907817c46", InstallPath: constants.KubeadmPath, Extract: false, }, { - Url: "https://dl.k8s.io/v1.29.11/bin/linux/amd64/kubectl", // renovate:kubernetes-release - Hash: "sha256:14d7ea4ada60ff15ef3b7734a83c4d05cff164d4843b6f4c081a50b86547c17d", + Url: "https://dl.k8s.io/v1.29.12/bin/linux/amd64/kubectl", // renovate:kubernetes-release + Hash: "sha256:35fc028853e6f5299a53f22ab58273ea2d882c0f261ead0a2eed5b844b12dbfb", InstallPath: constants.KubectlPath, Extract: false, }, @@ -347,20 +347,20 @@ var VersionConfigs = map[ValidK8sVersion]KubernetesVersion{ Extract: true, }, { - Url: "https://dl.k8s.io/v1.30.7/bin/linux/amd64/kubelet", // renovate:kubernetes-release - Hash: "sha256:4b2fb90661e2b7be8b34b5bd405652590f6351a9f55194430fa16d547a7c9d16", + Url: "https://dl.k8s.io/v1.30.8/bin/linux/amd64/kubelet", // renovate:kubernetes-release + Hash: "sha256:7b5191dfed6a27faadefebdc4a3b602b9a76adfc58fd04c50307f1377eabc590", InstallPath: constants.KubeletPath, Extract: false, }, { - Url: "https://dl.k8s.io/v1.30.7/bin/linux/amd64/kubeadm", // renovate:kubernetes-release - Hash: "sha256:3635901a3a6e5b0124547151de700a1dbd4571531327a32edbec43bb155b877b", + Url: "https://dl.k8s.io/v1.30.8/bin/linux/amd64/kubeadm", // renovate:kubernetes-release + Hash: "sha256:ffe1a2b6345fae55e059afe7eed90ae9f46f0a755fde5fc17b9113134ab8b79e", InstallPath: constants.KubeadmPath, Extract: false, }, { - Url: "https://dl.k8s.io/v1.30.7/bin/linux/amd64/kubectl", // renovate:kubernetes-release - Hash: "sha256:3950ec7b81b9aa5a3856dd6155e42e1ad12a2fa8b050502f5a9652050f94a8ee", + Url: "https://dl.k8s.io/v1.30.8/bin/linux/amd64/kubectl", // renovate:kubernetes-release + Hash: "sha256:7f39bdcf768ce4b8c1428894c70c49c8b4d2eee52f3606eb02f5f7d10f66d692", InstallPath: constants.KubectlPath, Extract: false, }, From 2fad395bb59d19cd719dbd6380112ddba3f689dc Mon Sep 17 00:00:00 2001 From: miampf Date: Tue, 14 Jan 2025 15:46:19 +0100 Subject: [PATCH 043/311] docs(image): Add section for adding new packages (#3575) --- image/README.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/image/README.md b/image/README.md index 4316f6cfc..c0d8c1975 100644 --- a/image/README.md +++ b/image/README.md @@ -60,3 +60,15 @@ After building a Kernel rpm, we upload it to our CDN and use it in our image bui - `bazel build //image/system:IMAGE_NAME_HERE` (replace with an actual image name) - Let CI build new images and run e2e tests - Upgrade kernel spec under [edgelesssys/constellation-kernel](https://github.com/edgelesssys/constellation-kernel) to use new releasever + +## Adding new packages to the image + +- Find the package (i.e. it's _package name_) on [Koji](https://koji.fedoraproject.org/koji/) +- Add the package to the corresponding section in `./base/mkosi.conf` + - If the package is required to be present in the initrd, add it to `./initrd/mkosi.conf` +- Add the package to `./mirror/packages.txt` +- Update the package mirror: + ```sh + bazel run //image/mirror:update_packages + ``` +- Build new images (e.g. via CI) and run e2e tests From 0d2bedbca329a1cc4c32cff96c5f5c61e8b0d02b Mon Sep 17 00:00:00 2001 From: miampf Date: Tue, 14 Jan 2025 16:07:19 +0100 Subject: [PATCH 044/311] fix(docs): reference up to date longhorn guide (#3576) --- dev-docs/howto/longhorn.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dev-docs/howto/longhorn.md b/dev-docs/howto/longhorn.md index 6c13c9d6e..61e791a74 100644 --- a/dev-docs/howto/longhorn.md +++ b/dev-docs/howto/longhorn.md @@ -1,6 +1,6 @@ # Longhorn on Constellatioin -To build Longhorn compatible images, apply the following changes. Those stem from [their installation guide](https://longhorn.io/docs/1.5.3/deploy/install/#installation-requirements). +To build Longhorn compatible images, apply the following changes. Those stem from [their installation guide](https://longhorn.io/docs/1.7.2/deploy/install/#installation-requirements). ```diff diff --git a/image/mkosi.conf.d/azure.conf b/image/mkosi.conf.d/azure.conf From 126dbd69d923067ad3df068a99a700c261dd5580 Mon Sep 17 00:00:00 2001 From: edgelessci <71088502+edgelessci@users.noreply.github.com> Date: Wed, 15 Jan 2025 08:07:44 +0100 Subject: [PATCH 045/311] image: update measurements and image version (#3577) Co-authored-by: edgelessci --- .../measurements/measurements_enterprise.go | 16 ++++++++-------- internal/config/image_enterprise.go | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/internal/attestation/measurements/measurements_enterprise.go b/internal/attestation/measurements/measurements_enterprise.go index 3d892554f..bb258d5f3 100644 --- a/internal/attestation/measurements/measurements_enterprise.go +++ b/internal/attestation/measurements/measurements_enterprise.go @@ -19,14 +19,14 @@ package measurements // revive:disable:var-naming var ( - aws_AWSNitroTPM = M{0: {Expected: []byte{0x73, 0x7f, 0x76, 0x7a, 0x12, 0xf5, 0x4e, 0x70, 0xee, 0xcb, 0xc8, 0x68, 0x40, 0x11, 0x32, 0x3a, 0xe2, 0xfe, 0x2d, 0xd9, 0xf9, 0x07, 0x85, 0x57, 0x79, 0x69, 0xd7, 0xa2, 0x01, 0x3e, 0x8c, 0x12}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xf1, 0x51, 0x9e, 0x3c, 0x53, 0xcb, 0x04, 0xaa, 0x45, 0x8f, 0x7d, 0x5c, 0xdd, 0xa0, 0x8e, 0x58, 0x0b, 0x7b, 0x87, 0x6d, 0x9c, 0xbc, 0x12, 0xd6, 0x8a, 0x11, 0x80, 0x80, 0xdd, 0x19, 0xf4, 0xdf}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x73, 0x0d, 0x1b, 0xa4, 0xf5, 0x17, 0xfe, 0xa3, 0x19, 0x87, 0x4d, 0xdb, 0x22, 0xce, 0x0b, 0x5c, 0x91, 0xd9, 0xf6, 0x1a, 0x57, 0x71, 0xe4, 0x80, 0xf9, 0xe3, 0x4a, 0x60, 0x31, 0xea, 0xca, 0xc2}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xd4, 0x66, 0xbe, 0xd6, 0x2b, 0xb4, 0xbf, 0x0f, 0x17, 0x8a, 0x0f, 0x4b, 0x7d, 0x00, 0xc8, 0x81, 0x97, 0x01, 0x0f, 0x47, 0x91, 0x96, 0x58, 0x20, 0xa0, 0xfd, 0xd2, 0x0f, 0x2e, 0xa3, 0x41, 0x60}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - aws_AWSSEVSNP = M{0: {Expected: []byte{0xd6, 0xdf, 0x85, 0x53, 0x58, 0xf5, 0xb1, 0x0f, 0x06, 0xf0, 0xfa, 0xb3, 0xf4, 0x08, 0xad, 0x26, 0xcd, 0x16, 0x5a, 0x29, 0x49, 0xba, 0xd6, 0x9e, 0x2c, 0xc7, 0x56, 0x92, 0x52, 0x9e, 0x66, 0x2a}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x61, 0xbe, 0xfb, 0xa8, 0xa3, 0x4a, 0xf6, 0x72, 0x93, 0x23, 0x22, 0x8f, 0xa9, 0xdb, 0x09, 0x74, 0xb5, 0xd1, 0x39, 0x22, 0x01, 0xd7, 0x59, 0xfc, 0x8d, 0x57, 0x31, 0x81, 0xdd, 0x30, 0xb0, 0x3b}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xf1, 0xf8, 0x9c, 0xd7, 0x62, 0x0c, 0xba, 0x09, 0xd1, 0x22, 0xda, 0xf0, 0xc9, 0x2f, 0x65, 0xdc, 0x37, 0x99, 0x81, 0x14, 0xf7, 0x78, 0x4a, 0x5a, 0x4d, 0x98, 0x2d, 0x2a, 0x84, 0x4b, 0xa8, 0x1e}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xbe, 0x88, 0x41, 0xcc, 0x71, 0x2a, 0xf8, 0x76, 0x5b, 0xe8, 0x58, 0x21, 0xfa, 0xd1, 0x87, 0x4f, 0x4a, 0x19, 0x35, 0x6c, 0xbe, 0xe7, 0x56, 0x09, 0x58, 0xcb, 0x29, 0x18, 0xe6, 0x8a, 0xab, 0xd2}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - azure_AzureSEVSNP = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x50, 0x30, 0xd7, 0x1d, 0xa7, 0xff, 0xfb, 0x9f, 0x95, 0xfa, 0x31, 0x83, 0xa1, 0x32, 0xe7, 0xd4, 0x36, 0x62, 0x30, 0x9e, 0x4d, 0x95, 0x80, 0x24, 0x60, 0xd4, 0x66, 0x07, 0x4a, 0x67, 0xe3, 0xa7}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x21, 0xc8, 0xc6, 0x07, 0xc7, 0xd6, 0x81, 0x54, 0xac, 0xbd, 0x59, 0xa7, 0x97, 0x5e, 0x7a, 0xbb, 0x10, 0xfc, 0x67, 0x3d, 0x90, 0x7a, 0x9f, 0xd5, 0x92, 0xa6, 0xd9, 0xb0, 0xfb, 0xdf, 0xad, 0xba}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x75, 0xb4, 0xbd, 0x01, 0x6b, 0xae, 0x27, 0x90, 0x05, 0x11, 0xf8, 0x03, 0xa2, 0x17, 0x04, 0x9e, 0xe1, 0xae, 0x65, 0xe0, 0xe6, 0x5c, 0xd8, 0x13, 0x8f, 0x75, 0xd8, 0x9b, 0x2a, 0xd6, 0x5b, 0xbb}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - azure_AzureTDX = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x86, 0xb9, 0x0b, 0xfc, 0xd3, 0x8f, 0x67, 0x27, 0x6c, 0xad, 0x8f, 0xbe, 0x04, 0x47, 0x78, 0x21, 0x7c, 0x8b, 0x51, 0xe2, 0x1f, 0x88, 0xc2, 0x6a, 0x6c, 0x8d, 0x3e, 0x9c, 0xab, 0x07, 0x67, 0xf4}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x32, 0x47, 0xe9, 0xde, 0xab, 0x86, 0x62, 0x41, 0x82, 0x2f, 0x5f, 0xe5, 0xde, 0x58, 0x0e, 0x2c, 0xf9, 0x14, 0x51, 0x56, 0xdf, 0xd1, 0x0d, 0xb2, 0x41, 0x85, 0x62, 0x73, 0x93, 0x36, 0xb1, 0xe7}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x0e, 0x18, 0x67, 0x1c, 0xa9, 0x91, 0x9b, 0xf4, 0xbc, 0x5f, 0x31, 0x15, 0x42, 0xa2, 0x11, 0x7d, 0xb9, 0xeb, 0x9c, 0xf2, 0xf8, 0x71, 0xc8, 0x37, 0x2c, 0x14, 0xf1, 0x7c, 0x00, 0xed, 0x59, 0x83}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + aws_AWSNitroTPM = M{0: {Expected: []byte{0x73, 0x7f, 0x76, 0x7a, 0x12, 0xf5, 0x4e, 0x70, 0xee, 0xcb, 0xc8, 0x68, 0x40, 0x11, 0x32, 0x3a, 0xe2, 0xfe, 0x2d, 0xd9, 0xf9, 0x07, 0x85, 0x57, 0x79, 0x69, 0xd7, 0xa2, 0x01, 0x3e, 0x8c, 0x12}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xcf, 0x5a, 0x04, 0x57, 0xee, 0x83, 0x57, 0x24, 0x47, 0x44, 0x4b, 0xdd, 0xbe, 0xd0, 0x84, 0xea, 0x51, 0xe0, 0x8c, 0xa5, 0xa5, 0x66, 0xef, 0x96, 0xb8, 0x9b, 0x19, 0xe3, 0xf2, 0x2b, 0x4c, 0xf6}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x01, 0xb3, 0x85, 0x99, 0x4e, 0xfd, 0xa2, 0x1a, 0x20, 0xd6, 0x82, 0xb5, 0x13, 0x37, 0x16, 0x41, 0xb7, 0xa5, 0x58, 0x58, 0x65, 0xfe, 0xe8, 0x96, 0x9f, 0xf2, 0xb4, 0x57, 0xd5, 0xf0, 0xa2, 0xcd}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x5e, 0x08, 0x8b, 0x1f, 0xf9, 0x01, 0x48, 0x51, 0xe3, 0x6b, 0x31, 0x93, 0x2a, 0x98, 0x49, 0xe3, 0x9d, 0x9c, 0x3c, 0xfa, 0xca, 0x56, 0x2a, 0x36, 0xb4, 0xed, 0x6c, 0x90, 0xff, 0x3a, 0x2f, 0xce}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + aws_AWSSEVSNP = M{0: {Expected: []byte{0xd6, 0xdf, 0x85, 0x53, 0x58, 0xf5, 0xb1, 0x0f, 0x06, 0xf0, 0xfa, 0xb3, 0xf4, 0x08, 0xad, 0x26, 0xcd, 0x16, 0x5a, 0x29, 0x49, 0xba, 0xd6, 0x9e, 0x2c, 0xc7, 0x56, 0x92, 0x52, 0x9e, 0x66, 0x2a}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x3c, 0x2c, 0xc9, 0x20, 0x58, 0xf8, 0x28, 0x69, 0xa3, 0xa5, 0x07, 0xc3, 0x28, 0xe0, 0xb6, 0x1b, 0x62, 0x05, 0x94, 0x0d, 0xe5, 0x25, 0xce, 0x46, 0xe3, 0x1e, 0x0d, 0xb8, 0xf0, 0x4b, 0x96, 0x6a}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xa6, 0xcd, 0x8f, 0x6d, 0x4a, 0x87, 0xde, 0x28, 0x74, 0x68, 0x65, 0x0d, 0xd1, 0x20, 0xdd, 0xf8, 0x27, 0x02, 0x0b, 0x63, 0x9a, 0xb6, 0x8e, 0xb6, 0x32, 0xf8, 0x78, 0x87, 0x92, 0x51, 0x39, 0xfe}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xab, 0x9b, 0xa5, 0x86, 0x19, 0x02, 0xee, 0xb9, 0x7a, 0x9c, 0x71, 0x05, 0xe0, 0x23, 0xa7, 0x73, 0x5d, 0xbd, 0xc2, 0x40, 0xf5, 0x5d, 0x92, 0x29, 0x21, 0xf0, 0x4b, 0x91, 0xad, 0xb4, 0xb2, 0xbe}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + azure_AzureSEVSNP = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xad, 0xdc, 0xcc, 0x1c, 0x08, 0xf1, 0x4a, 0x34, 0x65, 0xf1, 0xde, 0xf0, 0xd3, 0x1f, 0x20, 0xb7, 0x43, 0x39, 0xa4, 0x87, 0xc0, 0x31, 0x7f, 0x0f, 0xf5, 0x18, 0xfb, 0x4d, 0x2f, 0xcb, 0x85, 0xb2}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x05, 0x1c, 0x3a, 0x97, 0xdd, 0x6a, 0x02, 0xd3, 0x7c, 0x1f, 0xae, 0x0a, 0xf4, 0xf3, 0x07, 0x8d, 0x6b, 0x56, 0xef, 0x1e, 0x18, 0xa1, 0x4a, 0x5a, 0x01, 0x99, 0x79, 0x7f, 0x91, 0x10, 0xf0, 0x18}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x28, 0x08, 0x2a, 0xeb, 0x2d, 0x47, 0xf9, 0xbb, 0xc4, 0x47, 0xe7, 0xac, 0x66, 0x86, 0xe1, 0x73, 0xbc, 0x15, 0xc2, 0xf0, 0x74, 0xb6, 0x44, 0xf7, 0xa1, 0x6f, 0x9c, 0x8e, 0x6f, 0xfd, 0x9d, 0xad}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + azure_AzureTDX = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x10, 0x5f, 0xa5, 0xf3, 0x99, 0xe5, 0xa8, 0x83, 0x0d, 0x4f, 0x90, 0x9d, 0x9f, 0x5f, 0x73, 0x8d, 0x3a, 0x21, 0xe7, 0x3d, 0xad, 0x9d, 0xd7, 0xf2, 0x39, 0xd9, 0x22, 0xd8, 0xc5, 0x33, 0x23, 0x6c}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xc6, 0x74, 0x98, 0x3c, 0x8d, 0xef, 0xbd, 0x9e, 0x59, 0x6e, 0xe2, 0xbb, 0x3d, 0xfc, 0x3e, 0xd8, 0x2c, 0x4f, 0xda, 0x40, 0x5d, 0xa9, 0x59, 0xda, 0x39, 0xc0, 0x8a, 0x44, 0xdb, 0xff, 0x6a, 0x29}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xca, 0x9d, 0x54, 0xf9, 0xe7, 0x47, 0x08, 0x13, 0x98, 0x51, 0x41, 0xa0, 0x4b, 0x43, 0xa6, 0x4f, 0x29, 0x13, 0x13, 0x2a, 0xfe, 0x4d, 0x28, 0xfa, 0x79, 0x99, 0xaf, 0xcb, 0x23, 0xb0, 0xef, 0x2b}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} azure_AzureTrustedLaunch M - gcp_GCPSEVES = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x6f, 0x3d, 0xc1, 0x12, 0x8a, 0x3a, 0x6a, 0x63, 0x39, 0xf5, 0xef, 0xe0, 0x6f, 0xaf, 0x79, 0xed, 0xb5, 0x66, 0x00, 0xc8, 0xcd, 0x0d, 0x86, 0xe3, 0xaf, 0xa6, 0x72, 0x4a, 0x35, 0xc0, 0x0e, 0x58}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x3a, 0x87, 0xd0, 0x63, 0x83, 0xd8, 0xfb, 0x1e, 0x2a, 0xf6, 0x50, 0x50, 0x4b, 0xaf, 0x9c, 0xe3, 0xc2, 0xbe, 0x6a, 0x22, 0x43, 0xd1, 0xed, 0x1d, 0x2e, 0x36, 0x01, 0x0a, 0xb3, 0x3f, 0x56, 0xa0}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x1f, 0x88, 0x23, 0x00, 0x26, 0x14, 0xe4, 0x32, 0x33, 0x11, 0xf7, 0x62, 0xff, 0xa3, 0xde, 0x8d, 0xc6, 0x0d, 0x56, 0x55, 0x8b, 0xde, 0x62, 0x0b, 0x96, 0x31, 0x66, 0xf2, 0x15, 0x94, 0x38, 0xee}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - gcp_GCPSEVSNP = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xd5, 0xd1, 0xc1, 0xa0, 0x8c, 0x81, 0x99, 0xca, 0xdb, 0x71, 0x5e, 0x2b, 0x01, 0x78, 0x41, 0xe3, 0x55, 0x8d, 0x26, 0x94, 0xa7, 0xec, 0xd1, 0xb1, 0x1e, 0x8d, 0xc0, 0x15, 0xbd, 0x26, 0x10, 0x4c}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x0f, 0x95, 0x6b, 0x6a, 0xcd, 0xc0, 0xbe, 0x6e, 0xff, 0xad, 0xcc, 0x92, 0xc4, 0xda, 0xe7, 0x86, 0xb5, 0x23, 0xde, 0xc1, 0x19, 0xc8, 0x0a, 0x12, 0xc8, 0xef, 0xd2, 0x73, 0x60, 0x8f, 0x73, 0x2c}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xf7, 0x14, 0xaf, 0x16, 0xef, 0x85, 0x02, 0x3f, 0x12, 0x9c, 0x04, 0xb8, 0x65, 0x19, 0x2d, 0xd0, 0xa2, 0x50, 0xf6, 0x93, 0xf6, 0xde, 0x67, 0xed, 0x4f, 0x41, 0xd4, 0x73, 0x97, 0xe4, 0x32, 0x7c}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - openstack_QEMUVTPM = M{4: {Expected: []byte{0x8d, 0xbb, 0x82, 0x6c, 0x79, 0xe4, 0x14, 0x31, 0x6d, 0xa6, 0x3e, 0xec, 0xa9, 0x59, 0x13, 0x8a, 0x07, 0xce, 0x6f, 0x72, 0x3d, 0xdb, 0x10, 0x5f, 0x2f, 0x84, 0x0e, 0xba, 0x80, 0x19, 0x04, 0xe8}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xbb, 0x23, 0xf1, 0x47, 0x14, 0x0a, 0xb5, 0x4b, 0xa5, 0x0f, 0xbc, 0x90, 0xf7, 0xbb, 0x54, 0xef, 0xf0, 0xf5, 0x5a, 0x8b, 0x84, 0x5a, 0xb0, 0x9f, 0x31, 0xfb, 0x5e, 0xdc, 0x62, 0xbb, 0x62, 0xec}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x58, 0x01, 0xc3, 0x78, 0x52, 0x3a, 0x95, 0xe9, 0x8f, 0x7f, 0xca, 0xa3, 0x6b, 0xc0, 0x50, 0x29, 0x4b, 0x8a, 0xb9, 0xb9, 0xf4, 0xde, 0x85, 0x76, 0x0e, 0xa8, 0x8b, 0x07, 0x1b, 0x2f, 0xfa, 0x4f}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + gcp_GCPSEVES = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x71, 0xb1, 0xf1, 0xa7, 0x77, 0x46, 0x6d, 0x35, 0x15, 0xe9, 0xc8, 0x66, 0xb6, 0xc0, 0x87, 0x6e, 0x81, 0xbb, 0x7e, 0x6a, 0x09, 0xa8, 0x71, 0xa5, 0xea, 0x8d, 0xcb, 0x3f, 0x27, 0xd4, 0x93, 0x6c}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x0d, 0x98, 0xc2, 0x22, 0x50, 0xc0, 0xdc, 0x52, 0x8c, 0xd2, 0xb4, 0x74, 0x52, 0x47, 0x7c, 0x3d, 0x34, 0x62, 0xc2, 0x84, 0x10, 0x7d, 0x42, 0xd3, 0xd5, 0x18, 0xd9, 0x83, 0x2d, 0x64, 0xd1, 0x83}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x0b, 0x48, 0x21, 0x7d, 0xd2, 0x78, 0x44, 0x06, 0x76, 0x71, 0x26, 0xd9, 0x9e, 0xbe, 0x2d, 0xcf, 0x18, 0x6c, 0x94, 0xad, 0x04, 0x26, 0x8d, 0x1d, 0x3a, 0xd2, 0xbf, 0xc3, 0x72, 0xe9, 0xe8, 0x38}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + gcp_GCPSEVSNP = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x0b, 0xd7, 0x48, 0xc6, 0x69, 0xcb, 0x27, 0x27, 0xe3, 0x83, 0x1b, 0x62, 0xf1, 0xb9, 0xa1, 0xff, 0xe2, 0x88, 0x14, 0xd1, 0x32, 0xa1, 0x38, 0x63, 0x0d, 0x8d, 0x6e, 0x06, 0x59, 0x5a, 0x94, 0x31}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x3c, 0x4f, 0x85, 0x56, 0xfe, 0x46, 0x3b, 0xe2, 0xdf, 0xa5, 0xf9, 0x58, 0xbe, 0x92, 0xd5, 0x9e, 0x95, 0x38, 0xa8, 0xb4, 0xfe, 0x9f, 0x9d, 0x23, 0x21, 0x24, 0xfb, 0x82, 0x00, 0xa3, 0x52, 0x0e}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xbc, 0x5e, 0x12, 0x35, 0x60, 0xb9, 0xe7, 0x0a, 0x53, 0x46, 0x22, 0x13, 0xe6, 0x51, 0x6b, 0xdc, 0x52, 0xf6, 0x40, 0xb5, 0xdc, 0xe1, 0x90, 0xfc, 0x74, 0x48, 0xe8, 0x50, 0x1d, 0xde, 0xed, 0x49}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + openstack_QEMUVTPM = M{4: {Expected: []byte{0x2a, 0xcd, 0x18, 0xa6, 0xc9, 0x81, 0x64, 0x7f, 0xee, 0x62, 0xb5, 0x27, 0x5e, 0x61, 0x7a, 0xfb, 0xf1, 0x9f, 0xfa, 0x75, 0xf6, 0x92, 0x2d, 0xad, 0xeb, 0x9d, 0x7f, 0x91, 0xcf, 0xdc, 0x2e, 0xdb}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x76, 0xcd, 0x8d, 0xdd, 0x32, 0xe6, 0x9e, 0xad, 0x27, 0x9f, 0x13, 0x64, 0x45, 0x4b, 0x0c, 0x87, 0x9b, 0xcb, 0xf3, 0xe7, 0xc0, 0x69, 0xf6, 0x8e, 0x3b, 0x89, 0x13, 0xb7, 0x3d, 0x5f, 0xe8, 0x40}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x3f, 0x0d, 0x69, 0xf3, 0x30, 0x2b, 0xc6, 0xf6, 0x72, 0xb4, 0xa9, 0x72, 0x2e, 0x44, 0xa5, 0x52, 0x9f, 0x56, 0x50, 0x60, 0x50, 0xc9, 0xf1, 0x0b, 0xed, 0x51, 0x2f, 0x53, 0xb1, 0x20, 0x39, 0x79}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} qemu_QEMUTDX M - qemu_QEMUVTPM = M{4: {Expected: []byte{0xc4, 0x80, 0xb5, 0x7f, 0xe8, 0x59, 0x52, 0xda, 0xc8, 0xa5, 0x29, 0x81, 0xa6, 0x82, 0x83, 0x06, 0xe0, 0xf6, 0x60, 0x7c, 0x74, 0x7d, 0xe0, 0x3a, 0x98, 0x38, 0x1e, 0x22, 0x32, 0xda, 0x6b, 0x79}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x90, 0x17, 0xc1, 0x0d, 0xcf, 0xe7, 0xfa, 0xd4, 0x29, 0x0d, 0x18, 0xc1, 0x93, 0x51, 0x6a, 0x95, 0x67, 0x6d, 0x17, 0xcc, 0xa7, 0x6c, 0x28, 0xa0, 0x9c, 0x7d, 0x45, 0xac, 0xe0, 0xf2, 0x34, 0x4a}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x39, 0xb9, 0xf0, 0x7b, 0xa3, 0x1b, 0x68, 0xc7, 0xb4, 0xa6, 0x45, 0x8e, 0xd5, 0xcc, 0x68, 0xf3, 0x1a, 0x52, 0xc9, 0x58, 0xd9, 0xab, 0x46, 0x3f, 0x1f, 0x91, 0xc4, 0x39, 0xb8, 0x60, 0x1f, 0xb7}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + qemu_QEMUVTPM = M{4: {Expected: []byte{0x2a, 0xef, 0x86, 0x30, 0x38, 0x6a, 0x80, 0x83, 0x8c, 0xc1, 0xb2, 0xe0, 0x4b, 0x76, 0xe9, 0xd7, 0x28, 0x38, 0x11, 0x6f, 0xf8, 0x71, 0xfa, 0xb9, 0x37, 0x75, 0x5e, 0x5d, 0x96, 0xdc, 0x73, 0xde}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x4e, 0x84, 0x19, 0xa5, 0x47, 0x1a, 0x8d, 0x16, 0x55, 0xcf, 0x69, 0xb8, 0x3a, 0x29, 0x53, 0x61, 0x1e, 0x14, 0x9b, 0xb8, 0x61, 0xe8, 0x09, 0x60, 0xf0, 0xc5, 0xec, 0xbe, 0x44, 0xa5, 0x0e, 0x4c}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x3d, 0x64, 0x12, 0xc0, 0x64, 0x69, 0xbb, 0x4c, 0x11, 0xdd, 0x3d, 0x82, 0x80, 0x10, 0xf3, 0x8f, 0x02, 0x20, 0x81, 0x46, 0x99, 0x89, 0x66, 0x5d, 0xe0, 0x2a, 0x5e, 0xfe, 0x41, 0xf9, 0xc4, 0xbf}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} ) diff --git a/internal/config/image_enterprise.go b/internal/config/image_enterprise.go index ead94e9ec..ea09b48f5 100644 --- a/internal/config/image_enterprise.go +++ b/internal/config/image_enterprise.go @@ -10,5 +10,5 @@ package config const ( // defaultImage is the default image to use. - defaultImage = "ref/main/stream/nightly/v2.21.0-pre.0.20250108084044-40e25c304602" + defaultImage = "ref/main/stream/nightly/v2.21.0-pre.0.20250114160719-0d2bedbca329" ) From d9ab8c76e000f93d58708d5697a4cc3cc8444dc4 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 16 Jan 2025 12:47:29 +0100 Subject: [PATCH 046/311] deps: update Terraform openstack to v3 (#3539) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .../openstack/.terraform.lock.hcl | 51 +++++++++++-------- terraform/infrastructure/openstack/main.tf | 2 +- .../openstack/modules/instance_group/main.tf | 2 +- .../openstack/modules/loadbalancer/main.tf | 2 +- 4 files changed, 33 insertions(+), 24 deletions(-) diff --git a/terraform/infrastructure/openstack/.terraform.lock.hcl b/terraform/infrastructure/openstack/.terraform.lock.hcl index 73faa0ec0..4c153bff3 100644 --- a/terraform/infrastructure/openstack/.terraform.lock.hcl +++ b/terraform/infrastructure/openstack/.terraform.lock.hcl @@ -62,27 +62,36 @@ provider "registry.terraform.io/stackitcloud/stackit" { } provider "registry.terraform.io/terraform-provider-openstack/openstack" { - version = "1.54.1" - constraints = "1.54.1" + version = "3.0.0" + constraints = "3.0.0" hashes = [ - "h1:Cqk18+r4bJF/sIusEK9lM0gc841RwsJ8AMhWyiU7lig=", - "h1:Cs9sP2V0MssWIQo+gur9soaNAAQleRaWdnvFP61s0Y0=", - "h1:JC0mScAPBs1MlHeEIPMZTQGhTA5aIG3iEuKMSPpR31E=", - "h1:jx2WdbttenKA2gWZDil6ffQT2CcY/TZ46pG0FlbNPuY=", - "h1:xt7LbO3lAXcDUjDxPHrQtgv4mO2GKvSOFMF1uPsK4vE=", - "zh:45ba84df17f94b15af7aab7007241e035dde8a5b46aeb761259d937058a80f71", - "zh:493b1deb7be9b600e5b1f5da2a9dfd3bce5df0c6d38090614dbe4ed05ade8441", - "zh:53551401fba8c1d5b27a08ee307552b84b1d0c1218f3717a4b766ec701b3e016", - "zh:53629bebb48ce5220f7601d776c2ac1485b6c860cb695f150fb716f5be8aa86d", - "zh:5a20f32cca767bef70b79bc8ecbd10fec3dc8696183e2d29631aa510947cb70d", - "zh:653693f630777e4aa3f410976a5169cf0f2a301516a820b3860de116054ae30a", - "zh:70f2d7bd5f5940f4fc3f023a01468890fbd9d704d0256bc65f7c64fb2cbcd4e4", - "zh:9cc22af51e5124dd5c2e0f1adefb1b08dcff3138aba9c92961cef36b1641d7aa", - "zh:9df45e893f215266159733dbc120809bc3d313188e121532dc6e2d10165e9899", - "zh:cb3e240992069cd6160f5b5cbbd50b70948f25bb337a75e780a0648461505d3f", - "zh:cb8343c0cf1bf5ca4d060826a8b68e3e5935b4a65974c76ac9c071c5a510e67e", - "zh:cc2060f93c66276dff6366b48e3a0e619874e3d939e0d2a39fc6ce10ca91232d", - "zh:d495b3051977018696113eded89c2cddfae0570f2adbdf7e9097c189ba41903e", - "zh:dfad1be943769780d5e948c06db957ce45f98b057a774964da0b82130c22f139", + "h1:/54cfw6MvK0twKdzLZiFetMGGrNH/hrQpl+6J43DLdg=", + "h1:5LLYtkab+Vdg8CE9pI1O8ufh3sTXqWlY3uKxko/y3X8=", + "h1:9/pRGncPl05UJquv3mXwSMU0NVa3ilwPtilcZcNgdys=", + "h1:GSkmvmVDHw1gBFYNyK66DSX9ZeKf7/hBdT3pVwffLgo=", + "h1:K/LldMyf/FKaGOWUPAdpkMvKqE7tH+cmxLLhHKHjseQ=", + "h1:We2BP3lS3D+pYgxcG0CBGdHynBcp+A9FlC4vqu9wPys=", + "h1:globq38P3+sh2sIh6K4paJ+H61xARF2YpNSqAP+D8IQ=", + "h1:hpyEkn7ekR2pDVBo4L1sHn3HL6sXN7uPOTRfenJzC8g=", + "h1:i7sj9flNOPDNraNq3QztV+cQ1JeqSQF30xQrY6Vi2Yk=", + "h1:lZJNaYCotfOoutyyDZCsv2gWZA2D2exwRsOJhgXz8Tk=", + "h1:rgeaQHDbsJGcofHhEniUSAKTTP5ZmvAa0tkholXJQZE=", + "h1:sxq+0vFl4SfV9dlut5liwaH4FejyNIf4ClAjRgowxv8=", + "h1:wUE5Zr2alVpKwcvgvAccpmM5Kz3qdq6Ey912A86WXRc=", + "h1:z0rIpZ4r6ubmh2seqARZyHVYamLfqV1wYEDVPu+eX8E=", + "zh:01718f229597b34ed430236a230a407dacd6289543556d33910e151462e8cb8a", + "zh:2424c5347d35fe0de778d1c40dbe8d9b1278309c4d65cce31709e6fcbec139df", + "zh:2a785f9efd6d8c979031803dd78411a583bc0d9a572ddf5fb9e539cbbfc1ce43", + "zh:8ab18c7eb1fd04b34be75fcecfc461888bd37ff017973f46745abeabd21b3fda", + "zh:98e805318292b58d9692bfe6d3d82e0db0f8044e588a38b239309221198aa92d", + "zh:9a99c9801f96dc69e7c76c5ddc0e2800b77a333becacae530d7a3acd18855347", + "zh:c5aa6690c094be211d2700d7ea44ffe937763e4dd566506c87eb99d6d8330b52", + "zh:d06fc3a148a49aab059a1f08ceadbfe1a5c82c7b80b960169987603dddaaaf58", + "zh:d079da24a9f2cc0d6fec9616e7ebe994245a3d98da629f012069c26d650edb05", + "zh:d1d2b63dba9045a4ff3869c65ddcaf2703d993254b58b2a0230d067f5c036de2", + "zh:d2b9d09c47e7eca08091da825cdf0982dc30089ee401888ce8704b79c7636e95", + "zh:dd6be78f98772bfc1ebf022fc36e5d68ef0f165f9e87476430d4e0dc3f1cc57f", + "zh:e7743c11dd0c83a5c1905f04ffd490b4471941218b4c841b760223fcf416affd", + "zh:f234aefac77f4e9a2b05877a00d322ee165009713d79a8d8e19039c6c6f7cf1b", ] } diff --git a/terraform/infrastructure/openstack/main.tf b/terraform/infrastructure/openstack/main.tf index ed650ccd1..b987a3ceb 100644 --- a/terraform/infrastructure/openstack/main.tf +++ b/terraform/infrastructure/openstack/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { openstack = { source = "terraform-provider-openstack/openstack" - version = "1.54.1" + version = "3.0.0" } stackit = { diff --git a/terraform/infrastructure/openstack/modules/instance_group/main.tf b/terraform/infrastructure/openstack/modules/instance_group/main.tf index b2feecb5f..5f027fdfa 100644 --- a/terraform/infrastructure/openstack/modules/instance_group/main.tf +++ b/terraform/infrastructure/openstack/modules/instance_group/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { openstack = { source = "terraform-provider-openstack/openstack" - version = "1.54.1" + version = "3.0.0" } } } diff --git a/terraform/infrastructure/openstack/modules/loadbalancer/main.tf b/terraform/infrastructure/openstack/modules/loadbalancer/main.tf index a10a43d8f..f86399612 100644 --- a/terraform/infrastructure/openstack/modules/loadbalancer/main.tf +++ b/terraform/infrastructure/openstack/modules/loadbalancer/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { openstack = { source = "terraform-provider-openstack/openstack" - version = "1.54.1" + version = "3.0.0" } } } From e8771e2dab37c5fc1cb4bf0b1f096c17f96466f1 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 16 Jan 2025 13:58:21 +0100 Subject: [PATCH 047/311] deps: update K8s constrained AWS versions (#3561) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- internal/versions/versions.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/internal/versions/versions.go b/internal/versions/versions.go index 95a9d81b0..f1ce7c7e1 100644 --- a/internal/versions/versions.go +++ b/internal/versions/versions.go @@ -249,7 +249,7 @@ var VersionConfigs = map[ValidK8sVersion]KubernetesVersion{ }, // CloudControllerManagerImageAWS is the CCM image used on AWS. // Check for newer versions at https://github.com/kubernetes/cloud-provider-aws/releases. - CloudControllerManagerImageAWS: "registry.k8s.io/provider-aws/cloud-controller-manager:v1.28.9@sha256:168905b591796fbd07cb35cd0e3f206fdb7efb30e325c9bf7fa70d1b48989f73", // renovate:container + CloudControllerManagerImageAWS: "registry.k8s.io/provider-aws/cloud-controller-manager:v1.28.10@sha256:582571fc487b4ba52fbafe4385daec5d97f57cdd7f3e901211eef6411b2a90a6", // renovate:container // CloudControllerManagerImageAzure is the CCM image used on Azure. // Check for newer versions at https://github.com/kubernetes-sigs/cloud-provider-azure/blob/master/README.md. CloudControllerManagerImageAzure: "mcr.microsoft.com/oss/kubernetes/azure-cloud-controller-manager:v1.28.13@sha256:8b853f4f54a09c363806714189435933a8575ac6dca27e991976bd685603113e", // renovate:container @@ -316,7 +316,7 @@ var VersionConfigs = map[ValidK8sVersion]KubernetesVersion{ }, // CloudControllerManagerImageAWS is the CCM image used on AWS. // Check for newer versions at https://github.com/kubernetes/cloud-provider-aws/releases. - CloudControllerManagerImageAWS: "registry.k8s.io/provider-aws/cloud-controller-manager:v1.29.6@sha256:8074b8828a33fb273833e8fd374dda6a0ab10335ae8e19684fbd61eeff7d3594", // renovate:container + CloudControllerManagerImageAWS: "registry.k8s.io/provider-aws/cloud-controller-manager:v1.29.7@sha256:5dfb0bf6bbfa99e0f572bb8b65fbb36576c4f256499e63371b550353702c0483", // renovate:container // CloudControllerManagerImageAzure is the CCM image used on Azure. // Check for newer versions at https://github.com/kubernetes-sigs/cloud-provider-azure/blob/master/README.md. CloudControllerManagerImageAzure: "mcr.microsoft.com/oss/kubernetes/azure-cloud-controller-manager:v1.29.11@sha256:2ecdca660c03b17110a4ee732230424ce0377c5b1756a4408666e40938ee976a", // renovate:container @@ -383,7 +383,7 @@ var VersionConfigs = map[ValidK8sVersion]KubernetesVersion{ }, // CloudControllerManagerImageAWS is the CCM image used on AWS. // Check for newer versions at https://github.com/kubernetes/cloud-provider-aws/releases. - CloudControllerManagerImageAWS: "registry.k8s.io/provider-aws/cloud-controller-manager:v1.30.3@sha256:30a1758dec30814178c787e2d50f46bb141e9f0bb2e16190ddd19df15f957874", // renovate:container + CloudControllerManagerImageAWS: "registry.k8s.io/provider-aws/cloud-controller-manager:v1.30.6@sha256:cfdfa9e436f27fccfd3f0961e9607088482b17e43e2e1990e02e925a833f0ef3", // renovate:container // CloudControllerManagerImageAzure is the CCM image used on Azure. // Check for newer versions at https://github.com/kubernetes-sigs/cloud-provider-azure/blob/master/README.md. CloudControllerManagerImageAzure: "mcr.microsoft.com/oss/kubernetes/azure-cloud-controller-manager:v1.30.7@sha256:03b2876f481507781a27b56a6e66c1928b7b93774e787e52a5239aefa41191e4", // renovate:container From f10376fd44c2b29d121df29f4492b3d76bca9fb3 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 16 Jan 2025 14:21:35 +0100 Subject: [PATCH 048/311] deps: update Terraform dependencies (#3580) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .../vpn/on-prem-terraform/.terraform.lock.hcl | 48 +++++++-------- dev-docs/howto/vpn/on-prem-terraform/main.tf | 2 +- .../azure-terraform/.terraform.lock.hcl | 48 +++++++-------- .../miniconstellation/azure-terraform/main.tf | 2 +- e2e/miniconstellation/.terraform.lock.hcl | 48 +++++++-------- e2e/miniconstellation/main.tf | 2 +- .../examples/full/aws/main.tf | 2 +- .../examples/full/azure/main.tf | 2 +- .../examples/full/gcp/main.tf | 2 +- .../examples/full/stackit/main.tf | 2 +- .../infrastructure/aws/.terraform.lock.hcl | 60 +++++++++---------- terraform/infrastructure/aws/main.tf | 2 +- .../aws/modules/instance_group/main.tf | 2 +- .../aws/modules/jump_host/main.tf | 2 +- .../aws/modules/load_balancer_target/main.tf | 2 +- .../aws/modules/public_private_subnet/main.tf | 2 +- .../infrastructure/azure/.terraform.lock.hcl | 48 +++++++-------- terraform/infrastructure/azure/main.tf | 2 +- .../modules/load_balancer_backend/main.tf | 2 +- .../azure/modules/scale_set/main.tf | 2 +- .../infrastructure/gcp/.terraform.lock.hcl | 48 +++++++-------- terraform/infrastructure/gcp/main.tf | 2 +- .../gcp/modules/instance_group/main.tf | 2 +- .../modules/internal_load_balancer/main.tf | 2 +- .../gcp/modules/jump_host/main.tf | 2 +- .../gcp/modules/loadbalancer/main.tf | 2 +- .../iam/aws/.terraform.lock.hcl | 60 +++++++++---------- terraform/infrastructure/iam/aws/main.tf | 2 +- .../iam/azure/.terraform.lock.hcl | 48 +++++++-------- terraform/infrastructure/iam/azure/main.tf | 2 +- .../iam/gcp/.terraform.lock.hcl | 48 +++++++-------- terraform/infrastructure/iam/gcp/main.tf | 2 +- .../openstack/.terraform.lock.hcl | 60 +++++++++---------- terraform/infrastructure/openstack/main.tf | 2 +- .../modules/stackit_loadbalancer/main.tf | 2 +- 35 files changed, 283 insertions(+), 283 deletions(-) diff --git a/dev-docs/howto/vpn/on-prem-terraform/.terraform.lock.hcl b/dev-docs/howto/vpn/on-prem-terraform/.terraform.lock.hcl index 0e0fc1026..e72958d1e 100644 --- a/dev-docs/howto/vpn/on-prem-terraform/.terraform.lock.hcl +++ b/dev-docs/howto/vpn/on-prem-terraform/.terraform.lock.hcl @@ -2,32 +2,32 @@ # Manual edits may be lost in future updates. provider "registry.terraform.io/hashicorp/azurerm" { - version = "4.12.0" - constraints = "4.12.0" + version = "4.15.0" + constraints = "4.15.0" hashes = [ - "h1:2tHjSJI1VW6sUL042kwkTfmOF3rAjZmYzpFucBq0EjQ=", - "h1:3TmHdOUKadLf5mJfYqm2OpsA/jiuqmEvCmR1EnaluF0=", - "h1:81V4UGJgVTzRQgIhYYvDJ1N+WCsQbmBgyCQ0HL/i/ks=", - "h1:9ZTFblaxLkCzg8jvRBk/J7QKV2hjxrwNhVlk96IUr6U=", - "h1:DjLdwL6J0qqUTx02BOMQxfOLHUqlYH+ewRcwFWTiHjY=", - "h1:EDeJjlZGOezaIQ+kiCN8GXRj049Lo42b93rEGlbOscM=", - "h1:U/tpa2Accjlzco7ohA1CEeL3fT/65yqiTf2ydCHhzjE=", - "h1:VJfcRLECBhANa1S5yHF3hJtOAzJuqe969XTK8LPbp6U=", - "h1:W6fcPNvsD7ce81J0H3Ib5FBlt5VLq5MlLXQIw+zooPc=", - "h1:tI7FQgfIFIER3wMbZN5mIX24B0mWVNb4r7hi7mUmAw8=", - "h1:wofqhlcgsUPYq6ZrN5hoUE34PDn7jmvK6YlQ0BobjyQ=", - "zh:127709945923a0034ec302c41494b82f0748707ecba15feba9db3af03e2b4709", - "zh:16ce5040984456f332598e1515cfde12b1bba78eae37b7a4b08ec332bbb55d6c", - "zh:1901cf598a048a1f135ed1c723de5e3c501aa7d1399490b7722c44cb61cb566e", - "zh:1b4a1fa65f32de535481ff38bd5869f44582b14b64bd00cc4902439cf2728a8a", - "zh:72ff727353151bd1a41ea1d6b2ecf24157918658ccd02d56acd62a7c4d330a7b", - "zh:78c0e4d7e1701fc5b3227d098807b1ed1c6d80c1ee443c0db89c64aeb317a39f", - "zh:a9964f7d9142cdd6f84673e1e936491f14bf1a44dd51fd55525c42fb05208c83", - "zh:ada1ffdebe10a44fcfa330618376fbd5d5daf7a9faad833496162686a98016d0", - "zh:d02d4d5a1fc4b0cb7975311bf37596456ace782ab195281a48338eb2a0f478c1", - "zh:e0fb626158b0cb7d8c5662a518cee8924b00a87312feff9db40b30e26539aa0f", + "h1:1Yfzvj0yCBg8ck1EgqFkhzfWJ1pGYzyjRxJ/9I+8Wwk=", + "h1:HXV4xhFHsM+41zSTE9yxilg/JddsqZYWPpcgGX+CL1U=", + "h1:XiRrUHid+1nVLY7zeDP20Q4hAVqncxv9C4s0YiWNM6w=", + "h1:Z+FoTCeYnxLl+WynS1BUAnxZlW1F1DgouBAgzvTkbwk=", + "h1:eKF94ScY2csUTysr7T4vMWvHb3A9hf0gUBzKXG0nrLA=", + "h1:gKI0mOpVDlUFdGRFBgetREvZJMrVLeBKpwJwXeUA5jA=", + "h1:gLnXyXqLq5bXrsmxoPGyoC7F2x7p+1A1ndNQNcLB0Wg=", + "h1:hK37RxP5UACnayk9AQKIzFSlpqDprrJ3jOy2EiNAQV4=", + "h1:iz0zF6b7fV6O88uKnYWvkAZqrTSYgZgsVRFBSkiIYEQ=", + "h1:l4IeiC5B5iXJq0yQCl6M6ktov6DDPXKm4ziitiMWvtk=", + "h1:xX8rqMLkR7ZRKRANBtQdQ8qO2n5I7WIy7EOyeXxHr2w=", + "zh:1e3f9f2e94d6ee07c74e137b22ad6199081ae0c2dde1f986bd09fa516a0a6d4b", + "zh:3e9dda2795c76f143d335fb2f78a600845ba9bdaf87d400a1a3131b533d641ef", + "zh:617cf5db531ba0f1648613f31c43481b6736bdec4b08a8980217a0e1d40173b6", + "zh:9d561393fc9e09ade829a97e0e5f58c8efd010f0a6cd513d41a0d3baf5e66d98", + "zh:a1932e5614a920cca5372733686bcd8b8d80f7c9dac7b570dd49916982853004", + "zh:b7e6eeb2a4998dcf74a2f005da23b99fd1cf89e45c77424a288a27f7c1b5c562", + "zh:baec97748db05ce4b24a6d91f8bad2f3db7414f68c41d78782c410a47b4a460a", + "zh:ce1eb226304a65a29c1e70af4c05d359168ef70ad297e37de54d7070619a50c1", + "zh:d04e582146310375c9bb7decfbed3acef537d70be77201de3ca235cfbc6f64f6", + "zh:df4098cd6b961d1cf0ea858f2964afadb264c8ee3ccf59215f620c421573ffa0", + "zh:ec1837c5a6b4b6c77c6587a98cc0978dbfeb6be0fb7f1c9618f1e66213d81e6b", "zh:f569b65999264a9416862bca5cd2a6177d94ccb0424f3a4ef424428912b9cb3c", - "zh:fa5f683582bc5b12587aa7a78152774f2eaae9cfac0fb61b6de81284abbbea5b", ] } diff --git a/dev-docs/howto/vpn/on-prem-terraform/main.tf b/dev-docs/howto/vpn/on-prem-terraform/main.tf index b6a021c0e..24cddff10 100644 --- a/dev-docs/howto/vpn/on-prem-terraform/main.tf +++ b/dev-docs/howto/vpn/on-prem-terraform/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { azurerm = { source = "hashicorp/azurerm" - version = "4.12.0" + version = "4.15.0" } random = { source = "hashicorp/random" diff --git a/dev-docs/miniconstellation/azure-terraform/.terraform.lock.hcl b/dev-docs/miniconstellation/azure-terraform/.terraform.lock.hcl index d22432c94..4416d280b 100644 --- a/dev-docs/miniconstellation/azure-terraform/.terraform.lock.hcl +++ b/dev-docs/miniconstellation/azure-terraform/.terraform.lock.hcl @@ -2,32 +2,32 @@ # Manual edits may be lost in future updates. provider "registry.terraform.io/hashicorp/azurerm" { - version = "4.12.0" - constraints = "4.12.0" + version = "4.15.0" + constraints = "4.15.0" hashes = [ - "h1:2tHjSJI1VW6sUL042kwkTfmOF3rAjZmYzpFucBq0EjQ=", - "h1:3TmHdOUKadLf5mJfYqm2OpsA/jiuqmEvCmR1EnaluF0=", - "h1:81V4UGJgVTzRQgIhYYvDJ1N+WCsQbmBgyCQ0HL/i/ks=", - "h1:9ZTFblaxLkCzg8jvRBk/J7QKV2hjxrwNhVlk96IUr6U=", - "h1:DjLdwL6J0qqUTx02BOMQxfOLHUqlYH+ewRcwFWTiHjY=", - "h1:EDeJjlZGOezaIQ+kiCN8GXRj049Lo42b93rEGlbOscM=", - "h1:U/tpa2Accjlzco7ohA1CEeL3fT/65yqiTf2ydCHhzjE=", - "h1:VJfcRLECBhANa1S5yHF3hJtOAzJuqe969XTK8LPbp6U=", - "h1:W6fcPNvsD7ce81J0H3Ib5FBlt5VLq5MlLXQIw+zooPc=", - "h1:tI7FQgfIFIER3wMbZN5mIX24B0mWVNb4r7hi7mUmAw8=", - "h1:wofqhlcgsUPYq6ZrN5hoUE34PDn7jmvK6YlQ0BobjyQ=", - "zh:127709945923a0034ec302c41494b82f0748707ecba15feba9db3af03e2b4709", - "zh:16ce5040984456f332598e1515cfde12b1bba78eae37b7a4b08ec332bbb55d6c", - "zh:1901cf598a048a1f135ed1c723de5e3c501aa7d1399490b7722c44cb61cb566e", - "zh:1b4a1fa65f32de535481ff38bd5869f44582b14b64bd00cc4902439cf2728a8a", - "zh:72ff727353151bd1a41ea1d6b2ecf24157918658ccd02d56acd62a7c4d330a7b", - "zh:78c0e4d7e1701fc5b3227d098807b1ed1c6d80c1ee443c0db89c64aeb317a39f", - "zh:a9964f7d9142cdd6f84673e1e936491f14bf1a44dd51fd55525c42fb05208c83", - "zh:ada1ffdebe10a44fcfa330618376fbd5d5daf7a9faad833496162686a98016d0", - "zh:d02d4d5a1fc4b0cb7975311bf37596456ace782ab195281a48338eb2a0f478c1", - "zh:e0fb626158b0cb7d8c5662a518cee8924b00a87312feff9db40b30e26539aa0f", + "h1:1Yfzvj0yCBg8ck1EgqFkhzfWJ1pGYzyjRxJ/9I+8Wwk=", + "h1:HXV4xhFHsM+41zSTE9yxilg/JddsqZYWPpcgGX+CL1U=", + "h1:XiRrUHid+1nVLY7zeDP20Q4hAVqncxv9C4s0YiWNM6w=", + "h1:Z+FoTCeYnxLl+WynS1BUAnxZlW1F1DgouBAgzvTkbwk=", + "h1:eKF94ScY2csUTysr7T4vMWvHb3A9hf0gUBzKXG0nrLA=", + "h1:gKI0mOpVDlUFdGRFBgetREvZJMrVLeBKpwJwXeUA5jA=", + "h1:gLnXyXqLq5bXrsmxoPGyoC7F2x7p+1A1ndNQNcLB0Wg=", + "h1:hK37RxP5UACnayk9AQKIzFSlpqDprrJ3jOy2EiNAQV4=", + "h1:iz0zF6b7fV6O88uKnYWvkAZqrTSYgZgsVRFBSkiIYEQ=", + "h1:l4IeiC5B5iXJq0yQCl6M6ktov6DDPXKm4ziitiMWvtk=", + "h1:xX8rqMLkR7ZRKRANBtQdQ8qO2n5I7WIy7EOyeXxHr2w=", + "zh:1e3f9f2e94d6ee07c74e137b22ad6199081ae0c2dde1f986bd09fa516a0a6d4b", + "zh:3e9dda2795c76f143d335fb2f78a600845ba9bdaf87d400a1a3131b533d641ef", + "zh:617cf5db531ba0f1648613f31c43481b6736bdec4b08a8980217a0e1d40173b6", + "zh:9d561393fc9e09ade829a97e0e5f58c8efd010f0a6cd513d41a0d3baf5e66d98", + "zh:a1932e5614a920cca5372733686bcd8b8d80f7c9dac7b570dd49916982853004", + "zh:b7e6eeb2a4998dcf74a2f005da23b99fd1cf89e45c77424a288a27f7c1b5c562", + "zh:baec97748db05ce4b24a6d91f8bad2f3db7414f68c41d78782c410a47b4a460a", + "zh:ce1eb226304a65a29c1e70af4c05d359168ef70ad297e37de54d7070619a50c1", + "zh:d04e582146310375c9bb7decfbed3acef537d70be77201de3ca235cfbc6f64f6", + "zh:df4098cd6b961d1cf0ea858f2964afadb264c8ee3ccf59215f620c421573ffa0", + "zh:ec1837c5a6b4b6c77c6587a98cc0978dbfeb6be0fb7f1c9618f1e66213d81e6b", "zh:f569b65999264a9416862bca5cd2a6177d94ccb0424f3a4ef424428912b9cb3c", - "zh:fa5f683582bc5b12587aa7a78152774f2eaae9cfac0fb61b6de81284abbbea5b", ] } diff --git a/dev-docs/miniconstellation/azure-terraform/main.tf b/dev-docs/miniconstellation/azure-terraform/main.tf index 8e0c2ac1d..88eff4ce7 100644 --- a/dev-docs/miniconstellation/azure-terraform/main.tf +++ b/dev-docs/miniconstellation/azure-terraform/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { azurerm = { source = "hashicorp/azurerm" - version = "4.12.0" + version = "4.15.0" } random = { source = "hashicorp/random" diff --git a/e2e/miniconstellation/.terraform.lock.hcl b/e2e/miniconstellation/.terraform.lock.hcl index d988c947c..799ea40d4 100644 --- a/e2e/miniconstellation/.terraform.lock.hcl +++ b/e2e/miniconstellation/.terraform.lock.hcl @@ -2,32 +2,32 @@ # Manual edits may be lost in future updates. provider "registry.terraform.io/hashicorp/azurerm" { - version = "4.12.0" - constraints = "4.12.0" + version = "4.15.0" + constraints = "4.15.0" hashes = [ - "h1:2tHjSJI1VW6sUL042kwkTfmOF3rAjZmYzpFucBq0EjQ=", - "h1:3TmHdOUKadLf5mJfYqm2OpsA/jiuqmEvCmR1EnaluF0=", - "h1:81V4UGJgVTzRQgIhYYvDJ1N+WCsQbmBgyCQ0HL/i/ks=", - "h1:9ZTFblaxLkCzg8jvRBk/J7QKV2hjxrwNhVlk96IUr6U=", - "h1:DjLdwL6J0qqUTx02BOMQxfOLHUqlYH+ewRcwFWTiHjY=", - "h1:EDeJjlZGOezaIQ+kiCN8GXRj049Lo42b93rEGlbOscM=", - "h1:U/tpa2Accjlzco7ohA1CEeL3fT/65yqiTf2ydCHhzjE=", - "h1:VJfcRLECBhANa1S5yHF3hJtOAzJuqe969XTK8LPbp6U=", - "h1:W6fcPNvsD7ce81J0H3Ib5FBlt5VLq5MlLXQIw+zooPc=", - "h1:tI7FQgfIFIER3wMbZN5mIX24B0mWVNb4r7hi7mUmAw8=", - "h1:wofqhlcgsUPYq6ZrN5hoUE34PDn7jmvK6YlQ0BobjyQ=", - "zh:127709945923a0034ec302c41494b82f0748707ecba15feba9db3af03e2b4709", - "zh:16ce5040984456f332598e1515cfde12b1bba78eae37b7a4b08ec332bbb55d6c", - "zh:1901cf598a048a1f135ed1c723de5e3c501aa7d1399490b7722c44cb61cb566e", - "zh:1b4a1fa65f32de535481ff38bd5869f44582b14b64bd00cc4902439cf2728a8a", - "zh:72ff727353151bd1a41ea1d6b2ecf24157918658ccd02d56acd62a7c4d330a7b", - "zh:78c0e4d7e1701fc5b3227d098807b1ed1c6d80c1ee443c0db89c64aeb317a39f", - "zh:a9964f7d9142cdd6f84673e1e936491f14bf1a44dd51fd55525c42fb05208c83", - "zh:ada1ffdebe10a44fcfa330618376fbd5d5daf7a9faad833496162686a98016d0", - "zh:d02d4d5a1fc4b0cb7975311bf37596456ace782ab195281a48338eb2a0f478c1", - "zh:e0fb626158b0cb7d8c5662a518cee8924b00a87312feff9db40b30e26539aa0f", + "h1:1Yfzvj0yCBg8ck1EgqFkhzfWJ1pGYzyjRxJ/9I+8Wwk=", + "h1:HXV4xhFHsM+41zSTE9yxilg/JddsqZYWPpcgGX+CL1U=", + "h1:XiRrUHid+1nVLY7zeDP20Q4hAVqncxv9C4s0YiWNM6w=", + "h1:Z+FoTCeYnxLl+WynS1BUAnxZlW1F1DgouBAgzvTkbwk=", + "h1:eKF94ScY2csUTysr7T4vMWvHb3A9hf0gUBzKXG0nrLA=", + "h1:gKI0mOpVDlUFdGRFBgetREvZJMrVLeBKpwJwXeUA5jA=", + "h1:gLnXyXqLq5bXrsmxoPGyoC7F2x7p+1A1ndNQNcLB0Wg=", + "h1:hK37RxP5UACnayk9AQKIzFSlpqDprrJ3jOy2EiNAQV4=", + "h1:iz0zF6b7fV6O88uKnYWvkAZqrTSYgZgsVRFBSkiIYEQ=", + "h1:l4IeiC5B5iXJq0yQCl6M6ktov6DDPXKm4ziitiMWvtk=", + "h1:xX8rqMLkR7ZRKRANBtQdQ8qO2n5I7WIy7EOyeXxHr2w=", + "zh:1e3f9f2e94d6ee07c74e137b22ad6199081ae0c2dde1f986bd09fa516a0a6d4b", + "zh:3e9dda2795c76f143d335fb2f78a600845ba9bdaf87d400a1a3131b533d641ef", + "zh:617cf5db531ba0f1648613f31c43481b6736bdec4b08a8980217a0e1d40173b6", + "zh:9d561393fc9e09ade829a97e0e5f58c8efd010f0a6cd513d41a0d3baf5e66d98", + "zh:a1932e5614a920cca5372733686bcd8b8d80f7c9dac7b570dd49916982853004", + "zh:b7e6eeb2a4998dcf74a2f005da23b99fd1cf89e45c77424a288a27f7c1b5c562", + "zh:baec97748db05ce4b24a6d91f8bad2f3db7414f68c41d78782c410a47b4a460a", + "zh:ce1eb226304a65a29c1e70af4c05d359168ef70ad297e37de54d7070619a50c1", + "zh:d04e582146310375c9bb7decfbed3acef537d70be77201de3ca235cfbc6f64f6", + "zh:df4098cd6b961d1cf0ea858f2964afadb264c8ee3ccf59215f620c421573ffa0", + "zh:ec1837c5a6b4b6c77c6587a98cc0978dbfeb6be0fb7f1c9618f1e66213d81e6b", "zh:f569b65999264a9416862bca5cd2a6177d94ccb0424f3a4ef424428912b9cb3c", - "zh:fa5f683582bc5b12587aa7a78152774f2eaae9cfac0fb61b6de81284abbbea5b", ] } diff --git a/e2e/miniconstellation/main.tf b/e2e/miniconstellation/main.tf index 838008fa5..22df60771 100644 --- a/e2e/miniconstellation/main.tf +++ b/e2e/miniconstellation/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { azurerm = { source = "hashicorp/azurerm" - version = "4.12.0" + version = "4.15.0" } tls = { source = "hashicorp/tls" diff --git a/terraform-provider-constellation/examples/full/aws/main.tf b/terraform-provider-constellation/examples/full/aws/main.tf index 1229d810e..085dbb79f 100644 --- a/terraform-provider-constellation/examples/full/aws/main.tf +++ b/terraform-provider-constellation/examples/full/aws/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { constellation = { source = "edgelesssys/constellation" - version = "2.19.3" // replace with the version you want to use + version = "2.20.0" // replace with the version you want to use } random = { source = "hashicorp/random" diff --git a/terraform-provider-constellation/examples/full/azure/main.tf b/terraform-provider-constellation/examples/full/azure/main.tf index eba3ab291..e327d98f0 100644 --- a/terraform-provider-constellation/examples/full/azure/main.tf +++ b/terraform-provider-constellation/examples/full/azure/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { constellation = { source = "edgelesssys/constellation" - version = "2.19.3" // replace with the version you want to use + version = "2.20.0" // replace with the version you want to use } random = { source = "hashicorp/random" diff --git a/terraform-provider-constellation/examples/full/gcp/main.tf b/terraform-provider-constellation/examples/full/gcp/main.tf index b93f6eed8..aa05d9b0e 100644 --- a/terraform-provider-constellation/examples/full/gcp/main.tf +++ b/terraform-provider-constellation/examples/full/gcp/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { constellation = { source = "edgelesssys/constellation" - version = "2.19.3" // replace with the version you want to use + version = "2.20.0" // replace with the version you want to use } random = { source = "hashicorp/random" diff --git a/terraform-provider-constellation/examples/full/stackit/main.tf b/terraform-provider-constellation/examples/full/stackit/main.tf index 500a8db5c..c27554bfc 100644 --- a/terraform-provider-constellation/examples/full/stackit/main.tf +++ b/terraform-provider-constellation/examples/full/stackit/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { constellation = { source = "edgelesssys/constellation" - version = "2.19.3" // replace with the version you want to use + version = "2.20.0" // replace with the version you want to use } random = { source = "hashicorp/random" diff --git a/terraform/infrastructure/aws/.terraform.lock.hcl b/terraform/infrastructure/aws/.terraform.lock.hcl index ec2b3204e..1e826be2d 100644 --- a/terraform/infrastructure/aws/.terraform.lock.hcl +++ b/terraform/infrastructure/aws/.terraform.lock.hcl @@ -2,38 +2,38 @@ # Manual edits may be lost in future updates. provider "registry.terraform.io/hashicorp/aws" { - version = "5.78.0" - constraints = "5.78.0" + version = "5.83.1" + constraints = "5.83.1" hashes = [ - "h1:/EKXECKi3XzLR0SwaEyQucvsQx2TdyIF2DYabr9DVqM=", - "h1:15pt02WPsTWUsLi37o791kSplIqEf2Ihl+zFdBOpKnY=", - "h1:3TLJUm+6523EtS8W8G4f22e0bp2MpZ72f9qptc31WD8=", - "h1:EGEcXHT4WdxUTRSPzjevCNXStQ+u2eeQB4EmOSp2nPc=", - "h1:GwVGbd+IHAq+qwGs2QKuxazKzrJhSWVicYyGBPftuG0=", - "h1:OUmta/bL/0S6g4K/Mn1LBkEnMWNCq4dLsfYrdrllcEo=", - "h1:cxjNJTMeoxw0csix1iWp4m2esNUOuFfVbIAacUGjYSQ=", - "h1:kB3dnSsazjI63RZdz2gldCkDFw8KI0IJd6RbhqxrE6I=", - "h1:o7jz+dFixEcwjfdubken5ldmDJm1tkvM2adPtNDei3g=", - "h1:vIzenE93tNUfA/hFcwB6wouenp59n9g2J6FNPfJAOpg=", - "h1:zA5P+U4hv2P52fwfLNjAIA2jS9xOn4xCmrXrOMKH8gs=", - "h1:zKNuYrqjerfmrU0bgKQtubN/NiMLRXP4HTThTm1WfJE=", - "h1:zYvhhpw56OF8ClJezKBdKV0+6elVM3FYEAjaNWAinjk=", - "h1:zel31ZX4jCQoeQXydOfcm4ncD9aj+437F9Cr1eoCumM=", - "zh:0ae7d41b96441d0cf7ce2e1337657bdb2e1e5c9f1c2227b0642e1dcec2f9dfba", - "zh:21f8f1edf477681ea3b095c02cad6b8e85262e45015de58e84e0c7b2bfe9a1f6", - "zh:2bdc335e341bf98445255549ae93d66cfb9bca706e62b949da98fe467c182cad", - "zh:2fe4096e260367a225a9faf4a424d62b87e5498f12cb43bdb6f4e713d11b82c3", - "zh:3c63bb7a7925d65118d17461f4691a22dbb55ea39a7404e4d71f6ccca8765f8b", - "zh:6609a28a1c638a1901d8007b5386868ccfd313b4df2e98b35d9fdef436974e3b", - "zh:7ae3aef43bc4b365824cca4659cf92459d766800656e354bdbf83feabab835e8", + "h1:8KI8wFWW2iPYVMyNGI75bxgmwy8MjZk4G6Quut5H7x8=", + "h1:DsW/pXMvg0Dhe+SaKRkAK1Knfr8bVsqENa7sLLyOBtI=", + "h1:L3bkBWmhaqNTvFylxJbAgnJIix30n1fFrvfSS/JkNFg=", + "h1:OGnYC6C0PsiB2K0BcjaCzEFkZhKQ9rq2sEP8d1djH08=", + "h1:OlxnMPwNjMbASLyyPmIsCwdEslb3Q2zzvBgxQVJalc8=", + "h1:Rz48OWTGwGhwY9yHPTgfmnKP1a9R2iUWyKsOBkvabmU=", + "h1:UfCtsy1RE6chDN/qzWdcDg8g8QENo74xqaUS3oPbnsQ=", + "h1:YEZLk+HoD/Oz9VC0M7UoMTAFEvoqAwfXLgPc+9ndpVU=", + "h1:Yy3K7R7881H72rQDzG6qjZVkrWA6DGJzfE21TionY7w=", + "h1:g1YrU/FiK0ty5J+WVYJIKHSaSU0g9VboXwstUxD0JzU=", + "h1:huw6LBQrOHtsv4Wqu99jgozvl47Qsd5XZDgxAHj86Ds=", + "h1:jEKbxB3GtA9ak4XXkaIXTMbnu/SDiiqNKDeF/78XrHc=", + "h1:mmZDuh7DyVJ+1UOAaJZ3gh42YASLIFkbxy7sdPiui/8=", + "h1:vInFMDq9oMs53/i+7IU8hZgmTLhFfng8L8kbuALZxSI=", + "zh:0313253c78f195973752c4d1f62bfdd345a9c99c1bc7a612a8c1f1e27d51e49e", + "zh:108523f3e9ebc93f7d900c51681f6edbd3f3a56b8a62b0afc31d8214892f91e0", + "zh:175b9bf2a00bea6ac1c73796ad77b0e00dcbbde166235017c49377d7763861d8", + "zh:1c8bf55b8548bbad683cd6d7bdb03e8840a00b2422dc1529ffb9892820657130", + "zh:22338f09bae62d5ff646de00182417f992548da534fee7d98c5d0136d4bd5d7a", + "zh:92de1107ec43de60612be5f6255616f16a9cf82d88df1af1c0471b81f3a82c16", "zh:9b12af85486a96aedd8d7984b0ff811a4b42e3d88dad1a3fb4c0b580d04fa425", - "zh:c314efe454adc6ca483261c6906e64315aeb9db0c0332818714e9b81e07df0f0", - "zh:cd3e30396b554bbc1d260252db8a0f344065d619038fe60ea870689cd32c6aa9", - "zh:d1ba48fd9d8a1cb1daa927fb9e8bb708b857f2792d796e110460c6fdcd896a47", - "zh:d31c8abe75cb9cdc1c59ad9d356a1c3ae1ba8cd29ac15eb7e01b6cd01221ab04", - "zh:dc27c5c2116b4d9b404753f73bccaa635bce21f3bfb4bb7bc8e63225c36c98fe", - "zh:de491f0d05408378413187475c815d8cb2ac6bfa63d0b42a30ad5ee492e51c07", - "zh:eb44b45a40f80a309dd5b0eb7d7fcb2cbfe588fe2f18b173ef5851346898a662", + "zh:9c7bfb7afea330e6d90e1466125a8cba3db1ed4043c5da52f737459c89290a6e", + "zh:ba59b374d477e5610674b70f5abfe0408e8f809390347372751384151440d3d0", + "zh:bd1c433966002f586d63cb1e3e16326991f238bc6beeb2352be36ec651917b0b", + "zh:ca2b4d1d02651c15261fffa4b142e45def9a22c6069353f0f663fd2046e268f8", + "zh:d8ed98c748f7a3f1a72277cfee9afe346aca39ab319d17402277852551d8f14a", + "zh:ed3d8bc89de5f35f3c5f4802ff7c749fda2e2be267f9af4a850694f099960a72", + "zh:f698732a4391c3f4d7079b4aaa52389da2a460cac5eed438ed688f147d603689", + "zh:f9f51b17f2978394954e9f6ab9ef293b8e11f1443117294ccf87f7f8212b3439", ] } diff --git a/terraform/infrastructure/aws/main.tf b/terraform/infrastructure/aws/main.tf index 65dff58e1..feb95745d 100644 --- a/terraform/infrastructure/aws/main.tf +++ b/terraform/infrastructure/aws/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { aws = { source = "hashicorp/aws" - version = "5.78.0" + version = "5.83.1" } random = { source = "hashicorp/random" diff --git a/terraform/infrastructure/aws/modules/instance_group/main.tf b/terraform/infrastructure/aws/modules/instance_group/main.tf index 187917e45..917900cfd 100644 --- a/terraform/infrastructure/aws/modules/instance_group/main.tf +++ b/terraform/infrastructure/aws/modules/instance_group/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { aws = { source = "hashicorp/aws" - version = "5.78.0" + version = "5.83.1" } random = { source = "hashicorp/random" diff --git a/terraform/infrastructure/aws/modules/jump_host/main.tf b/terraform/infrastructure/aws/modules/jump_host/main.tf index d25115e89..fff09c1a4 100644 --- a/terraform/infrastructure/aws/modules/jump_host/main.tf +++ b/terraform/infrastructure/aws/modules/jump_host/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { aws = { source = "hashicorp/aws" - version = "5.78.0" + version = "5.83.1" } } } diff --git a/terraform/infrastructure/aws/modules/load_balancer_target/main.tf b/terraform/infrastructure/aws/modules/load_balancer_target/main.tf index 993e6a9ef..4173d5a63 100644 --- a/terraform/infrastructure/aws/modules/load_balancer_target/main.tf +++ b/terraform/infrastructure/aws/modules/load_balancer_target/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { aws = { source = "hashicorp/aws" - version = "5.78.0" + version = "5.83.1" } } } diff --git a/terraform/infrastructure/aws/modules/public_private_subnet/main.tf b/terraform/infrastructure/aws/modules/public_private_subnet/main.tf index d34dcc9f3..9333a5d91 100644 --- a/terraform/infrastructure/aws/modules/public_private_subnet/main.tf +++ b/terraform/infrastructure/aws/modules/public_private_subnet/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { aws = { source = "hashicorp/aws" - version = "5.78.0" + version = "5.83.1" } } } diff --git a/terraform/infrastructure/azure/.terraform.lock.hcl b/terraform/infrastructure/azure/.terraform.lock.hcl index 0e0fc1026..e72958d1e 100644 --- a/terraform/infrastructure/azure/.terraform.lock.hcl +++ b/terraform/infrastructure/azure/.terraform.lock.hcl @@ -2,32 +2,32 @@ # Manual edits may be lost in future updates. provider "registry.terraform.io/hashicorp/azurerm" { - version = "4.12.0" - constraints = "4.12.0" + version = "4.15.0" + constraints = "4.15.0" hashes = [ - "h1:2tHjSJI1VW6sUL042kwkTfmOF3rAjZmYzpFucBq0EjQ=", - "h1:3TmHdOUKadLf5mJfYqm2OpsA/jiuqmEvCmR1EnaluF0=", - "h1:81V4UGJgVTzRQgIhYYvDJ1N+WCsQbmBgyCQ0HL/i/ks=", - "h1:9ZTFblaxLkCzg8jvRBk/J7QKV2hjxrwNhVlk96IUr6U=", - "h1:DjLdwL6J0qqUTx02BOMQxfOLHUqlYH+ewRcwFWTiHjY=", - "h1:EDeJjlZGOezaIQ+kiCN8GXRj049Lo42b93rEGlbOscM=", - "h1:U/tpa2Accjlzco7ohA1CEeL3fT/65yqiTf2ydCHhzjE=", - "h1:VJfcRLECBhANa1S5yHF3hJtOAzJuqe969XTK8LPbp6U=", - "h1:W6fcPNvsD7ce81J0H3Ib5FBlt5VLq5MlLXQIw+zooPc=", - "h1:tI7FQgfIFIER3wMbZN5mIX24B0mWVNb4r7hi7mUmAw8=", - "h1:wofqhlcgsUPYq6ZrN5hoUE34PDn7jmvK6YlQ0BobjyQ=", - "zh:127709945923a0034ec302c41494b82f0748707ecba15feba9db3af03e2b4709", - "zh:16ce5040984456f332598e1515cfde12b1bba78eae37b7a4b08ec332bbb55d6c", - "zh:1901cf598a048a1f135ed1c723de5e3c501aa7d1399490b7722c44cb61cb566e", - "zh:1b4a1fa65f32de535481ff38bd5869f44582b14b64bd00cc4902439cf2728a8a", - "zh:72ff727353151bd1a41ea1d6b2ecf24157918658ccd02d56acd62a7c4d330a7b", - "zh:78c0e4d7e1701fc5b3227d098807b1ed1c6d80c1ee443c0db89c64aeb317a39f", - "zh:a9964f7d9142cdd6f84673e1e936491f14bf1a44dd51fd55525c42fb05208c83", - "zh:ada1ffdebe10a44fcfa330618376fbd5d5daf7a9faad833496162686a98016d0", - "zh:d02d4d5a1fc4b0cb7975311bf37596456ace782ab195281a48338eb2a0f478c1", - "zh:e0fb626158b0cb7d8c5662a518cee8924b00a87312feff9db40b30e26539aa0f", + "h1:1Yfzvj0yCBg8ck1EgqFkhzfWJ1pGYzyjRxJ/9I+8Wwk=", + "h1:HXV4xhFHsM+41zSTE9yxilg/JddsqZYWPpcgGX+CL1U=", + "h1:XiRrUHid+1nVLY7zeDP20Q4hAVqncxv9C4s0YiWNM6w=", + "h1:Z+FoTCeYnxLl+WynS1BUAnxZlW1F1DgouBAgzvTkbwk=", + "h1:eKF94ScY2csUTysr7T4vMWvHb3A9hf0gUBzKXG0nrLA=", + "h1:gKI0mOpVDlUFdGRFBgetREvZJMrVLeBKpwJwXeUA5jA=", + "h1:gLnXyXqLq5bXrsmxoPGyoC7F2x7p+1A1ndNQNcLB0Wg=", + "h1:hK37RxP5UACnayk9AQKIzFSlpqDprrJ3jOy2EiNAQV4=", + "h1:iz0zF6b7fV6O88uKnYWvkAZqrTSYgZgsVRFBSkiIYEQ=", + "h1:l4IeiC5B5iXJq0yQCl6M6ktov6DDPXKm4ziitiMWvtk=", + "h1:xX8rqMLkR7ZRKRANBtQdQ8qO2n5I7WIy7EOyeXxHr2w=", + "zh:1e3f9f2e94d6ee07c74e137b22ad6199081ae0c2dde1f986bd09fa516a0a6d4b", + "zh:3e9dda2795c76f143d335fb2f78a600845ba9bdaf87d400a1a3131b533d641ef", + "zh:617cf5db531ba0f1648613f31c43481b6736bdec4b08a8980217a0e1d40173b6", + "zh:9d561393fc9e09ade829a97e0e5f58c8efd010f0a6cd513d41a0d3baf5e66d98", + "zh:a1932e5614a920cca5372733686bcd8b8d80f7c9dac7b570dd49916982853004", + "zh:b7e6eeb2a4998dcf74a2f005da23b99fd1cf89e45c77424a288a27f7c1b5c562", + "zh:baec97748db05ce4b24a6d91f8bad2f3db7414f68c41d78782c410a47b4a460a", + "zh:ce1eb226304a65a29c1e70af4c05d359168ef70ad297e37de54d7070619a50c1", + "zh:d04e582146310375c9bb7decfbed3acef537d70be77201de3ca235cfbc6f64f6", + "zh:df4098cd6b961d1cf0ea858f2964afadb264c8ee3ccf59215f620c421573ffa0", + "zh:ec1837c5a6b4b6c77c6587a98cc0978dbfeb6be0fb7f1c9618f1e66213d81e6b", "zh:f569b65999264a9416862bca5cd2a6177d94ccb0424f3a4ef424428912b9cb3c", - "zh:fa5f683582bc5b12587aa7a78152774f2eaae9cfac0fb61b6de81284abbbea5b", ] } diff --git a/terraform/infrastructure/azure/main.tf b/terraform/infrastructure/azure/main.tf index c6383d82b..a58825d90 100644 --- a/terraform/infrastructure/azure/main.tf +++ b/terraform/infrastructure/azure/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { azurerm = { source = "hashicorp/azurerm" - version = "4.12.0" + version = "4.15.0" } random = { source = "hashicorp/random" diff --git a/terraform/infrastructure/azure/modules/load_balancer_backend/main.tf b/terraform/infrastructure/azure/modules/load_balancer_backend/main.tf index 52d5d4fd1..3a90565b3 100644 --- a/terraform/infrastructure/azure/modules/load_balancer_backend/main.tf +++ b/terraform/infrastructure/azure/modules/load_balancer_backend/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { azurerm = { source = "hashicorp/azurerm" - version = "4.12.0" + version = "4.15.0" } } } diff --git a/terraform/infrastructure/azure/modules/scale_set/main.tf b/terraform/infrastructure/azure/modules/scale_set/main.tf index fd5ca1876..2d0979cc6 100644 --- a/terraform/infrastructure/azure/modules/scale_set/main.tf +++ b/terraform/infrastructure/azure/modules/scale_set/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { azurerm = { source = "hashicorp/azurerm" - version = "4.12.0" + version = "4.15.0" } random = { source = "hashicorp/random" diff --git a/terraform/infrastructure/gcp/.terraform.lock.hcl b/terraform/infrastructure/gcp/.terraform.lock.hcl index 47ba3a7c5..76d7ca129 100644 --- a/terraform/infrastructure/gcp/.terraform.lock.hcl +++ b/terraform/infrastructure/gcp/.terraform.lock.hcl @@ -2,32 +2,32 @@ # Manual edits may be lost in future updates. provider "registry.terraform.io/hashicorp/google" { - version = "6.12.0" - constraints = "6.12.0" + version = "6.16.0" + constraints = "6.16.0" hashes = [ - "h1:D6eBvo6Qs3OXXMwB2vFBhKuiL/TMNu5bBtjznSPbBH0=", - "h1:JuVRL27b9/g/FdblPwGZEacECBZRIuHZ+nzRgpIDduo=", - "h1:MgQU4YOpoJQngarNuPfvNKF4r7YyqYii7DBOiiaKBEw=", - "h1:OQp1STR+bhXfBQKs02krIJuELZ2c4GmGhlBd4bSq128=", - "h1:OvpG2uAeuIc19TFOQrr+s7Ded6sVBripLWLIzeWn90U=", - "h1:PmkvZRF8v7SszpUP4l9gXfhlVwq3z+HrTE39qusLrBw=", - "h1:WZulOZ1tthsLm/w7t7yy3C7JZ8QIXfO+QMEEW1pjrAY=", - "h1:Yez7eMayTGGmX/LCIDD3Xgnktpv/701g2zotNmg6u2o=", - "h1:nQTLHstv9bSviqpeBRzCfUG1lD8j+3f6Daxuv32At8k=", - "h1:rvZHMkoxkHrBYQXb/waoZiD2oo3FS1AF8HoWHlb6SN8=", - "h1:zpwamvGGsck1qNunJeyfolgiBDOJpXVINPzLLSECpjY=", - "zh:14701aa307a832d99f567b8056a4c5e4ee5a403d984c98f024deee7507a3f29c", - "zh:344eca00ffb2643c2fa7f52f069b659d50bb4c9369df4cad96ea0fadb54282c8", - "zh:5fb57c0acfd4d30a39941900040d5518a909d8c975af0c4366a7bfd0d0bb09a8", - "zh:617a77048a5b9aa568e8bc706cc84307a237b2dd0e49709028b283f8bbe42475", - "zh:677837a05fefe0342cf4d4bdc494e8fd4d62331cac947820e73df37e8f512688", - "zh:7b79f6e02474eef4a1480fc6589afb63ed16b25bf019b6056f9838e2845e2ef8", - "zh:7d891fceb5b15e81240d829f42e1a36e4c812bfc1abe7856756e59101932205f", - "zh:97f1e0ac799faf382426e070e888fac36b0867597b460dc95b0e7f657de21ba9", - "zh:9855f2f2f5919ff6a6a2c982439c910d28c8978ad18cd8f549a5d1ba9b4dc4c3", - "zh:ac551367180eb396af2a50244e80243d333d600a76002e29935262d76a02290b", - "zh:c354f34e6579933d21a98ce7f31f4ef8aeaceb04cfaedaff6d3f3c0be56b2c79", + "h1:3jOfdfVYVI/AZ4qdmckh/Hr3edQytpRspPGWDAf7hfk=", + "h1:4HI+eZYXcOiKDoKMzAfr84IV61nwH+OgMVLN+xQP/00=", + "h1:71YV9nOKWohOqPZmW8jAtHJJPyTSbkKeBYwLdcZqV+I=", + "h1:WcDlLkQlcWug7lK4YI2OS5mIoCpL5qlytXNT7CLXxcw=", + "h1:dVywsjJ17IF+o9c9PQqGrCJiQvCrrWBRt2Gt4OPzTlo=", + "h1:evkERvMebvZCwZ7Dr2x3RMoB03GVOzw8LkUFXE2kkbA=", + "h1:j75pE4hkNhzsJ9kyhYJB2qq8jwzMS/IdYJ399bBtsvk=", + "h1:n0DGeFjLRoe2Lp6PLU9mMJJFSSigxi3t2yschn0rPGw=", + "h1:r5WFNDeEnqaJ7FHsYR8xSFs6xFk42rMOqZZRnIek7jM=", + "h1:xu1ZOAgciMrxGk81qhnNmUG+yt6o4eq7qI8awc3/oLk=", + "h1:yhV8waV9Dxy67zHzArLkg+nbOAsMA/EoLrEvLys9h6k=", + "zh:1e263d01a64740d550f14c83e91efaf5b3f7ee46163cce58b736da284e488377", + "zh:5b0885ee8875b98ef75f558e278ac5f2ba0850e0e6579c898d75a488be227e93", + "zh:6eb8d06a5cf9843e7a4dd18bd93fc785bdec9f5aebdef748bfbe349c0e085ce5", + "zh:82f57bcccc35271f39a090b687c37489f81ddeec2a792e7f5341c7cdcc51fa5c", + "zh:898d7ed728f45c3124e2bfbbde57b762e59c9c54e020453edc9454858d65a8c5", + "zh:8effa4a08cc3ffce2048b4e51ad6df0c288ce0c79c161b9716a16b482d2f18be", + "zh:ac80c44c9dc0c7016c3422390b17380ad03257abc09a224734ed359b2cd61d0a", + "zh:c2e03eba3d9af62948ba82aa1de627c692731b9a7dd46119b932c6fc9514306c", + "zh:ca77c67f72e7210112f485ef0fc555fde3ac818de9b7136f0b37142893ba6428", + "zh:ea8ccff7fece47be816f3f20fdd61b8ac3a72f515720c579a2560183b1e17658", "zh:f569b65999264a9416862bca5cd2a6177d94ccb0424f3a4ef424428912b9cb3c", + "zh:f5d626eb6e9015022796849d6ba733627fa9e082302a8658dd83fc74c75db162", ] } diff --git a/terraform/infrastructure/gcp/main.tf b/terraform/infrastructure/gcp/main.tf index b20b74d15..2c6b294c3 100644 --- a/terraform/infrastructure/gcp/main.tf +++ b/terraform/infrastructure/gcp/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { google = { source = "hashicorp/google" - version = "6.12.0" + version = "6.16.0" } random = { diff --git a/terraform/infrastructure/gcp/modules/instance_group/main.tf b/terraform/infrastructure/gcp/modules/instance_group/main.tf index 33eb47aea..5c7747db1 100644 --- a/terraform/infrastructure/gcp/modules/instance_group/main.tf +++ b/terraform/infrastructure/gcp/modules/instance_group/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { google = { source = "hashicorp/google" - version = "6.12.0" + version = "6.16.0" } random = { diff --git a/terraform/infrastructure/gcp/modules/internal_load_balancer/main.tf b/terraform/infrastructure/gcp/modules/internal_load_balancer/main.tf index 49cd0eb90..0ded10958 100644 --- a/terraform/infrastructure/gcp/modules/internal_load_balancer/main.tf +++ b/terraform/infrastructure/gcp/modules/internal_load_balancer/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { google = { source = "hashicorp/google" - version = "6.12.0" + version = "6.16.0" } } } diff --git a/terraform/infrastructure/gcp/modules/jump_host/main.tf b/terraform/infrastructure/gcp/modules/jump_host/main.tf index 864115228..a09eaac06 100644 --- a/terraform/infrastructure/gcp/modules/jump_host/main.tf +++ b/terraform/infrastructure/gcp/modules/jump_host/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { google = { source = "hashicorp/google" - version = "6.12.0" + version = "6.16.0" } } } diff --git a/terraform/infrastructure/gcp/modules/loadbalancer/main.tf b/terraform/infrastructure/gcp/modules/loadbalancer/main.tf index e815d9dea..5a5ab4230 100644 --- a/terraform/infrastructure/gcp/modules/loadbalancer/main.tf +++ b/terraform/infrastructure/gcp/modules/loadbalancer/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { google = { source = "hashicorp/google" - version = "6.12.0" + version = "6.16.0" } } } diff --git a/terraform/infrastructure/iam/aws/.terraform.lock.hcl b/terraform/infrastructure/iam/aws/.terraform.lock.hcl index ec2b3204e..1e826be2d 100644 --- a/terraform/infrastructure/iam/aws/.terraform.lock.hcl +++ b/terraform/infrastructure/iam/aws/.terraform.lock.hcl @@ -2,38 +2,38 @@ # Manual edits may be lost in future updates. provider "registry.terraform.io/hashicorp/aws" { - version = "5.78.0" - constraints = "5.78.0" + version = "5.83.1" + constraints = "5.83.1" hashes = [ - "h1:/EKXECKi3XzLR0SwaEyQucvsQx2TdyIF2DYabr9DVqM=", - "h1:15pt02WPsTWUsLi37o791kSplIqEf2Ihl+zFdBOpKnY=", - "h1:3TLJUm+6523EtS8W8G4f22e0bp2MpZ72f9qptc31WD8=", - "h1:EGEcXHT4WdxUTRSPzjevCNXStQ+u2eeQB4EmOSp2nPc=", - "h1:GwVGbd+IHAq+qwGs2QKuxazKzrJhSWVicYyGBPftuG0=", - "h1:OUmta/bL/0S6g4K/Mn1LBkEnMWNCq4dLsfYrdrllcEo=", - "h1:cxjNJTMeoxw0csix1iWp4m2esNUOuFfVbIAacUGjYSQ=", - "h1:kB3dnSsazjI63RZdz2gldCkDFw8KI0IJd6RbhqxrE6I=", - "h1:o7jz+dFixEcwjfdubken5ldmDJm1tkvM2adPtNDei3g=", - "h1:vIzenE93tNUfA/hFcwB6wouenp59n9g2J6FNPfJAOpg=", - "h1:zA5P+U4hv2P52fwfLNjAIA2jS9xOn4xCmrXrOMKH8gs=", - "h1:zKNuYrqjerfmrU0bgKQtubN/NiMLRXP4HTThTm1WfJE=", - "h1:zYvhhpw56OF8ClJezKBdKV0+6elVM3FYEAjaNWAinjk=", - "h1:zel31ZX4jCQoeQXydOfcm4ncD9aj+437F9Cr1eoCumM=", - "zh:0ae7d41b96441d0cf7ce2e1337657bdb2e1e5c9f1c2227b0642e1dcec2f9dfba", - "zh:21f8f1edf477681ea3b095c02cad6b8e85262e45015de58e84e0c7b2bfe9a1f6", - "zh:2bdc335e341bf98445255549ae93d66cfb9bca706e62b949da98fe467c182cad", - "zh:2fe4096e260367a225a9faf4a424d62b87e5498f12cb43bdb6f4e713d11b82c3", - "zh:3c63bb7a7925d65118d17461f4691a22dbb55ea39a7404e4d71f6ccca8765f8b", - "zh:6609a28a1c638a1901d8007b5386868ccfd313b4df2e98b35d9fdef436974e3b", - "zh:7ae3aef43bc4b365824cca4659cf92459d766800656e354bdbf83feabab835e8", + "h1:8KI8wFWW2iPYVMyNGI75bxgmwy8MjZk4G6Quut5H7x8=", + "h1:DsW/pXMvg0Dhe+SaKRkAK1Knfr8bVsqENa7sLLyOBtI=", + "h1:L3bkBWmhaqNTvFylxJbAgnJIix30n1fFrvfSS/JkNFg=", + "h1:OGnYC6C0PsiB2K0BcjaCzEFkZhKQ9rq2sEP8d1djH08=", + "h1:OlxnMPwNjMbASLyyPmIsCwdEslb3Q2zzvBgxQVJalc8=", + "h1:Rz48OWTGwGhwY9yHPTgfmnKP1a9R2iUWyKsOBkvabmU=", + "h1:UfCtsy1RE6chDN/qzWdcDg8g8QENo74xqaUS3oPbnsQ=", + "h1:YEZLk+HoD/Oz9VC0M7UoMTAFEvoqAwfXLgPc+9ndpVU=", + "h1:Yy3K7R7881H72rQDzG6qjZVkrWA6DGJzfE21TionY7w=", + "h1:g1YrU/FiK0ty5J+WVYJIKHSaSU0g9VboXwstUxD0JzU=", + "h1:huw6LBQrOHtsv4Wqu99jgozvl47Qsd5XZDgxAHj86Ds=", + "h1:jEKbxB3GtA9ak4XXkaIXTMbnu/SDiiqNKDeF/78XrHc=", + "h1:mmZDuh7DyVJ+1UOAaJZ3gh42YASLIFkbxy7sdPiui/8=", + "h1:vInFMDq9oMs53/i+7IU8hZgmTLhFfng8L8kbuALZxSI=", + "zh:0313253c78f195973752c4d1f62bfdd345a9c99c1bc7a612a8c1f1e27d51e49e", + "zh:108523f3e9ebc93f7d900c51681f6edbd3f3a56b8a62b0afc31d8214892f91e0", + "zh:175b9bf2a00bea6ac1c73796ad77b0e00dcbbde166235017c49377d7763861d8", + "zh:1c8bf55b8548bbad683cd6d7bdb03e8840a00b2422dc1529ffb9892820657130", + "zh:22338f09bae62d5ff646de00182417f992548da534fee7d98c5d0136d4bd5d7a", + "zh:92de1107ec43de60612be5f6255616f16a9cf82d88df1af1c0471b81f3a82c16", "zh:9b12af85486a96aedd8d7984b0ff811a4b42e3d88dad1a3fb4c0b580d04fa425", - "zh:c314efe454adc6ca483261c6906e64315aeb9db0c0332818714e9b81e07df0f0", - "zh:cd3e30396b554bbc1d260252db8a0f344065d619038fe60ea870689cd32c6aa9", - "zh:d1ba48fd9d8a1cb1daa927fb9e8bb708b857f2792d796e110460c6fdcd896a47", - "zh:d31c8abe75cb9cdc1c59ad9d356a1c3ae1ba8cd29ac15eb7e01b6cd01221ab04", - "zh:dc27c5c2116b4d9b404753f73bccaa635bce21f3bfb4bb7bc8e63225c36c98fe", - "zh:de491f0d05408378413187475c815d8cb2ac6bfa63d0b42a30ad5ee492e51c07", - "zh:eb44b45a40f80a309dd5b0eb7d7fcb2cbfe588fe2f18b173ef5851346898a662", + "zh:9c7bfb7afea330e6d90e1466125a8cba3db1ed4043c5da52f737459c89290a6e", + "zh:ba59b374d477e5610674b70f5abfe0408e8f809390347372751384151440d3d0", + "zh:bd1c433966002f586d63cb1e3e16326991f238bc6beeb2352be36ec651917b0b", + "zh:ca2b4d1d02651c15261fffa4b142e45def9a22c6069353f0f663fd2046e268f8", + "zh:d8ed98c748f7a3f1a72277cfee9afe346aca39ab319d17402277852551d8f14a", + "zh:ed3d8bc89de5f35f3c5f4802ff7c749fda2e2be267f9af4a850694f099960a72", + "zh:f698732a4391c3f4d7079b4aaa52389da2a460cac5eed438ed688f147d603689", + "zh:f9f51b17f2978394954e9f6ab9ef293b8e11f1443117294ccf87f7f8212b3439", ] } diff --git a/terraform/infrastructure/iam/aws/main.tf b/terraform/infrastructure/iam/aws/main.tf index bec0b5412..6fcedf5ab 100644 --- a/terraform/infrastructure/iam/aws/main.tf +++ b/terraform/infrastructure/iam/aws/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { aws = { source = "hashicorp/aws" - version = "5.78.0" + version = "5.83.1" } random = { source = "hashicorp/random" diff --git a/terraform/infrastructure/iam/azure/.terraform.lock.hcl b/terraform/infrastructure/iam/azure/.terraform.lock.hcl index e1f335cd4..0984f8cf9 100644 --- a/terraform/infrastructure/iam/azure/.terraform.lock.hcl +++ b/terraform/infrastructure/iam/azure/.terraform.lock.hcl @@ -32,31 +32,31 @@ provider "registry.terraform.io/hashicorp/azuread" { } provider "registry.terraform.io/hashicorp/azurerm" { - version = "4.12.0" - constraints = "4.12.0" + version = "4.15.0" + constraints = "4.15.0" hashes = [ - "h1:2tHjSJI1VW6sUL042kwkTfmOF3rAjZmYzpFucBq0EjQ=", - "h1:3TmHdOUKadLf5mJfYqm2OpsA/jiuqmEvCmR1EnaluF0=", - "h1:81V4UGJgVTzRQgIhYYvDJ1N+WCsQbmBgyCQ0HL/i/ks=", - "h1:9ZTFblaxLkCzg8jvRBk/J7QKV2hjxrwNhVlk96IUr6U=", - "h1:DjLdwL6J0qqUTx02BOMQxfOLHUqlYH+ewRcwFWTiHjY=", - "h1:EDeJjlZGOezaIQ+kiCN8GXRj049Lo42b93rEGlbOscM=", - "h1:U/tpa2Accjlzco7ohA1CEeL3fT/65yqiTf2ydCHhzjE=", - "h1:VJfcRLECBhANa1S5yHF3hJtOAzJuqe969XTK8LPbp6U=", - "h1:W6fcPNvsD7ce81J0H3Ib5FBlt5VLq5MlLXQIw+zooPc=", - "h1:tI7FQgfIFIER3wMbZN5mIX24B0mWVNb4r7hi7mUmAw8=", - "h1:wofqhlcgsUPYq6ZrN5hoUE34PDn7jmvK6YlQ0BobjyQ=", - "zh:127709945923a0034ec302c41494b82f0748707ecba15feba9db3af03e2b4709", - "zh:16ce5040984456f332598e1515cfde12b1bba78eae37b7a4b08ec332bbb55d6c", - "zh:1901cf598a048a1f135ed1c723de5e3c501aa7d1399490b7722c44cb61cb566e", - "zh:1b4a1fa65f32de535481ff38bd5869f44582b14b64bd00cc4902439cf2728a8a", - "zh:72ff727353151bd1a41ea1d6b2ecf24157918658ccd02d56acd62a7c4d330a7b", - "zh:78c0e4d7e1701fc5b3227d098807b1ed1c6d80c1ee443c0db89c64aeb317a39f", - "zh:a9964f7d9142cdd6f84673e1e936491f14bf1a44dd51fd55525c42fb05208c83", - "zh:ada1ffdebe10a44fcfa330618376fbd5d5daf7a9faad833496162686a98016d0", - "zh:d02d4d5a1fc4b0cb7975311bf37596456ace782ab195281a48338eb2a0f478c1", - "zh:e0fb626158b0cb7d8c5662a518cee8924b00a87312feff9db40b30e26539aa0f", + "h1:1Yfzvj0yCBg8ck1EgqFkhzfWJ1pGYzyjRxJ/9I+8Wwk=", + "h1:HXV4xhFHsM+41zSTE9yxilg/JddsqZYWPpcgGX+CL1U=", + "h1:XiRrUHid+1nVLY7zeDP20Q4hAVqncxv9C4s0YiWNM6w=", + "h1:Z+FoTCeYnxLl+WynS1BUAnxZlW1F1DgouBAgzvTkbwk=", + "h1:eKF94ScY2csUTysr7T4vMWvHb3A9hf0gUBzKXG0nrLA=", + "h1:gKI0mOpVDlUFdGRFBgetREvZJMrVLeBKpwJwXeUA5jA=", + "h1:gLnXyXqLq5bXrsmxoPGyoC7F2x7p+1A1ndNQNcLB0Wg=", + "h1:hK37RxP5UACnayk9AQKIzFSlpqDprrJ3jOy2EiNAQV4=", + "h1:iz0zF6b7fV6O88uKnYWvkAZqrTSYgZgsVRFBSkiIYEQ=", + "h1:l4IeiC5B5iXJq0yQCl6M6ktov6DDPXKm4ziitiMWvtk=", + "h1:xX8rqMLkR7ZRKRANBtQdQ8qO2n5I7WIy7EOyeXxHr2w=", + "zh:1e3f9f2e94d6ee07c74e137b22ad6199081ae0c2dde1f986bd09fa516a0a6d4b", + "zh:3e9dda2795c76f143d335fb2f78a600845ba9bdaf87d400a1a3131b533d641ef", + "zh:617cf5db531ba0f1648613f31c43481b6736bdec4b08a8980217a0e1d40173b6", + "zh:9d561393fc9e09ade829a97e0e5f58c8efd010f0a6cd513d41a0d3baf5e66d98", + "zh:a1932e5614a920cca5372733686bcd8b8d80f7c9dac7b570dd49916982853004", + "zh:b7e6eeb2a4998dcf74a2f005da23b99fd1cf89e45c77424a288a27f7c1b5c562", + "zh:baec97748db05ce4b24a6d91f8bad2f3db7414f68c41d78782c410a47b4a460a", + "zh:ce1eb226304a65a29c1e70af4c05d359168ef70ad297e37de54d7070619a50c1", + "zh:d04e582146310375c9bb7decfbed3acef537d70be77201de3ca235cfbc6f64f6", + "zh:df4098cd6b961d1cf0ea858f2964afadb264c8ee3ccf59215f620c421573ffa0", + "zh:ec1837c5a6b4b6c77c6587a98cc0978dbfeb6be0fb7f1c9618f1e66213d81e6b", "zh:f569b65999264a9416862bca5cd2a6177d94ccb0424f3a4ef424428912b9cb3c", - "zh:fa5f683582bc5b12587aa7a78152774f2eaae9cfac0fb61b6de81284abbbea5b", ] } diff --git a/terraform/infrastructure/iam/azure/main.tf b/terraform/infrastructure/iam/azure/main.tf index 56b77fb63..f1b0960fe 100644 --- a/terraform/infrastructure/iam/azure/main.tf +++ b/terraform/infrastructure/iam/azure/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { azurerm = { source = "hashicorp/azurerm" - version = "4.12.0" + version = "4.15.0" } azuread = { source = "hashicorp/azuread" diff --git a/terraform/infrastructure/iam/gcp/.terraform.lock.hcl b/terraform/infrastructure/iam/gcp/.terraform.lock.hcl index 2f295aaac..b56b4ba74 100644 --- a/terraform/infrastructure/iam/gcp/.terraform.lock.hcl +++ b/terraform/infrastructure/iam/gcp/.terraform.lock.hcl @@ -2,32 +2,32 @@ # Manual edits may be lost in future updates. provider "registry.terraform.io/hashicorp/google" { - version = "6.12.0" - constraints = "6.12.0" + version = "6.16.0" + constraints = "6.16.0" hashes = [ - "h1:D6eBvo6Qs3OXXMwB2vFBhKuiL/TMNu5bBtjznSPbBH0=", - "h1:JuVRL27b9/g/FdblPwGZEacECBZRIuHZ+nzRgpIDduo=", - "h1:MgQU4YOpoJQngarNuPfvNKF4r7YyqYii7DBOiiaKBEw=", - "h1:OQp1STR+bhXfBQKs02krIJuELZ2c4GmGhlBd4bSq128=", - "h1:OvpG2uAeuIc19TFOQrr+s7Ded6sVBripLWLIzeWn90U=", - "h1:PmkvZRF8v7SszpUP4l9gXfhlVwq3z+HrTE39qusLrBw=", - "h1:WZulOZ1tthsLm/w7t7yy3C7JZ8QIXfO+QMEEW1pjrAY=", - "h1:Yez7eMayTGGmX/LCIDD3Xgnktpv/701g2zotNmg6u2o=", - "h1:nQTLHstv9bSviqpeBRzCfUG1lD8j+3f6Daxuv32At8k=", - "h1:rvZHMkoxkHrBYQXb/waoZiD2oo3FS1AF8HoWHlb6SN8=", - "h1:zpwamvGGsck1qNunJeyfolgiBDOJpXVINPzLLSECpjY=", - "zh:14701aa307a832d99f567b8056a4c5e4ee5a403d984c98f024deee7507a3f29c", - "zh:344eca00ffb2643c2fa7f52f069b659d50bb4c9369df4cad96ea0fadb54282c8", - "zh:5fb57c0acfd4d30a39941900040d5518a909d8c975af0c4366a7bfd0d0bb09a8", - "zh:617a77048a5b9aa568e8bc706cc84307a237b2dd0e49709028b283f8bbe42475", - "zh:677837a05fefe0342cf4d4bdc494e8fd4d62331cac947820e73df37e8f512688", - "zh:7b79f6e02474eef4a1480fc6589afb63ed16b25bf019b6056f9838e2845e2ef8", - "zh:7d891fceb5b15e81240d829f42e1a36e4c812bfc1abe7856756e59101932205f", - "zh:97f1e0ac799faf382426e070e888fac36b0867597b460dc95b0e7f657de21ba9", - "zh:9855f2f2f5919ff6a6a2c982439c910d28c8978ad18cd8f549a5d1ba9b4dc4c3", - "zh:ac551367180eb396af2a50244e80243d333d600a76002e29935262d76a02290b", - "zh:c354f34e6579933d21a98ce7f31f4ef8aeaceb04cfaedaff6d3f3c0be56b2c79", + "h1:3jOfdfVYVI/AZ4qdmckh/Hr3edQytpRspPGWDAf7hfk=", + "h1:4HI+eZYXcOiKDoKMzAfr84IV61nwH+OgMVLN+xQP/00=", + "h1:71YV9nOKWohOqPZmW8jAtHJJPyTSbkKeBYwLdcZqV+I=", + "h1:WcDlLkQlcWug7lK4YI2OS5mIoCpL5qlytXNT7CLXxcw=", + "h1:dVywsjJ17IF+o9c9PQqGrCJiQvCrrWBRt2Gt4OPzTlo=", + "h1:evkERvMebvZCwZ7Dr2x3RMoB03GVOzw8LkUFXE2kkbA=", + "h1:j75pE4hkNhzsJ9kyhYJB2qq8jwzMS/IdYJ399bBtsvk=", + "h1:n0DGeFjLRoe2Lp6PLU9mMJJFSSigxi3t2yschn0rPGw=", + "h1:r5WFNDeEnqaJ7FHsYR8xSFs6xFk42rMOqZZRnIek7jM=", + "h1:xu1ZOAgciMrxGk81qhnNmUG+yt6o4eq7qI8awc3/oLk=", + "h1:yhV8waV9Dxy67zHzArLkg+nbOAsMA/EoLrEvLys9h6k=", + "zh:1e263d01a64740d550f14c83e91efaf5b3f7ee46163cce58b736da284e488377", + "zh:5b0885ee8875b98ef75f558e278ac5f2ba0850e0e6579c898d75a488be227e93", + "zh:6eb8d06a5cf9843e7a4dd18bd93fc785bdec9f5aebdef748bfbe349c0e085ce5", + "zh:82f57bcccc35271f39a090b687c37489f81ddeec2a792e7f5341c7cdcc51fa5c", + "zh:898d7ed728f45c3124e2bfbbde57b762e59c9c54e020453edc9454858d65a8c5", + "zh:8effa4a08cc3ffce2048b4e51ad6df0c288ce0c79c161b9716a16b482d2f18be", + "zh:ac80c44c9dc0c7016c3422390b17380ad03257abc09a224734ed359b2cd61d0a", + "zh:c2e03eba3d9af62948ba82aa1de627c692731b9a7dd46119b932c6fc9514306c", + "zh:ca77c67f72e7210112f485ef0fc555fde3ac818de9b7136f0b37142893ba6428", + "zh:ea8ccff7fece47be816f3f20fdd61b8ac3a72f515720c579a2560183b1e17658", "zh:f569b65999264a9416862bca5cd2a6177d94ccb0424f3a4ef424428912b9cb3c", + "zh:f5d626eb6e9015022796849d6ba733627fa9e082302a8658dd83fc74c75db162", ] } diff --git a/terraform/infrastructure/iam/gcp/main.tf b/terraform/infrastructure/iam/gcp/main.tf index b105aee22..7e3280684 100644 --- a/terraform/infrastructure/iam/gcp/main.tf +++ b/terraform/infrastructure/iam/gcp/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { google = { source = "hashicorp/google" - version = "6.12.0" + version = "6.16.0" } } } diff --git a/terraform/infrastructure/openstack/.terraform.lock.hcl b/terraform/infrastructure/openstack/.terraform.lock.hcl index 4c153bff3..c927d72ee 100644 --- a/terraform/infrastructure/openstack/.terraform.lock.hcl +++ b/terraform/infrastructure/openstack/.terraform.lock.hcl @@ -26,38 +26,38 @@ provider "registry.terraform.io/hashicorp/random" { } provider "registry.terraform.io/stackitcloud/stackit" { - version = "0.35.0" - constraints = "0.35.0" + version = "0.38.0" + constraints = "0.38.0" hashes = [ - "h1:Cc+HFJYbY2X9KsgMvLhikdjz/bN671/osUkXFT+H1AI=", - "h1:GnJ+gbhhJ+ZdH5L5QS4eMi638nafDqxcRsrZQLJPHnU=", - "h1:V/ayYinMV9pGGLg7OBPeG0XONnSkmDbWDH3deWtTmM0=", - "h1:Ws8n3pe5/cStjDF6VnRdax9ledzUja2nUNPYTEzdEAs=", - "h1:XwLQ50fsxJ5MGUlJEs7dWIdErbrGgEExSqj22BHwykM=", - "h1:ZIays0MW9HD++OUktDQlrBhADXsseUhXI9LNXiV7R0I=", - "h1:a544QqVZaDj2QjSddFynSKjdlbw+cXw+wImF4XbKPW4=", - "h1:kQ7j2jRkEai4Id5BRXnky2ZcytrLP8JMrkVL0vsZJnE=", - "h1:s1s8GBkKD0buf48bKMcj0bQG3cR5Xfyt1MMRik46sTs=", - "h1:srQRAu7VfVWcKaeypDJg4Bvo2AxzZO/cwefxIt+Uduw=", - "h1:tKEqWCG0wcOiYHaWgsqAqF4LOKHU5lahM4t9zpMsBR8=", - "h1:ulAmt5tk9bBD0HjN4c8Cy4Aai7gEbbo6K38Duly7jyE=", - "h1:wPPCGyWv6rjaZ7dcMXNsAK6x+AjVlWClHVC1ctt4lLY=", - "h1:zJozfYwxty/4meQ65hh6fHMqeT2LA7xTvOX3yGB2HPs=", - "zh:0c5ff45f9d8785cf39189908c70ce989423b823f468d5664794aa1352838560f", + "h1:40ZDXns1Ac3panUPdAyqQU8px4GHd05n53tb8zS1hD4=", + "h1:4O/2HwjIPNULckGWM2HaQotQx5q/bREolvaZX6BJOVE=", + "h1:A+b8ZyBg+bwzpHG2VcKCSW/Bcz6xCs24JOByxenfsYg=", + "h1:AiUF9BaGYO3ELegCWpFi1hRw4X6dYlYgHMC/VCf9/1c=", + "h1:S9EN3nH+0BRfIJ9ehtqETZ4TKOSmkOVh5XKEBN8Bgjs=", + "h1:T5LZXJhkEYA/5s8Fujkzu7jE5xRBJoM9nzXI1rE/MR8=", + "h1:YkeIs+0P1Arb8typsARaJyK74/YenHPrNT/k1bzq/jM=", + "h1:YnFnWhlr5AOeBjU8DI75L86I8bBSOttlOkbLkIb9BfA=", + "h1:aME5ed/dDBj1L3wDzO56xh/2kdTLv1iAd56tPRFexa0=", + "h1:cFoBB7Y0r5mwkFEdqcQDsSevIlvLKNO+SLkDILk5c3g=", + "h1:f6SnX9jNuefX289DaCniB4HCfmHT4tjfUb6dGicIKpc=", + "h1:fSg8U1g0zjtJkefRniRglJJwI5txvugK3KFpqqyHh9Y=", + "h1:sj/sZYInVdiGHpad8oqtfmLQOBRJ/J77tNr5SwQHPUM=", + "h1:zuZU0jLyefzdsBy6XTYsU04QlfqCpg9GbZ56+xofV1g=", + "zh:0bfae1c987aa2aeaac0bce67efd427ec85d28b53d5e34436ba70e3b35c5d6bee", "zh:0dde99e7b343fa01f8eefc378171fb8621bedb20f59157d6cc8e3d46c738105f", - "zh:51c0fee775b63d96a6a95e4022960628d8b5257b744deb8705fc90d8763ebf42", - "zh:7e7a2186713d260911e56b2b5c3adf064cbbca6762b12e7bfe244d7044b3661b", - "zh:859b785d74ab91173738bef0d7f25efc4db21918c3b9a599273b99dcafc6e1cb", - "zh:86b8797678f908c048f4ae0795edde199de2335f5b56a9c6d66cb5c8e88b08e1", - "zh:8f12189510b6ec166f2fb8b251c95afb28cf0b5b58733487b4e8bf3da31c68b8", - "zh:a70ab1bd728aacefd7da38f1e8c0634c5b9b8d37ac892adadafc9f5da8965373", - "zh:b5c7dd74c47155d95891b83d8755fc3c6d60c854207a5ba3cb1d4bd82d2ed10f", - "zh:bf5af8348a80b62030b539c963dbe2605954622059468b69487758fa40e276e2", - "zh:d246e353614a76235e834ce4fb26228bd70a6cb14eca60171d12cfb54e9a833c", - "zh:d29e53cedab668531be90745c359a4d4b461a06e867331ba13141adc1b78282d", - "zh:dac9be6f3333389c2d2ea3b206554b397909b413d5bfc10e7054646a96906f0b", - "zh:def772fb3965b36ec684f2d25d9f27ce5cf7905753806d449732cbbf3d3b09e4", - "zh:e2eccc14ce98d05be2d87f1c82e8ea47020598faf14ce9e7c2ee928922530ce1", + "zh:2420773eb1aa168e03ecfe5fbbee19b4137bc4b98500a4661fe087fa2a764f92", + "zh:25f463534efef74903f8cc2ca5ad12ce075bcfe6bded9bb92a82325bd90d05f6", + "zh:36bb57ab2d0cd1438b098cb2ced53bfec9d9b99a9168f98319243089f5f717c3", + "zh:39e4289195e418078d13599876fb141938a0d1dc27f1cefe5fdce3675de68af7", + "zh:577872ca94c549c58a235cc7de312b2bb801c27f2e94095eb50c0c7c8cfc9e6f", + "zh:5c2f585d9ba5972764d9600d2f68951bceed36a6b173f76f6b80b72f0742eaec", + "zh:5fc887474340fd7c85c82b0b77a27e562aa5d1105de4efefc874b5e4453d2770", + "zh:6bc00cae3d3187574b46b0636137b60dc7068bfcbc05dfb521495c3301f1ca9a", + "zh:765f6813ef96c65f22ff7c035ca27e2926e26761f8d144a78f254b38cbb08307", + "zh:ba3b301fc5ab75b85a1c2b36ce2158a1af52aef753751964d7b4515de698f41b", + "zh:f2d9a79cde383201bf7525dba60c1b0bd4879673daa2327718301098aa590b70", + "zh:fa122db84826861c6adbc2d0a029ade3e534f01914a8b6b89cf1e76441a98fc3", + "zh:fb37573fdedaf26d11d0be257a6331ae416d0273eb9f9958f77e2441e662339b", ] } diff --git a/terraform/infrastructure/openstack/main.tf b/terraform/infrastructure/openstack/main.tf index b987a3ceb..9865f3e89 100644 --- a/terraform/infrastructure/openstack/main.tf +++ b/terraform/infrastructure/openstack/main.tf @@ -7,7 +7,7 @@ terraform { stackit = { source = "stackitcloud/stackit" - version = "0.35.0" + version = "0.38.0" } random = { diff --git a/terraform/infrastructure/openstack/modules/stackit_loadbalancer/main.tf b/terraform/infrastructure/openstack/modules/stackit_loadbalancer/main.tf index cbe4e4d0d..4bc569da1 100644 --- a/terraform/infrastructure/openstack/modules/stackit_loadbalancer/main.tf +++ b/terraform/infrastructure/openstack/modules/stackit_loadbalancer/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { stackit = { source = "stackitcloud/stackit" - version = "0.35.0" + version = "0.38.0" } } } From e3f29ecf4db7169db1634d12234f5b9547e1c96f Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 16 Jan 2025 14:22:02 +0100 Subject: [PATCH 049/311] deps: update Kubernetes versions (#3578) * deps: update Kubernetes versions * deps: tidy all modules --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: edgelessci --- docs/docs/architecture/versions.md | 4 +- internal/versions/versions.go | 44 +++++++++---------- .../docs/resources/cluster.md | 2 +- 3 files changed, 25 insertions(+), 25 deletions(-) diff --git a/docs/docs/architecture/versions.md b/docs/docs/architecture/versions.md index f877c8995..d9e28bcc7 100644 --- a/docs/docs/architecture/versions.md +++ b/docs/docs/architecture/versions.md @@ -17,5 +17,5 @@ The following Kubernetes versions are currently supported: * v1.28.15 -* v1.29.12 -* v1.30.8 +* v1.29.13 +* v1.30.9 diff --git a/internal/versions/versions.go b/internal/versions/versions.go index f1ce7c7e1..6a6aa9664 100644 --- a/internal/versions/versions.go +++ b/internal/versions/versions.go @@ -183,9 +183,9 @@ const ( //nolint:revive V1_28 ValidK8sVersion = "v1.28.15" // renovate:kubernetes-release //nolint:revive - V1_29 ValidK8sVersion = "v1.29.12" // renovate:kubernetes-release + V1_29 ValidK8sVersion = "v1.29.13" // renovate:kubernetes-release //nolint:revive - V1_30 ValidK8sVersion = "v1.30.8" // renovate:kubernetes-release + V1_30 ValidK8sVersion = "v1.30.9" // renovate:kubernetes-release // Default k8s version deployed by Constellation. Default ValidK8sVersion = V1_29 @@ -265,7 +265,7 @@ var VersionConfigs = map[ValidK8sVersion]KubernetesVersion{ ClusterAutoscalerImage: "registry.k8s.io/autoscaling/cluster-autoscaler:v1.28.7@sha256:77906954da9171425c8c8d3286091818143b6dcf9039abd49b8f33f1502978a1", // renovate:container }, V1_29: { - ClusterVersion: "v1.29.12", // renovate:kubernetes-release + ClusterVersion: "v1.29.13", // renovate:kubernetes-release KubernetesComponents: components.Components{ { Url: "https://github.com/containernetworking/plugins/releases/download/v1.6.0/cni-plugins-linux-amd64-v1.6.0.tgz", // renovate:cni-plugins-release @@ -280,33 +280,33 @@ var VersionConfigs = map[ValidK8sVersion]KubernetesVersion{ Extract: true, }, { - Url: "https://dl.k8s.io/v1.29.12/bin/linux/amd64/kubelet", // renovate:kubernetes-release - Hash: "sha256:45475d908f6c44bfbf994fec91a4d5ceebf41d93c9f3867e687b2fa67b57b5b0", + Url: "https://dl.k8s.io/v1.29.13/bin/linux/amd64/kubelet", // renovate:kubernetes-release + Hash: "sha256:ed89d8cdf60b14aae2aa665f8c1e3fc3e868ccc511c8ef5916f55c8cbd5ec772", InstallPath: constants.KubeletPath, Extract: false, }, { - Url: "https://dl.k8s.io/v1.29.12/bin/linux/amd64/kubeadm", // renovate:kubernetes-release - Hash: "sha256:bce712631bc425726b45930e58b00790c2ab3deec4282f86af353ea907817c46", + Url: "https://dl.k8s.io/v1.29.13/bin/linux/amd64/kubeadm", // renovate:kubernetes-release + Hash: "sha256:584d4ded69ea6e660d7b205c9c924f37cdfca24ad858cf05aeca626048e25f46", InstallPath: constants.KubeadmPath, Extract: false, }, { - Url: "https://dl.k8s.io/v1.29.12/bin/linux/amd64/kubectl", // renovate:kubernetes-release - Hash: "sha256:35fc028853e6f5299a53f22ab58273ea2d882c0f261ead0a2eed5b844b12dbfb", + Url: "https://dl.k8s.io/v1.29.13/bin/linux/amd64/kubectl", // renovate:kubernetes-release + Hash: "sha256:9f4cba9b3e12a3fd7fa99dee651d7293281333469852a8e755a1210d5b128b8d", InstallPath: constants.KubectlPath, Extract: false, }, { - Url: "data:application/json;base64,W3sib3AiOiJyZXBsYWNlIiwicGF0aCI6Ii9zcGVjL2NvbnRhaW5lcnMvMC9pbWFnZSIsInZhbHVlIjoicmVnaXN0cnkuazhzLmlvL2t1YmUtYXBpc2VydmVyOnYxLjI5LjEyQHNoYTI1NjoyODA0YjFlN2I5ZTA4ZjNhMzQ2OGY4ZmQyZjY0ODdjNTU5NjhiOTI5M2VlNTFiOWVmYjg2NWIzMjk4YWNmYTI2In1d", + Url: "data:application/json;base64,W3sib3AiOiJyZXBsYWNlIiwicGF0aCI6Ii9zcGVjL2NvbnRhaW5lcnMvMC9pbWFnZSIsInZhbHVlIjoicmVnaXN0cnkuazhzLmlvL2t1YmUtYXBpc2VydmVyOnYxLjI5LjEzQHNoYTI1NjplNWM0Mjg2MTA0NWQwNjE1NzY5ZmFkOGE0ZTMyZTQ3NmZjNWU1OTAyMDE1N2I2MGNlZDFiYjdhNjlkNGE1Y2U5In1d", InstallPath: patchFilePath("kube-apiserver"), }, { - Url: "data:application/json;base64,W3sib3AiOiJyZXBsYWNlIiwicGF0aCI6Ii9zcGVjL2NvbnRhaW5lcnMvMC9pbWFnZSIsInZhbHVlIjoicmVnaXN0cnkuazhzLmlvL2t1YmUtY29udHJvbGxlci1tYW5hZ2VyOnYxLjI5LjEyQHNoYTI1NjplMmYyNmEzZjVlZjNmZDAxZjYzMzBjYWI4YjA3OGNmMzAzY2ZiNmQzNjkxMWEyMTBkMDkxNWQ1MzU5MTBlNDEyIn1d", + Url: "data:application/json;base64,W3sib3AiOiJyZXBsYWNlIiwicGF0aCI6Ii9zcGVjL2NvbnRhaW5lcnMvMC9pbWFnZSIsInZhbHVlIjoicmVnaXN0cnkuazhzLmlvL2t1YmUtY29udHJvbGxlci1tYW5hZ2VyOnYxLjI5LjEzQHNoYTI1NjpmYzI4MzgzOTk3NTI3NDBiZGQzNmM3ZTkyODdkNDQwNmZlZmY2YmVmMmJhZmYzOTMxNzRiMzRjY2Q0NDdiNzgwIn1d", InstallPath: patchFilePath("kube-controller-manager"), }, { - Url: "data:application/json;base64,W3sib3AiOiJyZXBsYWNlIiwicGF0aCI6Ii9zcGVjL2NvbnRhaW5lcnMvMC9pbWFnZSIsInZhbHVlIjoicmVnaXN0cnkuazhzLmlvL2t1YmUtc2NoZWR1bGVyOnYxLjI5LjEyQHNoYTI1NjplZDY2ZTIxMDJmNDcwNWQ0NWRlNzUxM2RlY2YzYWM2MTg3OTcwNDk4NDQwOTMyMzc3OWQxOWU5OGI5NzA1NjhjIn1d", + Url: "data:application/json;base64,W3sib3AiOiJyZXBsYWNlIiwicGF0aCI6Ii9zcGVjL2NvbnRhaW5lcnMvMC9pbWFnZSIsInZhbHVlIjoicmVnaXN0cnkuazhzLmlvL2t1YmUtc2NoZWR1bGVyOnYxLjI5LjEzQHNoYTI1NjphNGYxNjQ5YTUyNDljMDc4NDk2M2Q4NTY0NGIxZTYxNDU0OGYwMzJkYTliNGZiMDBhNzYwYmFjMDI4MThjZTRmIn1d", InstallPath: patchFilePath("kube-scheduler"), }, { @@ -332,7 +332,7 @@ var VersionConfigs = map[ValidK8sVersion]KubernetesVersion{ ClusterAutoscalerImage: "registry.k8s.io/autoscaling/cluster-autoscaler:v1.29.5@sha256:76865740be7c965b35ee1524931bb4abfe4c27b5bfad280e84068cd6653ee7bb", // renovate:container }, V1_30: { - ClusterVersion: "v1.30.8", // renovate:kubernetes-release + ClusterVersion: "v1.30.9", // renovate:kubernetes-release KubernetesComponents: components.Components{ { Url: "https://github.com/containernetworking/plugins/releases/download/v1.6.0/cni-plugins-linux-amd64-v1.6.0.tgz", // renovate:cni-plugins-release @@ -347,33 +347,33 @@ var VersionConfigs = map[ValidK8sVersion]KubernetesVersion{ Extract: true, }, { - Url: "https://dl.k8s.io/v1.30.8/bin/linux/amd64/kubelet", // renovate:kubernetes-release - Hash: "sha256:7b5191dfed6a27faadefebdc4a3b602b9a76adfc58fd04c50307f1377eabc590", + Url: "https://dl.k8s.io/v1.30.9/bin/linux/amd64/kubelet", // renovate:kubernetes-release + Hash: "sha256:59c61c8018686bb58be96481f8aa3abe42bba9f791c6dd3c9d4a2ed697187e5b", InstallPath: constants.KubeletPath, Extract: false, }, { - Url: "https://dl.k8s.io/v1.30.8/bin/linux/amd64/kubeadm", // renovate:kubernetes-release - Hash: "sha256:ffe1a2b6345fae55e059afe7eed90ae9f46f0a755fde5fc17b9113134ab8b79e", + Url: "https://dl.k8s.io/v1.30.9/bin/linux/amd64/kubeadm", // renovate:kubernetes-release + Hash: "sha256:f763a8f5616cf1da80d88555b3654ab6aacd62dc62e6ba7dd2d540c34eea24c0", InstallPath: constants.KubeadmPath, Extract: false, }, { - Url: "https://dl.k8s.io/v1.30.8/bin/linux/amd64/kubectl", // renovate:kubernetes-release - Hash: "sha256:7f39bdcf768ce4b8c1428894c70c49c8b4d2eee52f3606eb02f5f7d10f66d692", + Url: "https://dl.k8s.io/v1.30.9/bin/linux/amd64/kubectl", // renovate:kubernetes-release + Hash: "sha256:d77041f285d9237c4aa451370c3ec6e5c042007dbb55c894f0a179b1d149bf32", InstallPath: constants.KubectlPath, Extract: false, }, { - Url: "data:application/json;base64,W3sib3AiOiJyZXBsYWNlIiwicGF0aCI6Ii9zcGVjL2NvbnRhaW5lcnMvMC9pbWFnZSIsInZhbHVlIjoicmVnaXN0cnkuazhzLmlvL2t1YmUtYXBpc2VydmVyOnYxLjMwLjhAc2hhMjU2OmYwZTFiM2RlMGMyZTk4ZTZjNmFiZDczZWRmOWQzYjhlNGQ0NDQ2MDY1NmNkZTBlYmI5MmUyZDkyMDY5NjFmY2IifV0=", + Url: "data:application/json;base64,W3sib3AiOiJyZXBsYWNlIiwicGF0aCI6Ii9zcGVjL2NvbnRhaW5lcnMvMC9pbWFnZSIsInZhbHVlIjoicmVnaXN0cnkuazhzLmlvL2t1YmUtYXBpc2VydmVyOnYxLjMwLjlAc2hhMjU2OjU0MGRlOGY4MTBhYzk2M2I4ZWQ5M2Y3MzkzYTg3NDZkNjhlN2U4YTJjNzllYTU4ZmY0MDlhYzViOWNhNmE5ZmMifV0=", InstallPath: patchFilePath("kube-apiserver"), }, { - Url: "data:application/json;base64,W3sib3AiOiJyZXBsYWNlIiwicGF0aCI6Ii9zcGVjL2NvbnRhaW5lcnMvMC9pbWFnZSIsInZhbHVlIjoicmVnaXN0cnkuazhzLmlvL2t1YmUtY29udHJvbGxlci1tYW5hZ2VyOnYxLjMwLjhAc2hhMjU2OjEyNGY2NmI3ZTg3N2ViNWE4MGE0MDUwMzA1NzI5OWJiNjBlNmE1ZjIxMzA5MDVmNGUzMjkzZGFiZjE5NGMzOTcifV0=", + Url: "data:application/json;base64,W3sib3AiOiJyZXBsYWNlIiwicGF0aCI6Ii9zcGVjL2NvbnRhaW5lcnMvMC9pbWFnZSIsInZhbHVlIjoicmVnaXN0cnkuazhzLmlvL2t1YmUtY29udHJvbGxlci1tYW5hZ2VyOnYxLjMwLjlAc2hhMjU2OjYzNTA2OTNjMDQ5NTZiMTNkYjI1MTllMDFjYTEyYTBiYmU1ODQ2NmU5ZjEyZWY4NjE3ZjE0MjlkYTYwODFmNDMifV0=", InstallPath: patchFilePath("kube-controller-manager"), }, { - Url: "data:application/json;base64,W3sib3AiOiJyZXBsYWNlIiwicGF0aCI6Ii9zcGVjL2NvbnRhaW5lcnMvMC9pbWFnZSIsInZhbHVlIjoicmVnaXN0cnkuazhzLmlvL2t1YmUtc2NoZWR1bGVyOnYxLjMwLjhAc2hhMjU2OmM4YmRlYWMyNTkwYzk5YzFhNzdlMzM5OTU0MjNkZGI2NjMzZmY5MGE4MmEyYWE0NTU0NDJlMGE4MDc5ZWY4YzcifV0=", + Url: "data:application/json;base64,W3sib3AiOiJyZXBsYWNlIiwicGF0aCI6Ii9zcGVjL2NvbnRhaW5lcnMvMC9pbWFnZSIsInZhbHVlIjoicmVnaXN0cnkuazhzLmlvL2t1YmUtc2NoZWR1bGVyOnYxLjMwLjlAc2hhMjU2OjE1M2VmZDZkYzg5ZTYxYTM4ZWYyNzNjZjRjNGNlYmQyYmZlZTY4MDgyYzJlZTNkNGZhYjVkYTk0ZTRhZTEzZDMifV0=", InstallPath: patchFilePath("kube-scheduler"), }, { diff --git a/terraform-provider-constellation/docs/resources/cluster.md b/terraform-provider-constellation/docs/resources/cluster.md index d29cb0f6e..eb4ed95e5 100644 --- a/terraform-provider-constellation/docs/resources/cluster.md +++ b/terraform-provider-constellation/docs/resources/cluster.md @@ -69,7 +69,7 @@ resource "constellation_cluster" "azure_example" { See the [full list of CSPs](https://docs.edgeless.systems/constellation/overview/clouds) that Constellation supports. - `image` (Attributes) Constellation OS Image to use on the nodes. (see [below for nested schema](#nestedatt--image)) - `init_secret` (String) Secret used for initialization of the cluster. -- `kubernetes_version` (String) The Kubernetes version to use for the cluster. The supported versions are [v1.28.15 v1.29.12 v1.30.8]. +- `kubernetes_version` (String) The Kubernetes version to use for the cluster. The supported versions are [v1.28.15 v1.29.13 v1.30.9]. - `master_secret` (String) Hex-encoded 32-byte master secret for the cluster. - `master_secret_salt` (String) Hex-encoded 32-byte master secret salt for the cluster. - `measurement_salt` (String) Hex-encoded 32-byte measurement salt for the cluster. From 99c8a1eb117ec2ec43fccbdea195b66b59166f48 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 16 Jan 2025 14:39:20 +0100 Subject: [PATCH 050/311] deps: update bufbuild/buf to v1.49.0 (#3583) * deps: update bufbuild/buf to v1.49.0 * deps: tidy all modules --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: edgelessci --- bazel/toolchains/ci_deps.bzl | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/bazel/toolchains/ci_deps.bzl b/bazel/toolchains/ci_deps.bzl index 001d7518f..ec7dc64f4 100644 --- a/bazel/toolchains/ci_deps.bzl +++ b/bazel/toolchains/ci_deps.bzl @@ -270,44 +270,44 @@ def _buf_deps(): strip_prefix = "buf/bin", build_file_content = """exports_files(["buf"], visibility = ["//visibility:public"])""", urls = [ - "https://cdn.confidential.cloud/constellation/cas/sha256/39716cfe0185df3cba21f66ec739620ffb6876c48b2da4338a8c68c290c9b116", - "https://github.com/bufbuild/buf/releases/download/v1.47.2/buf-Linux-x86_64.tar.gz", + "https://cdn.confidential.cloud/constellation/cas/sha256/ee8da9748249f7946d79191e36469ce7bc3b8ba80019bff1fa4289a44cbc23bf", + "https://github.com/bufbuild/buf/releases/download/v1.49.0/buf-Linux-x86_64.tar.gz", ], type = "tar.gz", - sha256 = "39716cfe0185df3cba21f66ec739620ffb6876c48b2da4338a8c68c290c9b116", + sha256 = "ee8da9748249f7946d79191e36469ce7bc3b8ba80019bff1fa4289a44cbc23bf", ) http_archive( name = "com_github_bufbuild_buf_linux_arm64", strip_prefix = "buf/bin", build_file_content = """exports_files(["buf"], visibility = ["//visibility:public"])""", urls = [ - "https://cdn.confidential.cloud/constellation/cas/sha256/e7188833039d4e7736de517eba6141b9306f4b60b00974392dac7ce38627321e", - "https://github.com/bufbuild/buf/releases/download/v1.47.2/buf-Linux-aarch64.tar.gz", + "https://cdn.confidential.cloud/constellation/cas/sha256/fd54cbe4ab0ef43dc5e6f2154328d5fed3bd9ad6a984a1387cc5749f40227606", + "https://github.com/bufbuild/buf/releases/download/v1.49.0/buf-Linux-aarch64.tar.gz", ], type = "tar.gz", - sha256 = "e7188833039d4e7736de517eba6141b9306f4b60b00974392dac7ce38627321e", + sha256 = "fd54cbe4ab0ef43dc5e6f2154328d5fed3bd9ad6a984a1387cc5749f40227606", ) http_archive( name = "com_github_bufbuild_buf_darwin_amd64", strip_prefix = "buf/bin", build_file_content = """exports_files(["buf"], visibility = ["//visibility:public"])""", urls = [ - "https://cdn.confidential.cloud/constellation/cas/sha256/08d1c72b23ae7f4324e0bdd0a700638235726cc312fc8320cd597bd616f69358", - "https://github.com/bufbuild/buf/releases/download/v1.47.2/buf-Darwin-x86_64.tar.gz", + "https://cdn.confidential.cloud/constellation/cas/sha256/c3811cd13e5ca508b5af6acb9b82cfcaa6e8ed830959de3e0c7d0fc5fd1a8fb7", + "https://github.com/bufbuild/buf/releases/download/v1.49.0/buf-Darwin-x86_64.tar.gz", ], type = "tar.gz", - sha256 = "08d1c72b23ae7f4324e0bdd0a700638235726cc312fc8320cd597bd616f69358", + sha256 = "c3811cd13e5ca508b5af6acb9b82cfcaa6e8ed830959de3e0c7d0fc5fd1a8fb7", ) http_archive( name = "com_github_bufbuild_buf_darwin_arm64", strip_prefix = "buf/bin", build_file_content = """exports_files(["buf"], visibility = ["//visibility:public"])""", urls = [ - "https://cdn.confidential.cloud/constellation/cas/sha256/108c9a6f10167e1fcb753a9f353fc658d25a320b80e1eead8ed31594fbae5de1", - "https://github.com/bufbuild/buf/releases/download/v1.47.2/buf-Darwin-arm64.tar.gz", + "https://cdn.confidential.cloud/constellation/cas/sha256/9e90557dc95c891dd138bd054e5559563cfa3cb677ff4a2d2dad6bef7d326f13", + "https://github.com/bufbuild/buf/releases/download/v1.49.0/buf-Darwin-arm64.tar.gz", ], type = "tar.gz", - sha256 = "108c9a6f10167e1fcb753a9f353fc658d25a320b80e1eead8ed31594fbae5de1", + sha256 = "9e90557dc95c891dd138bd054e5559563cfa3cb677ff4a2d2dad6bef7d326f13", ) def _talos_docgen_deps(): From 0272e7dd156a4565b0962bed5b7f74c4b38b78ad Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 16 Jan 2025 15:29:39 +0100 Subject: [PATCH 051/311] deps: update ghcr.io/edgelesssys/cloud-provider-gcp Docker tag to v30.1.4 (#3579) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- internal/versions/versions.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/versions/versions.go b/internal/versions/versions.go index 6a6aa9664..858ff3ed4 100644 --- a/internal/versions/versions.go +++ b/internal/versions/versions.go @@ -391,7 +391,7 @@ var VersionConfigs = map[ValidK8sVersion]KubernetesVersion{ // Check for newer versions at https://github.com/kubernetes-sigs/cloud-provider-azure/blob/master/README.md. CloudNodeManagerImageAzure: "mcr.microsoft.com/oss/kubernetes/azure-cloud-node-manager:v1.30.7@sha256:f18feb78e36eef88f0e23d98d798476d2bf6837de11892fe118ab043afdcd497", // renovate:container // CloudControllerManagerImageGCP is the CCM image used on GCP. - CloudControllerManagerImageGCP: "ghcr.io/edgelesssys/cloud-provider-gcp:v30.1.0@sha256:64d2d5d4d2b5fb426c307c64ada9a61b64e797b56d9768363f145f2bd957998f", // renovate:container + CloudControllerManagerImageGCP: "ghcr.io/edgelesssys/cloud-provider-gcp:v30.1.4@sha256:0c3695a18d3825492196facb092e5fe56e466fa8517cde5a206fe21630c1da13", // renovate:container // CloudControllerManagerImageOpenStack is the CCM image used on OpenStack. CloudControllerManagerImageOpenStack: "docker.io/k8scloudprovider/openstack-cloud-controller-manager:v1.26.4@sha256:05e846fb13481b6dbe4a1e50491feb219e8f5101af6cf662a086115735624db0", // renovate:container // External service image. Depends on k8s version. From 6ba47d563431f49d77efb92ecc12879e8152fe34 Mon Sep 17 00:00:00 2001 From: Moritz Sanft <58110325+msanft@users.noreply.github.com> Date: Fri, 17 Jan 2025 09:36:48 +0100 Subject: [PATCH 052/311] ci: allow unrestricted user namespaces in image builds (#3587) Since Ubuntu 23.10, creating namespaces, e.g. via `unshare`, requires privileges. Since `unshare` is used by `mkosi` in our image build pipeline, we need to re-enable them explicitly here before building the image, aligning with the behavior before Ubuntu 23.10. --- .github/workflows/build-os-image.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.github/workflows/build-os-image.yml b/.github/workflows/build-os-image.yml index f19419ead..f82aa4504 100644 --- a/.github/workflows/build-os-image.yml +++ b/.github/workflows/build-os-image.yml @@ -167,6 +167,12 @@ jobs: with: clouds_yaml: ${{ secrets.STACKIT_IMAGE_UPLOAD_CLOUDS_YAML }} + - name: Allow unrestricted user namespaces + shell: bash + run: | + sudo sysctl --ignore --write kernel.apparmor_restrict_unprivileged_unconfined=0 + sudo sysctl --ignore --write kernel.apparmor_restrict_unprivileged_userns=0 + - name: Build and upload id: build shell: bash From 1459ab96fe61ec346db1e3670e8f2f340c313407 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 17 Jan 2025 09:58:24 +0100 Subject: [PATCH 053/311] deps: update GitHub action dependencies (#3585) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/actions/artifact_upload/action.yml | 2 +- .github/actions/build_micro_service/action.yml | 2 +- .github/actions/e2e_sonobuoy/action.yml | 2 +- .github/actions/publish_helmchart/action.yml | 2 +- .../actions/upload_terraform_module/action.yml | 2 +- .github/workflows/build-ccm-gcp.yml | 2 +- .github/workflows/build-gcp-guest-agent.yml | 2 +- .github/workflows/build-os-image-scheduled.yml | 2 +- .github/workflows/check-links.yml | 2 +- .github/workflows/codeql.yml | 4 ++-- .github/workflows/draft-release.yml | 16 ++++++++-------- .github/workflows/e2e-upgrade.yml | 2 +- .github/workflows/e2e-windows.yml | 2 +- .github/workflows/release.yml | 2 +- .github/workflows/reproducible-builds.yml | 8 ++++---- .github/workflows/scorecard.yml | 4 ++-- .github/workflows/sync-terraform-docs.yml | 2 +- .github/workflows/test-unittest.yml | 2 +- .github/workflows/update-rpms.yml | 2 +- 19 files changed, 31 insertions(+), 31 deletions(-) diff --git a/.github/actions/artifact_upload/action.yml b/.github/actions/artifact_upload/action.yml index 50974a9fd..76d7c1f03 100644 --- a/.github/actions/artifact_upload/action.yml +++ b/.github/actions/artifact_upload/action.yml @@ -69,7 +69,7 @@ runs: done - name: Upload archive as artifact - uses: actions/upload-artifact@b4b15b8c7c6ac21ea08fcf65892d2ee8f75cf882 # v4.4.3 + uses: actions/upload-artifact@65c4c4a1ddee5b72f698fdd19549f0f0fb45cf08 # v4.6.0 with: name: ${{ inputs.name }} path: ${{ steps.tempdir.outputs.directory }}/archive.7z diff --git a/.github/actions/build_micro_service/action.yml b/.github/actions/build_micro_service/action.yml index e7da91e77..6cf2e3895 100644 --- a/.github/actions/build_micro_service/action.yml +++ b/.github/actions/build_micro_service/action.yml @@ -62,7 +62,7 @@ runs: - name: Build and push container image id: build-micro-service - uses: docker/build-push-action@48aba3b46d1b1fec4febb7c5d0c644b249a11355 # v6.10.0 + uses: docker/build-push-action@67a2d409c0a876cbe6b11854e3e25193efe4e62d # v6.12.0 with: context: . file: ${{ inputs.dockerfile }} diff --git a/.github/actions/e2e_sonobuoy/action.yml b/.github/actions/e2e_sonobuoy/action.yml index b0d89052d..40380f7ad 100644 --- a/.github/actions/e2e_sonobuoy/action.yml +++ b/.github/actions/e2e_sonobuoy/action.yml @@ -70,7 +70,7 @@ runs: - name: Publish test results if: (!env.ACT) && contains(inputs.sonobuoyTestSuiteCmd, '--plugin e2e') - uses: mikepenz/action-junit-report@992d97d6eb2e5f3de985fbf9df6a04386874114d # v5.1.0 + uses: mikepenz/action-junit-report@62516aa379bff6370c95fd5894d5a27fb6619d9b # v5.2.0 with: report_paths: "**/junit_01.xml" fail_on_failure: true diff --git a/.github/actions/publish_helmchart/action.yml b/.github/actions/publish_helmchart/action.yml index 6e8a9f762..3cf193e3d 100644 --- a/.github/actions/publish_helmchart/action.yml +++ b/.github/actions/publish_helmchart/action.yml @@ -29,7 +29,7 @@ runs: echo version=$(yq eval ".version" ${{ inputs.chartPath }}/Chart.yaml) | tee -a $GITHUB_OUTPUT - name: Create pull request - uses: peter-evans/create-pull-request@5e914681df9dc83aa4e4905692ca88beb2f9e91f # v7.0.5 + uses: peter-evans/create-pull-request@67ccf781d68cd99b580ae25a5c18a1cc84ffff1f # v7.0.6 with: path: helm branch: "release/s3proxy/${{ steps.update-chart-version.outputs.version }}" diff --git a/.github/actions/upload_terraform_module/action.yml b/.github/actions/upload_terraform_module/action.yml index 18dd61280..90a067ae2 100644 --- a/.github/actions/upload_terraform_module/action.yml +++ b/.github/actions/upload_terraform_module/action.yml @@ -15,7 +15,7 @@ runs: zip -r terraform-module.zip terraform-module - name: Upload artifact - uses: actions/upload-artifact@b4b15b8c7c6ac21ea08fcf65892d2ee8f75cf882 # v4.4.3 + uses: actions/upload-artifact@65c4c4a1ddee5b72f698fdd19549f0f0fb45cf08 # v4.6.0 with: name: terraform-module path: terraform-module.zip diff --git a/.github/workflows/build-ccm-gcp.yml b/.github/workflows/build-ccm-gcp.yml index e74f71961..a6a434cb7 100644 --- a/.github/workflows/build-ccm-gcp.yml +++ b/.github/workflows/build-ccm-gcp.yml @@ -113,7 +113,7 @@ jobs: - name: Build and push container image id: build - uses: docker/build-push-action@48aba3b46d1b1fec4febb7c5d0c644b249a11355 # v6.10.0 + uses: docker/build-push-action@67a2d409c0a876cbe6b11854e3e25193efe4e62d # v6.12.0 with: context: ./cloud-provider-gcp push: ${{ github.ref_name == 'main' }} diff --git a/.github/workflows/build-gcp-guest-agent.yml b/.github/workflows/build-gcp-guest-agent.yml index f5b734f00..bf9d15c78 100644 --- a/.github/workflows/build-gcp-guest-agent.yml +++ b/.github/workflows/build-gcp-guest-agent.yml @@ -114,7 +114,7 @@ jobs: - name: Build and push container image if: steps.needs-build.outputs.out == 'true' id: build - uses: docker/build-push-action@48aba3b46d1b1fec4febb7c5d0c644b249a11355 # v6.10.0 + uses: docker/build-push-action@67a2d409c0a876cbe6b11854e3e25193efe4e62d # v6.12.0 with: context: ./guest-agent file: ./constellation/3rdparty/gcp-guest-agent/Dockerfile diff --git a/.github/workflows/build-os-image-scheduled.yml b/.github/workflows/build-os-image-scheduled.yml index 8fc51d407..000a57a16 100644 --- a/.github/workflows/build-os-image-scheduled.yml +++ b/.github/workflows/build-os-image-scheduled.yml @@ -97,7 +97,7 @@ jobs: run: rm -f internal/attestation/measurements/measurement-generator/generate - name: Create pull request - uses: peter-evans/create-pull-request@5e914681df9dc83aa4e4905692ca88beb2f9e91f # v7.0.5 + uses: peter-evans/create-pull-request@67ccf781d68cd99b580ae25a5c18a1cc84ffff1f # v7.0.6 with: branch: "image/automated/update-measurements-${{ github.run_number }}" base: main diff --git a/.github/workflows/check-links.yml b/.github/workflows/check-links.yml index d9f97cfaa..5176b7e3e 100644 --- a/.github/workflows/check-links.yml +++ b/.github/workflows/check-links.yml @@ -25,7 +25,7 @@ jobs: ref: ${{ !github.event.pull_request.head.repo.fork && github.head_ref || '' }} - name: Link Checker - uses: lycheeverse/lychee-action@f81112d0d2814ded911bd23e3beaa9dda9093915 # v2.1.0 + uses: lycheeverse/lychee-action@f796c8b7d468feb9b8c0a46da3fac0af6874d374 # v2.2.0 with: args: "--config ./.lychee.toml './**/*.md' './**/*.html'" fail: true diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index d206fa4fa..1f140931c 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -44,7 +44,7 @@ jobs: cache: false - name: Initialize CodeQL - uses: github/codeql-action/init@df409f7d9260372bd5f19e5b04e83cb3c43714ae # v3.27.9 + uses: github/codeql-action/init@b6a472f63d85b9c78a3ac5e89422239fc15e9b3c # v3.28.1 with: languages: ${{ matrix.language }} @@ -63,6 +63,6 @@ jobs: echo "::endgroup::" - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@df409f7d9260372bd5f19e5b04e83cb3c43714ae # v3.27.9 + uses: github/codeql-action/analyze@b6a472f63d85b9c78a3ac5e89422239fc15e9b3c # v3.28.1 with: category: "/language:${{ matrix.language }}" diff --git a/.github/workflows/draft-release.yml b/.github/workflows/draft-release.yml index 38612425c..c82555570 100644 --- a/.github/workflows/draft-release.yml +++ b/.github/workflows/draft-release.yml @@ -92,7 +92,7 @@ jobs: cosignPassword: ${{ inputs.key == 'release' && secrets.COSIGN_PASSWORD || secrets.COSIGN_DEV_PASSWORD }} - name: Upload CLI as artifact (unix) - uses: actions/upload-artifact@b4b15b8c7c6ac21ea08fcf65892d2ee8f75cf882 # v4.4.3 + uses: actions/upload-artifact@65c4c4a1ddee5b72f698fdd19549f0f0fb45cf08 # v4.6.0 if : ${{ matrix.os != 'windows' }} with: name: constellation-${{ matrix.os }}-${{ matrix.arch }} @@ -101,7 +101,7 @@ jobs: build/constellation-${{ matrix.os }}-${{ matrix.arch }}.sig - name: Upload CLI as artifact (windows) - uses: actions/upload-artifact@b4b15b8c7c6ac21ea08fcf65892d2ee8f75cf882 # v4.4.3 + uses: actions/upload-artifact@65c4c4a1ddee5b72f698fdd19549f0f0fb45cf08 # v4.6.0 if : ${{ matrix.os == 'windows' }} with: name: constellation-${{ matrix.os }}-${{ matrix.arch }} @@ -149,7 +149,7 @@ jobs: targetArch: ${{ matrix.arch }} - name: Upload Terraform Provider Binary as artifact (unix) - uses: actions/upload-artifact@b4b15b8c7c6ac21ea08fcf65892d2ee8f75cf882 # v4.4.3 + uses: actions/upload-artifact@65c4c4a1ddee5b72f698fdd19549f0f0fb45cf08 # v4.6.0 if : ${{ matrix.os != 'windows' }} with: name: terraform-provider-constellation-${{ matrix.os }}-${{ matrix.arch }} @@ -157,7 +157,7 @@ jobs: build/terraform-provider-constellation-${{ matrix.os }}-${{ matrix.arch }} - name: Upload Terraform Provider Binary as artifact (windows) - uses: actions/upload-artifact@b4b15b8c7c6ac21ea08fcf65892d2ee8f75cf882 # v4.4.3 + uses: actions/upload-artifact@65c4c4a1ddee5b72f698fdd19549f0f0fb45cf08 # v4.6.0 if : ${{ matrix.os == 'windows' }} with: name: terraform-provider-constellation-${{ matrix.os }}-${{ matrix.arch }} @@ -296,13 +296,13 @@ jobs: COSIGN_PASSWORD: ${{ inputs.key == 'release' && secrets.COSIGN_PASSWORD || secrets.COSIGN_DEV_PASSWORD }} - name: Upload Constellation CLI SBOM - uses: actions/upload-artifact@b4b15b8c7c6ac21ea08fcf65892d2ee8f75cf882 # v4.4.3 + uses: actions/upload-artifact@65c4c4a1ddee5b72f698fdd19549f0f0fb45cf08 # v4.6.0 with: name: constellation.spdx.sbom path: constellation.spdx.sbom - name: Upload Constellation CLI SBOM's signature - uses: actions/upload-artifact@b4b15b8c7c6ac21ea08fcf65892d2ee8f75cf882 # v4.4.3 + uses: actions/upload-artifact@65c4c4a1ddee5b72f698fdd19549f0f0fb45cf08 # v4.6.0 with: name: constellation.spdx.sbom.sig path: constellation.spdx.sbom.sig @@ -472,7 +472,7 @@ jobs: - name: Create release with artifacts id: create-release # GitHub endorsed release project. See: https://github.com/actions/create-release - uses: softprops/action-gh-release@7b4da11513bf3f43f9999e90eabced41ab8bb048 # v2.2.0 + uses: softprops/action-gh-release@c95fe1489396fe8a9eb87c0abf8aa5b2ef267fda # v2.2.1 with: draft: true generate_release_notes: true @@ -487,7 +487,7 @@ jobs: terraform-module.zip - name: Create Terraform provider release with artifcats - uses: softprops/action-gh-release@7b4da11513bf3f43f9999e90eabced41ab8bb048 # v2.2.0 + uses: softprops/action-gh-release@c95fe1489396fe8a9eb87c0abf8aa5b2ef267fda # v2.2.1 with: draft: true generate_release_notes: false diff --git a/.github/workflows/e2e-upgrade.yml b/.github/workflows/e2e-upgrade.yml index 5e50ec87e..2f5a49098 100644 --- a/.github/workflows/e2e-upgrade.yml +++ b/.github/workflows/e2e-upgrade.yml @@ -268,7 +268,7 @@ jobs: push: true - name: Upload CLI binary # is needed for the cleanup step - uses: actions/upload-artifact@b4b15b8c7c6ac21ea08fcf65892d2ee8f75cf882 # v4.4.3 + uses: actions/upload-artifact@65c4c4a1ddee5b72f698fdd19549f0f0fb45cf08 # v4.6.0 with: name: constellation-upgrade-${{ inputs.attestationVariant }} path: build/constellation diff --git a/.github/workflows/e2e-windows.yml b/.github/workflows/e2e-windows.yml index 26ee8833b..e9f377596 100644 --- a/.github/workflows/e2e-windows.yml +++ b/.github/workflows/e2e-windows.yml @@ -45,7 +45,7 @@ jobs: push: true - name: Upload CLI artifact - uses: actions/upload-artifact@b4b15b8c7c6ac21ea08fcf65892d2ee8f75cf882 # v4.4.3 + uses: actions/upload-artifact@65c4c4a1ddee5b72f698fdd19549f0f0fb45cf08 # v4.6.0 with: path: build/constellation.exe name: "constell-exe" diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 9bb70b043..fffe4febe 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -118,7 +118,7 @@ jobs: sed -i 's/fromVersion: \["[^"]*"\]/fromVersion: ["${{ inputs.version }}"]/g' .github/workflows/e2e-test-weekly.yml - name: Create docs pull request - uses: peter-evans/create-pull-request@5e914681df9dc83aa4e4905692ca88beb2f9e91f # v7.0.5 + uses: peter-evans/create-pull-request@67ccf781d68cd99b580ae25a5c18a1cc84ffff1f # v7.0.6 with: branch: ${{ env.BRANCH }} base: main diff --git a/.github/workflows/reproducible-builds.yml b/.github/workflows/reproducible-builds.yml index d0ff8a129..2307f6084 100644 --- a/.github/workflows/reproducible-builds.yml +++ b/.github/workflows/reproducible-builds.yml @@ -80,13 +80,13 @@ jobs: run: shasum -a 256 "${binary}" | tee "${binary}.sha256" - name: Upload binary artifact - uses: actions/upload-artifact@b4b15b8c7c6ac21ea08fcf65892d2ee8f75cf882 # v4.4.3 + uses: actions/upload-artifact@65c4c4a1ddee5b72f698fdd19549f0f0fb45cf08 # v4.6.0 with: name: "binaries-${{ matrix.target }}-${{ matrix.runner }}-${{ matrix.deps }}" path: "${{ env.binary }}" - name: Upload hash artifact - uses: actions/upload-artifact@b4b15b8c7c6ac21ea08fcf65892d2ee8f75cf882 # v4.4.3 + uses: actions/upload-artifact@65c4c4a1ddee5b72f698fdd19549f0f0fb45cf08 # v4.6.0 with: name: "sha256sums-${{ matrix.target }}-${{ matrix.runner }}-${{ matrix.deps }}" path: "${{ env.binary }}.sha256" @@ -145,13 +145,13 @@ jobs: run: shasum -a 256 "${binary}" | tee "${binary}.sha256" - name: Upload binary artifact - uses: actions/upload-artifact@b4b15b8c7c6ac21ea08fcf65892d2ee8f75cf882 # v4.4.3 + uses: actions/upload-artifact@65c4c4a1ddee5b72f698fdd19549f0f0fb45cf08 # v4.6.0 with: name: "osimages-${{ matrix.target }}-${{ matrix.runner }}" path: "${{ env.binary }}" - name: Upload hash artifact - uses: actions/upload-artifact@b4b15b8c7c6ac21ea08fcf65892d2ee8f75cf882 # v4.4.3 + uses: actions/upload-artifact@65c4c4a1ddee5b72f698fdd19549f0f0fb45cf08 # v4.6.0 with: name: "sha256sums-${{ matrix.target }}-${{ matrix.runner }}" path: "${{ env.binary }}.sha256" diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml index ac2bc5817..7b18e3a73 100644 --- a/.github/workflows/scorecard.yml +++ b/.github/workflows/scorecard.yml @@ -30,13 +30,13 @@ jobs: publish_results: true - name: Upload artifact - uses: actions/upload-artifact@b4b15b8c7c6ac21ea08fcf65892d2ee8f75cf882 # v4.4.3 + uses: actions/upload-artifact@65c4c4a1ddee5b72f698fdd19549f0f0fb45cf08 # v4.6.0 with: name: SARIF file path: results.sarif retention-days: 5 - name: Upload to code-scanning - uses: github/codeql-action/upload-sarif@df409f7d9260372bd5f19e5b04e83cb3c43714ae # v3.27.9 + uses: github/codeql-action/upload-sarif@b6a472f63d85b9c78a3ac5e89422239fc15e9b3c # v3.28.1 with: sarif_file: results.sarif diff --git a/.github/workflows/sync-terraform-docs.yml b/.github/workflows/sync-terraform-docs.yml index 6b9be623d..36ef698b5 100644 --- a/.github/workflows/sync-terraform-docs.yml +++ b/.github/workflows/sync-terraform-docs.yml @@ -40,7 +40,7 @@ jobs: - name: Create pull request id: create-pull-request - uses: peter-evans/create-pull-request@5e914681df9dc83aa4e4905692ca88beb2f9e91f # v7.0.5 + uses: peter-evans/create-pull-request@67ccf781d68cd99b580ae25a5c18a1cc84ffff1f # v7.0.6 with: path: terraform-provider-constellation branch: "feat/docs/update" diff --git a/.github/workflows/test-unittest.yml b/.github/workflows/test-unittest.yml index b676e7dca..0f0a0054c 100644 --- a/.github/workflows/test-unittest.yml +++ b/.github/workflows/test-unittest.yml @@ -69,7 +69,7 @@ jobs: - name: Comment coverage if: steps.coverage.outputs.uploadable == 'true' && github.event_name == 'pull_request' - uses: marocchino/sticky-pull-request-comment@331f8f5b4215f0445d3c07b4967662a32a2d3e31 # v2.9.0 + uses: marocchino/sticky-pull-request-comment@52423e01640425a022ef5fd42c6fb5f633a02728 # v2.9.1 with: header: coverage path: coverage_diff.md diff --git a/.github/workflows/update-rpms.yml b/.github/workflows/update-rpms.yml index bd30519ef..411a6cc73 100644 --- a/.github/workflows/update-rpms.yml +++ b/.github/workflows/update-rpms.yml @@ -39,7 +39,7 @@ jobs: fi - name: Create pull request - uses: peter-evans/create-pull-request@5e914681df9dc83aa4e4905692ca88beb2f9e91f # v7.0.5 + uses: peter-evans/create-pull-request@67ccf781d68cd99b580ae25a5c18a1cc84ffff1f # v7.0.6 with: branch: "image/automated/update-rpms-${{ github.run_number }}" base: main From 405d0c615484391459b228ff679f691f0737471c Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 17 Jan 2025 10:43:07 +0100 Subject: [PATCH 054/311] deps: update bazel (modules) (#3582) * deps: update bazel (modules) * deps: tidy all modules --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: edgelessci --- MODULE.bazel | 6 +- MODULE.bazel.lock | 516 +----------------- bootstrapper/initproto/init.pb.go | 2 +- debugd/service/debugd.pb.go | 2 +- disk-mapper/recoverproto/recover.pb.go | 2 +- internal/versions/components/components.pb.go | 2 +- joinservice/joinproto/join.pb.go | 2 +- keyservice/keyserviceproto/keyservice.pb.go | 2 +- upgrade-agent/upgradeproto/upgrade.pb.go | 2 +- verify/verifyproto/verify.pb.go | 2 +- 10 files changed, 37 insertions(+), 501 deletions(-) diff --git a/MODULE.bazel b/MODULE.bazel index 9fa8bd7ac..51330d2f2 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -1,6 +1,6 @@ module(name = "constellation") -bazel_dep(name = "aspect_bazel_lib", version = "2.9.4") +bazel_dep(name = "aspect_bazel_lib", version = "2.11.0") bazel_lib = use_extension("@aspect_bazel_lib//lib:extensions.bzl", "toolchains") bazel_lib.yq() @@ -13,8 +13,8 @@ bazel_dep(name = "hermetic_cc_toolchain", version = "3.1.1") bazel_dep(name = "rules_cc", version = "0.1.0") bazel_dep(name = "rules_go", version = "0.50.1", repo_name = "io_bazel_rules_go") bazel_dep(name = "rules_pkg", version = "1.0.1") -bazel_dep(name = "rules_proto", version = "7.0.2") -bazel_dep(name = "rules_python", version = "1.0.0") +bazel_dep(name = "rules_proto", version = "7.1.0") +bazel_dep(name = "rules_python", version = "1.1.0") bazel_dep(name = "buildifier_prebuilt", version = "7.3.1", dev_dependency = True) diff --git a/MODULE.bazel.lock b/MODULE.bazel.lock index ff7fc36a3..e3ebce558 100644 --- a/MODULE.bazel.lock +++ b/MODULE.bazel.lock @@ -12,8 +12,8 @@ "https://bcr.bazel.build/modules/abseil-cpp/20240116.1/source.json": "9be551b8d4e3ef76875c0d744b5d6a504a27e3ae67bc6b28f46415fd2d2957da", "https://bcr.bazel.build/modules/apple_support/1.5.0/MODULE.bazel": "50341a62efbc483e8a2a6aec30994a58749bd7b885e18dd96aa8c33031e558ef", "https://bcr.bazel.build/modules/apple_support/1.5.0/source.json": "eb98a7627c0bc486b57f598ad8da50f6625d974c8f723e9ea71bd39f709c9862", - "https://bcr.bazel.build/modules/aspect_bazel_lib/2.9.4/MODULE.bazel": "ccc41028429f894b02fde7ef67d416cba3ba5084ed9ddb9bb6107aa82d118776", - "https://bcr.bazel.build/modules/aspect_bazel_lib/2.9.4/source.json": "9e20ebe57de2e7657a188af6e132a9562fa26c201b2d999bc0a8981e8f3b6c36", + "https://bcr.bazel.build/modules/aspect_bazel_lib/2.11.0/MODULE.bazel": "cb1ba9f9999ed0bc08600c221f532c1ddd8d217686b32ba7d45b0713b5131452", + "https://bcr.bazel.build/modules/aspect_bazel_lib/2.11.0/source.json": "92494d5aa43b96665397dd13ee16023097470fa85e276b93674d62a244de47ee", "https://bcr.bazel.build/modules/bazel_features/1.1.0/MODULE.bazel": "cfd42ff3b815a5f39554d97182657f8c4b9719568eb7fded2b9135f084bf760b", "https://bcr.bazel.build/modules/bazel_features/1.1.1/MODULE.bazel": "27b8c79ef57efe08efccbd9dd6ef70d61b4798320b8d3c134fd571f78963dbcd", "https://bcr.bazel.build/modules/bazel_features/1.11.0/MODULE.bazel": "f9382337dd5a474c3b7d334c2f83e50b6eaedc284253334cf823044a26de03e8", @@ -24,6 +24,7 @@ "https://bcr.bazel.build/modules/bazel_features/1.21.0/MODULE.bazel": "675642261665d8eea09989aa3b8afb5c37627f1be178382c320d1b46afba5e3b", "https://bcr.bazel.build/modules/bazel_features/1.21.0/source.json": "3e8379efaaef53ce35b7b8ba419df829315a880cb0a030e5bb45c96d6d5ecb5f", "https://bcr.bazel.build/modules/bazel_features/1.4.1/MODULE.bazel": "e45b6bb2350aff3e442ae1111c555e27eac1d915e77775f6fdc4b351b758b5d7", + "https://bcr.bazel.build/modules/bazel_features/1.9.0/MODULE.bazel": "885151d58d90d8d9c811eb75e3288c11f850e1d6b481a8c9f766adee4712358b", "https://bcr.bazel.build/modules/bazel_features/1.9.1/MODULE.bazel": "8f679097876a9b609ad1f60249c49d68bfab783dd9be012faf9d82547b14815a", "https://bcr.bazel.build/modules/bazel_skylib/1.0.3/MODULE.bazel": "bcb0fd896384802d1ad283b4e4eb4d718eebd8cb820b0a2c3a347fb971afd9d8", "https://bcr.bazel.build/modules/bazel_skylib/1.1.1/MODULE.bazel": "1add3e7d93ff2e6998f9e118022c84d163917d912f5afafb3058e3d2f1545b5e", @@ -70,7 +71,8 @@ "https://bcr.bazel.build/modules/protobuf/27.1/MODULE.bazel": "703a7b614728bb06647f965264967a8ef1c39e09e8f167b3ca0bb1fd80449c0d", "https://bcr.bazel.build/modules/protobuf/29.0-rc2/MODULE.bazel": "6241d35983510143049943fc0d57937937122baf1b287862f9dc8590fc4c37df", "https://bcr.bazel.build/modules/protobuf/29.0-rc3/MODULE.bazel": "33c2dfa286578573afc55a7acaea3cada4122b9631007c594bf0729f41c8de92", - "https://bcr.bazel.build/modules/protobuf/29.0-rc3/source.json": "c16a6488fb279ef578da7098e605082d72ed85fc8d843eaae81e7d27d0f4625d", + "https://bcr.bazel.build/modules/protobuf/29.1/MODULE.bazel": "557c3457560ff49e122ed76c0bc3397a64af9574691cb8201b4e46d4ab2ecb95", + "https://bcr.bazel.build/modules/protobuf/29.1/source.json": "04cca85dce26b895ed037d98336d860367fe09919208f2ad383f0df1aff63199", "https://bcr.bazel.build/modules/protobuf/3.19.0/MODULE.bazel": "6b5fbb433f760a99a22b18b6850ed5784ef0e9928a72668b66e4d7ccd47db9b0", "https://bcr.bazel.build/modules/protobuf/3.19.2/MODULE.bazel": "532ffe5f2186b69fdde039efe6df13ba726ff338c6bc82275ad433013fa10573", "https://bcr.bazel.build/modules/protobuf/3.19.6/MODULE.bazel": "9233edc5e1f2ee276a60de3eaa47ac4132302ef9643238f23128fea53ea12858", @@ -130,7 +132,8 @@ "https://bcr.bazel.build/modules/rules_proto/6.0.0/MODULE.bazel": "b531d7f09f58dce456cd61b4579ce8c86b38544da75184eadaf0a7cb7966453f", "https://bcr.bazel.build/modules/rules_proto/6.0.2/MODULE.bazel": "ce916b775a62b90b61888052a416ccdda405212b6aaeb39522f7dc53431a5e73", "https://bcr.bazel.build/modules/rules_proto/7.0.2/MODULE.bazel": "bf81793bd6d2ad89a37a40693e56c61b0ee30f7a7fdbaf3eabbf5f39de47dea2", - "https://bcr.bazel.build/modules/rules_proto/7.0.2/source.json": "1e5e7260ae32ef4f2b52fd1d0de8d03b606a44c91b694d2f1afb1d3b28a48ce1", + "https://bcr.bazel.build/modules/rules_proto/7.1.0/MODULE.bazel": "002d62d9108f75bb807cd56245d45648f38275cb3a99dcd45dfb864c5d74cb96", + "https://bcr.bazel.build/modules/rules_proto/7.1.0/source.json": "39f89066c12c24097854e8f57ab8558929f9c8d474d34b2c00ac04630ad8940e", "https://bcr.bazel.build/modules/rules_python/0.10.2/MODULE.bazel": "cc82bc96f2997baa545ab3ce73f196d040ffb8756fd2d66125a530031cd90e5f", "https://bcr.bazel.build/modules/rules_python/0.22.1/MODULE.bazel": "26114f0c0b5e93018c0c066d6673f1a2c3737c7e90af95eff30cfee38d0bbac7", "https://bcr.bazel.build/modules/rules_python/0.23.1/MODULE.bazel": "49ffccf0511cb8414de28321f5fcf2a31312b47c40cc21577144b7447f2bf300", @@ -138,8 +141,8 @@ "https://bcr.bazel.build/modules/rules_python/0.28.0/MODULE.bazel": "cba2573d870babc976664a912539b320cbaa7114cd3e8f053c720171cde331ed", "https://bcr.bazel.build/modules/rules_python/0.31.0/MODULE.bazel": "93a43dc47ee570e6ec9f5779b2e64c1476a6ce921c48cc9a1678a91dd5f8fd58", "https://bcr.bazel.build/modules/rules_python/0.4.0/MODULE.bazel": "9208ee05fd48bf09ac60ed269791cf17fb343db56c8226a720fbb1cdf467166c", - "https://bcr.bazel.build/modules/rules_python/1.0.0/MODULE.bazel": "898a3d999c22caa585eb062b600f88654bf92efb204fa346fb55f6f8edffca43", - "https://bcr.bazel.build/modules/rules_python/1.0.0/source.json": "b0162a65c6312e45e7912e39abd1a7f8856c2c7e41ecc9b6dc688a6f6400a917", + "https://bcr.bazel.build/modules/rules_python/1.1.0/MODULE.bazel": "57e01abae22956eb96d891572490d20e07d983e0c065de0b2170cafe5053e788", + "https://bcr.bazel.build/modules/rules_python/1.1.0/source.json": "29f1fdfd23a40808c622f813bc93e29c3aae277333f03293f667e76159750a0f", "https://bcr.bazel.build/modules/rules_shell/0.2.0/MODULE.bazel": "fda8a652ab3c7d8fee214de05e7a9916d8b28082234e8d2c0094505c5268ed3c", "https://bcr.bazel.build/modules/rules_shell/0.2.0/source.json": "7f27af3c28037d9701487c4744b5448d26537cc66cdef0d8df7ae85411f8de95", "https://bcr.bazel.build/modules/stardoc/0.5.1/MODULE.bazel": "1a05d92974d0c122f5ccf09291442580317cdd859f07a8655f1db9a60374f9f8", @@ -185,473 +188,6 @@ ] } }, - "@@aspect_bazel_lib~//lib:extensions.bzl%toolchains": { - "general": { - "bzlTransitiveDigest": "v/pDtu7D4JNhqSOpd0zDAszKx5LE3MDNfIkE9hCiRxI=", - "usagesDigest": "fYLdjLLbgBMhAlI35ZKH2Yam9HsDB1PQd1QXgFMDmCc=", - "recordedFileInputs": {}, - "recordedDirentsInputs": {}, - "envVariables": {}, - "generatedRepoSpecs": { - "copy_directory_darwin_amd64": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:copy_directory_toolchain.bzl", - "ruleClassName": "copy_directory_platform_repo", - "attributes": { - "platform": "darwin_amd64" - } - }, - "copy_directory_darwin_arm64": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:copy_directory_toolchain.bzl", - "ruleClassName": "copy_directory_platform_repo", - "attributes": { - "platform": "darwin_arm64" - } - }, - "copy_directory_freebsd_amd64": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:copy_directory_toolchain.bzl", - "ruleClassName": "copy_directory_platform_repo", - "attributes": { - "platform": "freebsd_amd64" - } - }, - "copy_directory_linux_amd64": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:copy_directory_toolchain.bzl", - "ruleClassName": "copy_directory_platform_repo", - "attributes": { - "platform": "linux_amd64" - } - }, - "copy_directory_linux_arm64": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:copy_directory_toolchain.bzl", - "ruleClassName": "copy_directory_platform_repo", - "attributes": { - "platform": "linux_arm64" - } - }, - "copy_directory_windows_amd64": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:copy_directory_toolchain.bzl", - "ruleClassName": "copy_directory_platform_repo", - "attributes": { - "platform": "windows_amd64" - } - }, - "copy_directory_toolchains": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:copy_directory_toolchain.bzl", - "ruleClassName": "copy_directory_toolchains_repo", - "attributes": { - "user_repository_name": "copy_directory" - } - }, - "copy_to_directory_darwin_amd64": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:copy_to_directory_toolchain.bzl", - "ruleClassName": "copy_to_directory_platform_repo", - "attributes": { - "platform": "darwin_amd64" - } - }, - "copy_to_directory_darwin_arm64": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:copy_to_directory_toolchain.bzl", - "ruleClassName": "copy_to_directory_platform_repo", - "attributes": { - "platform": "darwin_arm64" - } - }, - "copy_to_directory_freebsd_amd64": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:copy_to_directory_toolchain.bzl", - "ruleClassName": "copy_to_directory_platform_repo", - "attributes": { - "platform": "freebsd_amd64" - } - }, - "copy_to_directory_linux_amd64": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:copy_to_directory_toolchain.bzl", - "ruleClassName": "copy_to_directory_platform_repo", - "attributes": { - "platform": "linux_amd64" - } - }, - "copy_to_directory_linux_arm64": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:copy_to_directory_toolchain.bzl", - "ruleClassName": "copy_to_directory_platform_repo", - "attributes": { - "platform": "linux_arm64" - } - }, - "copy_to_directory_windows_amd64": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:copy_to_directory_toolchain.bzl", - "ruleClassName": "copy_to_directory_platform_repo", - "attributes": { - "platform": "windows_amd64" - } - }, - "copy_to_directory_toolchains": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:copy_to_directory_toolchain.bzl", - "ruleClassName": "copy_to_directory_toolchains_repo", - "attributes": { - "user_repository_name": "copy_to_directory" - } - }, - "jq_darwin_amd64": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:jq_toolchain.bzl", - "ruleClassName": "jq_platform_repo", - "attributes": { - "platform": "darwin_amd64", - "version": "1.7" - } - }, - "jq_darwin_arm64": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:jq_toolchain.bzl", - "ruleClassName": "jq_platform_repo", - "attributes": { - "platform": "darwin_arm64", - "version": "1.7" - } - }, - "jq_linux_amd64": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:jq_toolchain.bzl", - "ruleClassName": "jq_platform_repo", - "attributes": { - "platform": "linux_amd64", - "version": "1.7" - } - }, - "jq_linux_arm64": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:jq_toolchain.bzl", - "ruleClassName": "jq_platform_repo", - "attributes": { - "platform": "linux_arm64", - "version": "1.7" - } - }, - "jq_windows_amd64": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:jq_toolchain.bzl", - "ruleClassName": "jq_platform_repo", - "attributes": { - "platform": "windows_amd64", - "version": "1.7" - } - }, - "jq": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:jq_toolchain.bzl", - "ruleClassName": "jq_host_alias_repo", - "attributes": {} - }, - "jq_toolchains": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:jq_toolchain.bzl", - "ruleClassName": "jq_toolchains_repo", - "attributes": { - "user_repository_name": "jq" - } - }, - "yq_darwin_amd64": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:yq_toolchain.bzl", - "ruleClassName": "yq_platform_repo", - "attributes": { - "platform": "darwin_amd64", - "version": "4.25.2" - } - }, - "yq_darwin_arm64": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:yq_toolchain.bzl", - "ruleClassName": "yq_platform_repo", - "attributes": { - "platform": "darwin_arm64", - "version": "4.25.2" - } - }, - "yq_linux_amd64": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:yq_toolchain.bzl", - "ruleClassName": "yq_platform_repo", - "attributes": { - "platform": "linux_amd64", - "version": "4.25.2" - } - }, - "yq_linux_arm64": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:yq_toolchain.bzl", - "ruleClassName": "yq_platform_repo", - "attributes": { - "platform": "linux_arm64", - "version": "4.25.2" - } - }, - "yq_linux_s390x": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:yq_toolchain.bzl", - "ruleClassName": "yq_platform_repo", - "attributes": { - "platform": "linux_s390x", - "version": "4.25.2" - } - }, - "yq_linux_ppc64le": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:yq_toolchain.bzl", - "ruleClassName": "yq_platform_repo", - "attributes": { - "platform": "linux_ppc64le", - "version": "4.25.2" - } - }, - "yq_windows_amd64": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:yq_toolchain.bzl", - "ruleClassName": "yq_platform_repo", - "attributes": { - "platform": "windows_amd64", - "version": "4.25.2" - } - }, - "yq": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:yq_toolchain.bzl", - "ruleClassName": "yq_host_alias_repo", - "attributes": {} - }, - "yq_toolchains": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:yq_toolchain.bzl", - "ruleClassName": "yq_toolchains_repo", - "attributes": { - "user_repository_name": "yq" - } - }, - "coreutils_darwin_amd64": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:coreutils_toolchain.bzl", - "ruleClassName": "coreutils_platform_repo", - "attributes": { - "platform": "darwin_amd64", - "version": "0.0.27" - } - }, - "coreutils_darwin_arm64": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:coreutils_toolchain.bzl", - "ruleClassName": "coreutils_platform_repo", - "attributes": { - "platform": "darwin_arm64", - "version": "0.0.27" - } - }, - "coreutils_linux_amd64": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:coreutils_toolchain.bzl", - "ruleClassName": "coreutils_platform_repo", - "attributes": { - "platform": "linux_amd64", - "version": "0.0.27" - } - }, - "coreutils_linux_arm64": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:coreutils_toolchain.bzl", - "ruleClassName": "coreutils_platform_repo", - "attributes": { - "platform": "linux_arm64", - "version": "0.0.27" - } - }, - "coreutils_windows_amd64": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:coreutils_toolchain.bzl", - "ruleClassName": "coreutils_platform_repo", - "attributes": { - "platform": "windows_amd64", - "version": "0.0.27" - } - }, - "coreutils_toolchains": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:coreutils_toolchain.bzl", - "ruleClassName": "coreutils_toolchains_repo", - "attributes": { - "user_repository_name": "coreutils" - } - }, - "bsd_tar_darwin_amd64": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:tar_toolchain.bzl", - "ruleClassName": "bsdtar_binary_repo", - "attributes": { - "platform": "darwin_amd64" - } - }, - "bsd_tar_darwin_arm64": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:tar_toolchain.bzl", - "ruleClassName": "bsdtar_binary_repo", - "attributes": { - "platform": "darwin_arm64" - } - }, - "bsd_tar_linux_amd64": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:tar_toolchain.bzl", - "ruleClassName": "bsdtar_binary_repo", - "attributes": { - "platform": "linux_amd64" - } - }, - "bsd_tar_linux_arm64": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:tar_toolchain.bzl", - "ruleClassName": "bsdtar_binary_repo", - "attributes": { - "platform": "linux_arm64" - } - }, - "bsd_tar_windows_amd64": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:tar_toolchain.bzl", - "ruleClassName": "bsdtar_binary_repo", - "attributes": { - "platform": "windows_amd64" - } - }, - "bsd_tar_toolchains": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:tar_toolchain.bzl", - "ruleClassName": "tar_toolchains_repo", - "attributes": { - "user_repository_name": "bsd_tar" - } - }, - "zstd_darwin_amd64": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:zstd_toolchain.bzl", - "ruleClassName": "zstd_binary_repo", - "attributes": { - "platform": "darwin_amd64" - } - }, - "zstd_darwin_arm64": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:zstd_toolchain.bzl", - "ruleClassName": "zstd_binary_repo", - "attributes": { - "platform": "darwin_arm64" - } - }, - "zstd_linux_amd64": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:zstd_toolchain.bzl", - "ruleClassName": "zstd_binary_repo", - "attributes": { - "platform": "linux_amd64" - } - }, - "zstd_linux_arm64": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:zstd_toolchain.bzl", - "ruleClassName": "zstd_binary_repo", - "attributes": { - "platform": "linux_arm64" - } - }, - "zstd_toolchains": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:zstd_toolchain.bzl", - "ruleClassName": "zstd_toolchains_repo", - "attributes": { - "user_repository_name": "zstd" - } - }, - "expand_template_darwin_amd64": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:expand_template_toolchain.bzl", - "ruleClassName": "expand_template_platform_repo", - "attributes": { - "platform": "darwin_amd64" - } - }, - "expand_template_darwin_arm64": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:expand_template_toolchain.bzl", - "ruleClassName": "expand_template_platform_repo", - "attributes": { - "platform": "darwin_arm64" - } - }, - "expand_template_freebsd_amd64": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:expand_template_toolchain.bzl", - "ruleClassName": "expand_template_platform_repo", - "attributes": { - "platform": "freebsd_amd64" - } - }, - "expand_template_linux_amd64": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:expand_template_toolchain.bzl", - "ruleClassName": "expand_template_platform_repo", - "attributes": { - "platform": "linux_amd64" - } - }, - "expand_template_linux_arm64": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:expand_template_toolchain.bzl", - "ruleClassName": "expand_template_platform_repo", - "attributes": { - "platform": "linux_arm64" - } - }, - "expand_template_windows_amd64": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:expand_template_toolchain.bzl", - "ruleClassName": "expand_template_platform_repo", - "attributes": { - "platform": "windows_amd64" - } - }, - "expand_template_toolchains": { - "bzlFile": "@@aspect_bazel_lib~//lib/private:expand_template_toolchain.bzl", - "ruleClassName": "expand_template_toolchains_repo", - "attributes": { - "user_repository_name": "expand_template" - } - }, - "bats_support": { - "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", - "ruleClassName": "http_archive", - "attributes": { - "sha256": "7815237aafeb42ddcc1b8c698fc5808026d33317d8701d5ec2396e9634e2918f", - "urls": [ - "https://github.com/bats-core/bats-support/archive/v0.3.0.tar.gz" - ], - "strip_prefix": "bats-support-0.3.0", - "build_file_content": "load(\"@aspect_bazel_lib//lib:copy_to_directory.bzl\", \"copy_to_directory\")\n\ncopy_to_directory(\n name = \"support\",\n hardlink = \"on\",\n srcs = glob([\n \"src/**\",\n \"load.bash\",\n ]),\n out = \"bats-support\",\n visibility = [\"//visibility:public\"]\n)\n" - } - }, - "bats_assert": { - "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", - "ruleClassName": "http_archive", - "attributes": { - "sha256": "98ca3b685f8b8993e48ec057565e6e2abcc541034ed5b0e81f191505682037fd", - "urls": [ - "https://github.com/bats-core/bats-assert/archive/v2.1.0.tar.gz" - ], - "strip_prefix": "bats-assert-2.1.0", - "build_file_content": "load(\"@aspect_bazel_lib//lib:copy_to_directory.bzl\", \"copy_to_directory\")\n\ncopy_to_directory(\n name = \"assert\",\n hardlink = \"on\",\n srcs = glob([\n \"src/**\",\n \"load.bash\",\n ]),\n out = \"bats-assert\",\n visibility = [\"//visibility:public\"]\n)\n" - } - }, - "bats_file": { - "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", - "ruleClassName": "http_archive", - "attributes": { - "sha256": "9b69043241f3af1c2d251f89b4fcafa5df3f05e97b89db18d7c9bdf5731bb27a", - "urls": [ - "https://github.com/bats-core/bats-file/archive/v0.4.0.tar.gz" - ], - "strip_prefix": "bats-file-0.4.0", - "build_file_content": "load(\"@aspect_bazel_lib//lib:copy_to_directory.bzl\", \"copy_to_directory\")\n\ncopy_to_directory(\n name = \"file\",\n hardlink = \"on\",\n srcs = glob([\n \"src/**\",\n \"load.bash\",\n ]),\n out = \"bats-file\",\n visibility = [\"//visibility:public\"]\n)\n" - } - }, - "bats_toolchains": { - "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", - "ruleClassName": "http_archive", - "attributes": { - "sha256": "a1a9f7875aa4b6a9480ca384d5865f1ccf1b0b1faead6b47aa47d79709a5c5fd", - "urls": [ - "https://github.com/bats-core/bats-core/archive/v1.10.0.tar.gz" - ], - "strip_prefix": "bats-core-1.10.0", - "build_file_content": "load(\"@local_config_platform//:constraints.bzl\", \"HOST_CONSTRAINTS\")\nload(\"@aspect_bazel_lib//lib/private:bats_toolchain.bzl\", \"bats_toolchain\")\nload(\"@aspect_bazel_lib//lib:copy_to_directory.bzl\", \"copy_to_directory\")\n\ncopy_to_directory(\n name = \"core\",\n hardlink = \"on\",\n srcs = glob([\n \"lib/**\",\n \"libexec/**\"\n ]) + [\"bin/bats\"],\n out = \"bats-core\",\n)\n\nbats_toolchain(\n name = \"toolchain\",\n core = \":core\",\n libraries = [\"@bats_support//:support\", \"@bats_assert//:assert\", \"@bats_file//:file\"]\n)\n\ntoolchain(\n name = \"bats_toolchain\",\n exec_compatible_with = HOST_CONSTRAINTS,\n toolchain = \":toolchain\",\n toolchain_type = \"@aspect_bazel_lib//lib:bats_toolchain_type\",\n)\n" - } - } - }, - "recordedRepoMappingEntries": [ - [ - "aspect_bazel_lib~", - "aspect_bazel_lib", - "aspect_bazel_lib~" - ], - [ - "aspect_bazel_lib~", - "bazel_skylib", - "bazel_skylib~" - ], - [ - "aspect_bazel_lib~", - "bazel_tools", - "bazel_tools" - ] - ] - } - }, "@@buildifier_prebuilt~//:defs.bzl%buildifier_prebuilt_deps_extension": { "general": { "bzlTransitiveDigest": "lqH5eQXGrxGyrPzoegk5Mn6zC3A1P0h+QsA1O/QlXHc=", @@ -854,7 +390,7 @@ "@@platforms//host:extension.bzl%host_platform": { "general": { "bzlTransitiveDigest": "xelQcPZH8+tmuOHVjL9vDxMnnQNMlwj0SlvgoqBkm4U=", - "usagesDigest": "vCsjO4h3Yj7ycP6GFCd+8DsFsVKGl3ZNxglvEsg95WM=", + "usagesDigest": "JCEcit5USm9Aj2C/JNVREVGzgo8y8TR2x9tMNPBz6Lc=", "recordedFileInputs": {}, "recordedDirentsInputs": {}, "envVariables": {}, @@ -1089,14 +625,14 @@ }, "@@rules_python~//python/extensions:pip.bzl%pip": { "general": { - "bzlTransitiveDigest": "gJutazNh8a55gHkw92b6OAmolrHFHGYABLiAwXmIg9c=", - "usagesDigest": "MKs5B778/fEkKhBaxuBt3oCCW+wPRuh2AxtITF8AMSU=", + "bzlTransitiveDigest": "7isZ025eiUd/NnrGCxp8JXtjnxdOZNq/SglLxmU6ECo=", + "usagesDigest": "5gOu/rEipBiCefcMDC+RSD/hjMW+fRO2Sh6ij/fWupk=", "recordedFileInputs": { - "@@rules_python~//tools/publish/requirements_linux.txt": "8175b4c8df50ae2f22d1706961884beeb54e7da27bd2447018314a175981997d", + "@@rules_python~//tools/publish/requirements_linux.txt": "d576e0d8542df61396a9b38deeaa183c24135ed5e8e73bb9622f298f2671811e", "@@rules_fuzzing~//fuzzing/requirements.txt": "ab04664be026b632a0d2a2446c4f65982b7654f5b6851d2f9d399a19b7242a5b", - "@@rules_python~//tools/publish/requirements_windows.txt": "7673adc71dc1a81d3661b90924d7a7c0fc998cd508b3cb4174337cef3f2de556", + "@@rules_python~//tools/publish/requirements_windows.txt": "d18538a3982beab378fd5687f4db33162ee1ece69801f9a451661b1b64286b76", "@@protobuf~//python/requirements.txt": "983be60d3cec4b319dcab6d48aeb3f5b2f7c3350f26b3a9e97486c37967c73c5", - "@@rules_python~//tools/publish/requirements_darwin.txt": "2994136eab7e57b083c3de76faf46f70fad130bc8e7360a7fed2b288b69e79dc" + "@@rules_python~//tools/publish/requirements_darwin.txt": "095d4a4f3d639dce831cd493367631cd51b53665292ab20194bac2c0c6458fa8" }, "recordedDirentsInputs": {}, "envVariables": { @@ -3441,7 +2977,7 @@ ] } }, - "rules_python_publish_deps_311_rich_py3_none_any_9836f509": { + "rules_python_publish_deps_311_rich_py3_none_any_6049d5e6": { "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", "ruleClassName": "whl_library", "attributes": { @@ -3456,17 +2992,17 @@ "cp311_osx_x86_64", "cp311_windows_x86_64" ], - "filename": "rich-13.9.3-py3-none-any.whl", + "filename": "rich-13.9.4-py3-none-any.whl", "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", "repo": "rules_python_publish_deps_311", - "requirement": "rich==13.9.3", - "sha256": "9836f5096eb2172c9e77df411c1b009bace4193d6a481d534fea75ebba758283", + "requirement": "rich==13.9.4", + "sha256": "6049d5e6ec054bf2779ab3358186963bac2ea89175919d699e378b99738c2a90", "urls": [ - "https://files.pythonhosted.org/packages/9a/e2/10e9819cf4a20bd8ea2f5dabafc2e6bf4a78d6a0965daeb60a4b34d1c11f/rich-13.9.3-py3-none-any.whl" + "https://files.pythonhosted.org/packages/19/71/39c7c0d87f8d4e6c020a393182060eaefeeae6c01dab6a84ec346f2567df/rich-13.9.4-py3-none-any.whl" ] } }, - "rules_python_publish_deps_311_rich_sdist_bc1e01b8": { + "rules_python_publish_deps_311_rich_sdist_43959497": { "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", "ruleClassName": "whl_library", "attributes": { @@ -3485,13 +3021,13 @@ "--index-url", "https://pypi.org/simple" ], - "filename": "rich-13.9.3.tar.gz", + "filename": "rich-13.9.4.tar.gz", "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", "repo": "rules_python_publish_deps_311", - "requirement": "rich==13.9.3", - "sha256": "bc1e01b899537598cf02579d2b9f4a415104d3fc439313a7a2c165d76557a08e", + "requirement": "rich==13.9.4", + "sha256": "439594978a49a09530cff7ebc4b5c7103ef57baf48d5ea3184f21d9a2befa098", "urls": [ - "https://files.pythonhosted.org/packages/d9/e9/cf9ef5245d835065e6673781dbd4b8911d352fb770d56cf0879cf11b7ee1/rich-13.9.3.tar.gz" + "https://files.pythonhosted.org/packages/ab/3a/0316b28d0761c6734d6bc14e770d85506c986c85ffb239e688eeaab2c2bc/rich-13.9.4.tar.gz" ] } }, @@ -3771,7 +3307,7 @@ "requests": "{\"rules_python_publish_deps_311_requests_py3_none_any_70761cfe\":[{\"filename\":\"requests-2.32.3-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_requests_sdist_55365417\":[{\"filename\":\"requests-2.32.3.tar.gz\",\"version\":\"3.11\"}]}", "requests_toolbelt": "{\"rules_python_publish_deps_311_requests_toolbelt_py2_none_any_cccfdd66\":[{\"filename\":\"requests_toolbelt-1.0.0-py2.py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_requests_toolbelt_sdist_7681a0a3\":[{\"filename\":\"requests-toolbelt-1.0.0.tar.gz\",\"version\":\"3.11\"}]}", "rfc3986": "{\"rules_python_publish_deps_311_rfc3986_py2_none_any_50b1502b\":[{\"filename\":\"rfc3986-2.0.0-py2.py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_rfc3986_sdist_97aacf9d\":[{\"filename\":\"rfc3986-2.0.0.tar.gz\",\"version\":\"3.11\"}]}", - "rich": "{\"rules_python_publish_deps_311_rich_py3_none_any_9836f509\":[{\"filename\":\"rich-13.9.3-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_rich_sdist_bc1e01b8\":[{\"filename\":\"rich-13.9.3.tar.gz\",\"version\":\"3.11\"}]}", + "rich": "{\"rules_python_publish_deps_311_rich_py3_none_any_6049d5e6\":[{\"filename\":\"rich-13.9.4-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_rich_sdist_43959497\":[{\"filename\":\"rich-13.9.4.tar.gz\",\"version\":\"3.11\"}]}", "secretstorage": "{\"rules_python_publish_deps_311_secretstorage_py3_none_any_f356e662\":[{\"filename\":\"SecretStorage-3.3.3-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_secretstorage_sdist_2403533e\":[{\"filename\":\"SecretStorage-3.3.3.tar.gz\",\"version\":\"3.11\"}]}", "twine": "{\"rules_python_publish_deps_311_twine_py3_none_any_215dbe7b\":[{\"filename\":\"twine-5.1.1-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_twine_sdist_9aa08251\":[{\"filename\":\"twine-5.1.1.tar.gz\",\"version\":\"3.11\"}]}", "urllib3": "{\"rules_python_publish_deps_311_urllib3_py3_none_any_ca899ca0\":[{\"filename\":\"urllib3-2.2.3-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_urllib3_sdist_e7d814a8\":[{\"filename\":\"urllib3-2.2.3.tar.gz\",\"version\":\"3.11\"}]}", diff --git a/bootstrapper/initproto/init.pb.go b/bootstrapper/initproto/init.pb.go index e32c642d1..022c30e14 100644 --- a/bootstrapper/initproto/init.pb.go +++ b/bootstrapper/initproto/init.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.35.2 -// protoc v5.29.0--rc3 +// protoc v5.29.1 // source: bootstrapper/initproto/init.proto package initproto diff --git a/debugd/service/debugd.pb.go b/debugd/service/debugd.pb.go index f8e3fe84a..0b6a9755b 100644 --- a/debugd/service/debugd.pb.go +++ b/debugd/service/debugd.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.35.2 -// protoc v5.29.0--rc3 +// protoc v5.29.1 // source: debugd/service/debugd.proto package service diff --git a/disk-mapper/recoverproto/recover.pb.go b/disk-mapper/recoverproto/recover.pb.go index 3aaaef9fe..073d2ec3a 100644 --- a/disk-mapper/recoverproto/recover.pb.go +++ b/disk-mapper/recoverproto/recover.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.35.2 -// protoc v5.29.0--rc3 +// protoc v5.29.1 // source: disk-mapper/recoverproto/recover.proto package recoverproto diff --git a/internal/versions/components/components.pb.go b/internal/versions/components/components.pb.go index 329159a3e..9f2d985ba 100644 --- a/internal/versions/components/components.pb.go +++ b/internal/versions/components/components.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.35.2 -// protoc v5.29.0--rc3 +// protoc v5.29.1 // source: internal/versions/components/components.proto package components diff --git a/joinservice/joinproto/join.pb.go b/joinservice/joinproto/join.pb.go index 8e939281a..f5002b8ef 100644 --- a/joinservice/joinproto/join.pb.go +++ b/joinservice/joinproto/join.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.35.2 -// protoc v5.29.0--rc3 +// protoc v5.29.1 // source: joinservice/joinproto/join.proto package joinproto diff --git a/keyservice/keyserviceproto/keyservice.pb.go b/keyservice/keyserviceproto/keyservice.pb.go index 5dee502e4..a955da9ed 100644 --- a/keyservice/keyserviceproto/keyservice.pb.go +++ b/keyservice/keyserviceproto/keyservice.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.35.2 -// protoc v5.29.0--rc3 +// protoc v5.29.1 // source: keyservice/keyserviceproto/keyservice.proto package keyserviceproto diff --git a/upgrade-agent/upgradeproto/upgrade.pb.go b/upgrade-agent/upgradeproto/upgrade.pb.go index 92d2618e4..f65e69adc 100644 --- a/upgrade-agent/upgradeproto/upgrade.pb.go +++ b/upgrade-agent/upgradeproto/upgrade.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.35.2 -// protoc v5.29.0--rc3 +// protoc v5.29.1 // source: upgrade-agent/upgradeproto/upgrade.proto package upgradeproto diff --git a/verify/verifyproto/verify.pb.go b/verify/verifyproto/verify.pb.go index 3ffacb623..7b9d55690 100644 --- a/verify/verifyproto/verify.pb.go +++ b/verify/verifyproto/verify.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.35.2 -// protoc v5.29.0--rc3 +// protoc v5.29.1 // source: verify/verifyproto/verify.proto package verifyproto From 4cffde50367850ad6cadfa7555711b0512a8e69d Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 17 Jan 2025 11:53:24 +0100 Subject: [PATCH 055/311] deps: update rhysd/actionlint to v1.7.6 (#3584) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * deps: update rhysd/actionlint to v1.7.6 * deps: tidy all modules * Update macos-12 runners to macos-latest --------- Signed-off-by: Daniel Weiße Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: edgelessci Co-authored-by: Daniel Weiße --- .github/workflows/e2e-test-internal-lb.yml | 2 +- .../workflows/e2e-test-marketplace-image.yml | 2 +- .github/workflows/e2e-test-release.yml | 4 ++-- .../workflows/e2e-test-terraform-provider.yml | 2 +- .github/workflows/e2e-test.yml | 2 +- bazel/toolchains/ci_deps.bzl | 24 +++++++++---------- 6 files changed, 18 insertions(+), 18 deletions(-) diff --git a/.github/workflows/e2e-test-internal-lb.yml b/.github/workflows/e2e-test-internal-lb.yml index cee93f7eb..818e2abc9 100644 --- a/.github/workflows/e2e-test-internal-lb.yml +++ b/.github/workflows/e2e-test-internal-lb.yml @@ -23,7 +23,7 @@ on: type: choice options: - "ubuntu-24.04" - - "macos-12" + - "macos-latest" default: "ubuntu-24.04" test: description: "The test to run." diff --git a/.github/workflows/e2e-test-marketplace-image.yml b/.github/workflows/e2e-test-marketplace-image.yml index 760df932b..57afac6be 100644 --- a/.github/workflows/e2e-test-marketplace-image.yml +++ b/.github/workflows/e2e-test-marketplace-image.yml @@ -23,7 +23,7 @@ on: type: choice options: - "ubuntu-24.04" - - "macos-12" + - "macos-latest" default: "ubuntu-24.04" test: description: "The test to run." diff --git a/.github/workflows/e2e-test-release.yml b/.github/workflows/e2e-test-release.yml index 716c9138d..844a86e88 100644 --- a/.github/workflows/e2e-test-release.yml +++ b/.github/workflows/e2e-test-release.yml @@ -306,11 +306,11 @@ jobs: # - test: "verify" # attestationVariant: "azure-sev-snp" # kubernetes-version: "v1.30" - # runner: "macos-12" + # runner: "macos-latest" - test: "recover" attestationVariant: "gcp-sev-es" kubernetes-version: "v1.30" - runner: "macos-12" + runner: "macos-latest" clusterCreation: "cli" runs-on: ${{ matrix.runner }} permissions: diff --git a/.github/workflows/e2e-test-terraform-provider.yml b/.github/workflows/e2e-test-terraform-provider.yml index 3c465ab97..780cd7418 100644 --- a/.github/workflows/e2e-test-terraform-provider.yml +++ b/.github/workflows/e2e-test-terraform-provider.yml @@ -23,7 +23,7 @@ on: type: choice options: - "ubuntu-24.04" - - "macos-12" + - "macos-latest" default: "ubuntu-24.04" test: description: "The test to run." diff --git a/.github/workflows/e2e-test.yml b/.github/workflows/e2e-test.yml index 30a649817..031ba8429 100644 --- a/.github/workflows/e2e-test.yml +++ b/.github/workflows/e2e-test.yml @@ -24,7 +24,7 @@ on: type: choice options: - "ubuntu-24.04" - - "macos-12" + - "macos-latest" default: "ubuntu-24.04" test: description: "The test to run. The conformance test is only supported for clusterCreation=cli." diff --git a/bazel/toolchains/ci_deps.bzl b/bazel/toolchains/ci_deps.bzl index ec7dc64f4..884f2cec7 100644 --- a/bazel/toolchains/ci_deps.bzl +++ b/bazel/toolchains/ci_deps.bzl @@ -97,41 +97,41 @@ def _actionlint_deps(): name = "com_github_rhysd_actionlint_linux_amd64", build_file_content = """exports_files(["actionlint"], visibility = ["//visibility:public"])""", urls = [ - "https://cdn.confidential.cloud/constellation/cas/sha256/fc0a6886bbb9a23a39eeec4b176193cadb54ddbe77cdbb19b637933919545395", - "https://github.com/rhysd/actionlint/releases/download/v1.7.4/actionlint_1.7.4_linux_amd64.tar.gz", + "https://cdn.confidential.cloud/constellation/cas/sha256/5d1a70d9de15fee5371e6f9e20cc29b284e814d6ee1b882f9749e91caf716eba", + "https://github.com/rhysd/actionlint/releases/download/v1.7.6/actionlint_1.7.6_linux_amd64.tar.gz", ], type = "tar.gz", - sha256 = "fc0a6886bbb9a23a39eeec4b176193cadb54ddbe77cdbb19b637933919545395", + sha256 = "5d1a70d9de15fee5371e6f9e20cc29b284e814d6ee1b882f9749e91caf716eba", ) http_archive( name = "com_github_rhysd_actionlint_linux_arm64", build_file_content = """exports_files(["actionlint"], visibility = ["//visibility:public"])""", urls = [ - "https://cdn.confidential.cloud/constellation/cas/sha256/ede03682dc955381d057dde95bb85ce9ca418122209a8a313b617d4adec56416", - "https://github.com/rhysd/actionlint/releases/download/v1.7.4/actionlint_1.7.4_linux_arm64.tar.gz", + "https://cdn.confidential.cloud/constellation/cas/sha256/5d8b6b5bf0bc7bbe69a5ea779329eb7825c768248dd0da979d98e39d924abc7f", + "https://github.com/rhysd/actionlint/releases/download/v1.7.6/actionlint_1.7.6_linux_arm64.tar.gz", ], type = "tar.gz", - sha256 = "ede03682dc955381d057dde95bb85ce9ca418122209a8a313b617d4adec56416", + sha256 = "5d8b6b5bf0bc7bbe69a5ea779329eb7825c768248dd0da979d98e39d924abc7f", ) http_archive( name = "com_github_rhysd_actionlint_darwin_amd64", build_file_content = """exports_files(["actionlint"], visibility = ["//visibility:public"])""", urls = [ - "https://cdn.confidential.cloud/constellation/cas/sha256/63a3ba90ee2325afad3ff2e64a4d80688c261e6c68be8e6ab91214637bf936b8", - "https://github.com/rhysd/actionlint/releases/download/v1.7.4/actionlint_1.7.4_darwin_amd64.tar.gz", + "https://cdn.confidential.cloud/constellation/cas/sha256/a57e9862e6b4f6b8398ff134f0e07c9f0047142fb9ea8e7cdc4fee05d24e89f4", + "https://github.com/rhysd/actionlint/releases/download/v1.7.6/actionlint_1.7.6_darwin_amd64.tar.gz", ], type = "tar.gz", - sha256 = "63a3ba90ee2325afad3ff2e64a4d80688c261e6c68be8e6ab91214637bf936b8", + sha256 = "a57e9862e6b4f6b8398ff134f0e07c9f0047142fb9ea8e7cdc4fee05d24e89f4", ) http_archive( name = "com_github_rhysd_actionlint_darwin_arm64", build_file_content = """exports_files(["actionlint"], visibility = ["//visibility:public"])""", urls = [ - "https://cdn.confidential.cloud/constellation/cas/sha256/cbd193bb490f598d77e179261d7b76dfebd049dddede5803ba21cbf6a469aeee", - "https://github.com/rhysd/actionlint/releases/download/v1.7.4/actionlint_1.7.4_darwin_arm64.tar.gz", + "https://cdn.confidential.cloud/constellation/cas/sha256/9a7c9cb2b627bb137ef68742eead2dd5b78f3ddc44876e84c37d323ba28b4710", + "https://github.com/rhysd/actionlint/releases/download/v1.7.6/actionlint_1.7.6_darwin_arm64.tar.gz", ], type = "tar.gz", - sha256 = "cbd193bb490f598d77e179261d7b76dfebd049dddede5803ba21cbf6a469aeee", + sha256 = "9a7c9cb2b627bb137ef68742eead2dd5b78f3ddc44876e84c37d323ba28b4710", ) def _gofumpt_deps(): From 188e51bba1dc3a39df3c485398cfa314c877644e Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 17 Jan 2025 15:05:36 +0100 Subject: [PATCH 056/311] deps: update Python dependencies (#3590) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/actions/e2e_benchmark/evaluate/requirements.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/actions/e2e_benchmark/evaluate/requirements.txt b/.github/actions/e2e_benchmark/evaluate/requirements.txt index ea9316757..98837e212 100644 --- a/.github/actions/e2e_benchmark/evaluate/requirements.txt +++ b/.github/actions/e2e_benchmark/evaluate/requirements.txt @@ -1,3 +1,3 @@ numpy ==1.26.4 -matplotlib ==3.8.3 -Pillow ==10.3.0 \ No newline at end of file +matplotlib ==3.10.0 +Pillow ==10.4.0 \ No newline at end of file From cef24360658b92185f623f707c6c9a481e574ce4 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 17 Jan 2025 15:15:02 +0100 Subject: [PATCH 057/311] deps: update golangci/golangci-lint to v1.63.4 (#3588) * deps: update golangci/golangci-lint to v1.63.4 * deps: tidy all modules --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: edgelessci --- bazel/toolchains/ci_deps.bzl | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/bazel/toolchains/ci_deps.bzl b/bazel/toolchains/ci_deps.bzl index 884f2cec7..c16674bba 100644 --- a/bazel/toolchains/ci_deps.bzl +++ b/bazel/toolchains/ci_deps.bzl @@ -223,45 +223,45 @@ def _golangci_lint_deps(): name = "com_github_golangci_golangci_lint_linux_amd64", build_file = "//bazel/toolchains:BUILD.golangci.bazel", urls = [ - "https://cdn.confidential.cloud/constellation/cas/sha256/5101292b7925a6a14b49c5c3d845c5021399698ffd2f41bcfab8a111b5669939", - "https://github.com/golangci/golangci-lint/releases/download/v1.62.2/golangci-lint-1.62.2-linux-amd64.tar.gz", + "https://cdn.confidential.cloud/constellation/cas/sha256/01abb14a4df47b5ca585eff3c34b105023cba92ec34ff17212dbb83855581690", + "https://github.com/golangci/golangci-lint/releases/download/v1.63.4/golangci-lint-1.63.4-linux-amd64.tar.gz", ], - strip_prefix = "golangci-lint-1.62.2-linux-amd64", + strip_prefix = "golangci-lint-1.63.4-linux-amd64", type = "tar.gz", - sha256 = "5101292b7925a6a14b49c5c3d845c5021399698ffd2f41bcfab8a111b5669939", + sha256 = "01abb14a4df47b5ca585eff3c34b105023cba92ec34ff17212dbb83855581690", ) http_archive( name = "com_github_golangci_golangci_lint_linux_arm64", build_file = "//bazel/toolchains:BUILD.golangci.bazel", urls = [ - "https://cdn.confidential.cloud/constellation/cas/sha256/10b6f5bd8483bd9e85a82f6119ed08f95609f42b86dc344b5dc15703c74d5b85", - "https://github.com/golangci/golangci-lint/releases/download/v1.62.2/golangci-lint-1.62.2-linux-arm64.tar.gz", + "https://cdn.confidential.cloud/constellation/cas/sha256/51f0c79d19a92353e0465fb30a4901a0644a975d34e6f399ad2eebc0160bbb24", + "https://github.com/golangci/golangci-lint/releases/download/v1.63.4/golangci-lint-1.63.4-linux-arm64.tar.gz", ], - strip_prefix = "golangci-lint-1.62.2-linux-arm64", + strip_prefix = "golangci-lint-1.63.4-linux-arm64", type = "tar.gz", - sha256 = "10b6f5bd8483bd9e85a82f6119ed08f95609f42b86dc344b5dc15703c74d5b85", + sha256 = "51f0c79d19a92353e0465fb30a4901a0644a975d34e6f399ad2eebc0160bbb24", ) http_archive( name = "com_github_golangci_golangci_lint_darwin_amd64", build_file = "//bazel/toolchains:BUILD.golangci.bazel", urls = [ - "https://cdn.confidential.cloud/constellation/cas/sha256/6c9ffd05896f0638d5c37152ac4ae337c2d301ba6c9dadf49c04e6d639f10f91", - "https://github.com/golangci/golangci-lint/releases/download/v1.62.2/golangci-lint-1.62.2-darwin-amd64.tar.gz", + "https://cdn.confidential.cloud/constellation/cas/sha256/878d017cc360e4fb19510d39852c8189852e3c48e7ce0337577df73507c97d68", + "https://github.com/golangci/golangci-lint/releases/download/v1.63.4/golangci-lint-1.63.4-darwin-amd64.tar.gz", ], - strip_prefix = "golangci-lint-1.62.2-darwin-amd64", + strip_prefix = "golangci-lint-1.63.4-darwin-amd64", type = "tar.gz", - sha256 = "6c9ffd05896f0638d5c37152ac4ae337c2d301ba6c9dadf49c04e6d639f10f91", + sha256 = "878d017cc360e4fb19510d39852c8189852e3c48e7ce0337577df73507c97d68", ) http_archive( name = "com_github_golangci_golangci_lint_darwin_arm64", build_file = "//bazel/toolchains:BUILD.golangci.bazel", urls = [ - "https://cdn.confidential.cloud/constellation/cas/sha256/6c76f54467ba471f7bdcd5df0f27c3fa3dbe530b771a10d384c3d8c7178f5e89", - "https://github.com/golangci/golangci-lint/releases/download/v1.62.2/golangci-lint-1.62.2-darwin-arm64.tar.gz", + "https://cdn.confidential.cloud/constellation/cas/sha256/a2b630c2ac8466393f0ccbbede4462387b6c190697a70bc2298c6d2123f21bbf", + "https://github.com/golangci/golangci-lint/releases/download/v1.63.4/golangci-lint-1.63.4-darwin-arm64.tar.gz", ], - strip_prefix = "golangci-lint-1.62.2-darwin-arm64", + strip_prefix = "golangci-lint-1.63.4-darwin-arm64", type = "tar.gz", - sha256 = "6c76f54467ba471f7bdcd5df0f27c3fa3dbe530b771a10d384c3d8c7178f5e89", + sha256 = "a2b630c2ac8466393f0ccbbede4462387b6c190697a70bc2298c6d2123f21bbf", ) def _buf_deps(): From 9a969548e4df2c048631b9d9b262a4712a787b05 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 17 Jan 2025 17:08:05 +0100 Subject: [PATCH 058/311] deps: update Python dependencies (#3592) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/actions/e2e_benchmark/evaluate/requirements.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/actions/e2e_benchmark/evaluate/requirements.txt b/.github/actions/e2e_benchmark/evaluate/requirements.txt index 98837e212..f1d505b86 100644 --- a/.github/actions/e2e_benchmark/evaluate/requirements.txt +++ b/.github/actions/e2e_benchmark/evaluate/requirements.txt @@ -1,3 +1,3 @@ -numpy ==1.26.4 +numpy ==2.2.1 matplotlib ==3.10.0 -Pillow ==10.4.0 \ No newline at end of file +Pillow ==11.1.0 \ No newline at end of file From b996a4cbae1e1a591aed23e42c843036f1a34539 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 17 Jan 2025 17:08:33 +0100 Subject: [PATCH 059/311] deps: update docusaurus monorepo to v3.7.0 (#3591) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- docs/package-lock.json | 927 +++++++++++++++++++++++------------------ docs/package.json | 12 +- 2 files changed, 536 insertions(+), 403 deletions(-) diff --git a/docs/package-lock.json b/docs/package-lock.json index 41c393918..3588ab8e6 100644 --- a/docs/package-lock.json +++ b/docs/package-lock.json @@ -9,9 +9,9 @@ "version": "2.0.0", "dependencies": { "@cmfcmf/docusaurus-search-local": "1.2.0", - "@docusaurus/core": "3.6.2", - "@docusaurus/preset-classic": "3.6.2", - "@docusaurus/theme-mermaid": "3.6.2", + "@docusaurus/core": "3.7.0", + "@docusaurus/preset-classic": "3.7.0", + "@docusaurus/theme-mermaid": "3.7.0", "@mdx-js/react": "3.1.0", "asciinema-player": "3.8.1", "clsx": "2.1.1", @@ -20,8 +20,8 @@ "react-dom": "18.3.1" }, "devDependencies": { - "@docusaurus/module-type-aliases": "3.6.2", - "@docusaurus/types": "3.6.2" + "@docusaurus/module-type-aliases": "3.7.0", + "@docusaurus/types": "3.7.0" }, "engines": { "node": ">=16.14" @@ -120,48 +120,48 @@ } }, "node_modules/@algolia/client-abtesting": { - "version": "5.15.0", - "resolved": "https://registry.npmjs.org/@algolia/client-abtesting/-/client-abtesting-5.15.0.tgz", - "integrity": "sha512-FaEM40iuiv1mAipYyiptP4EyxkJ8qHfowCpEeusdHUC4C7spATJYArD2rX3AxkVeREkDIgYEOuXcwKUbDCr7Nw==", + "version": "5.19.0", + "resolved": "https://registry.npmjs.org/@algolia/client-abtesting/-/client-abtesting-5.19.0.tgz", + "integrity": "sha512-dMHwy2+nBL0SnIsC1iHvkBao64h4z+roGelOz11cxrDBrAdASxLxmfVMop8gmodQ2yZSacX0Rzevtxa+9SqxCw==", "license": "MIT", "dependencies": { - "@algolia/client-common": "5.15.0", - "@algolia/requester-browser-xhr": "5.15.0", - "@algolia/requester-fetch": "5.15.0", - "@algolia/requester-node-http": "5.15.0" + "@algolia/client-common": "5.19.0", + "@algolia/requester-browser-xhr": "5.19.0", + "@algolia/requester-fetch": "5.19.0", + "@algolia/requester-node-http": "5.19.0" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/client-abtesting/node_modules/@algolia/client-common": { - "version": "5.15.0", - "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.15.0.tgz", - "integrity": "sha512-IofrVh213VLsDkPoSKMeM9Dshrv28jhDlBDLRcVJQvlL8pzue7PEB1EZ4UoJFYS3NSn7JOcJ/V+olRQzXlJj1w==", + "version": "5.19.0", + "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.19.0.tgz", + "integrity": "sha512-2ERRbICHXvtj5kfFpY5r8qu9pJII/NAHsdgUXnUitQFwPdPL7wXiupcvZJC7DSntOnE8AE0lM7oDsPhrJfj5nQ==", "license": "MIT", "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/client-abtesting/node_modules/@algolia/requester-browser-xhr": { - "version": "5.15.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.15.0.tgz", - "integrity": "sha512-Po/GNib6QKruC3XE+WKP1HwVSfCDaZcXu48kD+gwmtDlqHWKc7Bq9lrS0sNZ456rfCKhXksOmMfUs4wRM/Y96w==", + "version": "5.19.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.19.0.tgz", + "integrity": "sha512-GfnhnQBT23mW/VMNs7m1qyEyZzhZz093aY2x8p0era96MMyNv8+FxGek5pjVX0b57tmSCZPf4EqNCpkGcGsmbw==", "license": "MIT", "dependencies": { - "@algolia/client-common": "5.15.0" + "@algolia/client-common": "5.19.0" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/client-abtesting/node_modules/@algolia/requester-node-http": { - "version": "5.15.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-5.15.0.tgz", - "integrity": "sha512-b1jTpbFf9LnQHEJP5ddDJKE2sAlhYd7EVSOWgzo/27n/SfCoHfqD0VWntnWYD83PnOKvfe8auZ2+xCb0TXotrQ==", + "version": "5.19.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-5.19.0.tgz", + "integrity": "sha512-p6t8ue0XZNjcRiqNkb5QAM0qQRAKsCiebZ6n9JjWA+p8fWf8BvnhO55y2fO28g3GW0Imj7PrAuyBuxq8aDVQwQ==", "license": "MIT", "dependencies": { - "@algolia/client-common": "5.15.0" + "@algolia/client-common": "5.19.0" }, "engines": { "node": ">= 14.0.0" @@ -201,48 +201,48 @@ } }, "node_modules/@algolia/client-insights": { - "version": "5.15.0", - "resolved": "https://registry.npmjs.org/@algolia/client-insights/-/client-insights-5.15.0.tgz", - "integrity": "sha512-bDDEQGfFidDi0UQUCbxXOCdphbVAgbVmxvaV75cypBTQkJ+ABx/Npw7LkFGw1FsoVrttlrrQbwjvUB6mLVKs/w==", + "version": "5.19.0", + "resolved": "https://registry.npmjs.org/@algolia/client-insights/-/client-insights-5.19.0.tgz", + "integrity": "sha512-xPOiGjo6I9mfjdJO7Y+p035aWePcbsItizIp+qVyfkfZiGgD+TbNxM12g7QhFAHIkx/mlYaocxPY/TmwPzTe+A==", "license": "MIT", "dependencies": { - "@algolia/client-common": "5.15.0", - "@algolia/requester-browser-xhr": "5.15.0", - "@algolia/requester-fetch": "5.15.0", - "@algolia/requester-node-http": "5.15.0" + "@algolia/client-common": "5.19.0", + "@algolia/requester-browser-xhr": "5.19.0", + "@algolia/requester-fetch": "5.19.0", + "@algolia/requester-node-http": "5.19.0" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/client-insights/node_modules/@algolia/client-common": { - "version": "5.15.0", - "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.15.0.tgz", - "integrity": "sha512-IofrVh213VLsDkPoSKMeM9Dshrv28jhDlBDLRcVJQvlL8pzue7PEB1EZ4UoJFYS3NSn7JOcJ/V+olRQzXlJj1w==", + "version": "5.19.0", + "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.19.0.tgz", + "integrity": "sha512-2ERRbICHXvtj5kfFpY5r8qu9pJII/NAHsdgUXnUitQFwPdPL7wXiupcvZJC7DSntOnE8AE0lM7oDsPhrJfj5nQ==", "license": "MIT", "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/client-insights/node_modules/@algolia/requester-browser-xhr": { - "version": "5.15.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.15.0.tgz", - "integrity": "sha512-Po/GNib6QKruC3XE+WKP1HwVSfCDaZcXu48kD+gwmtDlqHWKc7Bq9lrS0sNZ456rfCKhXksOmMfUs4wRM/Y96w==", + "version": "5.19.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.19.0.tgz", + "integrity": "sha512-GfnhnQBT23mW/VMNs7m1qyEyZzhZz093aY2x8p0era96MMyNv8+FxGek5pjVX0b57tmSCZPf4EqNCpkGcGsmbw==", "license": "MIT", "dependencies": { - "@algolia/client-common": "5.15.0" + "@algolia/client-common": "5.19.0" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/client-insights/node_modules/@algolia/requester-node-http": { - "version": "5.15.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-5.15.0.tgz", - "integrity": "sha512-b1jTpbFf9LnQHEJP5ddDJKE2sAlhYd7EVSOWgzo/27n/SfCoHfqD0VWntnWYD83PnOKvfe8auZ2+xCb0TXotrQ==", + "version": "5.19.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-5.19.0.tgz", + "integrity": "sha512-p6t8ue0XZNjcRiqNkb5QAM0qQRAKsCiebZ6n9JjWA+p8fWf8BvnhO55y2fO28g3GW0Imj7PrAuyBuxq8aDVQwQ==", "license": "MIT", "dependencies": { - "@algolia/client-common": "5.15.0" + "@algolia/client-common": "5.19.0" }, "engines": { "node": ">= 14.0.0" @@ -260,48 +260,48 @@ } }, "node_modules/@algolia/client-query-suggestions": { - "version": "5.15.0", - "resolved": "https://registry.npmjs.org/@algolia/client-query-suggestions/-/client-query-suggestions-5.15.0.tgz", - "integrity": "sha512-wu8GVluiZ5+il8WIRsGKu8VxMK9dAlr225h878GGtpTL6VBvwyJvAyLdZsfFIpY0iN++jiNb31q2C1PlPL+n/A==", + "version": "5.19.0", + "resolved": "https://registry.npmjs.org/@algolia/client-query-suggestions/-/client-query-suggestions-5.19.0.tgz", + "integrity": "sha512-6fcP8d4S8XRDtVogrDvmSM6g5g6DndLc0pEm1GCKe9/ZkAzCmM3ZmW1wFYYPxdjMeifWy1vVEDMJK7sbE4W7MA==", "license": "MIT", "dependencies": { - "@algolia/client-common": "5.15.0", - "@algolia/requester-browser-xhr": "5.15.0", - "@algolia/requester-fetch": "5.15.0", - "@algolia/requester-node-http": "5.15.0" + "@algolia/client-common": "5.19.0", + "@algolia/requester-browser-xhr": "5.19.0", + "@algolia/requester-fetch": "5.19.0", + "@algolia/requester-node-http": "5.19.0" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/client-query-suggestions/node_modules/@algolia/client-common": { - "version": "5.15.0", - "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.15.0.tgz", - "integrity": "sha512-IofrVh213VLsDkPoSKMeM9Dshrv28jhDlBDLRcVJQvlL8pzue7PEB1EZ4UoJFYS3NSn7JOcJ/V+olRQzXlJj1w==", + "version": "5.19.0", + "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.19.0.tgz", + "integrity": "sha512-2ERRbICHXvtj5kfFpY5r8qu9pJII/NAHsdgUXnUitQFwPdPL7wXiupcvZJC7DSntOnE8AE0lM7oDsPhrJfj5nQ==", "license": "MIT", "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/client-query-suggestions/node_modules/@algolia/requester-browser-xhr": { - "version": "5.15.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.15.0.tgz", - "integrity": "sha512-Po/GNib6QKruC3XE+WKP1HwVSfCDaZcXu48kD+gwmtDlqHWKc7Bq9lrS0sNZ456rfCKhXksOmMfUs4wRM/Y96w==", + "version": "5.19.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.19.0.tgz", + "integrity": "sha512-GfnhnQBT23mW/VMNs7m1qyEyZzhZz093aY2x8p0era96MMyNv8+FxGek5pjVX0b57tmSCZPf4EqNCpkGcGsmbw==", "license": "MIT", "dependencies": { - "@algolia/client-common": "5.15.0" + "@algolia/client-common": "5.19.0" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/client-query-suggestions/node_modules/@algolia/requester-node-http": { - "version": "5.15.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-5.15.0.tgz", - "integrity": "sha512-b1jTpbFf9LnQHEJP5ddDJKE2sAlhYd7EVSOWgzo/27n/SfCoHfqD0VWntnWYD83PnOKvfe8auZ2+xCb0TXotrQ==", + "version": "5.19.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-5.19.0.tgz", + "integrity": "sha512-p6t8ue0XZNjcRiqNkb5QAM0qQRAKsCiebZ6n9JjWA+p8fWf8BvnhO55y2fO28g3GW0Imj7PrAuyBuxq8aDVQwQ==", "license": "MIT", "dependencies": { - "@algolia/client-common": "5.15.0" + "@algolia/client-common": "5.19.0" }, "engines": { "node": ">= 14.0.0" @@ -325,48 +325,48 @@ "license": "MIT" }, "node_modules/@algolia/ingestion": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/@algolia/ingestion/-/ingestion-1.15.0.tgz", - "integrity": "sha512-MkqkAxBQxtQ5if/EX2IPqFA7LothghVyvPoRNA/meS2AW2qkHwcxjuiBxv4H6mnAVEPfJlhu9rkdVz9LgCBgJg==", + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/@algolia/ingestion/-/ingestion-1.19.0.tgz", + "integrity": "sha512-LO7w1MDV+ZLESwfPmXkp+KLeYeFrYEgtbCZG6buWjddhYraPQ9MuQWLhLLiaMlKxZ/sZvFTcZYuyI6Jx4WBhcg==", "license": "MIT", "dependencies": { - "@algolia/client-common": "5.15.0", - "@algolia/requester-browser-xhr": "5.15.0", - "@algolia/requester-fetch": "5.15.0", - "@algolia/requester-node-http": "5.15.0" + "@algolia/client-common": "5.19.0", + "@algolia/requester-browser-xhr": "5.19.0", + "@algolia/requester-fetch": "5.19.0", + "@algolia/requester-node-http": "5.19.0" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/ingestion/node_modules/@algolia/client-common": { - "version": "5.15.0", - "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.15.0.tgz", - "integrity": "sha512-IofrVh213VLsDkPoSKMeM9Dshrv28jhDlBDLRcVJQvlL8pzue7PEB1EZ4UoJFYS3NSn7JOcJ/V+olRQzXlJj1w==", + "version": "5.19.0", + "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.19.0.tgz", + "integrity": "sha512-2ERRbICHXvtj5kfFpY5r8qu9pJII/NAHsdgUXnUitQFwPdPL7wXiupcvZJC7DSntOnE8AE0lM7oDsPhrJfj5nQ==", "license": "MIT", "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/ingestion/node_modules/@algolia/requester-browser-xhr": { - "version": "5.15.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.15.0.tgz", - "integrity": "sha512-Po/GNib6QKruC3XE+WKP1HwVSfCDaZcXu48kD+gwmtDlqHWKc7Bq9lrS0sNZ456rfCKhXksOmMfUs4wRM/Y96w==", + "version": "5.19.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.19.0.tgz", + "integrity": "sha512-GfnhnQBT23mW/VMNs7m1qyEyZzhZz093aY2x8p0era96MMyNv8+FxGek5pjVX0b57tmSCZPf4EqNCpkGcGsmbw==", "license": "MIT", "dependencies": { - "@algolia/client-common": "5.15.0" + "@algolia/client-common": "5.19.0" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/ingestion/node_modules/@algolia/requester-node-http": { - "version": "5.15.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-5.15.0.tgz", - "integrity": "sha512-b1jTpbFf9LnQHEJP5ddDJKE2sAlhYd7EVSOWgzo/27n/SfCoHfqD0VWntnWYD83PnOKvfe8auZ2+xCb0TXotrQ==", + "version": "5.19.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-5.19.0.tgz", + "integrity": "sha512-p6t8ue0XZNjcRiqNkb5QAM0qQRAKsCiebZ6n9JjWA+p8fWf8BvnhO55y2fO28g3GW0Imj7PrAuyBuxq8aDVQwQ==", "license": "MIT", "dependencies": { - "@algolia/client-common": "5.15.0" + "@algolia/client-common": "5.19.0" }, "engines": { "node": ">= 14.0.0" @@ -388,48 +388,48 @@ } }, "node_modules/@algolia/monitoring": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/@algolia/monitoring/-/monitoring-1.15.0.tgz", - "integrity": "sha512-QPrFnnGLMMdRa8t/4bs7XilPYnoUXDY8PMQJ1sf9ZFwhUysYYhQNX34/enoO0LBjpoOY6rLpha39YQEFbzgKyQ==", + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/@algolia/monitoring/-/monitoring-1.19.0.tgz", + "integrity": "sha512-Mg4uoS0aIKeTpu6iv6O0Hj81s8UHagi5TLm9k2mLIib4vmMtX7WgIAHAcFIaqIZp5D6s5EVy1BaDOoZ7buuJHA==", "license": "MIT", "dependencies": { - "@algolia/client-common": "5.15.0", - "@algolia/requester-browser-xhr": "5.15.0", - "@algolia/requester-fetch": "5.15.0", - "@algolia/requester-node-http": "5.15.0" + "@algolia/client-common": "5.19.0", + "@algolia/requester-browser-xhr": "5.19.0", + "@algolia/requester-fetch": "5.19.0", + "@algolia/requester-node-http": "5.19.0" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/monitoring/node_modules/@algolia/client-common": { - "version": "5.15.0", - "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.15.0.tgz", - "integrity": "sha512-IofrVh213VLsDkPoSKMeM9Dshrv28jhDlBDLRcVJQvlL8pzue7PEB1EZ4UoJFYS3NSn7JOcJ/V+olRQzXlJj1w==", + "version": "5.19.0", + "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.19.0.tgz", + "integrity": "sha512-2ERRbICHXvtj5kfFpY5r8qu9pJII/NAHsdgUXnUitQFwPdPL7wXiupcvZJC7DSntOnE8AE0lM7oDsPhrJfj5nQ==", "license": "MIT", "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/monitoring/node_modules/@algolia/requester-browser-xhr": { - "version": "5.15.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.15.0.tgz", - "integrity": "sha512-Po/GNib6QKruC3XE+WKP1HwVSfCDaZcXu48kD+gwmtDlqHWKc7Bq9lrS0sNZ456rfCKhXksOmMfUs4wRM/Y96w==", + "version": "5.19.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.19.0.tgz", + "integrity": "sha512-GfnhnQBT23mW/VMNs7m1qyEyZzhZz093aY2x8p0era96MMyNv8+FxGek5pjVX0b57tmSCZPf4EqNCpkGcGsmbw==", "license": "MIT", "dependencies": { - "@algolia/client-common": "5.15.0" + "@algolia/client-common": "5.19.0" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/monitoring/node_modules/@algolia/requester-node-http": { - "version": "5.15.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-5.15.0.tgz", - "integrity": "sha512-b1jTpbFf9LnQHEJP5ddDJKE2sAlhYd7EVSOWgzo/27n/SfCoHfqD0VWntnWYD83PnOKvfe8auZ2+xCb0TXotrQ==", + "version": "5.19.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-5.19.0.tgz", + "integrity": "sha512-p6t8ue0XZNjcRiqNkb5QAM0qQRAKsCiebZ6n9JjWA+p8fWf8BvnhO55y2fO28g3GW0Imj7PrAuyBuxq8aDVQwQ==", "license": "MIT", "dependencies": { - "@algolia/client-common": "5.15.0" + "@algolia/client-common": "5.19.0" }, "engines": { "node": ">= 14.0.0" @@ -470,21 +470,21 @@ "license": "MIT" }, "node_modules/@algolia/requester-fetch": { - "version": "5.15.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-fetch/-/requester-fetch-5.15.0.tgz", - "integrity": "sha512-rOZ+c0P7ajmccAvpeeNrUmEKoliYFL8aOR5qGW5pFq3oj3Iept7Y5mEtEsOBYsRt6qLnaXn4zUKf+N8nvJpcIw==", + "version": "5.19.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-fetch/-/requester-fetch-5.19.0.tgz", + "integrity": "sha512-oyTt8ZJ4T4fYvW5avAnuEc6Laedcme9fAFryMD9ndUTIUe/P0kn3BuGcCLFjN3FDmdrETHSFkgPPf1hGy3sLCw==", "license": "MIT", "dependencies": { - "@algolia/client-common": "5.15.0" + "@algolia/client-common": "5.19.0" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/requester-fetch/node_modules/@algolia/client-common": { - "version": "5.15.0", - "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.15.0.tgz", - "integrity": "sha512-IofrVh213VLsDkPoSKMeM9Dshrv28jhDlBDLRcVJQvlL8pzue7PEB1EZ4UoJFYS3NSn7JOcJ/V+olRQzXlJj1w==", + "version": "5.19.0", + "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.19.0.tgz", + "integrity": "sha512-2ERRbICHXvtj5kfFpY5r8qu9pJII/NAHsdgUXnUitQFwPdPL7wXiupcvZJC7DSntOnE8AE0lM7oDsPhrJfj5nQ==", "license": "MIT", "engines": { "node": ">= 14.0.0" @@ -3450,21 +3450,21 @@ } }, "node_modules/@docsearch/css": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-3.8.0.tgz", - "integrity": "sha512-pieeipSOW4sQ0+bE5UFC51AOZp9NGxg89wAlZ1BAQFaiRAGK1IKUaPQ0UGZeNctJXyqZ1UvBtOQh2HH+U5GtmA==", + "version": "3.8.2", + "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-3.8.2.tgz", + "integrity": "sha512-y05ayQFyUmCXze79+56v/4HpycYF3uFqB78pLPrSV5ZKAlDuIAAJNhaRi8tTdRNXh05yxX/TyNnzD6LwSM89vQ==", "license": "MIT" }, "node_modules/@docsearch/react": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-3.8.0.tgz", - "integrity": "sha512-WnFK720+iwTVt94CxY3u+FgX6exb3BfN5kE9xUY6uuAH/9W/UFboBZFLlrw/zxFRHoHZCOXRtOylsXF+6LHI+Q==", + "version": "3.8.2", + "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-3.8.2.tgz", + "integrity": "sha512-xCRrJQlTt8N9GU0DG4ptwHRkfnSnD/YpdeaXe02iKfqs97TkZJv60yE+1eq/tjPcVnTW8dP5qLP7itifFVV5eg==", "license": "MIT", "dependencies": { "@algolia/autocomplete-core": "1.17.7", "@algolia/autocomplete-preset-algolia": "1.17.7", - "@docsearch/css": "3.8.0", - "algoliasearch": "^5.12.0" + "@docsearch/css": "3.8.2", + "algoliasearch": "^5.14.2" }, "peerDependencies": { "@types/react": ">= 16.8.0 < 19.0.0", @@ -3488,126 +3488,126 @@ } }, "node_modules/@docsearch/react/node_modules/@algolia/client-analytics": { - "version": "5.15.0", - "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-5.15.0.tgz", - "integrity": "sha512-lho0gTFsQDIdCwyUKTtMuf9nCLwq9jOGlLGIeQGKDxXF7HbiAysFIu5QW/iQr1LzMgDyM9NH7K98KY+BiIFriQ==", + "version": "5.19.0", + "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-5.19.0.tgz", + "integrity": "sha512-CDW4RwnCHzU10upPJqS6N6YwDpDHno7w6/qXT9KPbPbt8szIIzCHrva4O9KIfx1OhdsHzfGSI5hMAiOOYl4DEQ==", "license": "MIT", "dependencies": { - "@algolia/client-common": "5.15.0", - "@algolia/requester-browser-xhr": "5.15.0", - "@algolia/requester-fetch": "5.15.0", - "@algolia/requester-node-http": "5.15.0" + "@algolia/client-common": "5.19.0", + "@algolia/requester-browser-xhr": "5.19.0", + "@algolia/requester-fetch": "5.19.0", + "@algolia/requester-node-http": "5.19.0" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@docsearch/react/node_modules/@algolia/client-common": { - "version": "5.15.0", - "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.15.0.tgz", - "integrity": "sha512-IofrVh213VLsDkPoSKMeM9Dshrv28jhDlBDLRcVJQvlL8pzue7PEB1EZ4UoJFYS3NSn7JOcJ/V+olRQzXlJj1w==", + "version": "5.19.0", + "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.19.0.tgz", + "integrity": "sha512-2ERRbICHXvtj5kfFpY5r8qu9pJII/NAHsdgUXnUitQFwPdPL7wXiupcvZJC7DSntOnE8AE0lM7oDsPhrJfj5nQ==", "license": "MIT", "engines": { "node": ">= 14.0.0" } }, "node_modules/@docsearch/react/node_modules/@algolia/client-personalization": { - "version": "5.15.0", - "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-5.15.0.tgz", - "integrity": "sha512-LfaZqLUWxdYFq44QrasCDED5bSYOswpQjSiIL7Q5fYlefAAUO95PzBPKCfUhSwhb4rKxigHfDkd81AvEicIEoA==", + "version": "5.19.0", + "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-5.19.0.tgz", + "integrity": "sha512-B9eoce/fk8NLboGje+pMr72pw+PV7c5Z01On477heTZ7jkxoZ4X92dobeGuEQop61cJ93Gaevd1of4mBr4hu2A==", "license": "MIT", "dependencies": { - "@algolia/client-common": "5.15.0", - "@algolia/requester-browser-xhr": "5.15.0", - "@algolia/requester-fetch": "5.15.0", - "@algolia/requester-node-http": "5.15.0" + "@algolia/client-common": "5.19.0", + "@algolia/requester-browser-xhr": "5.19.0", + "@algolia/requester-fetch": "5.19.0", + "@algolia/requester-node-http": "5.19.0" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@docsearch/react/node_modules/@algolia/client-search": { - "version": "5.15.0", - "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-5.15.0.tgz", - "integrity": "sha512-Z32gEMrRRpEta5UqVQA612sLdoqY3AovvUPClDfMxYrbdDAebmGDVPtSogUba1FZ4pP5dx20D3OV3reogLKsRA==", + "version": "5.19.0", + "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-5.19.0.tgz", + "integrity": "sha512-Ctg3xXD/1VtcwmkulR5+cKGOMj4r0wC49Y/KZdGQcqpydKn+e86F6l3tb3utLJQVq4lpEJud6kdRykFgcNsp8Q==", "license": "MIT", "dependencies": { - "@algolia/client-common": "5.15.0", - "@algolia/requester-browser-xhr": "5.15.0", - "@algolia/requester-fetch": "5.15.0", - "@algolia/requester-node-http": "5.15.0" + "@algolia/client-common": "5.19.0", + "@algolia/requester-browser-xhr": "5.19.0", + "@algolia/requester-fetch": "5.19.0", + "@algolia/requester-node-http": "5.19.0" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@docsearch/react/node_modules/@algolia/recommend": { - "version": "5.15.0", - "resolved": "https://registry.npmjs.org/@algolia/recommend/-/recommend-5.15.0.tgz", - "integrity": "sha512-5eupMwSqMLDObgSMF0XG958zR6GJP3f7jHDQ3/WlzCM9/YIJiWIUoJFGsko9GYsA5xbLDHE/PhWtq4chcCdaGQ==", + "version": "5.19.0", + "resolved": "https://registry.npmjs.org/@algolia/recommend/-/recommend-5.19.0.tgz", + "integrity": "sha512-PbgrMTbUPlmwfJsxjFhal4XqZO2kpBNRjemLVTkUiti4w/+kzcYO4Hg5zaBgVqPwvFDNQ8JS4SS3TBBem88u+g==", "license": "MIT", "dependencies": { - "@algolia/client-common": "5.15.0", - "@algolia/requester-browser-xhr": "5.15.0", - "@algolia/requester-fetch": "5.15.0", - "@algolia/requester-node-http": "5.15.0" + "@algolia/client-common": "5.19.0", + "@algolia/requester-browser-xhr": "5.19.0", + "@algolia/requester-fetch": "5.19.0", + "@algolia/requester-node-http": "5.19.0" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@docsearch/react/node_modules/@algolia/requester-browser-xhr": { - "version": "5.15.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.15.0.tgz", - "integrity": "sha512-Po/GNib6QKruC3XE+WKP1HwVSfCDaZcXu48kD+gwmtDlqHWKc7Bq9lrS0sNZ456rfCKhXksOmMfUs4wRM/Y96w==", + "version": "5.19.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.19.0.tgz", + "integrity": "sha512-GfnhnQBT23mW/VMNs7m1qyEyZzhZz093aY2x8p0era96MMyNv8+FxGek5pjVX0b57tmSCZPf4EqNCpkGcGsmbw==", "license": "MIT", "dependencies": { - "@algolia/client-common": "5.15.0" + "@algolia/client-common": "5.19.0" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@docsearch/react/node_modules/@algolia/requester-node-http": { - "version": "5.15.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-5.15.0.tgz", - "integrity": "sha512-b1jTpbFf9LnQHEJP5ddDJKE2sAlhYd7EVSOWgzo/27n/SfCoHfqD0VWntnWYD83PnOKvfe8auZ2+xCb0TXotrQ==", + "version": "5.19.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-5.19.0.tgz", + "integrity": "sha512-p6t8ue0XZNjcRiqNkb5QAM0qQRAKsCiebZ6n9JjWA+p8fWf8BvnhO55y2fO28g3GW0Imj7PrAuyBuxq8aDVQwQ==", "license": "MIT", "dependencies": { - "@algolia/client-common": "5.15.0" + "@algolia/client-common": "5.19.0" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@docsearch/react/node_modules/algoliasearch": { - "version": "5.15.0", - "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-5.15.0.tgz", - "integrity": "sha512-Yf3Swz1s63hjvBVZ/9f2P1Uu48GjmjCN+Esxb6MAONMGtZB1fRX8/S1AhUTtsuTlcGovbYLxpHgc7wEzstDZBw==", + "version": "5.19.0", + "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-5.19.0.tgz", + "integrity": "sha512-zrLtGhC63z3sVLDDKGW+SlCRN9eJHFTgdEmoAOpsVh6wgGL1GgTTDou7tpCBjevzgIvi3AIyDAQO3Xjbg5eqZg==", "license": "MIT", "dependencies": { - "@algolia/client-abtesting": "5.15.0", - "@algolia/client-analytics": "5.15.0", - "@algolia/client-common": "5.15.0", - "@algolia/client-insights": "5.15.0", - "@algolia/client-personalization": "5.15.0", - "@algolia/client-query-suggestions": "5.15.0", - "@algolia/client-search": "5.15.0", - "@algolia/ingestion": "1.15.0", - "@algolia/monitoring": "1.15.0", - "@algolia/recommend": "5.15.0", - "@algolia/requester-browser-xhr": "5.15.0", - "@algolia/requester-fetch": "5.15.0", - "@algolia/requester-node-http": "5.15.0" + "@algolia/client-abtesting": "5.19.0", + "@algolia/client-analytics": "5.19.0", + "@algolia/client-common": "5.19.0", + "@algolia/client-insights": "5.19.0", + "@algolia/client-personalization": "5.19.0", + "@algolia/client-query-suggestions": "5.19.0", + "@algolia/client-search": "5.19.0", + "@algolia/ingestion": "1.19.0", + "@algolia/monitoring": "1.19.0", + "@algolia/recommend": "5.19.0", + "@algolia/requester-browser-xhr": "5.19.0", + "@algolia/requester-fetch": "5.19.0", + "@algolia/requester-node-http": "5.19.0" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@docusaurus/babel": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/@docusaurus/babel/-/babel-3.6.2.tgz", - "integrity": "sha512-v8N8TWGXDsb5sxQC3Rcqb1CZr0LlU1OgqqVBUchN6cpIUr7EJuVJs5eHcIu5Ag8mwO/hWN3f7FE9uaHTMapAbg==", + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@docusaurus/babel/-/babel-3.7.0.tgz", + "integrity": "sha512-0H5uoJLm14S/oKV3Keihxvh8RV+vrid+6Gv+2qhuzbqHanawga8tYnsdpjEyt36ucJjqlby2/Md2ObWjA02UXQ==", "license": "MIT", "dependencies": { "@babel/core": "^7.25.9", @@ -3620,8 +3620,8 @@ "@babel/runtime": "^7.25.9", "@babel/runtime-corejs3": "^7.25.9", "@babel/traverse": "^7.25.9", - "@docusaurus/logger": "3.6.2", - "@docusaurus/utils": "3.6.2", + "@docusaurus/logger": "3.7.0", + "@docusaurus/utils": "3.7.0", "babel-plugin-dynamic-import-node": "^2.3.3", "fs-extra": "^11.1.1", "tslib": "^2.6.0" @@ -3631,17 +3631,17 @@ } }, "node_modules/@docusaurus/bundler": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/@docusaurus/bundler/-/bundler-3.6.2.tgz", - "integrity": "sha512-YkEifEVs4lV931SrHBB4n6WqRowMw+aM/QPH3z8aU+5t1dWa+1p2OPqARS+tSbh3la9ns+L1zIfSbd8RHi2/PQ==", + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@docusaurus/bundler/-/bundler-3.7.0.tgz", + "integrity": "sha512-CUUT9VlSGukrCU5ctZucykvgCISivct+cby28wJwCC/fkQFgAHRp/GKv2tx38ZmXb7nacrKzFTcp++f9txUYGg==", "license": "MIT", "dependencies": { "@babel/core": "^7.25.9", - "@docusaurus/babel": "3.6.2", - "@docusaurus/cssnano-preset": "3.6.2", - "@docusaurus/logger": "3.6.2", - "@docusaurus/types": "3.6.2", - "@docusaurus/utils": "3.6.2", + "@docusaurus/babel": "3.7.0", + "@docusaurus/cssnano-preset": "3.7.0", + "@docusaurus/logger": "3.7.0", + "@docusaurus/types": "3.7.0", + "@docusaurus/utils": "3.7.0", "babel-loader": "^9.2.1", "clean-css": "^5.3.2", "copy-webpack-plugin": "^11.0.0", @@ -3675,18 +3675,18 @@ } }, "node_modules/@docusaurus/core": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-3.6.2.tgz", - "integrity": "sha512-irMts/mGLZv8dWcy0WUtbY/U6b5qIfHgQd1/kXMyAxUJo99fL0wFSqhMI+tcxjk0HYy427MXerLMqFJj+Arg1w==", + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-3.7.0.tgz", + "integrity": "sha512-b0fUmaL+JbzDIQaamzpAFpTviiaU4cX3Qz8cuo14+HGBCwa0evEK0UYCBFY3n4cLzL8Op1BueeroUD2LYAIHbQ==", "license": "MIT", "dependencies": { - "@docusaurus/babel": "3.6.2", - "@docusaurus/bundler": "3.6.2", - "@docusaurus/logger": "3.6.2", - "@docusaurus/mdx-loader": "3.6.2", - "@docusaurus/utils": "3.6.2", - "@docusaurus/utils-common": "3.6.2", - "@docusaurus/utils-validation": "3.6.2", + "@docusaurus/babel": "3.7.0", + "@docusaurus/bundler": "3.7.0", + "@docusaurus/logger": "3.7.0", + "@docusaurus/mdx-loader": "3.7.0", + "@docusaurus/utils": "3.7.0", + "@docusaurus/utils-common": "3.7.0", + "@docusaurus/utils-validation": "3.7.0", "boxen": "^6.2.1", "chalk": "^4.1.2", "chokidar": "^3.5.3", @@ -3707,13 +3707,12 @@ "p-map": "^4.0.0", "prompts": "^2.4.2", "react-dev-utils": "^12.0.1", - "react-helmet-async": "^1.3.0", + "react-helmet-async": "npm:@slorber/react-helmet-async@1.3.0", "react-loadable": "npm:@docusaurus/react-loadable@6.0.0", "react-loadable-ssr-addon-v5-slorber": "^1.0.1", "react-router": "^5.3.4", "react-router-config": "^5.1.1", "react-router-dom": "^5.3.4", - "rtl-detect": "^1.0.4", "semver": "^7.5.4", "serve-handler": "^6.1.6", "shelljs": "^0.8.5", @@ -3732,14 +3731,14 @@ }, "peerDependencies": { "@mdx-js/react": "^3.0.0", - "react": "^18.0.0", - "react-dom": "^18.0.0" + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" } }, "node_modules/@docusaurus/cssnano-preset": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-3.6.2.tgz", - "integrity": "sha512-mBkVa4QMHRwCFCVLYdBlOZuAT1iVVsS7GGSgliSVAeTOagP/AbtlBsCVrBs+keEuDuRF1w/6QEcqDoZe9fa5pw==", + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-3.7.0.tgz", + "integrity": "sha512-X9GYgruZBSOozg4w4dzv9uOz8oK/EpPVQXkp0MM6Tsgp/nRIU9hJzJ0Pxg1aRa3xCeEQTOimZHcocQFlLwYajQ==", "license": "MIT", "dependencies": { "cssnano-preset-advanced": "^6.1.2", @@ -3752,9 +3751,9 @@ } }, "node_modules/@docusaurus/logger": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/@docusaurus/logger/-/logger-3.6.2.tgz", - "integrity": "sha512-1p4IQhhgLyIfsey4UAdAIW69aUE1Ei6O91Nsw30ryZeDWSG5dh4o3zaRGOLxfAX69Ac/yDm6YCwJOafUxL6Vxg==", + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@docusaurus/logger/-/logger-3.7.0.tgz", + "integrity": "sha512-z7g62X7bYxCYmeNNuO9jmzxLQG95q9QxINCwpboVcNff3SJiHJbGrarxxOVMVmAh1MsrSfxWkVGv4P41ktnFsA==", "license": "MIT", "dependencies": { "chalk": "^4.1.2", @@ -3765,14 +3764,14 @@ } }, "node_modules/@docusaurus/mdx-loader": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/@docusaurus/mdx-loader/-/mdx-loader-3.6.2.tgz", - "integrity": "sha512-7fbRmNgF3CR96Ja82Ya0/Cdu1OL9UJ/22llNMY8lr5gAbw718Y5ryXMVRIYn0JNLTiSxzgtvW4DIsUWEB8NMpw==", + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@docusaurus/mdx-loader/-/mdx-loader-3.7.0.tgz", + "integrity": "sha512-OFBG6oMjZzc78/U3WNPSHs2W9ZJ723ewAcvVJaqS0VgyeUfmzUV8f1sv+iUHA0DtwiR5T5FjOxj6nzEE8LY6VA==", "license": "MIT", "dependencies": { - "@docusaurus/logger": "3.6.2", - "@docusaurus/utils": "3.6.2", - "@docusaurus/utils-validation": "3.6.2", + "@docusaurus/logger": "3.7.0", + "@docusaurus/utils": "3.7.0", + "@docusaurus/utils-validation": "3.7.0", "@mdx-js/mdx": "^3.0.0", "@slorber/remark-comment": "^1.0.0", "escape-html": "^1.0.3", @@ -3799,22 +3798,22 @@ "node": ">=18.0" }, "peerDependencies": { - "react": "^18.0.0", - "react-dom": "^18.0.0" + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" } }, "node_modules/@docusaurus/module-type-aliases": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/@docusaurus/module-type-aliases/-/module-type-aliases-3.6.2.tgz", - "integrity": "sha512-NrJkL2rLTCjHtWOqUvWzwqvJrsKLj0gVJeV6q5yeKdKKgItietcTf2fTRkM9LHKSUN8CBDXxwHABeQvTahvmXQ==", + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@docusaurus/module-type-aliases/-/module-type-aliases-3.7.0.tgz", + "integrity": "sha512-g7WdPqDNaqA60CmBrr0cORTrsOit77hbsTj7xE2l71YhBn79sxdm7WMK7wfhcaafkbpIh7jv5ef5TOpf1Xv9Lg==", "license": "MIT", "dependencies": { - "@docusaurus/types": "3.6.2", + "@docusaurus/types": "3.7.0", "@types/history": "^4.7.11", "@types/react": "*", "@types/react-router-config": "*", "@types/react-router-dom": "*", - "react-helmet-async": "*", + "react-helmet-async": "npm:@slorber/react-helmet-async@*", "react-loadable": "npm:@docusaurus/react-loadable@6.0.0" }, "peerDependencies": { @@ -3823,19 +3822,19 @@ } }, "node_modules/@docusaurus/plugin-content-blog": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-blog/-/plugin-content-blog-3.6.2.tgz", - "integrity": "sha512-6bJxr6Or4NslEVH3BJuPH30kUWiqUjDRdGPhvxpHmt9W/RY2/6u72WICG3bW3dLFxJ/2uDLBU92lHnatpvo7Ew==", + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-blog/-/plugin-content-blog-3.7.0.tgz", + "integrity": "sha512-EFLgEz6tGHYWdPU0rK8tSscZwx+AsyuBW/r+tNig2kbccHYGUJmZtYN38GjAa3Fda4NU+6wqUO5kTXQSRBQD3g==", "license": "MIT", "dependencies": { - "@docusaurus/core": "3.6.2", - "@docusaurus/logger": "3.6.2", - "@docusaurus/mdx-loader": "3.6.2", - "@docusaurus/theme-common": "3.6.2", - "@docusaurus/types": "3.6.2", - "@docusaurus/utils": "3.6.2", - "@docusaurus/utils-common": "3.6.2", - "@docusaurus/utils-validation": "3.6.2", + "@docusaurus/core": "3.7.0", + "@docusaurus/logger": "3.7.0", + "@docusaurus/mdx-loader": "3.7.0", + "@docusaurus/theme-common": "3.7.0", + "@docusaurus/types": "3.7.0", + "@docusaurus/utils": "3.7.0", + "@docusaurus/utils-common": "3.7.0", + "@docusaurus/utils-validation": "3.7.0", "cheerio": "1.0.0-rc.12", "feed": "^4.2.2", "fs-extra": "^11.1.1", @@ -3852,25 +3851,25 @@ }, "peerDependencies": { "@docusaurus/plugin-content-docs": "*", - "react": "^18.0.0", - "react-dom": "^18.0.0" + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" } }, "node_modules/@docusaurus/plugin-content-docs": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-docs/-/plugin-content-docs-3.6.2.tgz", - "integrity": "sha512-e6WW1g10RIXXLN/rrtqTi/FyJ1Hj3X9Mmgz4V11/0pDCxIGGI8m4ocbAglUlLtgvbLD5viNLefl/NwbOW3JXiQ==", + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-docs/-/plugin-content-docs-3.7.0.tgz", + "integrity": "sha512-GXg5V7kC9FZE4FkUZA8oo/NrlRb06UwuICzI6tcbzj0+TVgjq/mpUXXzSgKzMS82YByi4dY2Q808njcBCyy6tQ==", "license": "MIT", "dependencies": { - "@docusaurus/core": "3.6.2", - "@docusaurus/logger": "3.6.2", - "@docusaurus/mdx-loader": "3.6.2", - "@docusaurus/module-type-aliases": "3.6.2", - "@docusaurus/theme-common": "3.6.2", - "@docusaurus/types": "3.6.2", - "@docusaurus/utils": "3.6.2", - "@docusaurus/utils-common": "3.6.2", - "@docusaurus/utils-validation": "3.6.2", + "@docusaurus/core": "3.7.0", + "@docusaurus/logger": "3.7.0", + "@docusaurus/mdx-loader": "3.7.0", + "@docusaurus/module-type-aliases": "3.7.0", + "@docusaurus/theme-common": "3.7.0", + "@docusaurus/types": "3.7.0", + "@docusaurus/utils": "3.7.0", + "@docusaurus/utils-common": "3.7.0", + "@docusaurus/utils-validation": "3.7.0", "@types/react-router-config": "^5.0.7", "combine-promises": "^1.1.0", "fs-extra": "^11.1.1", @@ -3884,21 +3883,21 @@ "node": ">=18.0" }, "peerDependencies": { - "react": "^18.0.0", - "react-dom": "^18.0.0" + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" } }, "node_modules/@docusaurus/plugin-content-pages": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-pages/-/plugin-content-pages-3.6.2.tgz", - "integrity": "sha512-fo4NyGkw10lYHyHaTxE6TZLYnxNtCfRHeZkNK1N9pBYqe7TT2dBUNAEeVW2U3ed9m6YuB7JKSQsa++GGmcP+6g==", + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-pages/-/plugin-content-pages-3.7.0.tgz", + "integrity": "sha512-YJSU3tjIJf032/Aeao8SZjFOrXJbz/FACMveSMjLyMH4itQyZ2XgUIzt4y+1ISvvk5zrW4DABVT2awTCqBkx0Q==", "license": "MIT", "dependencies": { - "@docusaurus/core": "3.6.2", - "@docusaurus/mdx-loader": "3.6.2", - "@docusaurus/types": "3.6.2", - "@docusaurus/utils": "3.6.2", - "@docusaurus/utils-validation": "3.6.2", + "@docusaurus/core": "3.7.0", + "@docusaurus/mdx-loader": "3.7.0", + "@docusaurus/types": "3.7.0", + "@docusaurus/utils": "3.7.0", + "@docusaurus/utils-validation": "3.7.0", "fs-extra": "^11.1.1", "tslib": "^2.6.0", "webpack": "^5.88.1" @@ -3907,19 +3906,19 @@ "node": ">=18.0" }, "peerDependencies": { - "react": "^18.0.0", - "react-dom": "^18.0.0" + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" } }, "node_modules/@docusaurus/plugin-debug": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-debug/-/plugin-debug-3.6.2.tgz", - "integrity": "sha512-T/eS3VvHElpeV5S8uwp7Si4ujEynmgFtJLvA2CSa5pzQuOF1EEghF9nekAIj0cWtDHsqNUDZNr8hK1brivFXSg==", + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-debug/-/plugin-debug-3.7.0.tgz", + "integrity": "sha512-Qgg+IjG/z4svtbCNyTocjIwvNTNEwgRjSXXSJkKVG0oWoH0eX/HAPiu+TS1HBwRPQV+tTYPWLrUypYFepfujZA==", "license": "MIT", "dependencies": { - "@docusaurus/core": "3.6.2", - "@docusaurus/types": "3.6.2", - "@docusaurus/utils": "3.6.2", + "@docusaurus/core": "3.7.0", + "@docusaurus/types": "3.7.0", + "@docusaurus/utils": "3.7.0", "fs-extra": "^11.1.1", "react-json-view-lite": "^1.2.0", "tslib": "^2.6.0" @@ -3928,38 +3927,38 @@ "node": ">=18.0" }, "peerDependencies": { - "react": "^18.0.0", - "react-dom": "^18.0.0" + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" } }, "node_modules/@docusaurus/plugin-google-analytics": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-3.6.2.tgz", - "integrity": "sha512-B7ihrr3wz8e4XqW+dIAtq844u3Z83u5CeiL1xrCqzFH+vDCjUZHTamS3zKXNcgi6YVVe6hUQXPG15ltaqQaVPQ==", + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-3.7.0.tgz", + "integrity": "sha512-otIqiRV/jka6Snjf+AqB360XCeSv7lQC+DKYW+EUZf6XbuE8utz5PeUQ8VuOcD8Bk5zvT1MC4JKcd5zPfDuMWA==", "license": "MIT", "dependencies": { - "@docusaurus/core": "3.6.2", - "@docusaurus/types": "3.6.2", - "@docusaurus/utils-validation": "3.6.2", + "@docusaurus/core": "3.7.0", + "@docusaurus/types": "3.7.0", + "@docusaurus/utils-validation": "3.7.0", "tslib": "^2.6.0" }, "engines": { "node": ">=18.0" }, "peerDependencies": { - "react": "^18.0.0", - "react-dom": "^18.0.0" + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" } }, "node_modules/@docusaurus/plugin-google-gtag": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-3.6.2.tgz", - "integrity": "sha512-V8ijI6qddAAkJ0vd8sjZ7S/apRTLJn9dAwvj/rSMd93witGdKINemL+9TyfLkhcXKTxyqRT8zKdu8ewjPXqKHg==", + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-3.7.0.tgz", + "integrity": "sha512-M3vrMct1tY65ModbyeDaMoA+fNJTSPe5qmchhAbtqhDD/iALri0g9LrEpIOwNaoLmm6lO88sfBUADQrSRSGSWA==", "license": "MIT", "dependencies": { - "@docusaurus/core": "3.6.2", - "@docusaurus/types": "3.6.2", - "@docusaurus/utils-validation": "3.6.2", + "@docusaurus/core": "3.7.0", + "@docusaurus/types": "3.7.0", + "@docusaurus/utils-validation": "3.7.0", "@types/gtag.js": "^0.0.12", "tslib": "^2.6.0" }, @@ -3967,41 +3966,41 @@ "node": ">=18.0" }, "peerDependencies": { - "react": "^18.0.0", - "react-dom": "^18.0.0" + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" } }, "node_modules/@docusaurus/plugin-google-tag-manager": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-tag-manager/-/plugin-google-tag-manager-3.6.2.tgz", - "integrity": "sha512-fnWQ5FdN9f8c8VTgjaQ98208Y+d/JjHhD506rWIIL9rt1cJOf29XElxvOeKpMJadfkgY5KLZSAiHkGt+4qgN4g==", + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-tag-manager/-/plugin-google-tag-manager-3.7.0.tgz", + "integrity": "sha512-X8U78nb8eiMiPNg3jb9zDIVuuo/rE1LjGDGu+5m5CX4UBZzjMy+klOY2fNya6x8ACyE/L3K2erO1ErheP55W/w==", "license": "MIT", "dependencies": { - "@docusaurus/core": "3.6.2", - "@docusaurus/types": "3.6.2", - "@docusaurus/utils-validation": "3.6.2", + "@docusaurus/core": "3.7.0", + "@docusaurus/types": "3.7.0", + "@docusaurus/utils-validation": "3.7.0", "tslib": "^2.6.0" }, "engines": { "node": ">=18.0" }, "peerDependencies": { - "react": "^18.0.0", - "react-dom": "^18.0.0" + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" } }, "node_modules/@docusaurus/plugin-sitemap": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-sitemap/-/plugin-sitemap-3.6.2.tgz", - "integrity": "sha512-qcAQAP1Ot0dZpeRoJ0L/Zck5FVDkll2IleVZQLzxeRVDZIw1P9/TK7/Aw1w2pmH7dmw/Cwk/cLSVRvLAmp9k7A==", + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-sitemap/-/plugin-sitemap-3.7.0.tgz", + "integrity": "sha512-bTRT9YLZ/8I/wYWKMQke18+PF9MV8Qub34Sku6aw/vlZ/U+kuEuRpQ8bTcNOjaTSfYsWkK4tTwDMHK2p5S86cA==", "license": "MIT", "dependencies": { - "@docusaurus/core": "3.6.2", - "@docusaurus/logger": "3.6.2", - "@docusaurus/types": "3.6.2", - "@docusaurus/utils": "3.6.2", - "@docusaurus/utils-common": "3.6.2", - "@docusaurus/utils-validation": "3.6.2", + "@docusaurus/core": "3.7.0", + "@docusaurus/logger": "3.7.0", + "@docusaurus/types": "3.7.0", + "@docusaurus/utils": "3.7.0", + "@docusaurus/utils-common": "3.7.0", + "@docusaurus/utils-validation": "3.7.0", "fs-extra": "^11.1.1", "sitemap": "^7.1.1", "tslib": "^2.6.0" @@ -4010,57 +4009,81 @@ "node": ">=18.0" }, "peerDependencies": { - "react": "^18.0.0", - "react-dom": "^18.0.0" + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" } }, - "node_modules/@docusaurus/preset-classic": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/@docusaurus/preset-classic/-/preset-classic-3.6.2.tgz", - "integrity": "sha512-r2n5eHdhiNSrJGsrrYcw+WsyStmXxe0ZG3RdA9LVyK5+jBHM8blrUWJEDugnzCNbyhUzhdtcmgCC9fhdAvKuQw==", + "node_modules/@docusaurus/plugin-svgr": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-svgr/-/plugin-svgr-3.7.0.tgz", + "integrity": "sha512-HByXIZTbc4GV5VAUkZ2DXtXv1Qdlnpk3IpuImwSnEzCDBkUMYcec5282hPjn6skZqB25M1TYCmWS91UbhBGxQg==", "license": "MIT", "dependencies": { - "@docusaurus/core": "3.6.2", - "@docusaurus/plugin-content-blog": "3.6.2", - "@docusaurus/plugin-content-docs": "3.6.2", - "@docusaurus/plugin-content-pages": "3.6.2", - "@docusaurus/plugin-debug": "3.6.2", - "@docusaurus/plugin-google-analytics": "3.6.2", - "@docusaurus/plugin-google-gtag": "3.6.2", - "@docusaurus/plugin-google-tag-manager": "3.6.2", - "@docusaurus/plugin-sitemap": "3.6.2", - "@docusaurus/theme-classic": "3.6.2", - "@docusaurus/theme-common": "3.6.2", - "@docusaurus/theme-search-algolia": "3.6.2", - "@docusaurus/types": "3.6.2" + "@docusaurus/core": "3.7.0", + "@docusaurus/types": "3.7.0", + "@docusaurus/utils": "3.7.0", + "@docusaurus/utils-validation": "3.7.0", + "@svgr/core": "8.1.0", + "@svgr/webpack": "^8.1.0", + "tslib": "^2.6.0", + "webpack": "^5.88.1" }, "engines": { "node": ">=18.0" }, "peerDependencies": { - "react": "^18.0.0", - "react-dom": "^18.0.0" + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + } + }, + "node_modules/@docusaurus/preset-classic": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@docusaurus/preset-classic/-/preset-classic-3.7.0.tgz", + "integrity": "sha512-nPHj8AxDLAaQXs+O6+BwILFuhiWbjfQWrdw2tifOClQoNfuXDjfjogee6zfx6NGHWqshR23LrcN115DmkHC91Q==", + "license": "MIT", + "dependencies": { + "@docusaurus/core": "3.7.0", + "@docusaurus/plugin-content-blog": "3.7.0", + "@docusaurus/plugin-content-docs": "3.7.0", + "@docusaurus/plugin-content-pages": "3.7.0", + "@docusaurus/plugin-debug": "3.7.0", + "@docusaurus/plugin-google-analytics": "3.7.0", + "@docusaurus/plugin-google-gtag": "3.7.0", + "@docusaurus/plugin-google-tag-manager": "3.7.0", + "@docusaurus/plugin-sitemap": "3.7.0", + "@docusaurus/plugin-svgr": "3.7.0", + "@docusaurus/theme-classic": "3.7.0", + "@docusaurus/theme-common": "3.7.0", + "@docusaurus/theme-search-algolia": "3.7.0", + "@docusaurus/types": "3.7.0" + }, + "engines": { + "node": ">=18.0" + }, + "peerDependencies": { + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" } }, "node_modules/@docusaurus/theme-classic": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-classic/-/theme-classic-3.6.2.tgz", - "integrity": "sha512-bCdOPqPNezhLx+hgNVO2Cf+8/1AHa9uHDOqTx/CKAx2I0J/jV9G+6JiMtpSRKGNfBoLT1O+56/7+WtkOf54xTw==", + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-classic/-/theme-classic-3.7.0.tgz", + "integrity": "sha512-MnLxG39WcvLCl4eUzHr0gNcpHQfWoGqzADCly54aqCofQX6UozOS9Th4RK3ARbM9m7zIRv3qbhggI53dQtx/hQ==", "license": "MIT", "dependencies": { - "@docusaurus/core": "3.6.2", - "@docusaurus/logger": "3.6.2", - "@docusaurus/mdx-loader": "3.6.2", - "@docusaurus/module-type-aliases": "3.6.2", - "@docusaurus/plugin-content-blog": "3.6.2", - "@docusaurus/plugin-content-docs": "3.6.2", - "@docusaurus/plugin-content-pages": "3.6.2", - "@docusaurus/theme-common": "3.6.2", - "@docusaurus/theme-translations": "3.6.2", - "@docusaurus/types": "3.6.2", - "@docusaurus/utils": "3.6.2", - "@docusaurus/utils-common": "3.6.2", - "@docusaurus/utils-validation": "3.6.2", + "@docusaurus/core": "3.7.0", + "@docusaurus/logger": "3.7.0", + "@docusaurus/mdx-loader": "3.7.0", + "@docusaurus/module-type-aliases": "3.7.0", + "@docusaurus/plugin-content-blog": "3.7.0", + "@docusaurus/plugin-content-docs": "3.7.0", + "@docusaurus/plugin-content-pages": "3.7.0", + "@docusaurus/theme-common": "3.7.0", + "@docusaurus/theme-translations": "3.7.0", + "@docusaurus/types": "3.7.0", + "@docusaurus/utils": "3.7.0", + "@docusaurus/utils-common": "3.7.0", + "@docusaurus/utils-validation": "3.7.0", "@mdx-js/react": "^3.0.0", "clsx": "^2.0.0", "copy-text-to-clipboard": "^3.2.0", @@ -4079,20 +4102,20 @@ "node": ">=18.0" }, "peerDependencies": { - "react": "^18.0.0", - "react-dom": "^18.0.0" + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" } }, "node_modules/@docusaurus/theme-common": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-common/-/theme-common-3.6.2.tgz", - "integrity": "sha512-lfgsL064KEHpCkgGUc0OYoUPCpYfzggp6Hof8sz59UuKiLvb/Z7raewE9/NfocrJ2HZI17rLgMX3SQlRDh/5gg==", + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-common/-/theme-common-3.7.0.tgz", + "integrity": "sha512-8eJ5X0y+gWDsURZnBfH0WabdNm8XMCXHv8ENy/3Z/oQKwaB/EHt5lP9VsTDTf36lKEp0V6DjzjFyFIB+CetL0A==", "license": "MIT", "dependencies": { - "@docusaurus/mdx-loader": "3.6.2", - "@docusaurus/module-type-aliases": "3.6.2", - "@docusaurus/utils": "3.6.2", - "@docusaurus/utils-common": "3.6.2", + "@docusaurus/mdx-loader": "3.7.0", + "@docusaurus/module-type-aliases": "3.7.0", + "@docusaurus/utils": "3.7.0", + "@docusaurus/utils-common": "3.7.0", "@types/history": "^4.7.11", "@types/react": "*", "@types/react-router-config": "*", @@ -4107,21 +4130,21 @@ }, "peerDependencies": { "@docusaurus/plugin-content-docs": "*", - "react": "^18.0.0", - "react-dom": "^18.0.0" + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" } }, "node_modules/@docusaurus/theme-mermaid": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-mermaid/-/theme-mermaid-3.6.2.tgz", - "integrity": "sha512-Ui+rBtqMPKj3RCOxNlY04i1tEjNg+fZg4URTvkHmYR07hcKaJw+vkw+wlaYjd0HFZk+3Er9vUAcwsCWuea4cVQ==", + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-mermaid/-/theme-mermaid-3.7.0.tgz", + "integrity": "sha512-7kNDvL7hm+tshjxSxIqYMtsLUPsEBYnkevej/ext6ru9xyLgCed+zkvTfGzTWNeq8rJIEe2YSS8/OV5gCVaPCw==", "license": "MIT", "dependencies": { - "@docusaurus/core": "3.6.2", - "@docusaurus/module-type-aliases": "3.6.2", - "@docusaurus/theme-common": "3.6.2", - "@docusaurus/types": "3.6.2", - "@docusaurus/utils-validation": "3.6.2", + "@docusaurus/core": "3.7.0", + "@docusaurus/module-type-aliases": "3.7.0", + "@docusaurus/theme-common": "3.7.0", + "@docusaurus/types": "3.7.0", + "@docusaurus/utils-validation": "3.7.0", "mermaid": ">=10.4", "tslib": "^2.6.0" }, @@ -4129,26 +4152,26 @@ "node": ">=18.0" }, "peerDependencies": { - "react": "^18.0.0", - "react-dom": "^18.0.0" + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" } }, "node_modules/@docusaurus/theme-search-algolia": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-search-algolia/-/theme-search-algolia-3.6.2.tgz", - "integrity": "sha512-SFLS+Rq8Cg2yepnHucA9sRpIR97yHvZWlCgMzBLunV3KHbB6hD2h5HPhFV39wYHYCjJUAOH1lX9poJ1qKYuSvg==", + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-search-algolia/-/theme-search-algolia-3.7.0.tgz", + "integrity": "sha512-Al/j5OdzwRU1m3falm+sYy9AaB93S1XF1Lgk9Yc6amp80dNxJVplQdQTR4cYdzkGtuQqbzUA8+kaoYYO0RbK6g==", "license": "MIT", "dependencies": { - "@docsearch/react": "^3.5.2", - "@docusaurus/core": "3.6.2", - "@docusaurus/logger": "3.6.2", - "@docusaurus/plugin-content-docs": "3.6.2", - "@docusaurus/theme-common": "3.6.2", - "@docusaurus/theme-translations": "3.6.2", - "@docusaurus/utils": "3.6.2", - "@docusaurus/utils-validation": "3.6.2", - "algoliasearch": "^4.18.0", - "algoliasearch-helper": "^3.13.3", + "@docsearch/react": "^3.8.1", + "@docusaurus/core": "3.7.0", + "@docusaurus/logger": "3.7.0", + "@docusaurus/plugin-content-docs": "3.7.0", + "@docusaurus/theme-common": "3.7.0", + "@docusaurus/theme-translations": "3.7.0", + "@docusaurus/utils": "3.7.0", + "@docusaurus/utils-validation": "3.7.0", + "algoliasearch": "^5.17.1", + "algoliasearch-helper": "^3.22.6", "clsx": "^2.0.0", "eta": "^2.2.0", "fs-extra": "^11.1.1", @@ -4160,14 +4183,131 @@ "node": ">=18.0" }, "peerDependencies": { - "react": "^18.0.0", - "react-dom": "^18.0.0" + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + } + }, + "node_modules/@docusaurus/theme-search-algolia/node_modules/@algolia/client-analytics": { + "version": "5.19.0", + "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-5.19.0.tgz", + "integrity": "sha512-CDW4RwnCHzU10upPJqS6N6YwDpDHno7w6/qXT9KPbPbt8szIIzCHrva4O9KIfx1OhdsHzfGSI5hMAiOOYl4DEQ==", + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.19.0", + "@algolia/requester-browser-xhr": "5.19.0", + "@algolia/requester-fetch": "5.19.0", + "@algolia/requester-node-http": "5.19.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@docusaurus/theme-search-algolia/node_modules/@algolia/client-common": { + "version": "5.19.0", + "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.19.0.tgz", + "integrity": "sha512-2ERRbICHXvtj5kfFpY5r8qu9pJII/NAHsdgUXnUitQFwPdPL7wXiupcvZJC7DSntOnE8AE0lM7oDsPhrJfj5nQ==", + "license": "MIT", + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@docusaurus/theme-search-algolia/node_modules/@algolia/client-personalization": { + "version": "5.19.0", + "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-5.19.0.tgz", + "integrity": "sha512-B9eoce/fk8NLboGje+pMr72pw+PV7c5Z01On477heTZ7jkxoZ4X92dobeGuEQop61cJ93Gaevd1of4mBr4hu2A==", + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.19.0", + "@algolia/requester-browser-xhr": "5.19.0", + "@algolia/requester-fetch": "5.19.0", + "@algolia/requester-node-http": "5.19.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@docusaurus/theme-search-algolia/node_modules/@algolia/client-search": { + "version": "5.19.0", + "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-5.19.0.tgz", + "integrity": "sha512-Ctg3xXD/1VtcwmkulR5+cKGOMj4r0wC49Y/KZdGQcqpydKn+e86F6l3tb3utLJQVq4lpEJud6kdRykFgcNsp8Q==", + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.19.0", + "@algolia/requester-browser-xhr": "5.19.0", + "@algolia/requester-fetch": "5.19.0", + "@algolia/requester-node-http": "5.19.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@docusaurus/theme-search-algolia/node_modules/@algolia/recommend": { + "version": "5.19.0", + "resolved": "https://registry.npmjs.org/@algolia/recommend/-/recommend-5.19.0.tgz", + "integrity": "sha512-PbgrMTbUPlmwfJsxjFhal4XqZO2kpBNRjemLVTkUiti4w/+kzcYO4Hg5zaBgVqPwvFDNQ8JS4SS3TBBem88u+g==", + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.19.0", + "@algolia/requester-browser-xhr": "5.19.0", + "@algolia/requester-fetch": "5.19.0", + "@algolia/requester-node-http": "5.19.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@docusaurus/theme-search-algolia/node_modules/@algolia/requester-browser-xhr": { + "version": "5.19.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.19.0.tgz", + "integrity": "sha512-GfnhnQBT23mW/VMNs7m1qyEyZzhZz093aY2x8p0era96MMyNv8+FxGek5pjVX0b57tmSCZPf4EqNCpkGcGsmbw==", + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.19.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@docusaurus/theme-search-algolia/node_modules/@algolia/requester-node-http": { + "version": "5.19.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-5.19.0.tgz", + "integrity": "sha512-p6t8ue0XZNjcRiqNkb5QAM0qQRAKsCiebZ6n9JjWA+p8fWf8BvnhO55y2fO28g3GW0Imj7PrAuyBuxq8aDVQwQ==", + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.19.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@docusaurus/theme-search-algolia/node_modules/algoliasearch": { + "version": "5.19.0", + "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-5.19.0.tgz", + "integrity": "sha512-zrLtGhC63z3sVLDDKGW+SlCRN9eJHFTgdEmoAOpsVh6wgGL1GgTTDou7tpCBjevzgIvi3AIyDAQO3Xjbg5eqZg==", + "license": "MIT", + "dependencies": { + "@algolia/client-abtesting": "5.19.0", + "@algolia/client-analytics": "5.19.0", + "@algolia/client-common": "5.19.0", + "@algolia/client-insights": "5.19.0", + "@algolia/client-personalization": "5.19.0", + "@algolia/client-query-suggestions": "5.19.0", + "@algolia/client-search": "5.19.0", + "@algolia/ingestion": "1.19.0", + "@algolia/monitoring": "1.19.0", + "@algolia/recommend": "5.19.0", + "@algolia/requester-browser-xhr": "5.19.0", + "@algolia/requester-fetch": "5.19.0", + "@algolia/requester-node-http": "5.19.0" + }, + "engines": { + "node": ">= 14.0.0" } }, "node_modules/@docusaurus/theme-translations": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-translations/-/theme-translations-3.6.2.tgz", - "integrity": "sha512-LIWrYoDUsOTKmb0c7IQzawiPUTAaczBs5IOx6srxOWoTHVUMLzJCkl5Y6whfuRrnul8G05qv2vk238bN5Ko62g==", + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-translations/-/theme-translations-3.7.0.tgz", + "integrity": "sha512-Ewq3bEraWDmienM6eaNK7fx+/lHMtGDHQyd1O+4+3EsDxxUmrzPkV7Ct3nBWTuE0MsoZr3yNwQVKjllzCMuU3g==", "license": "MIT", "dependencies": { "fs-extra": "^11.1.1", @@ -4178,9 +4318,9 @@ } }, "node_modules/@docusaurus/types": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-3.6.2.tgz", - "integrity": "sha512-117Wsk6xXrWEAsCYCXS3TGJv5tkdIZDcd7T/V0UJvKYmY0gyVPPcEQChy8yTdjbIkbB2q4fa7Jpox72Qv86mqQ==", + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-3.7.0.tgz", + "integrity": "sha512-kOmZg5RRqJfH31m+6ZpnwVbkqMJrPOG5t0IOl4i/+3ruXyNfWzZ0lVtVrD0u4ONc/0NOsS9sWYaxxWNkH1LdLQ==", "license": "MIT", "dependencies": { "@mdx-js/mdx": "^3.0.0", @@ -4188,14 +4328,14 @@ "@types/react": "*", "commander": "^5.1.0", "joi": "^17.9.2", - "react-helmet-async": "^1.3.0", + "react-helmet-async": "npm:@slorber/react-helmet-async@1.3.0", "utility-types": "^3.10.0", "webpack": "^5.95.0", "webpack-merge": "^5.9.0" }, "peerDependencies": { - "react": "^18.0.0", - "react-dom": "^18.0.0" + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" } }, "node_modules/@docusaurus/types/node_modules/webpack-merge": { @@ -4213,15 +4353,14 @@ } }, "node_modules/@docusaurus/utils": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-3.6.2.tgz", - "integrity": "sha512-oxnpUcFZGE3uPCDoXr8GJriB3VWM9sFjPedFidX3Fsz87l1NZNc1wtbKPfQ7GYFDMYo2IGlAv5+47Me9RkM6lg==", + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-3.7.0.tgz", + "integrity": "sha512-e7zcB6TPnVzyUaHMJyLSArKa2AG3h9+4CfvKXKKWNx6hRs+p0a+u7HHTJBgo6KW2m+vqDnuIHK4X+bhmoghAFA==", "license": "MIT", "dependencies": { - "@docusaurus/logger": "3.6.2", - "@docusaurus/types": "3.6.2", - "@docusaurus/utils-common": "3.6.2", - "@svgr/webpack": "^8.1.0", + "@docusaurus/logger": "3.7.0", + "@docusaurus/types": "3.7.0", + "@docusaurus/utils-common": "3.7.0", "escape-string-regexp": "^4.0.0", "file-loader": "^6.2.0", "fs-extra": "^11.1.1", @@ -4245,12 +4384,12 @@ } }, "node_modules/@docusaurus/utils-common": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/@docusaurus/utils-common/-/utils-common-3.6.2.tgz", - "integrity": "sha512-dr5wK+OyU2QAWxG7S5siD2bPgS7+ZeqWHfgLNHZ5yalaZf8TbeNNLqydfngukAY56BGZN0NbMkX6jGIr7ZF0sA==", + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@docusaurus/utils-common/-/utils-common-3.7.0.tgz", + "integrity": "sha512-IZeyIfCfXy0Mevj6bWNg7DG7B8G+S6o6JVpddikZtWyxJguiQ7JYr0SIZ0qWd8pGNuMyVwriWmbWqMnK7Y5PwA==", "license": "MIT", "dependencies": { - "@docusaurus/types": "3.6.2", + "@docusaurus/types": "3.7.0", "tslib": "^2.6.0" }, "engines": { @@ -4258,14 +4397,14 @@ } }, "node_modules/@docusaurus/utils-validation": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-3.6.2.tgz", - "integrity": "sha512-Y3EwblDz72KOcobb5t2zlhHSmrfE8EaHusPJ96Kx2JYtNXL2omqCoOb6FpaXWhES75wvjUpkFLYfiNqAqEov8g==", + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-3.7.0.tgz", + "integrity": "sha512-w8eiKk8mRdN+bNfeZqC4nyFoxNyI1/VExMKAzD9tqpJfLLbsa46Wfn5wcKH761g9WkKh36RtFV49iL9lh1DYBA==", "license": "MIT", "dependencies": { - "@docusaurus/logger": "3.6.2", - "@docusaurus/utils": "3.6.2", - "@docusaurus/utils-common": "3.6.2", + "@docusaurus/logger": "3.7.0", + "@docusaurus/utils": "3.7.0", + "@docusaurus/utils-common": "3.7.0", "fs-extra": "^11.2.0", "joi": "^17.9.2", "js-yaml": "^4.1.0", @@ -5888,9 +6027,9 @@ } }, "node_modules/algoliasearch-helper": { - "version": "3.22.5", - "resolved": "https://registry.npmjs.org/algoliasearch-helper/-/algoliasearch-helper-3.22.5.tgz", - "integrity": "sha512-lWvhdnc+aKOKx8jyA3bsdEgHzm/sglC4cYdMG4xSQyRiPLJVJtH/IVYZG3Hp6PkTEhQqhyVYkeP9z2IlcHJsWw==", + "version": "3.23.0", + "resolved": "https://registry.npmjs.org/algoliasearch-helper/-/algoliasearch-helper-3.23.0.tgz", + "integrity": "sha512-8CK4Gb/ju4OesAYcS+mjBpNiVA7ILWpg7D2vhBZohh0YkG8QT1KZ9LG+8+EntQBUGoKtPy06OFhiwP4f5zzAQg==", "license": "MIT", "dependencies": { "@algolia/events": "^4.0.1" @@ -17231,12 +17370,6 @@ "points-on-path": "^0.2.1" } }, - "node_modules/rtl-detect": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/rtl-detect/-/rtl-detect-1.1.2.tgz", - "integrity": "sha512-PGMBq03+TTG/p/cRB7HCLKJ1MgDIi07+QU1faSjiYRfmY5UsAttV9Hs08jDAHVwcOwmVLcSJkpwyfXszVjWfIQ==", - "license": "BSD-3-Clause" - }, "node_modules/rtlcss": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/rtlcss/-/rtlcss-4.3.0.tgz", diff --git a/docs/package.json b/docs/package.json index 5ee770b61..90e4497e1 100644 --- a/docs/package.json +++ b/docs/package.json @@ -15,9 +15,9 @@ }, "dependencies": { "@cmfcmf/docusaurus-search-local": "1.2.0", - "@docusaurus/core": "3.6.2", - "@docusaurus/preset-classic": "3.6.2", - "@docusaurus/theme-mermaid": "3.6.2", + "@docusaurus/core": "3.7.0", + "@docusaurus/preset-classic": "3.7.0", + "@docusaurus/theme-mermaid": "3.7.0", "@mdx-js/react": "3.1.0", "asciinema-player": "3.8.1", "clsx": "2.1.1", @@ -26,12 +26,12 @@ "react-dom": "18.3.1" }, "devDependencies": { - "@docusaurus/module-type-aliases": "3.6.2", - "@docusaurus/types": "3.6.2" + "@docusaurus/module-type-aliases": "3.7.0", + "@docusaurus/types": "3.7.0" }, "overrides": { "@cmfcmf/docusaurus-search-local": { - "@docusaurus/core": "3.6.2", + "@docusaurus/core": "3.7.0", "cheerio": "1.0.0-rc.12" } }, From 3a898e9cff253e431a1bf123389bfa32cbdbd079 Mon Sep 17 00:00:00 2001 From: edgelessci <71088502+edgelessci@users.noreply.github.com> Date: Mon, 20 Jan 2025 09:07:00 +0100 Subject: [PATCH 060/311] image: update locked rpms (#3594) Co-authored-by: edgelessci --- image/mirror/SHA256SUMS | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/image/mirror/SHA256SUMS b/image/mirror/SHA256SUMS index dde1f87df..c797082c9 100644 --- a/image/mirror/SHA256SUMS +++ b/image/mirror/SHA256SUMS @@ -208,7 +208,7 @@ d92173d6fbfb7e2af3b35a8554229e247666e15dc5b36cba43b7bbfc4144b781 libtasn1-4.19. e5d150d23f95e4a23288b84145af442607a88bf457c0e04b325b1d1e8e708c2b libtool-ltdl-2.4.7-10.fc40.x86_64.rpm e541a1c8397dccf159b3602eb6bbb381ba21c544db337a3b3bfc49ccc2ef5c21 libunistring-1.1-7.fc40.i686.rpm 58719c2f205b23598e31b72144ab55215947ad8fca96af46a641288692c159d2 libunistring-1.1-7.fc40.x86_64.rpm -bc60959e98e5f690bc3df03bfa8afee2d0cf28e794c4e3c52f19769885771321 libusb1-1.0.27-4.fc40.x86_64.rpm +4a04211756b779128d1599b6a334ed69ed05d7190e347545d65177fdd484ee55 libusb1-1.0.27-6.fc40.x86_64.rpm 896d671852ed3f28e8c778dca361c5b5c57a89855df11755e6be1d088f64d43a libutempter-1.2.1-13.fc40.i686.rpm 0093a8d3f490fbbbc71b01e0c8f9b083040dbf7513be31a91a0769d846198c1b libutempter-1.2.1-13.fc40.x86_64.rpm 5aaa12bba361ae29b2a6b35c4b21da935423bc2ad763eaa8267008c7a533cb3c libuuid-2.40-0.9.rc1.fc40.i686.rpm @@ -308,7 +308,7 @@ c48c149f4aebfe44d649eea6f7a8eaa229dc8db71ff70b66c7403aa9bd072820 rpm-libs-4.19. 7bebda41ea91faf8cf8911a403c051eb59d444e60f8091d14d10987b713f39ff rpm-plugin-audit-4.19.1.1-1.fc40.x86_64.rpm d400a4e4440bea56566fb1e9582d86d1ac2e07745d37fa6e71f43a8fea05217c rpm-plugin-selinux-4.19.1.1-1.fc40.x86_64.rpm 7fdc56b6abf0b36209010e2f4cc02febe079b50b0cb1ed7e564045b34059d8a7 rpm-sequoia-1.7.0-3.fc40.x86_64.rpm -37ae30870dacd02dc2b0a38b22c4cd9120b504ec46b27d4bc2fbb69394a3d3ce runc-1.2.3-1.fc40.x86_64.rpm +22fe9c46b5a273164b3520428d2f00f58b1c3ec7ccc52a9f0285d72e823ef0a5 runc-1.2.4-1.fc40.x86_64.rpm 5dbd069183076ed8048c839c31f713c0f6080fb9ebfdda92ac550030688e811b sbsigntools-0.9.5-6.fc40.x86_64.rpm 6a21b2c132a54fd6d9acb846d0a96289ab739b745cdc4c2b31bdbf6b2434a1a7 sed-4.9-1.fc40.x86_64.rpm b4e188db51c7ec2d5f0cba79783eb2df7c14a92c2c6e55a9eb490d28d17d123d selinux-policy-40.29-2.fc40.noarch.rpm @@ -332,24 +332,24 @@ d59030b779fdc989af950179ce808639a58878e6b8db4458fa7f7217c1b3b833 systemd-pam-25 0478e12152cc3432a31dfca5ddbc80966800af437c6d7c0b26be307d5e1272e7 tpm2-tools-5.7-1.fc40.x86_64.rpm c3be8a6d0ea23b1d0bf466b19857b97f7ffde811ad7adec0599161059d84cc74 tpm2-tss-4.1.3-1.fc40.x86_64.rpm 5df98756883badf7743cdd75f5689b62606bff0b74494b20241cb9d78335c251 tpm2-tss-fapi-4.1.3-1.fc40.x86_64.rpm -0bd358e7dfb2bd730b62c7375c8d8f8d9e2470f085ca8dc4ec626dc0332d5687 tzdata-2024a-5.fc40.noarch.rpm +83c8c9d550ada195a1e4e22b44f3f4d669d95c697411f0a65bbc638e4fe13d43 tzdata-2024b-1.fc40.noarch.rpm 9fc3b3f602c81bdb5e1daa4a7f9a254d35481bd1186ac0b01fbb0c3243440ca8 unbound-anchor-1.21.1-3.fc40.x86_64.rpm 1432f6a67a9400d10b09b5eee96c6fbf89b8bef99cc7e1abc6d885cf69a61fb2 unbound-libs-1.21.1-3.fc40.x86_64.rpm 36ffa617a0dfe523424a28290241a81cd51f7d82e776e58131f16d092d49797b util-linux-2.40-0.9.rc1.fc40.i686.rpm 945aa536bc30050abc1870cef167cb944cf78d6628923476db43201a0054574b util-linux-2.40.2-1.fc40.x86_64.rpm 7ec1b5df780c5a30f8e901179480125a6ea87f1f7bad3b69da7f4b351b88c3dd util-linux-core-2.40-0.9.rc1.fc40.x86_64.rpm b1aa4e816c01c08c18924865640f214f717cdfc66837e53a24b8edfb80a86f9d util-linux-core-2.40.2-1.fc40.x86_64.rpm -5e136771bde612c9ad1c5baaa13cfe66ef0ab004baf01cab7193978da46d92ee vim-common-9.1.984-1.fc40.x86_64.rpm -820aad4f6047ed8b51c1e78210c66e5aee3c0b8b871f0777373df52e71f8cbde vim-data-9.1.984-1.fc40.noarch.rpm -4a6722b072ed050b9c9414ab2c3a81a39d3593f9487771ade9aadd7c5199441a vim-enhanced-9.1.984-1.fc40.x86_64.rpm -fe95052d95a2e29b7794596623a36cfbfa87b91b2a08a397f43299596dfa76a1 vim-filesystem-9.1.984-1.fc40.noarch.rpm +df5ab0573bfe904aaab3b735ea1855202c16df9308a73082b77771cf8b21da07 vim-common-9.1.1000-1.fc40.x86_64.rpm +dc1d384fc3554f7185a5b5d59044b3f723bf131dd6e15e7c082b62d990dec950 vim-data-9.1.1000-1.fc40.noarch.rpm +150be77f965f76c47f4f3f6e13ce794d89fae5fc35593bffae849998da707bd3 vim-enhanced-9.1.1000-1.fc40.x86_64.rpm +90e56222622b0be483ab536789611e3a4272ee55a6208e4c2ad32d185e2254bc vim-filesystem-9.1.1000-1.fc40.noarch.rpm 5f4aef6a6f19712c142b3e592ff05bba03dee877a0a098df294d876063918805 wget2-2.2.0-1.fc40.x86_64.rpm a4119091a85b4aa4262a26f6ed2d6653de9b7c4def3636a2b0ad066436f29acd wget2-libs-2.2.0-1.fc40.x86_64.rpm 4948040a53814b1b4b76f6ec9d64ec21f3f2d1196a0a1c5b117f91fa58a267b1 wget2-wget-2.2.0-1.fc40.x86_64.rpm cf0306ceed1c6b3be39060d85f16b1953b464d3a625488b170d3b7aadf600645 which-2.21-41.fc40.x86_64.rpm 4ede95a2fa3bc0ae617c8bf3a375b800163d58733b4829b15d9f038505d79fee whois-nls-5.5.20-3.fc40.noarch.rpm e2195010e857f56b19246f8b821f9391922880b7691b3728a413f540edc890a6 xkeyboard-config-2.41-1.fc40.noarch.rpm -71fb8f29bfe63e02383be3221ec6a2f782e47022c3cab03966fcb19dce8b2dcf xxd-9.1.984-1.fc40.x86_64.rpm +3b970af481308b88f6bdb62a60895580213d1e9ec3b19ddd5219b6238984040c xxd-9.1.1000-1.fc40.x86_64.rpm ee599a1c4d7ee635e54ec137af4dded83f433b9c8a5976f75ecdcd000b5246e3 xz-5.4.6-3.fc40.x86_64.rpm b92ef78d8ab424c22130e457d0ef691d8197bff61c3b8852205d1b02baba3819 xz-libs-5.4.6-3.fc40.i686.rpm b6ee44b3d7e494b0364f26b7d0b169a8092180af787423cd5e8a47dc0f738a66 xz-libs-5.4.6-3.fc40.x86_64.rpm From c24e149b12dc1a66c2139a3d95502edd5abf7d4b Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 20 Jan 2025 09:10:44 +0100 Subject: [PATCH 061/311] deps: update dependency containernetworking/plugins to v1.6.2 (#3524) * deps: update dependency containernetworking/plugins to v1.6.2 * deps: tidy all modules --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: edgelessci --- internal/versions/versions.go | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/internal/versions/versions.go b/internal/versions/versions.go index 858ff3ed4..4e75e48ce 100644 --- a/internal/versions/versions.go +++ b/internal/versions/versions.go @@ -201,8 +201,8 @@ var VersionConfigs = map[ValidK8sVersion]KubernetesVersion{ ClusterVersion: "v1.28.15", // renovate:kubernetes-release KubernetesComponents: components.Components{ { - Url: "https://github.com/containernetworking/plugins/releases/download/v1.6.0/cni-plugins-linux-amd64-v1.6.0.tgz", // renovate:cni-plugins-release - Hash: "sha256:682b49ff8933a997a52107161f1745f8312364b4c7f605ccdf7a77499130d89d", + Url: "https://github.com/containernetworking/plugins/releases/download/v1.6.2/cni-plugins-linux-amd64-v1.6.2.tgz", // renovate:cni-plugins-release + Hash: "sha256:b8e811578fb66023f90d2e238d80cec3bdfca4b44049af74c374d4fae0f9c090", InstallPath: constants.CniPluginsDir, Extract: true, }, @@ -268,8 +268,8 @@ var VersionConfigs = map[ValidK8sVersion]KubernetesVersion{ ClusterVersion: "v1.29.13", // renovate:kubernetes-release KubernetesComponents: components.Components{ { - Url: "https://github.com/containernetworking/plugins/releases/download/v1.6.0/cni-plugins-linux-amd64-v1.6.0.tgz", // renovate:cni-plugins-release - Hash: "sha256:682b49ff8933a997a52107161f1745f8312364b4c7f605ccdf7a77499130d89d", + Url: "https://github.com/containernetworking/plugins/releases/download/v1.6.2/cni-plugins-linux-amd64-v1.6.2.tgz", // renovate:cni-plugins-release + Hash: "sha256:b8e811578fb66023f90d2e238d80cec3bdfca4b44049af74c374d4fae0f9c090", InstallPath: constants.CniPluginsDir, Extract: true, }, @@ -335,8 +335,8 @@ var VersionConfigs = map[ValidK8sVersion]KubernetesVersion{ ClusterVersion: "v1.30.9", // renovate:kubernetes-release KubernetesComponents: components.Components{ { - Url: "https://github.com/containernetworking/plugins/releases/download/v1.6.0/cni-plugins-linux-amd64-v1.6.0.tgz", // renovate:cni-plugins-release - Hash: "sha256:682b49ff8933a997a52107161f1745f8312364b4c7f605ccdf7a77499130d89d", + Url: "https://github.com/containernetworking/plugins/releases/download/v1.6.2/cni-plugins-linux-amd64-v1.6.2.tgz", // renovate:cni-plugins-release + Hash: "sha256:b8e811578fb66023f90d2e238d80cec3bdfca4b44049af74c374d4fae0f9c090", InstallPath: constants.CniPluginsDir, Extract: true, }, From 576add30d1123b0c650e2fc99087e23be25183b9 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 20 Jan 2025 09:45:03 +0100 Subject: [PATCH 062/311] deps: update ubuntu Docker tag to v24 (#3597) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- 3rdparty/gcp-guest-agent/Dockerfile | 2 +- docs/screencasts/docker/Dockerfile | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/3rdparty/gcp-guest-agent/Dockerfile b/3rdparty/gcp-guest-agent/Dockerfile index 0276f8259..0e2921df6 100644 --- a/3rdparty/gcp-guest-agent/Dockerfile +++ b/3rdparty/gcp-guest-agent/Dockerfile @@ -1,4 +1,4 @@ -FROM ubuntu:22.04@sha256:0e5e4a57c2499249aafc3b40fcd541e9a456aab7296681a3994d631587203f97 as build +FROM ubuntu:24.04@sha256:80dd3c3b9c6cecb9f1667e9290b3bc61b78c2678c02cbdae5f0fea92cc6734ab as build # Install packages RUN apt-get update && apt-get install -y \ diff --git a/docs/screencasts/docker/Dockerfile b/docs/screencasts/docker/Dockerfile index 0b965f876..4a02beca2 100644 --- a/docs/screencasts/docker/Dockerfile +++ b/docs/screencasts/docker/Dockerfile @@ -1,4 +1,4 @@ -FROM ubuntu:22.04@sha256:0e5e4a57c2499249aafc3b40fcd541e9a456aab7296681a3994d631587203f97 +FROM ubuntu:24.04@sha256:80dd3c3b9c6cecb9f1667e9290b3bc61b78c2678c02cbdae5f0fea92cc6734ab # Install requirements RUN apt-get update && apt-get install -y software-properties-common &&\ From 56b061e84b99cd1febc4d09a5929f4ea9225aedf Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 20 Jan 2025 10:01:17 +0100 Subject: [PATCH 063/311] deps: update kubernetes packages (#3589) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- go.mod | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/go.mod b/go.mod index e2b616053..c284adb33 100644 --- a/go.mod +++ b/go.mod @@ -13,19 +13,19 @@ replace github.com/martinjungblut/go-cryptsetup => github.com/daniel-weisse/go-c // See this issue: https://github.com/kubernetes/kubernetes/issues/79384 // And this README: https://github.com/kubernetes/kubernetes/blob/master/staging/README.md replace ( - k8s.io/cloud-provider => k8s.io/cloud-provider v0.31.3 - k8s.io/controller-manager => k8s.io/controller-manager v0.31.3 + k8s.io/cloud-provider => k8s.io/cloud-provider v0.32.1 + k8s.io/controller-manager => k8s.io/controller-manager v0.32.1 k8s.io/cri-client => k8s.io/cri-client v0.31.1 - k8s.io/csi-translation-lib => k8s.io/csi-translation-lib v0.31.3 + k8s.io/csi-translation-lib => k8s.io/csi-translation-lib v0.32.1 k8s.io/dynamic-resource-allocation => k8s.io/dynamic-resource-allocation v0.31.3 k8s.io/endpointslice => k8s.io/endpointslice v0.31.3 - k8s.io/kube-aggregator => k8s.io/kube-aggregator v0.31.3 - k8s.io/kube-controller-manager => k8s.io/kube-controller-manager v0.31.3 - k8s.io/kube-proxy => k8s.io/kube-proxy v0.31.3 - k8s.io/kube-scheduler => k8s.io/kube-scheduler v0.31.3 - k8s.io/legacy-cloud-providers => k8s.io/legacy-cloud-providers v0.30.7 - k8s.io/pod-security-admission => k8s.io/pod-security-admission v0.31.3 - k8s.io/sample-apiserver => k8s.io/sample-apiserver v0.31.3 + k8s.io/kube-aggregator => k8s.io/kube-aggregator v0.32.1 + k8s.io/kube-controller-manager => k8s.io/kube-controller-manager v0.32.1 + k8s.io/kube-proxy => k8s.io/kube-proxy v0.32.1 + k8s.io/kube-scheduler => k8s.io/kube-scheduler v0.32.1 + k8s.io/legacy-cloud-providers => k8s.io/legacy-cloud-providers v0.30.9 + k8s.io/pod-security-admission => k8s.io/pod-security-admission v0.32.1 + k8s.io/sample-apiserver => k8s.io/sample-apiserver v0.32.1 ) require ( From 40754753a2546aa0c000d6fe56eacd9cd5eb8b8e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Wei=C3=9Fe?= <66256922+daniel-weisse@users.noreply.github.com> Date: Mon, 20 Jan 2025 10:39:14 +0100 Subject: [PATCH 064/311] dependencies: drop google/go-sev-guest fork (#3595) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Daniel Weiße --- go.mod | 4 +--- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index c284adb33..d497f83d3 100644 --- a/go.mod +++ b/go.mod @@ -2,8 +2,6 @@ module github.com/edgelesssys/constellation/v2 go 1.23.2 -replace github.com/google/go-sev-guest => github.com/katexochen/go-sev-guest v0.0.0-20241216075901-ccd51e9e7b6e - // TODO(daniel-weisse): revert after merging https://github.com/martinjungblut/go-cryptsetup/pull/16. replace github.com/martinjungblut/go-cryptsetup => github.com/daniel-weisse/go-cryptsetup v0.0.0-20230705150314-d8c07bd1723c @@ -69,7 +67,7 @@ require ( github.com/go-playground/universal-translator v0.18.1 github.com/go-playground/validator/v10 v10.23.0 github.com/golang-jwt/jwt/v5 v5.2.1 - github.com/google/go-sev-guest v0.11.2-0.20241122204452-64cd695124b1 + github.com/google/go-sev-guest v0.12.2-0.20250116170741-e5df25990fc0 github.com/google/go-tdx-guest v0.3.1 github.com/google/go-tpm v0.9.1 github.com/google/go-tpm-tools v0.4.4 diff --git a/go.sum b/go.sum index 2b373cdbc..695e9afc0 100644 --- a/go.sum +++ b/go.sum @@ -456,6 +456,8 @@ github.com/google/go-configfs-tsm v0.2.2 h1:YnJ9rXIOj5BYD7/0DNnzs8AOp7UcvjfTvt21 github.com/google/go-configfs-tsm v0.2.2/go.mod h1:EL1GTDFMb5PZQWDviGfZV9n87WeGTR/JUg13RfwkgRo= github.com/google/go-containerregistry v0.20.2 h1:B1wPJ1SN/S7pB+ZAimcciVD+r+yV/l/DSArMxlbwseo= github.com/google/go-containerregistry v0.20.2/go.mod h1:z38EKdKh4h7IP2gSfUUqEvalZBqs6AoLeWfUy34nQC8= +github.com/google/go-sev-guest v0.12.2-0.20250116170741-e5df25990fc0 h1:DMFFpe9CG2u2ytgMZm9qOv1EjHsRK3VnVRmrKjCDB2I= +github.com/google/go-sev-guest v0.12.2-0.20250116170741-e5df25990fc0/go.mod h1:SK9vW+uyfuzYdVN0m8BShL3OQCtXZe/JPF7ZkpD3760= github.com/google/go-tdx-guest v0.3.1 h1:gl0KvjdsD4RrJzyLefDOvFOUH3NAJri/3qvaL5m83Iw= github.com/google/go-tdx-guest v0.3.1/go.mod h1:/rc3d7rnPykOPuY8U9saMyEps0PZDThLk/RygXm04nE= github.com/google/go-tpm v0.9.1 h1:0pGc4X//bAlmZzMKf8iz6IsDo1nYTbYJ6FZN/rg4zdM= @@ -600,8 +602,6 @@ github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/u github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= -github.com/katexochen/go-sev-guest v0.0.0-20241216075901-ccd51e9e7b6e h1:t6R61fMd5IeTSh9qEMDGkh9vtI0Jgh69GDm2lQNSzfE= -github.com/katexochen/go-sev-guest v0.0.0-20241216075901-ccd51e9e7b6e/go.mod h1:SK9vW+uyfuzYdVN0m8BShL3OQCtXZe/JPF7ZkpD3760= github.com/kevinburke/ssh_config v1.2.0 h1:x584FjTGwHzMwvHx18PXxbBVzfnxogHaAReU4gf13a4= github.com/kevinburke/ssh_config v1.2.0/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= github.com/keybase/go-keychain v0.0.0-20231219164618-57a3676c3af6 h1:IsMZxCuZqKuao2vNdfD82fjjgPLfyHLpR41Z88viRWs= From 53e937522f7094ed5df4e3bd362109d51aaac028 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Wei=C3=9Fe?= <66256922+daniel-weisse@users.noreply.github.com> Date: Mon, 20 Jan 2025 11:53:55 +0100 Subject: [PATCH 065/311] dependencies: bump Go to v1.23.5 (#3599) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Daniel Weiße --- .github/workflows/build-ccm-gcp.yml | 2 +- .github/workflows/build-os-image-scheduled.yml | 2 +- .github/workflows/codeql.yml | 2 +- .github/workflows/release.yml | 2 +- .github/workflows/test-operator-codegen.yml | 2 +- 3rdparty/gcp-guest-agent/Dockerfile | 2 +- MODULE.bazel | 2 +- dev-docs/workflows/bump-go-version.md | 4 +++- go.mod | 2 +- go.work | 4 ++-- hack/tools/go.mod | 2 +- 11 files changed, 14 insertions(+), 12 deletions(-) diff --git a/.github/workflows/build-ccm-gcp.yml b/.github/workflows/build-ccm-gcp.yml index a6a434cb7..ee9a56e0e 100644 --- a/.github/workflows/build-ccm-gcp.yml +++ b/.github/workflows/build-ccm-gcp.yml @@ -31,7 +31,7 @@ jobs: - name: Setup Go environment uses: actions/setup-go@3041bf56c941b39c61721a86cd11f3bb1338122a # v5.2.0 with: - go-version: "1.23.2" + go-version: "1.23.5" cache: false - name: Install Crane diff --git a/.github/workflows/build-os-image-scheduled.yml b/.github/workflows/build-os-image-scheduled.yml index 000a57a16..6149dddca 100644 --- a/.github/workflows/build-os-image-scheduled.yml +++ b/.github/workflows/build-os-image-scheduled.yml @@ -67,7 +67,7 @@ jobs: - name: Setup Go environment uses: actions/setup-go@3041bf56c941b39c61721a86cd11f3bb1338122a # v5.2.0 with: - go-version: "1.23.2" + go-version: "1.23.5" cache: false - name: Determine version diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index 1f140931c..387f614dd 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -40,7 +40,7 @@ jobs: if: matrix.language == 'go' uses: actions/setup-go@3041bf56c941b39c61721a86cd11f3bb1338122a # v5.2.0 with: - go-version: "1.23.2" + go-version: "1.23.5" cache: false - name: Initialize CodeQL diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index fffe4febe..53204f8cc 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -257,7 +257,7 @@ jobs: - name: Setup Go environment uses: actions/setup-go@3041bf56c941b39c61721a86cd11f3bb1338122a # v5.2.0 with: - go-version: "1.23.2" + go-version: "1.23.5" cache: true - name: Build generateMeasurements tool diff --git a/.github/workflows/test-operator-codegen.yml b/.github/workflows/test-operator-codegen.yml index a9776220a..59bd27cf3 100644 --- a/.github/workflows/test-operator-codegen.yml +++ b/.github/workflows/test-operator-codegen.yml @@ -28,7 +28,7 @@ jobs: - name: Setup Go environment uses: actions/setup-go@3041bf56c941b39c61721a86cd11f3bb1338122a # v5.2.0 with: - go-version: "1.23.2" + go-version: "1.23.5" cache: true - name: Run code generation diff --git a/3rdparty/gcp-guest-agent/Dockerfile b/3rdparty/gcp-guest-agent/Dockerfile index 0e2921df6..b79b163df 100644 --- a/3rdparty/gcp-guest-agent/Dockerfile +++ b/3rdparty/gcp-guest-agent/Dockerfile @@ -6,7 +6,7 @@ RUN apt-get update && apt-get install -y \ git # Install Go -ARG GO_VER=1.22.3 +ARG GO_VER=1.23.5 RUN wget -q https://go.dev/dl/go${GO_VER}.linux-amd64.tar.gz && \ tar -C /usr/local -xzf go${GO_VER}.linux-amd64.tar.gz && \ rm go${GO_VER}.linux-amd64.tar.gz diff --git a/MODULE.bazel b/MODULE.bazel index 51330d2f2..368f1c9c3 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -22,7 +22,7 @@ go_sdk = use_extension("@io_bazel_rules_go//go:extensions.bzl", "go_sdk") go_sdk.download( name = "go_sdk", patches = ["//3rdparty/bazel/org_golang:go_tls_max_handshake_size.patch"], - version = "1.23.2", + version = "1.23.5", ) python = use_extension("@rules_python//python/extensions:python.bzl", "python") diff --git a/dev-docs/workflows/bump-go-version.md b/dev-docs/workflows/bump-go-version.md index 09b3fad81..f2736179b 100644 --- a/dev-docs/workflows/bump-go-version.md +++ b/dev-docs/workflows/bump-go-version.md @@ -17,7 +17,7 @@ go_sdk.download( ``` -Replace `go-version: "1.xx.x"` with the new version in all GitHub actions and workflows. +Replace `go-version: "1.xx.x"` with the new version in all GitHub actions/workflows, our go.mod files and Containerfiles. You can use the following command to find replace all instances of `go-version: "1.xx.x"` in the `.github` directory: ```bash @@ -25,7 +25,9 @@ OLD_VERSION="1.xx.x" NEW_VERSION="1.xx.y" find .github -type f -exec sed -i "s/go-version: \"${OLD_VERSION}\"/go-version: \"${NEW_VERSION}\"/g" {} \; sed -i "s/go ${OLD_VERSION}/go ${NEW_VERSION}/g" go.mod +sed -i "s/go ${OLD_VERSION}/go ${NEW_VERSION}/g" hack/tools/go.mod sed -i "s/${OLD_VERSION}/${NEW_VERSION}/g" go.work +sed -i "s/GO_VER=${OLD_VERSION}/GO_VER=${NEW_VERSION}/g" 3rdparty/gcp-guest-agent/Dockerfile ``` Or manually: diff --git a/go.mod b/go.mod index d497f83d3..216acbdaa 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,6 @@ module github.com/edgelesssys/constellation/v2 -go 1.23.2 +go 1.23.5 // TODO(daniel-weisse): revert after merging https://github.com/martinjungblut/go-cryptsetup/pull/16. replace github.com/martinjungblut/go-cryptsetup => github.com/daniel-weisse/go-cryptsetup v0.0.0-20230705150314-d8c07bd1723c diff --git a/go.work b/go.work index 0cf42a018..e4cc14603 100644 --- a/go.work +++ b/go.work @@ -1,6 +1,6 @@ -go 1.23.2 +go 1.23.5 -toolchain go1.23.2 +toolchain go1.23.5 use ( . diff --git a/hack/tools/go.mod b/hack/tools/go.mod index 5674da6b2..ddd5ed3b3 100644 --- a/hack/tools/go.mod +++ b/hack/tools/go.mod @@ -1,6 +1,6 @@ module github.com/edgelesssys/constellation/v2/hack/tools -go 1.23.2 +go 1.23.5 require ( github.com/google/go-licenses v1.6.0 From 22d093cc6f60bed0d110b77a181d67815f5980e6 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 20 Jan 2025 15:17:05 +0100 Subject: [PATCH 066/311] deps: update bazel (core) (#3581) * deps: update bazel (core) * bazel: depset -> list To comply with some breaking changes in rules_go v0.51, we explicitly need to type-cast the depsets to lists here. * bazel: migrate deprecated GoLibrary usage In rules_go v0.51.0, `GoLibrary` was deprecated and replaced by `GoInfo`. This adjusts our `protoc-gen-go` rule to use the new `GoInfo`. * deps: tidy all modules --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Moritz Sanft <58110325+msanft@users.noreply.github.com> Co-authored-by: edgelessci --- MODULE.bazel | 4 ++-- MODULE.bazel.lock | 10 ++++++---- bazel/ci/go_bin_for_host.bzl | 2 +- bazel/proto/rules.bzl | 11 ++++------- go.mod | 2 +- go.sum | 4 ++-- 6 files changed, 16 insertions(+), 17 deletions(-) diff --git a/MODULE.bazel b/MODULE.bazel index 368f1c9c3..1e6aa83b5 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -8,10 +8,10 @@ use_repo(bazel_lib, "jq_toolchains") use_repo(bazel_lib, "yq_toolchains") bazel_dep(name = "bazel_skylib", version = "1.7.1") -bazel_dep(name = "gazelle", version = "0.40.0") +bazel_dep(name = "gazelle", version = "0.41.0") bazel_dep(name = "hermetic_cc_toolchain", version = "3.1.1") bazel_dep(name = "rules_cc", version = "0.1.0") -bazel_dep(name = "rules_go", version = "0.50.1", repo_name = "io_bazel_rules_go") +bazel_dep(name = "rules_go", version = "0.52.0", repo_name = "io_bazel_rules_go") bazel_dep(name = "rules_pkg", version = "1.0.1") bazel_dep(name = "rules_proto", version = "7.1.0") bazel_dep(name = "rules_python", version = "1.1.0") diff --git a/MODULE.bazel.lock b/MODULE.bazel.lock index e3ebce558..e04f56c85 100644 --- a/MODULE.bazel.lock +++ b/MODULE.bazel.lock @@ -46,8 +46,8 @@ "https://bcr.bazel.build/modules/gazelle/0.33.0/MODULE.bazel": "a13a0f279b462b784fb8dd52a4074526c4a2afe70e114c7d09066097a46b3350", "https://bcr.bazel.build/modules/gazelle/0.34.0/MODULE.bazel": "abdd8ce4d70978933209db92e436deb3a8b737859e9354fb5fd11fb5c2004c8a", "https://bcr.bazel.build/modules/gazelle/0.36.0/MODULE.bazel": "e375d5d6e9a6ca59b0cb38b0540bc9a05b6aa926d322f2de268ad267a2ee74c0", - "https://bcr.bazel.build/modules/gazelle/0.40.0/MODULE.bazel": "42ba5378ebe845fca43989a53186ab436d956db498acde790685fe0e8f9c6146", - "https://bcr.bazel.build/modules/gazelle/0.40.0/source.json": "1e5ef6e4d8b9b6836d93273c781e78ff829ea2e077afef7a57298040fa4f010a", + "https://bcr.bazel.build/modules/gazelle/0.41.0/MODULE.bazel": "fdce8a8f5129d5b6d693d91cb191d0a014fdcb88e9094e528325a7165de2a826", + "https://bcr.bazel.build/modules/gazelle/0.41.0/source.json": "bc00c665344d775b5cae6064608262e0478789c523677d40eef8f85031c6bfda", "https://bcr.bazel.build/modules/google_benchmark/1.8.2/MODULE.bazel": "a70cf1bba851000ba93b58ae2f6d76490a9feb74192e57ab8e8ff13c34ec50cb", "https://bcr.bazel.build/modules/googletest/1.11.0/MODULE.bazel": "3a83f095183f66345ca86aa13c58b59f9f94a2f81999c093d4eeaa2d262d12f4", "https://bcr.bazel.build/modules/googletest/1.14.0.bcr.1/MODULE.bazel": "22c31a561553727960057361aa33bf20fb2e98584bc4fec007906e27053f80c6", @@ -100,7 +100,8 @@ "https://bcr.bazel.build/modules/rules_go/0.42.0/MODULE.bazel": "8cfa875b9aa8c6fce2b2e5925e73c1388173ea3c32a0db4d2b4804b453c14270", "https://bcr.bazel.build/modules/rules_go/0.46.0/MODULE.bazel": "3477df8bdcc49e698b9d25f734c4f3a9f5931ff34ee48a2c662be168f5f2d3fd", "https://bcr.bazel.build/modules/rules_go/0.50.1/MODULE.bazel": "b91a308dc5782bb0a8021ad4330c81fea5bda77f96b9e4c117b9b9c8f6665ee0", - "https://bcr.bazel.build/modules/rules_go/0.50.1/source.json": "205765fd30216c70321f84c9a967267684bdc74350af3f3c46c857d9f80a4fa2", + "https://bcr.bazel.build/modules/rules_go/0.52.0/MODULE.bazel": "0cf080a2706aa8fc9abf64286cee60fdf0238db37b7f1793b0f7d550d59ea3ae", + "https://bcr.bazel.build/modules/rules_go/0.52.0/source.json": "441bc7591044993dce9fb0377fcadf3086d6afac621b909d17d53858a4a1b8d4", "https://bcr.bazel.build/modules/rules_java/4.0.0/MODULE.bazel": "5a78a7ae82cd1a33cef56dc578c7d2a46ed0dca12643ee45edbb8417899e6f74", "https://bcr.bazel.build/modules/rules_java/5.3.5/MODULE.bazel": "a4ec4f2db570171e3e5eb753276ee4b389bae16b96207e9d3230895c99644b86", "https://bcr.bazel.build/modules/rules_java/6.3.0/MODULE.bazel": "a97c7678c19f236a956ad260d59c86e10a463badb7eb2eda787490f4c969b963", @@ -144,7 +145,8 @@ "https://bcr.bazel.build/modules/rules_python/1.1.0/MODULE.bazel": "57e01abae22956eb96d891572490d20e07d983e0c065de0b2170cafe5053e788", "https://bcr.bazel.build/modules/rules_python/1.1.0/source.json": "29f1fdfd23a40808c622f813bc93e29c3aae277333f03293f667e76159750a0f", "https://bcr.bazel.build/modules/rules_shell/0.2.0/MODULE.bazel": "fda8a652ab3c7d8fee214de05e7a9916d8b28082234e8d2c0094505c5268ed3c", - "https://bcr.bazel.build/modules/rules_shell/0.2.0/source.json": "7f27af3c28037d9701487c4744b5448d26537cc66cdef0d8df7ae85411f8de95", + "https://bcr.bazel.build/modules/rules_shell/0.3.0/MODULE.bazel": "de4402cd12f4cc8fda2354fce179fdb068c0b9ca1ec2d2b17b3e21b24c1a937b", + "https://bcr.bazel.build/modules/rules_shell/0.3.0/source.json": "c55ed591aa5009401ddf80ded9762ac32c358d2517ee7820be981e2de9756cf3", "https://bcr.bazel.build/modules/stardoc/0.5.1/MODULE.bazel": "1a05d92974d0c122f5ccf09291442580317cdd859f07a8655f1db9a60374f9f8", "https://bcr.bazel.build/modules/stardoc/0.5.3/MODULE.bazel": "c7f6948dae6999bf0db32c1858ae345f112cacf98f174c7a8bb707e41b974f1c", "https://bcr.bazel.build/modules/stardoc/0.6.2/MODULE.bazel": "7060193196395f5dd668eda046ccbeacebfd98efc77fed418dbe2b82ffaa39fd", diff --git a/bazel/ci/go_bin_for_host.bzl b/bazel/ci/go_bin_for_host.bzl index 97c91f366..29721b2e2 100644 --- a/bazel/ci/go_bin_for_host.bzl +++ b/bazel/ci/go_bin_for_host.bzl @@ -14,7 +14,7 @@ def _ensure_target_cfg(ctx): def _go_bin_for_host_impl(ctx): _ensure_target_cfg(ctx) sdk = ctx.toolchains[GO_TOOLCHAIN].sdk - sdk_files = ctx.runfiles([sdk.go] + sdk.headers + sdk.libs + sdk.srcs + sdk.tools) + sdk_files = ctx.runfiles([sdk.go] + sdk.headers.to_list() + sdk.libs.to_list() + sdk.srcs.to_list() + sdk.tools.to_list()) return [ DefaultInfo( files = depset([sdk.go]), diff --git a/bazel/proto/rules.bzl b/bazel/proto/rules.bzl index da73d5f72..3807796b2 100644 --- a/bazel/proto/rules.bzl +++ b/bazel/proto/rules.bzl @@ -5,17 +5,14 @@ based on https://github.com/bazelbuild/rules_go/issues/2111#issuecomment-1355927 """ load("@aspect_bazel_lib//lib:write_source_files.bzl", "write_source_files") -load("@io_bazel_rules_go//go:def.bzl", "GoLibrary", "go_context") +load("@io_bazel_rules_go//go:def.bzl", "GoInfo") load("@io_bazel_rules_go//proto:compiler.bzl", "GoProtoCompiler") def _output_go_library_srcs_impl(ctx): - go = go_context(ctx) - srcs_of_library = [] importpath = "" for src in ctx.attr.deps: - lib = src[GoLibrary] - go_src = go.library_to_source(go, ctx.attr, lib, False) + lib = src[GoInfo] if importpath and lib.importpath != importpath: fail( "importpath of all deps must match, got {} and {}", @@ -23,7 +20,7 @@ def _output_go_library_srcs_impl(ctx): lib.importpath, ) importpath = lib.importpath - srcs_of_library.extend(go_src.srcs) + srcs_of_library.extend(lib.srcs) if len(srcs_of_library) != 1: fail("expected exactly one src for library, got {}", len(srcs_of_library)) @@ -54,7 +51,7 @@ output_go_library_srcs = rule( default = "@io_bazel_rules_go//proto:go_proto", ), "deps": attr.label_list( - providers = [GoLibrary], + providers = [GoInfo], aspects = [], ), "out": attr.output( diff --git a/go.mod b/go.mod index 216acbdaa..849b72032 100644 --- a/go.mod +++ b/go.mod @@ -56,7 +56,7 @@ require ( github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.34.6 github.com/aws/smithy-go v1.22.1 github.com/bazelbuild/buildtools v0.0.0-20240918101019-be1c24cc9a44 - github.com/bazelbuild/rules_go v0.50.1 + github.com/bazelbuild/rules_go v0.52.0 github.com/coreos/go-systemd/v22 v22.5.0 github.com/docker/docker v27.3.1+incompatible github.com/edgelesssys/go-azguestattestation v0.0.0-20240513062303-05f8770a633d diff --git a/go.sum b/go.sum index 695e9afc0..9a076c410 100644 --- a/go.sum +++ b/go.sum @@ -190,8 +190,8 @@ github.com/aws/smithy-go v1.22.1 h1:/HPHZQ0g7f4eUeK6HKglFz8uwVfZKgoI25rb/J+dnro= github.com/aws/smithy-go v1.22.1/go.mod h1:irrKGvNn1InZwb2d7fkIRNucdfwR8R+Ts3wxYa/cJHg= github.com/bazelbuild/buildtools v0.0.0-20240918101019-be1c24cc9a44 h1:FGzENZi+SX9I7h9xvMtRA3rel8hCEfyzSixteBgn7MU= github.com/bazelbuild/buildtools v0.0.0-20240918101019-be1c24cc9a44/go.mod h1:PLNUetjLa77TCCziPsz0EI8a6CUxgC+1jgmWv0H25tg= -github.com/bazelbuild/rules_go v0.50.1 h1:/BUvuaB8MEiUA2oLPPCGtuw5V+doAYyiGTFyoSWlkrw= -github.com/bazelbuild/rules_go v0.50.1/go.mod h1:Dhcz716Kqg1RHNWos+N6MlXNkjNP2EwZQ0LukRKJfMs= +github.com/bazelbuild/rules_go v0.52.0 h1:+ozpngVAW67pCAwfhepaXSSrG3yHcj8K9hNAxSYBno4= +github.com/bazelbuild/rules_go v0.52.0/go.mod h1:M+YrupNArA7OiTlv++rFUgQ6Sm+ZXbQ5HPUj0cGa0us= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= From 679edd79d4ac2e21c200334cf115e125b726ad93 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 20 Jan 2025 16:15:42 +0100 Subject: [PATCH 067/311] deps: update Go dependencies (#3586) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * deps: update Go dependencies * keep cloud.google.com/go/storage at v1.49.0 This is required to avoid issues with a broken google.golang.org/grpc/stats/opentelemetry import See https://github.com/googleapis/google-cloud-go/issues/11455 * deps: tidy all modules --------- Signed-off-by: Daniel Weiße Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Daniel Weiße Co-authored-by: edgelessci --- bootstrapper/initproto/init.pb.go | 82 +-- debugd/service/debugd.pb.go | 123 ++--- disk-mapper/recoverproto/recover.pb.go | 15 +- go.mod | 247 +++++---- go.sum | 517 +++++++++--------- hack/tools/go.mod | 18 +- hack/tools/go.sum | 36 +- .../charts/coredns/templates/configmap.yaml | 5 +- internal/versions/components/components.pb.go | 15 +- internal/versions/versions.go | 6 +- joinservice/joinproto/join.pb.go | 49 +- keyservice/keyserviceproto/keyservice.pb.go | 18 +- upgrade-agent/upgradeproto/upgrade.pb.go | 13 +- verify/verifyproto/verify.pb.go | 16 +- 14 files changed, 563 insertions(+), 597 deletions(-) diff --git a/bootstrapper/initproto/init.pb.go b/bootstrapper/initproto/init.pb.go index 022c30e14..0d16cd8d9 100644 --- a/bootstrapper/initproto/init.pb.go +++ b/bootstrapper/initproto/init.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.35.2 +// protoc-gen-go v1.36.3 // protoc v5.29.1 // source: bootstrapper/initproto/init.proto @@ -26,10 +26,7 @@ const ( ) type InitRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` KmsUri string `protobuf:"bytes,1,opt,name=kms_uri,json=kmsUri,proto3" json:"kms_uri,omitempty"` StorageUri string `protobuf:"bytes,2,opt,name=storage_uri,json=storageUri,proto3" json:"storage_uri,omitempty"` MeasurementSalt []byte `protobuf:"bytes,3,opt,name=measurement_salt,json=measurementSalt,proto3" json:"measurement_salt,omitempty"` @@ -40,6 +37,8 @@ type InitRequest struct { ClusterName string `protobuf:"bytes,9,opt,name=cluster_name,json=clusterName,proto3" json:"cluster_name,omitempty"` ApiserverCertSans []string `protobuf:"bytes,10,rep,name=apiserver_cert_sans,json=apiserverCertSans,proto3" json:"apiserver_cert_sans,omitempty"` ServiceCidr string `protobuf:"bytes,11,opt,name=service_cidr,json=serviceCidr,proto3" json:"service_cidr,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *InitRequest) Reset() { @@ -143,16 +142,15 @@ func (x *InitRequest) GetServiceCidr() string { } type InitResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Types that are assignable to Kind: + state protoimpl.MessageState `protogen:"open.v1"` + // Types that are valid to be assigned to Kind: // // *InitResponse_InitSuccess // *InitResponse_InitFailure // *InitResponse_Log - Kind isInitResponse_Kind `protobuf_oneof:"kind"` + Kind isInitResponse_Kind `protobuf_oneof:"kind"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *InitResponse) Reset() { @@ -185,30 +183,36 @@ func (*InitResponse) Descriptor() ([]byte, []int) { return file_bootstrapper_initproto_init_proto_rawDescGZIP(), []int{1} } -func (m *InitResponse) GetKind() isInitResponse_Kind { - if m != nil { - return m.Kind +func (x *InitResponse) GetKind() isInitResponse_Kind { + if x != nil { + return x.Kind } return nil } func (x *InitResponse) GetInitSuccess() *InitSuccessResponse { - if x, ok := x.GetKind().(*InitResponse_InitSuccess); ok { - return x.InitSuccess + if x != nil { + if x, ok := x.Kind.(*InitResponse_InitSuccess); ok { + return x.InitSuccess + } } return nil } func (x *InitResponse) GetInitFailure() *InitFailureResponse { - if x, ok := x.GetKind().(*InitResponse_InitFailure); ok { - return x.InitFailure + if x != nil { + if x, ok := x.Kind.(*InitResponse_InitFailure); ok { + return x.InitFailure + } } return nil } func (x *InitResponse) GetLog() *LogResponseType { - if x, ok := x.GetKind().(*InitResponse_Log); ok { - return x.Log + if x != nil { + if x, ok := x.Kind.(*InitResponse_Log); ok { + return x.Log + } } return nil } @@ -236,13 +240,12 @@ func (*InitResponse_InitFailure) isInitResponse_Kind() {} func (*InitResponse_Log) isInitResponse_Kind() {} type InitSuccessResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Kubeconfig []byte `protobuf:"bytes,1,opt,name=kubeconfig,proto3" json:"kubeconfig,omitempty"` + OwnerId []byte `protobuf:"bytes,2,opt,name=owner_id,json=ownerId,proto3" json:"owner_id,omitempty"` + ClusterId []byte `protobuf:"bytes,3,opt,name=cluster_id,json=clusterId,proto3" json:"cluster_id,omitempty"` unknownFields protoimpl.UnknownFields - - Kubeconfig []byte `protobuf:"bytes,1,opt,name=kubeconfig,proto3" json:"kubeconfig,omitempty"` - OwnerId []byte `protobuf:"bytes,2,opt,name=owner_id,json=ownerId,proto3" json:"owner_id,omitempty"` - ClusterId []byte `protobuf:"bytes,3,opt,name=cluster_id,json=clusterId,proto3" json:"cluster_id,omitempty"` + sizeCache protoimpl.SizeCache } func (x *InitSuccessResponse) Reset() { @@ -297,11 +300,10 @@ func (x *InitSuccessResponse) GetClusterId() []byte { } type InitFailureResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Error string `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"` unknownFields protoimpl.UnknownFields - - Error string `protobuf:"bytes,1,opt,name=error,proto3" json:"error,omitempty"` + sizeCache protoimpl.SizeCache } func (x *InitFailureResponse) Reset() { @@ -342,11 +344,10 @@ func (x *InitFailureResponse) GetError() string { } type LogResponseType struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Log []byte `protobuf:"bytes,1,opt,name=log,proto3" json:"log,omitempty"` unknownFields protoimpl.UnknownFields - - Log []byte `protobuf:"bytes,1,opt,name=log,proto3" json:"log,omitempty"` + sizeCache protoimpl.SizeCache } func (x *LogResponseType) Reset() { @@ -387,14 +388,13 @@ func (x *LogResponseType) GetLog() []byte { } type KubernetesComponent struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Url string `protobuf:"bytes,1,opt,name=url,proto3" json:"url,omitempty"` + Hash string `protobuf:"bytes,2,opt,name=hash,proto3" json:"hash,omitempty"` + InstallPath string `protobuf:"bytes,3,opt,name=install_path,json=installPath,proto3" json:"install_path,omitempty"` + Extract bool `protobuf:"varint,4,opt,name=extract,proto3" json:"extract,omitempty"` unknownFields protoimpl.UnknownFields - - Url string `protobuf:"bytes,1,opt,name=url,proto3" json:"url,omitempty"` - Hash string `protobuf:"bytes,2,opt,name=hash,proto3" json:"hash,omitempty"` - InstallPath string `protobuf:"bytes,3,opt,name=install_path,json=installPath,proto3" json:"install_path,omitempty"` - Extract bool `protobuf:"varint,4,opt,name=extract,proto3" json:"extract,omitempty"` + sizeCache protoimpl.SizeCache } func (x *KubernetesComponent) Reset() { diff --git a/debugd/service/debugd.pb.go b/debugd/service/debugd.pb.go index 0b6a9755b..bae7198fd 100644 --- a/debugd/service/debugd.pb.go +++ b/debugd/service/debugd.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.35.2 +// protoc-gen-go v1.36.3 // protoc v5.29.1 // source: debugd/service/debugd.proto @@ -172,11 +172,10 @@ func (UploadSystemdServiceUnitsStatus) EnumDescriptor() ([]byte, []int) { } type SetInfoRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Info []*Info `protobuf:"bytes,1,rep,name=info,proto3" json:"info,omitempty"` unknownFields protoimpl.UnknownFields - - Info []*Info `protobuf:"bytes,1,rep,name=info,proto3" json:"info,omitempty"` + sizeCache protoimpl.SizeCache } func (x *SetInfoRequest) Reset() { @@ -217,11 +216,10 @@ func (x *SetInfoRequest) GetInfo() []*Info { } type SetInfoResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Status SetInfoStatus `protobuf:"varint,1,opt,name=status,proto3,enum=debugd.SetInfoStatus" json:"status,omitempty"` unknownFields protoimpl.UnknownFields - - Status SetInfoStatus `protobuf:"varint,1,opt,name=status,proto3,enum=debugd.SetInfoStatus" json:"status,omitempty"` + sizeCache protoimpl.SizeCache } func (x *SetInfoResponse) Reset() { @@ -262,9 +260,9 @@ func (x *SetInfoResponse) GetStatus() SetInfoStatus { } type GetInfoRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *GetInfoRequest) Reset() { @@ -298,11 +296,10 @@ func (*GetInfoRequest) Descriptor() ([]byte, []int) { } type GetInfoResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Info []*Info `protobuf:"bytes,1,rep,name=info,proto3" json:"info,omitempty"` unknownFields protoimpl.UnknownFields - - Info []*Info `protobuf:"bytes,1,rep,name=info,proto3" json:"info,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetInfoResponse) Reset() { @@ -343,12 +340,11 @@ func (x *GetInfoResponse) GetInfo() []*Info { } type Info struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` + Value string `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` unknownFields protoimpl.UnknownFields - - Key string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"` - Value string `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` + sizeCache protoimpl.SizeCache } func (x *Info) Reset() { @@ -396,9 +392,9 @@ func (x *Info) GetValue() string { } type DownloadFilesRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *DownloadFilesRequest) Reset() { @@ -432,15 +428,14 @@ func (*DownloadFilesRequest) Descriptor() ([]byte, []int) { } type FileTransferMessage struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Types that are assignable to Kind: + state protoimpl.MessageState `protogen:"open.v1"` + // Types that are valid to be assigned to Kind: // // *FileTransferMessage_Header // *FileTransferMessage_Chunk - Kind isFileTransferMessage_Kind `protobuf_oneof:"kind"` + Kind isFileTransferMessage_Kind `protobuf_oneof:"kind"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *FileTransferMessage) Reset() { @@ -473,23 +468,27 @@ func (*FileTransferMessage) Descriptor() ([]byte, []int) { return file_debugd_service_debugd_proto_rawDescGZIP(), []int{6} } -func (m *FileTransferMessage) GetKind() isFileTransferMessage_Kind { - if m != nil { - return m.Kind +func (x *FileTransferMessage) GetKind() isFileTransferMessage_Kind { + if x != nil { + return x.Kind } return nil } func (x *FileTransferMessage) GetHeader() *FileTransferHeader { - if x, ok := x.GetKind().(*FileTransferMessage_Header); ok { - return x.Header + if x != nil { + if x, ok := x.Kind.(*FileTransferMessage_Header); ok { + return x.Header + } } return nil } func (x *FileTransferMessage) GetChunk() *Chunk { - if x, ok := x.GetKind().(*FileTransferMessage_Chunk); ok { - return x.Chunk + if x != nil { + if x, ok := x.Kind.(*FileTransferMessage_Chunk); ok { + return x.Chunk + } } return nil } @@ -511,13 +510,12 @@ func (*FileTransferMessage_Header) isFileTransferMessage_Kind() {} func (*FileTransferMessage_Chunk) isFileTransferMessage_Kind() {} type FileTransferHeader struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - TargetPath string `protobuf:"bytes,1,opt,name=targetPath,proto3" json:"targetPath,omitempty"` - Mode uint32 `protobuf:"varint,3,opt,name=mode,proto3" json:"mode,omitempty"` - OverrideServiceUnit *string `protobuf:"bytes,4,opt,name=overrideServiceUnit,proto3,oneof" json:"overrideServiceUnit,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + TargetPath string `protobuf:"bytes,1,opt,name=targetPath,proto3" json:"targetPath,omitempty"` + Mode uint32 `protobuf:"varint,3,opt,name=mode,proto3" json:"mode,omitempty"` + OverrideServiceUnit *string `protobuf:"bytes,4,opt,name=overrideServiceUnit,proto3,oneof" json:"overrideServiceUnit,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *FileTransferHeader) Reset() { @@ -572,12 +570,11 @@ func (x *FileTransferHeader) GetOverrideServiceUnit() string { } type Chunk struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Content []byte `protobuf:"bytes,1,opt,name=content,proto3" json:"content,omitempty"` + Last bool `protobuf:"varint,2,opt,name=last,proto3" json:"last,omitempty"` unknownFields protoimpl.UnknownFields - - Content []byte `protobuf:"bytes,1,opt,name=content,proto3" json:"content,omitempty"` - Last bool `protobuf:"varint,2,opt,name=last,proto3" json:"last,omitempty"` + sizeCache protoimpl.SizeCache } func (x *Chunk) Reset() { @@ -625,12 +622,11 @@ func (x *Chunk) GetLast() bool { } type UploadFilesResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Status UploadFilesStatus `protobuf:"varint,1,opt,name=status,proto3,enum=debugd.UploadFilesStatus" json:"status,omitempty"` + Error string `protobuf:"bytes,2,opt,name=error,proto3" json:"error,omitempty"` unknownFields protoimpl.UnknownFields - - Status UploadFilesStatus `protobuf:"varint,1,opt,name=status,proto3,enum=debugd.UploadFilesStatus" json:"status,omitempty"` - Error string `protobuf:"bytes,2,opt,name=error,proto3" json:"error,omitempty"` + sizeCache protoimpl.SizeCache } func (x *UploadFilesResponse) Reset() { @@ -678,12 +674,11 @@ func (x *UploadFilesResponse) GetError() string { } type ServiceUnit struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Contents string `protobuf:"bytes,2,opt,name=contents,proto3" json:"contents,omitempty"` unknownFields protoimpl.UnknownFields - - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - Contents string `protobuf:"bytes,2,opt,name=contents,proto3" json:"contents,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ServiceUnit) Reset() { @@ -731,11 +726,10 @@ func (x *ServiceUnit) GetContents() string { } type UploadSystemdServiceUnitsRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Units []*ServiceUnit `protobuf:"bytes,1,rep,name=units,proto3" json:"units,omitempty"` unknownFields protoimpl.UnknownFields - - Units []*ServiceUnit `protobuf:"bytes,1,rep,name=units,proto3" json:"units,omitempty"` + sizeCache protoimpl.SizeCache } func (x *UploadSystemdServiceUnitsRequest) Reset() { @@ -776,11 +770,10 @@ func (x *UploadSystemdServiceUnitsRequest) GetUnits() []*ServiceUnit { } type UploadSystemdServiceUnitsResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Status UploadSystemdServiceUnitsStatus `protobuf:"varint,1,opt,name=status,proto3,enum=debugd.UploadSystemdServiceUnitsStatus" json:"status,omitempty"` unknownFields protoimpl.UnknownFields - - Status UploadSystemdServiceUnitsStatus `protobuf:"varint,1,opt,name=status,proto3,enum=debugd.UploadSystemdServiceUnitsStatus" json:"status,omitempty"` + sizeCache protoimpl.SizeCache } func (x *UploadSystemdServiceUnitsResponse) Reset() { diff --git a/disk-mapper/recoverproto/recover.pb.go b/disk-mapper/recoverproto/recover.pb.go index 073d2ec3a..e3750a095 100644 --- a/disk-mapper/recoverproto/recover.pb.go +++ b/disk-mapper/recoverproto/recover.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.35.2 +// protoc-gen-go v1.36.3 // protoc v5.29.1 // source: disk-mapper/recoverproto/recover.proto @@ -25,12 +25,11 @@ const ( ) type RecoverMessage struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + KmsUri string `protobuf:"bytes,3,opt,name=kms_uri,json=kmsUri,proto3" json:"kms_uri,omitempty"` + StorageUri string `protobuf:"bytes,4,opt,name=storage_uri,json=storageUri,proto3" json:"storage_uri,omitempty"` unknownFields protoimpl.UnknownFields - - KmsUri string `protobuf:"bytes,3,opt,name=kms_uri,json=kmsUri,proto3" json:"kms_uri,omitempty"` - StorageUri string `protobuf:"bytes,4,opt,name=storage_uri,json=storageUri,proto3" json:"storage_uri,omitempty"` + sizeCache protoimpl.SizeCache } func (x *RecoverMessage) Reset() { @@ -78,9 +77,9 @@ func (x *RecoverMessage) GetStorageUri() string { } type RecoverResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *RecoverResponse) Reset() { diff --git a/go.mod b/go.mod index 849b72032..f4d2aefe6 100644 --- a/go.mod +++ b/go.mod @@ -17,6 +17,7 @@ replace ( k8s.io/csi-translation-lib => k8s.io/csi-translation-lib v0.32.1 k8s.io/dynamic-resource-allocation => k8s.io/dynamic-resource-allocation v0.31.3 k8s.io/endpointslice => k8s.io/endpointslice v0.31.3 + k8s.io/externaljwt => k8s.io/externaljwt v0.32.1 k8s.io/kube-aggregator => k8s.io/kube-aggregator v0.32.1 k8s.io/kube-controller-manager => k8s.io/kube-controller-manager v0.32.1 k8s.io/kube-proxy => k8s.io/kube-proxy v0.32.1 @@ -27,66 +28,66 @@ replace ( ) require ( - cloud.google.com/go/compute v1.29.0 - cloud.google.com/go/compute/metadata v0.5.2 - cloud.google.com/go/kms v1.20.1 - cloud.google.com/go/secretmanager v1.14.2 - cloud.google.com/go/storage v1.47.0 + cloud.google.com/go/compute v1.31.1 + cloud.google.com/go/compute/metadata v0.6.0 + cloud.google.com/go/kms v1.20.5 + cloud.google.com/go/secretmanager v1.14.3 + cloud.google.com/go/storage v1.49.0 dario.cat/mergo v1.0.1 github.com/Azure/azure-sdk-for-go v68.0.0+incompatible - github.com/Azure/azure-sdk-for-go/sdk/azcore v1.16.0 - github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.8.0 - github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v6 v6.1.0 - github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/network/armnetwork/v6 v6.1.0 + github.com/Azure/azure-sdk-for-go/sdk/azcore v1.17.0 + github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.8.1 + github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v6 v6.2.0 + github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/network/armnetwork/v6 v6.2.0 github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/azsecrets v1.3.0 github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.5.0 github.com/BurntSushi/toml v1.4.0 - github.com/aws/aws-sdk-go v1.55.5 - github.com/aws/aws-sdk-go-v2 v1.32.5 - github.com/aws/aws-sdk-go-v2/config v1.28.5 - github.com/aws/aws-sdk-go-v2/credentials v1.17.46 - github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.20 - github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.41 - github.com/aws/aws-sdk-go-v2/service/autoscaling v1.51.0 - github.com/aws/aws-sdk-go-v2/service/cloudfront v1.43.0 - github.com/aws/aws-sdk-go-v2/service/ec2 v1.194.0 - github.com/aws/aws-sdk-go-v2/service/elasticloadbalancingv2 v1.43.0 - github.com/aws/aws-sdk-go-v2/service/resourcegroupstaggingapi v1.25.6 - github.com/aws/aws-sdk-go-v2/service/s3 v1.69.0 - github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.34.6 + github.com/aws/aws-sdk-go v1.55.6 + github.com/aws/aws-sdk-go-v2 v1.33.0 + github.com/aws/aws-sdk-go-v2/config v1.29.1 + github.com/aws/aws-sdk-go-v2/credentials v1.17.54 + github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.24 + github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.52 + github.com/aws/aws-sdk-go-v2/service/autoscaling v1.51.7 + github.com/aws/aws-sdk-go-v2/service/cloudfront v1.44.5 + github.com/aws/aws-sdk-go-v2/service/ec2 v1.200.0 + github.com/aws/aws-sdk-go-v2/service/elasticloadbalancingv2 v1.43.7 + github.com/aws/aws-sdk-go-v2/service/resourcegroupstaggingapi v1.25.13 + github.com/aws/aws-sdk-go-v2/service/s3 v1.73.2 + github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.34.13 github.com/aws/smithy-go v1.22.1 github.com/bazelbuild/buildtools v0.0.0-20240918101019-be1c24cc9a44 github.com/bazelbuild/rules_go v0.52.0 github.com/coreos/go-systemd/v22 v22.5.0 - github.com/docker/docker v27.3.1+incompatible + github.com/docker/docker v27.5.0+incompatible github.com/edgelesssys/go-azguestattestation v0.0.0-20240513062303-05f8770a633d github.com/edgelesssys/go-tdx-qpl v0.0.0-20240123150912-dcad3c41ec5f - github.com/foxboron/go-uefi v0.0.0-20241017190036-fab4fdf2f2f3 + github.com/foxboron/go-uefi v0.0.0-20241219185318-19dc140271bf github.com/fsnotify/fsnotify v1.8.0 github.com/go-playground/locales v0.14.1 github.com/go-playground/universal-translator v0.18.1 - github.com/go-playground/validator/v10 v10.23.0 + github.com/go-playground/validator/v10 v10.24.0 github.com/golang-jwt/jwt/v5 v5.2.1 github.com/google/go-sev-guest v0.12.2-0.20250116170741-e5df25990fc0 github.com/google/go-tdx-guest v0.3.1 - github.com/google/go-tpm v0.9.1 + github.com/google/go-tpm v0.9.3 github.com/google/go-tpm-tools v0.4.4 github.com/google/uuid v1.6.0 - github.com/googleapis/gax-go/v2 v2.14.0 - github.com/gophercloud/gophercloud/v2 v2.2.0 - github.com/gophercloud/utils/v2 v2.0.0-20241108144456-f4302a5ad8c6 - github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.1.0 + github.com/googleapis/gax-go/v2 v2.14.1 + github.com/gophercloud/gophercloud/v2 v2.4.0 + github.com/gophercloud/utils/v2 v2.0.0-20250106080359-c8704d65b4fa + github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.2.0 github.com/hashicorp/go-kms-wrapping/v2 v2.0.16 - github.com/hashicorp/go-kms-wrapping/wrappers/awskms/v2 v2.0.9 + github.com/hashicorp/go-kms-wrapping/wrappers/awskms/v2 v2.0.10 github.com/hashicorp/go-kms-wrapping/wrappers/azurekeyvault/v2 v2.0.11 github.com/hashicorp/go-kms-wrapping/wrappers/gcpckms/v2 v2.0.12 github.com/hashicorp/go-version v1.7.0 - github.com/hashicorp/hc-install v0.9.0 + github.com/hashicorp/hc-install v0.9.1 github.com/hashicorp/hcl/v2 v2.23.0 github.com/hashicorp/terraform-exec v0.21.0 - github.com/hashicorp/terraform-json v0.23.0 + github.com/hashicorp/terraform-json v0.24.0 github.com/hashicorp/terraform-plugin-framework v1.13.0 - github.com/hashicorp/terraform-plugin-framework-validators v0.15.0 + github.com/hashicorp/terraform-plugin-framework-validators v0.16.0 github.com/hashicorp/terraform-plugin-go v0.25.0 github.com/hashicorp/terraform-plugin-log v0.9.0 github.com/hashicorp/terraform-plugin-testing v1.11.0 @@ -94,58 +95,58 @@ require ( github.com/martinjungblut/go-cryptsetup v0.0.0-20220520180014-fd0874fd07a6 github.com/mattn/go-isatty v0.0.20 github.com/mitchellh/go-homedir v1.1.0 - github.com/onsi/ginkgo/v2 v2.22.0 - github.com/onsi/gomega v1.36.0 + github.com/onsi/ginkgo/v2 v2.22.2 + github.com/onsi/gomega v1.36.2 github.com/pkg/errors v0.9.1 - github.com/regclient/regclient v0.7.2 + github.com/regclient/regclient v0.8.0 github.com/rogpeppe/go-internal v1.13.1 - github.com/samber/slog-multi v1.2.4 - github.com/schollz/progressbar/v3 v3.17.1 - github.com/secure-systems-lab/go-securesystemslib v0.8.0 - github.com/siderolabs/talos/pkg/machinery v1.8.3 - github.com/sigstore/rekor v1.3.7 - github.com/sigstore/sigstore v1.8.10 - github.com/spf13/afero v1.11.0 + github.com/samber/slog-multi v1.3.3 + github.com/schollz/progressbar/v3 v3.18.0 + github.com/secure-systems-lab/go-securesystemslib v0.9.0 + github.com/siderolabs/talos/pkg/machinery v1.9.2 + github.com/sigstore/rekor v1.3.8 + github.com/sigstore/sigstore v1.8.12 + github.com/spf13/afero v1.12.0 github.com/spf13/cobra v1.8.1 github.com/spf13/pflag v1.0.5 github.com/stretchr/testify v1.10.0 - github.com/tink-crypto/tink-go/v2 v2.2.0 + github.com/tink-crypto/tink-go/v2 v2.3.0 github.com/vincent-petithory/dataurl v1.0.0 go.etcd.io/etcd/api/v3 v3.5.17 go.etcd.io/etcd/client/pkg/v3 v3.5.17 go.etcd.io/etcd/client/v3 v3.5.17 go.uber.org/goleak v1.3.0 - golang.org/x/crypto v0.31.0 - golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f + golang.org/x/crypto v0.32.0 + golang.org/x/exp v0.0.0-20250106191152-7588d65b2ba8 golang.org/x/mod v0.22.0 - golang.org/x/sys v0.28.0 + golang.org/x/sys v0.29.0 golang.org/x/text v0.21.0 - golang.org/x/tools v0.27.0 - google.golang.org/api v0.209.0 - google.golang.org/grpc v1.68.0 - google.golang.org/protobuf v1.35.2 + golang.org/x/tools v0.29.0 + google.golang.org/api v0.217.0 + google.golang.org/grpc v1.69.4 + google.golang.org/protobuf v1.36.3 gopkg.in/yaml.v3 v3.0.1 - helm.sh/helm/v3 v3.16.3 - k8s.io/api v0.31.3 - k8s.io/apiextensions-apiserver v0.31.3 - k8s.io/apimachinery v0.31.3 - k8s.io/apiserver v0.31.3 - k8s.io/client-go v0.31.3 - k8s.io/cluster-bootstrap v0.31.3 - k8s.io/kubelet v0.31.3 - k8s.io/kubernetes v1.31.3 - k8s.io/mount-utils v0.31.3 - k8s.io/utils v0.0.0-20241104163129-6fe5fd82f078 - libvirt.org/go/libvirt v1.10009.0 - sigs.k8s.io/controller-runtime v0.19.2 + helm.sh/helm/v3 v3.17.0 + k8s.io/api v0.32.1 + k8s.io/apiextensions-apiserver v0.32.1 + k8s.io/apimachinery v0.32.1 + k8s.io/apiserver v0.32.1 + k8s.io/client-go v0.32.1 + k8s.io/cluster-bootstrap v0.32.1 + k8s.io/kubelet v0.32.1 + k8s.io/kubernetes v1.32.1 + k8s.io/mount-utils v0.32.1 + k8s.io/utils v0.0.0-20241210054802-24370beab758 + libvirt.org/go/libvirt v1.10009.1 + sigs.k8s.io/controller-runtime v0.20.0 sigs.k8s.io/yaml v1.4.0 ) require ( - cel.dev/expr v0.16.2 // indirect + cel.dev/expr v0.18.0 // indirect cloud.google.com/go v0.116.0 // indirect - cloud.google.com/go/auth v0.10.2 // indirect - cloud.google.com/go/auth/oauth2adapt v0.2.5 // indirect + cloud.google.com/go/auth v0.14.0 // indirect + cloud.google.com/go/auth/oauth2adapt v0.2.7 // indirect cloud.google.com/go/iam v1.2.2 // indirect cloud.google.com/go/longrunning v0.6.2 // indirect cloud.google.com/go/monitoring v1.21.2 // indirect @@ -154,7 +155,7 @@ require ( github.com/Azure/azure-sdk-for-go/sdk/keyvault/azkeys v0.10.0 // indirect github.com/Azure/azure-sdk-for-go/sdk/keyvault/internal v0.7.1 // indirect github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/internal v1.1.0 // indirect - github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 // indirect + github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161 // indirect github.com/Azure/go-autorest v14.2.0+incompatible // indirect github.com/Azure/go-autorest/autorest v0.11.29 // indirect github.com/Azure/go-autorest/autorest/adal v0.9.23 // indirect @@ -163,8 +164,8 @@ require ( github.com/Azure/go-autorest/autorest/validation v0.3.1 // indirect github.com/Azure/go-autorest/logger v0.2.1 // indirect github.com/Azure/go-autorest/tracing v0.6.0 // indirect - github.com/AzureAD/microsoft-authentication-library-for-go v1.3.1 // indirect - github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.24.1 // indirect + github.com/AzureAD/microsoft-authentication-library-for-go v1.3.2 // indirect + github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.25.0 // indirect github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.48.1 // indirect github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.48.1 // indirect github.com/MakeNowJust/heredoc v1.0.0 // indirect @@ -173,40 +174,40 @@ require ( github.com/Masterminds/sprig/v3 v3.3.0 // indirect github.com/Masterminds/squirrel v1.5.4 // indirect github.com/Microsoft/go-winio v0.6.2 // indirect - github.com/ProtonMail/go-crypto v1.1.0-alpha.5.0.20240827111422-b5837fa4476e // indirect + github.com/ProtonMail/go-crypto v1.1.3 // indirect github.com/agext/levenshtein v1.2.2 // indirect github.com/apparentlymart/go-textseg/v15 v15.0.0 // indirect github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 // indirect github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.7 // indirect - github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.24 // indirect - github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.24 // indirect + github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.28 // indirect + github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.28 // indirect github.com/aws/aws-sdk-go-v2/internal/ini v1.8.1 // indirect - github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.24 // indirect + github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.28 // indirect github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.1 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.4.5 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.5 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.5 // indirect - github.com/aws/aws-sdk-go-v2/service/sso v1.24.6 // indirect - github.com/aws/aws-sdk-go-v2/service/ssooidc v1.28.5 // indirect - github.com/aws/aws-sdk-go-v2/service/sts v1.33.1 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.5.2 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.9 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.9 // indirect + github.com/aws/aws-sdk-go-v2/service/sso v1.24.11 // indirect + github.com/aws/aws-sdk-go-v2/service/ssooidc v1.28.10 // indirect + github.com/aws/aws-sdk-go-v2/service/sts v1.33.9 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/blang/semver v3.5.1+incompatible // indirect github.com/blang/semver/v4 v4.0.0 // indirect github.com/census-instrumentation/opencensus-proto v0.4.1 // indirect github.com/cespare/xxhash/v2 v2.3.0 // indirect github.com/chai2010/gettext-go v1.0.2 // indirect - github.com/cloudflare/circl v1.3.9 // indirect + github.com/cloudflare/circl v1.5.0 // indirect github.com/cncf/xds/go v0.0.0-20240905190251-b4127c9b8d78 // indirect - github.com/containerd/containerd v1.7.23 // indirect + github.com/containerd/containerd v1.7.24 // indirect github.com/containerd/errdefs v0.3.0 // indirect github.com/containerd/log v0.1.0 // indirect github.com/containerd/platforms v0.2.1 // indirect github.com/coredns/caddy v1.1.1 // indirect - github.com/coredns/corefile-migration v1.0.23 // indirect + github.com/coredns/corefile-migration v1.0.24 // indirect github.com/coreos/go-semver v0.3.1 // indirect github.com/cpuguy83/go-md2man/v2 v2.0.4 // indirect github.com/cyberphone/json-canonicalization v0.0.0-20220623050100-57a0ce2678a7 // indirect - github.com/cyphar/filepath-securejoin v0.3.4 // indirect + github.com/cyphar/filepath-securejoin v0.3.6 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/distribution/reference v0.6.0 // indirect github.com/docker/cli v27.1.1+incompatible // indirect @@ -217,15 +218,15 @@ require ( github.com/docker/go-units v0.5.0 // indirect github.com/docker/libtrust v0.0.0-20160708172513-aabc10ec26b7 // indirect github.com/emicklei/go-restful/v3 v3.11.0 // indirect - github.com/envoyproxy/go-control-plane v0.13.0 // indirect + github.com/envoyproxy/go-control-plane v0.13.1 // indirect github.com/envoyproxy/protoc-gen-validate v1.1.0 // indirect github.com/evanphx/json-patch v5.9.0+incompatible // indirect github.com/evanphx/json-patch/v5 v5.9.0 // indirect - github.com/exponent-io/jsonpath v0.0.0-20151013193312-d6023ce2651d // indirect - github.com/fatih/color v1.17.0 // indirect + github.com/exponent-io/jsonpath v0.0.0-20210407135951-1de76d718b3f // indirect + github.com/fatih/color v1.18.0 // indirect github.com/felixge/httpsnoop v1.0.4 // indirect github.com/fxamacker/cbor/v2 v2.7.0 // indirect - github.com/gabriel-vasile/mimetype v1.4.3 // indirect + github.com/gabriel-vasile/mimetype v1.4.8 // indirect github.com/go-chi/chi v4.1.2+incompatible // indirect github.com/go-errors/errors v1.4.2 // indirect github.com/go-gorp/gorp/v3 v3.1.0 // indirect @@ -252,7 +253,7 @@ require ( github.com/golang-jwt/jwt/v4 v4.5.0 // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect github.com/golang/protobuf v1.5.4 // indirect - github.com/google/btree v1.1.2 // indirect + github.com/google/btree v1.1.3 // indirect github.com/google/certificate-transparency-go v1.1.8 // indirect github.com/google/gnostic-models v0.6.8 // indirect github.com/google/go-attestation v0.5.1 // indirect @@ -262,14 +263,14 @@ require ( github.com/google/go-tspi v0.3.0 // indirect github.com/google/gofuzz v1.2.0 // indirect github.com/google/logger v1.1.1 // indirect - github.com/google/pprof v0.0.0-20241029153458-d1b30febd7db // indirect - github.com/google/s2a-go v0.1.8 // indirect + github.com/google/pprof v0.0.0-20241210010833-40e02aabc2ad // indirect + github.com/google/s2a-go v0.1.9 // indirect github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 // indirect github.com/googleapis/enterprise-certificate-proxy v0.3.4 // indirect github.com/gorilla/mux v1.8.1 // indirect github.com/gorilla/websocket v1.5.0 // indirect github.com/gosuri/uitable v0.0.4 // indirect - github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7 // indirect + github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79 // indirect github.com/hashicorp/errwrap v1.1.0 // indirect github.com/hashicorp/go-checkpoint v0.5.0 // indirect github.com/hashicorp/go-cleanhttp v0.5.2 // indirect @@ -286,7 +287,6 @@ require ( github.com/hashicorp/terraform-svchost v0.1.1 // indirect github.com/hashicorp/yamux v0.1.1 // indirect github.com/huandu/xstrings v1.5.0 // indirect - github.com/imdario/mergo v0.3.16 // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/jedisct1/go-minisign v0.0.0-20211028175153-1c139d1cc84b // indirect github.com/jmespath/go-jmespath v0.4.1-0.20220621161143-b0104c826a24 // indirect @@ -301,6 +301,7 @@ require ( github.com/letsencrypt/boulder v0.0.0-20240620165639-de9c06129bec // indirect github.com/lib/pq v1.10.9 // indirect github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de // indirect + github.com/lithammer/dedent v1.1.0 // indirect github.com/mailru/easyjson v0.7.7 // indirect github.com/mattn/go-colorable v0.1.13 // indirect github.com/mattn/go-runewidth v0.0.16 // indirect @@ -312,8 +313,9 @@ require ( github.com/mitchellh/reflectwalk v1.0.2 // indirect github.com/moby/docker-image-spec v1.3.1 // indirect github.com/moby/locker v1.0.1 // indirect - github.com/moby/spdystream v0.4.0 // indirect - github.com/moby/sys/mountinfo v0.7.1 // indirect + github.com/moby/spdystream v0.5.0 // indirect + github.com/moby/sys/mountinfo v0.7.2 // indirect + github.com/moby/sys/userns v0.1.0 // indirect github.com/moby/term v0.5.0 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/reflect2 v1.0.2 // indirect @@ -324,19 +326,17 @@ require ( github.com/oklog/ulid v1.3.1 // indirect github.com/opencontainers/go-digest v1.0.0 // indirect github.com/opencontainers/image-spec v1.1.0 // indirect - github.com/opencontainers/runc v1.1.13 // indirect - github.com/opencontainers/runtime-spec v1.2.0 // indirect github.com/opentracing/opentracing-go v1.2.0 // indirect github.com/peterbourgon/diskv v2.0.1+incompatible // indirect github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c // indirect - github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 // indirect + github.com/planetscale/vtprotobuf v0.6.1-0.20241121165744-79df5c4772f2 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/prometheus/client_golang v1.20.5 // indirect github.com/prometheus/client_model v0.6.1 // indirect github.com/prometheus/common v0.55.0 // indirect github.com/prometheus/procfs v0.15.1 // indirect github.com/rivo/uniseg v0.4.7 // indirect - github.com/rubenv/sql-migrate v1.7.0 // indirect + github.com/rubenv/sql-migrate v1.7.1 // indirect github.com/russross/blackfriday/v2 v2.1.0 // indirect github.com/samber/lo v1.47.0 // indirect github.com/sassoftware/relic v7.2.1+incompatible // indirect @@ -357,42 +357,39 @@ require ( github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 // indirect github.com/xeipuuv/gojsonschema v1.2.0 // indirect github.com/xlab/treeprint v1.2.0 // indirect - github.com/zclconf/go-cty v1.15.0 // indirect + github.com/zclconf/go-cty v1.15.1 // indirect go.mongodb.org/mongo-driver v1.14.0 // indirect go.opencensus.io v0.24.0 // indirect - go.opentelemetry.io/contrib/detectors/gcp v1.29.0 // indirect + go.opentelemetry.io/contrib/detectors/gcp v1.31.0 // indirect go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.54.0 // indirect go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.54.0 // indirect - go.opentelemetry.io/otel v1.29.0 // indirect - go.opentelemetry.io/otel/metric v1.29.0 // indirect - go.opentelemetry.io/otel/sdk v1.29.0 // indirect - go.opentelemetry.io/otel/sdk/metric v1.29.0 // indirect - go.opentelemetry.io/otel/trace v1.29.0 // indirect - go.starlark.net v0.0.0-20230525235612-a134d8f9ddca // indirect + go.opentelemetry.io/otel v1.31.0 // indirect + go.opentelemetry.io/otel/metric v1.31.0 // indirect + go.opentelemetry.io/otel/sdk v1.31.0 // indirect + go.opentelemetry.io/otel/sdk/metric v1.31.0 // indirect + go.opentelemetry.io/otel/trace v1.31.0 // indirect go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.27.0 // indirect - golang.org/x/net v0.31.0 // indirect - golang.org/x/oauth2 v0.24.0 // indirect + golang.org/x/net v0.34.0 // indirect + golang.org/x/oauth2 v0.25.0 // indirect golang.org/x/sync v0.10.0 // indirect - golang.org/x/term v0.27.0 // indirect - golang.org/x/time v0.8.0 // indirect + golang.org/x/term v0.28.0 // indirect + golang.org/x/time v0.9.0 // indirect gomodules.xyz/jsonpatch/v2 v2.4.0 // indirect google.golang.org/appengine v1.6.8 // indirect - google.golang.org/genproto v0.0.0-20241113202542-65e8d215514f // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20241104194629-dd2ea8efbc28 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20241113202542-65e8d215514f // indirect - google.golang.org/grpc/stats/opentelemetry v0.0.0-20240907200651-3ffb98b2c93a // indirect + google.golang.org/genproto v0.0.0-20241118233622-e639e219e697 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20241209162323-e6fa225c2576 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20250106144421-5f5ef82da422 // indirect gopkg.in/evanphx/json-patch.v4 v4.12.0 // indirect gopkg.in/inf.v0 v0.9.1 // indirect - gopkg.in/yaml.v2 v2.4.0 // indirect - k8s.io/cli-runtime v0.31.1 // indirect - k8s.io/component-base v0.31.3 // indirect + k8s.io/cli-runtime v0.32.0 // indirect + k8s.io/component-base v0.32.1 // indirect k8s.io/klog/v2 v2.130.1 // indirect - k8s.io/kube-openapi v0.0.0-20240228011516-70dd3763d340 // indirect - k8s.io/kubectl v0.31.1 // indirect + k8s.io/kube-openapi v0.0.0-20241105132330-32ad38e42d3f // indirect + k8s.io/kubectl v0.32.0 // indirect oras.land/oras-go v1.2.5 // indirect - sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect - sigs.k8s.io/kustomize/api v0.17.2 // indirect - sigs.k8s.io/kustomize/kyaml v0.17.1 // indirect - sigs.k8s.io/structured-merge-diff/v4 v4.4.1 // indirect + sigs.k8s.io/json v0.0.0-20241010143419-9aa6b5e7a4b3 // indirect + sigs.k8s.io/kustomize/api v0.18.0 // indirect + sigs.k8s.io/kustomize/kyaml v0.18.1 // indirect + sigs.k8s.io/structured-merge-diff/v4 v4.4.2 // indirect ) diff --git a/go.sum b/go.sum index 9a076c410..0168592e2 100644 --- a/go.sum +++ b/go.sum @@ -1,30 +1,30 @@ -cel.dev/expr v0.16.2 h1:RwRhoH17VhAu9U5CMvMhH1PDVgf0tuz9FT+24AfMLfU= -cel.dev/expr v0.16.2/go.mod h1:gXngZQMkWJoSbE8mOzehJlXQyubn/Vg0vR9/F3W7iw8= +cel.dev/expr v0.18.0 h1:CJ6drgk+Hf96lkLikr4rFf19WrU0BOWEihyZnI2TAzo= +cel.dev/expr v0.18.0/go.mod h1:MrpN08Q+lEBs+bGYdLxxHkZoUSsCp0nSKTs0nTymJgw= cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.116.0 h1:B3fRrSDkLRt5qSHWe40ERJvhvnQwdZiHu0bJOpldweE= cloud.google.com/go v0.116.0/go.mod h1:cEPSRWPzZEswwdr9BxE6ChEn01dWlTaF05LiC2Xs70U= -cloud.google.com/go/auth v0.10.2 h1:oKF7rgBfSHdp/kuhXtqU/tNDr0mZqhYbEh+6SiqzkKo= -cloud.google.com/go/auth v0.10.2/go.mod h1:xxA5AqpDrvS+Gkmo9RqrGGRh6WSNKKOXhY3zNOr38tI= -cloud.google.com/go/auth/oauth2adapt v0.2.5 h1:2p29+dePqsCHPP1bqDJcKj4qxRyYCcbzKpFyKGt3MTk= -cloud.google.com/go/auth/oauth2adapt v0.2.5/go.mod h1:AlmsELtlEBnaNTL7jCj8VQFLy6mbZv0s4Q7NGBeQ5E8= -cloud.google.com/go/compute v1.29.0 h1:Lph6d8oPi38NHkOr6S55Nus/Pbbcp37m/J0ohgKAefs= -cloud.google.com/go/compute v1.29.0/go.mod h1:HFlsDurE5DpQZClAGf/cYh+gxssMhBxBovZDYkEn/Og= -cloud.google.com/go/compute/metadata v0.5.2 h1:UxK4uu/Tn+I3p2dYWTfiX4wva7aYlKixAHn3fyqngqo= -cloud.google.com/go/compute/metadata v0.5.2/go.mod h1:C66sj2AluDcIqakBq/M8lw8/ybHgOZqin2obFxa/E5k= +cloud.google.com/go/auth v0.14.0 h1:A5C4dKV/Spdvxcl0ggWwWEzzP7AZMJSEIgrkngwhGYM= +cloud.google.com/go/auth v0.14.0/go.mod h1:CYsoRL1PdiDuqeQpZE0bP2pnPrGqFcOkI0nldEQis+A= +cloud.google.com/go/auth/oauth2adapt v0.2.7 h1:/Lc7xODdqcEw8IrZ9SvwnlLX6j9FHQM74z6cBk9Rw6M= +cloud.google.com/go/auth/oauth2adapt v0.2.7/go.mod h1:NTbTTzfvPl1Y3V1nPpOgl2w6d/FjO7NNUQaWSox6ZMc= +cloud.google.com/go/compute v1.31.1 h1:SObuy8Fs6woazArpXp1fsHCw+ZH4iJ/8dGGTxUhHZQA= +cloud.google.com/go/compute v1.31.1/go.mod h1:hyOponWhXviDptJCJSoEh89XO1cfv616wbwbkde1/+8= +cloud.google.com/go/compute/metadata v0.6.0 h1:A6hENjEsCDtC1k8byVsgwvVcioamEHvZ4j01OwKxG9I= +cloud.google.com/go/compute/metadata v0.6.0/go.mod h1:FjyFAW1MW0C203CEOMDTu3Dk1FlqW3Rga40jzHL4hfg= cloud.google.com/go/iam v1.2.2 h1:ozUSofHUGf/F4tCNy/mu9tHLTaxZFLOUiKzjcgWHGIA= cloud.google.com/go/iam v1.2.2/go.mod h1:0Ys8ccaZHdI1dEUilwzqng/6ps2YB6vRsjIe00/+6JY= -cloud.google.com/go/kms v1.20.1 h1:og29Wv59uf2FVaZlesaiDAqHFzHaoUyHI3HYp9VUHVg= -cloud.google.com/go/kms v1.20.1/go.mod h1:LywpNiVCvzYNJWS9JUcGJSVTNSwPwi0vBAotzDqn2nc= +cloud.google.com/go/kms v1.20.5 h1:aQQ8esAIVZ1atdJRxihhdxGQ64/zEbJoJnCz/ydSmKg= +cloud.google.com/go/kms v1.20.5/go.mod h1:C5A8M1sv2YWYy1AE6iSrnddSG9lRGdJq5XEdBy28Lmw= cloud.google.com/go/logging v1.12.0 h1:ex1igYcGFd4S/RZWOCU51StlIEuey5bjqwH9ZYjHibk= cloud.google.com/go/logging v1.12.0/go.mod h1:wwYBt5HlYP1InnrtYI0wtwttpVU1rifnMT7RejksUAM= cloud.google.com/go/longrunning v0.6.2 h1:xjDfh1pQcWPEvnfjZmwjKQEcHnpz6lHjfy7Fo0MK+hc= cloud.google.com/go/longrunning v0.6.2/go.mod h1:k/vIs83RN4bE3YCswdXC5PFfWVILjm3hpEUlSko4PiI= cloud.google.com/go/monitoring v1.21.2 h1:FChwVtClH19E7pJ+e0xUhJPGksctZNVOk2UhMmblmdU= cloud.google.com/go/monitoring v1.21.2/go.mod h1:hS3pXvaG8KgWTSz+dAdyzPrGUYmi2Q+WFX8g2hqVEZU= -cloud.google.com/go/secretmanager v1.14.2 h1:2XscWCfy//l/qF96YE18/oUaNJynAx749Jg3u0CjQr8= -cloud.google.com/go/secretmanager v1.14.2/go.mod h1:Q18wAPMM6RXLC/zVpWTlqq2IBSbbm7pKBlM3lCKsmjw= -cloud.google.com/go/storage v1.47.0 h1:ajqgt30fnOMmLfWfu1PWcb+V9Dxz6n+9WKjdNg5R4HM= -cloud.google.com/go/storage v1.47.0/go.mod h1:Ks0vP374w0PW6jOUameJbapbQKXqkjGd/OJRp2fb9IQ= +cloud.google.com/go/secretmanager v1.14.3 h1:XVGHbcXEsbrgi4XHzgK5np81l1eO7O72WOXHhXUemrM= +cloud.google.com/go/secretmanager v1.14.3/go.mod h1:Pwzcfn69Ni9Lrk1/XBzo1H9+MCJwJ6CDCoeoQUsMN+c= +cloud.google.com/go/storage v1.49.0 h1:zenOPBOWHCnojRd9aJZAyQXBYqkJkdQS42dxL55CIMw= +cloud.google.com/go/storage v1.49.0/go.mod h1:k1eHhhpLvrPjVGfo0mOUPEJ4Y2+a/Hv5PiwehZI9qGU= cloud.google.com/go/trace v1.11.2 h1:4ZmaBdL8Ng/ajrgKqY5jfvzqMXbrDcBsUGXOT9aqTtI= cloud.google.com/go/trace v1.11.2/go.mod h1:bn7OwXd4pd5rFuAnTrzBuoZ4ax2XQeG3qNgYmfCy0Io= dario.cat/mergo v1.0.1 h1:Ra4+bf83h2ztPIQYNP99R6m+Y7KfnARDfID+a+vLl4s= @@ -37,24 +37,24 @@ github.com/AdamKorcz/go-fuzz-headers-1 v0.0.0-20230919221257-8b5d3ce2d11d h1:zjq github.com/AdamKorcz/go-fuzz-headers-1 v0.0.0-20230919221257-8b5d3ce2d11d/go.mod h1:XNqJ7hv2kY++g8XEHREpi+JqZo3+0l+CH2egBVN4yqM= github.com/Azure/azure-sdk-for-go v68.0.0+incompatible h1:fcYLmCpyNYRnvJbPerq7U0hS+6+I79yEDJBqVNcqUzU= github.com/Azure/azure-sdk-for-go v68.0.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= -github.com/Azure/azure-sdk-for-go/sdk/azcore v1.16.0 h1:JZg6HRh6W6U4OLl6lk7BZ7BLisIzM9dG1R50zUk9C/M= -github.com/Azure/azure-sdk-for-go/sdk/azcore v1.16.0/go.mod h1:YL1xnZ6QejvQHWJrX/AvhFl4WW4rqHVoKspWNVwFk0M= -github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.8.0 h1:B/dfvscEQtew9dVuoxqxrUKKv8Ih2f55PydknDamU+g= -github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.8.0/go.mod h1:fiPSssYvltE08HJchL04dOy+RD4hgrjph0cwGGMntdI= -github.com/Azure/azure-sdk-for-go/sdk/azidentity/cache v0.3.0 h1:+m0M/LFxN43KvULkDNfdXOgrjtg6UYJPFBJyuEcRCAw= -github.com/Azure/azure-sdk-for-go/sdk/azidentity/cache v0.3.0/go.mod h1:PwOyop78lveYMRs6oCxjiVyBdyCgIYH6XHIVZO9/SFQ= +github.com/Azure/azure-sdk-for-go/sdk/azcore v1.17.0 h1:g0EZJwz7xkXQiZAI5xi9f3WWFYBlX1CPTrR+NDToRkQ= +github.com/Azure/azure-sdk-for-go/sdk/azcore v1.17.0/go.mod h1:XCW7KnZet0Opnr7HccfUw1PLc4CjHqpcaxW8DHklNkQ= +github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.8.1 h1:1mvYtZfWQAnwNah/C+Z+Jb9rQH95LPE2vlmMuWAHJk8= +github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.8.1/go.mod h1:75I/mXtme1JyWFtz8GocPHVFyH421IBoZErnO16dd0k= +github.com/Azure/azure-sdk-for-go/sdk/azidentity/cache v0.3.1 h1:Bk5uOhSAenHyR5P61D/NzeQCv+4fEVV8mOkJ82NqpWw= +github.com/Azure/azure-sdk-for-go/sdk/azidentity/cache v0.3.1/go.mod h1:QZ4pw3or1WPmRBxf0cHd1tknzrT54WPBOQoGutCPvSU= github.com/Azure/azure-sdk-for-go/sdk/internal v1.10.0 h1:ywEEhmNahHBihViHepv3xPBn1663uRv2t2q/ESv9seY= github.com/Azure/azure-sdk-for-go/sdk/internal v1.10.0/go.mod h1:iZDifYGJTIgIIkYRNWPENUnqx6bJ2xnSDFI2tjwZNuY= github.com/Azure/azure-sdk-for-go/sdk/keyvault/azkeys v0.10.0 h1:m/sWOGCREuSBqg2htVQTBY8nOZpyajYztF0vUvSZTuM= github.com/Azure/azure-sdk-for-go/sdk/keyvault/azkeys v0.10.0/go.mod h1:Pu5Zksi2KrU7LPbZbNINx6fuVrUp/ffvpxdDj+i8LeE= github.com/Azure/azure-sdk-for-go/sdk/keyvault/internal v0.7.1 h1:FbH3BbSb4bvGluTesZZ+ttN/MDsnMmQP36OSnDuSXqw= github.com/Azure/azure-sdk-for-go/sdk/keyvault/internal v0.7.1/go.mod h1:9V2j0jn9jDEkCkv8w/bKTNppX/d0FVA1ud77xCIP4KA= -github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v6 v6.1.0 h1:zDeQI/PaWztI2tcrGO/9RIMey9NvqYbnyttf/0P3QWM= -github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v6 v6.1.0/go.mod h1:zflC9v4VfViJrSvcvplqws/yGXVbUEMZi/iHpZdSPWA= +github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v6 v6.2.0 h1:JAebRMoc3vL+Nd97GBprHYHucO4+wlW+tNbBIumqJlk= +github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v6 v6.2.0/go.mod h1:zflC9v4VfViJrSvcvplqws/yGXVbUEMZi/iHpZdSPWA= github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/internal/v3 v3.1.0 h1:2qsIIvxVT+uE6yrNldntJKlLRgxGbZ85kgtz5SNBhMw= github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/internal/v3 v3.1.0/go.mod h1:AW8VEadnhw9xox+VaVd9sP7NjzOAnaZBLRH6Tq3cJ38= -github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/network/armnetwork/v6 v6.1.0 h1:Fd+iaEa+JBwzYo6OTWYSNqyvlPSLciMGsmsnYCKcXM0= -github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/network/armnetwork/v6 v6.1.0/go.mod h1:ulHyBFJOI0ONiRL4vcJTmS7rx18jQQlEPmAgo80cRdM= +github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/network/armnetwork/v6 v6.2.0 h1:HYGD75g0bQ3VO/Omedm54v4LrD3B1cGImuRF3AJ5wLo= +github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/network/armnetwork/v6 v6.2.0/go.mod h1:ulHyBFJOI0ONiRL4vcJTmS7rx18jQQlEPmAgo80cRdM= github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armresources v1.2.0 h1:Dd+RhdJn0OTtVGaeDLZpcumkIVCtA/3/Fo42+eoYvVM= github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armresources v1.2.0/go.mod h1:5kakwfW5CjC9KK+Q4wjXAg+ShuIm2mBMua0ZFj2C8PE= github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/storage/armstorage v1.6.0 h1:PiSrjRPpkQNjrM8H0WwKMnZUdu1RGMtd/LdGKUrOo+c= @@ -65,8 +65,8 @@ github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/internal v1.1.0 h1:eXnN9 github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/internal v1.1.0/go.mod h1:XIpam8wumeZ5rVMuhdDQLMfIPDf1WO3IzrCRO3e3e3o= github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.5.0 h1:mlmW46Q0B79I+Aj4azKC6xDMFN9a9SyZWESlGWYXbFs= github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.5.0/go.mod h1:PXe2h+LKcWTX9afWdZoHyODqR4fBa5boUM/8uJfZ0Jo= -github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 h1:UQHMgLO+TxOElx5B5HZ4hJQsoJ/PvUvKRhJHDQXO8P8= -github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= +github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161 h1:L/gRVlceqvL25UVaW/CKtUDjefjrs0SPonmDGUVOYP0= +github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= github.com/Azure/go-autorest v14.2.0+incompatible h1:V5VMDjClD3GiElqLWO7mz2MxNAK/vTfRHdAubSIPRgs= github.com/Azure/go-autorest v14.2.0+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= github.com/Azure/go-autorest/autorest v0.11.29 h1:I4+HL/JDvErx2LjyzaVxllw2lRDB5/BT2Bm4g20iqYw= @@ -89,15 +89,15 @@ github.com/Azure/go-autorest/tracing v0.6.0 h1:TYi4+3m5t6K48TGI9AUdb+IzbnSxvnvUM github.com/Azure/go-autorest/tracing v0.6.0/go.mod h1:+vhtPC754Xsa23ID7GlGsrdKBpUA79WCAKPPZVC2DeU= github.com/AzureAD/microsoft-authentication-extensions-for-go/cache v0.1.1 h1:WJTmL004Abzc5wDB5VtZG2PJk5ndYDgVacGqfirKxjM= github.com/AzureAD/microsoft-authentication-extensions-for-go/cache v0.1.1/go.mod h1:tCcJZ0uHAmvjsVYzEFivsRTN00oz5BEsRgQHu5JZ9WE= -github.com/AzureAD/microsoft-authentication-library-for-go v1.3.1 h1:gUDtaZk8heteyfdmv+pcfHvhR9llnh7c7GMwZ8RVG04= -github.com/AzureAD/microsoft-authentication-library-for-go v1.3.1/go.mod h1:wP83P5OoQ5p6ip3ScPr0BAq0BvuPAvacpEuSzyouqAI= +github.com/AzureAD/microsoft-authentication-library-for-go v1.3.2 h1:kYRSnvJju5gYVyhkij+RTJ/VR6QIUaCfWeaFm2ycsjQ= +github.com/AzureAD/microsoft-authentication-library-for-go v1.3.2/go.mod h1:wP83P5OoQ5p6ip3ScPr0BAq0BvuPAvacpEuSzyouqAI= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/toml v1.4.0 h1:kuoIxZQy2WRRk1pttg9asf+WVv6tWQuBNVmK8+nqPr0= github.com/BurntSushi/toml v1.4.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho= github.com/DATA-DOG/go-sqlmock v1.5.2 h1:OcvFkGmslmlZibjAjaHm3L//6LiuBgolP7OputlJIzU= github.com/DATA-DOG/go-sqlmock v1.5.2/go.mod h1:88MAG/4G7SMwSE3CeA0ZKzrT5CiOU3OJ+JlNzwDqpNU= -github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.24.1 h1:pB2F2JKCj1Znmp2rwxxt1J0Fg0wezTMgWYk5Mpbi1kg= -github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.24.1/go.mod h1:itPGVDKf9cC/ov4MdvJ2QZ0khw4bfoo9jzwTJlaxy2k= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.25.0 h1:3c8yed4lgqTt+oTQ+JNMDo+F4xprBf+O/il4ZC0nRLw= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.25.0/go.mod h1:obipzmGjfSjam60XLwGfqUkJsfiheAl+TUjG+4yzyPM= github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.48.1 h1:UQ0AhxogsIRZDkElkblfnwjc3IaltCm2HUMvezQaL7s= github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.48.1/go.mod h1:jyqM3eLpJ3IbIFDTKVz2rF9T/xWGW0rIriGwnz8l9Tk= github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/cloudmock v0.48.1 h1:oTX4vsorBZo/Zdum6OKPA4o7544hm6smoRv1QjpTwGo= @@ -118,8 +118,8 @@ github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERo github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU= github.com/Microsoft/hcsshim v0.11.7 h1:vl/nj3Bar/CvJSYo7gIQPyRWc9f3c6IeSNavBTSZNZQ= github.com/Microsoft/hcsshim v0.11.7/go.mod h1:MV8xMfmECjl5HdO7U/3/hFVnkmSBjAjmA09d4bExKcU= -github.com/ProtonMail/go-crypto v1.1.0-alpha.5.0.20240827111422-b5837fa4476e h1:O1cSHAcGcbGEO66Qi2AIJeYmXO8iP4L/PNrbdN+RjJA= -github.com/ProtonMail/go-crypto v1.1.0-alpha.5.0.20240827111422-b5837fa4476e/go.mod h1:rA3QumHc/FZ8pAHreoekgiAbzpNsfQAosU5td4SnOrE= +github.com/ProtonMail/go-crypto v1.1.3 h1:nRBOetoydLeUb4nHajyO2bKqMLfWQ/ZPwkXqXxPxCFk= +github.com/ProtonMail/go-crypto v1.1.3/go.mod h1:rA3QumHc/FZ8pAHreoekgiAbzpNsfQAosU5td4SnOrE= github.com/Shopify/logrus-bugsnag v0.0.0-20171204204709-577dee27f20d h1:UrqY+r/OJnIp5u0s1SbQ8dVfLCZJsnvazdBP5hS4iRs= github.com/Shopify/logrus-bugsnag v0.0.0-20171204204709-577dee27f20d/go.mod h1:HI8ITrYtUY+O+ZhtlqUnD8+KwNPOyugEhfP9fdUIaEQ= github.com/agext/levenshtein v1.2.2 h1:0S/Yg6LYmFJ5stwQeRp6EeOcCbj7xiqQSdNelsXvaqE= @@ -136,56 +136,56 @@ github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkY github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 h1:DklsrG3dyBCFEj5IhUbnKptjxatkF07cF2ak3yi77so= github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2/go.mod h1:WaHUgvxTVq04UNunO+XhnAqY/wQc+bxr74GqbsZ/Jqw= github.com/aws/aws-sdk-go v1.30.27/go.mod h1:5zCpMtNQVjRREroY7sYe8lOMRSxkhG6MZveU8YkpAk0= -github.com/aws/aws-sdk-go v1.55.5 h1:KKUZBfBoyqy5d3swXyiC7Q76ic40rYcbqH7qjh59kzU= -github.com/aws/aws-sdk-go v1.55.5/go.mod h1:eRwEWoyTWFMVYVQzKMNHWP5/RV4xIUGMQfXQHfHkpNU= -github.com/aws/aws-sdk-go-v2 v1.32.5 h1:U8vdWJuY7ruAkzaOdD7guwJjD06YSKmnKCJs7s3IkIo= -github.com/aws/aws-sdk-go-v2 v1.32.5/go.mod h1:P5WJBrYqqbWVaOxgH0X/FYYD47/nooaPOZPlQdmiN2U= +github.com/aws/aws-sdk-go v1.55.6 h1:cSg4pvZ3m8dgYcgqB97MrcdjUmZ1BeMYKUxMMB89IPk= +github.com/aws/aws-sdk-go v1.55.6/go.mod h1:eRwEWoyTWFMVYVQzKMNHWP5/RV4xIUGMQfXQHfHkpNU= +github.com/aws/aws-sdk-go-v2 v1.33.0 h1:Evgm4DI9imD81V0WwD+TN4DCwjUMdc94TrduMLbgZJs= +github.com/aws/aws-sdk-go-v2 v1.33.0/go.mod h1:P5WJBrYqqbWVaOxgH0X/FYYD47/nooaPOZPlQdmiN2U= github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.7 h1:lL7IfaFzngfx0ZwUGOZdsFFnQ5uLvR0hWqqhyE7Q9M8= github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.7/go.mod h1:QraP0UcVlQJsmHfioCrveWOC1nbiWUl3ej08h4mXWoc= -github.com/aws/aws-sdk-go-v2/config v1.28.5 h1:Za41twdCXbuyyWv9LndXxZZv3QhTG1DinqlFsSuvtI0= -github.com/aws/aws-sdk-go-v2/config v1.28.5/go.mod h1:4VsPbHP8JdcdUDmbTVgNL/8w9SqOkM5jyY8ljIxLO3o= -github.com/aws/aws-sdk-go-v2/credentials v1.17.46 h1:AU7RcriIo2lXjUfHFnFKYsLCwgbz1E7Mm95ieIRDNUg= -github.com/aws/aws-sdk-go-v2/credentials v1.17.46/go.mod h1:1FmYyLGL08KQXQ6mcTlifyFXfJVCNJTVGuQP4m0d/UA= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.20 h1:sDSXIrlsFSFJtWKLQS4PUWRvrT580rrnuLydJrCQ/yA= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.20/go.mod h1:WZ/c+w0ofps+/OUqMwWgnfrgzZH1DZO1RIkktICsqnY= -github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.41 h1:hqcxMc2g/MwwnRMod9n6Bd+t+9Nf7d5qRg7RaXKPd6o= -github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.41/go.mod h1:d1eH0VrttvPmrCraU68LOyNdu26zFxQFjrVSb5vdhog= -github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.24 h1:4usbeaes3yJnCFC7kfeyhkdkPtoRYPa/hTmCqMpKpLI= -github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.24/go.mod h1:5CI1JemjVwde8m2WG3cz23qHKPOxbpkq0HaoreEgLIY= -github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.24 h1:N1zsICrQglfzaBnrfM0Ys00860C+QFwu6u/5+LomP+o= -github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.24/go.mod h1:dCn9HbJ8+K31i8IQ8EWmWj0EiIk0+vKiHNMxTTYveAg= +github.com/aws/aws-sdk-go-v2/config v1.29.1 h1:JZhGawAyZ/EuJeBtbQYnaoftczcb2drR2Iq36Wgz4sQ= +github.com/aws/aws-sdk-go-v2/config v1.29.1/go.mod h1:7bR2YD5euaxBhzt2y/oDkt3uNRb6tjFp98GlTFueRwk= +github.com/aws/aws-sdk-go-v2/credentials v1.17.54 h1:4UmqeOqJPvdvASZWrKlhzpRahAulBfyTJQUaYy4+hEI= +github.com/aws/aws-sdk-go-v2/credentials v1.17.54/go.mod h1:RTdfo0P0hbbTxIhmQrOsC/PquBZGabEPnCaxxKRPSnI= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.24 h1:5grmdTdMsovn9kPZPI23Hhvp0ZyNm5cRO+IZFIYiAfw= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.24/go.mod h1:zqi7TVKTswH3Ozq28PkmBmgzG1tona7mo9G2IJg4Cis= +github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.52 h1:6kI83R98XOnnyzHv9g9KTYXFawMyeQq8NeEERWMAwJk= +github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.52/go.mod h1:Juj7unpf3CIrWpEyJZhRJ6rJl9IYX7Hd8HOlwaZq/LE= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.28 h1:igORFSiH3bfq4lxKFkTSYDhJEUCYo6C8VKiWJjYwQuQ= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.28/go.mod h1:3So8EA/aAYm36L7XIvCVwLa0s5N0P7o2b1oqnx/2R4g= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.28 h1:1mOW9zAUMhTSrMDssEHS/ajx8JcAj/IcftzcmNlmVLI= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.28/go.mod h1:kGlXVIWDfvt2Ox5zEaNglmq0hXPHgQFNMix33Tw22jA= github.com/aws/aws-sdk-go-v2/internal/ini v1.8.1 h1:VaRN3TlFdd6KxX1x3ILT5ynH6HvKgqdiXoTxAF4HQcQ= github.com/aws/aws-sdk-go-v2/internal/ini v1.8.1/go.mod h1:FbtygfRFze9usAadmnGJNc8KsP346kEe+y2/oyhGAGc= -github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.24 h1:JX70yGKLj25+lMC5Yyh8wBtvB01GDilyRuJvXJ4piD0= -github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.24/go.mod h1:+Ln60j9SUTD0LEwnhEB0Xhg61DHqplBrbZpLgyjoEHg= -github.com/aws/aws-sdk-go-v2/service/autoscaling v1.51.0 h1:1KzQVZi7OTixxaVJ8fWaJAUBjme+iQ3zBOCZhE4RgxQ= -github.com/aws/aws-sdk-go-v2/service/autoscaling v1.51.0/go.mod h1:I1+/2m+IhnK5qEbhS3CrzjeiVloo9sItE/2K+so0fkU= -github.com/aws/aws-sdk-go-v2/service/cloudfront v1.43.0 h1:Ny0HHch5IyjWd3Hh/csFvAZFPDHvu7eeePFh7+BnbZ8= -github.com/aws/aws-sdk-go-v2/service/cloudfront v1.43.0/go.mod h1:KC7JSdRScZQpZJDJp4ze9elsg8QIWIoABjmCzDS4rtg= -github.com/aws/aws-sdk-go-v2/service/ec2 v1.194.0 h1:56YXcRmryw9wiTrvdVeJEUwBCoN/+o33R52PA7CCi08= -github.com/aws/aws-sdk-go-v2/service/ec2 v1.194.0/go.mod h1:mzj8EEjIHSN2oZRXiw1Dd+uB4HZTl7hC8nBzX9IZMWw= -github.com/aws/aws-sdk-go-v2/service/elasticloadbalancingv2 v1.43.0 h1:fIAJ5VM/ANpYV81C1Jbf4ePbElMSzuWFljezD6weU9k= -github.com/aws/aws-sdk-go-v2/service/elasticloadbalancingv2 v1.43.0/go.mod h1:pZP3I+Ts+XuhJJtZE49+ABVjfxm7u9/hxcNUYSpY3OE= +github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.28 h1:7kpeALOUeThs2kEjlAxlADAVfxKmkYAedlpZ3kdoSJ4= +github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.28/go.mod h1:pyaOYEdp1MJWgtXLy6q80r3DhsVdOIOZNB9hdTcJIvI= +github.com/aws/aws-sdk-go-v2/service/autoscaling v1.51.7 h1:LDQ3goASec/ylee0tYuHLnvaXej3TkEpGRpRxwSwXhc= +github.com/aws/aws-sdk-go-v2/service/autoscaling v1.51.7/go.mod h1:Zgti4LZawMEhtIBBwY1YijZJncgUOmeZoTO05uP9tIw= +github.com/aws/aws-sdk-go-v2/service/cloudfront v1.44.5 h1:oBLlEuSL5G9W8M4GtEVdNi+xsQP+9lphVkbYf38Isgs= +github.com/aws/aws-sdk-go-v2/service/cloudfront v1.44.5/go.mod h1:H/t3dGwvHy2WJ+ZwyDBWva7ttsoxSxt5qC1OMcc0iJ0= +github.com/aws/aws-sdk-go-v2/service/ec2 v1.200.0 h1:3hH6o7Z2WeE1twvz44Aitn6Qz8DZN3Dh5IB4Eh2xq7s= +github.com/aws/aws-sdk-go-v2/service/ec2 v1.200.0/go.mod h1:I76S7jN0nfsYTBtuTgTsJtK2Q8yJVDgrLr5eLN64wMA= +github.com/aws/aws-sdk-go-v2/service/elasticloadbalancingv2 v1.43.7 h1:5zMWovjTaEb1efvvFfoRkftUWA+xfEdognn/JZC1/Hg= +github.com/aws/aws-sdk-go-v2/service/elasticloadbalancingv2 v1.43.7/go.mod h1:6QynTIHgeX3wwdpwlDhCovlJTwJ3Mb+Km2kVOCh26BA= github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.1 h1:iXtILhvDxB6kPvEXgsDhGaZCSC6LQET5ZHSdJozeI0Y= github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.1/go.mod h1:9nu0fVANtYiAePIBh2/pFUSwtJ402hLnp854CNoDOeE= -github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.4.5 h1:gvZOjQKPxFXy1ft3QnEyXmT+IqneM9QAUWlM3r0mfqw= -github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.4.5/go.mod h1:DLWnfvIcm9IET/mmjdxeXbBKmTCm0ZB8p1za9BVteM8= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.5 h1:wtpJ4zcwrSbwhECWQoI/g6WM9zqCcSpHDJIWSbMLOu4= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.5/go.mod h1:qu/W9HXQbbQ4+1+JcZp0ZNPV31ym537ZJN+fiS7Ti8E= -github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.5 h1:P1doBzv5VEg1ONxnJss1Kh5ZG/ewoIE4MQtKKc6Crgg= -github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.5/go.mod h1:NOP+euMW7W3Ukt28tAxPuoWao4rhhqJD3QEBk7oCg7w= -github.com/aws/aws-sdk-go-v2/service/resourcegroupstaggingapi v1.25.6 h1:I+a2rKx253mIClu5QtBkYWtko1k3nC+SvAtWTomengI= -github.com/aws/aws-sdk-go-v2/service/resourcegroupstaggingapi v1.25.6/go.mod h1:hmJ9BhvEvDx0TrC16/p9UdoBRyCD2+k23ritPq5ctdM= -github.com/aws/aws-sdk-go-v2/service/s3 v1.69.0 h1:Q2ax8S21clKOnHhhr933xm3JxdJebql+R7aNo7p7GBQ= -github.com/aws/aws-sdk-go-v2/service/s3 v1.69.0/go.mod h1:ralv4XawHjEMaHOWnTFushl0WRqim/gQWesAMF6hTow= -github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.34.6 h1:1KDMKvOKNrpD667ORbZ/+4OgvUoaok1gg/MLzrHF9fw= -github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.34.6/go.mod h1:DmtyfCfONhOyVAJ6ZMTrDSFIeyCBlEO93Qkfhxwbxu0= -github.com/aws/aws-sdk-go-v2/service/sso v1.24.6 h1:3zu537oLmsPfDMyjnUS2g+F2vITgy5pB74tHI+JBNoM= -github.com/aws/aws-sdk-go-v2/service/sso v1.24.6/go.mod h1:WJSZH2ZvepM6t6jwu4w/Z45Eoi75lPN7DcydSRtJg6Y= -github.com/aws/aws-sdk-go-v2/service/ssooidc v1.28.5 h1:K0OQAsDywb0ltlFrZm0JHPY3yZp/S9OaoLU33S7vPS8= -github.com/aws/aws-sdk-go-v2/service/ssooidc v1.28.5/go.mod h1:ORITg+fyuMoeiQFiVGoqB3OydVTLkClw/ljbblMq6Cc= -github.com/aws/aws-sdk-go-v2/service/sts v1.33.1 h1:6SZUVRQNvExYlMLbHdlKB48x0fLbc2iVROyaNEwBHbU= -github.com/aws/aws-sdk-go-v2/service/sts v1.33.1/go.mod h1:GqWyYCwLXnlUB1lOAXQyNSPqPLQJvmo8J0DWBzp9mtg= +github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.5.2 h1:e6um6+DWYQP1XCa+E9YVtG/9v1qk5lyAOelMOVwSyO8= +github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.5.2/go.mod h1:dIW8puxSbYLSPv/ju0d9A3CpwXdtqvJtYKDMVmPLOWE= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.9 h1:TQmKDyETFGiXVhZfQ/I0cCFziqqX58pi4tKJGYGFSz0= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.9/go.mod h1:HVLPK2iHQBUx7HfZeOQSEu3v2ubZaAY2YPbAm5/WUyY= +github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.9 h1:2aInXbh02XsbO0KobPGMNXyv2QP73VDKsWPNJARj/+4= +github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.9/go.mod h1:dgXS1i+HgWnYkPXqNoPIPKeUsUUYHaUbThC90aDnNiE= +github.com/aws/aws-sdk-go-v2/service/resourcegroupstaggingapi v1.25.13 h1:wdMzCMpoSKRYp4vtciAxPzjJy7wSEQsl0pkvlAJQ+Xo= +github.com/aws/aws-sdk-go-v2/service/resourcegroupstaggingapi v1.25.13/go.mod h1:jhfb2oFQrEqsl6AqYkFlhz1kUys4AWXaFzfA1BCzYWY= +github.com/aws/aws-sdk-go-v2/service/s3 v1.73.2 h1:F3h8VYq9ZLBXYurmwrT8W0SPhgCcU0q+0WZJfT1dFt0= +github.com/aws/aws-sdk-go-v2/service/s3 v1.73.2/go.mod h1:jGJ/v7FIi7Ys9t54tmEFnrxuaWeJLpwNgKp2DXAVhOU= +github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.34.13 h1:+dFX6kb0ekos09TP4icFIyqq/u3POCQDSrShc9ZkCCI= +github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.34.13/go.mod h1:l+Fboycn+g9RMQcYbTfpqF/d3qZn90q5PYmO7Biu+WM= +github.com/aws/aws-sdk-go-v2/service/sso v1.24.11 h1:kuIyu4fTT38Kj7YCC7ouNbVZSSpqkZ+LzIfhCr6Dg+I= +github.com/aws/aws-sdk-go-v2/service/sso v1.24.11/go.mod h1:Ro744S4fKiCCuZECXgOi760TiYylUM8ZBf6OGiZzJtY= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.28.10 h1:l+dgv/64iVlQ3WsBbnn+JSbkj01jIi+SM0wYsj3y/hY= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.28.10/go.mod h1:Fzsj6lZEb8AkTE5S68OhcbBqeWPsR8RnGuKPr8Todl8= +github.com/aws/aws-sdk-go-v2/service/sts v1.33.9 h1:BRVDbewN6VZcwr+FBOszDKvYeXY1kJ+GGMCcpghlw0U= +github.com/aws/aws-sdk-go-v2/service/sts v1.33.9/go.mod h1:f6vjfZER1M17Fokn0IzssOTMT2N8ZSq+7jnNF0tArvw= github.com/aws/smithy-go v1.22.1 h1:/HPHZQ0g7f4eUeK6HKglFz8uwVfZKgoI25rb/J+dnro= github.com/aws/smithy-go v1.22.1/go.mod h1:irrKGvNn1InZwb2d7fkIRNucdfwR8R+Ts3wxYa/cJHg= github.com/bazelbuild/buildtools v0.0.0-20240918101019-be1c24cc9a44 h1:FGzENZi+SX9I7h9xvMtRA3rel8hCEfyzSixteBgn7MU= @@ -221,19 +221,16 @@ github.com/chai2010/gettext-go v1.0.2 h1:1Lwwip6Q2QGsAdl/ZKPCwTe9fe0CjlUbqj5bFNS github.com/chai2010/gettext-go v1.0.2/go.mod h1:y+wnP2cHYaVj19NZhYKAwEMH2CI1gNHeQQ+5AjwawxA= github.com/chengxilo/virtualterm v1.0.4 h1:Z6IpERbRVlfB8WkOmtbHiDbBANU7cimRIof7mk9/PwM= github.com/chengxilo/virtualterm v1.0.4/go.mod h1:DyxxBZz/x1iqJjFxTFcr6/x+jSpqN0iwWCOK1q10rlY= -github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= -github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= -github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/cloudflare/circl v1.3.9 h1:QFrlgFYf2Qpi8bSpVPK1HBvWpx16v/1TZivyo7pGuBE= -github.com/cloudflare/circl v1.3.9/go.mod h1:PDRU+oXvdD7KCtgKxW95M5Z8BpSCJXQORiZFnBQS5QU= +github.com/cloudflare/circl v1.5.0 h1:hxIWksrX6XN5a1L2TI/h53AGPhNHoUBo+TD1ms9+pys= +github.com/cloudflare/circl v1.5.0/go.mod h1:uddAzsPgqdMAYatqJ0lsjX1oECcQLIlRpzZh3pJrofs= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= github.com/cncf/xds/go v0.0.0-20240905190251-b4127c9b8d78 h1:QVw89YDxXxEe+l8gU8ETbOasdwEV+avkR75ZzsVV9WI= github.com/cncf/xds/go v0.0.0-20240905190251-b4127c9b8d78/go.mod h1:W+zGtBO5Y1IgJhy4+A9GOqVhqLpfZi+vwmdNXUehLA8= github.com/containerd/cgroups v1.1.0 h1:v8rEWFl6EoqHB+swVNjVoCJE8o3jX7e8nqBGPLaDFBM= github.com/containerd/cgroups v1.1.0/go.mod h1:6ppBcbh/NOOUU+dMKrykgaBnK9lCIBxHqJDGwsa1mIw= -github.com/containerd/containerd v1.7.23 h1:H2CClyUkmpKAGlhQp95g2WXHfLYc7whAuvZGBNYOOwQ= -github.com/containerd/containerd v1.7.23/go.mod h1:7QUzfURqZWCZV7RLNEn1XjUCQLEf0bkaK4GjUaZehxw= +github.com/containerd/containerd v1.7.24 h1:zxszGrGjrra1yYJW/6rhm9cJ1ZQ8rkKBR48brqsa7nA= +github.com/containerd/containerd v1.7.24/go.mod h1:7QUzfURqZWCZV7RLNEn1XjUCQLEf0bkaK4GjUaZehxw= github.com/containerd/continuity v0.4.2 h1:v3y/4Yz5jwnvqPKJJ+7Wf93fyWoCB3F5EclWG023MDM= github.com/containerd/continuity v0.4.2/go.mod h1:F6PTNCKepoxEaXLQp3wDAjygEnImnZ/7o4JzpodfroQ= github.com/containerd/errdefs v0.3.0 h1:FSZgGOeK4yuT/+DnF07/Olde/q4KBoMsaamhXxIMDp4= @@ -244,13 +241,12 @@ github.com/containerd/platforms v0.2.1 h1:zvwtM3rz2YHPQsF2CHYM8+KtB5dvhISiXh5ZpS github.com/containerd/platforms v0.2.1/go.mod h1:XHCb+2/hzowdiut9rkudds9bE5yJ7npe7dG/wG+uFPw= github.com/coredns/caddy v1.1.1 h1:2eYKZT7i6yxIfGP3qLJoJ7HAsDJqYB+X68g4NYjSrE0= github.com/coredns/caddy v1.1.1/go.mod h1:A6ntJQlAWuQfFlsd9hvigKbo2WS0VUs2l1e2F+BawD4= -github.com/coredns/corefile-migration v1.0.23 h1:Fp4FETmk8sT/IRgnKX2xstC2dL7+QdcU+BL5AYIN3Jw= -github.com/coredns/corefile-migration v1.0.23/go.mod h1:8HyMhuyzx9RLZp8cRc9Uf3ECpEAafHOFxQWUPqktMQI= +github.com/coredns/corefile-migration v1.0.24 h1:NL/zRKijhJZLYlNnMr891DRv5jXgfd3Noons1M6oTpc= +github.com/coredns/corefile-migration v1.0.24/go.mod h1:56DPqONc3njpVPsdilEnfijCwNGC3/kTJLl7i7SPavY= github.com/coreos/go-semver v0.3.1 h1:yi21YpKnrx1gt5R+la8n5WgS0kCrsPp33dmEyHReZr4= github.com/coreos/go-semver v0.3.1/go.mod h1:irMmmIw/7yzSRPWryHsK7EYSg09caPQL03VsM8rvUec= github.com/coreos/go-systemd/v22 v22.5.0 h1:RrqgGjYQKalulkV8NGVIfkXQf6YYmOyiJKk8iXXhfZs= github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= -github.com/cpuguy83/go-md2man/v2 v2.0.3/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/cpuguy83/go-md2man/v2 v2.0.4 h1:wfIWP927BUkWJb2NmU/kNDYIBTh/ziUX91+lVfRxZq4= github.com/cpuguy83/go-md2man/v2 v2.0.4/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= @@ -258,8 +254,8 @@ github.com/creack/pty v1.1.21 h1:1/QdRyBaHHJP61QkWMXlOIBfsgdDeeKfK8SYVUWJKf0= github.com/creack/pty v1.1.21/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4= github.com/cyberphone/json-canonicalization v0.0.0-20220623050100-57a0ce2678a7 h1:vU+EP9ZuFUCYE0NYLwTSob+3LNEJATzNfP/DC7SWGWI= github.com/cyberphone/json-canonicalization v0.0.0-20220623050100-57a0ce2678a7/go.mod h1:uzvlm1mxhHkdfqitSA92i7Se+S9ksOn3a3qmv/kyOCw= -github.com/cyphar/filepath-securejoin v0.3.4 h1:VBWugsJh2ZxJmLFSM06/0qzQyiQX2Qs0ViKrUAcqdZ8= -github.com/cyphar/filepath-securejoin v0.3.4/go.mod h1:8s/MCNJREmFK0H02MF6Ihv1nakJe4L/w3WZLHNkvlYM= +github.com/cyphar/filepath-securejoin v0.3.6 h1:4d9N5ykBnSp5Xn2JkhocYDkOpURL/18CYMpo6xB9uWM= +github.com/cyphar/filepath-securejoin v0.3.6/go.mod h1:Sdj7gXlvMcPZsbhwhQ33GguGLDGQL7h7bg04C/+u9jI= github.com/daniel-weisse/go-cryptsetup v0.0.0-20230705150314-d8c07bd1723c h1:ToajP6trZoiqlZ3Z4uoG1P02/wtqSw1AcowOXOYjATk= github.com/daniel-weisse/go-cryptsetup v0.0.0-20230705150314-d8c07bd1723c/go.mod h1:gZoZ0+POlM1ge/VUxWpMmZVNPzzMJ7l436CgkQ5+qzU= github.com/danieljoos/wincred v1.2.0 h1:ozqKHaLK0W/ii4KVbbvluM91W2H3Sh0BncbUNPS7jLE= @@ -278,8 +274,8 @@ github.com/docker/cli v27.1.1+incompatible h1:goaZxOqs4QKxznZjjBWKONQci/MywhtRv2 github.com/docker/cli v27.1.1+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= github.com/docker/distribution v2.8.3+incompatible h1:AtKxIZ36LoNK51+Z6RpzLpddBirtxJnzDrHLEKxTAYk= github.com/docker/distribution v2.8.3+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= -github.com/docker/docker v27.3.1+incompatible h1:KttF0XoteNTicmUtBO0L2tP+J7FGRFTjaEF4k6WdhfI= -github.com/docker/docker v27.3.1+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/docker v27.5.0+incompatible h1:um++2NcQtGRTz5eEgO6aJimo6/JxrTXC941hd05JO6U= +github.com/docker/docker v27.5.0+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= github.com/docker/docker-credential-helpers v0.7.0 h1:xtCHsjxogADNZcdv1pKUHXryefjlVRqWqIhk/uXJp0A= github.com/docker/docker-credential-helpers v0.7.0/go.mod h1:rETQfLdHNT3foU5kuNkFR1R1V12OJRRO5lzt2D1b5X0= github.com/docker/go-connections v0.5.0 h1:USnMq7hx7gwdVZq1L49hLXaFtUdTADjXGp+uj1Br63c= @@ -303,8 +299,8 @@ github.com/emirpasic/gods v1.18.1/go.mod h1:8tpGGwCnJ5H4r6BWwaV6OrWmMoPhUl5jm/FM github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= -github.com/envoyproxy/go-control-plane v0.13.0 h1:HzkeUz1Knt+3bK+8LG1bxOO/jzWZmdxpwC51i202les= -github.com/envoyproxy/go-control-plane v0.13.0/go.mod h1:GRaKG3dwvFoTg4nj7aXdZnvMg4d7nvT/wl9WgVXn3Q8= +github.com/envoyproxy/go-control-plane v0.13.1 h1:vPfJZCkob6yTMEgS+0TwfTUfbHjfy/6vOJ8hUWX/uXE= +github.com/envoyproxy/go-control-plane v0.13.1/go.mod h1:X45hY0mufo6Fd0KW3rqsGvQMw58jvjymeCzBU3mWyHw= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/envoyproxy/protoc-gen-validate v1.1.0 h1:tntQDh69XqOCOZsDz0lVJQez/2L6Uu2PdjCQwWCJ3bM= github.com/envoyproxy/protoc-gen-validate v1.1.0/go.mod h1:sXRDRVmzEbkM7CVcM06s9shE/m23dg3wzjl0UWqJ2q4= @@ -312,17 +308,17 @@ github.com/evanphx/json-patch v5.9.0+incompatible h1:fBXyNpNMuTTDdquAq/uisOr2lSh github.com/evanphx/json-patch v5.9.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= github.com/evanphx/json-patch/v5 v5.9.0 h1:kcBlZQbplgElYIlo/n1hJbls2z/1awpXxpRi0/FOJfg= github.com/evanphx/json-patch/v5 v5.9.0/go.mod h1:VNkHZ/282BpEyt/tObQO8s5CMPmYYq14uClGH4abBuQ= -github.com/exponent-io/jsonpath v0.0.0-20151013193312-d6023ce2651d h1:105gxyaGwCFad8crR9dcMQWvV9Hvulu6hwUh4tWPJnM= -github.com/exponent-io/jsonpath v0.0.0-20151013193312-d6023ce2651d/go.mod h1:ZZMPRZwes7CROmyNKgQzC3XPs6L/G2EJLHddWejkmf4= +github.com/exponent-io/jsonpath v0.0.0-20210407135951-1de76d718b3f h1:Wl78ApPPB2Wvf/TIe2xdyJxTlb6obmF18d8QdkxNDu4= +github.com/exponent-io/jsonpath v0.0.0-20210407135951-1de76d718b3f/go.mod h1:OSYXu++VVOHnXeitef/D8n/6y4QV8uLHSFXX4NeXMGc= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= -github.com/fatih/color v1.17.0 h1:GlRw1BRJxkpqUCBKzKOw098ed57fEsKeNjpTe3cSjK4= -github.com/fatih/color v1.17.0/go.mod h1:YZ7TlrGPkiz6ku9fK3TLD/pl3CpsiFyu8N92HLgmosI= +github.com/fatih/color v1.18.0 h1:S8gINlzdQ840/4pfAwic/ZE0djQEH3wM94VfqLTZcOM= +github.com/fatih/color v1.18.0/go.mod h1:4FelSpRwEGDpQ12mAdzqdOukCy4u8WUtOY6lkT/6HfU= github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= -github.com/foxboron/go-uefi v0.0.0-20241017190036-fab4fdf2f2f3 h1:K8ADp66ulnZ0NhjzwVwE4E3g6Id5KMWu86l0vURusA8= -github.com/foxboron/go-uefi v0.0.0-20241017190036-fab4fdf2f2f3/go.mod h1:ffg/fkDeOYicEQLoO2yFFGt00KUTYVXI+rfnc8il6vQ= +github.com/foxboron/go-uefi v0.0.0-20241219185318-19dc140271bf h1:eKPYdh9Dq7P/Tc6GRt4HqqsVK8b2vt0IGP+xmZ8dMjo= +github.com/foxboron/go-uefi v0.0.0-20241219185318-19dc140271bf/go.mod h1:q85c4IRlhhwdRJgGIUWrisDjU8dgcMj8dnXZCXo3hus= github.com/foxcpp/go-mockdns v1.1.0 h1:jI0rD8M0wuYAxL7r/ynTrCQQq0BVqfB99Vgk7DlmewI= github.com/foxcpp/go-mockdns v1.1.0/go.mod h1:IhLeSFGed3mJIAXPH2aiRQB+kqz7oqu8ld2qVbOu7Wk= github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8= @@ -331,18 +327,18 @@ github.com/fsnotify/fsnotify v1.8.0 h1:dAwr6QBTBZIkG8roQaJjGof0pp0EeF+tNV7YBP3F/ github.com/fsnotify/fsnotify v1.8.0/go.mod h1:8jBTzvmWwFyi3Pb8djgCCO5IBqzKJ/Jwo8TRcHyHii0= github.com/fxamacker/cbor/v2 v2.7.0 h1:iM5WgngdRBanHcxugY4JySA0nk1wZorNOpTgCMedv5E= github.com/fxamacker/cbor/v2 v2.7.0/go.mod h1:pxXPTn3joSm21Gbwsv0w9OSA2y1HFR9qXEeXQVeNoDQ= -github.com/gabriel-vasile/mimetype v1.4.3 h1:in2uUcidCuFcDKtdcBxlR0rJ1+fsokWf+uqxgUFjbI0= -github.com/gabriel-vasile/mimetype v1.4.3/go.mod h1:d8uq/6HKRL6CGdk+aubisF/M5GcPfT7nKyLpA0lbSSk= +github.com/gabriel-vasile/mimetype v1.4.8 h1:FfZ3gj38NjllZIeJAmMhr+qKL8Wu+nOoI3GqacKw1NM= +github.com/gabriel-vasile/mimetype v1.4.8/go.mod h1:ByKUIKGjh1ODkGM1asKUbQZOLGrPjydw3hYPU2YU9t8= github.com/go-chi/chi v4.1.2+incompatible h1:fGFk2Gmi/YKXk0OmGfBh0WgmN3XB8lVnEyNz34tQRec= github.com/go-chi/chi v4.1.2+incompatible/go.mod h1:eB3wogJHnLi3x/kFX2A+IbTBlXxmMeXJVKy9tTv1XzQ= github.com/go-errors/errors v1.4.2 h1:J6MZopCL4uSllY1OfXM374weqZFFItUbrImctkmUxIA= github.com/go-errors/errors v1.4.2/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og= github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 h1:+zs/tPmkDkHx3U66DAb0lQFJrpS6731Oaa12ikc+DiI= github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376/go.mod h1:an3vInlBmSxCcxctByoQdvwPiA7DTK7jaaFDBTtu0ic= -github.com/go-git/go-billy/v5 v5.5.0 h1:yEY4yhzCDuMGSv83oGxiBotRzhwhNr8VZyphhiu+mTU= -github.com/go-git/go-billy/v5 v5.5.0/go.mod h1:hmexnoNsr2SJU1Ju67OaNz5ASJY3+sHgFRpCtpDCKow= -github.com/go-git/go-git/v5 v5.12.0 h1:7Md+ndsjrzZxbddRDZjF14qK+NN56sy6wkqaVrjZtys= -github.com/go-git/go-git/v5 v5.12.0/go.mod h1:FTM9VKtnI2m65hNI/TenDDDnUf2Q9FHnXYjuz9i5OEY= +github.com/go-git/go-billy/v5 v5.6.0 h1:w2hPNtoehvJIxR00Vb4xX94qHQi/ApZfX+nBE2Cjio8= +github.com/go-git/go-billy/v5 v5.6.0/go.mod h1:sFDq7xD3fn3E0GOwUSZqHo9lrkmx8xJhA0ZrfvjBRGM= +github.com/go-git/go-git/v5 v5.13.0 h1:vLn5wlGIh/X78El6r3Jr+30W16Blk0CTcxTYcYPWi5E= +github.com/go-git/go-git/v5 v5.13.0/go.mod h1:Wjo7/JyVKtQgUNdXYXIepzWfJQkUEIGvkvVkiXRR/zw= github.com/go-gorp/gorp/v3 v3.1.0 h1:ItKF/Vbuj31dmV4jxA1qblpSwkl9g1typ24xoe70IGs= github.com/go-gorp/gorp/v3 v3.1.0/go.mod h1:dLEjIyyRNiXvNZ8PSmzpt1GsWAUK8kjVhEpjH8TixEw= github.com/go-jose/go-jose/v3 v3.0.3 h1:fFKWeig/irsp7XD2zBxvnmA/XaRWp5V3CBsZXJF7G7k= @@ -385,8 +381,8 @@ github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/o github.com/go-playground/locales v0.14.1/go.mod h1:hxrqLVvrK65+Rwrd5Fc6F2O76J/NuW9t0sjnWqG1slY= github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY= github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY= -github.com/go-playground/validator/v10 v10.23.0 h1:/PwmTwZhS0dPkav3cdK9kV1FsAmrL8sThn8IHr/sO+o= -github.com/go-playground/validator/v10 v10.23.0/go.mod h1:dbuPbCMFw/DrkbEynArYaCwl3amGuJotoKCe95atGMM= +github.com/go-playground/validator/v10 v10.24.0 h1:KHQckvo8G6hlWnrPX4NJJ+aBfWNAE/HH+qdL2cBpCmg= +github.com/go-playground/validator/v10 v10.24.0/go.mod h1:GGzBIJMuE98Ic/kJsBXbz1x/7cByt++cQ+YOuDM5wus= github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= github.com/go-sql-driver/mysql v1.8.1 h1:LedoTUt/eveggdHS9qUFC1EFSa8bU2+1pZjSRpvNJ1Y= github.com/go-sql-driver/mysql v1.8.1/go.mod h1:wEBSXgmK//2ZFJyE+qWnIsVGmvmEKlqwuVSjsCm7DZg= @@ -432,8 +428,8 @@ github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= github.com/gomodule/redigo v1.8.2 h1:H5XSIre1MB5NbPYFp+i1NBbb5qN1W8Y8YAQoAYbkm8k= github.com/gomodule/redigo v1.8.2/go.mod h1:P9dn9mFrCBvWhGE1wpxx6fgq7BAeLBk+UUUzlpkBYO0= -github.com/google/btree v1.1.2 h1:xf4v41cLI2Z6FxbKm+8Bu+m8ifhj15JuZ9sa0jZCMUU= -github.com/google/btree v1.1.2/go.mod h1:qOPhT0dTNdNzV6Z/lhRX0YXUafgPLFUh+gZMl761Gm4= +github.com/google/btree v1.1.3 h1:CVpQJjYgC4VbzxeGVHfvZrv1ctoYCAI8vbl07Fcxlyg= +github.com/google/btree v1.1.3/go.mod h1:qOPhT0dTNdNzV6Z/lhRX0YXUafgPLFUh+gZMl761Gm4= github.com/google/certificate-transparency-go v1.0.21/go.mod h1:QeJfpSbVSfYc7RgB3gJFj9cbuQMMchQxrWXz8Ruopmg= github.com/google/certificate-transparency-go v1.1.8 h1:LGYKkgZF7satzgTak9R4yzfJXEeYVAjV6/EAEJOf1to= github.com/google/certificate-transparency-go v1.1.8/go.mod h1:bV/o8r0TBKRf1X//iiiSgWrvII4d7/8OiA+3vG26gI8= @@ -446,7 +442,6 @@ github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMyw github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= @@ -460,8 +455,8 @@ github.com/google/go-sev-guest v0.12.2-0.20250116170741-e5df25990fc0 h1:DMFFpe9C github.com/google/go-sev-guest v0.12.2-0.20250116170741-e5df25990fc0/go.mod h1:SK9vW+uyfuzYdVN0m8BShL3OQCtXZe/JPF7ZkpD3760= github.com/google/go-tdx-guest v0.3.1 h1:gl0KvjdsD4RrJzyLefDOvFOUH3NAJri/3qvaL5m83Iw= github.com/google/go-tdx-guest v0.3.1/go.mod h1:/rc3d7rnPykOPuY8U9saMyEps0PZDThLk/RygXm04nE= -github.com/google/go-tpm v0.9.1 h1:0pGc4X//bAlmZzMKf8iz6IsDo1nYTbYJ6FZN/rg4zdM= -github.com/google/go-tpm v0.9.1/go.mod h1:h9jEsEECg7gtLis0upRBQU+GhYVH6jMjrFxI8u6bVUY= +github.com/google/go-tpm v0.9.3 h1:+yx0/anQuGzi+ssRqeD6WpXjW2L/V0dItUayO0i9sRc= +github.com/google/go-tpm v0.9.3/go.mod h1:h9jEsEECg7gtLis0upRBQU+GhYVH6jMjrFxI8u6bVUY= github.com/google/go-tpm-tools v0.4.4 h1:oiQfAIkc6xTy9Fl5NKTeTJkBTlXdHsxAofmQyxBKY98= github.com/google/go-tpm-tools v0.4.4/go.mod h1:T8jXkp2s+eltnCDIsXR84/MTcVU9Ja7bh3Mit0pa4AY= github.com/google/go-tspi v0.3.0 h1:ADtq8RKfP+jrTyIWIZDIYcKOMecRqNJFOew2IT0Inus= @@ -473,10 +468,10 @@ github.com/google/logger v1.1.1 h1:+6Z2geNxc9G+4D4oDO9njjjn2d0wN5d7uOo0vOIW1NQ= github.com/google/logger v1.1.1/go.mod h1:BkeJZ+1FhQ+/d087r4dzojEg1u2ZX+ZqG1jTUrLM+zQ= github.com/google/martian/v3 v3.3.3 h1:DIhPTQrbPkgs2yJYdXU/eNACCG5DVQjySNRNlflZ9Fc= github.com/google/martian/v3 v3.3.3/go.mod h1:iEPrYcgCF7jA9OtScMFQyAlZZ4YXTKEtJ1E6RWzmBA0= -github.com/google/pprof v0.0.0-20241029153458-d1b30febd7db h1:097atOisP2aRj7vFgYQBbFN4U4JNXUNYpxael3UzMyo= -github.com/google/pprof v0.0.0-20241029153458-d1b30febd7db/go.mod h1:vavhavw2zAxS5dIdcRluK6cSGGPlZynqzFM8NdvU144= -github.com/google/s2a-go v0.1.8 h1:zZDs9gcbt9ZPLV0ndSyQk6Kacx2g/X+SKYovpnz3SMM= -github.com/google/s2a-go v0.1.8/go.mod h1:6iNWHTpQ+nfNRN5E00MSdfDwVesa8hhS32PhPO8deJA= +github.com/google/pprof v0.0.0-20241210010833-40e02aabc2ad h1:a6HEuzUHeKH6hwfN/ZoQgRgVIWFJljSWa/zetS2WTvg= +github.com/google/pprof v0.0.0-20241210010833-40e02aabc2ad/go.mod h1:vavhavw2zAxS5dIdcRluK6cSGGPlZynqzFM8NdvU144= +github.com/google/s2a-go v0.1.9 h1:LGD7gtMgezd8a/Xak7mEWL0PjoTQFvpRudN895yqKW0= +github.com/google/s2a-go v0.1.9/go.mod h1:YA0Ei2ZQL3acow2O62kdp9UlnvMmU7kA6Eutn0dXayM= github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 h1:El6M4kTTCOh6aBiKaUGG7oYTSPP8MxqL4YI3kZKwcP4= github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= @@ -485,12 +480,12 @@ github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/googleapis/enterprise-certificate-proxy v0.3.4 h1:XYIDZApgAnrN1c855gTgghdIA6Stxb52D5RnLI1SLyw= github.com/googleapis/enterprise-certificate-proxy v0.3.4/go.mod h1:YKe7cfqYXjKGpGvmSg28/fFvhNzinZQm8DGnaburhGA= -github.com/googleapis/gax-go/v2 v2.14.0 h1:f+jMrjBPl+DL9nI4IQzLUxMq7XrAqFYB7hBPqMNIe8o= -github.com/googleapis/gax-go/v2 v2.14.0/go.mod h1:lhBCnjdLrWRaPvLWhmc8IS24m9mr07qSYnHncrgo+zk= -github.com/gophercloud/gophercloud/v2 v2.2.0 h1:STqqnSXuhcg1OPBOZ14z6JDm8fKIN13H2bJg6bBuHp8= -github.com/gophercloud/gophercloud/v2 v2.2.0/go.mod h1:f2hMRC7Kakbv5vM7wSGHrIPZh6JZR60GVHryJlF/K44= -github.com/gophercloud/utils/v2 v2.0.0-20241108144456-f4302a5ad8c6 h1:NPpHSXdkl9OWs9W46zmFBADEDIkY+r+W71vuiHo3se4= -github.com/gophercloud/utils/v2 v2.0.0-20241108144456-f4302a5ad8c6/go.mod h1:Uvv82D3uPdyOormmJ9fZbQyf7q7CHo6By55QIT+0l+0= +github.com/googleapis/gax-go/v2 v2.14.1 h1:hb0FFeiPaQskmvakKu5EbCbpntQn48jyHuvrkurSS/Q= +github.com/googleapis/gax-go/v2 v2.14.1/go.mod h1:Hb/NubMaVM88SrNkvl8X/o8XWwDJEPqouaLeN2IUxoA= +github.com/gophercloud/gophercloud/v2 v2.4.0 h1:XhP5tVEH3ni66NSNK1+0iSO6kaGPH/6srtx6Cr+8eCg= +github.com/gophercloud/gophercloud/v2 v2.4.0/go.mod h1:uJWNpTgJPSl2gyzJqcU/pIAhFUWvIkp8eE8M15n9rs4= +github.com/gophercloud/utils/v2 v2.0.0-20250106080359-c8704d65b4fa h1:Hc3Dc0KeW5ejxPKbKd1HNvzLUJXT3YLXq6nz2dogrws= +github.com/gophercloud/utils/v2 v2.0.0-20250106080359-c8704d65b4fa/go.mod h1:z7jvB7v6jhL8w58JMuaPV7pGp07PTvOwIL3Vk2stf3M= github.com/gorilla/handlers v1.5.1 h1:9lRY6j8DEeeBT10CvO9hGW0gmky0BprnvDI5vfhUHH4= github.com/gorilla/handlers v1.5.1/go.mod h1:t8XrUpc4KVXb7HGyJ4/cEnwQiaxrX/hz1Zv/4g96P1Q= github.com/gorilla/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY= @@ -499,13 +494,13 @@ github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWm github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/gosuri/uitable v0.0.4 h1:IG2xLKRvErL3uhY6e1BylFzG+aJiwQviDDTfOKeKTpY= github.com/gosuri/uitable v0.0.4/go.mod h1:tKR86bXuXPZazfOTG1FIzvjIdXzd0mo4Vtn16vt0PJo= -github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7 h1:pdN6V1QBWetyv/0+wjACpqVH+eVULgEjkurDLq3goeM= -github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= -github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.1.0 h1:pRhl55Yx1eC7BZ1N+BBWwnKaMyD8uC+34TLdndZMAKk= -github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.1.0/go.mod h1:XKMd7iuf/RGPSMJ/U4HP0zS2Z9Fh8Ps9a+6X26m/tmI= +github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79 h1:+ngKgrYPPJrOjhax5N+uePQ0Fh1Z7PheYoUI/0nzkPA= +github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= +github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.2.0 h1:kQ0NI7W1B3HwiN5gAYtY+XFItDPbLBwYRxAqbFTyDes= +github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.2.0/go.mod h1:zrT2dxOAjNFPRGjTUe2Xmb4q4YdUwVvQFV6xiCSf+z0= github.com/grpc-ecosystem/grpc-gateway v1.16.0 h1:gmcG1KaJ57LophUzW0Hy8NmPhnMZb4M0+kPpLofRdBo= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.22.0 h1:asbCHRVmodnJTuQ3qamDwqVOIjwqUPTYmYuemVOx+Ys= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.22.0/go.mod h1:ggCgvZ2r7uOoQjOyu2Y1NhHmEPPzzuhWgcza5M1Ji1I= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.24.0 h1:TmHmbvxPmaegwhDubVz0lICL0J5Ka2vwTzhoePEXsGE= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.24.0/go.mod h1:qztMSjm835F2bXf+5HKAPIS5qsmQDqZna/PgVt4rWtI= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I= github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= @@ -521,8 +516,8 @@ github.com/hashicorp/go-hclog v1.6.3 h1:Qr2kF+eVWjTiYmU7Y31tYlP1h0q/X3Nl3tPGdaB1 github.com/hashicorp/go-hclog v1.6.3/go.mod h1:W4Qnvbt70Wk/zYJryRzDRU/4r0kIg0PVHBcfoyhpF5M= github.com/hashicorp/go-kms-wrapping/v2 v2.0.16 h1:WZeXfD26QMWYC35at25KgE021SF9L3u9UMHK8fJAdV0= github.com/hashicorp/go-kms-wrapping/v2 v2.0.16/go.mod h1:ZiKZctjRTLEppuRwrttWkp71VYMbTTCkazK4xT7U/NQ= -github.com/hashicorp/go-kms-wrapping/wrappers/awskms/v2 v2.0.9 h1:qdxeZvDMRGZ3YSE4Oz0Pp7WUSUn5S6cWZguEOkEVL50= -github.com/hashicorp/go-kms-wrapping/wrappers/awskms/v2 v2.0.9/go.mod h1:DcXbvVpgNWbxGmxgmu3QN64bEydMu14Cpe34RRR30HY= +github.com/hashicorp/go-kms-wrapping/wrappers/awskms/v2 v2.0.10 h1:YOSmJpqZt2X3KL0JUlKdih3WjpDlS9jQPyr6Etdh1GE= +github.com/hashicorp/go-kms-wrapping/wrappers/awskms/v2 v2.0.10/go.mod h1:eX4b0InOUfJ3NjfNWlJruBDT3rHXxOVw+7qNFmtjNbo= github.com/hashicorp/go-kms-wrapping/wrappers/azurekeyvault/v2 v2.0.11 h1:/7SKkYIhA8cr3l8m1EKT6Q90bPoSVqqVBuQ6HgoMIkw= github.com/hashicorp/go-kms-wrapping/wrappers/azurekeyvault/v2 v2.0.11/go.mod h1:LepS5s6ESGE0qQMpYaui5lX+mQYeiYiy06VzwWRioO8= github.com/hashicorp/go-kms-wrapping/wrappers/gcpckms/v2 v2.0.12 h1:PCqWzT/Hii0KL07JsBZ3lJbv/wx02IAHYlhWQq8rxRY= @@ -542,20 +537,20 @@ github.com/hashicorp/go-version v1.7.0 h1:5tqGy27NaOTB8yJKUZELlFAS/LTKJkrmONwQKe github.com/hashicorp/go-version v1.7.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/hashicorp/golang-lru v0.5.4 h1:YDjusn29QI/Das2iO9M0BHnIbxPeyuCHsjMW+lJfyTc= github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= -github.com/hashicorp/hc-install v0.9.0 h1:2dIk8LcvANwtv3QZLckxcjyF5w8KVtiMxu6G6eLhghE= -github.com/hashicorp/hc-install v0.9.0/go.mod h1:+6vOP+mf3tuGgMApVYtmsnDoKWMDcFXeTxCACYZ8SFg= +github.com/hashicorp/hc-install v0.9.1 h1:gkqTfE3vVbafGQo6VZXcy2v5yoz2bE0+nhZXruCuODQ= +github.com/hashicorp/hc-install v0.9.1/go.mod h1:pWWvN/IrfeBK4XPeXXYkL6EjMufHkCK5DvwxeLKuBf0= github.com/hashicorp/hcl/v2 v2.23.0 h1:Fphj1/gCylPxHutVSEOf2fBOh1VE4AuLV7+kbJf3qos= github.com/hashicorp/hcl/v2 v2.23.0/go.mod h1:62ZYHrXgPoX8xBnzl8QzbWq4dyDsDtfCRgIq1rbJEvA= github.com/hashicorp/logutils v1.0.0 h1:dLEQVugN8vlakKOUE3ihGLTZJRB4j+M2cdTm/ORI65Y= github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64= github.com/hashicorp/terraform-exec v0.21.0 h1:uNkLAe95ey5Uux6KJdua6+cv8asgILFVWkd/RG0D2XQ= github.com/hashicorp/terraform-exec v0.21.0/go.mod h1:1PPeMYou+KDUSSeRE9szMZ/oHf4fYUmB923Wzbq1ICg= -github.com/hashicorp/terraform-json v0.23.0 h1:sniCkExU4iKtTADReHzACkk8fnpQXrdD2xoR+lppBkI= -github.com/hashicorp/terraform-json v0.23.0/go.mod h1:MHdXbBAbSg0GvzuWazEGKAn/cyNfIB7mN6y7KJN6y2c= +github.com/hashicorp/terraform-json v0.24.0 h1:rUiyF+x1kYawXeRth6fKFm/MdfBS6+lW4NbeATsYz8Q= +github.com/hashicorp/terraform-json v0.24.0/go.mod h1:Nfj5ubo9xbu9uiAoZVBsNOjvNKB66Oyrvtit74kC7ow= github.com/hashicorp/terraform-plugin-framework v1.13.0 h1:8OTG4+oZUfKgnfTdPTJwZ532Bh2BobF4H+yBiYJ/scw= github.com/hashicorp/terraform-plugin-framework v1.13.0/go.mod h1:j64rwMGpgM3NYXTKuxrCnyubQb/4VKldEKlcG8cvmjU= -github.com/hashicorp/terraform-plugin-framework-validators v0.15.0 h1:RXMmu7JgpFjnI1a5QjMCBb11usrW2OtAG+iOTIj5c9Y= -github.com/hashicorp/terraform-plugin-framework-validators v0.15.0/go.mod h1:Bh89/hNmqsEWug4/XWKYBwtnw3tbz5BAy1L1OgvbIaY= +github.com/hashicorp/terraform-plugin-framework-validators v0.16.0 h1:O9QqGoYDzQT7lwTXUsZEtgabeWW96zUBh47Smn2lkFA= +github.com/hashicorp/terraform-plugin-framework-validators v0.16.0/go.mod h1:Bh89/hNmqsEWug4/XWKYBwtnw3tbz5BAy1L1OgvbIaY= github.com/hashicorp/terraform-plugin-go v0.25.0 h1:oi13cx7xXA6QciMcpcFi/rwA974rdTxjqEhXJjbAyks= github.com/hashicorp/terraform-plugin-go v0.25.0/go.mod h1:+SYagMYadJP86Kvn+TGeV+ofr/R3g4/If0O5sO96MVw= github.com/hashicorp/terraform-plugin-log v0.9.0 h1:i7hOA+vdAItN1/7UrfBqBwvYPQ9TFvymaRGZED3FCV0= @@ -576,8 +571,6 @@ github.com/howeyc/gopass v0.0.0-20210920133722-c8aef6fb66ef h1:A9HsByNhogrvm9cWb github.com/howeyc/gopass v0.0.0-20210920133722-c8aef6fb66ef/go.mod h1:lADxMC39cJJqL93Duh1xhAs4I2Zs8mKS89XWXFGp9cs= github.com/huandu/xstrings v1.5.0 h1:2ag3IFq9ZDANvthTwTiqSSZLjDc+BedvHPAp5tJy2TI= github.com/huandu/xstrings v1.5.0/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE= -github.com/imdario/mergo v0.3.16 h1:wwQJbIsHYGMUyLSPrEq1CT16AhnhNJQ51+4fdHUnCl4= -github.com/imdario/mergo v0.3.16/go.mod h1:WBLT9ZmE3lPoWsEzCh9LPo3TiwVN+ZKEjmz+hD27ysY= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A= @@ -653,8 +646,9 @@ github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWE github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/mattn/go-runewidth v0.0.16 h1:E5ScNMtiwvlvB5paMFdw9p4kSQzbXFikJ5SQO6TULQc= github.com/mattn/go-runewidth v0.0.16/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= -github.com/mattn/go-sqlite3 v1.14.22 h1:2gZY6PC6kBnID23Tichd1K+Z0oS6nE/XwU+Vz/5o4kU= github.com/mattn/go-sqlite3 v1.14.22/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y= +github.com/mattn/go-sqlite3 v1.14.24 h1:tpSp2G2KyMnnQu99ngJ47EIkWVmliIizyZBfPrBWDRM= +github.com/mattn/go-sqlite3 v1.14.24/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/miekg/dns v1.1.58 h1:ca2Hdkz+cDg/7eNF6V56jjzuZ4aCAE+DbVkILdQWG/4= github.com/miekg/dns v1.1.58/go.mod h1:Ypv+3b/KadlvW9vJfXOTf300O4UqaHFzFCuHz+rPkBY= @@ -676,10 +670,10 @@ github.com/moby/docker-image-spec v1.3.1 h1:jMKff3w6PgbfSa69GfNg+zN/XLhfXJGnEx3N github.com/moby/docker-image-spec v1.3.1/go.mod h1:eKmb5VW8vQEh/BAr2yvVNvuiJuY6UIocYsFu/DxxRpo= github.com/moby/locker v1.0.1 h1:fOXqR41zeveg4fFODix+1Ch4mj/gT0NE1XJbp/epuBg= github.com/moby/locker v1.0.1/go.mod h1:S7SDdo5zpBK84bzzVlKr2V0hz+7x9hWbYC/kq7oQppc= -github.com/moby/spdystream v0.4.0 h1:Vy79D6mHeJJjiPdFEL2yku1kl0chZpJfZcPpb16BRl8= -github.com/moby/spdystream v0.4.0/go.mod h1:xBAYlnt/ay+11ShkdFKNAG7LsyK/tmNBVvVOwrfMgdI= -github.com/moby/sys/mountinfo v0.7.1 h1:/tTvQaSJRr2FshkhXiIpux6fQ2Zvc4j7tAhMTStAG2g= -github.com/moby/sys/mountinfo v0.7.1/go.mod h1:IJb6JQeOklcdMU9F5xQ8ZALD+CUr5VlGpwtX+VE0rpI= +github.com/moby/spdystream v0.5.0 h1:7r0J1Si3QO/kjRitvSLVVFUjxMEb/YLj6S9FF62JBCU= +github.com/moby/spdystream v0.5.0/go.mod h1:xBAYlnt/ay+11ShkdFKNAG7LsyK/tmNBVvVOwrfMgdI= +github.com/moby/sys/mountinfo v0.7.2 h1:1shs6aH5s4o5H2zQLn796ADW1wMrIwHsyJ2v9KouLrg= +github.com/moby/sys/mountinfo v0.7.2/go.mod h1:1YOa8w8Ih7uW0wALDUgT1dTTSBrZ+HiBLGws92L2RU4= github.com/moby/sys/userns v0.1.0 h1:tVLXkFOxVu9A64/yh59slHVv9ahO9UIev4JZusOLG/g= github.com/moby/sys/userns v0.1.0/go.mod h1:IHUYgu/kao6N8YZlp9Cf444ySSvCmDlmzUcYfDHOl28= github.com/moby/term v0.5.0 h1:xt8Q1nalod/v7BqbG21f8mQPqH+xAaC9C3N3wfWbVP0= @@ -706,18 +700,14 @@ github.com/oklog/ulid v1.3.1 h1:EGfNDEx6MqHz8B3uNV6QAib1UR2Lm97sHi3ocA6ESJ4= github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= github.com/olareg/olareg v0.1.1 h1:Ui7q93zjcoF+U9U71sgqgZWByDoZOpqHitUXEu2xV+g= github.com/olareg/olareg v0.1.1/go.mod h1:w8NP4SWrHHtxsFaUiv1lnCnYPm4sN1seCd2h7FK/dc0= -github.com/onsi/ginkgo/v2 v2.22.0 h1:Yed107/8DjTr0lKCNt7Dn8yQ6ybuDRQoMGrNFKzMfHg= -github.com/onsi/ginkgo/v2 v2.22.0/go.mod h1:7Du3c42kxCUegi0IImZ1wUQzMBVecgIHjR1C+NkhLQo= -github.com/onsi/gomega v1.36.0 h1:Pb12RlruUtj4XUuPUqeEWc6j5DkVVVA49Uf6YLfC95Y= -github.com/onsi/gomega v1.36.0/go.mod h1:PvZbdDc8J6XJEpDK4HCuRBm8a6Fzp9/DmhC9C7yFlog= +github.com/onsi/ginkgo/v2 v2.22.2 h1:/3X8Panh8/WwhU/3Ssa6rCKqPLuAkVY2I0RoyDLySlU= +github.com/onsi/ginkgo/v2 v2.22.2/go.mod h1:oeMosUL+8LtarXBHu/c0bx2D/K9zyQ6uX3cTyztHwsk= +github.com/onsi/gomega v1.36.2 h1:koNYke6TVk6ZmnyHrCXba/T/MoLBXFjeC1PtvYgw0A8= +github.com/onsi/gomega v1.36.2/go.mod h1:DdwyADRjrc825LhMEkD76cHR5+pUnjhUN8GlHlRPHzY= github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= github.com/opencontainers/image-spec v1.1.0 h1:8SG7/vwALn54lVB/0yZ/MMwhFrPYtpEHQb2IpWsCzug= github.com/opencontainers/image-spec v1.1.0/go.mod h1:W4s4sFTMaBeK1BQLXbG4AdM2szdn85PY75RI83NrTrM= -github.com/opencontainers/runc v1.1.13 h1:98S2srgG9vw0zWcDpFMn5TRrh8kLxa/5OFUstuUhmRs= -github.com/opencontainers/runc v1.1.13/go.mod h1:R016aXacfp/gwQBYw2FDGa9m+n6atbLWrYY8hNMT/sA= -github.com/opencontainers/runtime-spec v1.2.0 h1:z97+pHb3uELt/yiAWD691HNHQIF07bE7dzrbT927iTk= -github.com/opencontainers/runtime-spec v1.2.0/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= github.com/opentracing/opentracing-go v1.2.0 h1:uEJPy/1a5RIPAJ0Ov+OIO8OxWu77jEv+1B0VhjKrZUs= github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc= github.com/peterbourgon/diskv v2.0.1+incompatible h1:UBdAOUP5p4RWqPBg048CAvpKN+vxiaj6gdUUzhl4XmI= @@ -731,8 +721,8 @@ github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c/go.mod h1:7rwL4CYBLnjL github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 h1:GFCKgmp0tecUJ0sJuv4pzYCqS9+RGSn52M3FUwPs+uo= -github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10/go.mod h1:t/avpk3KcrXxUnYOhZhMXJlSEyie6gQbtLq5NM3loB8= +github.com/planetscale/vtprotobuf v0.6.1-0.20241121165744-79df5c4772f2 h1:1sLMdKq4gNANTj0dUibycTLzpIEKVnLnbaEkxws78nw= +github.com/planetscale/vtprotobuf v0.6.1-0.20241121165744-79df5c4772f2/go.mod h1:t/avpk3KcrXxUnYOhZhMXJlSEyie6gQbtLq5NM3loB8= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= @@ -759,50 +749,49 @@ github.com/prometheus/procfs v0.15.1 h1:YagwOFzUgYfKKHX6Dr+sHT7km/hxC76UB0leargg github.com/prometheus/procfs v0.15.1/go.mod h1:fB45yRUv8NstnjriLhBQLuOUt+WW4BsoGhij/e3PBqk= github.com/redis/go-redis/v9 v9.7.0 h1:HhLSs+B6O021gwzl+locl0zEDnyNkxMtf/Z3NNBMa9E= github.com/redis/go-redis/v9 v9.7.0/go.mod h1:f6zhXITC7JUJIlPEiBOTXxJgPLdZcA93GewI7inzyWw= -github.com/regclient/regclient v0.7.2 h1:vcldDAwBMLtighYVMeb6qNt5+0hKg3AN2IkCc0JIJNM= -github.com/regclient/regclient v0.7.2/go.mod h1:QlA7W9/pvmbblOXM4d49JgfuOTwVXcUMKt3bFuOSVIQ= +github.com/regclient/regclient v0.8.0 h1:xNAMDlADcyMvFAlGXoqDOxlSUBG4mqWBFgjQqVTP8Og= +github.com/regclient/regclient v0.8.0/go.mod h1:h9+Y6dBvqBkdlrj6EIhbTOv0xUuIFl7CdI1bZvEB42g= github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ= github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII= github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o= -github.com/rubenv/sql-migrate v1.7.0 h1:HtQq1xyTN2ISmQDggnh0c9U3JlP8apWh8YO2jzlXpTI= -github.com/rubenv/sql-migrate v1.7.0/go.mod h1:S4wtDEG1CKn+0ShpTtzWhFpHHI5PvCUtiGI+C+Z2THE= +github.com/rubenv/sql-migrate v1.7.1 h1:f/o0WgfO/GqNuVg+6801K/KW3WdDSupzSjDYODmiUq4= +github.com/rubenv/sql-migrate v1.7.1/go.mod h1:Ob2Psprc0/3ggbM6wCzyYVFFuc6FyZrb2AS+ezLDFb4= github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/samber/lo v1.47.0 h1:z7RynLwP5nbyRscyvcD043DWYoOcYRv3mV8lBeqOCLc= github.com/samber/lo v1.47.0/go.mod h1:RmDH9Ct32Qy3gduHQuKJ3gW1fMHAnE/fAzQuf6He5cU= -github.com/samber/slog-multi v1.2.4 h1:k9x3JAWKJFPKffx+oXZ8TasaNuorIW4tG+TXxkt6Ry4= -github.com/samber/slog-multi v1.2.4/go.mod h1:ACuZ5B6heK57TfMVkVknN2UZHoFfjCwRxR0Q2OXKHlo= +github.com/samber/slog-multi v1.3.3 h1:qhFXaYdW73FIWLt8SrXMXfPwY58NpluzKDwRdPvhWWY= +github.com/samber/slog-multi v1.3.3/go.mod h1:ACuZ5B6heK57TfMVkVknN2UZHoFfjCwRxR0Q2OXKHlo= github.com/sassoftware/relic v7.2.1+incompatible h1:Pwyh1F3I0r4clFJXkSI8bOyJINGqpgjJU3DYAZeI05A= github.com/sassoftware/relic v7.2.1+incompatible/go.mod h1:CWfAxv73/iLZ17rbyhIEq3K9hs5w6FpNMdUT//qR+zk= github.com/sassoftware/relic/v7 v7.6.2 h1:rS44Lbv9G9eXsukknS4mSjIAuuX+lMq/FnStgmZlUv4= github.com/sassoftware/relic/v7 v7.6.2/go.mod h1:kjmP0IBVkJZ6gXeAu35/KCEfca//+PKM6vTAsyDPY+k= -github.com/schollz/progressbar/v3 v3.17.1 h1:bI1MTaoQO+v5kzklBjYNRQLoVpe0zbyRZNK6DFkVC5U= -github.com/schollz/progressbar/v3 v3.17.1/go.mod h1:RzqpnsPQNjUyIgdglUjRLgD7sVnxN1wpmBMV+UiEbL4= -github.com/secure-systems-lab/go-securesystemslib v0.8.0 h1:mr5An6X45Kb2nddcFlbmfHkLguCE9laoZCUzEEpIZXA= -github.com/secure-systems-lab/go-securesystemslib v0.8.0/go.mod h1:UH2VZVuJfCYR8WgMlCU1uFsOUU+KeyrTWcSS73NBOzU= +github.com/schollz/progressbar/v3 v3.18.0 h1:uXdoHABRFmNIjUfte/Ex7WtuyVslrw2wVPQmCN62HpA= +github.com/schollz/progressbar/v3 v3.18.0/go.mod h1:IsO3lpbaGuzh8zIMzgY3+J8l4C8GjO0Y9S69eFvNsec= +github.com/secure-systems-lab/go-securesystemslib v0.9.0 h1:rf1HIbL64nUpEIZnjLZ3mcNEL9NBPB0iuVjyxvq3LZc= +github.com/secure-systems-lab/go-securesystemslib v0.9.0/go.mod h1:DVHKMcZ+V4/woA/peqr+L0joiRXbPpQ042GgJckkFgw= github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 h1:n661drycOFuPLCN3Uc8sB6B/s6Z4t2xvBgU1htSHuq8= github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3/go.mod h1:A0bzQcvG0E7Rwjx0REVgAGH58e96+X0MeOfepqsbeW4= github.com/shopspring/decimal v1.4.0 h1:bxl37RwXBklmTi0C79JfXCEBD1cqqHt0bbgBAGFp81k= github.com/shopspring/decimal v1.4.0/go.mod h1:gawqmDU56v4yIKSwfBSFip1HdCCXN8/+DMd9qYNcwME= -github.com/siderolabs/talos/pkg/machinery v1.8.3 h1:raK1oLzSMpwpy/AqkeFyBYkJS+QuOnlRMznVl/rZ25k= -github.com/siderolabs/talos/pkg/machinery v1.8.3/go.mod h1:cNR2TELu2T9AzYOHAoNr/7ZS3ZVDLzM/KnuOr4XW4s4= -github.com/sigstore/rekor v1.3.7 h1:Z5UW5TmqbTZnyOFkMRfi32q/CWcxK6VuzIkx+33mbq8= -github.com/sigstore/rekor v1.3.7/go.mod h1:TihqJscZ6L6398x68EHY82t0AOnGYfrQ0siXe3WgbR4= -github.com/sigstore/sigstore v1.8.10 h1:r4t+TYzJlG9JdFxMy+um9GZhZ2N1hBTyTex0AHEZxFs= -github.com/sigstore/sigstore v1.8.10/go.mod h1:BekjqxS5ZtHNJC4u3Q3Stvfx2eyisbW/lUZzmPU2u4A= +github.com/siderolabs/talos/pkg/machinery v1.9.2 h1:Y1MuXHUHOHikxF7IG76HniOo8tJvC8JoBlDfZ8URjpM= +github.com/siderolabs/talos/pkg/machinery v1.9.2/go.mod h1:AESzrVUMVMbrGiVdCQ5af7qYtL4ykCyee7dAgOTia3s= +github.com/sigstore/rekor v1.3.8 h1:B8kJI8mpSIXova4Jxa6vXdJyysRxFGsEsLKBDl0rRjA= +github.com/sigstore/rekor v1.3.8/go.mod h1:/dHFYKSuxEygfDRnEwyJ+ZD6qoVYNXQdi1mJrKvKWsI= +github.com/sigstore/sigstore v1.8.12 h1:S8xMVZbE2z9ZBuQUEG737pxdLjnbOIcFi5v9UFfkJFc= +github.com/sigstore/sigstore v1.8.12/go.mod h1:+PYQAa8rfw0QdPpBcT+Gl3egKD9c+TUgAlF12H3Nmjo= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ= github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= -github.com/skeema/knownhosts v1.2.2 h1:Iug2P4fLmDw9f41PB6thxUkNUkJzB5i+1/exaj40L3A= -github.com/skeema/knownhosts v1.2.2/go.mod h1:xYbVRSPxqBZFrdmDyMmsOs+uX1UZC3nTN3ThzgDxUwo= -github.com/spf13/afero v1.11.0 h1:WJQKhtpdm3v2IzqG8VMqrr6Rf3UYpEF239Jy9wNepM8= -github.com/spf13/afero v1.11.0/go.mod h1:GH9Y3pIexgf1MTIWtNGyogA5MwRIDXGUr+hbWNoBjkY= +github.com/skeema/knownhosts v1.3.0 h1:AM+y0rI04VksttfwjkSTNQorvGqmwATnvnAHpSgc0LY= +github.com/skeema/knownhosts v1.3.0/go.mod h1:sPINvnADmT/qYH1kfv+ePMmOBTH6Tbl7b5LvTDjFK7M= +github.com/spf13/afero v1.12.0 h1:UcOPyRBYczmFn6yvphxkn9ZEOY65cpwGKb5mL36mrqs= +github.com/spf13/afero v1.12.0/go.mod h1:ZTlWwG4/ahT8W7T0WQ5uYmjI9duaLQGy3Q2OAl4sk/4= github.com/spf13/cast v1.7.0 h1:ntdiHjuueXFgm5nzDRdOS4yfT43P5Fnud6DH50rz/7w= github.com/spf13/cast v1.7.0/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo= -github.com/spf13/cobra v1.8.0/go.mod h1:WXLWApfZ71AjXPya3WOlMsY9yMs7YeiHhFVlvLyhcho= github.com/spf13/cobra v1.8.1 h1:e5/vxKd/rZsfSJMUX1agtjeTDf+qv1/JdBF8gg5k9ZM= github.com/spf13/cobra v1.8.1/go.mod h1:wHxEcudfqmLYa8iTfL+OuZPbBZkmvliBWKIezN3kD9Y= github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= @@ -816,6 +805,7 @@ github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/ github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= +github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals= @@ -826,8 +816,8 @@ github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOf github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/theupdateframework/go-tuf v0.7.0 h1:CqbQFrWo1ae3/I0UCblSbczevCCbS31Qvs5LdxRWqRI= github.com/theupdateframework/go-tuf v0.7.0/go.mod h1:uEB7WSY+7ZIugK6R1hiBMBjQftaFzn7ZCDJcp1tCUug= -github.com/tink-crypto/tink-go/v2 v2.2.0 h1:L2Da0F2Udh2agtKztdr69mV/KpnY3/lGTkMgLTVIXlA= -github.com/tink-crypto/tink-go/v2 v2.2.0/go.mod h1:JJ6PomeNPF3cJpfWC0lgyTES6zpJILkAX0cJNwlS3xU= +github.com/tink-crypto/tink-go/v2 v2.3.0 h1:4/TA0lw0lA/iVKBL9f8R5eP7397bfc4antAMXF5JRhs= +github.com/tink-crypto/tink-go/v2 v2.3.0/go.mod h1:kfPOtXIadHlekBTeBtJrHWqoGL+Fm3JQg0wtltPuxLU= github.com/titanous/rocacheck v0.0.0-20171023193734-afe73141d399 h1:e/5i7d4oYZ+C1wj2THlRK+oAhjeS/TRQwMfkIuet3w0= github.com/titanous/rocacheck v0.0.0-20171023193734-afe73141d399/go.mod h1:LdwHTNJT99C5fTAzDz0ud328OgXz+gierycbcIx2fRs= github.com/transparency-dev/merkle v0.0.2 h1:Q9nBoQcZcgPamMkGn7ghV8XiTZ/kRxn1yCG81+twTK4= @@ -869,8 +859,8 @@ github.com/yvasiyarov/newrelic_platform_go v0.0.0-20140908184405-b21fdbd4370f h1 github.com/yvasiyarov/newrelic_platform_go v0.0.0-20140908184405-b21fdbd4370f/go.mod h1:GlGEuHIJweS1mbCqG+7vt2nvWLzLLnRHbXz5JKd/Qbg= github.com/zalando/go-keyring v0.2.3 h1:v9CUu9phlABObO4LPWycf+zwMG7nlbb3t/B5wa97yms= github.com/zalando/go-keyring v0.2.3/go.mod h1:HL4k+OXQfJUWaMnqyuSOc0drfGPX2b51Du6K+MRgZMk= -github.com/zclconf/go-cty v1.15.0 h1:tTCRWxsexYUmtt/wVxgDClUe+uQusuI443uL6e+5sXQ= -github.com/zclconf/go-cty v1.15.0/go.mod h1:VvMs5i0vgZdhYawQNq5kePSpLAoz8u1xvZgrPIxfnZE= +github.com/zclconf/go-cty v1.15.1 h1:RgQYm4j2EvoBRXOPxhUvxPzRrGDo1eCOhHXuGfrj5S0= +github.com/zclconf/go-cty v1.15.1/go.mod h1:VvMs5i0vgZdhYawQNq5kePSpLAoz8u1xvZgrPIxfnZE= github.com/zclconf/go-cty-debug v0.0.0-20240509010212-0d6042c53940 h1:4r45xpDWB6ZMSMNJFMOjqrGHynW3DIBuR2H9j0ug+Mo= github.com/zclconf/go-cty-debug v0.0.0-20240509010212-0d6042c53940/go.mod h1:CmBdvvj3nqzfzJ6nTCIwDTPZ56aVGvDrmztiO5g3qrM= go.etcd.io/etcd/api/v3 v3.5.17 h1:cQB8eb8bxwuxOilBpMJAEo8fAONyrdXTHUNcMd8yT1w= @@ -885,32 +875,30 @@ go.mozilla.org/pkcs7 v0.0.0-20200128120323-432b2356ecb1 h1:A/5uWzF44DlIgdm/PQFwf go.mozilla.org/pkcs7 v0.0.0-20200128120323-432b2356ecb1/go.mod h1:SNgMg+EgDFwmvSmLRTNKC5fegJjB7v23qTQ0XLGUNHk= go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0= go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= -go.opentelemetry.io/contrib/detectors/gcp v1.29.0 h1:TiaiXB4DpGD3sdzNlYQxruQngn5Apwzi1X0DRhuGvDQ= -go.opentelemetry.io/contrib/detectors/gcp v1.29.0/go.mod h1:GW2aWZNwR2ZxDLdv8OyC2G8zkRoQBuURgV7RPQgcPoU= +go.opentelemetry.io/contrib/detectors/gcp v1.31.0 h1:G1JQOreVrfhRkner+l4mrGxmfqYCAuy76asTDAo0xsA= +go.opentelemetry.io/contrib/detectors/gcp v1.31.0/go.mod h1:tzQL6E1l+iV44YFTkcAeNQqzXUiekSYP9jjJjXwEd00= go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.54.0 h1:r6I7RJCN86bpD/FQwedZ0vSixDpwuWREjW9oRMsmqDc= go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.54.0/go.mod h1:B9yO6b04uB80CzjedvewuqDhxJxi11s7/GtiGa8bAjI= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.54.0 h1:TT4fX+nBOA/+LUkobKGW1ydGcn+G3vRw9+g5HwCphpk= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.54.0/go.mod h1:L7UH0GbB0p47T4Rri3uHjbpCFYrVrwc1I25QhNPiGK8= -go.opentelemetry.io/otel v1.29.0 h1:PdomN/Al4q/lN6iBJEN3AwPvUiHPMlt93c8bqTG5Llw= -go.opentelemetry.io/otel v1.29.0/go.mod h1:N/WtXPs1CNCUEx+Agz5uouwCba+i+bJGFicT8SR4NP8= +go.opentelemetry.io/otel v1.31.0 h1:NsJcKPIW0D0H3NgzPDHmo0WW6SptzPdqg/L1zsIm2hY= +go.opentelemetry.io/otel v1.31.0/go.mod h1:O0C14Yl9FgkjqcCZAsE053C13OaddMYr/hz6clDkEJE= go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.28.0 h1:3Q/xZUyC1BBkualc9ROb4G8qkH90LXEIICcs5zv1OYY= go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.28.0/go.mod h1:s75jGIWA9OfCMzF0xr+ZgfrB5FEbbV7UuYo32ahUiFI= go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.19.0 h1:IeMeyr1aBvBiPVYihXIaeIZba6b8E1bYp7lbdxK8CQg= go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.19.0/go.mod h1:oVdCUtjq9MK9BlS7TtucsQwUcXcymNiEDjgDD2jMtZU= go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.29.0 h1:WDdP9acbMYjbKIyJUhTvtzj601sVJOqgWdUxSdR/Ysc= go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.29.0/go.mod h1:BLbf7zbNIONBLPwvFnwNHGj4zge8uTCM/UPIVW1Mq2I= -go.opentelemetry.io/otel/metric v1.29.0 h1:vPf/HFWTNkPu1aYeIsc98l4ktOQaL6LeSoeV2g+8YLc= -go.opentelemetry.io/otel/metric v1.29.0/go.mod h1:auu/QWieFVWx+DmQOUMgj0F8LHWdgalxXqvp7BII/W8= -go.opentelemetry.io/otel/sdk v1.29.0 h1:vkqKjk7gwhS8VaWb0POZKmIEDimRCMsopNYnriHyryo= -go.opentelemetry.io/otel/sdk v1.29.0/go.mod h1:pM8Dx5WKnvxLCb+8lG1PRNIDxu9g9b9g59Qr7hfAAok= -go.opentelemetry.io/otel/sdk/metric v1.29.0 h1:K2CfmJohnRgvZ9UAj2/FhIf/okdWcNdBwe1m8xFXiSY= -go.opentelemetry.io/otel/sdk/metric v1.29.0/go.mod h1:6zZLdCl2fkauYoZIOn/soQIDSWFmNSRcICarHfuhNJQ= -go.opentelemetry.io/otel/trace v1.29.0 h1:J/8ZNK4XgR7a21DZUAsbF8pZ5Jcw1VhACmnYt39JTi4= -go.opentelemetry.io/otel/trace v1.29.0/go.mod h1:eHl3w0sp3paPkYstJOmAimxhiFXPg+MMTlEh3nsQgWQ= +go.opentelemetry.io/otel/metric v1.31.0 h1:FSErL0ATQAmYHUIzSezZibnyVlft1ybhy4ozRPcF2fE= +go.opentelemetry.io/otel/metric v1.31.0/go.mod h1:C3dEloVbLuYoX41KpmAhOqNriGbA+qqH6PQ5E5mUfnY= +go.opentelemetry.io/otel/sdk v1.31.0 h1:xLY3abVHYZ5HSfOg3l2E5LUj2Cwva5Y7yGxnSW9H5Gk= +go.opentelemetry.io/otel/sdk v1.31.0/go.mod h1:TfRbMdhvxIIr/B2N2LQW2S5v9m3gOQ/08KsbbO5BPT0= +go.opentelemetry.io/otel/sdk/metric v1.31.0 h1:i9hxxLJF/9kkvfHppyLL55aW7iIJz4JjxTeYusH7zMc= +go.opentelemetry.io/otel/sdk/metric v1.31.0/go.mod h1:CRInTMVvNhUKgSAMbKyTMxqOBC0zgyxzW55lZzX43Y8= +go.opentelemetry.io/otel/trace v1.31.0 h1:ffjsj1aRouKewfr85U2aGagJ46+MvodynlQ1HYdmJys= +go.opentelemetry.io/otel/trace v1.31.0/go.mod h1:TXZkRk7SM2ZQLtR6eoAWQFIHPvzQ06FJAsO1tJg480A= go.opentelemetry.io/proto/otlp v1.3.1 h1:TrMUixzpM0yuc/znrFTP9MMRh8trP93mkCiDVeXrui0= go.opentelemetry.io/proto/otlp v1.3.1/go.mod h1:0X1WI4de4ZsLrrJNLAQbFeLCm3T7yBkR0XqQ7niQU+8= -go.starlark.net v0.0.0-20230525235612-a134d8f9ddca h1:VdD38733bfYv5tUZwEIskMM93VanwNIi5bIKnDrJdEY= -go.starlark.net v0.0.0-20230525235612-a134d8f9ddca/go.mod h1:jxU+3+j+71eXOW14274+SmmuW82qJzl6iZSeqEtTGds= go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= @@ -925,11 +913,11 @@ golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5y golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.6.0/go.mod h1:OFC/31mSvZgRz0V1QTNCzfAI1aIRzbiufJtkMIlEp58= golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU= -golang.org/x/crypto v0.31.0 h1:ihbySMvVjLAeSH1IbfcRTkD/iNscyz8rGzjF/E5hV6U= -golang.org/x/crypto v0.31.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk= +golang.org/x/crypto v0.32.0 h1:euUpcYgM8WcP71gNpTqQCn6rC2t6ULUPiOzfWaXVVfc= +golang.org/x/crypto v0.32.0/go.mod h1:ZnnJkOaASj8g0AjIduWNlq2NRxL0PlBrbKVyZ6V/Ugc= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f h1:XdNn9LlyWAhLVp6P/i8QYBW+hlyhrhei9uErw2B5GJo= -golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f/go.mod h1:D5SMRVC3C2/4+F/DB1wZsLRnSNimn2Sp/NPsCrsv8ak= +golang.org/x/exp v0.0.0-20250106191152-7588d65b2ba8 h1:yqrTHse8TCMW1M1ZCP+VAR/l0kKxwaAIqN/il7x4voA= +golang.org/x/exp v0.0.0-20250106191152-7588d65b2ba8/go.mod h1:tujkw807nyEEAamNbDrEGzRav+ilXA7PCRAd6xsmwiU= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= @@ -956,11 +944,11 @@ golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qx golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= -golang.org/x/net v0.31.0 h1:68CPQngjLL0r2AlUKiSxtQFKvzRVbnzLwMUn5SzcLHo= -golang.org/x/net v0.31.0/go.mod h1:P4fl1q7dY2hnZFxEk4pPSkDHF+QqjitcnDjUQyMM+pM= +golang.org/x/net v0.34.0 h1:Mb7Mrk043xzHgnRM88suvJFwzVrRfHEHJEl5/71CKw0= +golang.org/x/net v0.34.0/go.mod h1:di0qlW3YNM5oh6GqDGQr92MyTozJPmybPK4Ev/Gm31k= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.24.0 h1:KTBBxWqUa0ykRPLtV69rRto9TLXcqYkeswu48x/gvNE= -golang.org/x/oauth2 v0.24.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI= +golang.org/x/oauth2 v0.25.0 h1:CY4y7XT9v0cRI9oupztF8AgiIu99L/ksR/Xp/6jrZ70= +golang.org/x/oauth2 v0.25.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -1000,16 +988,15 @@ golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= -golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.29.0 h1:TPYlXGxvx1MGTn2GiZDhnjPA9wZzZeGKHHmKhHYvgaU= +golang.org/x/sys v0.29.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.0.0-20220526004731-065cf7ba2467/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk= -golang.org/x/term v0.27.0 h1:WP60Sv1nlK1T6SupCHbXzSaN0b9wUmsPoRS9b61A23Q= -golang.org/x/term v0.27.0/go.mod h1:iMsnZpn0cago0GOrHO2+Y7u7JPn5AylBrcoWkElMTSM= +golang.org/x/term v0.28.0 h1:/Ts8HFuMR2E6IP/jlo7QVLZHggjKQbhu/7H0LJFr3Gg= +golang.org/x/term v0.28.0/go.mod h1:Sw/lC2IAUZ92udQNf3WodGtn4k/XoLyZoh8v/8uiwek= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= @@ -1021,8 +1008,8 @@ golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo= golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= -golang.org/x/time v0.8.0 h1:9i3RxcPv3PZnitoVGMPDKZSq1xW1gK1Xy3ArNOGZfEg= -golang.org/x/time v0.8.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= +golang.org/x/time v0.9.0 h1:EsRrnYcQiGH+5FfbgvV4AP7qEZstoyrHB0DzarOQ4ZY= +golang.org/x/time v0.9.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= @@ -1033,16 +1020,16 @@ golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roY golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= -golang.org/x/tools v0.27.0 h1:qEKojBykQkQ4EynWy4S8Weg69NumxKdn40Fce3uc/8o= -golang.org/x/tools v0.27.0/go.mod h1:sUi0ZgbwW9ZPAq26Ekut+weQPR5eIM6GQLQ1Yjm1H0Q= +golang.org/x/tools v0.29.0 h1:Xx0h3TtM9rzQpQuR4dKLrdglAmCEN5Oi+P74JdhdzXE= +golang.org/x/tools v0.29.0/go.mod h1:KMQVMRsVxU6nHCFXrBPhDB8XncLNLM0lIy/F14RP588= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= gomodules.xyz/jsonpatch/v2 v2.4.0 h1:Ci3iUJyx9UeRx7CeFN8ARgGbkESwJK+KB9lLcWxY/Zw= gomodules.xyz/jsonpatch/v2 v2.4.0/go.mod h1:AH3dM2RI6uoBZxn3LVrfvJ3E0/9dG4cSrbuBJT4moAY= -google.golang.org/api v0.209.0 h1:Ja2OXNlyRlWCWu8o+GgI4yUn/wz9h/5ZfFbKz+dQX+w= -google.golang.org/api v0.209.0/go.mod h1:I53S168Yr/PNDNMi5yPnDc0/LGRZO6o7PoEbl/HY3CM= +google.golang.org/api v0.217.0 h1:GYrUtD289o4zl1AhiTZL0jvQGa2RDLyC+kX1N/lfGOU= +google.golang.org/api v0.217.0/go.mod h1:qMc2E8cBAbQlRypBTBWHklNJlaZZJBwDv81B1Iu8oSI= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.6.8 h1:IhEN5q69dyKagZPYMSdIjS2HqprW324FRQZJcGqPAsM= @@ -1050,21 +1037,19 @@ google.golang.org/appengine v1.6.8/go.mod h1:1jJ3jBArFh5pcgW8gCtRJnepW8FzD1V44FJ google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= -google.golang.org/genproto v0.0.0-20241113202542-65e8d215514f h1:zDoHYmMzMacIdjNe+P2XiTmPsLawi/pCbSPfxt6lTfw= -google.golang.org/genproto v0.0.0-20241113202542-65e8d215514f/go.mod h1:Q5m6g8b5KaFFzsQFIGdJkSJDGeJiybVenoYFMMa3ohI= -google.golang.org/genproto/googleapis/api v0.0.0-20241104194629-dd2ea8efbc28 h1:M0KvPgPmDZHPlbRbaNU1APr28TvwvvdUPlSv7PUvy8g= -google.golang.org/genproto/googleapis/api v0.0.0-20241104194629-dd2ea8efbc28/go.mod h1:dguCy7UOdZhTvLzDyt15+rOrawrpM4q7DD9dQ1P11P4= -google.golang.org/genproto/googleapis/rpc v0.0.0-20241113202542-65e8d215514f h1:C1QccEa9kUwvMgEUORqQD9S17QesQijxjZ84sO82mfo= -google.golang.org/genproto/googleapis/rpc v0.0.0-20241113202542-65e8d215514f/go.mod h1:GX3210XPVPUjJbTUbvwI8f2IpZDMZuPJWDzDuebbviI= +google.golang.org/genproto v0.0.0-20241118233622-e639e219e697 h1:ToEetK57OidYuqD4Q5w+vfEnPvPpuTwedCNVohYJfNk= +google.golang.org/genproto v0.0.0-20241118233622-e639e219e697/go.mod h1:JJrvXBWRZaFMxBufik1a4RpFw4HhgVtBBWQeQgUj2cc= +google.golang.org/genproto/googleapis/api v0.0.0-20241209162323-e6fa225c2576 h1:CkkIfIt50+lT6NHAVoRYEyAvQGFM7xEwXUUywFvEb3Q= +google.golang.org/genproto/googleapis/api v0.0.0-20241209162323-e6fa225c2576/go.mod h1:1R3kvZ1dtP3+4p4d3G8uJ8rFk/fWlScl38vanWACI08= +google.golang.org/genproto/googleapis/rpc v0.0.0-20250106144421-5f5ef82da422 h1:3UsHvIr4Wc2aW4brOaSCmcxh9ksica6fHEr8P1XhkYw= +google.golang.org/genproto/googleapis/rpc v0.0.0-20250106144421-5f5ef82da422/go.mod h1:3ENsm/5D1mzDyhpzeRi1NR784I0BcofWBoSc5QqqMK4= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= -google.golang.org/grpc v1.68.0 h1:aHQeeJbo8zAkAa3pRzrVjZlbz6uSfeOXlJNQM0RAbz0= -google.golang.org/grpc v1.68.0/go.mod h1:fmSPC5AsjSBCK54MyHRx48kpOti1/jRfOlwEWywNjWA= -google.golang.org/grpc/stats/opentelemetry v0.0.0-20240907200651-3ffb98b2c93a h1:UIpYSuWdWHSzjwcAFRLjKcPXFZVVLXGEM23W+NWqipw= -google.golang.org/grpc/stats/opentelemetry v0.0.0-20240907200651-3ffb98b2c93a/go.mod h1:9i1T9n4ZinTUZGgzENMi8MDDgbGC5mqTS75JAv6xN3A= +google.golang.org/grpc v1.69.4 h1:MF5TftSMkd8GLw/m0KM6V8CMOCY6NZ1NQDPGFgbTt4A= +google.golang.org/grpc v1.69.4/go.mod h1:vyjdE6jLBI76dgpDojsFGNaHlxdjXN9ghpnd2o7JGZ4= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= @@ -1076,8 +1061,8 @@ google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpAD google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.35.2 h1:8Ar7bF+apOIoThw1EdZl0p1oWvMqTHmpA2fRTyZO8io= -google.golang.org/protobuf v1.35.2/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= +google.golang.org/protobuf v1.36.3 h1:82DV7MYdb8anAVi3qge1wSnMDrnKK7ebr+I0hHRN1BU= +google.golang.org/protobuf v1.36.3/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= @@ -1100,54 +1085,54 @@ gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gotest.tools/v3 v3.4.0 h1:ZazjZUfuVeZGLAmlKKuyv3IKP5orXcwtOwDQH6YVr6o= gotest.tools/v3 v3.4.0/go.mod h1:CtbdzLSsqVhDgMtKsx03ird5YTGB3ar27v0u/yKBW5g= -helm.sh/helm/v3 v3.16.3 h1:kb8bSxMeRJ+knsK/ovvlaVPfdis0X3/ZhYCSFRP+YmY= -helm.sh/helm/v3 v3.16.3/go.mod h1:zeVWGDR4JJgiRbT3AnNsjYaX8OTJlIE9zC+Q7F7iUSU= +helm.sh/helm/v3 v3.17.0 h1:DUD4AGdNVn7PSTYfxe1gmQG7s18QeWv/4jI9TubnhT0= +helm.sh/helm/v3 v3.17.0/go.mod h1:Mo7eGyKPPHlS0Ml67W8z/lbkox/gD9Xt1XpD6bxvZZA= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -k8s.io/api v0.31.3 h1:umzm5o8lFbdN/hIXbrK9oRpOproJO62CV1zqxXrLgk8= -k8s.io/api v0.31.3/go.mod h1:UJrkIp9pnMOI9K2nlL6vwpxRzzEX5sWgn8kGQe92kCE= -k8s.io/apiextensions-apiserver v0.31.3 h1:+GFGj2qFiU7rGCsA5o+p/rul1OQIq6oYpQw4+u+nciE= -k8s.io/apiextensions-apiserver v0.31.3/go.mod h1:2DSpFhUZZJmn/cr/RweH1cEVVbzFw9YBu4T+U3mf1e4= -k8s.io/apimachinery v0.31.3 h1:6l0WhcYgasZ/wk9ktLq5vLaoXJJr5ts6lkaQzgeYPq4= -k8s.io/apimachinery v0.31.3/go.mod h1:rsPdaZJfTfLsNJSQzNHQvYoTmxhoOEofxtOsF3rtsMo= -k8s.io/apiserver v0.31.3 h1:+1oHTtCB+OheqFEz375D0IlzHZ5VeQKX1KGXnx+TTuY= -k8s.io/apiserver v0.31.3/go.mod h1:PrxVbebxrxQPFhJk4powDISIROkNMKHibTg9lTRQ0Qg= -k8s.io/cli-runtime v0.31.1 h1:/ZmKhmZ6hNqDM+yf9s3Y4KEYakNXUn5sod2LWGGwCuk= -k8s.io/cli-runtime v0.31.1/go.mod h1:pKv1cDIaq7ehWGuXQ+A//1OIF+7DI+xudXtExMCbe9U= -k8s.io/client-go v0.31.3 h1:CAlZuM+PH2cm+86LOBemaJI/lQ5linJ6UFxKX/SoG+4= -k8s.io/client-go v0.31.3/go.mod h1:2CgjPUTpv3fE5dNygAr2NcM8nhHzXvxB8KL5gYc3kJs= -k8s.io/cluster-bootstrap v0.31.3 h1:O1Yxk1bLaxZvmQCXLaJjj5iJD+lVMfJdRUuKgbUHPlA= -k8s.io/cluster-bootstrap v0.31.3/go.mod h1:TI6TCsQQB4FfcryWgNO3SLXSKWBqHjx4DfyqSFwixj8= -k8s.io/component-base v0.31.3 h1:DMCXXVx546Rfvhj+3cOm2EUxhS+EyztH423j+8sOwhQ= -k8s.io/component-base v0.31.3/go.mod h1:xME6BHfUOafRgT0rGVBGl7TuSg8Z9/deT7qq6w7qjIU= +k8s.io/api v0.32.1 h1:f562zw9cy+GvXzXf0CKlVQ7yHJVYzLfL6JAS4kOAaOc= +k8s.io/api v0.32.1/go.mod h1:/Yi/BqkuueW1BgpoePYBRdDYfjPF5sgTr5+YqDZra5k= +k8s.io/apiextensions-apiserver v0.32.1 h1:hjkALhRUeCariC8DiVmb5jj0VjIc1N0DREP32+6UXZw= +k8s.io/apiextensions-apiserver v0.32.1/go.mod h1:sxWIGuGiYov7Io1fAS2X06NjMIk5CbRHc2StSmbaQto= +k8s.io/apimachinery v0.32.1 h1:683ENpaCBjma4CYqsmZyhEzrGz6cjn1MY/X2jB2hkZs= +k8s.io/apimachinery v0.32.1/go.mod h1:GpHVgxoKlTxClKcteaeuF1Ul/lDVb74KpZcxcmLDElE= +k8s.io/apiserver v0.32.1 h1:oo0OozRos66WFq87Zc5tclUX2r0mymoVHRq8JmR7Aak= +k8s.io/apiserver v0.32.1/go.mod h1:UcB9tWjBY7aryeI5zAgzVJB/6k7E97bkr1RgqDz0jPw= +k8s.io/cli-runtime v0.32.0 h1:dP+OZqs7zHPpGQMCGAhectbHU2SNCuZtIimRKTv2T1c= +k8s.io/cli-runtime v0.32.0/go.mod h1:Mai8ht2+esoDRK5hr861KRy6z0zHsSTYttNVJXgP3YQ= +k8s.io/client-go v0.32.1 h1:otM0AxdhdBIaQh7l1Q0jQpmo7WOFIk5FFa4bg6YMdUU= +k8s.io/client-go v0.32.1/go.mod h1:aTTKZY7MdxUaJ/KiUs8D+GssR9zJZi77ZqtzcGXIiDg= +k8s.io/cluster-bootstrap v0.32.1 h1:sHOsbrfWn2EDZus/vwPX2IE1wCw2CuByrIFcaY3zDMo= +k8s.io/cluster-bootstrap v0.32.1/go.mod h1:AAoSp7mIY02P2QBRYoFglKobjD++rPzAdlQeUYObVkA= +k8s.io/component-base v0.32.1 h1:/5IfJ0dHIKBWysGV0yKTFfacZ5yNV1sulPh3ilJjRZk= +k8s.io/component-base v0.32.1/go.mod h1:j1iMMHi/sqAHeG5z+O9BFNCF698a1u0186zkjMZQ28w= k8s.io/klog/v2 v2.130.1 h1:n9Xl7H1Xvksem4KFG4PYbdQCQxqc/tTUyrgXaOhHSzk= k8s.io/klog/v2 v2.130.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE= -k8s.io/kube-openapi v0.0.0-20240228011516-70dd3763d340 h1:BZqlfIlq5YbRMFko6/PM7FjZpUb45WallggurYhKGag= -k8s.io/kube-openapi v0.0.0-20240228011516-70dd3763d340/go.mod h1:yD4MZYeKMBwQKVht279WycxKyM84kkAx2DPrTXaeb98= -k8s.io/kubectl v0.31.1 h1:ih4JQJHxsEggFqDJEHSOdJ69ZxZftgeZvYo7M/cpp24= -k8s.io/kubectl v0.31.1/go.mod h1:aNuQoR43W6MLAtXQ/Bu4GDmoHlbhHKuyD49lmTC8eJM= -k8s.io/kubelet v0.31.3 h1:DIXRAmvVGp42mV2vpA1GCLU6oO8who0/vp3Oq6kSpbI= -k8s.io/kubelet v0.31.3/go.mod h1:KSdbEfNy5VzqUlAHlytA/fH12s+sE1u8fb/8JY9sL/8= -k8s.io/kubernetes v1.31.3 h1:oqb7HdfnTelrGlZ6ziNugvQ/L/aJWR704114EAhUn9Q= -k8s.io/kubernetes v1.31.3/go.mod h1:9xmT2buyTYj8TRKwRae7FcuY8k5+xlxv7VivvO0KKfs= -k8s.io/mount-utils v0.31.3 h1:CANy3prUYvvDCc2X7ZKgpjpDhAidx4gjGh/WwDrCPq8= -k8s.io/mount-utils v0.31.3/go.mod h1:HV/VYBUGqYUj4vt82YltzpWvgv8FPg0G9ItyInT3NPU= -k8s.io/utils v0.0.0-20241104163129-6fe5fd82f078 h1:jGnCPejIetjiy2gqaJ5V0NLwTpF4wbQ6cZIItJCSHno= -k8s.io/utils v0.0.0-20241104163129-6fe5fd82f078/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= -libvirt.org/go/libvirt v1.10009.0 h1:Lf3jktPJwrOF/lIb6fZN/TNUPhNVyS70wAk8lI2dGj8= -libvirt.org/go/libvirt v1.10009.0/go.mod h1:1WiFE8EjZfq+FCVog+rvr1yatKbKZ9FaFMZgEqxEJqQ= +k8s.io/kube-openapi v0.0.0-20241105132330-32ad38e42d3f h1:GA7//TjRY9yWGy1poLzYYJJ4JRdzg3+O6e8I+e+8T5Y= +k8s.io/kube-openapi v0.0.0-20241105132330-32ad38e42d3f/go.mod h1:R/HEjbvWI0qdfb8viZUeVZm0X6IZnxAydC7YU42CMw4= +k8s.io/kubectl v0.32.0 h1:rpxl+ng9qeG79YA4Em9tLSfX0G8W0vfaiPVrc/WR7Xw= +k8s.io/kubectl v0.32.0/go.mod h1:qIjSX+QgPQUgdy8ps6eKsYNF+YmFOAO3WygfucIqFiE= +k8s.io/kubelet v0.32.1 h1:bB91GvMsZb+LfzBxnjPEr1Fal/sdxZtYphlfwAaRJGw= +k8s.io/kubelet v0.32.1/go.mod h1:4sAEZ6PlewD0GroV3zscY7llym6kmNNTVmUI/Qshm6w= +k8s.io/kubernetes v1.32.1 h1:46YPpIBCT9dkmeglstZ2Gg4LGaAdro1/3IQ+1AfbF1s= +k8s.io/kubernetes v1.32.1/go.mod h1:tiIKO63GcdPRBHW2WiUFm3C0eoLczl3f7qi56Dm1W8I= +k8s.io/mount-utils v0.32.1 h1:RJOD6xXzEJT/OOJoG1KstfVa8ZXJJPlHb+t2MoulPHM= +k8s.io/mount-utils v0.32.1/go.mod h1:Kun5c2svjAPx0nnvJKYQWhfeNW+O0EpzHgRhDcYoSY0= +k8s.io/utils v0.0.0-20241210054802-24370beab758 h1:sdbE21q2nlQtFh65saZY+rRM6x6aJJI8IUa1AmH/qa0= +k8s.io/utils v0.0.0-20241210054802-24370beab758/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= +libvirt.org/go/libvirt v1.10009.1 h1:Z79EnxEVE190MeULGoq1GY0tb+O18FpYzUNYDHgkrN8= +libvirt.org/go/libvirt v1.10009.1/go.mod h1:1WiFE8EjZfq+FCVog+rvr1yatKbKZ9FaFMZgEqxEJqQ= oras.land/oras-go v1.2.5 h1:XpYuAwAb0DfQsunIyMfeET92emK8km3W4yEzZvUbsTo= oras.land/oras-go v1.2.5/go.mod h1:PuAwRShRZCsZb7g8Ar3jKKQR/2A/qN+pkYxIOd/FAoo= -sigs.k8s.io/controller-runtime v0.19.2 h1:3sPrF58XQEPzbE8T81TN6selQIMGbtYwuaJ6eDssDF8= -sigs.k8s.io/controller-runtime v0.19.2/go.mod h1:iRmWllt8IlaLjvTTDLhRBXIEtkCK6hwVBJJsYS9Ajf4= -sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo= -sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0= -sigs.k8s.io/kustomize/api v0.17.2 h1:E7/Fjk7V5fboiuijoZHgs4aHuexi5Y2loXlVOAVAG5g= -sigs.k8s.io/kustomize/api v0.17.2/go.mod h1:UWTz9Ct+MvoeQsHcJ5e+vziRRkwimm3HytpZgIYqye0= -sigs.k8s.io/kustomize/kyaml v0.17.1 h1:TnxYQxFXzbmNG6gOINgGWQt09GghzgTP6mIurOgrLCQ= -sigs.k8s.io/kustomize/kyaml v0.17.1/go.mod h1:9V0mCjIEYjlXuCdYsSXvyoy2BTsLESH7TlGV81S282U= -sigs.k8s.io/structured-merge-diff/v4 v4.4.1 h1:150L+0vs/8DA78h1u02ooW1/fFq/Lwr+sGiqlzvrtq4= -sigs.k8s.io/structured-merge-diff/v4 v4.4.1/go.mod h1:N8hJocpFajUSSeSJ9bOZ77VzejKZaXsTtZo4/u7Io08= +sigs.k8s.io/controller-runtime v0.20.0 h1:jjkMo29xEXH+02Md9qaVXfEIaMESSpy3TBWPrsfQkQs= +sigs.k8s.io/controller-runtime v0.20.0/go.mod h1:BrP3w158MwvB3ZbNpaAcIKkHQ7YGpYnzpoSTZ8E14WU= +sigs.k8s.io/json v0.0.0-20241010143419-9aa6b5e7a4b3 h1:/Rv+M11QRah1itp8VhT6HoVx1Ray9eB4DBr+K+/sCJ8= +sigs.k8s.io/json v0.0.0-20241010143419-9aa6b5e7a4b3/go.mod h1:18nIHnGi6636UCz6m8i4DhaJ65T6EruyzmoQqI2BVDo= +sigs.k8s.io/kustomize/api v0.18.0 h1:hTzp67k+3NEVInwz5BHyzc9rGxIauoXferXyjv5lWPo= +sigs.k8s.io/kustomize/api v0.18.0/go.mod h1:f8isXnX+8b+SGLHQ6yO4JG1rdkZlvhaCf/uZbLVMb0U= +sigs.k8s.io/kustomize/kyaml v0.18.1 h1:WvBo56Wzw3fjS+7vBjN6TeivvpbW9GmRaWZ9CIVmt4E= +sigs.k8s.io/kustomize/kyaml v0.18.1/go.mod h1:C3L2BFVU1jgcddNBE1TxuVLgS46TjObMwW5FT9FcjYo= +sigs.k8s.io/structured-merge-diff/v4 v4.4.2 h1:MdmvkGuXi/8io6ixD5wud3vOLwc1rj0aNqRlpuvjmwA= +sigs.k8s.io/structured-merge-diff/v4 v4.4.2/go.mod h1:N8f93tFZh9U6vpxwRArLiikrE5/2tiu1w1AGfACIGE4= sigs.k8s.io/yaml v1.4.0 h1:Mk1wCc2gy/F0THH0TAp1QYyJNzRm2KCLy3o5ASXVI5E= sigs.k8s.io/yaml v1.4.0/go.mod h1:Ejl7/uTz7PSA4eKMyQCUTnhZYNmLIl+5c2lQPGR2BPY= software.sslmate.com/src/go-pkcs12 v0.4.0 h1:H2g08FrTvSFKUj+D309j1DPfk5APnIdAQAB8aEykJ5k= diff --git a/hack/tools/go.mod b/hack/tools/go.mod index ddd5ed3b3..b1ff419f2 100644 --- a/hack/tools/go.mod +++ b/hack/tools/go.mod @@ -4,10 +4,10 @@ go 1.23.5 require ( github.com/google/go-licenses v1.6.0 - github.com/google/keep-sorted v0.5.1 + github.com/google/keep-sorted v0.6.0 github.com/katexochen/sh/v3 v3.10.0 - golang.org/x/tools v0.27.0 - golang.org/x/vuln v1.1.3 + golang.org/x/tools v0.29.0 + golang.org/x/vuln v1.1.4 ) require ( @@ -35,14 +35,14 @@ require ( github.com/stretchr/testify v1.8.4 // indirect github.com/xanzy/ssh-agent v0.3.3 // indirect go.opencensus.io v0.24.0 // indirect - golang.org/x/crypto v0.29.0 // indirect + golang.org/x/crypto v0.32.0 // indirect golang.org/x/mod v0.22.0 // indirect - golang.org/x/net v0.31.0 // indirect - golang.org/x/sync v0.9.0 // indirect - golang.org/x/sys v0.27.0 // indirect + golang.org/x/net v0.34.0 // indirect + golang.org/x/sync v0.10.0 // indirect + golang.org/x/sys v0.29.0 // indirect golang.org/x/telemetry v0.0.0-20240522233618-39ace7a40ae7 // indirect - golang.org/x/term v0.26.0 // indirect - golang.org/x/text v0.20.0 // indirect + golang.org/x/term v0.28.0 // indirect + golang.org/x/text v0.21.0 // indirect gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect gopkg.in/src-d/go-billy.v4 v4.3.2 // indirect gopkg.in/src-d/go-git.v4 v4.13.1 // indirect diff --git a/hack/tools/go.sum b/hack/tools/go.sum index ca41d9dc5..718ea5387 100644 --- a/hack/tools/go.sum +++ b/hack/tools/go.sum @@ -180,8 +180,8 @@ github.com/google/go-licenses v1.6.0 h1:MM+VCXf0slYkpWO0mECvdYDVCxZXIQNal5wqUIXE github.com/google/go-licenses v1.6.0/go.mod h1:Z8jgz2isEhdenOqd/00pq7I4y4k1xVVQJv415otjclo= github.com/google/go-replayers/httpreplay v1.1.1 h1:H91sIMlt1NZzN7R+/ASswyouLJfW0WLW7fhyUFvDEkY= github.com/google/go-replayers/httpreplay v1.1.1/go.mod h1:gN9GeLIs7l6NUoVaSSnv2RiqK1NiwAmD0MrKeC9IIks= -github.com/google/keep-sorted v0.5.1 h1:rmIIsosfRa/5cG5nddWRC2Bc3mzZpOEozc9I8Zlnq4I= -github.com/google/keep-sorted v0.5.1/go.mod h1:JYy9vljs7P8b3QdPOQkywA+4u36FUHwsNITZIpJyPkE= +github.com/google/keep-sorted v0.6.0 h1:mrDMFnTUxsLatnYBBIJA/1j/Z3ZXTub/pCzbKvA2Ga8= +github.com/google/keep-sorted v0.6.0/go.mod h1:JYy9vljs7P8b3QdPOQkywA+4u36FUHwsNITZIpJyPkE= github.com/google/licenseclassifier v0.0.0-20210722185704-3043a050f148 h1:TJsAqW6zLRMDTyGmc9TPosfn9OyVlHs8Hrn3pY6ONSY= github.com/google/licenseclassifier v0.0.0-20210722185704-3043a050f148/go.mod h1:rq9F0RSpNKlrefnf6ZYMHKUnEJBCNzf6AcCXMYBeYvE= github.com/google/martian v2.1.0+incompatible h1:/CP5g8u/VJHijgedC/Legn3BAbAaWPgecwXBIDzw5no= @@ -341,8 +341,8 @@ golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPh golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw= -golang.org/x/crypto v0.29.0 h1:L5SG1JTTXupVV3n6sUqMTeWbjAyfPwoda2DLX8J8FrQ= -golang.org/x/crypto v0.29.0/go.mod h1:+F4F4N5hv6v38hfeYwTdx20oUvLLc+QfrE9Ax9HtgRg= +golang.org/x/crypto v0.32.0 h1:euUpcYgM8WcP71gNpTqQCn6rC2t6ULUPiOzfWaXVVfc= +golang.org/x/crypto v0.32.0/go.mod h1:ZnnJkOaASj8g0AjIduWNlq2NRxL0PlBrbKVyZ6V/Ugc= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -428,8 +428,8 @@ golang.org/x/net v0.0.0-20220624214902-1bab6f366d9e/go.mod h1:XRhObCWvk6IyKnWLug golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= golang.org/x/net v0.5.0/go.mod h1:DivGGAXEgPSlEBzxGzZI+ZLohi+xUj054jfeKui00ws= -golang.org/x/net v0.31.0 h1:68CPQngjLL0r2AlUKiSxtQFKvzRVbnzLwMUn5SzcLHo= -golang.org/x/net v0.31.0/go.mod h1:P4fl1q7dY2hnZFxEk4pPSkDHF+QqjitcnDjUQyMM+pM= +golang.org/x/net v0.34.0 h1:Mb7Mrk043xzHgnRM88suvJFwzVrRfHEHJEl5/71CKw0= +golang.org/x/net v0.34.0/go.mod h1:di0qlW3YNM5oh6GqDGQr92MyTozJPmybPK4Ev/Gm31k= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -466,8 +466,8 @@ golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.9.0 h1:fEo0HyrW1GIgZdpbhCRO0PkJajUS5H9IFUztCgEo2jQ= -golang.org/x/sync v0.9.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.10.0 h1:3NQrjDixjgGwUOCaF8w2+VYHv0Ve/vGYSbdkTa98gmQ= +golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190221075227-b4e8571b14e0/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -538,16 +538,16 @@ golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.27.0 h1:wBqf8DvsY9Y/2P8gAfPDEYNuS30J4lPHJxXSb/nJZ+s= -golang.org/x/sys v0.27.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.29.0 h1:TPYlXGxvx1MGTn2GiZDhnjPA9wZzZeGKHHmKhHYvgaU= +golang.org/x/sys v0.29.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/telemetry v0.0.0-20240522233618-39ace7a40ae7 h1:FemxDzfMUcK2f3YY4H+05K9CDzbSVr2+q/JKN45pey0= golang.org/x/telemetry v0.0.0-20240522233618-39ace7a40ae7/go.mod h1:pRgIJT+bRLFKnoM1ldnzKoxTIn14Yxz928LQRYYgIN0= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.4.0/go.mod h1:9P2UbLfCdcvo3p/nzKvsmas4TnlujnuoV9hGgYzW1lQ= -golang.org/x/term v0.26.0 h1:WEQa6V3Gja/BhNxg540hBip/kkaYtRg3cxg4oXSw4AU= -golang.org/x/term v0.26.0/go.mod h1:Si5m1o57C5nBNQo5z1iq+XDijt21BDBDp2bK0QI8e3E= +golang.org/x/term v0.28.0 h1:/Ts8HFuMR2E6IP/jlo7QVLZHggjKQbhu/7H0LJFr3Gg= +golang.org/x/term v0.28.0/go.mod h1:Sw/lC2IAUZ92udQNf3WodGtn4k/XoLyZoh8v/8uiwek= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -559,8 +559,8 @@ golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.6.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug= -golang.org/x/text v0.20.0/go.mod h1:D4IsuqiFMhST5bX19pQ9ikHC2GsaKyk/oF+pn3ducp4= +golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo= +golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -619,10 +619,10 @@ golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/tools v0.5.0/go.mod h1:N+Kgy78s5I24c24dU8OfWNEotWjutIs8SnJvn5IDq+k= -golang.org/x/tools v0.27.0 h1:qEKojBykQkQ4EynWy4S8Weg69NumxKdn40Fce3uc/8o= -golang.org/x/tools v0.27.0/go.mod h1:sUi0ZgbwW9ZPAq26Ekut+weQPR5eIM6GQLQ1Yjm1H0Q= -golang.org/x/vuln v1.1.3 h1:NPGnvPOTgnjBc9HTaUx+nj+EaUYxl5SJOWqaDYGaFYw= -golang.org/x/vuln v1.1.3/go.mod h1:7Le6Fadm5FOqE9C926BCD0g12NWyhg7cxV4BwcPFuNY= +golang.org/x/tools v0.29.0 h1:Xx0h3TtM9rzQpQuR4dKLrdglAmCEN5Oi+P74JdhdzXE= +golang.org/x/tools v0.29.0/go.mod h1:KMQVMRsVxU6nHCFXrBPhDB8XncLNLM0lIy/F14RP588= +golang.org/x/vuln v1.1.4 h1:Ju8QsuyhX3Hk8ma3CesTbO8vfJD9EvUBgHvkxHBzj0I= +golang.org/x/vuln v1.1.4/go.mod h1:F+45wmU18ym/ca5PLTPLsSzr2KppzswxPP603ldA67s= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= diff --git a/internal/constellation/helm/charts/coredns/templates/configmap.yaml b/internal/constellation/helm/charts/coredns/templates/configmap.yaml index 58a48a318..03f06d623 100644 --- a/internal/constellation/helm/charts/coredns/templates/configmap.yaml +++ b/internal/constellation/helm/charts/coredns/templates/configmap.yaml @@ -16,7 +16,10 @@ data: forward . /etc/resolv.conf { max_concurrent 1000 } - cache 30 + cache 30 { + disable success {{ .Values.dnsDomain }} + disable denial {{ .Values.dnsDomain }} + } loop reload loadbalance diff --git a/internal/versions/components/components.pb.go b/internal/versions/components/components.pb.go index 9f2d985ba..d82c863d4 100644 --- a/internal/versions/components/components.pb.go +++ b/internal/versions/components/components.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.35.2 +// protoc-gen-go v1.36.3 // protoc v5.29.1 // source: internal/versions/components/components.proto @@ -21,14 +21,13 @@ const ( ) type Component struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Url string `protobuf:"bytes,1,opt,name=url,proto3" json:"url,omitempty"` + Hash string `protobuf:"bytes,2,opt,name=hash,proto3" json:"hash,omitempty"` + InstallPath string `protobuf:"bytes,3,opt,name=install_path,json=installPath,proto3" json:"install_path,omitempty"` + Extract bool `protobuf:"varint,4,opt,name=extract,proto3" json:"extract,omitempty"` unknownFields protoimpl.UnknownFields - - Url string `protobuf:"bytes,1,opt,name=url,proto3" json:"url,omitempty"` - Hash string `protobuf:"bytes,2,opt,name=hash,proto3" json:"hash,omitempty"` - InstallPath string `protobuf:"bytes,3,opt,name=install_path,json=installPath,proto3" json:"install_path,omitempty"` - Extract bool `protobuf:"varint,4,opt,name=extract,proto3" json:"extract,omitempty"` + sizeCache protoimpl.SizeCache } func (x *Component) Reset() { diff --git a/internal/versions/versions.go b/internal/versions/versions.go index 4e75e48ce..ad22d4fb1 100644 --- a/internal/versions/versions.go +++ b/internal/versions/versions.go @@ -243,7 +243,7 @@ var VersionConfigs = map[ValidK8sVersion]KubernetesVersion{ InstallPath: patchFilePath("kube-scheduler"), }, { - Url: "data:application/json;base64,W3sib3AiOiJyZXBsYWNlIiwicGF0aCI6Ii9zcGVjL2NvbnRhaW5lcnMvMC9pbWFnZSIsInZhbHVlIjoicmVnaXN0cnkuazhzLmlvL2V0Y2Q6My41LjE1LTBAc2hhMjU2OmE2ZGM2M2U2ZThjZmEwMzA3ZDc4NTE3NjJmYTZiNjI5YWZiMThmMjhkOGFhM2ZhYjVhNmU5MWI0YWY2MDAyNmEifV0=", + Url: "data:application/json;base64,W3sib3AiOiJyZXBsYWNlIiwicGF0aCI6Ii9zcGVjL2NvbnRhaW5lcnMvMC9pbWFnZSIsInZhbHVlIjoicmVnaXN0cnkuazhzLmlvL2V0Y2Q6My41LjE2LTBAc2hhMjU2OmM2YTlkMTFjYzVjMDRiMTE0Y2NkZWYzOWE5MjY1ZWVlZjgxOGUzZDAyZjUzNTliZTAzNWFlNzg0MDk3ZmRlYzUifV0=", InstallPath: patchFilePath("etcd"), }, }, @@ -310,7 +310,7 @@ var VersionConfigs = map[ValidK8sVersion]KubernetesVersion{ InstallPath: patchFilePath("kube-scheduler"), }, { - Url: "data:application/json;base64,W3sib3AiOiJyZXBsYWNlIiwicGF0aCI6Ii9zcGVjL2NvbnRhaW5lcnMvMC9pbWFnZSIsInZhbHVlIjoicmVnaXN0cnkuazhzLmlvL2V0Y2Q6My41LjE1LTBAc2hhMjU2OmE2ZGM2M2U2ZThjZmEwMzA3ZDc4NTE3NjJmYTZiNjI5YWZiMThmMjhkOGFhM2ZhYjVhNmU5MWI0YWY2MDAyNmEifV0=", + Url: "data:application/json;base64,W3sib3AiOiJyZXBsYWNlIiwicGF0aCI6Ii9zcGVjL2NvbnRhaW5lcnMvMC9pbWFnZSIsInZhbHVlIjoicmVnaXN0cnkuazhzLmlvL2V0Y2Q6My41LjE2LTBAc2hhMjU2OmM2YTlkMTFjYzVjMDRiMTE0Y2NkZWYzOWE5MjY1ZWVlZjgxOGUzZDAyZjUzNTliZTAzNWFlNzg0MDk3ZmRlYzUifV0=", InstallPath: patchFilePath("etcd"), }, }, @@ -377,7 +377,7 @@ var VersionConfigs = map[ValidK8sVersion]KubernetesVersion{ InstallPath: patchFilePath("kube-scheduler"), }, { - Url: "data:application/json;base64,W3sib3AiOiJyZXBsYWNlIiwicGF0aCI6Ii9zcGVjL2NvbnRhaW5lcnMvMC9pbWFnZSIsInZhbHVlIjoicmVnaXN0cnkuazhzLmlvL2V0Y2Q6My41LjE1LTBAc2hhMjU2OmE2ZGM2M2U2ZThjZmEwMzA3ZDc4NTE3NjJmYTZiNjI5YWZiMThmMjhkOGFhM2ZhYjVhNmU5MWI0YWY2MDAyNmEifV0=", + Url: "data:application/json;base64,W3sib3AiOiJyZXBsYWNlIiwicGF0aCI6Ii9zcGVjL2NvbnRhaW5lcnMvMC9pbWFnZSIsInZhbHVlIjoicmVnaXN0cnkuazhzLmlvL2V0Y2Q6My41LjE2LTBAc2hhMjU2OmM2YTlkMTFjYzVjMDRiMTE0Y2NkZWYzOWE5MjY1ZWVlZjgxOGUzZDAyZjUzNTliZTAzNWFlNzg0MDk3ZmRlYzUifV0=", InstallPath: patchFilePath("etcd"), }, }, diff --git a/joinservice/joinproto/join.pb.go b/joinservice/joinproto/join.pb.go index f5002b8ef..bf8245d22 100644 --- a/joinservice/joinproto/join.pb.go +++ b/joinservice/joinproto/join.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.35.2 +// protoc-gen-go v1.36.3 // protoc v5.29.1 // source: joinservice/joinproto/join.proto @@ -26,13 +26,12 @@ const ( ) type IssueJoinTicketRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - DiskUuid string `protobuf:"bytes,1,opt,name=disk_uuid,json=diskUuid,proto3" json:"disk_uuid,omitempty"` - CertificateRequest []byte `protobuf:"bytes,2,opt,name=certificate_request,json=certificateRequest,proto3" json:"certificate_request,omitempty"` - IsControlPlane bool `protobuf:"varint,3,opt,name=is_control_plane,json=isControlPlane,proto3" json:"is_control_plane,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + DiskUuid string `protobuf:"bytes,1,opt,name=disk_uuid,json=diskUuid,proto3" json:"disk_uuid,omitempty"` + CertificateRequest []byte `protobuf:"bytes,2,opt,name=certificate_request,json=certificateRequest,proto3" json:"certificate_request,omitempty"` + IsControlPlane bool `protobuf:"varint,3,opt,name=is_control_plane,json=isControlPlane,proto3" json:"is_control_plane,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *IssueJoinTicketRequest) Reset() { @@ -87,10 +86,7 @@ func (x *IssueJoinTicketRequest) GetIsControlPlane() bool { } type IssueJoinTicketResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` StateDiskKey []byte `protobuf:"bytes,1,opt,name=state_disk_key,json=stateDiskKey,proto3" json:"state_disk_key,omitempty"` MeasurementSalt []byte `protobuf:"bytes,2,opt,name=measurement_salt,json=measurementSalt,proto3" json:"measurement_salt,omitempty"` MeasurementSecret []byte `protobuf:"bytes,3,opt,name=measurement_secret,json=measurementSecret,proto3" json:"measurement_secret,omitempty"` @@ -101,6 +97,8 @@ type IssueJoinTicketResponse struct { ControlPlaneFiles []*ControlPlaneCertOrKey `protobuf:"bytes,8,rep,name=control_plane_files,json=controlPlaneFiles,proto3" json:"control_plane_files,omitempty"` KubernetesVersion string `protobuf:"bytes,9,opt,name=kubernetes_version,json=kubernetesVersion,proto3" json:"kubernetes_version,omitempty"` KubernetesComponents []*components.Component `protobuf:"bytes,10,rep,name=kubernetes_components,json=kubernetesComponents,proto3" json:"kubernetes_components,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *IssueJoinTicketResponse) Reset() { @@ -204,12 +202,11 @@ func (x *IssueJoinTicketResponse) GetKubernetesComponents() []*components.Compon } type ControlPlaneCertOrKey struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + Data []byte `protobuf:"bytes,2,opt,name=data,proto3" json:"data,omitempty"` unknownFields protoimpl.UnknownFields - - Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` - Data []byte `protobuf:"bytes,2,opt,name=data,proto3" json:"data,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ControlPlaneCertOrKey) Reset() { @@ -257,11 +254,10 @@ func (x *ControlPlaneCertOrKey) GetData() []byte { } type IssueRejoinTicketRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + DiskUuid string `protobuf:"bytes,1,opt,name=disk_uuid,json=diskUuid,proto3" json:"disk_uuid,omitempty"` unknownFields protoimpl.UnknownFields - - DiskUuid string `protobuf:"bytes,1,opt,name=disk_uuid,json=diskUuid,proto3" json:"disk_uuid,omitempty"` + sizeCache protoimpl.SizeCache } func (x *IssueRejoinTicketRequest) Reset() { @@ -302,12 +298,11 @@ func (x *IssueRejoinTicketRequest) GetDiskUuid() string { } type IssueRejoinTicketResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - StateDiskKey []byte `protobuf:"bytes,1,opt,name=state_disk_key,json=stateDiskKey,proto3" json:"state_disk_key,omitempty"` - MeasurementSecret []byte `protobuf:"bytes,2,opt,name=measurement_secret,json=measurementSecret,proto3" json:"measurement_secret,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + StateDiskKey []byte `protobuf:"bytes,1,opt,name=state_disk_key,json=stateDiskKey,proto3" json:"state_disk_key,omitempty"` + MeasurementSecret []byte `protobuf:"bytes,2,opt,name=measurement_secret,json=measurementSecret,proto3" json:"measurement_secret,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *IssueRejoinTicketResponse) Reset() { diff --git a/keyservice/keyserviceproto/keyservice.pb.go b/keyservice/keyserviceproto/keyservice.pb.go index a955da9ed..a58cd571b 100644 --- a/keyservice/keyserviceproto/keyservice.pb.go +++ b/keyservice/keyserviceproto/keyservice.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.35.2 +// protoc-gen-go v1.36.3 // protoc v5.29.1 // source: keyservice/keyserviceproto/keyservice.proto @@ -25,12 +25,11 @@ const ( ) type GetDataKeyRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + DataKeyId string `protobuf:"bytes,1,opt,name=data_key_id,json=dataKeyId,proto3" json:"data_key_id,omitempty"` + Length uint32 `protobuf:"varint,2,opt,name=length,proto3" json:"length,omitempty"` unknownFields protoimpl.UnknownFields - - DataKeyId string `protobuf:"bytes,1,opt,name=data_key_id,json=dataKeyId,proto3" json:"data_key_id,omitempty"` - Length uint32 `protobuf:"varint,2,opt,name=length,proto3" json:"length,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetDataKeyRequest) Reset() { @@ -78,11 +77,10 @@ func (x *GetDataKeyRequest) GetLength() uint32 { } type GetDataKeyResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + DataKey []byte `protobuf:"bytes,1,opt,name=data_key,json=dataKey,proto3" json:"data_key,omitempty"` unknownFields protoimpl.UnknownFields - - DataKey []byte `protobuf:"bytes,1,opt,name=data_key,json=dataKey,proto3" json:"data_key,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetDataKeyResponse) Reset() { diff --git a/upgrade-agent/upgradeproto/upgrade.pb.go b/upgrade-agent/upgradeproto/upgrade.pb.go index f65e69adc..6662b95c0 100644 --- a/upgrade-agent/upgradeproto/upgrade.pb.go +++ b/upgrade-agent/upgradeproto/upgrade.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.35.2 +// protoc-gen-go v1.36.3 // protoc v5.29.1 // source: upgrade-agent/upgradeproto/upgrade.proto @@ -26,12 +26,11 @@ const ( ) type ExecuteUpdateRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` WantedKubernetesVersion string `protobuf:"bytes,3,opt,name=wanted_kubernetes_version,json=wantedKubernetesVersion,proto3" json:"wanted_kubernetes_version,omitempty"` KubernetesComponents []*components.Component `protobuf:"bytes,4,rep,name=kubernetes_components,json=kubernetesComponents,proto3" json:"kubernetes_components,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ExecuteUpdateRequest) Reset() { @@ -79,9 +78,9 @@ func (x *ExecuteUpdateRequest) GetKubernetesComponents() []*components.Component } type ExecuteUpdateResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ExecuteUpdateResponse) Reset() { diff --git a/verify/verifyproto/verify.pb.go b/verify/verifyproto/verify.pb.go index 7b9d55690..6789d094b 100644 --- a/verify/verifyproto/verify.pb.go +++ b/verify/verifyproto/verify.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.35.2 +// protoc-gen-go v1.36.3 // protoc v5.29.1 // source: verify/verifyproto/verify.proto @@ -25,11 +25,10 @@ const ( ) type GetAttestationRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Nonce []byte `protobuf:"bytes,2,opt,name=nonce,proto3" json:"nonce,omitempty"` unknownFields protoimpl.UnknownFields - - Nonce []byte `protobuf:"bytes,2,opt,name=nonce,proto3" json:"nonce,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetAttestationRequest) Reset() { @@ -70,11 +69,10 @@ func (x *GetAttestationRequest) GetNonce() []byte { } type GetAttestationResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Attestation []byte `protobuf:"bytes,1,opt,name=attestation,proto3" json:"attestation,omitempty"` unknownFields protoimpl.UnknownFields - - Attestation []byte `protobuf:"bytes,1,opt,name=attestation,proto3" json:"attestation,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetAttestationResponse) Reset() { From 2216098a9bfef493261311769ee214c68c7cddb0 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 21 Jan 2025 08:51:04 +0100 Subject: [PATCH 068/311] deps: update registry.k8s.io/sig-storage/snapshot-validation-webhook Docker tag to v8.1.1 (#3601) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .../charts/edgeless/csi/charts/snapshot-controller/values.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/constellation/helm/charts/edgeless/csi/charts/snapshot-controller/values.yaml b/internal/constellation/helm/charts/edgeless/csi/charts/snapshot-controller/values.yaml index b03a97492..2b87ffa50 100644 --- a/internal/constellation/helm/charts/edgeless/csi/charts/snapshot-controller/values.yaml +++ b/internal/constellation/helm/charts/edgeless/csi/charts/snapshot-controller/values.yaml @@ -10,5 +10,5 @@ snapshotWebhook: webhook: image: repository: registry.k8s.io/sig-storage/snapshot-validation-webhook - tag: v8.1.0@sha256:35fa940f062222dfa3257e0c74837a22c35976be899bab6103b433bab0e03a81 + tag: v8.1.1@sha256:979842f9a6c23ae1b2ddd26603c27412dfc4d3c027d9cda1cb87a67b91ae9ac8 imagePullPolicy: IfNotPresent From c6db8bd46b711acf606a687d8ff9addbe6e598f5 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 21 Jan 2025 09:05:04 +0100 Subject: [PATCH 069/311] deps: update aquasecurity/tfsec to v1.28.13 (#3600) * deps: update aquasecurity/tfsec to v1.28.13 * deps: tidy all modules --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: edgelessci --- bazel/toolchains/ci_deps.bzl | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/bazel/toolchains/ci_deps.bzl b/bazel/toolchains/ci_deps.bzl index c16674bba..fc881104d 100644 --- a/bazel/toolchains/ci_deps.bzl +++ b/bazel/toolchains/ci_deps.bzl @@ -181,41 +181,41 @@ def _tfsec_deps(): name = "com_github_aquasecurity_tfsec_linux_amd64", build_file_content = """exports_files(["tfsec"], visibility = ["//visibility:public"])""", urls = [ - "https://cdn.confidential.cloud/constellation/cas/sha256/9d783fa225a570f034000136973afba86a1708c919a539b72b3ea954a198289c", - "https://github.com/aquasecurity/tfsec/releases/download/v1.28.11/tfsec_1.28.11_linux_amd64.tar.gz", + "https://cdn.confidential.cloud/constellation/cas/sha256/f643c390e6eabdf4bd64e807ff63abfe977d4f027c0b535eefe7a5c9f391fc28", + "https://github.com/aquasecurity/tfsec/releases/download/v1.28.13/tfsec_1.28.13_linux_amd64.tar.gz", ], type = "tar.gz", - sha256 = "9d783fa225a570f034000136973afba86a1708c919a539b72b3ea954a198289c", + sha256 = "f643c390e6eabdf4bd64e807ff63abfe977d4f027c0b535eefe7a5c9f391fc28", ) http_archive( name = "com_github_aquasecurity_tfsec_linux_arm64", build_file_content = """exports_files(["tfsec"], visibility = ["//visibility:public"])""", urls = [ - "https://cdn.confidential.cloud/constellation/cas/sha256/68b5c4f6b7c459dd890ecff94b0732e456ef45974894f58bbb90fbb4816f3e52", - "https://github.com/aquasecurity/tfsec/releases/download/v1.28.11/tfsec_1.28.11_linux_arm64.tar.gz", + "https://cdn.confidential.cloud/constellation/cas/sha256/4aed1b122f817b684cc48da9cdc4b98b891808969441914570c089883c85ac50", + "https://github.com/aquasecurity/tfsec/releases/download/v1.28.13/tfsec_1.28.13_linux_arm64.tar.gz", ], type = "tar.gz", - sha256 = "68b5c4f6b7c459dd890ecff94b0732e456ef45974894f58bbb90fbb4816f3e52", + sha256 = "4aed1b122f817b684cc48da9cdc4b98b891808969441914570c089883c85ac50", ) http_archive( name = "com_github_aquasecurity_tfsec_darwin_amd64", build_file_content = """exports_files(["tfsec"], visibility = ["//visibility:public"])""", urls = [ - "https://cdn.confidential.cloud/constellation/cas/sha256/d377597f2fd4e6956bb7beb711d627b0e0204c421c17e2cd062213222c2f3001", - "https://github.com/aquasecurity/tfsec/releases/download/v1.28.11/tfsec_1.28.11_darwin_amd64.tar.gz", + "https://cdn.confidential.cloud/constellation/cas/sha256/966c7656f797c120dceb56a208a50dbf6a363c30876662a28e1c65505afca10d", + "https://github.com/aquasecurity/tfsec/releases/download/v1.28.13/tfsec_1.28.13_darwin_amd64.tar.gz", ], type = "tar.gz", - sha256 = "d377597f2fd4e6956bb7beb711d627b0e0204c421c17e2cd062213222c2f3001", + sha256 = "966c7656f797c120dceb56a208a50dbf6a363c30876662a28e1c65505afca10d", ) http_archive( name = "com_github_aquasecurity_tfsec_darwin_arm64", build_file_content = """exports_files(["tfsec"], visibility = ["//visibility:public"])""", urls = [ - "https://cdn.confidential.cloud/constellation/cas/sha256/14db6b40049226ebc779789196f99eb4977bb93c99fa51c8b72b603e6cdf44e7", - "https://github.com/aquasecurity/tfsec/releases/download/v1.28.11/tfsec_1.28.11_darwin_arm64.tar.gz", + "https://cdn.confidential.cloud/constellation/cas/sha256/a381580c81d3413bb3fe07aa91ab89e51c1bbbd33c848194a2b43e9be3729c16", + "https://github.com/aquasecurity/tfsec/releases/download/v1.28.13/tfsec_1.28.13_darwin_arm64.tar.gz", ], type = "tar.gz", - sha256 = "14db6b40049226ebc779789196f99eb4977bb93c99fa51c8b72b603e6cdf44e7", + sha256 = "a381580c81d3413bb3fe07aa91ab89e51c1bbbd33c848194a2b43e9be3729c16", ) def _golangci_lint_deps(): From f789b8efc722b83dfb50e7b58f5f194919551b8b Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 21 Jan 2025 10:04:07 +0100 Subject: [PATCH 070/311] deps: update bufbuild/buf to v1.50.0 (#3606) * deps: update bufbuild/buf to v1.50.0 * deps: tidy all modules --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: edgelessci --- bazel/toolchains/ci_deps.bzl | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/bazel/toolchains/ci_deps.bzl b/bazel/toolchains/ci_deps.bzl index fc881104d..353af02f2 100644 --- a/bazel/toolchains/ci_deps.bzl +++ b/bazel/toolchains/ci_deps.bzl @@ -270,44 +270,44 @@ def _buf_deps(): strip_prefix = "buf/bin", build_file_content = """exports_files(["buf"], visibility = ["//visibility:public"])""", urls = [ - "https://cdn.confidential.cloud/constellation/cas/sha256/ee8da9748249f7946d79191e36469ce7bc3b8ba80019bff1fa4289a44cbc23bf", - "https://github.com/bufbuild/buf/releases/download/v1.49.0/buf-Linux-x86_64.tar.gz", + "https://cdn.confidential.cloud/constellation/cas/sha256/80c1211dfc4844499c6ddad341bb21206579883fd33cea0a2c40c82befd70602", + "https://github.com/bufbuild/buf/releases/download/v1.50.0/buf-Linux-x86_64.tar.gz", ], type = "tar.gz", - sha256 = "ee8da9748249f7946d79191e36469ce7bc3b8ba80019bff1fa4289a44cbc23bf", + sha256 = "80c1211dfc4844499c6ddad341bb21206579883fd33cea0a2c40c82befd70602", ) http_archive( name = "com_github_bufbuild_buf_linux_arm64", strip_prefix = "buf/bin", build_file_content = """exports_files(["buf"], visibility = ["//visibility:public"])""", urls = [ - "https://cdn.confidential.cloud/constellation/cas/sha256/fd54cbe4ab0ef43dc5e6f2154328d5fed3bd9ad6a984a1387cc5749f40227606", - "https://github.com/bufbuild/buf/releases/download/v1.49.0/buf-Linux-aarch64.tar.gz", + "https://cdn.confidential.cloud/constellation/cas/sha256/4c920c5f96eb99ad13eb6f25cf740fdb42963401faa267bee03fbd3e163730b2", + "https://github.com/bufbuild/buf/releases/download/v1.50.0/buf-Linux-aarch64.tar.gz", ], type = "tar.gz", - sha256 = "fd54cbe4ab0ef43dc5e6f2154328d5fed3bd9ad6a984a1387cc5749f40227606", + sha256 = "4c920c5f96eb99ad13eb6f25cf740fdb42963401faa267bee03fbd3e163730b2", ) http_archive( name = "com_github_bufbuild_buf_darwin_amd64", strip_prefix = "buf/bin", build_file_content = """exports_files(["buf"], visibility = ["//visibility:public"])""", urls = [ - "https://cdn.confidential.cloud/constellation/cas/sha256/c3811cd13e5ca508b5af6acb9b82cfcaa6e8ed830959de3e0c7d0fc5fd1a8fb7", - "https://github.com/bufbuild/buf/releases/download/v1.49.0/buf-Darwin-x86_64.tar.gz", + "https://cdn.confidential.cloud/constellation/cas/sha256/fc64b4a16964d7ec49fb2d245159d57dbfb3dac947e2a86413f9685cf8de2ac5", + "https://github.com/bufbuild/buf/releases/download/v1.50.0/buf-Darwin-x86_64.tar.gz", ], type = "tar.gz", - sha256 = "c3811cd13e5ca508b5af6acb9b82cfcaa6e8ed830959de3e0c7d0fc5fd1a8fb7", + sha256 = "fc64b4a16964d7ec49fb2d245159d57dbfb3dac947e2a86413f9685cf8de2ac5", ) http_archive( name = "com_github_bufbuild_buf_darwin_arm64", strip_prefix = "buf/bin", build_file_content = """exports_files(["buf"], visibility = ["//visibility:public"])""", urls = [ - "https://cdn.confidential.cloud/constellation/cas/sha256/9e90557dc95c891dd138bd054e5559563cfa3cb677ff4a2d2dad6bef7d326f13", - "https://github.com/bufbuild/buf/releases/download/v1.49.0/buf-Darwin-arm64.tar.gz", + "https://cdn.confidential.cloud/constellation/cas/sha256/c80f7f8a1d8ffd36c5db31a360c7e0b65c8cf671d60bd3c34e1558e54f84f4cc", + "https://github.com/bufbuild/buf/releases/download/v1.50.0/buf-Darwin-arm64.tar.gz", ], type = "tar.gz", - sha256 = "9e90557dc95c891dd138bd054e5559563cfa3cb677ff4a2d2dad6bef7d326f13", + sha256 = "c80f7f8a1d8ffd36c5db31a360c7e0b65c8cf671d60bd3c34e1558e54f84f4cc", ) def _talos_docgen_deps(): From f048ebb8e8e626392268f27a433dbcd8ed84391d Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 21 Jan 2025 10:04:32 +0100 Subject: [PATCH 071/311] deps: update rhysd/actionlint to v1.7.7 (#3602) * deps: update rhysd/actionlint to v1.7.7 * deps: tidy all modules --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: edgelessci --- bazel/toolchains/ci_deps.bzl | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/bazel/toolchains/ci_deps.bzl b/bazel/toolchains/ci_deps.bzl index 353af02f2..d4fe439ab 100644 --- a/bazel/toolchains/ci_deps.bzl +++ b/bazel/toolchains/ci_deps.bzl @@ -97,41 +97,41 @@ def _actionlint_deps(): name = "com_github_rhysd_actionlint_linux_amd64", build_file_content = """exports_files(["actionlint"], visibility = ["//visibility:public"])""", urls = [ - "https://cdn.confidential.cloud/constellation/cas/sha256/5d1a70d9de15fee5371e6f9e20cc29b284e814d6ee1b882f9749e91caf716eba", - "https://github.com/rhysd/actionlint/releases/download/v1.7.6/actionlint_1.7.6_linux_amd64.tar.gz", + "https://cdn.confidential.cloud/constellation/cas/sha256/023070a287cd8cccd71515fedc843f1985bf96c436b7effaecce67290e7e0757", + "https://github.com/rhysd/actionlint/releases/download/v1.7.7/actionlint_1.7.7_linux_amd64.tar.gz", ], type = "tar.gz", - sha256 = "5d1a70d9de15fee5371e6f9e20cc29b284e814d6ee1b882f9749e91caf716eba", + sha256 = "023070a287cd8cccd71515fedc843f1985bf96c436b7effaecce67290e7e0757", ) http_archive( name = "com_github_rhysd_actionlint_linux_arm64", build_file_content = """exports_files(["actionlint"], visibility = ["//visibility:public"])""", urls = [ - "https://cdn.confidential.cloud/constellation/cas/sha256/5d8b6b5bf0bc7bbe69a5ea779329eb7825c768248dd0da979d98e39d924abc7f", - "https://github.com/rhysd/actionlint/releases/download/v1.7.6/actionlint_1.7.6_linux_arm64.tar.gz", + "https://cdn.confidential.cloud/constellation/cas/sha256/401942f9c24ed71e4fe71b76c7d638f66d8633575c4016efd2977ce7c28317d0", + "https://github.com/rhysd/actionlint/releases/download/v1.7.7/actionlint_1.7.7_linux_arm64.tar.gz", ], type = "tar.gz", - sha256 = "5d8b6b5bf0bc7bbe69a5ea779329eb7825c768248dd0da979d98e39d924abc7f", + sha256 = "401942f9c24ed71e4fe71b76c7d638f66d8633575c4016efd2977ce7c28317d0", ) http_archive( name = "com_github_rhysd_actionlint_darwin_amd64", build_file_content = """exports_files(["actionlint"], visibility = ["//visibility:public"])""", urls = [ - "https://cdn.confidential.cloud/constellation/cas/sha256/a57e9862e6b4f6b8398ff134f0e07c9f0047142fb9ea8e7cdc4fee05d24e89f4", - "https://github.com/rhysd/actionlint/releases/download/v1.7.6/actionlint_1.7.6_darwin_amd64.tar.gz", + "https://cdn.confidential.cloud/constellation/cas/sha256/28e5de5a05fc558474f638323d736d822fff183d2d492f0aecb2b73cc44584f5", + "https://github.com/rhysd/actionlint/releases/download/v1.7.7/actionlint_1.7.7_darwin_amd64.tar.gz", ], type = "tar.gz", - sha256 = "a57e9862e6b4f6b8398ff134f0e07c9f0047142fb9ea8e7cdc4fee05d24e89f4", + sha256 = "28e5de5a05fc558474f638323d736d822fff183d2d492f0aecb2b73cc44584f5", ) http_archive( name = "com_github_rhysd_actionlint_darwin_arm64", build_file_content = """exports_files(["actionlint"], visibility = ["//visibility:public"])""", urls = [ - "https://cdn.confidential.cloud/constellation/cas/sha256/9a7c9cb2b627bb137ef68742eead2dd5b78f3ddc44876e84c37d323ba28b4710", - "https://github.com/rhysd/actionlint/releases/download/v1.7.6/actionlint_1.7.6_darwin_arm64.tar.gz", + "https://cdn.confidential.cloud/constellation/cas/sha256/2693315b9093aeacb4ebd91a993fea54fc215057bf0da2659056b4bc033873db", + "https://github.com/rhysd/actionlint/releases/download/v1.7.7/actionlint_1.7.7_darwin_arm64.tar.gz", ], type = "tar.gz", - sha256 = "9a7c9cb2b627bb137ef68742eead2dd5b78f3ddc44876e84c37d323ba28b4710", + sha256 = "2693315b9093aeacb4ebd91a993fea54fc215057bf0da2659056b4bc033873db", ) def _gofumpt_deps(): From 44e898e18754eb0507d007892492d47de8ccf68d Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 21 Jan 2025 10:05:01 +0100 Subject: [PATCH 072/311] deps: update Terraform dependencies (#3604) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .../vpn/on-prem-terraform/.terraform.lock.hcl | 48 +++++----- dev-docs/howto/vpn/on-prem-terraform/main.tf | 2 +- .../azure-terraform/.terraform.lock.hcl | 48 +++++----- .../miniconstellation/azure-terraform/main.tf | 2 +- e2e/miniconstellation/.terraform.lock.hcl | 48 +++++----- e2e/miniconstellation/main.tf | 2 +- .../infrastructure/aws/.terraform.lock.hcl | 60 ++++++------ terraform/infrastructure/aws/main.tf | 2 +- .../aws/modules/instance_group/main.tf | 2 +- .../aws/modules/jump_host/main.tf | 2 +- .../aws/modules/load_balancer_target/main.tf | 2 +- .../aws/modules/public_private_subnet/main.tf | 2 +- .../infrastructure/azure/.terraform.lock.hcl | 48 +++++----- terraform/infrastructure/azure/main.tf | 2 +- .../modules/load_balancer_backend/main.tf | 2 +- .../azure/modules/scale_set/main.tf | 2 +- .../iam/aws/.terraform.lock.hcl | 60 ++++++------ terraform/infrastructure/iam/aws/main.tf | 2 +- .../iam/azure/.terraform.lock.hcl | 96 +++++++++---------- terraform/infrastructure/iam/azure/main.tf | 4 +- .../openstack/.terraform.lock.hcl | 60 ++++++------ terraform/infrastructure/openstack/main.tf | 2 +- .../modules/stackit_loadbalancer/main.tf | 2 +- 23 files changed, 250 insertions(+), 250 deletions(-) diff --git a/dev-docs/howto/vpn/on-prem-terraform/.terraform.lock.hcl b/dev-docs/howto/vpn/on-prem-terraform/.terraform.lock.hcl index e72958d1e..26584ea56 100644 --- a/dev-docs/howto/vpn/on-prem-terraform/.terraform.lock.hcl +++ b/dev-docs/howto/vpn/on-prem-terraform/.terraform.lock.hcl @@ -2,32 +2,32 @@ # Manual edits may be lost in future updates. provider "registry.terraform.io/hashicorp/azurerm" { - version = "4.15.0" - constraints = "4.15.0" + version = "4.16.0" + constraints = "4.16.0" hashes = [ - "h1:1Yfzvj0yCBg8ck1EgqFkhzfWJ1pGYzyjRxJ/9I+8Wwk=", - "h1:HXV4xhFHsM+41zSTE9yxilg/JddsqZYWPpcgGX+CL1U=", - "h1:XiRrUHid+1nVLY7zeDP20Q4hAVqncxv9C4s0YiWNM6w=", - "h1:Z+FoTCeYnxLl+WynS1BUAnxZlW1F1DgouBAgzvTkbwk=", - "h1:eKF94ScY2csUTysr7T4vMWvHb3A9hf0gUBzKXG0nrLA=", - "h1:gKI0mOpVDlUFdGRFBgetREvZJMrVLeBKpwJwXeUA5jA=", - "h1:gLnXyXqLq5bXrsmxoPGyoC7F2x7p+1A1ndNQNcLB0Wg=", - "h1:hK37RxP5UACnayk9AQKIzFSlpqDprrJ3jOy2EiNAQV4=", - "h1:iz0zF6b7fV6O88uKnYWvkAZqrTSYgZgsVRFBSkiIYEQ=", - "h1:l4IeiC5B5iXJq0yQCl6M6ktov6DDPXKm4ziitiMWvtk=", - "h1:xX8rqMLkR7ZRKRANBtQdQ8qO2n5I7WIy7EOyeXxHr2w=", - "zh:1e3f9f2e94d6ee07c74e137b22ad6199081ae0c2dde1f986bd09fa516a0a6d4b", - "zh:3e9dda2795c76f143d335fb2f78a600845ba9bdaf87d400a1a3131b533d641ef", - "zh:617cf5db531ba0f1648613f31c43481b6736bdec4b08a8980217a0e1d40173b6", - "zh:9d561393fc9e09ade829a97e0e5f58c8efd010f0a6cd513d41a0d3baf5e66d98", - "zh:a1932e5614a920cca5372733686bcd8b8d80f7c9dac7b570dd49916982853004", - "zh:b7e6eeb2a4998dcf74a2f005da23b99fd1cf89e45c77424a288a27f7c1b5c562", - "zh:baec97748db05ce4b24a6d91f8bad2f3db7414f68c41d78782c410a47b4a460a", - "zh:ce1eb226304a65a29c1e70af4c05d359168ef70ad297e37de54d7070619a50c1", - "zh:d04e582146310375c9bb7decfbed3acef537d70be77201de3ca235cfbc6f64f6", - "zh:df4098cd6b961d1cf0ea858f2964afadb264c8ee3ccf59215f620c421573ffa0", - "zh:ec1837c5a6b4b6c77c6587a98cc0978dbfeb6be0fb7f1c9618f1e66213d81e6b", + "h1:5aUNrEyEto0kuqvVlot0oJIfjZvufkaVpBLFRAHKYEk=", + "h1:7e25Wr4cpUvlAcwL+9ZOeeA1xha84LqTZNviDaVQFlo=", + "h1:8hK4uDEChFAWE9MvC+/HBB4WUkhJdedn7Q4pLJEQDl4=", + "h1:HZdmFPnC/+x6si15pq4rGYv/1TrCcyQXLnDMqq1SONw=", + "h1:UNZga7kYMfYfDHmuP6LvHmJNXlb3fyvRY1tA9ol6yY4=", + "h1:ZJgJLXK4nZKfj1z2TIKCKa+7Jt+p1G5Mwty2PTF7Tso=", + "h1:iTxbOUuean5hkvi0xyxU+UXK5HT3DfxZYumlJHphCIw=", + "h1:kZJbZZTpZVW6rfj0wt4I7VFekUEDD5CRa1sAP6wrwGI=", + "h1:uIzu9HMGN1ySZ1s+iYCKY9UqsgCjgH05tnBg1DgHtV4=", + "h1:uulWiJ93kZmKKh6/EtHktJQ901npRmTb/ao7oTP402w=", + "h1:zQ3svnDlwO7XtuXurLKLanW7arcRbFmw/pUd1DzLuEU=", + "zh:2035e461a94bd4180557a06f8e56f228a8a035608d0dac4d08e5870cf9265276", + "zh:3f15778a22ef1b9d0fa28670e5ea6ef1094b0be2533f43f350a2ef15d471b353", + "zh:4f1a4d03b008dd958bcd6bf82cf088fbaa9c121be2fd35e10e6b06c6e8f6aaa1", + "zh:5859f31c342364e849b4f8c437a46f33e927fa820244d0732b8d2ec74a95712d", + "zh:693d0f15512ca8c6b5e999b3a7551503feb06b408b3836bc6a6403e518b9ddab", + "zh:7f4912bec5b04f5156935292377c12484c13582151eb3c2555df409a7e5fb6e0", + "zh:bb9a509497f3a131c52fac32348919bf1b9e06c69a65f24607b03f7b56fb47b6", + "zh:c1b0c64e49ac591fd038ad71e71403ff71c07476e27e8da718c29f0028ea6d0d", + "zh:dd4ca432ee14eb0bb0cdc0bb463c8675b8ef02497be870a20d8dfee3e7fe52b3", + "zh:df58bb7fea984d2b11709567842ca4d55b3f24e187aa6be99e3677f55cbbe7da", "zh:f569b65999264a9416862bca5cd2a6177d94ccb0424f3a4ef424428912b9cb3c", + "zh:f7fb37704da50c096f9c7c25e8a95fe73ce1d3c5aab0d616d506f07bc5cfcdd8", ] } diff --git a/dev-docs/howto/vpn/on-prem-terraform/main.tf b/dev-docs/howto/vpn/on-prem-terraform/main.tf index 24cddff10..ab95b15c0 100644 --- a/dev-docs/howto/vpn/on-prem-terraform/main.tf +++ b/dev-docs/howto/vpn/on-prem-terraform/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { azurerm = { source = "hashicorp/azurerm" - version = "4.15.0" + version = "4.16.0" } random = { source = "hashicorp/random" diff --git a/dev-docs/miniconstellation/azure-terraform/.terraform.lock.hcl b/dev-docs/miniconstellation/azure-terraform/.terraform.lock.hcl index 4416d280b..475defc00 100644 --- a/dev-docs/miniconstellation/azure-terraform/.terraform.lock.hcl +++ b/dev-docs/miniconstellation/azure-terraform/.terraform.lock.hcl @@ -2,32 +2,32 @@ # Manual edits may be lost in future updates. provider "registry.terraform.io/hashicorp/azurerm" { - version = "4.15.0" - constraints = "4.15.0" + version = "4.16.0" + constraints = "4.16.0" hashes = [ - "h1:1Yfzvj0yCBg8ck1EgqFkhzfWJ1pGYzyjRxJ/9I+8Wwk=", - "h1:HXV4xhFHsM+41zSTE9yxilg/JddsqZYWPpcgGX+CL1U=", - "h1:XiRrUHid+1nVLY7zeDP20Q4hAVqncxv9C4s0YiWNM6w=", - "h1:Z+FoTCeYnxLl+WynS1BUAnxZlW1F1DgouBAgzvTkbwk=", - "h1:eKF94ScY2csUTysr7T4vMWvHb3A9hf0gUBzKXG0nrLA=", - "h1:gKI0mOpVDlUFdGRFBgetREvZJMrVLeBKpwJwXeUA5jA=", - "h1:gLnXyXqLq5bXrsmxoPGyoC7F2x7p+1A1ndNQNcLB0Wg=", - "h1:hK37RxP5UACnayk9AQKIzFSlpqDprrJ3jOy2EiNAQV4=", - "h1:iz0zF6b7fV6O88uKnYWvkAZqrTSYgZgsVRFBSkiIYEQ=", - "h1:l4IeiC5B5iXJq0yQCl6M6ktov6DDPXKm4ziitiMWvtk=", - "h1:xX8rqMLkR7ZRKRANBtQdQ8qO2n5I7WIy7EOyeXxHr2w=", - "zh:1e3f9f2e94d6ee07c74e137b22ad6199081ae0c2dde1f986bd09fa516a0a6d4b", - "zh:3e9dda2795c76f143d335fb2f78a600845ba9bdaf87d400a1a3131b533d641ef", - "zh:617cf5db531ba0f1648613f31c43481b6736bdec4b08a8980217a0e1d40173b6", - "zh:9d561393fc9e09ade829a97e0e5f58c8efd010f0a6cd513d41a0d3baf5e66d98", - "zh:a1932e5614a920cca5372733686bcd8b8d80f7c9dac7b570dd49916982853004", - "zh:b7e6eeb2a4998dcf74a2f005da23b99fd1cf89e45c77424a288a27f7c1b5c562", - "zh:baec97748db05ce4b24a6d91f8bad2f3db7414f68c41d78782c410a47b4a460a", - "zh:ce1eb226304a65a29c1e70af4c05d359168ef70ad297e37de54d7070619a50c1", - "zh:d04e582146310375c9bb7decfbed3acef537d70be77201de3ca235cfbc6f64f6", - "zh:df4098cd6b961d1cf0ea858f2964afadb264c8ee3ccf59215f620c421573ffa0", - "zh:ec1837c5a6b4b6c77c6587a98cc0978dbfeb6be0fb7f1c9618f1e66213d81e6b", + "h1:5aUNrEyEto0kuqvVlot0oJIfjZvufkaVpBLFRAHKYEk=", + "h1:7e25Wr4cpUvlAcwL+9ZOeeA1xha84LqTZNviDaVQFlo=", + "h1:8hK4uDEChFAWE9MvC+/HBB4WUkhJdedn7Q4pLJEQDl4=", + "h1:HZdmFPnC/+x6si15pq4rGYv/1TrCcyQXLnDMqq1SONw=", + "h1:UNZga7kYMfYfDHmuP6LvHmJNXlb3fyvRY1tA9ol6yY4=", + "h1:ZJgJLXK4nZKfj1z2TIKCKa+7Jt+p1G5Mwty2PTF7Tso=", + "h1:iTxbOUuean5hkvi0xyxU+UXK5HT3DfxZYumlJHphCIw=", + "h1:kZJbZZTpZVW6rfj0wt4I7VFekUEDD5CRa1sAP6wrwGI=", + "h1:uIzu9HMGN1ySZ1s+iYCKY9UqsgCjgH05tnBg1DgHtV4=", + "h1:uulWiJ93kZmKKh6/EtHktJQ901npRmTb/ao7oTP402w=", + "h1:zQ3svnDlwO7XtuXurLKLanW7arcRbFmw/pUd1DzLuEU=", + "zh:2035e461a94bd4180557a06f8e56f228a8a035608d0dac4d08e5870cf9265276", + "zh:3f15778a22ef1b9d0fa28670e5ea6ef1094b0be2533f43f350a2ef15d471b353", + "zh:4f1a4d03b008dd958bcd6bf82cf088fbaa9c121be2fd35e10e6b06c6e8f6aaa1", + "zh:5859f31c342364e849b4f8c437a46f33e927fa820244d0732b8d2ec74a95712d", + "zh:693d0f15512ca8c6b5e999b3a7551503feb06b408b3836bc6a6403e518b9ddab", + "zh:7f4912bec5b04f5156935292377c12484c13582151eb3c2555df409a7e5fb6e0", + "zh:bb9a509497f3a131c52fac32348919bf1b9e06c69a65f24607b03f7b56fb47b6", + "zh:c1b0c64e49ac591fd038ad71e71403ff71c07476e27e8da718c29f0028ea6d0d", + "zh:dd4ca432ee14eb0bb0cdc0bb463c8675b8ef02497be870a20d8dfee3e7fe52b3", + "zh:df58bb7fea984d2b11709567842ca4d55b3f24e187aa6be99e3677f55cbbe7da", "zh:f569b65999264a9416862bca5cd2a6177d94ccb0424f3a4ef424428912b9cb3c", + "zh:f7fb37704da50c096f9c7c25e8a95fe73ce1d3c5aab0d616d506f07bc5cfcdd8", ] } diff --git a/dev-docs/miniconstellation/azure-terraform/main.tf b/dev-docs/miniconstellation/azure-terraform/main.tf index 88eff4ce7..6b0b82a26 100644 --- a/dev-docs/miniconstellation/azure-terraform/main.tf +++ b/dev-docs/miniconstellation/azure-terraform/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { azurerm = { source = "hashicorp/azurerm" - version = "4.15.0" + version = "4.16.0" } random = { source = "hashicorp/random" diff --git a/e2e/miniconstellation/.terraform.lock.hcl b/e2e/miniconstellation/.terraform.lock.hcl index 799ea40d4..d98936cba 100644 --- a/e2e/miniconstellation/.terraform.lock.hcl +++ b/e2e/miniconstellation/.terraform.lock.hcl @@ -2,32 +2,32 @@ # Manual edits may be lost in future updates. provider "registry.terraform.io/hashicorp/azurerm" { - version = "4.15.0" - constraints = "4.15.0" + version = "4.16.0" + constraints = "4.16.0" hashes = [ - "h1:1Yfzvj0yCBg8ck1EgqFkhzfWJ1pGYzyjRxJ/9I+8Wwk=", - "h1:HXV4xhFHsM+41zSTE9yxilg/JddsqZYWPpcgGX+CL1U=", - "h1:XiRrUHid+1nVLY7zeDP20Q4hAVqncxv9C4s0YiWNM6w=", - "h1:Z+FoTCeYnxLl+WynS1BUAnxZlW1F1DgouBAgzvTkbwk=", - "h1:eKF94ScY2csUTysr7T4vMWvHb3A9hf0gUBzKXG0nrLA=", - "h1:gKI0mOpVDlUFdGRFBgetREvZJMrVLeBKpwJwXeUA5jA=", - "h1:gLnXyXqLq5bXrsmxoPGyoC7F2x7p+1A1ndNQNcLB0Wg=", - "h1:hK37RxP5UACnayk9AQKIzFSlpqDprrJ3jOy2EiNAQV4=", - "h1:iz0zF6b7fV6O88uKnYWvkAZqrTSYgZgsVRFBSkiIYEQ=", - "h1:l4IeiC5B5iXJq0yQCl6M6ktov6DDPXKm4ziitiMWvtk=", - "h1:xX8rqMLkR7ZRKRANBtQdQ8qO2n5I7WIy7EOyeXxHr2w=", - "zh:1e3f9f2e94d6ee07c74e137b22ad6199081ae0c2dde1f986bd09fa516a0a6d4b", - "zh:3e9dda2795c76f143d335fb2f78a600845ba9bdaf87d400a1a3131b533d641ef", - "zh:617cf5db531ba0f1648613f31c43481b6736bdec4b08a8980217a0e1d40173b6", - "zh:9d561393fc9e09ade829a97e0e5f58c8efd010f0a6cd513d41a0d3baf5e66d98", - "zh:a1932e5614a920cca5372733686bcd8b8d80f7c9dac7b570dd49916982853004", - "zh:b7e6eeb2a4998dcf74a2f005da23b99fd1cf89e45c77424a288a27f7c1b5c562", - "zh:baec97748db05ce4b24a6d91f8bad2f3db7414f68c41d78782c410a47b4a460a", - "zh:ce1eb226304a65a29c1e70af4c05d359168ef70ad297e37de54d7070619a50c1", - "zh:d04e582146310375c9bb7decfbed3acef537d70be77201de3ca235cfbc6f64f6", - "zh:df4098cd6b961d1cf0ea858f2964afadb264c8ee3ccf59215f620c421573ffa0", - "zh:ec1837c5a6b4b6c77c6587a98cc0978dbfeb6be0fb7f1c9618f1e66213d81e6b", + "h1:5aUNrEyEto0kuqvVlot0oJIfjZvufkaVpBLFRAHKYEk=", + "h1:7e25Wr4cpUvlAcwL+9ZOeeA1xha84LqTZNviDaVQFlo=", + "h1:8hK4uDEChFAWE9MvC+/HBB4WUkhJdedn7Q4pLJEQDl4=", + "h1:HZdmFPnC/+x6si15pq4rGYv/1TrCcyQXLnDMqq1SONw=", + "h1:UNZga7kYMfYfDHmuP6LvHmJNXlb3fyvRY1tA9ol6yY4=", + "h1:ZJgJLXK4nZKfj1z2TIKCKa+7Jt+p1G5Mwty2PTF7Tso=", + "h1:iTxbOUuean5hkvi0xyxU+UXK5HT3DfxZYumlJHphCIw=", + "h1:kZJbZZTpZVW6rfj0wt4I7VFekUEDD5CRa1sAP6wrwGI=", + "h1:uIzu9HMGN1ySZ1s+iYCKY9UqsgCjgH05tnBg1DgHtV4=", + "h1:uulWiJ93kZmKKh6/EtHktJQ901npRmTb/ao7oTP402w=", + "h1:zQ3svnDlwO7XtuXurLKLanW7arcRbFmw/pUd1DzLuEU=", + "zh:2035e461a94bd4180557a06f8e56f228a8a035608d0dac4d08e5870cf9265276", + "zh:3f15778a22ef1b9d0fa28670e5ea6ef1094b0be2533f43f350a2ef15d471b353", + "zh:4f1a4d03b008dd958bcd6bf82cf088fbaa9c121be2fd35e10e6b06c6e8f6aaa1", + "zh:5859f31c342364e849b4f8c437a46f33e927fa820244d0732b8d2ec74a95712d", + "zh:693d0f15512ca8c6b5e999b3a7551503feb06b408b3836bc6a6403e518b9ddab", + "zh:7f4912bec5b04f5156935292377c12484c13582151eb3c2555df409a7e5fb6e0", + "zh:bb9a509497f3a131c52fac32348919bf1b9e06c69a65f24607b03f7b56fb47b6", + "zh:c1b0c64e49ac591fd038ad71e71403ff71c07476e27e8da718c29f0028ea6d0d", + "zh:dd4ca432ee14eb0bb0cdc0bb463c8675b8ef02497be870a20d8dfee3e7fe52b3", + "zh:df58bb7fea984d2b11709567842ca4d55b3f24e187aa6be99e3677f55cbbe7da", "zh:f569b65999264a9416862bca5cd2a6177d94ccb0424f3a4ef424428912b9cb3c", + "zh:f7fb37704da50c096f9c7c25e8a95fe73ce1d3c5aab0d616d506f07bc5cfcdd8", ] } diff --git a/e2e/miniconstellation/main.tf b/e2e/miniconstellation/main.tf index 22df60771..29cad56e3 100644 --- a/e2e/miniconstellation/main.tf +++ b/e2e/miniconstellation/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { azurerm = { source = "hashicorp/azurerm" - version = "4.15.0" + version = "4.16.0" } tls = { source = "hashicorp/tls" diff --git a/terraform/infrastructure/aws/.terraform.lock.hcl b/terraform/infrastructure/aws/.terraform.lock.hcl index 1e826be2d..91dd9df3a 100644 --- a/terraform/infrastructure/aws/.terraform.lock.hcl +++ b/terraform/infrastructure/aws/.terraform.lock.hcl @@ -2,38 +2,38 @@ # Manual edits may be lost in future updates. provider "registry.terraform.io/hashicorp/aws" { - version = "5.83.1" - constraints = "5.83.1" + version = "5.84.0" + constraints = "5.84.0" hashes = [ - "h1:8KI8wFWW2iPYVMyNGI75bxgmwy8MjZk4G6Quut5H7x8=", - "h1:DsW/pXMvg0Dhe+SaKRkAK1Knfr8bVsqENa7sLLyOBtI=", - "h1:L3bkBWmhaqNTvFylxJbAgnJIix30n1fFrvfSS/JkNFg=", - "h1:OGnYC6C0PsiB2K0BcjaCzEFkZhKQ9rq2sEP8d1djH08=", - "h1:OlxnMPwNjMbASLyyPmIsCwdEslb3Q2zzvBgxQVJalc8=", - "h1:Rz48OWTGwGhwY9yHPTgfmnKP1a9R2iUWyKsOBkvabmU=", - "h1:UfCtsy1RE6chDN/qzWdcDg8g8QENo74xqaUS3oPbnsQ=", - "h1:YEZLk+HoD/Oz9VC0M7UoMTAFEvoqAwfXLgPc+9ndpVU=", - "h1:Yy3K7R7881H72rQDzG6qjZVkrWA6DGJzfE21TionY7w=", - "h1:g1YrU/FiK0ty5J+WVYJIKHSaSU0g9VboXwstUxD0JzU=", - "h1:huw6LBQrOHtsv4Wqu99jgozvl47Qsd5XZDgxAHj86Ds=", - "h1:jEKbxB3GtA9ak4XXkaIXTMbnu/SDiiqNKDeF/78XrHc=", - "h1:mmZDuh7DyVJ+1UOAaJZ3gh42YASLIFkbxy7sdPiui/8=", - "h1:vInFMDq9oMs53/i+7IU8hZgmTLhFfng8L8kbuALZxSI=", - "zh:0313253c78f195973752c4d1f62bfdd345a9c99c1bc7a612a8c1f1e27d51e49e", - "zh:108523f3e9ebc93f7d900c51681f6edbd3f3a56b8a62b0afc31d8214892f91e0", - "zh:175b9bf2a00bea6ac1c73796ad77b0e00dcbbde166235017c49377d7763861d8", - "zh:1c8bf55b8548bbad683cd6d7bdb03e8840a00b2422dc1529ffb9892820657130", - "zh:22338f09bae62d5ff646de00182417f992548da534fee7d98c5d0136d4bd5d7a", - "zh:92de1107ec43de60612be5f6255616f16a9cf82d88df1af1c0471b81f3a82c16", + "h1:897cPKLnktFTBHxlPDyv52hQoR7rUy52Tzr9F/bvXW0=", + "h1:EJLTu1eqP93P4+DexFZHnuMCwEapkmHhEUirUT+tjZw=", + "h1:MVppdPvKcROdwwj1i7OMoZ/ODFZlqrYr7GVHI1Fevb8=", + "h1:MsFKMU05GLbXfXQZHqy+eC5FC5hDxyRB1irY3lvAaf8=", + "h1:N0mARumaxRCk1FmbDiEW89izbpV/3jkWowrm/78HucQ=", + "h1:OJ53RNte7HLHSMxSkzu1S6H8sC0T8qnCAOcNLjjtMpc=", + "h1:TpsSFMkiuLC1V29n4Ov99g4L6jlsBmBMWxqDX3GZNww=", + "h1:X50oGSrQb2Hzf6i1BWnYOqIneJSy7TiWNtKK+VY+aGA=", + "h1:dwpeFUdcxgXVAc0JSqO57xf0/r2qOBLPloombCQWFz8=", + "h1:eeLhwhBhj96w3YFnTcOMPV0ybGER5fbv/ihcTMeoTk4=", + "h1:iBnPrv1hIjnS26jHVGXuxTDF27OaVOx2XJ0Sbp45qHs=", + "h1:lL0Ftd7QOGinm/1w/1qwfoj6urdJsmRSVxV+xfBD8R4=", + "h1:mwHAD66PY6wi858oGl5NcWGfA9X7mdxPrZrAGfJGS3A=", + "h1:p7kabmCUZYyP5A6VqtIvuy/+CTiGn03jVdcIFMbQkOI=", + "zh:078f77438aba6ec8bf9154b7d223e5c71c48d805d6cd3bcf9db0cc1e82668ac3", + "zh:1f6591ff96be00501e71b792ed3a5a14b21ff03afec9a1c4a3fd9300e6e5b674", + "zh:2ab694e022e81dd74485351c5836148a842ed71cf640664c9d871cb517b09602", + "zh:33c8ccb6e3dc496e828a7572dd981366c6271075c1189f249b9b5236361d7eff", + "zh:6f31068ebad1d627e421c72ccdaafe678c53600ca73714e977bf45ff43ae5d17", + "zh:7488623dccfb639347cae66f9001d39cf06b92e8081975235a1ac3a0ac3f44aa", + "zh:7f042b78b9690a8725c95b91a70fc8e264011b836605bcc342ac297b9ea3937d", + "zh:88b56ac6c7209dc0a775b79975a371918f3aed8f015c37d5899f31deff37c61a", "zh:9b12af85486a96aedd8d7984b0ff811a4b42e3d88dad1a3fb4c0b580d04fa425", - "zh:9c7bfb7afea330e6d90e1466125a8cba3db1ed4043c5da52f737459c89290a6e", - "zh:ba59b374d477e5610674b70f5abfe0408e8f809390347372751384151440d3d0", - "zh:bd1c433966002f586d63cb1e3e16326991f238bc6beeb2352be36ec651917b0b", - "zh:ca2b4d1d02651c15261fffa4b142e45def9a22c6069353f0f663fd2046e268f8", - "zh:d8ed98c748f7a3f1a72277cfee9afe346aca39ab319d17402277852551d8f14a", - "zh:ed3d8bc89de5f35f3c5f4802ff7c749fda2e2be267f9af4a850694f099960a72", - "zh:f698732a4391c3f4d7079b4aaa52389da2a460cac5eed438ed688f147d603689", - "zh:f9f51b17f2978394954e9f6ab9ef293b8e11f1443117294ccf87f7f8212b3439", + "zh:a1979ba840d704af0932f8de5f541cbb4caa9b6bbd25ed552a24e6772175ba07", + "zh:b058c0533dae580e69d1adbc1f69e6a80632374abfc10e8634d06187a108e87b", + "zh:c88610af9cf957f8dcf4382e0c9ca566ef10e3290f5de01d4d90b2d81b078aa8", + "zh:e9562c055a2247d0c287772b55abef468c79f8d66a74780fe1c5e5dae1a284a9", + "zh:f7a7c71d28441d925a25c08c4485c015b2d9f0338bc9707443e91ff8e161d3d9", + "zh:fee533e81976d0900aa6fa443dc54ef171cbd901847f28a6e8edb1d161fa6fde", ] } diff --git a/terraform/infrastructure/aws/main.tf b/terraform/infrastructure/aws/main.tf index feb95745d..3d9049ef9 100644 --- a/terraform/infrastructure/aws/main.tf +++ b/terraform/infrastructure/aws/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { aws = { source = "hashicorp/aws" - version = "5.83.1" + version = "5.84.0" } random = { source = "hashicorp/random" diff --git a/terraform/infrastructure/aws/modules/instance_group/main.tf b/terraform/infrastructure/aws/modules/instance_group/main.tf index 917900cfd..273db6e24 100644 --- a/terraform/infrastructure/aws/modules/instance_group/main.tf +++ b/terraform/infrastructure/aws/modules/instance_group/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { aws = { source = "hashicorp/aws" - version = "5.83.1" + version = "5.84.0" } random = { source = "hashicorp/random" diff --git a/terraform/infrastructure/aws/modules/jump_host/main.tf b/terraform/infrastructure/aws/modules/jump_host/main.tf index fff09c1a4..2c777b271 100644 --- a/terraform/infrastructure/aws/modules/jump_host/main.tf +++ b/terraform/infrastructure/aws/modules/jump_host/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { aws = { source = "hashicorp/aws" - version = "5.83.1" + version = "5.84.0" } } } diff --git a/terraform/infrastructure/aws/modules/load_balancer_target/main.tf b/terraform/infrastructure/aws/modules/load_balancer_target/main.tf index 4173d5a63..61b64ee98 100644 --- a/terraform/infrastructure/aws/modules/load_balancer_target/main.tf +++ b/terraform/infrastructure/aws/modules/load_balancer_target/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { aws = { source = "hashicorp/aws" - version = "5.83.1" + version = "5.84.0" } } } diff --git a/terraform/infrastructure/aws/modules/public_private_subnet/main.tf b/terraform/infrastructure/aws/modules/public_private_subnet/main.tf index 9333a5d91..37217b253 100644 --- a/terraform/infrastructure/aws/modules/public_private_subnet/main.tf +++ b/terraform/infrastructure/aws/modules/public_private_subnet/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { aws = { source = "hashicorp/aws" - version = "5.83.1" + version = "5.84.0" } } } diff --git a/terraform/infrastructure/azure/.terraform.lock.hcl b/terraform/infrastructure/azure/.terraform.lock.hcl index e72958d1e..26584ea56 100644 --- a/terraform/infrastructure/azure/.terraform.lock.hcl +++ b/terraform/infrastructure/azure/.terraform.lock.hcl @@ -2,32 +2,32 @@ # Manual edits may be lost in future updates. provider "registry.terraform.io/hashicorp/azurerm" { - version = "4.15.0" - constraints = "4.15.0" + version = "4.16.0" + constraints = "4.16.0" hashes = [ - "h1:1Yfzvj0yCBg8ck1EgqFkhzfWJ1pGYzyjRxJ/9I+8Wwk=", - "h1:HXV4xhFHsM+41zSTE9yxilg/JddsqZYWPpcgGX+CL1U=", - "h1:XiRrUHid+1nVLY7zeDP20Q4hAVqncxv9C4s0YiWNM6w=", - "h1:Z+FoTCeYnxLl+WynS1BUAnxZlW1F1DgouBAgzvTkbwk=", - "h1:eKF94ScY2csUTysr7T4vMWvHb3A9hf0gUBzKXG0nrLA=", - "h1:gKI0mOpVDlUFdGRFBgetREvZJMrVLeBKpwJwXeUA5jA=", - "h1:gLnXyXqLq5bXrsmxoPGyoC7F2x7p+1A1ndNQNcLB0Wg=", - "h1:hK37RxP5UACnayk9AQKIzFSlpqDprrJ3jOy2EiNAQV4=", - "h1:iz0zF6b7fV6O88uKnYWvkAZqrTSYgZgsVRFBSkiIYEQ=", - "h1:l4IeiC5B5iXJq0yQCl6M6ktov6DDPXKm4ziitiMWvtk=", - "h1:xX8rqMLkR7ZRKRANBtQdQ8qO2n5I7WIy7EOyeXxHr2w=", - "zh:1e3f9f2e94d6ee07c74e137b22ad6199081ae0c2dde1f986bd09fa516a0a6d4b", - "zh:3e9dda2795c76f143d335fb2f78a600845ba9bdaf87d400a1a3131b533d641ef", - "zh:617cf5db531ba0f1648613f31c43481b6736bdec4b08a8980217a0e1d40173b6", - "zh:9d561393fc9e09ade829a97e0e5f58c8efd010f0a6cd513d41a0d3baf5e66d98", - "zh:a1932e5614a920cca5372733686bcd8b8d80f7c9dac7b570dd49916982853004", - "zh:b7e6eeb2a4998dcf74a2f005da23b99fd1cf89e45c77424a288a27f7c1b5c562", - "zh:baec97748db05ce4b24a6d91f8bad2f3db7414f68c41d78782c410a47b4a460a", - "zh:ce1eb226304a65a29c1e70af4c05d359168ef70ad297e37de54d7070619a50c1", - "zh:d04e582146310375c9bb7decfbed3acef537d70be77201de3ca235cfbc6f64f6", - "zh:df4098cd6b961d1cf0ea858f2964afadb264c8ee3ccf59215f620c421573ffa0", - "zh:ec1837c5a6b4b6c77c6587a98cc0978dbfeb6be0fb7f1c9618f1e66213d81e6b", + "h1:5aUNrEyEto0kuqvVlot0oJIfjZvufkaVpBLFRAHKYEk=", + "h1:7e25Wr4cpUvlAcwL+9ZOeeA1xha84LqTZNviDaVQFlo=", + "h1:8hK4uDEChFAWE9MvC+/HBB4WUkhJdedn7Q4pLJEQDl4=", + "h1:HZdmFPnC/+x6si15pq4rGYv/1TrCcyQXLnDMqq1SONw=", + "h1:UNZga7kYMfYfDHmuP6LvHmJNXlb3fyvRY1tA9ol6yY4=", + "h1:ZJgJLXK4nZKfj1z2TIKCKa+7Jt+p1G5Mwty2PTF7Tso=", + "h1:iTxbOUuean5hkvi0xyxU+UXK5HT3DfxZYumlJHphCIw=", + "h1:kZJbZZTpZVW6rfj0wt4I7VFekUEDD5CRa1sAP6wrwGI=", + "h1:uIzu9HMGN1ySZ1s+iYCKY9UqsgCjgH05tnBg1DgHtV4=", + "h1:uulWiJ93kZmKKh6/EtHktJQ901npRmTb/ao7oTP402w=", + "h1:zQ3svnDlwO7XtuXurLKLanW7arcRbFmw/pUd1DzLuEU=", + "zh:2035e461a94bd4180557a06f8e56f228a8a035608d0dac4d08e5870cf9265276", + "zh:3f15778a22ef1b9d0fa28670e5ea6ef1094b0be2533f43f350a2ef15d471b353", + "zh:4f1a4d03b008dd958bcd6bf82cf088fbaa9c121be2fd35e10e6b06c6e8f6aaa1", + "zh:5859f31c342364e849b4f8c437a46f33e927fa820244d0732b8d2ec74a95712d", + "zh:693d0f15512ca8c6b5e999b3a7551503feb06b408b3836bc6a6403e518b9ddab", + "zh:7f4912bec5b04f5156935292377c12484c13582151eb3c2555df409a7e5fb6e0", + "zh:bb9a509497f3a131c52fac32348919bf1b9e06c69a65f24607b03f7b56fb47b6", + "zh:c1b0c64e49ac591fd038ad71e71403ff71c07476e27e8da718c29f0028ea6d0d", + "zh:dd4ca432ee14eb0bb0cdc0bb463c8675b8ef02497be870a20d8dfee3e7fe52b3", + "zh:df58bb7fea984d2b11709567842ca4d55b3f24e187aa6be99e3677f55cbbe7da", "zh:f569b65999264a9416862bca5cd2a6177d94ccb0424f3a4ef424428912b9cb3c", + "zh:f7fb37704da50c096f9c7c25e8a95fe73ce1d3c5aab0d616d506f07bc5cfcdd8", ] } diff --git a/terraform/infrastructure/azure/main.tf b/terraform/infrastructure/azure/main.tf index a58825d90..a749b8cf6 100644 --- a/terraform/infrastructure/azure/main.tf +++ b/terraform/infrastructure/azure/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { azurerm = { source = "hashicorp/azurerm" - version = "4.15.0" + version = "4.16.0" } random = { source = "hashicorp/random" diff --git a/terraform/infrastructure/azure/modules/load_balancer_backend/main.tf b/terraform/infrastructure/azure/modules/load_balancer_backend/main.tf index 3a90565b3..b78659fa5 100644 --- a/terraform/infrastructure/azure/modules/load_balancer_backend/main.tf +++ b/terraform/infrastructure/azure/modules/load_balancer_backend/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { azurerm = { source = "hashicorp/azurerm" - version = "4.15.0" + version = "4.16.0" } } } diff --git a/terraform/infrastructure/azure/modules/scale_set/main.tf b/terraform/infrastructure/azure/modules/scale_set/main.tf index 2d0979cc6..50652e02f 100644 --- a/terraform/infrastructure/azure/modules/scale_set/main.tf +++ b/terraform/infrastructure/azure/modules/scale_set/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { azurerm = { source = "hashicorp/azurerm" - version = "4.15.0" + version = "4.16.0" } random = { source = "hashicorp/random" diff --git a/terraform/infrastructure/iam/aws/.terraform.lock.hcl b/terraform/infrastructure/iam/aws/.terraform.lock.hcl index 1e826be2d..91dd9df3a 100644 --- a/terraform/infrastructure/iam/aws/.terraform.lock.hcl +++ b/terraform/infrastructure/iam/aws/.terraform.lock.hcl @@ -2,38 +2,38 @@ # Manual edits may be lost in future updates. provider "registry.terraform.io/hashicorp/aws" { - version = "5.83.1" - constraints = "5.83.1" + version = "5.84.0" + constraints = "5.84.0" hashes = [ - "h1:8KI8wFWW2iPYVMyNGI75bxgmwy8MjZk4G6Quut5H7x8=", - "h1:DsW/pXMvg0Dhe+SaKRkAK1Knfr8bVsqENa7sLLyOBtI=", - "h1:L3bkBWmhaqNTvFylxJbAgnJIix30n1fFrvfSS/JkNFg=", - "h1:OGnYC6C0PsiB2K0BcjaCzEFkZhKQ9rq2sEP8d1djH08=", - "h1:OlxnMPwNjMbASLyyPmIsCwdEslb3Q2zzvBgxQVJalc8=", - "h1:Rz48OWTGwGhwY9yHPTgfmnKP1a9R2iUWyKsOBkvabmU=", - "h1:UfCtsy1RE6chDN/qzWdcDg8g8QENo74xqaUS3oPbnsQ=", - "h1:YEZLk+HoD/Oz9VC0M7UoMTAFEvoqAwfXLgPc+9ndpVU=", - "h1:Yy3K7R7881H72rQDzG6qjZVkrWA6DGJzfE21TionY7w=", - "h1:g1YrU/FiK0ty5J+WVYJIKHSaSU0g9VboXwstUxD0JzU=", - "h1:huw6LBQrOHtsv4Wqu99jgozvl47Qsd5XZDgxAHj86Ds=", - "h1:jEKbxB3GtA9ak4XXkaIXTMbnu/SDiiqNKDeF/78XrHc=", - "h1:mmZDuh7DyVJ+1UOAaJZ3gh42YASLIFkbxy7sdPiui/8=", - "h1:vInFMDq9oMs53/i+7IU8hZgmTLhFfng8L8kbuALZxSI=", - "zh:0313253c78f195973752c4d1f62bfdd345a9c99c1bc7a612a8c1f1e27d51e49e", - "zh:108523f3e9ebc93f7d900c51681f6edbd3f3a56b8a62b0afc31d8214892f91e0", - "zh:175b9bf2a00bea6ac1c73796ad77b0e00dcbbde166235017c49377d7763861d8", - "zh:1c8bf55b8548bbad683cd6d7bdb03e8840a00b2422dc1529ffb9892820657130", - "zh:22338f09bae62d5ff646de00182417f992548da534fee7d98c5d0136d4bd5d7a", - "zh:92de1107ec43de60612be5f6255616f16a9cf82d88df1af1c0471b81f3a82c16", + "h1:897cPKLnktFTBHxlPDyv52hQoR7rUy52Tzr9F/bvXW0=", + "h1:EJLTu1eqP93P4+DexFZHnuMCwEapkmHhEUirUT+tjZw=", + "h1:MVppdPvKcROdwwj1i7OMoZ/ODFZlqrYr7GVHI1Fevb8=", + "h1:MsFKMU05GLbXfXQZHqy+eC5FC5hDxyRB1irY3lvAaf8=", + "h1:N0mARumaxRCk1FmbDiEW89izbpV/3jkWowrm/78HucQ=", + "h1:OJ53RNte7HLHSMxSkzu1S6H8sC0T8qnCAOcNLjjtMpc=", + "h1:TpsSFMkiuLC1V29n4Ov99g4L6jlsBmBMWxqDX3GZNww=", + "h1:X50oGSrQb2Hzf6i1BWnYOqIneJSy7TiWNtKK+VY+aGA=", + "h1:dwpeFUdcxgXVAc0JSqO57xf0/r2qOBLPloombCQWFz8=", + "h1:eeLhwhBhj96w3YFnTcOMPV0ybGER5fbv/ihcTMeoTk4=", + "h1:iBnPrv1hIjnS26jHVGXuxTDF27OaVOx2XJ0Sbp45qHs=", + "h1:lL0Ftd7QOGinm/1w/1qwfoj6urdJsmRSVxV+xfBD8R4=", + "h1:mwHAD66PY6wi858oGl5NcWGfA9X7mdxPrZrAGfJGS3A=", + "h1:p7kabmCUZYyP5A6VqtIvuy/+CTiGn03jVdcIFMbQkOI=", + "zh:078f77438aba6ec8bf9154b7d223e5c71c48d805d6cd3bcf9db0cc1e82668ac3", + "zh:1f6591ff96be00501e71b792ed3a5a14b21ff03afec9a1c4a3fd9300e6e5b674", + "zh:2ab694e022e81dd74485351c5836148a842ed71cf640664c9d871cb517b09602", + "zh:33c8ccb6e3dc496e828a7572dd981366c6271075c1189f249b9b5236361d7eff", + "zh:6f31068ebad1d627e421c72ccdaafe678c53600ca73714e977bf45ff43ae5d17", + "zh:7488623dccfb639347cae66f9001d39cf06b92e8081975235a1ac3a0ac3f44aa", + "zh:7f042b78b9690a8725c95b91a70fc8e264011b836605bcc342ac297b9ea3937d", + "zh:88b56ac6c7209dc0a775b79975a371918f3aed8f015c37d5899f31deff37c61a", "zh:9b12af85486a96aedd8d7984b0ff811a4b42e3d88dad1a3fb4c0b580d04fa425", - "zh:9c7bfb7afea330e6d90e1466125a8cba3db1ed4043c5da52f737459c89290a6e", - "zh:ba59b374d477e5610674b70f5abfe0408e8f809390347372751384151440d3d0", - "zh:bd1c433966002f586d63cb1e3e16326991f238bc6beeb2352be36ec651917b0b", - "zh:ca2b4d1d02651c15261fffa4b142e45def9a22c6069353f0f663fd2046e268f8", - "zh:d8ed98c748f7a3f1a72277cfee9afe346aca39ab319d17402277852551d8f14a", - "zh:ed3d8bc89de5f35f3c5f4802ff7c749fda2e2be267f9af4a850694f099960a72", - "zh:f698732a4391c3f4d7079b4aaa52389da2a460cac5eed438ed688f147d603689", - "zh:f9f51b17f2978394954e9f6ab9ef293b8e11f1443117294ccf87f7f8212b3439", + "zh:a1979ba840d704af0932f8de5f541cbb4caa9b6bbd25ed552a24e6772175ba07", + "zh:b058c0533dae580e69d1adbc1f69e6a80632374abfc10e8634d06187a108e87b", + "zh:c88610af9cf957f8dcf4382e0c9ca566ef10e3290f5de01d4d90b2d81b078aa8", + "zh:e9562c055a2247d0c287772b55abef468c79f8d66a74780fe1c5e5dae1a284a9", + "zh:f7a7c71d28441d925a25c08c4485c015b2d9f0338bc9707443e91ff8e161d3d9", + "zh:fee533e81976d0900aa6fa443dc54ef171cbd901847f28a6e8edb1d161fa6fde", ] } diff --git a/terraform/infrastructure/iam/aws/main.tf b/terraform/infrastructure/iam/aws/main.tf index 6fcedf5ab..6a8ffe6c9 100644 --- a/terraform/infrastructure/iam/aws/main.tf +++ b/terraform/infrastructure/iam/aws/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { aws = { source = "hashicorp/aws" - version = "5.83.1" + version = "5.84.0" } random = { source = "hashicorp/random" diff --git a/terraform/infrastructure/iam/azure/.terraform.lock.hcl b/terraform/infrastructure/iam/azure/.terraform.lock.hcl index 0984f8cf9..34ad5d9ee 100644 --- a/terraform/infrastructure/iam/azure/.terraform.lock.hcl +++ b/terraform/infrastructure/iam/azure/.terraform.lock.hcl @@ -2,61 +2,61 @@ # Manual edits may be lost in future updates. provider "registry.terraform.io/hashicorp/azuread" { - version = "3.0.2" - constraints = "3.0.2" + version = "3.1.0" + constraints = "3.1.0" hashes = [ - "h1:4HpBtur7h9Naz0BUhoJLVMQmmNABvpVDE/v/WC4LuHU=", - "h1:4ONsd+zmaW77NHdwY6tZ9f5Vk4uk5j4c6phuIAYd9c8=", - "h1:Ac2hOMzVtFxZL6U0znQB++O+AHsi47F4nZt0dGMAEJ4=", - "h1:HNrx7UJEDY5Kbx/r1LRQDWnziqvB6x3IU+pEA8Vq7dw=", - "h1:P807RV/+/XY1fylsKngmj2B5l2XOVTzqpd4ylZAwA+M=", - "h1:SDn/pi6q3CZyt9T8Bgobb91WziY2iE1teqr9Y8TlfJw=", - "h1:Sbb9HgPsFPsY3Jv8Kn+eoyYXoWHLWcODr7Okh/V001k=", - "h1:XUrQ/352oXVMh1ya8E7uMAmaC69zNICCIKqZ3kA4nXw=", - "h1:k0kPplqH7FWmnYeCXXrFIeCshgF1tC4LLhfk66bos3w=", - "h1:sYCyzbPpSYu2XDah8XqBUITQAfB0x4j4Twh6lw2C4CA=", - "h1:yQqvUtgtrYKGpIygdM8P6N+pvMWJJWIsVdPow29VE20=", - "zh:16e724b80a9004c7978c30f69a73c98ff63eb8a03937dd44c2a8f0ea0438b7a3", + "h1:3IL36hU+a3ItNQcD4DUKMyCzQL99gYPTUCmzhOcWk7k=", + "h1:5FtOiormKTYibFrWcyjVLpSOaZmGE57HthZk1zM9PDI=", + "h1:5bFl5kqASmq2HW12dkTlpveG2sRPeSPIYxOJJ7nxtNE=", + "h1:Lsc0jEHsk+Btz05IaoPjCL7UHFatc7SmDtOdgs9VBOk=", + "h1:QY/V8YuAw2phme+ryKEbZ/9B+Xi7SfXAOVr4uBoRqpk=", + "h1:UmSL7MD8ULg/WlRgwisD5lHsjcg9l8AO7AeO0XN96dU=", + "h1:W7fSBa52yEvfF68nDpMpdq/Cmv7etcqMuC+sQfI9S98=", + "h1:oRliSu2DocxHIV4tIlr+jeOPw1IL8pipjAPNbXAWJD0=", + "h1:sBGDtSwT8Cz4NLBdR+LPPZW0L7kEIzOyvPDjv31COMw=", + "h1:ukyPZG2fnTkWoeOizY2c5s5OyOKIwNkkNdBtgnK9W60=", + "h1:waefTxGnXGI5s3eq8THePtMmfwd4xdWnNh2GrauM9L4=", + "zh:01b796cf12e93cc811cb15c8465605e75de170802060f9e2fe114835968960dd", + "zh:12005fbffb84467ff1d4ce9317370834d1279743bc201d3db95f36315cdf8157", "zh:1c3e89cf19118fc07d7b04257251fc9897e722c16e0a0df7b07fcd261f8c12e7", - "zh:2bbbf13713ca4767267b889471c9fc14a56a8fdf5d1013da3ca78667e3caec64", - "zh:409ccb05431d643a079da082d89db2d95d6afed4769997ac537c8b7de3bff867", - "zh:53e4bca0f5d015380f7f524f36344afe6211ccaf614bfc69af73ca64a9f47d6c", - "zh:5780be2c1981d090604d7fa4cef675462f17f40e7f3dc501a031488e87a35b8f", - "zh:850e61a1b3e64c752c418526ccf48653514c861b36f5feb631619f906f7e99a0", - "zh:8c3565bfcea006a734149cc080452a9daf7d2a9d5362eb7e0a088b6c0d7f0f03", - "zh:908b9e6ad49d5d21173ecefc7924902047611be93bbf8e7d021aa9563358396f", - "zh:a2a79765c029bc58966eff61cb6e9b0ee14d2ac52b0a22fc7dfa35c9a49af669", - "zh:c7f56cbe8743e9ba81fce871bc97d9c07abe86770d9ee7ffefbf3882a61ba89a", - "zh:d4dba80e33421b30d81c62611fb7fc62ad39afecc6484436e635913cd8553e67", + "zh:1daf7d4ade44e69593488c1f6571b4fbdaf01ec41538207de1f12609b3830907", + "zh:386965c0529ed083b94968c25441385378d8643a5748591b221e6d6d3cea4dbc", + "zh:46ede0628c300c6d584135daa93733400b9ce968d8aebb3f925d904b3fcfa781", + "zh:7af453bf5217e1818ca5c2126edb8fe573c85f17a0557415a3bc7ae92a8652f5", + "zh:b6014600409715ca37aa85ddb066698f592b7d104f09c12a68d45c5b00404272", + "zh:bca84d10cd1e805e6d31a888eb6737a96aee14e1b5b919dee73d2a5a8ff85beb", + "zh:bd7d6e6c2a086bafdeeb33d5d4f919a8789ef3acf1a0baf2b8ea43996b96c213", + "zh:e5b7840b1b9d90c3f6be9a59400b7d0580376415a79aa740eba7f97bf35c25ef", + "zh:e94e114b205de36d60bc17a3758f9c4bfc6b01e63be81ae1d9699f9bf9650362", ] } provider "registry.terraform.io/hashicorp/azurerm" { - version = "4.15.0" - constraints = "4.15.0" + version = "4.16.0" + constraints = "4.16.0" hashes = [ - "h1:1Yfzvj0yCBg8ck1EgqFkhzfWJ1pGYzyjRxJ/9I+8Wwk=", - "h1:HXV4xhFHsM+41zSTE9yxilg/JddsqZYWPpcgGX+CL1U=", - "h1:XiRrUHid+1nVLY7zeDP20Q4hAVqncxv9C4s0YiWNM6w=", - "h1:Z+FoTCeYnxLl+WynS1BUAnxZlW1F1DgouBAgzvTkbwk=", - "h1:eKF94ScY2csUTysr7T4vMWvHb3A9hf0gUBzKXG0nrLA=", - "h1:gKI0mOpVDlUFdGRFBgetREvZJMrVLeBKpwJwXeUA5jA=", - "h1:gLnXyXqLq5bXrsmxoPGyoC7F2x7p+1A1ndNQNcLB0Wg=", - "h1:hK37RxP5UACnayk9AQKIzFSlpqDprrJ3jOy2EiNAQV4=", - "h1:iz0zF6b7fV6O88uKnYWvkAZqrTSYgZgsVRFBSkiIYEQ=", - "h1:l4IeiC5B5iXJq0yQCl6M6ktov6DDPXKm4ziitiMWvtk=", - "h1:xX8rqMLkR7ZRKRANBtQdQ8qO2n5I7WIy7EOyeXxHr2w=", - "zh:1e3f9f2e94d6ee07c74e137b22ad6199081ae0c2dde1f986bd09fa516a0a6d4b", - "zh:3e9dda2795c76f143d335fb2f78a600845ba9bdaf87d400a1a3131b533d641ef", - "zh:617cf5db531ba0f1648613f31c43481b6736bdec4b08a8980217a0e1d40173b6", - "zh:9d561393fc9e09ade829a97e0e5f58c8efd010f0a6cd513d41a0d3baf5e66d98", - "zh:a1932e5614a920cca5372733686bcd8b8d80f7c9dac7b570dd49916982853004", - "zh:b7e6eeb2a4998dcf74a2f005da23b99fd1cf89e45c77424a288a27f7c1b5c562", - "zh:baec97748db05ce4b24a6d91f8bad2f3db7414f68c41d78782c410a47b4a460a", - "zh:ce1eb226304a65a29c1e70af4c05d359168ef70ad297e37de54d7070619a50c1", - "zh:d04e582146310375c9bb7decfbed3acef537d70be77201de3ca235cfbc6f64f6", - "zh:df4098cd6b961d1cf0ea858f2964afadb264c8ee3ccf59215f620c421573ffa0", - "zh:ec1837c5a6b4b6c77c6587a98cc0978dbfeb6be0fb7f1c9618f1e66213d81e6b", + "h1:5aUNrEyEto0kuqvVlot0oJIfjZvufkaVpBLFRAHKYEk=", + "h1:7e25Wr4cpUvlAcwL+9ZOeeA1xha84LqTZNviDaVQFlo=", + "h1:8hK4uDEChFAWE9MvC+/HBB4WUkhJdedn7Q4pLJEQDl4=", + "h1:HZdmFPnC/+x6si15pq4rGYv/1TrCcyQXLnDMqq1SONw=", + "h1:UNZga7kYMfYfDHmuP6LvHmJNXlb3fyvRY1tA9ol6yY4=", + "h1:ZJgJLXK4nZKfj1z2TIKCKa+7Jt+p1G5Mwty2PTF7Tso=", + "h1:iTxbOUuean5hkvi0xyxU+UXK5HT3DfxZYumlJHphCIw=", + "h1:kZJbZZTpZVW6rfj0wt4I7VFekUEDD5CRa1sAP6wrwGI=", + "h1:uIzu9HMGN1ySZ1s+iYCKY9UqsgCjgH05tnBg1DgHtV4=", + "h1:uulWiJ93kZmKKh6/EtHktJQ901npRmTb/ao7oTP402w=", + "h1:zQ3svnDlwO7XtuXurLKLanW7arcRbFmw/pUd1DzLuEU=", + "zh:2035e461a94bd4180557a06f8e56f228a8a035608d0dac4d08e5870cf9265276", + "zh:3f15778a22ef1b9d0fa28670e5ea6ef1094b0be2533f43f350a2ef15d471b353", + "zh:4f1a4d03b008dd958bcd6bf82cf088fbaa9c121be2fd35e10e6b06c6e8f6aaa1", + "zh:5859f31c342364e849b4f8c437a46f33e927fa820244d0732b8d2ec74a95712d", + "zh:693d0f15512ca8c6b5e999b3a7551503feb06b408b3836bc6a6403e518b9ddab", + "zh:7f4912bec5b04f5156935292377c12484c13582151eb3c2555df409a7e5fb6e0", + "zh:bb9a509497f3a131c52fac32348919bf1b9e06c69a65f24607b03f7b56fb47b6", + "zh:c1b0c64e49ac591fd038ad71e71403ff71c07476e27e8da718c29f0028ea6d0d", + "zh:dd4ca432ee14eb0bb0cdc0bb463c8675b8ef02497be870a20d8dfee3e7fe52b3", + "zh:df58bb7fea984d2b11709567842ca4d55b3f24e187aa6be99e3677f55cbbe7da", "zh:f569b65999264a9416862bca5cd2a6177d94ccb0424f3a4ef424428912b9cb3c", + "zh:f7fb37704da50c096f9c7c25e8a95fe73ce1d3c5aab0d616d506f07bc5cfcdd8", ] } diff --git a/terraform/infrastructure/iam/azure/main.tf b/terraform/infrastructure/iam/azure/main.tf index f1b0960fe..b87630a0e 100644 --- a/terraform/infrastructure/iam/azure/main.tf +++ b/terraform/infrastructure/iam/azure/main.tf @@ -2,11 +2,11 @@ terraform { required_providers { azurerm = { source = "hashicorp/azurerm" - version = "4.15.0" + version = "4.16.0" } azuread = { source = "hashicorp/azuread" - version = "3.0.2" + version = "3.1.0" } } } diff --git a/terraform/infrastructure/openstack/.terraform.lock.hcl b/terraform/infrastructure/openstack/.terraform.lock.hcl index c927d72ee..cd8658f5f 100644 --- a/terraform/infrastructure/openstack/.terraform.lock.hcl +++ b/terraform/infrastructure/openstack/.terraform.lock.hcl @@ -26,38 +26,38 @@ provider "registry.terraform.io/hashicorp/random" { } provider "registry.terraform.io/stackitcloud/stackit" { - version = "0.38.0" - constraints = "0.38.0" + version = "0.38.1" + constraints = "0.38.1" hashes = [ - "h1:40ZDXns1Ac3panUPdAyqQU8px4GHd05n53tb8zS1hD4=", - "h1:4O/2HwjIPNULckGWM2HaQotQx5q/bREolvaZX6BJOVE=", - "h1:A+b8ZyBg+bwzpHG2VcKCSW/Bcz6xCs24JOByxenfsYg=", - "h1:AiUF9BaGYO3ELegCWpFi1hRw4X6dYlYgHMC/VCf9/1c=", - "h1:S9EN3nH+0BRfIJ9ehtqETZ4TKOSmkOVh5XKEBN8Bgjs=", - "h1:T5LZXJhkEYA/5s8Fujkzu7jE5xRBJoM9nzXI1rE/MR8=", - "h1:YkeIs+0P1Arb8typsARaJyK74/YenHPrNT/k1bzq/jM=", - "h1:YnFnWhlr5AOeBjU8DI75L86I8bBSOttlOkbLkIb9BfA=", - "h1:aME5ed/dDBj1L3wDzO56xh/2kdTLv1iAd56tPRFexa0=", - "h1:cFoBB7Y0r5mwkFEdqcQDsSevIlvLKNO+SLkDILk5c3g=", - "h1:f6SnX9jNuefX289DaCniB4HCfmHT4tjfUb6dGicIKpc=", - "h1:fSg8U1g0zjtJkefRniRglJJwI5txvugK3KFpqqyHh9Y=", - "h1:sj/sZYInVdiGHpad8oqtfmLQOBRJ/J77tNr5SwQHPUM=", - "h1:zuZU0jLyefzdsBy6XTYsU04QlfqCpg9GbZ56+xofV1g=", - "zh:0bfae1c987aa2aeaac0bce67efd427ec85d28b53d5e34436ba70e3b35c5d6bee", + "h1:1LAGJMIsTnf+DhVZDZLtpof5FB7VtEsxE98p1t5PuOs=", + "h1:1dQrHeQdOpewhnh/Rz6JIJqj6kyIwso9w7s6tCGDtsM=", + "h1:4fYdfWm+ti2xYTX90UGOrYkVLtM8tSi+HfkcBJdIObM=", + "h1:7TooHG6to8D2RlDoEP0Fuz0Lktchmu0H0oBByVzMwKM=", + "h1:Km8FPzLnedZcFENgo4u4af37r+VkCWtfAf9dMznOxqg=", + "h1:TvFy03F4/9vesitFMBrIkHC9iWX1eeV4wj0XAHdpnVA=", + "h1:Uis0BoqSQfXvPyV3CbEIjKNgTqbh3NhQRPkOuGpNmn4=", + "h1:XtQ8SWl4Pqf1aAebXj9PoOZrkqgjcOZNuPj6dPuMV/M=", + "h1:Y0kOAyLn1m/qpue90crAffDbDkq7xHnIJGxw5DGKEP4=", + "h1:fh2O14WRqldJx5YBpdLNPyqHg3WHVeJmM44hoF5YQl8=", + "h1:gY+i4W98ezO6gaVNID3kLA0+OYeMd/9aMOqdJzIdDN4=", + "h1:hPo/FfJ8IfaB50Zlu/by+2icTWhAgackLdzsd2JApos=", + "h1:oBE467k/eARxlMCaCW+3OgpVC1HkZNIP+6ETXmqUPYk=", + "h1:wS1JAwpfkBgAKDCUPlp+dUhcMNaEL4XnFK/5Z4DN+IE=", + "zh:084513bebdc2dd7cdfc8e4686ac4ba25e0bf9290c133a62f89a1544d13626fd9", + "zh:0958295f3fa2af31e89988af4d9118321867d1ec85e3fcf24c1da6f39300d09b", "zh:0dde99e7b343fa01f8eefc378171fb8621bedb20f59157d6cc8e3d46c738105f", - "zh:2420773eb1aa168e03ecfe5fbbee19b4137bc4b98500a4661fe087fa2a764f92", - "zh:25f463534efef74903f8cc2ca5ad12ce075bcfe6bded9bb92a82325bd90d05f6", - "zh:36bb57ab2d0cd1438b098cb2ced53bfec9d9b99a9168f98319243089f5f717c3", - "zh:39e4289195e418078d13599876fb141938a0d1dc27f1cefe5fdce3675de68af7", - "zh:577872ca94c549c58a235cc7de312b2bb801c27f2e94095eb50c0c7c8cfc9e6f", - "zh:5c2f585d9ba5972764d9600d2f68951bceed36a6b173f76f6b80b72f0742eaec", - "zh:5fc887474340fd7c85c82b0b77a27e562aa5d1105de4efefc874b5e4453d2770", - "zh:6bc00cae3d3187574b46b0636137b60dc7068bfcbc05dfb521495c3301f1ca9a", - "zh:765f6813ef96c65f22ff7c035ca27e2926e26761f8d144a78f254b38cbb08307", - "zh:ba3b301fc5ab75b85a1c2b36ce2158a1af52aef753751964d7b4515de698f41b", - "zh:f2d9a79cde383201bf7525dba60c1b0bd4879673daa2327718301098aa590b70", - "zh:fa122db84826861c6adbc2d0a029ade3e534f01914a8b6b89cf1e76441a98fc3", - "zh:fb37573fdedaf26d11d0be257a6331ae416d0273eb9f9958f77e2441e662339b", + "zh:210c657417030db1053382e5e622e658b8529b3ef14c01c6387a5c6123454e15", + "zh:3b5dbfa4391300b0b62dbf40441d4448c9b9b6a6a501a07c2fabde4b9e9820b0", + "zh:4976de748f0bcd0317f9a3fdcdd179ba9609532359ecee92c51a64c212a91608", + "zh:4ba4651d6e7ca04befe4bac30daf38b603ec5e3477cf5d92e3612521537e2af5", + "zh:55e1c7e9137c41e3e971554280ee0247593fcbf0c4da0450f0892d016ca3ad63", + "zh:7fa01355c2b3cd2ff5067234190dcf052391de4f708203ae81a9ea67fee4c28e", + "zh:af244a5cb1c0166f64900e794b99feaf5bc5120fdd85c1ae34f11390ac6bd435", + "zh:cc386615a10b268e31e7b9357a88be809eeb3dd3168d13e1b5237558947598cf", + "zh:da6220184444728f949b3cf70ca32d3aa87eac8633b882e622a1b78fd8a63bb7", + "zh:e058bcaf81b84ba74a1ce9f0f89d7e8bf564558a6f312cc60ce9e939bba90eb0", + "zh:e8f8e2e2ee2c2069ad552ff4350414fde874a04db058c03544917ddb88140e0c", + "zh:fe7fa7fca9d5e7ccfec95ba6ff9ff00e13a5de87b0378293dbd43d3e19aeb0a6", ] } diff --git a/terraform/infrastructure/openstack/main.tf b/terraform/infrastructure/openstack/main.tf index 9865f3e89..1ccbe1542 100644 --- a/terraform/infrastructure/openstack/main.tf +++ b/terraform/infrastructure/openstack/main.tf @@ -7,7 +7,7 @@ terraform { stackit = { source = "stackitcloud/stackit" - version = "0.38.0" + version = "0.38.1" } random = { diff --git a/terraform/infrastructure/openstack/modules/stackit_loadbalancer/main.tf b/terraform/infrastructure/openstack/modules/stackit_loadbalancer/main.tf index 4bc569da1..5156c30d1 100644 --- a/terraform/infrastructure/openstack/modules/stackit_loadbalancer/main.tf +++ b/terraform/infrastructure/openstack/modules/stackit_loadbalancer/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { stackit = { source = "stackitcloud/stackit" - version = "0.38.0" + version = "0.38.1" } } } From ebbe61727c34aa68a329de4e0eb841c58d3f2e62 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 21 Jan 2025 10:06:09 +0100 Subject: [PATCH 073/311] deps: update dependency DeterminateSystems/nix-installer to v0.34.0 (#3607) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/reproducible-builds.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/reproducible-builds.yml b/.github/workflows/reproducible-builds.yml index 2307f6084..bc02b37a5 100644 --- a/.github/workflows/reproducible-builds.yml +++ b/.github/workflows/reproducible-builds.yml @@ -57,7 +57,7 @@ jobs: chmod a+x "$HOME/.local/bin/bazel" echo "$HOME/.local/bin" >> "$GITHUB_PATH" - curl -fsSL -o "$HOME/.local/bin/nix-installer" https://github.com/DeterminateSystems/nix-installer/releases/download/v0.32.2/nix-installer-x86_64-linux # renovate:github-release + curl -fsSL -o "$HOME/.local/bin/nix-installer" https://github.com/DeterminateSystems/nix-installer/releases/download/v0.34.0/nix-installer-x86_64-linux # renovate:github-release chmod a+x "$HOME/.local/bin/nix-installer" "$HOME/.local/bin/nix-installer" install --no-confirm From e9a6513346b47f8a94d3fe25978aac187be6356d Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 21 Jan 2025 10:28:03 +0100 Subject: [PATCH 074/311] deps: update actions/setup-go action to v5.3.0 (#3605) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/build-ccm-gcp.yml | 2 +- .github/workflows/build-os-image-scheduled.yml | 2 +- .github/workflows/codeql.yml | 2 +- .github/workflows/release.yml | 2 +- .github/workflows/test-operator-codegen.yml | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/build-ccm-gcp.yml b/.github/workflows/build-ccm-gcp.yml index ee9a56e0e..2f65d49c5 100644 --- a/.github/workflows/build-ccm-gcp.yml +++ b/.github/workflows/build-ccm-gcp.yml @@ -29,7 +29,7 @@ jobs: fetch-depth: 0 - name: Setup Go environment - uses: actions/setup-go@3041bf56c941b39c61721a86cd11f3bb1338122a # v5.2.0 + uses: actions/setup-go@f111f3307d8850f501ac008e886eec1fd1932a34 # v5.3.0 with: go-version: "1.23.5" cache: false diff --git a/.github/workflows/build-os-image-scheduled.yml b/.github/workflows/build-os-image-scheduled.yml index 6149dddca..4ac19874b 100644 --- a/.github/workflows/build-os-image-scheduled.yml +++ b/.github/workflows/build-os-image-scheduled.yml @@ -65,7 +65,7 @@ jobs: token: ${{ secrets.CI_COMMIT_PUSH_PR }} - name: Setup Go environment - uses: actions/setup-go@3041bf56c941b39c61721a86cd11f3bb1338122a # v5.2.0 + uses: actions/setup-go@f111f3307d8850f501ac008e886eec1fd1932a34 # v5.3.0 with: go-version: "1.23.5" cache: false diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index 387f614dd..b57240d6c 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -38,7 +38,7 @@ jobs: - name: Setup Go environment if: matrix.language == 'go' - uses: actions/setup-go@3041bf56c941b39c61721a86cd11f3bb1338122a # v5.2.0 + uses: actions/setup-go@f111f3307d8850f501ac008e886eec1fd1932a34 # v5.3.0 with: go-version: "1.23.5" cache: false diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 53204f8cc..4890a5888 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -255,7 +255,7 @@ jobs: ref: ${{ needs.verify-inputs.outputs.WORKING_BRANCH }} - name: Setup Go environment - uses: actions/setup-go@3041bf56c941b39c61721a86cd11f3bb1338122a # v5.2.0 + uses: actions/setup-go@f111f3307d8850f501ac008e886eec1fd1932a34 # v5.3.0 with: go-version: "1.23.5" cache: true diff --git a/.github/workflows/test-operator-codegen.yml b/.github/workflows/test-operator-codegen.yml index 59bd27cf3..bc157c11d 100644 --- a/.github/workflows/test-operator-codegen.yml +++ b/.github/workflows/test-operator-codegen.yml @@ -26,7 +26,7 @@ jobs: ref: ${{ !github.event.pull_request.head.repo.fork && github.head_ref || '' }} - name: Setup Go environment - uses: actions/setup-go@3041bf56c941b39c61721a86cd11f3bb1338122a # v5.2.0 + uses: actions/setup-go@f111f3307d8850f501ac008e886eec1fd1932a34 # v5.3.0 with: go-version: "1.23.5" cache: true From 92d7fc5385635ae5a95102e9f18b4a39e821bb28 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 21 Jan 2025 11:03:48 +0100 Subject: [PATCH 075/311] deps: update module k8s.io/cri-client to v0.32.1 (#3608) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- go.mod | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/go.mod b/go.mod index f4d2aefe6..b1ac86ce7 100644 --- a/go.mod +++ b/go.mod @@ -13,7 +13,7 @@ replace github.com/martinjungblut/go-cryptsetup => github.com/daniel-weisse/go-c replace ( k8s.io/cloud-provider => k8s.io/cloud-provider v0.32.1 k8s.io/controller-manager => k8s.io/controller-manager v0.32.1 - k8s.io/cri-client => k8s.io/cri-client v0.31.1 + k8s.io/cri-client => k8s.io/cri-client v0.32.1 k8s.io/csi-translation-lib => k8s.io/csi-translation-lib v0.32.1 k8s.io/dynamic-resource-allocation => k8s.io/dynamic-resource-allocation v0.31.3 k8s.io/endpointslice => k8s.io/endpointslice v0.31.3 From bea2f33efcda0f9325108dbb31e3527a652620a5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Wei=C3=9Fe?= <66256922+daniel-weisse@users.noreply.github.com> Date: Tue, 21 Jan 2025 13:26:42 +0100 Subject: [PATCH 076/311] renovate: reformat config file for json5 (#3610) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * renovate: include replace directives in Go deps upgrade * renovate: replace deprecated regexManagers with customManagers * renovate: rewrite config in proper json5 --------- Signed-off-by: Daniel Weiße --- renovate.json5 | 486 +++++++++++++++++++++++++++++-------------------- 1 file changed, 289 insertions(+), 197 deletions(-) diff --git a/renovate.json5 b/renovate.json5 index 2ff365329..1fe1e03e5 100644 --- a/renovate.json5 +++ b/renovate.json5 @@ -1,304 +1,396 @@ { - "$schema": "https://docs.renovatebot.com/renovate-schema.json", - "extends": [ - "config:recommended", - ":preserveSemverRanges", - "helpers:pinGitHubActionDigests", - ":separateMajorReleases", - ":semanticCommitsDisabled", + $schema: 'https://docs.renovatebot.com/renovate-schema.json', + extends: [ + 'config:recommended', + ':preserveSemverRanges', + 'helpers:pinGitHubActionDigests', + ':separateMajorReleases', + ':semanticCommitsDisabled', ], - "commitMessagePrefix": "deps:", - "commitMessageAction": "update", - "addLabels": ["dependencies"], - "postUpdateOptions": ["gomodTidy", "gomodUpdateImportPaths"], - "prConcurrentLimit": 4, - "ignorePaths": [ - "internal/constellation/helm/charts/cilium/**", - "internal/constellation/helm/charts/coredns/**", - "internal/constellation/helm/charts/edgeless/csi/charts/aws-csi-driver/**", - "internal/constellation/helm/charts/edgeless/csi/charts/azuredisk-csi-driver/**", - "internal/constellation/helm/charts/edgeless/csi/charts/gcp-compute-persistent-disk-csi-driver/**", - "internal/constellation/helm/charts/edgeless/csi/charts/openstack-cinder-csi/**", - "operators/constellation-node-operator/config/manager/kustomization.yaml", + commitMessagePrefix: 'deps:', + commitMessageAction: 'update', + addLabels: [ + 'dependencies' + ], + postUpdateOptions: [ + 'gomodTidy', + 'gomodUpdateImportPaths', + 'gomodMassage' + ], + prConcurrentLimit: 4, + ignorePaths: [ + 'internal/constellation/helm/charts/cilium/**', + 'internal/constellation/helm/charts/coredns/**', + 'internal/constellation/helm/charts/edgeless/csi/charts/aws-csi-driver/**', + 'internal/constellation/helm/charts/edgeless/csi/charts/azuredisk-csi-driver/**', + 'internal/constellation/helm/charts/edgeless/csi/charts/gcp-compute-persistent-disk-csi-driver/**', + 'internal/constellation/helm/charts/edgeless/csi/charts/openstack-cinder-csi/**', + 'operators/constellation-node-operator/config/manager/kustomization.yaml', + ], + ignoreDeps: [ + 'github.com/edgelesssys/constellation/v2' ], - "ignoreDeps": ["github.com/edgelesssys/constellation/v2"], // Rules for changing renovates behaviour for different packages. // The documentation for configuration options can be found here: // https://docs.renovatebot.com/configuration-options/ - "packageRules": [ + packageRules: [ { - "matchManagers": ["gomod"], - "matchDepTypes": ["indirect"], - "matchUpdateTypes": [ - "minor", - "patch", - "pin", - "pinDigest", - "digest", - "lockFileMaintenance", - "rollback", - "bump", + matchManagers: [ + 'gomod' ], - "enabled": true, - "prPriority": -30, + matchDepTypes: [ + 'indirect' + ], + matchUpdateTypes: [ + 'minor', + 'patch', + 'pin', + 'pinDigest', + 'digest', + 'lockFileMaintenance', + 'rollback', + 'bump', + ], + enabled: true, + prPriority: -30, }, { // Group update of direct Go dependencies. - "groupName": "Go dependencies", - "matchManagers": ["gomod"], - "matchDepTypes": ["require"], - "matchUpdateTypes": [ - "bump", - "digest", - "lockFileMaintenance", - "minor", - "patch", - "pin", - "pinDigest", - "rollback", + groupName: 'Go dependencies', + matchManagers: [ + 'gomod' + ], + matchDepTypes: [ + 'require', + 'replace' + ], + matchUpdateTypes: [ + 'bump', + 'digest', + 'lockFileMaintenance', + 'minor', + 'patch', + 'pin', + 'pinDigest', + 'rollback', + ], + schedule: [ + 'before 8am on monday', ], - "schedule": ["before 8am on monday"], }, { // Group update of Terraform dependencies. - "groupName": "Terraform dependencies", - "matchManagers": ["terraform"], - "matchUpdateTypes": [ - "bump", - "digest", - "lockFileMaintenance", - "minor", - "patch", - "pin", - "pinDigest", - "rollback", + groupName: 'Terraform dependencies', + matchManagers: [ + 'terraform' ], - "schedule": ["before 8am on wednesday"], - }, - { - "matchManagers": ["bazelisk", "bazel", "bazel-module"], - "matchDepNames": ["bazel", "io_bazel_rules_go", "bazel_gazelle", "rules_go", "gazelle"], - "groupName": "bazel (core)", - }, - { - "matchManagers": ["bazel"], - "matchDepNames": [ - "!bazel", - "!io_bazel_rules_go", - "!bazel_gazelle", - "!rules_go", - "!gazelle", + matchUpdateTypes: [ + 'bump', + 'digest', + 'lockFileMaintenance', + 'minor', + 'patch', + 'pin', + 'pinDigest', + 'rollback', ], - "groupName": "bazel (plugins)", - }, - { - "matchManagers": ["bazel-module"], - "matchDepNames": [ - "!bazel", - "!io_bazel_rules_go", - "!bazel_gazelle", - "!rules_go", - "!gazelle", + schedule: [ + 'before 8am on wednesday', ], - "groupName": "bazel (modules)", }, { - "matchDatasources": ["golang-version"], - "allowedVersions": "1.23", - }, - { - "matchManagers": ["pip_requirements"], - "groupName": "Python dependencies", - }, - { - "matchManagers": ["github-actions"], - "groupName": "GitHub action dependencies", - "matchUpdateTypes": [ - "major", - "minor", - "patch", - "pin", - "pinDigest", - "digest", - "lockFileMaintenance", - "rollback", - "bump", + matchManagers: [ + 'bazelisk', + 'bazel', + 'bazel-module', ], - "schedule": ["before 8am on tuesday"], + matchDepNames: [ + 'bazel', + 'io_bazel_rules_go', + 'bazel_gazelle', + 'rules_go', + 'gazelle', + ], + groupName: 'bazel (core)', }, { - "matchDepNames": ["kubernetes/kubernetes"], - // example match: v1.2.3 (1.2 -> compatibility, 3 -> patch) - "versioning": "regex:^(?v?\\d+\\.\\d+\\.)(?\\d+)$", - "groupName": "Kubernetes versions", - "prPriority": 15, + matchManagers: [ + 'bazel', + ], + matchDepNames: [ + '!bazel', + '!io_bazel_rules_go', + '!bazel_gazelle', + '!rules_go', + '!gazelle', + ], + groupName: 'bazel (plugins)', }, { - "matchDepNames": [ - "registry.k8s.io/provider-aws/cloud-controller-manager", + matchManagers: [ + 'bazel-module' + ], + matchDepNames: [ + '!bazel', + '!io_bazel_rules_go', + '!bazel_gazelle', + '!rules_go', + '!gazelle', + ], + groupName: 'bazel (modules)', + }, + { + matchDatasources: [ + 'golang-version' + ], + allowedVersions: '1.23', + }, + { + matchManagers: [ + 'pip_requirements' + ], + groupName: 'Python dependencies', + }, + { + matchManagers: [ + 'github-actions' + ], + groupName: 'GitHub action dependencies', + matchUpdateTypes: [ + 'major', + 'minor', + 'patch', + 'pin', + 'pinDigest', + 'digest', + 'lockFileMaintenance', + 'rollback', + 'bump', + ], + schedule: [ + 'before 8am on tuesday' + ], + }, + { + matchDepNames: [ + 'kubernetes/kubernetes' ], // example match: v1.2.3 (1.2 -> compatibility, 3 -> patch) - "versioning": "regex:^(?v?\\d+\\.\\d+\\.)(?\\d+)$", - "groupName": "K8s constrained AWS versions", - "prPriority": 15, + versioning: 'regex:^(?v?\\d+\\.\\d+\\.)(?\\d+)$', + groupName: 'Kubernetes versions', + prPriority: 15, }, { - "matchDepNames": [ - "mcr.microsoft.com/oss/kubernetes/azure-cloud-controller-manager", - "mcr.microsoft.com/oss/kubernetes/azure-cloud-node-manager", + matchDepNames: [ + 'registry.k8s.io/provider-aws/cloud-controller-manager', ], // example match: v1.2.3 (1.2 -> compatibility, 3 -> patch) - "versioning": "regex:^(?v?\\d+\\.\\d+\\.)(?\\d+)$", - "groupName": "K8s constrained Azure versions", - "prPriority": 15, + versioning: 'regex:^(?v?\\d+\\.\\d+\\.)(?\\d+)$', + groupName: 'K8s constrained AWS versions', + prPriority: 15, }, { - "matchDepNames": [ - "docker.io/k8scloudprovider/openstack-cloud-controller-manager", + matchDepNames: [ + 'mcr.microsoft.com/oss/kubernetes/azure-cloud-controller-manager', + 'mcr.microsoft.com/oss/kubernetes/azure-cloud-node-manager', ], // example match: v1.2.3 (1.2 -> compatibility, 3 -> patch) - "versioning": "regex:^(?v?\\d+\\.\\d+\\.)(?\\d+)$", - "groupName": "K8s constrained OpenStack versions", - "prPriority": 15, + versioning: 'regex:^(?v?\\d+\\.\\d+\\.)(?\\d+)$', + groupName: 'K8s constrained Azure versions', + prPriority: 15, }, { - "matchDepNames": ["registry.k8s.io/autoscaling/cluster-autoscaler"], + matchDepNames: [ + 'docker.io/k8scloudprovider/openstack-cloud-controller-manager', + ], // example match: v1.2.3 (1.2 -> compatibility, 3 -> patch) - "versioning": "regex:^(?v?\\d+\\.\\d+\\.)(?\\d+)$", - "groupName": "K8s constrained GCP versions", - "prPriority": 15, + versioning: 'regex:^(?v?\\d+\\.\\d+\\.)(?\\d+)$', + groupName: 'K8s constrained OpenStack versions', + prPriority: 15, }, { - "matchDepNames": ["ghcr.io/edgelesssys/cloud-provider-gcp"], + matchDepNames: [ + 'registry.k8s.io/autoscaling/cluster-autoscaler' + ], + // example match: v1.2.3 (1.2 -> compatibility, 3 -> patch) + versioning: 'regex:^(?v?\\d+\\.\\d+\\.)(?\\d+)$', + groupName: 'K8s constrained GCP versions', + prPriority: 15, + }, + { + matchDepNames: [ + 'ghcr.io/edgelesssys/cloud-provider-gcp' + ], // example match: v1.2.3 (1. -> compatibility, 2 -> minor, 3 -> patch) - "versioning": "regex:^(?v\\d+\\.)(?\\d+)\\.(?\\d+)$", - "groupName": "cloud-provider-gcp (K8s version constrained)", - "prPriority": 15, + versioning: 'regex:^(?v\\d+\\.)(?\\d+)\\.(?\\d+)$', + groupName: 'cloud-provider-gcp (K8s version constrained)', + prPriority: 15, }, { - "matchPackagePrefixes": ["ghcr.io/edgelesssys/"], - "excludePackageNames": ["ghcr.io/edgelesssys/cloud-provider-gcp"], - "versioning": "semver", + matchPackageNames: [ + 'ghcr.io/edgelesssys/{/,}**', + '!ghcr.io/edgelesssys/cloud-provider-gcp', + ], + versioning: 'semver', // Allow packages of ghcr.io/edgelesssys to update to unstable prereleases. // This is necessary because renovate will not update minor versions of // containers that are already tagged as a prerelease in the code // if this is not set. - "ignoreUnstable": false, - "groupName": "Constellation containers", - "prPriority": 20, - "schedule": ["before 8am on thursday"], - }, - { - "matchDepNames": [ - "registry.k8s.io/kas-network-proxy/proxy-agent", - "registry.k8s.io/kas-network-proxy/proxy-server", + ignoreUnstable: false, + groupName: 'Constellation containers', + prPriority: 20, + schedule: [ + 'before 8am on thursday' ], - "versioning": "semver", - "groupName": "K8s version independent containers", - "prPriority": 15, }, { - "matchDepNames": ["^k8s.io/client-go"], - "matchUpdateTypes": ["major"], - "enabled": false, + matchDepNames: [ + 'registry.k8s.io/kas-network-proxy/proxy-agent', + 'registry.k8s.io/kas-network-proxy/proxy-server', + ], + versioning: 'semver', + groupName: 'K8s version independent containers', + prPriority: 15, }, { - "matchCategories": ["python", "js", "node"], - "prPriority": -20, + matchDepNames: [ + '^k8s.io/client-go' + ], + matchUpdateTypes: [ + 'major' + ], + enabled: false, }, { - "matchManagers": ["github-actions"], - "matchDepNames": ["slsa-framework/slsa-github-generator"], - "pinDigests": false, + matchCategories: [ + 'python', + 'js', + 'node' + ], + prPriority: -20, }, { - "matchDepPatterns": ["_(darwin|linux)_(arm64|amd64)$"], - "additionalBranchPrefix": "{{packageName}}-", - "groupName": "{{packageName}}", + matchManagers: [ + 'github-actions' + ], + matchDepNames: [ + 'slsa-framework/slsa-github-generator' + ], + pinDigests: false, + }, + { + additionalBranchPrefix: '{{packageName}}-', + groupName: '{{packageName}}', + matchDepNames: [ + '/_(darwin|linux)_(arm64|amd64)$/', + ], }, ], // Regex Managers allow detection of other versions in files that renovate // cannot parse by default. For more information, look at // https://docs.renovatebot.com/modules/manager/regex/ . - "regexManagers": [ + customManagers: [ { - "fileMatch": ["(^|\\/)versions.go$"], - "matchStrings": [ + customType: 'regex', + fileMatch: [ + '(^|\\/)versions.go$' + ], + matchStrings: [ // Match all container packages. // example match:' "registry.io/owner/foo/bar:v1.2.3@sha256:somehash" // renovate:container' // (registry.io/owner/foo/bar -> depName, v1.2.3 -> currentValue, sha256:somehash -> currentDigest) - " \"(?[^\"]*?):(?[^\"]*?)@(?sha256:[a-f0-9]+)\"[^\\n]+\\/\\/ renovate:container", + ' \"(?[^\"]*?):(?[^\"]*?)@(?sha256:[a-f0-9]+)\"[^\\n]+\\/\\/ renovate:container', ], - "datasourceTemplate": "docker", + datasourceTemplate: 'docker', }, { - "fileMatch": ["(^|\\/)versions.go$"], - "matchStrings": [ + customType: 'regex', + fileMatch: [ + '(^|\\/)versions.go$' + ], + matchStrings: [ // Match kubernetes releases. // example match:' "https://dl.k8s.io/v1.2.3/foo" // renovate:kubernetes-release' // (v1.2.3 -> currentValue) - " \"https:\\/\\/dl\\.k8s\\.io\\/(?[^\\/\\s\"]+)\\/[^\"]+\"[^\\n]+\\/\\/ renovate:kubernetes-release", + ' \"https:\\/\\/dl\\.k8s\\.io\\/(?[^\\/\\s\"]+)\\/[^\"]+\"[^\\n]+\\/\\/ renovate:kubernetes-release', // Match kubernetes releases. // example match:' " "v1.2.3" // renovate:kubernetes-release"' // (v1.2.3 -> currentValue) - " \"(?v\\d+\\.\\d+\\.\\d+)\"[^\\n]+\\/\\/ renovate:kubernetes-release", + ' \"(?v\\d+\\.\\d+\\.\\d+)\"[^\\n]+\\/\\/ renovate:kubernetes-release', ], - "depNameTemplate": "kubernetes/kubernetes", - "datasourceTemplate": "github-releases", + depNameTemplate: 'kubernetes/kubernetes', + datasourceTemplate: 'github-releases', }, { - "fileMatch": ["(^|\\/)versions.go$", "[.]github\\/(actions|workflows)\\/.*[.]ya?ml"], - "matchStrings": [ + customType: 'regex', + fileMatch: [ + '(^|\\/)versions.go$', + '[.]github\\/(actions|workflows)\\/.*[.]ya?ml' + ], + matchStrings: [ // Match github releases. // example match:' "https://github.com/foo/bar/releases/download/v1.2.3/foo.bin" // renovate:github-release' // (foo/bar -> depName, v1.2.3 -> currentValue) - "https:\\/\\/github\\.com\\/(?[^\\/\\s\"]+\\/[^\\/\\s\"]+)\\/releases\\/download\\/(?[^\\/\\s\"]+).*renovate:github-release", + 'https:\\/\\/github\\.com\\/(?[^\\/\\s\"]+\\/[^\\/\\s\"]+)\\/releases\\/download\\/(?[^\\/\\s\"]+).*renovate:github-release', ], - "datasourceTemplate": "github-releases", + datasourceTemplate: 'github-releases', }, { - "fileMatch": ["(^|\\/)versions.go$"], - "matchStrings": [ + customType: 'regex', + fileMatch: [ + '(^|\\/)versions.go$' + ], + matchStrings: [ // Match kubernetes cri-tools releases (https://github.com/kubernetes-sigs/cri-tools). // example Match:' "https://github.com/kubernetes-sigs/cri-tools/releases/download/v1.2.3/foo"' // (v1.2.3 -> currentValue) - " \"https:\\/\\/github\\.com\\/kubernetes-sigs\\/cri-tools\\/releases\\/download\\/(?[^\\/\\s\"]+)\\/[^\"]+\"", + ' \"https:\\/\\/github\\.com\\/kubernetes-sigs\\/cri-tools\\/releases\\/download\\/(?[^\\/\\s\"]+)\\/[^\"]+\"', ], - "depNameTemplate": "kubernetes-sigs/cri-tools", - "datasourceTemplate": "github-releases", - "autoReplaceStringTemplate": " \"https://github.com/kubernetes-sigs/cri-tools/releases/download/{{{newValue}}}/crictl-{{{newValue}}}-linux-amd64.tar.gz\"", + depNameTemplate: 'kubernetes-sigs/cri-tools', + datasourceTemplate: 'github-releases', + autoReplaceStringTemplate: ' \"https://github.com/kubernetes-sigs/cri-tools/releases/download/{{{newValue}}}/crictl-{{{newValue}}}-linux-amd64.tar.gz\"', }, { - "fileMatch": ["versions.go$"], - "matchStrings": [ + customType: 'regex', + fileMatch: [ + 'versions.go$' + ], + matchStrings: [ // Match containernetworking plugin releases (https://github.com/containernetworking/plugins). // example Match:' "https://github.com/containernetworking/plugins/releases/download/v1.2.3/foo"' // (v1.2.3 -> currentValue) - " \"https:\\/\\/github\\.com\\/containernetworking\\/plugins\\/releases\\/download\\/(?[^\\/\\s\"]+)\\/[^\"]+\"", + ' \"https:\\/\\/github\\.com\\/containernetworking\\/plugins\\/releases\\/download\\/(?[^\\/\\s\"]+)\\/[^\"]+\"', ], - "depNameTemplate": "containernetworking/plugins", - "datasourceTemplate": "github-releases", - "autoReplaceStringTemplate": " \"https://github.com/containernetworking/plugins/releases/download/{{{newValue}}}/cni-plugins-linux-amd64-{{{newValue}}}.tgz\"", + depNameTemplate: 'containernetworking/plugins', + datasourceTemplate: 'github-releases', + autoReplaceStringTemplate: ' \"https://github.com/containernetworking/plugins/releases/download/{{{newValue}}}/cni-plugins-linux-amd64-{{{newValue}}}.tgz\"', }, { - "fileMatch": ["\\.yaml$", "\\.yml$"], - "matchStrings": [ + customType: 'regex', + fileMatch: [ + '\\.yaml$', + '\\.yml$' + ], + matchStrings: [ // Match `go install` commands. - // example Match: "go install foo.bar@0000000000000000000000000000000000000000" + // example Match: 'go install foo.bar@0000000000000000000000000000000000000000' // (foo.bar -> depName, 0000000000000000000000000000000000000000 -> currentValue) - "go install (?[^@]+?)@(?[0-9a-f]{40})", + 'go install (?[^@]+?)@(?[0-9a-f]{40})', ], - "datasourceTemplate": "go", + datasourceTemplate: 'go', }, { - "fileMatch": ["(^|\\/)e2e_s3proxy/action.yml$"], - "matchStrings": [ + customType: 'regex', + fileMatch: [ + '(^|\\/)e2e_s3proxy/action.yml$' + ], + matchStrings: [ // Match mint tags (ghcr.io/edgelesssys/mint). // example Match:' "ghcr.io/edgelesssys/mint:v1.2.3"' // (ghcr.io/edgelesssys/mint -> depName, v1.2.3 -> currentValue) - "IMAGE: \"(?[^\"]*?):(?[^\"]*?)@(?sha256:[a-f0-9]+)\"[^\\n]+# renovate:mint-fork", + 'IMAGE: \"(?[^\"]*?):(?[^\"]*?)@(?sha256:[a-f0-9]+)\"[^\\n]+# renovate:mint-fork', ], - "datasourceTemplate": "docker", + datasourceTemplate: 'docker', }, ], } From 501d1779ede03b7887b25f089770630fd1766aac Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 21 Jan 2025 16:23:10 +0100 Subject: [PATCH 077/311] deps: update Go dependencies (#3603) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * deps: update Go dependencies * hold back cloud.google.com/go/storage dependency * keep fork replacement at consistent version --------- Signed-off-by: Daniel Weiße Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Daniel Weiße --- go.mod | 10 +++++----- go.sum | 12 ++++++------ renovate.json5 | 3 ++- 3 files changed, 13 insertions(+), 12 deletions(-) diff --git a/go.mod b/go.mod index b1ac86ce7..17cf898a3 100644 --- a/go.mod +++ b/go.mod @@ -15,8 +15,8 @@ replace ( k8s.io/controller-manager => k8s.io/controller-manager v0.32.1 k8s.io/cri-client => k8s.io/cri-client v0.32.1 k8s.io/csi-translation-lib => k8s.io/csi-translation-lib v0.32.1 - k8s.io/dynamic-resource-allocation => k8s.io/dynamic-resource-allocation v0.31.3 - k8s.io/endpointslice => k8s.io/endpointslice v0.31.3 + k8s.io/dynamic-resource-allocation => k8s.io/dynamic-resource-allocation v0.32.1 + k8s.io/endpointslice => k8s.io/endpointslice v0.32.1 k8s.io/externaljwt => k8s.io/externaljwt v0.32.1 k8s.io/kube-aggregator => k8s.io/kube-aggregator v0.32.1 k8s.io/kube-controller-manager => k8s.io/kube-controller-manager v0.32.1 @@ -37,7 +37,7 @@ require ( github.com/Azure/azure-sdk-for-go v68.0.0+incompatible github.com/Azure/azure-sdk-for-go/sdk/azcore v1.17.0 github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.8.1 - github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v6 v6.2.0 + github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v6 v6.3.0 github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/network/armnetwork/v6 v6.2.0 github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/azsecrets v1.3.0 github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.5.0 @@ -56,7 +56,7 @@ require ( github.com/aws/aws-sdk-go-v2/service/s3 v1.73.2 github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.34.13 github.com/aws/smithy-go v1.22.1 - github.com/bazelbuild/buildtools v0.0.0-20240918101019-be1c24cc9a44 + github.com/bazelbuild/buildtools v0.0.0-20250117124929-3648bec1fd3c github.com/bazelbuild/rules_go v0.52.0 github.com/coreos/go-systemd/v22 v22.5.0 github.com/docker/docker v27.5.0+incompatible @@ -137,7 +137,7 @@ require ( k8s.io/kubernetes v1.32.1 k8s.io/mount-utils v0.32.1 k8s.io/utils v0.0.0-20241210054802-24370beab758 - libvirt.org/go/libvirt v1.10009.1 + libvirt.org/go/libvirt v1.11001.0 sigs.k8s.io/controller-runtime v0.20.0 sigs.k8s.io/yaml v1.4.0 ) diff --git a/go.sum b/go.sum index 0168592e2..67da6ee6f 100644 --- a/go.sum +++ b/go.sum @@ -49,8 +49,8 @@ github.com/Azure/azure-sdk-for-go/sdk/keyvault/azkeys v0.10.0 h1:m/sWOGCREuSBqg2 github.com/Azure/azure-sdk-for-go/sdk/keyvault/azkeys v0.10.0/go.mod h1:Pu5Zksi2KrU7LPbZbNINx6fuVrUp/ffvpxdDj+i8LeE= github.com/Azure/azure-sdk-for-go/sdk/keyvault/internal v0.7.1 h1:FbH3BbSb4bvGluTesZZ+ttN/MDsnMmQP36OSnDuSXqw= github.com/Azure/azure-sdk-for-go/sdk/keyvault/internal v0.7.1/go.mod h1:9V2j0jn9jDEkCkv8w/bKTNppX/d0FVA1ud77xCIP4KA= -github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v6 v6.2.0 h1:JAebRMoc3vL+Nd97GBprHYHucO4+wlW+tNbBIumqJlk= -github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v6 v6.2.0/go.mod h1:zflC9v4VfViJrSvcvplqws/yGXVbUEMZi/iHpZdSPWA= +github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v6 v6.3.0 h1:Dc9miZr1Mhaqbb3cmJCRokkG16uk8JKkqOADf084zy4= +github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v6 v6.3.0/go.mod h1:CHo9QYhWEvrKVeXsEMJSl2bpmYYNu6aG12JsSaFBXlY= github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/internal/v3 v3.1.0 h1:2qsIIvxVT+uE6yrNldntJKlLRgxGbZ85kgtz5SNBhMw= github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/internal/v3 v3.1.0/go.mod h1:AW8VEadnhw9xox+VaVd9sP7NjzOAnaZBLRH6Tq3cJ38= github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/network/armnetwork/v6 v6.2.0 h1:HYGD75g0bQ3VO/Omedm54v4LrD3B1cGImuRF3AJ5wLo= @@ -188,8 +188,8 @@ github.com/aws/aws-sdk-go-v2/service/sts v1.33.9 h1:BRVDbewN6VZcwr+FBOszDKvYeXY1 github.com/aws/aws-sdk-go-v2/service/sts v1.33.9/go.mod h1:f6vjfZER1M17Fokn0IzssOTMT2N8ZSq+7jnNF0tArvw= github.com/aws/smithy-go v1.22.1 h1:/HPHZQ0g7f4eUeK6HKglFz8uwVfZKgoI25rb/J+dnro= github.com/aws/smithy-go v1.22.1/go.mod h1:irrKGvNn1InZwb2d7fkIRNucdfwR8R+Ts3wxYa/cJHg= -github.com/bazelbuild/buildtools v0.0.0-20240918101019-be1c24cc9a44 h1:FGzENZi+SX9I7h9xvMtRA3rel8hCEfyzSixteBgn7MU= -github.com/bazelbuild/buildtools v0.0.0-20240918101019-be1c24cc9a44/go.mod h1:PLNUetjLa77TCCziPsz0EI8a6CUxgC+1jgmWv0H25tg= +github.com/bazelbuild/buildtools v0.0.0-20250117124929-3648bec1fd3c h1:J6JtwkUGjzQ5caC/4/JTJ1tFyQ9vwTqJeeuOS/RXUro= +github.com/bazelbuild/buildtools v0.0.0-20250117124929-3648bec1fd3c/go.mod h1:PLNUetjLa77TCCziPsz0EI8a6CUxgC+1jgmWv0H25tg= github.com/bazelbuild/rules_go v0.52.0 h1:+ozpngVAW67pCAwfhepaXSSrG3yHcj8K9hNAxSYBno4= github.com/bazelbuild/rules_go v0.52.0/go.mod h1:M+YrupNArA7OiTlv++rFUgQ6Sm+ZXbQ5HPUj0cGa0us= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= @@ -1119,8 +1119,8 @@ k8s.io/mount-utils v0.32.1 h1:RJOD6xXzEJT/OOJoG1KstfVa8ZXJJPlHb+t2MoulPHM= k8s.io/mount-utils v0.32.1/go.mod h1:Kun5c2svjAPx0nnvJKYQWhfeNW+O0EpzHgRhDcYoSY0= k8s.io/utils v0.0.0-20241210054802-24370beab758 h1:sdbE21q2nlQtFh65saZY+rRM6x6aJJI8IUa1AmH/qa0= k8s.io/utils v0.0.0-20241210054802-24370beab758/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= -libvirt.org/go/libvirt v1.10009.1 h1:Z79EnxEVE190MeULGoq1GY0tb+O18FpYzUNYDHgkrN8= -libvirt.org/go/libvirt v1.10009.1/go.mod h1:1WiFE8EjZfq+FCVog+rvr1yatKbKZ9FaFMZgEqxEJqQ= +libvirt.org/go/libvirt v1.11001.0 h1:QJgpslxY7qkpXZIDxdMHpkDl7FfhgQJwqRTGBbg/S8E= +libvirt.org/go/libvirt v1.11001.0/go.mod h1:1WiFE8EjZfq+FCVog+rvr1yatKbKZ9FaFMZgEqxEJqQ= oras.land/oras-go v1.2.5 h1:XpYuAwAb0DfQsunIyMfeET92emK8km3W4yEzZvUbsTo= oras.land/oras-go v1.2.5/go.mod h1:PuAwRShRZCsZb7g8Ar3jKKQR/2A/qN+pkYxIOd/FAoo= sigs.k8s.io/controller-runtime v0.20.0 h1:jjkMo29xEXH+02Md9qaVXfEIaMESSpy3TBWPrsfQkQs= diff --git a/renovate.json5 b/renovate.json5 index 1fe1e03e5..bd4c85d7c 100644 --- a/renovate.json5 +++ b/renovate.json5 @@ -28,7 +28,8 @@ 'operators/constellation-node-operator/config/manager/kustomization.yaml', ], ignoreDeps: [ - 'github.com/edgelesssys/constellation/v2' + 'github.com/edgelesssys/constellation/v2', + 'github.com/daniel-weisse/go-cryptsetup', ], // Rules for changing renovates behaviour for different packages. // The documentation for configuration options can be found here: From caa80783ebf9580babbdd4ebc5171a1e48eeeed6 Mon Sep 17 00:00:00 2001 From: edgelessci <71088502+edgelessci@users.noreply.github.com> Date: Wed, 22 Jan 2025 08:13:32 +0100 Subject: [PATCH 078/311] image: update measurements and image version (#3613) Co-authored-by: edgelessci --- .../measurements/measurements_enterprise.go | 16 ++++++++-------- internal/config/image_enterprise.go | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/internal/attestation/measurements/measurements_enterprise.go b/internal/attestation/measurements/measurements_enterprise.go index bb258d5f3..1eea80b36 100644 --- a/internal/attestation/measurements/measurements_enterprise.go +++ b/internal/attestation/measurements/measurements_enterprise.go @@ -19,14 +19,14 @@ package measurements // revive:disable:var-naming var ( - aws_AWSNitroTPM = M{0: {Expected: []byte{0x73, 0x7f, 0x76, 0x7a, 0x12, 0xf5, 0x4e, 0x70, 0xee, 0xcb, 0xc8, 0x68, 0x40, 0x11, 0x32, 0x3a, 0xe2, 0xfe, 0x2d, 0xd9, 0xf9, 0x07, 0x85, 0x57, 0x79, 0x69, 0xd7, 0xa2, 0x01, 0x3e, 0x8c, 0x12}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xcf, 0x5a, 0x04, 0x57, 0xee, 0x83, 0x57, 0x24, 0x47, 0x44, 0x4b, 0xdd, 0xbe, 0xd0, 0x84, 0xea, 0x51, 0xe0, 0x8c, 0xa5, 0xa5, 0x66, 0xef, 0x96, 0xb8, 0x9b, 0x19, 0xe3, 0xf2, 0x2b, 0x4c, 0xf6}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x01, 0xb3, 0x85, 0x99, 0x4e, 0xfd, 0xa2, 0x1a, 0x20, 0xd6, 0x82, 0xb5, 0x13, 0x37, 0x16, 0x41, 0xb7, 0xa5, 0x58, 0x58, 0x65, 0xfe, 0xe8, 0x96, 0x9f, 0xf2, 0xb4, 0x57, 0xd5, 0xf0, 0xa2, 0xcd}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x5e, 0x08, 0x8b, 0x1f, 0xf9, 0x01, 0x48, 0x51, 0xe3, 0x6b, 0x31, 0x93, 0x2a, 0x98, 0x49, 0xe3, 0x9d, 0x9c, 0x3c, 0xfa, 0xca, 0x56, 0x2a, 0x36, 0xb4, 0xed, 0x6c, 0x90, 0xff, 0x3a, 0x2f, 0xce}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - aws_AWSSEVSNP = M{0: {Expected: []byte{0xd6, 0xdf, 0x85, 0x53, 0x58, 0xf5, 0xb1, 0x0f, 0x06, 0xf0, 0xfa, 0xb3, 0xf4, 0x08, 0xad, 0x26, 0xcd, 0x16, 0x5a, 0x29, 0x49, 0xba, 0xd6, 0x9e, 0x2c, 0xc7, 0x56, 0x92, 0x52, 0x9e, 0x66, 0x2a}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x3c, 0x2c, 0xc9, 0x20, 0x58, 0xf8, 0x28, 0x69, 0xa3, 0xa5, 0x07, 0xc3, 0x28, 0xe0, 0xb6, 0x1b, 0x62, 0x05, 0x94, 0x0d, 0xe5, 0x25, 0xce, 0x46, 0xe3, 0x1e, 0x0d, 0xb8, 0xf0, 0x4b, 0x96, 0x6a}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xa6, 0xcd, 0x8f, 0x6d, 0x4a, 0x87, 0xde, 0x28, 0x74, 0x68, 0x65, 0x0d, 0xd1, 0x20, 0xdd, 0xf8, 0x27, 0x02, 0x0b, 0x63, 0x9a, 0xb6, 0x8e, 0xb6, 0x32, 0xf8, 0x78, 0x87, 0x92, 0x51, 0x39, 0xfe}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xab, 0x9b, 0xa5, 0x86, 0x19, 0x02, 0xee, 0xb9, 0x7a, 0x9c, 0x71, 0x05, 0xe0, 0x23, 0xa7, 0x73, 0x5d, 0xbd, 0xc2, 0x40, 0xf5, 0x5d, 0x92, 0x29, 0x21, 0xf0, 0x4b, 0x91, 0xad, 0xb4, 0xb2, 0xbe}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - azure_AzureSEVSNP = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xad, 0xdc, 0xcc, 0x1c, 0x08, 0xf1, 0x4a, 0x34, 0x65, 0xf1, 0xde, 0xf0, 0xd3, 0x1f, 0x20, 0xb7, 0x43, 0x39, 0xa4, 0x87, 0xc0, 0x31, 0x7f, 0x0f, 0xf5, 0x18, 0xfb, 0x4d, 0x2f, 0xcb, 0x85, 0xb2}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x05, 0x1c, 0x3a, 0x97, 0xdd, 0x6a, 0x02, 0xd3, 0x7c, 0x1f, 0xae, 0x0a, 0xf4, 0xf3, 0x07, 0x8d, 0x6b, 0x56, 0xef, 0x1e, 0x18, 0xa1, 0x4a, 0x5a, 0x01, 0x99, 0x79, 0x7f, 0x91, 0x10, 0xf0, 0x18}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x28, 0x08, 0x2a, 0xeb, 0x2d, 0x47, 0xf9, 0xbb, 0xc4, 0x47, 0xe7, 0xac, 0x66, 0x86, 0xe1, 0x73, 0xbc, 0x15, 0xc2, 0xf0, 0x74, 0xb6, 0x44, 0xf7, 0xa1, 0x6f, 0x9c, 0x8e, 0x6f, 0xfd, 0x9d, 0xad}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - azure_AzureTDX = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x10, 0x5f, 0xa5, 0xf3, 0x99, 0xe5, 0xa8, 0x83, 0x0d, 0x4f, 0x90, 0x9d, 0x9f, 0x5f, 0x73, 0x8d, 0x3a, 0x21, 0xe7, 0x3d, 0xad, 0x9d, 0xd7, 0xf2, 0x39, 0xd9, 0x22, 0xd8, 0xc5, 0x33, 0x23, 0x6c}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xc6, 0x74, 0x98, 0x3c, 0x8d, 0xef, 0xbd, 0x9e, 0x59, 0x6e, 0xe2, 0xbb, 0x3d, 0xfc, 0x3e, 0xd8, 0x2c, 0x4f, 0xda, 0x40, 0x5d, 0xa9, 0x59, 0xda, 0x39, 0xc0, 0x8a, 0x44, 0xdb, 0xff, 0x6a, 0x29}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xca, 0x9d, 0x54, 0xf9, 0xe7, 0x47, 0x08, 0x13, 0x98, 0x51, 0x41, 0xa0, 0x4b, 0x43, 0xa6, 0x4f, 0x29, 0x13, 0x13, 0x2a, 0xfe, 0x4d, 0x28, 0xfa, 0x79, 0x99, 0xaf, 0xcb, 0x23, 0xb0, 0xef, 0x2b}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + aws_AWSNitroTPM = M{0: {Expected: []byte{0x73, 0x7f, 0x76, 0x7a, 0x12, 0xf5, 0x4e, 0x70, 0xee, 0xcb, 0xc8, 0x68, 0x40, 0x11, 0x32, 0x3a, 0xe2, 0xfe, 0x2d, 0xd9, 0xf9, 0x07, 0x85, 0x57, 0x79, 0x69, 0xd7, 0xa2, 0x01, 0x3e, 0x8c, 0x12}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x90, 0x9e, 0x2f, 0x8b, 0x2f, 0x15, 0x74, 0x33, 0x69, 0x03, 0xdb, 0x5b, 0x77, 0xf0, 0xe3, 0x4a, 0xe4, 0x55, 0x7f, 0x8b, 0x21, 0x87, 0x70, 0x84, 0xfc, 0x0a, 0x64, 0xf6, 0x80, 0x08, 0x9b, 0x46}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x3b, 0xd6, 0x30, 0xab, 0xc3, 0xe3, 0x9b, 0x5c, 0xdf, 0x7b, 0x0c, 0xc2, 0x2b, 0x02, 0x1d, 0x36, 0x9c, 0x1b, 0x0d, 0xb9, 0x9a, 0xfd, 0x50, 0x4d, 0x5f, 0x70, 0x04, 0x51, 0x60, 0xbb, 0x46, 0x39}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x43, 0x4b, 0x92, 0xe7, 0xa3, 0xc6, 0x7d, 0xda, 0x71, 0xcf, 0x16, 0x6b, 0xdb, 0x16, 0xa1, 0x2d, 0xf0, 0xd4, 0xd0, 0x2c, 0x1e, 0x2c, 0x30, 0x20, 0x5e, 0x89, 0xe2, 0x5f, 0xbd, 0x9b, 0x75, 0x67}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + aws_AWSSEVSNP = M{0: {Expected: []byte{0xd6, 0xdf, 0x85, 0x53, 0x58, 0xf5, 0xb1, 0x0f, 0x06, 0xf0, 0xfa, 0xb3, 0xf4, 0x08, 0xad, 0x26, 0xcd, 0x16, 0x5a, 0x29, 0x49, 0xba, 0xd6, 0x9e, 0x2c, 0xc7, 0x56, 0x92, 0x52, 0x9e, 0x66, 0x2a}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x50, 0x65, 0xdf, 0x7b, 0x53, 0x4b, 0xdc, 0x48, 0xa6, 0x45, 0x14, 0x83, 0x5d, 0xc1, 0x22, 0x7f, 0x0c, 0x24, 0xc5, 0x4a, 0x47, 0x77, 0xbe, 0x44, 0x07, 0x61, 0x4f, 0xed, 0x72, 0x59, 0x1d, 0xa6}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x4e, 0x66, 0x8b, 0x8b, 0xee, 0x90, 0x27, 0x17, 0xe8, 0x37, 0x97, 0x1a, 0x06, 0xcb, 0x3c, 0xac, 0xa0, 0x65, 0x39, 0xf7, 0x87, 0xc6, 0x5b, 0x88, 0x24, 0xd2, 0xc6, 0x60, 0xb4, 0xa0, 0x5a, 0x4b}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x58, 0x91, 0x8e, 0xc5, 0xc0, 0xc2, 0x0b, 0x70, 0x94, 0x99, 0xa8, 0x42, 0x5e, 0x33, 0xc1, 0x1b, 0x99, 0x9f, 0xa4, 0x10, 0xf9, 0x2c, 0xe9, 0x8e, 0xe5, 0x83, 0x9e, 0x0c, 0x18, 0xd1, 0x27, 0x7e}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + azure_AzureSEVSNP = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x07, 0x6d, 0xaa, 0x38, 0x0e, 0x83, 0x00, 0x51, 0x94, 0x72, 0xf1, 0x97, 0x12, 0xcd, 0x88, 0x4f, 0x76, 0x1c, 0xe0, 0xd1, 0x89, 0x02, 0x94, 0xee, 0xc1, 0xc5, 0x35, 0x37, 0x2d, 0x98, 0x8f, 0x2e}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x6a, 0x34, 0xec, 0x2e, 0xe0, 0xa9, 0x29, 0x4a, 0xcf, 0x9b, 0x11, 0xa8, 0x01, 0x37, 0x2c, 0x88, 0x3c, 0xca, 0x7a, 0xda, 0xd1, 0x4a, 0x51, 0x35, 0x25, 0xd9, 0x9f, 0x63, 0x9f, 0x81, 0xb6, 0x81}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x68, 0xdf, 0xea, 0x40, 0x26, 0x45, 0x9c, 0x44, 0xb5, 0xd2, 0xda, 0xfc, 0x8e, 0x5b, 0x59, 0x31, 0x09, 0x56, 0x92, 0x0c, 0x8c, 0xc1, 0xaa, 0x40, 0x15, 0x69, 0x0b, 0x24, 0xd8, 0x10, 0xde, 0xcd}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + azure_AzureTDX = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x95, 0x34, 0xd3, 0x87, 0x3a, 0x06, 0xe8, 0x62, 0x07, 0x24, 0x4b, 0x9d, 0xa7, 0x3c, 0x0b, 0x29, 0x10, 0x86, 0xf3, 0x94, 0x75, 0x96, 0xdb, 0x3f, 0x1b, 0xe0, 0x67, 0xbb, 0x46, 0x66, 0xb8, 0x16}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xef, 0x66, 0x91, 0xf0, 0x4f, 0xc6, 0xf3, 0xe2, 0x57, 0xf5, 0xd1, 0x70, 0xc1, 0x2c, 0x9b, 0x97, 0x4e, 0x33, 0x2a, 0x7d, 0x51, 0xde, 0xdd, 0xf8, 0xdd, 0xcd, 0xeb, 0x83, 0x54, 0x0d, 0x82, 0xe3}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xc7, 0x81, 0xf0, 0x26, 0xaf, 0xb3, 0x34, 0x9f, 0xcf, 0x50, 0x97, 0x02, 0xee, 0x57, 0x90, 0x19, 0x81, 0x74, 0x07, 0xc9, 0xd7, 0x50, 0xf2, 0xbc, 0xa5, 0x77, 0xdd, 0x2d, 0x51, 0x9f, 0x03, 0x94}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} azure_AzureTrustedLaunch M - gcp_GCPSEVES = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x71, 0xb1, 0xf1, 0xa7, 0x77, 0x46, 0x6d, 0x35, 0x15, 0xe9, 0xc8, 0x66, 0xb6, 0xc0, 0x87, 0x6e, 0x81, 0xbb, 0x7e, 0x6a, 0x09, 0xa8, 0x71, 0xa5, 0xea, 0x8d, 0xcb, 0x3f, 0x27, 0xd4, 0x93, 0x6c}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x0d, 0x98, 0xc2, 0x22, 0x50, 0xc0, 0xdc, 0x52, 0x8c, 0xd2, 0xb4, 0x74, 0x52, 0x47, 0x7c, 0x3d, 0x34, 0x62, 0xc2, 0x84, 0x10, 0x7d, 0x42, 0xd3, 0xd5, 0x18, 0xd9, 0x83, 0x2d, 0x64, 0xd1, 0x83}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x0b, 0x48, 0x21, 0x7d, 0xd2, 0x78, 0x44, 0x06, 0x76, 0x71, 0x26, 0xd9, 0x9e, 0xbe, 0x2d, 0xcf, 0x18, 0x6c, 0x94, 0xad, 0x04, 0x26, 0x8d, 0x1d, 0x3a, 0xd2, 0xbf, 0xc3, 0x72, 0xe9, 0xe8, 0x38}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - gcp_GCPSEVSNP = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x0b, 0xd7, 0x48, 0xc6, 0x69, 0xcb, 0x27, 0x27, 0xe3, 0x83, 0x1b, 0x62, 0xf1, 0xb9, 0xa1, 0xff, 0xe2, 0x88, 0x14, 0xd1, 0x32, 0xa1, 0x38, 0x63, 0x0d, 0x8d, 0x6e, 0x06, 0x59, 0x5a, 0x94, 0x31}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x3c, 0x4f, 0x85, 0x56, 0xfe, 0x46, 0x3b, 0xe2, 0xdf, 0xa5, 0xf9, 0x58, 0xbe, 0x92, 0xd5, 0x9e, 0x95, 0x38, 0xa8, 0xb4, 0xfe, 0x9f, 0x9d, 0x23, 0x21, 0x24, 0xfb, 0x82, 0x00, 0xa3, 0x52, 0x0e}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xbc, 0x5e, 0x12, 0x35, 0x60, 0xb9, 0xe7, 0x0a, 0x53, 0x46, 0x22, 0x13, 0xe6, 0x51, 0x6b, 0xdc, 0x52, 0xf6, 0x40, 0xb5, 0xdc, 0xe1, 0x90, 0xfc, 0x74, 0x48, 0xe8, 0x50, 0x1d, 0xde, 0xed, 0x49}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - openstack_QEMUVTPM = M{4: {Expected: []byte{0x2a, 0xcd, 0x18, 0xa6, 0xc9, 0x81, 0x64, 0x7f, 0xee, 0x62, 0xb5, 0x27, 0x5e, 0x61, 0x7a, 0xfb, 0xf1, 0x9f, 0xfa, 0x75, 0xf6, 0x92, 0x2d, 0xad, 0xeb, 0x9d, 0x7f, 0x91, 0xcf, 0xdc, 0x2e, 0xdb}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x76, 0xcd, 0x8d, 0xdd, 0x32, 0xe6, 0x9e, 0xad, 0x27, 0x9f, 0x13, 0x64, 0x45, 0x4b, 0x0c, 0x87, 0x9b, 0xcb, 0xf3, 0xe7, 0xc0, 0x69, 0xf6, 0x8e, 0x3b, 0x89, 0x13, 0xb7, 0x3d, 0x5f, 0xe8, 0x40}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x3f, 0x0d, 0x69, 0xf3, 0x30, 0x2b, 0xc6, 0xf6, 0x72, 0xb4, 0xa9, 0x72, 0x2e, 0x44, 0xa5, 0x52, 0x9f, 0x56, 0x50, 0x60, 0x50, 0xc9, 0xf1, 0x0b, 0xed, 0x51, 0x2f, 0x53, 0xb1, 0x20, 0x39, 0x79}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + gcp_GCPSEVES = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x46, 0x66, 0x24, 0x02, 0x8b, 0x88, 0xee, 0xbe, 0xe2, 0x74, 0x1a, 0xfc, 0x1d, 0xf3, 0x9b, 0x8c, 0x63, 0x38, 0xdb, 0x33, 0xdc, 0x33, 0xda, 0xa4, 0xe3, 0xb7, 0x04, 0xe7, 0x09, 0xe6, 0x23, 0xe7}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x9d, 0x8a, 0x55, 0x19, 0xea, 0x86, 0xb7, 0x29, 0x2c, 0x34, 0x42, 0x65, 0x28, 0xf0, 0xd9, 0x27, 0xf7, 0x7b, 0xd8, 0x6e, 0x05, 0x75, 0x83, 0xaa, 0x14, 0xb0, 0x67, 0x88, 0x3c, 0xee, 0xae, 0xb7}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x71, 0x9f, 0xe1, 0xb7, 0xab, 0x58, 0x50, 0xeb, 0xea, 0x3b, 0x87, 0xcf, 0xca, 0xe3, 0xcc, 0x06, 0x59, 0x71, 0x73, 0xed, 0x25, 0x95, 0x99, 0x11, 0x25, 0x6c, 0x51, 0x10, 0xbc, 0xa0, 0x6d, 0xc9}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + gcp_GCPSEVSNP = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xbd, 0xdc, 0x0a, 0x04, 0xe9, 0xe3, 0x6e, 0x3a, 0x84, 0x58, 0x98, 0x89, 0xca, 0x48, 0x4e, 0xb6, 0x71, 0xf7, 0x07, 0x98, 0xfc, 0x87, 0xb6, 0x08, 0x2a, 0x9c, 0x37, 0xb5, 0xe3, 0x25, 0x0f, 0xcf}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x5e, 0x99, 0xbd, 0x87, 0x5d, 0xd5, 0x2a, 0x60, 0x03, 0x81, 0x55, 0xa1, 0x09, 0xd9, 0x6d, 0xe2, 0x99, 0xb3, 0x35, 0xf7, 0x46, 0x42, 0x36, 0x22, 0x9f, 0x0b, 0x69, 0x42, 0x27, 0x51, 0x94, 0xba}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x2e, 0x01, 0xf5, 0x4d, 0x13, 0xbd, 0x80, 0x28, 0x12, 0x73, 0x41, 0xde, 0x5a, 0x68, 0x06, 0xe1, 0xa4, 0xe0, 0xdc, 0xd9, 0xb5, 0x81, 0xf7, 0xdd, 0xd6, 0xfa, 0x89, 0xbc, 0xc9, 0x97, 0x90, 0x78}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + openstack_QEMUVTPM = M{4: {Expected: []byte{0x28, 0x02, 0x5a, 0x5d, 0x8d, 0x69, 0xb9, 0xd3, 0x6b, 0x77, 0x3c, 0x98, 0xf4, 0x10, 0x4c, 0x1e, 0x53, 0x58, 0x48, 0x6b, 0x5c, 0xba, 0x2c, 0x58, 0x05, 0x3c, 0xd4, 0x5b, 0x32, 0xf3, 0x93, 0xda}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x24, 0x86, 0x74, 0x1d, 0x39, 0x9a, 0xed, 0xc3, 0xac, 0x96, 0x31, 0x06, 0x71, 0x40, 0xf4, 0x20, 0x2d, 0x56, 0x8a, 0xad, 0xb5, 0xb1, 0xa5, 0xe5, 0x40, 0x9f, 0x32, 0x6e, 0x2d, 0x1d, 0x2d, 0x27}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x77, 0x97, 0xf2, 0xef, 0xf5, 0x3b, 0x56, 0x5c, 0xbb, 0xf3, 0x5b, 0x0b, 0x69, 0xf5, 0x21, 0xa1, 0x40, 0xf5, 0x83, 0x46, 0x2e, 0x55, 0xba, 0xf0, 0x75, 0x95, 0x4e, 0xe0, 0x54, 0xd1, 0xeb, 0x83}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} qemu_QEMUTDX M - qemu_QEMUVTPM = M{4: {Expected: []byte{0x2a, 0xef, 0x86, 0x30, 0x38, 0x6a, 0x80, 0x83, 0x8c, 0xc1, 0xb2, 0xe0, 0x4b, 0x76, 0xe9, 0xd7, 0x28, 0x38, 0x11, 0x6f, 0xf8, 0x71, 0xfa, 0xb9, 0x37, 0x75, 0x5e, 0x5d, 0x96, 0xdc, 0x73, 0xde}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x4e, 0x84, 0x19, 0xa5, 0x47, 0x1a, 0x8d, 0x16, 0x55, 0xcf, 0x69, 0xb8, 0x3a, 0x29, 0x53, 0x61, 0x1e, 0x14, 0x9b, 0xb8, 0x61, 0xe8, 0x09, 0x60, 0xf0, 0xc5, 0xec, 0xbe, 0x44, 0xa5, 0x0e, 0x4c}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x3d, 0x64, 0x12, 0xc0, 0x64, 0x69, 0xbb, 0x4c, 0x11, 0xdd, 0x3d, 0x82, 0x80, 0x10, 0xf3, 0x8f, 0x02, 0x20, 0x81, 0x46, 0x99, 0x89, 0x66, 0x5d, 0xe0, 0x2a, 0x5e, 0xfe, 0x41, 0xf9, 0xc4, 0xbf}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + qemu_QEMUVTPM = M{4: {Expected: []byte{0x03, 0xdf, 0xe0, 0x9b, 0xcc, 0x56, 0xde, 0x85, 0xec, 0xe3, 0x17, 0x73, 0x1a, 0xd1, 0x91, 0x18, 0x75, 0x81, 0x37, 0x0a, 0x6e, 0x39, 0xe2, 0x0b, 0x3f, 0x75, 0xd2, 0xa1, 0x81, 0x3d, 0x09, 0xe8}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xe0, 0x4d, 0xf6, 0x74, 0xa7, 0x57, 0xf6, 0x6d, 0x91, 0x97, 0x5e, 0x80, 0xe3, 0x95, 0xe5, 0xe2, 0xe5, 0x41, 0x77, 0xa3, 0x6d, 0x67, 0x7e, 0xd5, 0x85, 0xe2, 0x9f, 0x92, 0xe8, 0xf7, 0x62, 0x15}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xcb, 0x9f, 0xe0, 0xd7, 0xb3, 0xe9, 0x2c, 0x1e, 0x4b, 0x2f, 0x66, 0xdd, 0x65, 0x2e, 0x45, 0x43, 0x1b, 0x4e, 0x37, 0x84, 0x32, 0x48, 0x9d, 0x95, 0xaf, 0x94, 0x00, 0x03, 0x0c, 0x16, 0xee, 0xbf}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} ) diff --git a/internal/config/image_enterprise.go b/internal/config/image_enterprise.go index ea09b48f5..4ffa57110 100644 --- a/internal/config/image_enterprise.go +++ b/internal/config/image_enterprise.go @@ -10,5 +10,5 @@ package config const ( // defaultImage is the default image to use. - defaultImage = "ref/main/stream/nightly/v2.21.0-pre.0.20250114160719-0d2bedbca329" + defaultImage = "ref/main/stream/nightly/v2.21.0-pre.0.20250121162310-501d1779ede0" ) From 12cfd7006b96a77160ca5eed21aaa3efbbc95bd0 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 22 Jan 2025 08:27:02 +0100 Subject: [PATCH 079/311] deps: update registry.k8s.io/sig-storage/snapshot-controller Docker tag to v8.2.0 (#3612) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .../charts/edgeless/csi/charts/snapshot-controller/values.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/constellation/helm/charts/edgeless/csi/charts/snapshot-controller/values.yaml b/internal/constellation/helm/charts/edgeless/csi/charts/snapshot-controller/values.yaml index 2b87ffa50..5cf53dca6 100644 --- a/internal/constellation/helm/charts/edgeless/csi/charts/snapshot-controller/values.yaml +++ b/internal/constellation/helm/charts/edgeless/csi/charts/snapshot-controller/values.yaml @@ -3,7 +3,7 @@ snapshotController: snapshotController: image: repository: registry.k8s.io/sig-storage/snapshot-controller - tag: v8.1.0@sha256:a8a6749641849a6d7e560d26647e88dbd605a75cbff1823568ab90287ea29038 + tag: v8.2.0@sha256:9dade8f2f3ab29e3919c41b343f8d77b12178ac51f25574d7ed2d45a3e3ef69d imagePullPolicy: IfNotPresent snapshotWebhook: replicas: 1 From 3f702ecda9dba767b528b53b7158f1fa8d4d6092 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 22 Jan 2025 08:49:30 +0100 Subject: [PATCH 080/311] deps: update Terraform google to v6.17.0 (#3614) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .../infrastructure/gcp/.terraform.lock.hcl | 48 +++++++++---------- terraform/infrastructure/gcp/main.tf | 2 +- .../gcp/modules/instance_group/main.tf | 2 +- .../modules/internal_load_balancer/main.tf | 2 +- .../gcp/modules/jump_host/main.tf | 2 +- .../gcp/modules/loadbalancer/main.tf | 2 +- .../iam/gcp/.terraform.lock.hcl | 48 +++++++++---------- terraform/infrastructure/iam/gcp/main.tf | 2 +- 8 files changed, 54 insertions(+), 54 deletions(-) diff --git a/terraform/infrastructure/gcp/.terraform.lock.hcl b/terraform/infrastructure/gcp/.terraform.lock.hcl index 76d7ca129..88ac1fcf6 100644 --- a/terraform/infrastructure/gcp/.terraform.lock.hcl +++ b/terraform/infrastructure/gcp/.terraform.lock.hcl @@ -2,32 +2,32 @@ # Manual edits may be lost in future updates. provider "registry.terraform.io/hashicorp/google" { - version = "6.16.0" - constraints = "6.16.0" + version = "6.17.0" + constraints = "6.17.0" hashes = [ - "h1:3jOfdfVYVI/AZ4qdmckh/Hr3edQytpRspPGWDAf7hfk=", - "h1:4HI+eZYXcOiKDoKMzAfr84IV61nwH+OgMVLN+xQP/00=", - "h1:71YV9nOKWohOqPZmW8jAtHJJPyTSbkKeBYwLdcZqV+I=", - "h1:WcDlLkQlcWug7lK4YI2OS5mIoCpL5qlytXNT7CLXxcw=", - "h1:dVywsjJ17IF+o9c9PQqGrCJiQvCrrWBRt2Gt4OPzTlo=", - "h1:evkERvMebvZCwZ7Dr2x3RMoB03GVOzw8LkUFXE2kkbA=", - "h1:j75pE4hkNhzsJ9kyhYJB2qq8jwzMS/IdYJ399bBtsvk=", - "h1:n0DGeFjLRoe2Lp6PLU9mMJJFSSigxi3t2yschn0rPGw=", - "h1:r5WFNDeEnqaJ7FHsYR8xSFs6xFk42rMOqZZRnIek7jM=", - "h1:xu1ZOAgciMrxGk81qhnNmUG+yt6o4eq7qI8awc3/oLk=", - "h1:yhV8waV9Dxy67zHzArLkg+nbOAsMA/EoLrEvLys9h6k=", - "zh:1e263d01a64740d550f14c83e91efaf5b3f7ee46163cce58b736da284e488377", - "zh:5b0885ee8875b98ef75f558e278ac5f2ba0850e0e6579c898d75a488be227e93", - "zh:6eb8d06a5cf9843e7a4dd18bd93fc785bdec9f5aebdef748bfbe349c0e085ce5", - "zh:82f57bcccc35271f39a090b687c37489f81ddeec2a792e7f5341c7cdcc51fa5c", - "zh:898d7ed728f45c3124e2bfbbde57b762e59c9c54e020453edc9454858d65a8c5", - "zh:8effa4a08cc3ffce2048b4e51ad6df0c288ce0c79c161b9716a16b482d2f18be", - "zh:ac80c44c9dc0c7016c3422390b17380ad03257abc09a224734ed359b2cd61d0a", - "zh:c2e03eba3d9af62948ba82aa1de627c692731b9a7dd46119b932c6fc9514306c", - "zh:ca77c67f72e7210112f485ef0fc555fde3ac818de9b7136f0b37142893ba6428", - "zh:ea8ccff7fece47be816f3f20fdd61b8ac3a72f515720c579a2560183b1e17658", + "h1:2ycjv7XhGgMjTnDR+6ZfSLCPrm3o5nLn9RZ7g7iYT+0=", + "h1:ATBXbtcc0yaEQNkTK8eWxmMXH045AfLSDFMJOtoq3qQ=", + "h1:J7qp2vw9rlE7S80yO/WAK6kpri6r18J18/9lYm9lNB8=", + "h1:KaUdG4wHUzLBnIMeuYWyVMSSPmeemyJqMyc+/c0jYDE=", + "h1:QRjzeNePGTvp1a9UzGqu9Z8mMVjnRkfbZy2Uq13DRjU=", + "h1:Ro8XL1RTzXYs7e7EenvpiU/Rgsw/X6maSGWYb6e3Tpo=", + "h1:TQtswaM3aJSK0DPpBrpkGC9wQBoj9bO0h93sJ9NE264=", + "h1:aEcEXIGwaTDu+XAQP1xxso97MxDLWvLw9q0Q9kZiz6A=", + "h1:jTC2VqqElSe4qv/GS2rgI+AhILiVv1uIh0QJMnBemm8=", + "h1:n5tFN82RSrqLQlueXx5h4kgUbud2YhMkSDv3hw41kzE=", + "h1:siQ5DPLcE3KCbl55zr9yE1ceecICvbZ3MKkLbIcHZ04=", + "zh:2ae1ba33889babf740298f131c3151477c638a6d8dc2d850f207380ae91d5ee0", + "zh:2b950b0f4dcb1f79e10ad9611fc1573114028be423af742eb9b5027d1e1127fc", + "zh:4557ce5a9ce78e365af99c15c3a2d4d37a246535d0d62182a66cfc1c9de53cbd", + "zh:5ced8255a5cd868ebd6a0ba377b5016f578be402daea7479e488c109a74e8339", + "zh:6b7666678f6238637c7f78020edb8405669804a18ae580296419fb4179642cf6", + "zh:8677c153477daf1b636421a00633f25022b8c33fc803699d6ea6f89b75b4554b", + "zh:9f85498e26bf90049c252e6220a5a47cff88a4cd249e08845c59bd4c16aa48f3", + "zh:dce93c05d1852f1c692566c2ebf7200cb98aa059301044c2211c10319354c680", + "zh:df72b36e76e0721904c63eab34191bc9c4ccf93d067c2a0d455dd8bb39e73b66", + "zh:e9a9e8d8ae14ab6e661f3f9b07c5edec60507203dac7d2f187dc716317f4d79c", "zh:f569b65999264a9416862bca5cd2a6177d94ccb0424f3a4ef424428912b9cb3c", - "zh:f5d626eb6e9015022796849d6ba733627fa9e082302a8658dd83fc74c75db162", + "zh:fb92287bca4fc7b49666c644ca7789e4acf5b17317acb963f138c0ae6347a289", ] } diff --git a/terraform/infrastructure/gcp/main.tf b/terraform/infrastructure/gcp/main.tf index 2c6b294c3..19275bb06 100644 --- a/terraform/infrastructure/gcp/main.tf +++ b/terraform/infrastructure/gcp/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { google = { source = "hashicorp/google" - version = "6.16.0" + version = "6.17.0" } random = { diff --git a/terraform/infrastructure/gcp/modules/instance_group/main.tf b/terraform/infrastructure/gcp/modules/instance_group/main.tf index 5c7747db1..2ba833bbb 100644 --- a/terraform/infrastructure/gcp/modules/instance_group/main.tf +++ b/terraform/infrastructure/gcp/modules/instance_group/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { google = { source = "hashicorp/google" - version = "6.16.0" + version = "6.17.0" } random = { diff --git a/terraform/infrastructure/gcp/modules/internal_load_balancer/main.tf b/terraform/infrastructure/gcp/modules/internal_load_balancer/main.tf index 0ded10958..807c61dc9 100644 --- a/terraform/infrastructure/gcp/modules/internal_load_balancer/main.tf +++ b/terraform/infrastructure/gcp/modules/internal_load_balancer/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { google = { source = "hashicorp/google" - version = "6.16.0" + version = "6.17.0" } } } diff --git a/terraform/infrastructure/gcp/modules/jump_host/main.tf b/terraform/infrastructure/gcp/modules/jump_host/main.tf index a09eaac06..0d0a8ca78 100644 --- a/terraform/infrastructure/gcp/modules/jump_host/main.tf +++ b/terraform/infrastructure/gcp/modules/jump_host/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { google = { source = "hashicorp/google" - version = "6.16.0" + version = "6.17.0" } } } diff --git a/terraform/infrastructure/gcp/modules/loadbalancer/main.tf b/terraform/infrastructure/gcp/modules/loadbalancer/main.tf index 5a5ab4230..6083c7cbc 100644 --- a/terraform/infrastructure/gcp/modules/loadbalancer/main.tf +++ b/terraform/infrastructure/gcp/modules/loadbalancer/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { google = { source = "hashicorp/google" - version = "6.16.0" + version = "6.17.0" } } } diff --git a/terraform/infrastructure/iam/gcp/.terraform.lock.hcl b/terraform/infrastructure/iam/gcp/.terraform.lock.hcl index b56b4ba74..082a504ca 100644 --- a/terraform/infrastructure/iam/gcp/.terraform.lock.hcl +++ b/terraform/infrastructure/iam/gcp/.terraform.lock.hcl @@ -2,32 +2,32 @@ # Manual edits may be lost in future updates. provider "registry.terraform.io/hashicorp/google" { - version = "6.16.0" - constraints = "6.16.0" + version = "6.17.0" + constraints = "6.17.0" hashes = [ - "h1:3jOfdfVYVI/AZ4qdmckh/Hr3edQytpRspPGWDAf7hfk=", - "h1:4HI+eZYXcOiKDoKMzAfr84IV61nwH+OgMVLN+xQP/00=", - "h1:71YV9nOKWohOqPZmW8jAtHJJPyTSbkKeBYwLdcZqV+I=", - "h1:WcDlLkQlcWug7lK4YI2OS5mIoCpL5qlytXNT7CLXxcw=", - "h1:dVywsjJ17IF+o9c9PQqGrCJiQvCrrWBRt2Gt4OPzTlo=", - "h1:evkERvMebvZCwZ7Dr2x3RMoB03GVOzw8LkUFXE2kkbA=", - "h1:j75pE4hkNhzsJ9kyhYJB2qq8jwzMS/IdYJ399bBtsvk=", - "h1:n0DGeFjLRoe2Lp6PLU9mMJJFSSigxi3t2yschn0rPGw=", - "h1:r5WFNDeEnqaJ7FHsYR8xSFs6xFk42rMOqZZRnIek7jM=", - "h1:xu1ZOAgciMrxGk81qhnNmUG+yt6o4eq7qI8awc3/oLk=", - "h1:yhV8waV9Dxy67zHzArLkg+nbOAsMA/EoLrEvLys9h6k=", - "zh:1e263d01a64740d550f14c83e91efaf5b3f7ee46163cce58b736da284e488377", - "zh:5b0885ee8875b98ef75f558e278ac5f2ba0850e0e6579c898d75a488be227e93", - "zh:6eb8d06a5cf9843e7a4dd18bd93fc785bdec9f5aebdef748bfbe349c0e085ce5", - "zh:82f57bcccc35271f39a090b687c37489f81ddeec2a792e7f5341c7cdcc51fa5c", - "zh:898d7ed728f45c3124e2bfbbde57b762e59c9c54e020453edc9454858d65a8c5", - "zh:8effa4a08cc3ffce2048b4e51ad6df0c288ce0c79c161b9716a16b482d2f18be", - "zh:ac80c44c9dc0c7016c3422390b17380ad03257abc09a224734ed359b2cd61d0a", - "zh:c2e03eba3d9af62948ba82aa1de627c692731b9a7dd46119b932c6fc9514306c", - "zh:ca77c67f72e7210112f485ef0fc555fde3ac818de9b7136f0b37142893ba6428", - "zh:ea8ccff7fece47be816f3f20fdd61b8ac3a72f515720c579a2560183b1e17658", + "h1:2ycjv7XhGgMjTnDR+6ZfSLCPrm3o5nLn9RZ7g7iYT+0=", + "h1:ATBXbtcc0yaEQNkTK8eWxmMXH045AfLSDFMJOtoq3qQ=", + "h1:J7qp2vw9rlE7S80yO/WAK6kpri6r18J18/9lYm9lNB8=", + "h1:KaUdG4wHUzLBnIMeuYWyVMSSPmeemyJqMyc+/c0jYDE=", + "h1:QRjzeNePGTvp1a9UzGqu9Z8mMVjnRkfbZy2Uq13DRjU=", + "h1:Ro8XL1RTzXYs7e7EenvpiU/Rgsw/X6maSGWYb6e3Tpo=", + "h1:TQtswaM3aJSK0DPpBrpkGC9wQBoj9bO0h93sJ9NE264=", + "h1:aEcEXIGwaTDu+XAQP1xxso97MxDLWvLw9q0Q9kZiz6A=", + "h1:jTC2VqqElSe4qv/GS2rgI+AhILiVv1uIh0QJMnBemm8=", + "h1:n5tFN82RSrqLQlueXx5h4kgUbud2YhMkSDv3hw41kzE=", + "h1:siQ5DPLcE3KCbl55zr9yE1ceecICvbZ3MKkLbIcHZ04=", + "zh:2ae1ba33889babf740298f131c3151477c638a6d8dc2d850f207380ae91d5ee0", + "zh:2b950b0f4dcb1f79e10ad9611fc1573114028be423af742eb9b5027d1e1127fc", + "zh:4557ce5a9ce78e365af99c15c3a2d4d37a246535d0d62182a66cfc1c9de53cbd", + "zh:5ced8255a5cd868ebd6a0ba377b5016f578be402daea7479e488c109a74e8339", + "zh:6b7666678f6238637c7f78020edb8405669804a18ae580296419fb4179642cf6", + "zh:8677c153477daf1b636421a00633f25022b8c33fc803699d6ea6f89b75b4554b", + "zh:9f85498e26bf90049c252e6220a5a47cff88a4cd249e08845c59bd4c16aa48f3", + "zh:dce93c05d1852f1c692566c2ebf7200cb98aa059301044c2211c10319354c680", + "zh:df72b36e76e0721904c63eab34191bc9c4ccf93d067c2a0d455dd8bb39e73b66", + "zh:e9a9e8d8ae14ab6e661f3f9b07c5edec60507203dac7d2f187dc716317f4d79c", "zh:f569b65999264a9416862bca5cd2a6177d94ccb0424f3a4ef424428912b9cb3c", - "zh:f5d626eb6e9015022796849d6ba733627fa9e082302a8658dd83fc74c75db162", + "zh:fb92287bca4fc7b49666c644ca7789e4acf5b17317acb963f138c0ae6347a289", ] } diff --git a/terraform/infrastructure/iam/gcp/main.tf b/terraform/infrastructure/iam/gcp/main.tf index 7e3280684..9ed3759b3 100644 --- a/terraform/infrastructure/iam/gcp/main.tf +++ b/terraform/infrastructure/iam/gcp/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { google = { source = "hashicorp/google" - version = "6.16.0" + version = "6.17.0" } } } From 808631f530aae2417635e0467237276909767d5e Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 22 Jan 2025 11:53:19 +0100 Subject: [PATCH 081/311] deps: update dependency buildifier_prebuilt to v8 (#3615) * deps: update dependency buildifier_prebuilt to v8 * deps: tidy all modules --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: edgelessci --- MODULE.bazel | 2 +- MODULE.bazel.lock | 50 +++++++++++++++++++++++------------------------ 2 files changed, 26 insertions(+), 26 deletions(-) diff --git a/MODULE.bazel b/MODULE.bazel index 1e6aa83b5..ba290c9ba 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -16,7 +16,7 @@ bazel_dep(name = "rules_pkg", version = "1.0.1") bazel_dep(name = "rules_proto", version = "7.1.0") bazel_dep(name = "rules_python", version = "1.1.0") -bazel_dep(name = "buildifier_prebuilt", version = "7.3.1", dev_dependency = True) +bazel_dep(name = "buildifier_prebuilt", version = "8.0.0", dev_dependency = True) go_sdk = use_extension("@io_bazel_rules_go//go:extensions.bzl", "go_sdk") go_sdk.download( diff --git a/MODULE.bazel.lock b/MODULE.bazel.lock index e04f56c85..08ca29107 100644 --- a/MODULE.bazel.lock +++ b/MODULE.bazel.lock @@ -38,8 +38,8 @@ "https://bcr.bazel.build/modules/bazel_skylib/1.7.0/MODULE.bazel": "0db596f4563de7938de764cc8deeabec291f55e8ec15299718b93c4423e9796d", "https://bcr.bazel.build/modules/bazel_skylib/1.7.1/MODULE.bazel": "3120d80c5861aa616222ec015332e5f8d3171e062e3e804a2a0253e1be26e59b", "https://bcr.bazel.build/modules/bazel_skylib/1.7.1/source.json": "f121b43eeefc7c29efbd51b83d08631e2347297c95aac9764a701f2a6a2bb953", - "https://bcr.bazel.build/modules/buildifier_prebuilt/7.3.1/MODULE.bazel": "537faf0ad9f5892910074b8e43b4c91c96f1d5d86b6ed04bdbe40cf68aa48b68", - "https://bcr.bazel.build/modules/buildifier_prebuilt/7.3.1/source.json": "55153a5e6ca9c8a7e266c4b46b951e8a010d25ec6062bc35d5d4f89925796bad", + "https://bcr.bazel.build/modules/buildifier_prebuilt/8.0.0/MODULE.bazel": "ce80a1946ca406884aa20ad83fbbe74f9b13fb91ae6d8a8b8339e18e5eaebb2d", + "https://bcr.bazel.build/modules/buildifier_prebuilt/8.0.0/source.json": "b83ab501d5efda1b2c9f68086bac6b2e38cb17359fb6eabbc23465f6a61a2389", "https://bcr.bazel.build/modules/buildozer/7.1.2/MODULE.bazel": "2e8dd40ede9c454042645fd8d8d0cd1527966aa5c919de86661e62953cd73d84", "https://bcr.bazel.build/modules/buildozer/7.1.2/source.json": "c9028a501d2db85793a6996205c8de120944f50a0d570438fcae0457a5f9d1f8", "https://bcr.bazel.build/modules/gazelle/0.32.0/MODULE.bazel": "b499f58a5d0d3537f3cf5b76d8ada18242f64ec474d8391247438bf04f58c7b8", @@ -192,8 +192,8 @@ }, "@@buildifier_prebuilt~//:defs.bzl%buildifier_prebuilt_deps_extension": { "general": { - "bzlTransitiveDigest": "lqH5eQXGrxGyrPzoegk5Mn6zC3A1P0h+QsA1O/QlXHc=", - "usagesDigest": "yt+GfSH6jiwv+nPT5fzdhb/zB+8RgR4U+dna3WGxrzU=", + "bzlTransitiveDigest": "bwPINGwEV2DXw6rfPzk8CzUw7vvA1qVBAq+yRLfKl3I=", + "usagesDigest": "EUEjIQT6WiFnYobbJsanQwssCVRk1RL5tNUpXbzebjo=", "recordedFileInputs": {}, "recordedDirentsInputs": {}, "envVariables": {}, @@ -203,11 +203,11 @@ "ruleClassName": "http_file", "attributes": { "urls": [ - "https://github.com/bazelbuild/buildtools/releases/download/v7.3.1/buildifier-darwin-amd64" + "https://github.com/bazelbuild/buildtools/releases/download/v8.0.0/buildifier-darwin-amd64" ], "downloaded_file_path": "buildifier", "executable": true, - "sha256": "375f823103d01620aaec20a0c29c6cbca99f4fd0725ae30b93655c6704f44d71" + "sha256": "00c54f5363899653b6d5c86808d65447e10ab658a1b242707449c169c8f879d0" } }, "buildifier_darwin_arm64": { @@ -215,11 +215,11 @@ "ruleClassName": "http_file", "attributes": { "urls": [ - "https://github.com/bazelbuild/buildtools/releases/download/v7.3.1/buildifier-darwin-arm64" + "https://github.com/bazelbuild/buildtools/releases/download/v8.0.0/buildifier-darwin-arm64" ], "downloaded_file_path": "buildifier", "executable": true, - "sha256": "5a6afc6ac7a09f5455ba0b89bd99d5ae23b4174dc5dc9d6c0ed5ce8caac3f813" + "sha256": "cb2135ff8489bf3e1a1ba60be7d2cdab904dde7812426d4c72c021024c617fcb" } }, "buildifier_linux_amd64": { @@ -227,11 +227,11 @@ "ruleClassName": "http_file", "attributes": { "urls": [ - "https://github.com/bazelbuild/buildtools/releases/download/v7.3.1/buildifier-linux-amd64" + "https://github.com/bazelbuild/buildtools/releases/download/v8.0.0/buildifier-linux-amd64" ], "downloaded_file_path": "buildifier", "executable": true, - "sha256": "5474cc5128a74e806783d54081f581662c4be8ae65022f557e9281ed5dc88009" + "sha256": "3482807cafadb64912ad912bdc752a8d4118d12b2f493f66f961f94d60f76d6a" } }, "buildifier_linux_arm64": { @@ -239,11 +239,11 @@ "ruleClassName": "http_file", "attributes": { "urls": [ - "https://github.com/bazelbuild/buildtools/releases/download/v7.3.1/buildifier-linux-arm64" + "https://github.com/bazelbuild/buildtools/releases/download/v8.0.0/buildifier-linux-arm64" ], "downloaded_file_path": "buildifier", "executable": true, - "sha256": "0bf86c4bfffaf4f08eed77bde5b2082e4ae5039a11e2e8b03984c173c34a561c" + "sha256": "4f3a47fcb0d49388cc0c703ba43d83e10c51c35806640d5cab820720ee0540d7" } }, "buildifier_windows_amd64": { @@ -251,11 +251,11 @@ "ruleClassName": "http_file", "attributes": { "urls": [ - "https://github.com/bazelbuild/buildtools/releases/download/v7.3.1/buildifier-windows-amd64.exe" + "https://github.com/bazelbuild/buildtools/releases/download/v8.0.0/buildifier-windows-amd64.exe" ], "downloaded_file_path": "buildifier.exe", "executable": true, - "sha256": "370cd576075ad29930a82f5de132f1a1de4084c784a82514bd4da80c85acf4a8" + "sha256": "bbd11c7e68a985bcb14d1852f6855748dc1c6d98f9ad904d9d52381aee983a63" } }, "buildozer_darwin_amd64": { @@ -263,11 +263,11 @@ "ruleClassName": "http_file", "attributes": { "urls": [ - "https://github.com/bazelbuild/buildtools/releases/download/v7.3.1/buildozer-darwin-amd64" + "https://github.com/bazelbuild/buildtools/releases/download/v8.0.0/buildozer-darwin-amd64" ], "downloaded_file_path": "buildozer", "executable": true, - "sha256": "854c9583efc166602276802658cef3f224d60898cfaa60630b33d328db3b0de2" + "sha256": "c921d469ec4396e45ea2df605cd1e3841092e466fdd673820115d155c7e02579" } }, "buildozer_darwin_arm64": { @@ -275,11 +275,11 @@ "ruleClassName": "http_file", "attributes": { "urls": [ - "https://github.com/bazelbuild/buildtools/releases/download/v7.3.1/buildozer-darwin-arm64" + "https://github.com/bazelbuild/buildtools/releases/download/v8.0.0/buildozer-darwin-arm64" ], "downloaded_file_path": "buildozer", "executable": true, - "sha256": "31b1bfe20d7d5444be217af78f94c5c43799cdf847c6ce69794b7bf3319c5364" + "sha256": "09c8e3114e36479a7b3f059c23c67322e70f04d7b09511319ea70af9a622fd20" } }, "buildozer_linux_amd64": { @@ -287,11 +287,11 @@ "ruleClassName": "http_file", "attributes": { "urls": [ - "https://github.com/bazelbuild/buildtools/releases/download/v7.3.1/buildozer-linux-amd64" + "https://github.com/bazelbuild/buildtools/releases/download/v8.0.0/buildozer-linux-amd64" ], "downloaded_file_path": "buildozer", "executable": true, - "sha256": "3305e287b3fcc68b9a35fd8515ee617452cd4e018f9e6886b6c7cdbcba8710d4" + "sha256": "d0a7adf739fa389e0dc87eae5d11ed0a864260308b4887e5fd30a17d9c33ca9b" } }, "buildozer_linux_arm64": { @@ -299,11 +299,11 @@ "ruleClassName": "http_file", "attributes": { "urls": [ - "https://github.com/bazelbuild/buildtools/releases/download/v7.3.1/buildozer-linux-arm64" + "https://github.com/bazelbuild/buildtools/releases/download/v8.0.0/buildozer-linux-arm64" ], "downloaded_file_path": "buildozer", "executable": true, - "sha256": "0b5a2a717ac4fc911e1fec8d92af71dbb4fe95b10e5213da0cc3d56cea64a328" + "sha256": "410d0b1d46a3e044a5d5edb02f24152fd99d58cbddf26fcf802481e0e98bbc2e" } }, "buildozer_windows_amd64": { @@ -311,18 +311,18 @@ "ruleClassName": "http_file", "attributes": { "urls": [ - "https://github.com/bazelbuild/buildtools/releases/download/v7.3.1/buildozer-windows-amd64.exe" + "https://github.com/bazelbuild/buildtools/releases/download/v8.0.0/buildozer-windows-amd64.exe" ], "downloaded_file_path": "buildozer.exe", "executable": true, - "sha256": "58d41ce53257c5594c9bc86d769f580909269f68de114297f46284fbb9023dcf" + "sha256": "d4b571004dee5e34d1aa44a6d7f37102ba4de310163648289dfeb6b468048f58" } }, "buildifier_prebuilt_toolchains": { "bzlFile": "@@buildifier_prebuilt~//:defs.bzl", "ruleClassName": "_buildifier_toolchain_setup", "attributes": { - "assets_json": "[{\"arch\":\"amd64\",\"name\":\"buildifier\",\"platform\":\"darwin\",\"sha256\":\"375f823103d01620aaec20a0c29c6cbca99f4fd0725ae30b93655c6704f44d71\",\"version\":\"v7.3.1\"},{\"arch\":\"arm64\",\"name\":\"buildifier\",\"platform\":\"darwin\",\"sha256\":\"5a6afc6ac7a09f5455ba0b89bd99d5ae23b4174dc5dc9d6c0ed5ce8caac3f813\",\"version\":\"v7.3.1\"},{\"arch\":\"amd64\",\"name\":\"buildifier\",\"platform\":\"linux\",\"sha256\":\"5474cc5128a74e806783d54081f581662c4be8ae65022f557e9281ed5dc88009\",\"version\":\"v7.3.1\"},{\"arch\":\"arm64\",\"name\":\"buildifier\",\"platform\":\"linux\",\"sha256\":\"0bf86c4bfffaf4f08eed77bde5b2082e4ae5039a11e2e8b03984c173c34a561c\",\"version\":\"v7.3.1\"},{\"arch\":\"amd64\",\"name\":\"buildifier\",\"platform\":\"windows\",\"sha256\":\"370cd576075ad29930a82f5de132f1a1de4084c784a82514bd4da80c85acf4a8\",\"version\":\"v7.3.1\"},{\"arch\":\"amd64\",\"name\":\"buildozer\",\"platform\":\"darwin\",\"sha256\":\"854c9583efc166602276802658cef3f224d60898cfaa60630b33d328db3b0de2\",\"version\":\"v7.3.1\"},{\"arch\":\"arm64\",\"name\":\"buildozer\",\"platform\":\"darwin\",\"sha256\":\"31b1bfe20d7d5444be217af78f94c5c43799cdf847c6ce69794b7bf3319c5364\",\"version\":\"v7.3.1\"},{\"arch\":\"amd64\",\"name\":\"buildozer\",\"platform\":\"linux\",\"sha256\":\"3305e287b3fcc68b9a35fd8515ee617452cd4e018f9e6886b6c7cdbcba8710d4\",\"version\":\"v7.3.1\"},{\"arch\":\"arm64\",\"name\":\"buildozer\",\"platform\":\"linux\",\"sha256\":\"0b5a2a717ac4fc911e1fec8d92af71dbb4fe95b10e5213da0cc3d56cea64a328\",\"version\":\"v7.3.1\"},{\"arch\":\"amd64\",\"name\":\"buildozer\",\"platform\":\"windows\",\"sha256\":\"58d41ce53257c5594c9bc86d769f580909269f68de114297f46284fbb9023dcf\",\"version\":\"v7.3.1\"}]" + "assets_json": "[{\"arch\":\"amd64\",\"name\":\"buildifier\",\"platform\":\"darwin\",\"sha256\":\"00c54f5363899653b6d5c86808d65447e10ab658a1b242707449c169c8f879d0\",\"version\":\"v8.0.0\"},{\"arch\":\"arm64\",\"name\":\"buildifier\",\"platform\":\"darwin\",\"sha256\":\"cb2135ff8489bf3e1a1ba60be7d2cdab904dde7812426d4c72c021024c617fcb\",\"version\":\"v8.0.0\"},{\"arch\":\"amd64\",\"name\":\"buildifier\",\"platform\":\"linux\",\"sha256\":\"3482807cafadb64912ad912bdc752a8d4118d12b2f493f66f961f94d60f76d6a\",\"version\":\"v8.0.0\"},{\"arch\":\"arm64\",\"name\":\"buildifier\",\"platform\":\"linux\",\"sha256\":\"4f3a47fcb0d49388cc0c703ba43d83e10c51c35806640d5cab820720ee0540d7\",\"version\":\"v8.0.0\"},{\"arch\":\"amd64\",\"name\":\"buildifier\",\"platform\":\"windows\",\"sha256\":\"bbd11c7e68a985bcb14d1852f6855748dc1c6d98f9ad904d9d52381aee983a63\",\"version\":\"v8.0.0\"},{\"arch\":\"amd64\",\"name\":\"buildozer\",\"platform\":\"darwin\",\"sha256\":\"c921d469ec4396e45ea2df605cd1e3841092e466fdd673820115d155c7e02579\",\"version\":\"v8.0.0\"},{\"arch\":\"arm64\",\"name\":\"buildozer\",\"platform\":\"darwin\",\"sha256\":\"09c8e3114e36479a7b3f059c23c67322e70f04d7b09511319ea70af9a622fd20\",\"version\":\"v8.0.0\"},{\"arch\":\"amd64\",\"name\":\"buildozer\",\"platform\":\"linux\",\"sha256\":\"d0a7adf739fa389e0dc87eae5d11ed0a864260308b4887e5fd30a17d9c33ca9b\",\"version\":\"v8.0.0\"},{\"arch\":\"arm64\",\"name\":\"buildozer\",\"platform\":\"linux\",\"sha256\":\"410d0b1d46a3e044a5d5edb02f24152fd99d58cbddf26fcf802481e0e98bbc2e\",\"version\":\"v8.0.0\"},{\"arch\":\"amd64\",\"name\":\"buildozer\",\"platform\":\"windows\",\"sha256\":\"d4b571004dee5e34d1aa44a6d7f37102ba4de310163648289dfeb6b468048f58\",\"version\":\"v8.0.0\"}]" } } }, From bda3d802dc42463c0223c08f89c7e78a874efa5c Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 22 Jan 2025 12:21:19 +0100 Subject: [PATCH 082/311] deps: update dependency asciinema-player to v3.8.2 (#3616) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- docs/package-lock.json | 8 ++++---- docs/package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/package-lock.json b/docs/package-lock.json index 3588ab8e6..63f63f53f 100644 --- a/docs/package-lock.json +++ b/docs/package-lock.json @@ -13,7 +13,7 @@ "@docusaurus/preset-classic": "3.7.0", "@docusaurus/theme-mermaid": "3.7.0", "@mdx-js/react": "3.1.0", - "asciinema-player": "3.8.1", + "asciinema-player": "3.8.2", "clsx": "2.1.1", "prism-react-renderer": "2.4.0", "react": "18.3.1", @@ -6171,9 +6171,9 @@ } }, "node_modules/asciinema-player": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/asciinema-player/-/asciinema-player-3.8.1.tgz", - "integrity": "sha512-NkpbFg81Y6iJFpDRndakLCQ0G26XSpvuT3vJTFjMRgHb26lqHgRNY9gun54e5MehZ4fEDNYkMZv+z6MfZ8c2aA==", + "version": "3.8.2", + "resolved": "https://registry.npmjs.org/asciinema-player/-/asciinema-player-3.8.2.tgz", + "integrity": "sha512-Lgcnj9u/H6sRpGRX1my7Azcay6llLmB/GVkCGcDbPwdTVTisS1ir8SQ9jRWRvjlLUjpSJkN0euruvy3sLRM8tw==", "license": "Apache-2.0", "dependencies": { "@babel/runtime": "^7.21.0", diff --git a/docs/package.json b/docs/package.json index 90e4497e1..2b940f1ed 100644 --- a/docs/package.json +++ b/docs/package.json @@ -19,7 +19,7 @@ "@docusaurus/preset-classic": "3.7.0", "@docusaurus/theme-mermaid": "3.7.0", "@mdx-js/react": "3.1.0", - "asciinema-player": "3.8.1", + "asciinema-player": "3.8.2", "clsx": "2.1.1", "prism-react-renderer": "2.4.0", "react": "18.3.1", From 3af498fbfeda03635399f006ed172c0e5abadc84 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 22 Jan 2025 12:26:18 +0100 Subject: [PATCH 083/311] deps: update dependency numpy to v2.2.2 (#3618) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/actions/e2e_benchmark/evaluate/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/actions/e2e_benchmark/evaluate/requirements.txt b/.github/actions/e2e_benchmark/evaluate/requirements.txt index f1d505b86..eff9078c7 100644 --- a/.github/actions/e2e_benchmark/evaluate/requirements.txt +++ b/.github/actions/e2e_benchmark/evaluate/requirements.txt @@ -1,3 +1,3 @@ -numpy ==2.2.1 +numpy ==2.2.2 matplotlib ==3.10.0 Pillow ==11.1.0 \ No newline at end of file From e44adf85d4b8c38758341d0f3d209f0fdb143bc3 Mon Sep 17 00:00:00 2001 From: edgelessci <71088502+edgelessci@users.noreply.github.com> Date: Fri, 24 Jan 2025 08:06:12 +0100 Subject: [PATCH 084/311] image: update measurements and image version (#3620) Co-authored-by: edgelessci --- .../measurements/measurements_enterprise.go | 16 ++++++++-------- internal/config/image_enterprise.go | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/internal/attestation/measurements/measurements_enterprise.go b/internal/attestation/measurements/measurements_enterprise.go index 1eea80b36..9c41ff22f 100644 --- a/internal/attestation/measurements/measurements_enterprise.go +++ b/internal/attestation/measurements/measurements_enterprise.go @@ -19,14 +19,14 @@ package measurements // revive:disable:var-naming var ( - aws_AWSNitroTPM = M{0: {Expected: []byte{0x73, 0x7f, 0x76, 0x7a, 0x12, 0xf5, 0x4e, 0x70, 0xee, 0xcb, 0xc8, 0x68, 0x40, 0x11, 0x32, 0x3a, 0xe2, 0xfe, 0x2d, 0xd9, 0xf9, 0x07, 0x85, 0x57, 0x79, 0x69, 0xd7, 0xa2, 0x01, 0x3e, 0x8c, 0x12}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x90, 0x9e, 0x2f, 0x8b, 0x2f, 0x15, 0x74, 0x33, 0x69, 0x03, 0xdb, 0x5b, 0x77, 0xf0, 0xe3, 0x4a, 0xe4, 0x55, 0x7f, 0x8b, 0x21, 0x87, 0x70, 0x84, 0xfc, 0x0a, 0x64, 0xf6, 0x80, 0x08, 0x9b, 0x46}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x3b, 0xd6, 0x30, 0xab, 0xc3, 0xe3, 0x9b, 0x5c, 0xdf, 0x7b, 0x0c, 0xc2, 0x2b, 0x02, 0x1d, 0x36, 0x9c, 0x1b, 0x0d, 0xb9, 0x9a, 0xfd, 0x50, 0x4d, 0x5f, 0x70, 0x04, 0x51, 0x60, 0xbb, 0x46, 0x39}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x43, 0x4b, 0x92, 0xe7, 0xa3, 0xc6, 0x7d, 0xda, 0x71, 0xcf, 0x16, 0x6b, 0xdb, 0x16, 0xa1, 0x2d, 0xf0, 0xd4, 0xd0, 0x2c, 0x1e, 0x2c, 0x30, 0x20, 0x5e, 0x89, 0xe2, 0x5f, 0xbd, 0x9b, 0x75, 0x67}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - aws_AWSSEVSNP = M{0: {Expected: []byte{0xd6, 0xdf, 0x85, 0x53, 0x58, 0xf5, 0xb1, 0x0f, 0x06, 0xf0, 0xfa, 0xb3, 0xf4, 0x08, 0xad, 0x26, 0xcd, 0x16, 0x5a, 0x29, 0x49, 0xba, 0xd6, 0x9e, 0x2c, 0xc7, 0x56, 0x92, 0x52, 0x9e, 0x66, 0x2a}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x50, 0x65, 0xdf, 0x7b, 0x53, 0x4b, 0xdc, 0x48, 0xa6, 0x45, 0x14, 0x83, 0x5d, 0xc1, 0x22, 0x7f, 0x0c, 0x24, 0xc5, 0x4a, 0x47, 0x77, 0xbe, 0x44, 0x07, 0x61, 0x4f, 0xed, 0x72, 0x59, 0x1d, 0xa6}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x4e, 0x66, 0x8b, 0x8b, 0xee, 0x90, 0x27, 0x17, 0xe8, 0x37, 0x97, 0x1a, 0x06, 0xcb, 0x3c, 0xac, 0xa0, 0x65, 0x39, 0xf7, 0x87, 0xc6, 0x5b, 0x88, 0x24, 0xd2, 0xc6, 0x60, 0xb4, 0xa0, 0x5a, 0x4b}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x58, 0x91, 0x8e, 0xc5, 0xc0, 0xc2, 0x0b, 0x70, 0x94, 0x99, 0xa8, 0x42, 0x5e, 0x33, 0xc1, 0x1b, 0x99, 0x9f, 0xa4, 0x10, 0xf9, 0x2c, 0xe9, 0x8e, 0xe5, 0x83, 0x9e, 0x0c, 0x18, 0xd1, 0x27, 0x7e}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - azure_AzureSEVSNP = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x07, 0x6d, 0xaa, 0x38, 0x0e, 0x83, 0x00, 0x51, 0x94, 0x72, 0xf1, 0x97, 0x12, 0xcd, 0x88, 0x4f, 0x76, 0x1c, 0xe0, 0xd1, 0x89, 0x02, 0x94, 0xee, 0xc1, 0xc5, 0x35, 0x37, 0x2d, 0x98, 0x8f, 0x2e}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x6a, 0x34, 0xec, 0x2e, 0xe0, 0xa9, 0x29, 0x4a, 0xcf, 0x9b, 0x11, 0xa8, 0x01, 0x37, 0x2c, 0x88, 0x3c, 0xca, 0x7a, 0xda, 0xd1, 0x4a, 0x51, 0x35, 0x25, 0xd9, 0x9f, 0x63, 0x9f, 0x81, 0xb6, 0x81}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x68, 0xdf, 0xea, 0x40, 0x26, 0x45, 0x9c, 0x44, 0xb5, 0xd2, 0xda, 0xfc, 0x8e, 0x5b, 0x59, 0x31, 0x09, 0x56, 0x92, 0x0c, 0x8c, 0xc1, 0xaa, 0x40, 0x15, 0x69, 0x0b, 0x24, 0xd8, 0x10, 0xde, 0xcd}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - azure_AzureTDX = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x95, 0x34, 0xd3, 0x87, 0x3a, 0x06, 0xe8, 0x62, 0x07, 0x24, 0x4b, 0x9d, 0xa7, 0x3c, 0x0b, 0x29, 0x10, 0x86, 0xf3, 0x94, 0x75, 0x96, 0xdb, 0x3f, 0x1b, 0xe0, 0x67, 0xbb, 0x46, 0x66, 0xb8, 0x16}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xef, 0x66, 0x91, 0xf0, 0x4f, 0xc6, 0xf3, 0xe2, 0x57, 0xf5, 0xd1, 0x70, 0xc1, 0x2c, 0x9b, 0x97, 0x4e, 0x33, 0x2a, 0x7d, 0x51, 0xde, 0xdd, 0xf8, 0xdd, 0xcd, 0xeb, 0x83, 0x54, 0x0d, 0x82, 0xe3}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xc7, 0x81, 0xf0, 0x26, 0xaf, 0xb3, 0x34, 0x9f, 0xcf, 0x50, 0x97, 0x02, 0xee, 0x57, 0x90, 0x19, 0x81, 0x74, 0x07, 0xc9, 0xd7, 0x50, 0xf2, 0xbc, 0xa5, 0x77, 0xdd, 0x2d, 0x51, 0x9f, 0x03, 0x94}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + aws_AWSNitroTPM = M{0: {Expected: []byte{0x73, 0x7f, 0x76, 0x7a, 0x12, 0xf5, 0x4e, 0x70, 0xee, 0xcb, 0xc8, 0x68, 0x40, 0x11, 0x32, 0x3a, 0xe2, 0xfe, 0x2d, 0xd9, 0xf9, 0x07, 0x85, 0x57, 0x79, 0x69, 0xd7, 0xa2, 0x01, 0x3e, 0x8c, 0x12}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x2d, 0x1c, 0xcf, 0x96, 0x43, 0xd0, 0x06, 0x57, 0xc9, 0xf7, 0xbd, 0xba, 0x49, 0xe7, 0x6a, 0x07, 0x8d, 0xf2, 0xc7, 0x83, 0x01, 0x8e, 0x3e, 0x2d, 0xa8, 0x70, 0x58, 0xff, 0x4c, 0xbd, 0xb0, 0x11}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x9c, 0x3f, 0x50, 0x34, 0x9b, 0xa8, 0x1b, 0x5e, 0x6e, 0xca, 0xb4, 0xb8, 0x6d, 0x2a, 0x78, 0xee, 0xc9, 0x3f, 0x0f, 0x97, 0xd1, 0x45, 0xdf, 0x33, 0x27, 0xad, 0x42, 0xf9, 0x66, 0xf1, 0x1f, 0xda}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x40, 0x80, 0xa5, 0xac, 0x9e, 0xb5, 0xed, 0xb8, 0x9c, 0x5c, 0x65, 0xa6, 0x46, 0xa7, 0x7b, 0x54, 0xa4, 0x61, 0x0c, 0x69, 0x60, 0x14, 0xca, 0x58, 0x85, 0xcf, 0xc2, 0x4c, 0x79, 0x17, 0x3d, 0x94}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + aws_AWSSEVSNP = M{0: {Expected: []byte{0xd6, 0xdf, 0x85, 0x53, 0x58, 0xf5, 0xb1, 0x0f, 0x06, 0xf0, 0xfa, 0xb3, 0xf4, 0x08, 0xad, 0x26, 0xcd, 0x16, 0x5a, 0x29, 0x49, 0xba, 0xd6, 0x9e, 0x2c, 0xc7, 0x56, 0x92, 0x52, 0x9e, 0x66, 0x2a}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x99, 0x5c, 0x0d, 0xd9, 0xe2, 0xf1, 0x8b, 0x08, 0x26, 0xde, 0x4a, 0xa1, 0xd3, 0x88, 0x17, 0x6e, 0x6f, 0x92, 0x95, 0x46, 0xe4, 0xaf, 0xb0, 0x38, 0xf6, 0x0f, 0x5b, 0x52, 0xc4, 0x2a, 0xa1, 0x68}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x39, 0xad, 0x22, 0xd2, 0x4e, 0x85, 0x03, 0xd5, 0x1a, 0xf5, 0x8c, 0x18, 0x46, 0x94, 0xe7, 0xac, 0x1c, 0x8e, 0x78, 0x0f, 0x06, 0xa8, 0xec, 0xf1, 0x95, 0xfe, 0xc3, 0x12, 0xcd, 0xf2, 0x1e, 0x0d}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x67, 0xe8, 0xac, 0x5d, 0xe2, 0x05, 0x86, 0xf4, 0x55, 0x79, 0x1f, 0xbf, 0xf3, 0x63, 0x47, 0x8d, 0x5c, 0x8d, 0x45, 0x40, 0xd6, 0x57, 0x41, 0x9c, 0xd8, 0xb2, 0x2e, 0x5b, 0x70, 0x1d, 0x30, 0x4d}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + azure_AzureSEVSNP = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x43, 0x32, 0x3f, 0x81, 0x60, 0x77, 0x88, 0x61, 0xb4, 0x2e, 0x17, 0xec, 0x9d, 0x92, 0xa3, 0x28, 0x5a, 0xf4, 0xe4, 0x54, 0xbd, 0x71, 0x1e, 0x68, 0x60, 0x36, 0x4d, 0xa3, 0x4b, 0xf7, 0x4d, 0x38}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x0d, 0x82, 0x9a, 0x9b, 0x45, 0x89, 0x54, 0xcd, 0x01, 0x14, 0x9e, 0x66, 0x9f, 0x7f, 0x8b, 0x20, 0xdf, 0x4c, 0xaf, 0x74, 0x7e, 0x55, 0x30, 0x85, 0x54, 0x35, 0xf4, 0x9b, 0xca, 0x94, 0x3b, 0xa7}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x32, 0x77, 0x3c, 0x2f, 0x2a, 0xf4, 0xf1, 0x27, 0xbb, 0xd8, 0x29, 0x9d, 0xbf, 0xf6, 0x76, 0x92, 0xdc, 0xbe, 0x1a, 0xb3, 0xd3, 0x27, 0x77, 0x2f, 0x4c, 0x9a, 0x2f, 0x84, 0xec, 0x95, 0x11, 0xa6}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + azure_AzureTDX = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x3e, 0x95, 0x88, 0xbc, 0x58, 0xcc, 0x24, 0x15, 0x4f, 0xec, 0xc7, 0x1a, 0x6f, 0x24, 0x17, 0xe7, 0x31, 0x13, 0x90, 0xed, 0xd9, 0xfd, 0x39, 0xae, 0xc9, 0x21, 0x7e, 0x1d, 0x41, 0xc6, 0x5f, 0x6d}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xd7, 0x61, 0x5b, 0x15, 0x25, 0x8a, 0x6d, 0x8c, 0x30, 0xdb, 0x41, 0x15, 0x5d, 0x9f, 0x4c, 0x42, 0x60, 0x30, 0xed, 0x5b, 0xd0, 0x03, 0x8b, 0x79, 0x81, 0x43, 0xdf, 0xc5, 0x4b, 0xeb, 0x57, 0x69}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xdb, 0xd1, 0xdc, 0x9d, 0x43, 0xb9, 0x88, 0x99, 0x58, 0x37, 0x34, 0x16, 0x00, 0xfd, 0xf1, 0xa9, 0xfe, 0xd2, 0x56, 0xdb, 0x65, 0x05, 0x35, 0x91, 0x48, 0xed, 0x4d, 0xd5, 0x7a, 0xa2, 0x6e, 0xb7}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} azure_AzureTrustedLaunch M - gcp_GCPSEVES = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x46, 0x66, 0x24, 0x02, 0x8b, 0x88, 0xee, 0xbe, 0xe2, 0x74, 0x1a, 0xfc, 0x1d, 0xf3, 0x9b, 0x8c, 0x63, 0x38, 0xdb, 0x33, 0xdc, 0x33, 0xda, 0xa4, 0xe3, 0xb7, 0x04, 0xe7, 0x09, 0xe6, 0x23, 0xe7}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x9d, 0x8a, 0x55, 0x19, 0xea, 0x86, 0xb7, 0x29, 0x2c, 0x34, 0x42, 0x65, 0x28, 0xf0, 0xd9, 0x27, 0xf7, 0x7b, 0xd8, 0x6e, 0x05, 0x75, 0x83, 0xaa, 0x14, 0xb0, 0x67, 0x88, 0x3c, 0xee, 0xae, 0xb7}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x71, 0x9f, 0xe1, 0xb7, 0xab, 0x58, 0x50, 0xeb, 0xea, 0x3b, 0x87, 0xcf, 0xca, 0xe3, 0xcc, 0x06, 0x59, 0x71, 0x73, 0xed, 0x25, 0x95, 0x99, 0x11, 0x25, 0x6c, 0x51, 0x10, 0xbc, 0xa0, 0x6d, 0xc9}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - gcp_GCPSEVSNP = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xbd, 0xdc, 0x0a, 0x04, 0xe9, 0xe3, 0x6e, 0x3a, 0x84, 0x58, 0x98, 0x89, 0xca, 0x48, 0x4e, 0xb6, 0x71, 0xf7, 0x07, 0x98, 0xfc, 0x87, 0xb6, 0x08, 0x2a, 0x9c, 0x37, 0xb5, 0xe3, 0x25, 0x0f, 0xcf}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x5e, 0x99, 0xbd, 0x87, 0x5d, 0xd5, 0x2a, 0x60, 0x03, 0x81, 0x55, 0xa1, 0x09, 0xd9, 0x6d, 0xe2, 0x99, 0xb3, 0x35, 0xf7, 0x46, 0x42, 0x36, 0x22, 0x9f, 0x0b, 0x69, 0x42, 0x27, 0x51, 0x94, 0xba}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x2e, 0x01, 0xf5, 0x4d, 0x13, 0xbd, 0x80, 0x28, 0x12, 0x73, 0x41, 0xde, 0x5a, 0x68, 0x06, 0xe1, 0xa4, 0xe0, 0xdc, 0xd9, 0xb5, 0x81, 0xf7, 0xdd, 0xd6, 0xfa, 0x89, 0xbc, 0xc9, 0x97, 0x90, 0x78}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - openstack_QEMUVTPM = M{4: {Expected: []byte{0x28, 0x02, 0x5a, 0x5d, 0x8d, 0x69, 0xb9, 0xd3, 0x6b, 0x77, 0x3c, 0x98, 0xf4, 0x10, 0x4c, 0x1e, 0x53, 0x58, 0x48, 0x6b, 0x5c, 0xba, 0x2c, 0x58, 0x05, 0x3c, 0xd4, 0x5b, 0x32, 0xf3, 0x93, 0xda}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x24, 0x86, 0x74, 0x1d, 0x39, 0x9a, 0xed, 0xc3, 0xac, 0x96, 0x31, 0x06, 0x71, 0x40, 0xf4, 0x20, 0x2d, 0x56, 0x8a, 0xad, 0xb5, 0xb1, 0xa5, 0xe5, 0x40, 0x9f, 0x32, 0x6e, 0x2d, 0x1d, 0x2d, 0x27}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x77, 0x97, 0xf2, 0xef, 0xf5, 0x3b, 0x56, 0x5c, 0xbb, 0xf3, 0x5b, 0x0b, 0x69, 0xf5, 0x21, 0xa1, 0x40, 0xf5, 0x83, 0x46, 0x2e, 0x55, 0xba, 0xf0, 0x75, 0x95, 0x4e, 0xe0, 0x54, 0xd1, 0xeb, 0x83}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + gcp_GCPSEVES = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x78, 0x84, 0x51, 0x0d, 0x70, 0x90, 0xcf, 0x2d, 0x7e, 0xe0, 0x30, 0x13, 0xc7, 0xc1, 0x7b, 0xc9, 0x39, 0x61, 0x27, 0xc0, 0xe5, 0x74, 0xc1, 0x04, 0xb0, 0xde, 0x1c, 0xf0, 0xf8, 0xe2, 0xd8, 0x28}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x26, 0xed, 0xd3, 0xe1, 0x3c, 0x6c, 0x91, 0x7f, 0xd1, 0x01, 0x78, 0x24, 0x9f, 0x3f, 0x22, 0xd3, 0xb7, 0xd2, 0x25, 0x6f, 0x9d, 0x27, 0xc0, 0xfe, 0x0c, 0x60, 0xb0, 0x61, 0xcc, 0xef, 0xf1, 0xa5}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x77, 0x3a, 0xa6, 0xac, 0x79, 0x37, 0x03, 0x72, 0xba, 0x5f, 0x86, 0xac, 0x68, 0x4d, 0xac, 0x08, 0xb3, 0xc9, 0x38, 0x3b, 0x27, 0xf2, 0xb0, 0x00, 0xb3, 0x50, 0xa1, 0x4d, 0x53, 0x37, 0x25, 0xb6}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + gcp_GCPSEVSNP = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x5b, 0xf8, 0x44, 0x3c, 0x8d, 0xdb, 0x91, 0xb7, 0x83, 0xe1, 0xbb, 0x0d, 0xf0, 0x36, 0x8d, 0xf9, 0xc0, 0xe6, 0x2a, 0x5f, 0x81, 0x9f, 0xf1, 0xbb, 0xe5, 0xae, 0x6f, 0x9c, 0x52, 0xa0, 0x40, 0xe7}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x86, 0x7d, 0x1b, 0x72, 0xb0, 0x0c, 0x81, 0x9c, 0x83, 0xc9, 0xf3, 0x89, 0xcb, 0x7b, 0x82, 0x75, 0x82, 0x85, 0x13, 0x06, 0x07, 0x1f, 0x0c, 0x01, 0x6c, 0xed, 0x97, 0x32, 0xca, 0x62, 0xa1, 0x34}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xf9, 0x7a, 0x7f, 0xe6, 0xaa, 0xaf, 0xb4, 0x7d, 0x78, 0xed, 0xf2, 0x09, 0xf1, 0x27, 0xcf, 0x94, 0xbc, 0xf3, 0x03, 0x58, 0x8d, 0x96, 0x26, 0x28, 0xb0, 0xff, 0xc1, 0x62, 0x8f, 0x2d, 0x7d, 0x6a}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + openstack_QEMUVTPM = M{4: {Expected: []byte{0xe5, 0x7e, 0x8c, 0xa2, 0x04, 0x60, 0xb3, 0xa4, 0x17, 0x52, 0x05, 0xde, 0x6b, 0x4f, 0x5d, 0xdd, 0x6d, 0x0a, 0x4e, 0x9f, 0xcf, 0xbd, 0xea, 0x51, 0x4c, 0xe0, 0xe8, 0x8e, 0xb6, 0x3e, 0xbf, 0x2a}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x73, 0x97, 0x1e, 0x10, 0x0a, 0x07, 0x2a, 0x99, 0x55, 0x55, 0x68, 0xa0, 0x2f, 0x9c, 0x52, 0xf6, 0xd8, 0xe9, 0xd3, 0xf5, 0xf2, 0x04, 0x21, 0x1f, 0x9c, 0x53, 0x7d, 0xa3, 0x5e, 0xd5, 0xa4, 0x4b}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xf8, 0xab, 0x7d, 0xfb, 0xd8, 0x10, 0x2f, 0x92, 0x3b, 0x66, 0x2e, 0xff, 0xca, 0xba, 0x6a, 0x23, 0x23, 0x31, 0x77, 0x1a, 0xf8, 0x62, 0x6e, 0x74, 0xf2, 0x98, 0xfa, 0xdc, 0xff, 0xaa, 0x17, 0x77}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} qemu_QEMUTDX M - qemu_QEMUVTPM = M{4: {Expected: []byte{0x03, 0xdf, 0xe0, 0x9b, 0xcc, 0x56, 0xde, 0x85, 0xec, 0xe3, 0x17, 0x73, 0x1a, 0xd1, 0x91, 0x18, 0x75, 0x81, 0x37, 0x0a, 0x6e, 0x39, 0xe2, 0x0b, 0x3f, 0x75, 0xd2, 0xa1, 0x81, 0x3d, 0x09, 0xe8}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xe0, 0x4d, 0xf6, 0x74, 0xa7, 0x57, 0xf6, 0x6d, 0x91, 0x97, 0x5e, 0x80, 0xe3, 0x95, 0xe5, 0xe2, 0xe5, 0x41, 0x77, 0xa3, 0x6d, 0x67, 0x7e, 0xd5, 0x85, 0xe2, 0x9f, 0x92, 0xe8, 0xf7, 0x62, 0x15}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xcb, 0x9f, 0xe0, 0xd7, 0xb3, 0xe9, 0x2c, 0x1e, 0x4b, 0x2f, 0x66, 0xdd, 0x65, 0x2e, 0x45, 0x43, 0x1b, 0x4e, 0x37, 0x84, 0x32, 0x48, 0x9d, 0x95, 0xaf, 0x94, 0x00, 0x03, 0x0c, 0x16, 0xee, 0xbf}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + qemu_QEMUVTPM = M{4: {Expected: []byte{0xd4, 0xcf, 0xbf, 0x7a, 0xd4, 0x86, 0x40, 0x4b, 0x8a, 0xc3, 0x34, 0x78, 0x63, 0x55, 0x9b, 0x23, 0x2a, 0x1d, 0x2d, 0x31, 0x32, 0xcb, 0xbd, 0x03, 0x83, 0x02, 0x4c, 0x2e, 0xc2, 0x98, 0xc5, 0xe9}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xb7, 0xc2, 0xa1, 0x31, 0x9f, 0x07, 0x7b, 0x78, 0xa4, 0x6b, 0x59, 0xeb, 0x2b, 0x16, 0x52, 0x3b, 0xb1, 0xbe, 0xcf, 0xc4, 0x4b, 0x51, 0x99, 0x20, 0x51, 0xe2, 0x08, 0x81, 0xea, 0x8a, 0x89, 0xa8}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x88, 0xa6, 0xa9, 0xe9, 0x74, 0xcb, 0x50, 0x34, 0x0b, 0xf3, 0x98, 0x68, 0x41, 0x1a, 0x88, 0x0f, 0xf6, 0x26, 0x45, 0x8e, 0x97, 0x49, 0x6f, 0x59, 0xf1, 0x43, 0x53, 0x76, 0xd8, 0x3e, 0x78, 0xac}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} ) diff --git a/internal/config/image_enterprise.go b/internal/config/image_enterprise.go index 4ffa57110..60d3953e9 100644 --- a/internal/config/image_enterprise.go +++ b/internal/config/image_enterprise.go @@ -10,5 +10,5 @@ package config const ( // defaultImage is the default image to use. - defaultImage = "ref/main/stream/nightly/v2.21.0-pre.0.20250121162310-501d1779ede0" + defaultImage = "ref/main/stream/nightly/v2.21.0-pre.0.20250122122618-3af498fbfeda" ) From 148b82e32c8f403b8e6e108a0aebaf2faee72563 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 24 Jan 2025 08:06:24 +0100 Subject: [PATCH 085/311] deps: update dependency prism-react-renderer to v2.4.1 (#3619) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- docs/package-lock.json | 8 ++++---- docs/package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/package-lock.json b/docs/package-lock.json index 63f63f53f..df99269fb 100644 --- a/docs/package-lock.json +++ b/docs/package-lock.json @@ -15,7 +15,7 @@ "@mdx-js/react": "3.1.0", "asciinema-player": "3.8.2", "clsx": "2.1.1", - "prism-react-renderer": "2.4.0", + "prism-react-renderer": "2.4.1", "react": "18.3.1", "react-dom": "18.3.1" }, @@ -16226,9 +16226,9 @@ } }, "node_modules/prism-react-renderer": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/prism-react-renderer/-/prism-react-renderer-2.4.0.tgz", - "integrity": "sha512-327BsVCD/unU4CNLZTWVHyUHKnsqcvj2qbPlQ8MiBE2eq2rgctjigPA1Gp9HLF83kZ20zNN6jgizHJeEsyFYOw==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/prism-react-renderer/-/prism-react-renderer-2.4.1.tgz", + "integrity": "sha512-ey8Ls/+Di31eqzUxC46h8MksNuGx/n0AAC8uKpwFau4RPDYLuE3EXTp8N8G2vX2N7UC/+IXeNUnlWBGGcAG+Ig==", "license": "MIT", "dependencies": { "@types/prismjs": "^1.26.0", diff --git a/docs/package.json b/docs/package.json index 2b940f1ed..e2d482d70 100644 --- a/docs/package.json +++ b/docs/package.json @@ -21,7 +21,7 @@ "@mdx-js/react": "3.1.0", "asciinema-player": "3.8.2", "clsx": "2.1.1", - "prism-react-renderer": "2.4.0", + "prism-react-renderer": "2.4.1", "react": "18.3.1", "react-dom": "18.3.1" }, From 8e8c44e35a4178272ebeb6802271725ce133775b Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 24 Jan 2025 13:36:58 +0100 Subject: [PATCH 086/311] deps: update dependency buildifier_prebuilt to v8.0.1 (#3621) * deps: update dependency buildifier_prebuilt to v8.0.1 * deps: tidy all modules --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: edgelessci --- MODULE.bazel | 2 +- MODULE.bazel.lock | 50 +++++++++++++++++++++++------------------------ 2 files changed, 26 insertions(+), 26 deletions(-) diff --git a/MODULE.bazel b/MODULE.bazel index ba290c9ba..4a466fdde 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -16,7 +16,7 @@ bazel_dep(name = "rules_pkg", version = "1.0.1") bazel_dep(name = "rules_proto", version = "7.1.0") bazel_dep(name = "rules_python", version = "1.1.0") -bazel_dep(name = "buildifier_prebuilt", version = "8.0.0", dev_dependency = True) +bazel_dep(name = "buildifier_prebuilt", version = "8.0.1", dev_dependency = True) go_sdk = use_extension("@io_bazel_rules_go//go:extensions.bzl", "go_sdk") go_sdk.download( diff --git a/MODULE.bazel.lock b/MODULE.bazel.lock index 08ca29107..eb9b82958 100644 --- a/MODULE.bazel.lock +++ b/MODULE.bazel.lock @@ -38,8 +38,8 @@ "https://bcr.bazel.build/modules/bazel_skylib/1.7.0/MODULE.bazel": "0db596f4563de7938de764cc8deeabec291f55e8ec15299718b93c4423e9796d", "https://bcr.bazel.build/modules/bazel_skylib/1.7.1/MODULE.bazel": "3120d80c5861aa616222ec015332e5f8d3171e062e3e804a2a0253e1be26e59b", "https://bcr.bazel.build/modules/bazel_skylib/1.7.1/source.json": "f121b43eeefc7c29efbd51b83d08631e2347297c95aac9764a701f2a6a2bb953", - "https://bcr.bazel.build/modules/buildifier_prebuilt/8.0.0/MODULE.bazel": "ce80a1946ca406884aa20ad83fbbe74f9b13fb91ae6d8a8b8339e18e5eaebb2d", - "https://bcr.bazel.build/modules/buildifier_prebuilt/8.0.0/source.json": "b83ab501d5efda1b2c9f68086bac6b2e38cb17359fb6eabbc23465f6a61a2389", + "https://bcr.bazel.build/modules/buildifier_prebuilt/8.0.1/MODULE.bazel": "66ea722b98a7ce0b790d913e82163ebe04509073b269539403936d8f65bef027", + "https://bcr.bazel.build/modules/buildifier_prebuilt/8.0.1/source.json": "1bebf90699bb94cb232b417a6e20ac8b21ad4ccfbcb506116635825c4c87b10b", "https://bcr.bazel.build/modules/buildozer/7.1.2/MODULE.bazel": "2e8dd40ede9c454042645fd8d8d0cd1527966aa5c919de86661e62953cd73d84", "https://bcr.bazel.build/modules/buildozer/7.1.2/source.json": "c9028a501d2db85793a6996205c8de120944f50a0d570438fcae0457a5f9d1f8", "https://bcr.bazel.build/modules/gazelle/0.32.0/MODULE.bazel": "b499f58a5d0d3537f3cf5b76d8ada18242f64ec474d8391247438bf04f58c7b8", @@ -192,8 +192,8 @@ }, "@@buildifier_prebuilt~//:defs.bzl%buildifier_prebuilt_deps_extension": { "general": { - "bzlTransitiveDigest": "bwPINGwEV2DXw6rfPzk8CzUw7vvA1qVBAq+yRLfKl3I=", - "usagesDigest": "EUEjIQT6WiFnYobbJsanQwssCVRk1RL5tNUpXbzebjo=", + "bzlTransitiveDigest": "rGFwP53kZJt1xitZcYx6affAvfHqnyxx2HCrewFcWTc=", + "usagesDigest": "sy21t1r/nZFzoEm0sKKNEtD2MI9TRY4JhsxxM03nWJw=", "recordedFileInputs": {}, "recordedDirentsInputs": {}, "envVariables": {}, @@ -203,11 +203,11 @@ "ruleClassName": "http_file", "attributes": { "urls": [ - "https://github.com/bazelbuild/buildtools/releases/download/v8.0.0/buildifier-darwin-amd64" + "https://github.com/bazelbuild/buildtools/releases/download/v8.0.1/buildifier-darwin-amd64" ], "downloaded_file_path": "buildifier", "executable": true, - "sha256": "00c54f5363899653b6d5c86808d65447e10ab658a1b242707449c169c8f879d0" + "sha256": "802b013211dbcf91e3c0658ba33ecb3932ef5a6f6764a0b13efcec4e2df04c83" } }, "buildifier_darwin_arm64": { @@ -215,11 +215,11 @@ "ruleClassName": "http_file", "attributes": { "urls": [ - "https://github.com/bazelbuild/buildtools/releases/download/v8.0.0/buildifier-darwin-arm64" + "https://github.com/bazelbuild/buildtools/releases/download/v8.0.1/buildifier-darwin-arm64" ], "downloaded_file_path": "buildifier", "executable": true, - "sha256": "cb2135ff8489bf3e1a1ba60be7d2cdab904dde7812426d4c72c021024c617fcb" + "sha256": "833e2afc331b9ad8f6b038ad3d69ceeaf97651900bf2a3a45f54f42cafe0bfd3" } }, "buildifier_linux_amd64": { @@ -227,11 +227,11 @@ "ruleClassName": "http_file", "attributes": { "urls": [ - "https://github.com/bazelbuild/buildtools/releases/download/v8.0.0/buildifier-linux-amd64" + "https://github.com/bazelbuild/buildtools/releases/download/v8.0.1/buildifier-linux-amd64" ], "downloaded_file_path": "buildifier", "executable": true, - "sha256": "3482807cafadb64912ad912bdc752a8d4118d12b2f493f66f961f94d60f76d6a" + "sha256": "1976053ed4decd6dd93170885b4387eddc76ec70dc2697b2e91a9af83269418a" } }, "buildifier_linux_arm64": { @@ -239,11 +239,11 @@ "ruleClassName": "http_file", "attributes": { "urls": [ - "https://github.com/bazelbuild/buildtools/releases/download/v8.0.0/buildifier-linux-arm64" + "https://github.com/bazelbuild/buildtools/releases/download/v8.0.1/buildifier-linux-arm64" ], "downloaded_file_path": "buildifier", "executable": true, - "sha256": "4f3a47fcb0d49388cc0c703ba43d83e10c51c35806640d5cab820720ee0540d7" + "sha256": "93078c57763493bdc2914ed340544500b8f3497341a62e90f00e9e184c4d9c2c" } }, "buildifier_windows_amd64": { @@ -251,11 +251,11 @@ "ruleClassName": "http_file", "attributes": { "urls": [ - "https://github.com/bazelbuild/buildtools/releases/download/v8.0.0/buildifier-windows-amd64.exe" + "https://github.com/bazelbuild/buildtools/releases/download/v8.0.1/buildifier-windows-amd64.exe" ], "downloaded_file_path": "buildifier.exe", "executable": true, - "sha256": "bbd11c7e68a985bcb14d1852f6855748dc1c6d98f9ad904d9d52381aee983a63" + "sha256": "6edc9247e6d42d27fb67b9509bb795d159a12468faa89e9f290dcadc26571c31" } }, "buildozer_darwin_amd64": { @@ -263,11 +263,11 @@ "ruleClassName": "http_file", "attributes": { "urls": [ - "https://github.com/bazelbuild/buildtools/releases/download/v8.0.0/buildozer-darwin-amd64" + "https://github.com/bazelbuild/buildtools/releases/download/v8.0.1/buildozer-darwin-amd64" ], "downloaded_file_path": "buildozer", "executable": true, - "sha256": "c921d469ec4396e45ea2df605cd1e3841092e466fdd673820115d155c7e02579" + "sha256": "799be47db682fb06bfc677438d0c910032dda783606b1eec77669f2c1a17c65a" } }, "buildozer_darwin_arm64": { @@ -275,11 +275,11 @@ "ruleClassName": "http_file", "attributes": { "urls": [ - "https://github.com/bazelbuild/buildtools/releases/download/v8.0.0/buildozer-darwin-arm64" + "https://github.com/bazelbuild/buildtools/releases/download/v8.0.1/buildozer-darwin-arm64" ], "downloaded_file_path": "buildozer", "executable": true, - "sha256": "09c8e3114e36479a7b3f059c23c67322e70f04d7b09511319ea70af9a622fd20" + "sha256": "118f2ff581c49e03aeb77e34fddebab10923b93e381185e43e0c1835ba189cd9" } }, "buildozer_linux_amd64": { @@ -287,11 +287,11 @@ "ruleClassName": "http_file", "attributes": { "urls": [ - "https://github.com/bazelbuild/buildtools/releases/download/v8.0.0/buildozer-linux-amd64" + "https://github.com/bazelbuild/buildtools/releases/download/v8.0.1/buildozer-linux-amd64" ], "downloaded_file_path": "buildozer", "executable": true, - "sha256": "d0a7adf739fa389e0dc87eae5d11ed0a864260308b4887e5fd30a17d9c33ca9b" + "sha256": "4f5a91d4f7fb61ff4d39cdedb7dcf93bb17f3b7737b07175ad4456dc6bdafac1" } }, "buildozer_linux_arm64": { @@ -299,11 +299,11 @@ "ruleClassName": "http_file", "attributes": { "urls": [ - "https://github.com/bazelbuild/buildtools/releases/download/v8.0.0/buildozer-linux-arm64" + "https://github.com/bazelbuild/buildtools/releases/download/v8.0.1/buildozer-linux-arm64" ], "downloaded_file_path": "buildozer", "executable": true, - "sha256": "410d0b1d46a3e044a5d5edb02f24152fd99d58cbddf26fcf802481e0e98bbc2e" + "sha256": "a7eec1ddcf5075ef3b869f1bf476fce174f0226a35f7e20734caa5a55b10ce26" } }, "buildozer_windows_amd64": { @@ -311,18 +311,18 @@ "ruleClassName": "http_file", "attributes": { "urls": [ - "https://github.com/bazelbuild/buildtools/releases/download/v8.0.0/buildozer-windows-amd64.exe" + "https://github.com/bazelbuild/buildtools/releases/download/v8.0.1/buildozer-windows-amd64.exe" ], "downloaded_file_path": "buildozer.exe", "executable": true, - "sha256": "d4b571004dee5e34d1aa44a6d7f37102ba4de310163648289dfeb6b468048f58" + "sha256": "3b51ae3dd0221eb9d43614206f0886ea36d78e6bb4f8dea69f7bc4cc285d1f15" } }, "buildifier_prebuilt_toolchains": { "bzlFile": "@@buildifier_prebuilt~//:defs.bzl", "ruleClassName": "_buildifier_toolchain_setup", "attributes": { - "assets_json": "[{\"arch\":\"amd64\",\"name\":\"buildifier\",\"platform\":\"darwin\",\"sha256\":\"00c54f5363899653b6d5c86808d65447e10ab658a1b242707449c169c8f879d0\",\"version\":\"v8.0.0\"},{\"arch\":\"arm64\",\"name\":\"buildifier\",\"platform\":\"darwin\",\"sha256\":\"cb2135ff8489bf3e1a1ba60be7d2cdab904dde7812426d4c72c021024c617fcb\",\"version\":\"v8.0.0\"},{\"arch\":\"amd64\",\"name\":\"buildifier\",\"platform\":\"linux\",\"sha256\":\"3482807cafadb64912ad912bdc752a8d4118d12b2f493f66f961f94d60f76d6a\",\"version\":\"v8.0.0\"},{\"arch\":\"arm64\",\"name\":\"buildifier\",\"platform\":\"linux\",\"sha256\":\"4f3a47fcb0d49388cc0c703ba43d83e10c51c35806640d5cab820720ee0540d7\",\"version\":\"v8.0.0\"},{\"arch\":\"amd64\",\"name\":\"buildifier\",\"platform\":\"windows\",\"sha256\":\"bbd11c7e68a985bcb14d1852f6855748dc1c6d98f9ad904d9d52381aee983a63\",\"version\":\"v8.0.0\"},{\"arch\":\"amd64\",\"name\":\"buildozer\",\"platform\":\"darwin\",\"sha256\":\"c921d469ec4396e45ea2df605cd1e3841092e466fdd673820115d155c7e02579\",\"version\":\"v8.0.0\"},{\"arch\":\"arm64\",\"name\":\"buildozer\",\"platform\":\"darwin\",\"sha256\":\"09c8e3114e36479a7b3f059c23c67322e70f04d7b09511319ea70af9a622fd20\",\"version\":\"v8.0.0\"},{\"arch\":\"amd64\",\"name\":\"buildozer\",\"platform\":\"linux\",\"sha256\":\"d0a7adf739fa389e0dc87eae5d11ed0a864260308b4887e5fd30a17d9c33ca9b\",\"version\":\"v8.0.0\"},{\"arch\":\"arm64\",\"name\":\"buildozer\",\"platform\":\"linux\",\"sha256\":\"410d0b1d46a3e044a5d5edb02f24152fd99d58cbddf26fcf802481e0e98bbc2e\",\"version\":\"v8.0.0\"},{\"arch\":\"amd64\",\"name\":\"buildozer\",\"platform\":\"windows\",\"sha256\":\"d4b571004dee5e34d1aa44a6d7f37102ba4de310163648289dfeb6b468048f58\",\"version\":\"v8.0.0\"}]" + "assets_json": "[{\"arch\":\"amd64\",\"name\":\"buildifier\",\"platform\":\"darwin\",\"sha256\":\"802b013211dbcf91e3c0658ba33ecb3932ef5a6f6764a0b13efcec4e2df04c83\",\"version\":\"v8.0.1\"},{\"arch\":\"arm64\",\"name\":\"buildifier\",\"platform\":\"darwin\",\"sha256\":\"833e2afc331b9ad8f6b038ad3d69ceeaf97651900bf2a3a45f54f42cafe0bfd3\",\"version\":\"v8.0.1\"},{\"arch\":\"amd64\",\"name\":\"buildifier\",\"platform\":\"linux\",\"sha256\":\"1976053ed4decd6dd93170885b4387eddc76ec70dc2697b2e91a9af83269418a\",\"version\":\"v8.0.1\"},{\"arch\":\"arm64\",\"name\":\"buildifier\",\"platform\":\"linux\",\"sha256\":\"93078c57763493bdc2914ed340544500b8f3497341a62e90f00e9e184c4d9c2c\",\"version\":\"v8.0.1\"},{\"arch\":\"amd64\",\"name\":\"buildifier\",\"platform\":\"windows\",\"sha256\":\"6edc9247e6d42d27fb67b9509bb795d159a12468faa89e9f290dcadc26571c31\",\"version\":\"v8.0.1\"},{\"arch\":\"amd64\",\"name\":\"buildozer\",\"platform\":\"darwin\",\"sha256\":\"799be47db682fb06bfc677438d0c910032dda783606b1eec77669f2c1a17c65a\",\"version\":\"v8.0.1\"},{\"arch\":\"arm64\",\"name\":\"buildozer\",\"platform\":\"darwin\",\"sha256\":\"118f2ff581c49e03aeb77e34fddebab10923b93e381185e43e0c1835ba189cd9\",\"version\":\"v8.0.1\"},{\"arch\":\"amd64\",\"name\":\"buildozer\",\"platform\":\"linux\",\"sha256\":\"4f5a91d4f7fb61ff4d39cdedb7dcf93bb17f3b7737b07175ad4456dc6bdafac1\",\"version\":\"v8.0.1\"},{\"arch\":\"arm64\",\"name\":\"buildozer\",\"platform\":\"linux\",\"sha256\":\"a7eec1ddcf5075ef3b869f1bf476fce174f0226a35f7e20734caa5a55b10ce26\",\"version\":\"v8.0.1\"},{\"arch\":\"amd64\",\"name\":\"buildozer\",\"platform\":\"windows\",\"sha256\":\"3b51ae3dd0221eb9d43614206f0886ea36d78e6bb4f8dea69f7bc4cc285d1f15\",\"version\":\"v8.0.1\"}]" } } }, From 8da08bec8de1643b97256f65eb9c0c0bd0ee9d10 Mon Sep 17 00:00:00 2001 From: miampf Date: Tue, 28 Jan 2025 13:12:50 +0000 Subject: [PATCH 087/311] e2e: downgrade vale version to 3.9.3 (#3624) --- .github/workflows/docs-vale.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/docs-vale.yml b/.github/workflows/docs-vale.yml index a9f58cc04..bb6331ce5 100644 --- a/.github/workflows/docs-vale.yml +++ b/.github/workflows/docs-vale.yml @@ -29,3 +29,4 @@ jobs: with: files: docs/docs fail_on_error: true + version: 3.9.3 From 7242a1eb7477ad21bd987753fe04fea499a493a2 Mon Sep 17 00:00:00 2001 From: edgelessci <71088502+edgelessci@users.noreply.github.com> Date: Wed, 29 Jan 2025 16:31:07 +0100 Subject: [PATCH 088/311] image: update measurements and image version (#3625) Co-authored-by: edgelessci --- .../measurements/measurements_enterprise.go | 16 ++++++++-------- internal/config/image_enterprise.go | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/internal/attestation/measurements/measurements_enterprise.go b/internal/attestation/measurements/measurements_enterprise.go index 9c41ff22f..3f372883c 100644 --- a/internal/attestation/measurements/measurements_enterprise.go +++ b/internal/attestation/measurements/measurements_enterprise.go @@ -19,14 +19,14 @@ package measurements // revive:disable:var-naming var ( - aws_AWSNitroTPM = M{0: {Expected: []byte{0x73, 0x7f, 0x76, 0x7a, 0x12, 0xf5, 0x4e, 0x70, 0xee, 0xcb, 0xc8, 0x68, 0x40, 0x11, 0x32, 0x3a, 0xe2, 0xfe, 0x2d, 0xd9, 0xf9, 0x07, 0x85, 0x57, 0x79, 0x69, 0xd7, 0xa2, 0x01, 0x3e, 0x8c, 0x12}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x2d, 0x1c, 0xcf, 0x96, 0x43, 0xd0, 0x06, 0x57, 0xc9, 0xf7, 0xbd, 0xba, 0x49, 0xe7, 0x6a, 0x07, 0x8d, 0xf2, 0xc7, 0x83, 0x01, 0x8e, 0x3e, 0x2d, 0xa8, 0x70, 0x58, 0xff, 0x4c, 0xbd, 0xb0, 0x11}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x9c, 0x3f, 0x50, 0x34, 0x9b, 0xa8, 0x1b, 0x5e, 0x6e, 0xca, 0xb4, 0xb8, 0x6d, 0x2a, 0x78, 0xee, 0xc9, 0x3f, 0x0f, 0x97, 0xd1, 0x45, 0xdf, 0x33, 0x27, 0xad, 0x42, 0xf9, 0x66, 0xf1, 0x1f, 0xda}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x40, 0x80, 0xa5, 0xac, 0x9e, 0xb5, 0xed, 0xb8, 0x9c, 0x5c, 0x65, 0xa6, 0x46, 0xa7, 0x7b, 0x54, 0xa4, 0x61, 0x0c, 0x69, 0x60, 0x14, 0xca, 0x58, 0x85, 0xcf, 0xc2, 0x4c, 0x79, 0x17, 0x3d, 0x94}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - aws_AWSSEVSNP = M{0: {Expected: []byte{0xd6, 0xdf, 0x85, 0x53, 0x58, 0xf5, 0xb1, 0x0f, 0x06, 0xf0, 0xfa, 0xb3, 0xf4, 0x08, 0xad, 0x26, 0xcd, 0x16, 0x5a, 0x29, 0x49, 0xba, 0xd6, 0x9e, 0x2c, 0xc7, 0x56, 0x92, 0x52, 0x9e, 0x66, 0x2a}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x99, 0x5c, 0x0d, 0xd9, 0xe2, 0xf1, 0x8b, 0x08, 0x26, 0xde, 0x4a, 0xa1, 0xd3, 0x88, 0x17, 0x6e, 0x6f, 0x92, 0x95, 0x46, 0xe4, 0xaf, 0xb0, 0x38, 0xf6, 0x0f, 0x5b, 0x52, 0xc4, 0x2a, 0xa1, 0x68}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x39, 0xad, 0x22, 0xd2, 0x4e, 0x85, 0x03, 0xd5, 0x1a, 0xf5, 0x8c, 0x18, 0x46, 0x94, 0xe7, 0xac, 0x1c, 0x8e, 0x78, 0x0f, 0x06, 0xa8, 0xec, 0xf1, 0x95, 0xfe, 0xc3, 0x12, 0xcd, 0xf2, 0x1e, 0x0d}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x67, 0xe8, 0xac, 0x5d, 0xe2, 0x05, 0x86, 0xf4, 0x55, 0x79, 0x1f, 0xbf, 0xf3, 0x63, 0x47, 0x8d, 0x5c, 0x8d, 0x45, 0x40, 0xd6, 0x57, 0x41, 0x9c, 0xd8, 0xb2, 0x2e, 0x5b, 0x70, 0x1d, 0x30, 0x4d}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - azure_AzureSEVSNP = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x43, 0x32, 0x3f, 0x81, 0x60, 0x77, 0x88, 0x61, 0xb4, 0x2e, 0x17, 0xec, 0x9d, 0x92, 0xa3, 0x28, 0x5a, 0xf4, 0xe4, 0x54, 0xbd, 0x71, 0x1e, 0x68, 0x60, 0x36, 0x4d, 0xa3, 0x4b, 0xf7, 0x4d, 0x38}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x0d, 0x82, 0x9a, 0x9b, 0x45, 0x89, 0x54, 0xcd, 0x01, 0x14, 0x9e, 0x66, 0x9f, 0x7f, 0x8b, 0x20, 0xdf, 0x4c, 0xaf, 0x74, 0x7e, 0x55, 0x30, 0x85, 0x54, 0x35, 0xf4, 0x9b, 0xca, 0x94, 0x3b, 0xa7}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x32, 0x77, 0x3c, 0x2f, 0x2a, 0xf4, 0xf1, 0x27, 0xbb, 0xd8, 0x29, 0x9d, 0xbf, 0xf6, 0x76, 0x92, 0xdc, 0xbe, 0x1a, 0xb3, 0xd3, 0x27, 0x77, 0x2f, 0x4c, 0x9a, 0x2f, 0x84, 0xec, 0x95, 0x11, 0xa6}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - azure_AzureTDX = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x3e, 0x95, 0x88, 0xbc, 0x58, 0xcc, 0x24, 0x15, 0x4f, 0xec, 0xc7, 0x1a, 0x6f, 0x24, 0x17, 0xe7, 0x31, 0x13, 0x90, 0xed, 0xd9, 0xfd, 0x39, 0xae, 0xc9, 0x21, 0x7e, 0x1d, 0x41, 0xc6, 0x5f, 0x6d}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xd7, 0x61, 0x5b, 0x15, 0x25, 0x8a, 0x6d, 0x8c, 0x30, 0xdb, 0x41, 0x15, 0x5d, 0x9f, 0x4c, 0x42, 0x60, 0x30, 0xed, 0x5b, 0xd0, 0x03, 0x8b, 0x79, 0x81, 0x43, 0xdf, 0xc5, 0x4b, 0xeb, 0x57, 0x69}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xdb, 0xd1, 0xdc, 0x9d, 0x43, 0xb9, 0x88, 0x99, 0x58, 0x37, 0x34, 0x16, 0x00, 0xfd, 0xf1, 0xa9, 0xfe, 0xd2, 0x56, 0xdb, 0x65, 0x05, 0x35, 0x91, 0x48, 0xed, 0x4d, 0xd5, 0x7a, 0xa2, 0x6e, 0xb7}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + aws_AWSNitroTPM = M{0: {Expected: []byte{0x73, 0x7f, 0x76, 0x7a, 0x12, 0xf5, 0x4e, 0x70, 0xee, 0xcb, 0xc8, 0x68, 0x40, 0x11, 0x32, 0x3a, 0xe2, 0xfe, 0x2d, 0xd9, 0xf9, 0x07, 0x85, 0x57, 0x79, 0x69, 0xd7, 0xa2, 0x01, 0x3e, 0x8c, 0x12}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x87, 0x20, 0xe7, 0x90, 0x08, 0x93, 0xe7, 0x3b, 0x0e, 0x00, 0xbf, 0x5e, 0xc4, 0x8f, 0x96, 0x81, 0xe8, 0x0d, 0xc9, 0x8f, 0x48, 0xd3, 0xfd, 0x8a, 0x7b, 0xd3, 0x60, 0xcd, 0x34, 0x6a, 0xc8, 0x40}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xac, 0x7f, 0x4f, 0xa8, 0x2c, 0x9a, 0x6e, 0xd7, 0x6c, 0x3a, 0x5d, 0x72, 0x71, 0x9c, 0x54, 0x56, 0x3d, 0x4c, 0x89, 0x35, 0xb1, 0x71, 0x2e, 0x07, 0xa0, 0x96, 0x58, 0x1b, 0x28, 0x90, 0xcc, 0x58}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x7c, 0x19, 0x50, 0xb5, 0x24, 0x6a, 0xe8, 0x10, 0x8e, 0xb5, 0x37, 0x10, 0xd5, 0x33, 0x80, 0xce, 0x41, 0x0b, 0xc9, 0x3f, 0x99, 0x0e, 0x01, 0xeb, 0x5c, 0xc4, 0xba, 0xf3, 0xfc, 0xb5, 0xcf, 0x3a}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + aws_AWSSEVSNP = M{0: {Expected: []byte{0xd6, 0xdf, 0x85, 0x53, 0x58, 0xf5, 0xb1, 0x0f, 0x06, 0xf0, 0xfa, 0xb3, 0xf4, 0x08, 0xad, 0x26, 0xcd, 0x16, 0x5a, 0x29, 0x49, 0xba, 0xd6, 0x9e, 0x2c, 0xc7, 0x56, 0x92, 0x52, 0x9e, 0x66, 0x2a}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x66, 0xeb, 0xc3, 0xfe, 0xf6, 0x42, 0xa3, 0xc2, 0x38, 0x77, 0x63, 0x11, 0x7d, 0x56, 0x59, 0x73, 0xb1, 0xf3, 0x11, 0x06, 0x75, 0x86, 0x02, 0xdd, 0x75, 0x37, 0x7a, 0x49, 0xc2, 0x3a, 0x18, 0x04}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xa4, 0xcb, 0x35, 0xae, 0xc9, 0x55, 0x4a, 0xb8, 0x86, 0x5e, 0xb2, 0x3c, 0xa5, 0x3d, 0x93, 0x8f, 0xed, 0x7b, 0xcf, 0xe1, 0x13, 0x8f, 0x7d, 0x2f, 0x9c, 0x6f, 0x3e, 0x46, 0x69, 0x2d, 0x20, 0xde}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xfc, 0x86, 0x05, 0xda, 0x15, 0xec, 0x2c, 0xdd, 0x17, 0x87, 0x02, 0x7a, 0x18, 0x61, 0x31, 0x88, 0x73, 0x09, 0x65, 0x8d, 0xbc, 0xc2, 0x1f, 0x53, 0xcb, 0x33, 0xd5, 0x0e, 0x4a, 0xc8, 0xca, 0x0c}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + azure_AzureSEVSNP = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x97, 0x96, 0x06, 0xd9, 0xc8, 0x09, 0x70, 0xdb, 0xf8, 0x57, 0x5c, 0xc4, 0x4d, 0xfa, 0x7e, 0x01, 0xeb, 0x41, 0x6c, 0xbc, 0x18, 0xcd, 0x6a, 0xed, 0xa8, 0x20, 0x35, 0xf6, 0x3a, 0xb4, 0xaf, 0x53}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x6b, 0x6c, 0xb0, 0x94, 0xaa, 0xe1, 0xeb, 0xca, 0x39, 0xe1, 0x67, 0xad, 0x95, 0x87, 0xb5, 0x99, 0xae, 0xe1, 0xf1, 0x9f, 0x87, 0xa8, 0x1f, 0x77, 0x44, 0x51, 0xda, 0xc4, 0xbf, 0x55, 0x52, 0xb4}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xd7, 0xc5, 0x11, 0x8c, 0xef, 0x9c, 0xe2, 0xe4, 0xd0, 0x9f, 0x67, 0xf3, 0x9d, 0xea, 0xea, 0x7a, 0x99, 0x67, 0xe0, 0xce, 0x58, 0x23, 0xa3, 0x29, 0x51, 0x16, 0xd8, 0xdf, 0xa5, 0x3b, 0x8d, 0x97}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + azure_AzureTDX = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xcc, 0xb1, 0x48, 0x5d, 0xc4, 0x70, 0x8d, 0xa1, 0xe4, 0x74, 0x4d, 0xa0, 0x03, 0x8e, 0x81, 0xcb, 0x84, 0x7a, 0x9f, 0x6f, 0x8a, 0x90, 0x12, 0xf8, 0x6f, 0xc7, 0x4a, 0xa0, 0xff, 0xf4, 0x78, 0xb3}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x86, 0xbc, 0xcf, 0x8c, 0x99, 0xef, 0x7d, 0x54, 0xe1, 0x6d, 0xb4, 0xcd, 0xea, 0x02, 0x84, 0x38, 0x08, 0x86, 0xe1, 0x1e, 0x66, 0x34, 0xd8, 0xf8, 0x78, 0xb0, 0xec, 0x86, 0x88, 0xc8, 0x35, 0x45}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xcc, 0x84, 0xf1, 0xc7, 0x03, 0x00, 0x09, 0xb6, 0x07, 0x3a, 0xeb, 0x8e, 0x5a, 0xd0, 0xf0, 0xcd, 0x72, 0x01, 0xf7, 0x67, 0x0f, 0x64, 0x29, 0xe5, 0x88, 0xc8, 0xc0, 0x1e, 0x30, 0x8e, 0x72, 0xa1}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} azure_AzureTrustedLaunch M - gcp_GCPSEVES = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x78, 0x84, 0x51, 0x0d, 0x70, 0x90, 0xcf, 0x2d, 0x7e, 0xe0, 0x30, 0x13, 0xc7, 0xc1, 0x7b, 0xc9, 0x39, 0x61, 0x27, 0xc0, 0xe5, 0x74, 0xc1, 0x04, 0xb0, 0xde, 0x1c, 0xf0, 0xf8, 0xe2, 0xd8, 0x28}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x26, 0xed, 0xd3, 0xe1, 0x3c, 0x6c, 0x91, 0x7f, 0xd1, 0x01, 0x78, 0x24, 0x9f, 0x3f, 0x22, 0xd3, 0xb7, 0xd2, 0x25, 0x6f, 0x9d, 0x27, 0xc0, 0xfe, 0x0c, 0x60, 0xb0, 0x61, 0xcc, 0xef, 0xf1, 0xa5}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x77, 0x3a, 0xa6, 0xac, 0x79, 0x37, 0x03, 0x72, 0xba, 0x5f, 0x86, 0xac, 0x68, 0x4d, 0xac, 0x08, 0xb3, 0xc9, 0x38, 0x3b, 0x27, 0xf2, 0xb0, 0x00, 0xb3, 0x50, 0xa1, 0x4d, 0x53, 0x37, 0x25, 0xb6}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - gcp_GCPSEVSNP = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x5b, 0xf8, 0x44, 0x3c, 0x8d, 0xdb, 0x91, 0xb7, 0x83, 0xe1, 0xbb, 0x0d, 0xf0, 0x36, 0x8d, 0xf9, 0xc0, 0xe6, 0x2a, 0x5f, 0x81, 0x9f, 0xf1, 0xbb, 0xe5, 0xae, 0x6f, 0x9c, 0x52, 0xa0, 0x40, 0xe7}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x86, 0x7d, 0x1b, 0x72, 0xb0, 0x0c, 0x81, 0x9c, 0x83, 0xc9, 0xf3, 0x89, 0xcb, 0x7b, 0x82, 0x75, 0x82, 0x85, 0x13, 0x06, 0x07, 0x1f, 0x0c, 0x01, 0x6c, 0xed, 0x97, 0x32, 0xca, 0x62, 0xa1, 0x34}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xf9, 0x7a, 0x7f, 0xe6, 0xaa, 0xaf, 0xb4, 0x7d, 0x78, 0xed, 0xf2, 0x09, 0xf1, 0x27, 0xcf, 0x94, 0xbc, 0xf3, 0x03, 0x58, 0x8d, 0x96, 0x26, 0x28, 0xb0, 0xff, 0xc1, 0x62, 0x8f, 0x2d, 0x7d, 0x6a}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - openstack_QEMUVTPM = M{4: {Expected: []byte{0xe5, 0x7e, 0x8c, 0xa2, 0x04, 0x60, 0xb3, 0xa4, 0x17, 0x52, 0x05, 0xde, 0x6b, 0x4f, 0x5d, 0xdd, 0x6d, 0x0a, 0x4e, 0x9f, 0xcf, 0xbd, 0xea, 0x51, 0x4c, 0xe0, 0xe8, 0x8e, 0xb6, 0x3e, 0xbf, 0x2a}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x73, 0x97, 0x1e, 0x10, 0x0a, 0x07, 0x2a, 0x99, 0x55, 0x55, 0x68, 0xa0, 0x2f, 0x9c, 0x52, 0xf6, 0xd8, 0xe9, 0xd3, 0xf5, 0xf2, 0x04, 0x21, 0x1f, 0x9c, 0x53, 0x7d, 0xa3, 0x5e, 0xd5, 0xa4, 0x4b}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xf8, 0xab, 0x7d, 0xfb, 0xd8, 0x10, 0x2f, 0x92, 0x3b, 0x66, 0x2e, 0xff, 0xca, 0xba, 0x6a, 0x23, 0x23, 0x31, 0x77, 0x1a, 0xf8, 0x62, 0x6e, 0x74, 0xf2, 0x98, 0xfa, 0xdc, 0xff, 0xaa, 0x17, 0x77}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + gcp_GCPSEVES = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x5a, 0xc6, 0x56, 0x80, 0x5c, 0x64, 0xae, 0xcc, 0xb5, 0x1b, 0xe2, 0x54, 0x94, 0x06, 0x19, 0x9d, 0xf8, 0xc9, 0x01, 0x87, 0x43, 0x20, 0x80, 0xd2, 0xca, 0x01, 0x0a, 0x43, 0x76, 0xf6, 0x0f, 0xd6}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xe8, 0x63, 0xff, 0x20, 0xb9, 0x82, 0x64, 0x84, 0x4a, 0x65, 0x9d, 0xdd, 0x7b, 0x7a, 0x31, 0xda, 0x91, 0x67, 0x53, 0x2c, 0xa5, 0x82, 0x6d, 0x1b, 0xe2, 0xa4, 0xf5, 0x60, 0xd8, 0x5b, 0x02, 0xdd}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x3b, 0x12, 0xc4, 0x7f, 0x19, 0x35, 0x09, 0xd2, 0xd3, 0x78, 0xb0, 0x6c, 0xf1, 0xfa, 0x4d, 0xf8, 0x18, 0x01, 0xa8, 0x16, 0xc5, 0x9e, 0x12, 0xe3, 0xdf, 0x0c, 0x36, 0xa1, 0xb1, 0x23, 0xb4, 0x91}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + gcp_GCPSEVSNP = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x3a, 0xa0, 0x52, 0x90, 0xae, 0xe6, 0x7d, 0x2c, 0x59, 0x02, 0x01, 0x59, 0xd2, 0x36, 0x0f, 0x4a, 0x7a, 0x23, 0xc9, 0x64, 0x29, 0x19, 0x66, 0x76, 0x5e, 0x03, 0xe6, 0x21, 0xf7, 0x66, 0x6f, 0x3d}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xb0, 0x2e, 0xe8, 0x72, 0x34, 0x6d, 0xe3, 0xac, 0x89, 0x24, 0xf9, 0x6c, 0xd9, 0x72, 0x8a, 0x75, 0x51, 0x6e, 0x64, 0xc3, 0x3d, 0x2b, 0xf9, 0xfd, 0x03, 0xc6, 0x00, 0xee, 0x2d, 0x38, 0x9a, 0x9f}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xc5, 0x2b, 0xb8, 0xe2, 0xb7, 0x4c, 0x59, 0x4e, 0x4a, 0x89, 0x8c, 0xb7, 0xbb, 0x34, 0x6b, 0x92, 0xe2, 0x26, 0x95, 0xb7, 0x70, 0x5f, 0xf4, 0xee, 0x30, 0x02, 0x29, 0x22, 0xeb, 0xcb, 0xca, 0xcd}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + openstack_QEMUVTPM = M{4: {Expected: []byte{0x16, 0xe5, 0x59, 0x8f, 0x6e, 0x16, 0xd9, 0x5d, 0x34, 0x96, 0x8b, 0x54, 0x84, 0x93, 0x8e, 0xf8, 0x63, 0x29, 0xd8, 0x9d, 0xbf, 0x8b, 0x46, 0xe2, 0xc1, 0x34, 0xbe, 0x35, 0xa5, 0x83, 0x6e, 0x89}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x3c, 0x04, 0x69, 0x9a, 0xa0, 0x46, 0x8c, 0x11, 0x32, 0x53, 0x82, 0xa5, 0x1a, 0xe5, 0xed, 0xa8, 0x04, 0xa1, 0xde, 0x66, 0x02, 0x2e, 0x99, 0x73, 0xc5, 0x37, 0x86, 0xca, 0x79, 0x39, 0x12, 0xa4}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x7b, 0x91, 0x50, 0x42, 0xce, 0x81, 0x79, 0x30, 0x23, 0x12, 0xe6, 0xf0, 0xaa, 0xaf, 0x2f, 0x33, 0xe5, 0x13, 0x63, 0x34, 0xed, 0x16, 0x5b, 0xb1, 0xf7, 0x0b, 0x26, 0x93, 0x82, 0x2c, 0x75, 0x86}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} qemu_QEMUTDX M - qemu_QEMUVTPM = M{4: {Expected: []byte{0xd4, 0xcf, 0xbf, 0x7a, 0xd4, 0x86, 0x40, 0x4b, 0x8a, 0xc3, 0x34, 0x78, 0x63, 0x55, 0x9b, 0x23, 0x2a, 0x1d, 0x2d, 0x31, 0x32, 0xcb, 0xbd, 0x03, 0x83, 0x02, 0x4c, 0x2e, 0xc2, 0x98, 0xc5, 0xe9}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xb7, 0xc2, 0xa1, 0x31, 0x9f, 0x07, 0x7b, 0x78, 0xa4, 0x6b, 0x59, 0xeb, 0x2b, 0x16, 0x52, 0x3b, 0xb1, 0xbe, 0xcf, 0xc4, 0x4b, 0x51, 0x99, 0x20, 0x51, 0xe2, 0x08, 0x81, 0xea, 0x8a, 0x89, 0xa8}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x88, 0xa6, 0xa9, 0xe9, 0x74, 0xcb, 0x50, 0x34, 0x0b, 0xf3, 0x98, 0x68, 0x41, 0x1a, 0x88, 0x0f, 0xf6, 0x26, 0x45, 0x8e, 0x97, 0x49, 0x6f, 0x59, 0xf1, 0x43, 0x53, 0x76, 0xd8, 0x3e, 0x78, 0xac}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + qemu_QEMUVTPM = M{4: {Expected: []byte{0x43, 0x54, 0xaf, 0x64, 0x0d, 0x02, 0xb7, 0x08, 0xaa, 0xc1, 0xac, 0xc9, 0xf0, 0xb7, 0x8f, 0x50, 0xd1, 0x37, 0xe3, 0x59, 0x72, 0x4b, 0xa0, 0x90, 0x69, 0xc8, 0x5b, 0x89, 0xdf, 0x20, 0xf3, 0xfb}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x7d, 0xd9, 0xb4, 0x8d, 0x23, 0x5c, 0xda, 0xcf, 0xc5, 0x1b, 0x09, 0x4e, 0x2d, 0x99, 0xc2, 0xe9, 0xce, 0x92, 0xa3, 0xd6, 0xf3, 0x41, 0xea, 0x66, 0x7b, 0x04, 0x85, 0x80, 0xc5, 0x3a, 0xd7, 0xec}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x2c, 0x51, 0x6d, 0x27, 0x65, 0xdd, 0x5f, 0x8e, 0x02, 0xa2, 0x32, 0xdd, 0xf6, 0x6b, 0x43, 0xf1, 0x58, 0xdb, 0xad, 0x03, 0xe4, 0x8f, 0xc7, 0x88, 0x96, 0x2f, 0xd3, 0x40, 0x18, 0xee, 0x09, 0xf4}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} ) diff --git a/internal/config/image_enterprise.go b/internal/config/image_enterprise.go index 60d3953e9..fafdf9e32 100644 --- a/internal/config/image_enterprise.go +++ b/internal/config/image_enterprise.go @@ -10,5 +10,5 @@ package config const ( // defaultImage is the default image to use. - defaultImage = "ref/main/stream/nightly/v2.21.0-pre.0.20250122122618-3af498fbfeda" + defaultImage = "ref/main/stream/nightly/v2.21.0-pre.0.20250128131250-8da08bec8de1" ) From bb994d5a0142a01a9c83c78aace1f154a45bd146 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 29 Jan 2025 16:31:16 +0100 Subject: [PATCH 089/311] deps: update Go dependencies (#3623) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * deps: update Go dependencies * deps: tidy all modules * keep cloud.google.com/go/storage at v1.49.0 Signed-off-by: Daniel Weiße --------- Signed-off-by: Daniel Weiße Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: edgelessci Co-authored-by: Daniel Weiße --- bootstrapper/initproto/init.pb.go | 14 +- debugd/service/debugd.pb.go | 14 +- disk-mapper/recoverproto/recover.pb.go | 14 +- go.mod | 114 ++++----- go.sum | 227 +++++++++--------- internal/versions/components/components.pb.go | 14 +- joinservice/joinproto/join.pb.go | 14 +- keyservice/keyserviceproto/keyservice.pb.go | 14 +- upgrade-agent/upgradeproto/upgrade.pb.go | 14 +- verify/verifyproto/verify.pb.go | 14 +- 10 files changed, 233 insertions(+), 220 deletions(-) diff --git a/bootstrapper/initproto/init.pb.go b/bootstrapper/initproto/init.pb.go index 0d16cd8d9..e1fa9906d 100644 --- a/bootstrapper/initproto/init.pb.go +++ b/bootstrapper/initproto/init.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.36.3 +// protoc-gen-go v1.36.4 // protoc v5.29.1 // source: bootstrapper/initproto/init.proto @@ -16,6 +16,7 @@ import ( protoimpl "google.golang.org/protobuf/runtime/protoimpl" reflect "reflect" sync "sync" + unsafe "unsafe" ) const ( @@ -457,7 +458,7 @@ func (x *KubernetesComponent) GetExtract() bool { var File_bootstrapper_initproto_init_proto protoreflect.FileDescriptor -var file_bootstrapper_initproto_init_proto_rawDesc = []byte{ +var file_bootstrapper_initproto_init_proto_rawDesc = string([]byte{ 0x0a, 0x21, 0x62, 0x6f, 0x6f, 0x74, 0x73, 0x74, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2f, 0x69, 0x6e, 0x69, 0x74, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x69, 0x6e, 0x69, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x04, 0x69, 0x6e, 0x69, 0x74, 0x1a, 0x2d, 0x69, 0x6e, 0x74, 0x65, 0x72, @@ -533,16 +534,16 @@ var file_bootstrapper_initproto_init_proto_rawDesc = []byte{ 0x6f, 0x6e, 0x73, 0x74, 0x65, 0x6c, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x76, 0x32, 0x2f, 0x62, 0x6f, 0x6f, 0x74, 0x73, 0x74, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2f, 0x69, 0x6e, 0x69, 0x74, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} +}) var ( file_bootstrapper_initproto_init_proto_rawDescOnce sync.Once - file_bootstrapper_initproto_init_proto_rawDescData = file_bootstrapper_initproto_init_proto_rawDesc + file_bootstrapper_initproto_init_proto_rawDescData []byte ) func file_bootstrapper_initproto_init_proto_rawDescGZIP() []byte { file_bootstrapper_initproto_init_proto_rawDescOnce.Do(func() { - file_bootstrapper_initproto_init_proto_rawDescData = protoimpl.X.CompressGZIP(file_bootstrapper_initproto_init_proto_rawDescData) + file_bootstrapper_initproto_init_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_bootstrapper_initproto_init_proto_rawDesc), len(file_bootstrapper_initproto_init_proto_rawDesc))) }) return file_bootstrapper_initproto_init_proto_rawDescData } @@ -585,7 +586,7 @@ func file_bootstrapper_initproto_init_proto_init() { out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_bootstrapper_initproto_init_proto_rawDesc, + RawDescriptor: unsafe.Slice(unsafe.StringData(file_bootstrapper_initproto_init_proto_rawDesc), len(file_bootstrapper_initproto_init_proto_rawDesc)), NumEnums: 0, NumMessages: 6, NumExtensions: 0, @@ -596,7 +597,6 @@ func file_bootstrapper_initproto_init_proto_init() { MessageInfos: file_bootstrapper_initproto_init_proto_msgTypes, }.Build() File_bootstrapper_initproto_init_proto = out.File - file_bootstrapper_initproto_init_proto_rawDesc = nil file_bootstrapper_initproto_init_proto_goTypes = nil file_bootstrapper_initproto_init_proto_depIdxs = nil } diff --git a/debugd/service/debugd.pb.go b/debugd/service/debugd.pb.go index bae7198fd..4b1e337c4 100644 --- a/debugd/service/debugd.pb.go +++ b/debugd/service/debugd.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.36.3 +// protoc-gen-go v1.36.4 // protoc v5.29.1 // source: debugd/service/debugd.proto @@ -15,6 +15,7 @@ import ( protoimpl "google.golang.org/protobuf/runtime/protoimpl" reflect "reflect" sync "sync" + unsafe "unsafe" ) const ( @@ -815,7 +816,7 @@ func (x *UploadSystemdServiceUnitsResponse) GetStatus() UploadSystemdServiceUnit var File_debugd_service_debugd_proto protoreflect.FileDescriptor -var file_debugd_service_debugd_proto_rawDesc = []byte{ +var file_debugd_service_debugd_proto_rawDesc = string([]byte{ 0x0a, 0x1b, 0x64, 0x65, 0x62, 0x75, 0x67, 0x64, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x64, 0x65, 0x62, 0x75, 0x67, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x06, 0x64, 0x65, 0x62, 0x75, 0x67, 0x64, 0x22, 0x32, 0x0a, 0x0e, 0x53, 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6f, @@ -929,16 +930,16 @@ var file_debugd_service_debugd_proto_rawDesc = []byte{ 0x65, 0x6c, 0x65, 0x73, 0x73, 0x73, 0x79, 0x73, 0x2f, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x65, 0x6c, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x76, 0x32, 0x2f, 0x64, 0x65, 0x62, 0x75, 0x67, 0x64, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} +}) var ( file_debugd_service_debugd_proto_rawDescOnce sync.Once - file_debugd_service_debugd_proto_rawDescData = file_debugd_service_debugd_proto_rawDesc + file_debugd_service_debugd_proto_rawDescData []byte ) func file_debugd_service_debugd_proto_rawDescGZIP() []byte { file_debugd_service_debugd_proto_rawDescOnce.Do(func() { - file_debugd_service_debugd_proto_rawDescData = protoimpl.X.CompressGZIP(file_debugd_service_debugd_proto_rawDescData) + file_debugd_service_debugd_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_debugd_service_debugd_proto_rawDesc), len(file_debugd_service_debugd_proto_rawDesc))) }) return file_debugd_service_debugd_proto_rawDescData } @@ -1003,7 +1004,7 @@ func file_debugd_service_debugd_proto_init() { out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_debugd_service_debugd_proto_rawDesc, + RawDescriptor: unsafe.Slice(unsafe.StringData(file_debugd_service_debugd_proto_rawDesc), len(file_debugd_service_debugd_proto_rawDesc)), NumEnums: 3, NumMessages: 13, NumExtensions: 0, @@ -1015,7 +1016,6 @@ func file_debugd_service_debugd_proto_init() { MessageInfos: file_debugd_service_debugd_proto_msgTypes, }.Build() File_debugd_service_debugd_proto = out.File - file_debugd_service_debugd_proto_rawDesc = nil file_debugd_service_debugd_proto_goTypes = nil file_debugd_service_debugd_proto_depIdxs = nil } diff --git a/disk-mapper/recoverproto/recover.pb.go b/disk-mapper/recoverproto/recover.pb.go index e3750a095..f42a85121 100644 --- a/disk-mapper/recoverproto/recover.pb.go +++ b/disk-mapper/recoverproto/recover.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.36.3 +// protoc-gen-go v1.36.4 // protoc v5.29.1 // source: disk-mapper/recoverproto/recover.proto @@ -15,6 +15,7 @@ import ( protoimpl "google.golang.org/protobuf/runtime/protoimpl" reflect "reflect" sync "sync" + unsafe "unsafe" ) const ( @@ -114,7 +115,7 @@ func (*RecoverResponse) Descriptor() ([]byte, []int) { var File_disk_mapper_recoverproto_recover_proto protoreflect.FileDescriptor -var file_disk_mapper_recoverproto_recover_proto_rawDesc = []byte{ +var file_disk_mapper_recoverproto_recover_proto_rawDesc = string([]byte{ 0x0a, 0x26, 0x64, 0x69, 0x73, 0x6b, 0x2d, 0x6d, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2f, 0x72, 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x72, 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0c, 0x72, 0x65, 0x63, 0x6f, 0x76, 0x65, @@ -135,16 +136,16 @@ var file_disk_mapper_recoverproto_recover_proto_rawDesc = []byte{ 0x32, 0x2f, 0x64, 0x69, 0x73, 0x6b, 0x2d, 0x6d, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2f, 0x72, 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} +}) var ( file_disk_mapper_recoverproto_recover_proto_rawDescOnce sync.Once - file_disk_mapper_recoverproto_recover_proto_rawDescData = file_disk_mapper_recoverproto_recover_proto_rawDesc + file_disk_mapper_recoverproto_recover_proto_rawDescData []byte ) func file_disk_mapper_recoverproto_recover_proto_rawDescGZIP() []byte { file_disk_mapper_recoverproto_recover_proto_rawDescOnce.Do(func() { - file_disk_mapper_recoverproto_recover_proto_rawDescData = protoimpl.X.CompressGZIP(file_disk_mapper_recoverproto_recover_proto_rawDescData) + file_disk_mapper_recoverproto_recover_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_disk_mapper_recoverproto_recover_proto_rawDesc), len(file_disk_mapper_recoverproto_recover_proto_rawDesc))) }) return file_disk_mapper_recoverproto_recover_proto_rawDescData } @@ -173,7 +174,7 @@ func file_disk_mapper_recoverproto_recover_proto_init() { out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_disk_mapper_recoverproto_recover_proto_rawDesc, + RawDescriptor: unsafe.Slice(unsafe.StringData(file_disk_mapper_recoverproto_recover_proto_rawDesc), len(file_disk_mapper_recoverproto_recover_proto_rawDesc)), NumEnums: 0, NumMessages: 2, NumExtensions: 0, @@ -184,7 +185,6 @@ func file_disk_mapper_recoverproto_recover_proto_init() { MessageInfos: file_disk_mapper_recoverproto_recover_proto_msgTypes, }.Build() File_disk_mapper_recoverproto_recover_proto = out.File - file_disk_mapper_recoverproto_recover_proto_rawDesc = nil file_disk_mapper_recoverproto_recover_proto_goTypes = nil file_disk_mapper_recoverproto_recover_proto_depIdxs = nil } diff --git a/go.mod b/go.mod index 17cf898a3..0d1c50867 100644 --- a/go.mod +++ b/go.mod @@ -40,26 +40,26 @@ require ( github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v6 v6.3.0 github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/network/armnetwork/v6 v6.2.0 github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/azsecrets v1.3.0 - github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.5.0 + github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.6.0 github.com/BurntSushi/toml v1.4.0 github.com/aws/aws-sdk-go v1.55.6 - github.com/aws/aws-sdk-go-v2 v1.33.0 - github.com/aws/aws-sdk-go-v2/config v1.29.1 - github.com/aws/aws-sdk-go-v2/credentials v1.17.54 - github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.24 - github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.52 - github.com/aws/aws-sdk-go-v2/service/autoscaling v1.51.7 - github.com/aws/aws-sdk-go-v2/service/cloudfront v1.44.5 - github.com/aws/aws-sdk-go-v2/service/ec2 v1.200.0 - github.com/aws/aws-sdk-go-v2/service/elasticloadbalancingv2 v1.43.7 - github.com/aws/aws-sdk-go-v2/service/resourcegroupstaggingapi v1.25.13 - github.com/aws/aws-sdk-go-v2/service/s3 v1.73.2 - github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.34.13 - github.com/aws/smithy-go v1.22.1 - github.com/bazelbuild/buildtools v0.0.0-20250117124929-3648bec1fd3c + github.com/aws/aws-sdk-go-v2 v1.34.0 + github.com/aws/aws-sdk-go-v2/config v1.29.2 + github.com/aws/aws-sdk-go-v2/credentials v1.17.55 + github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.25 + github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.54 + github.com/aws/aws-sdk-go-v2/service/autoscaling v1.51.8 + github.com/aws/aws-sdk-go-v2/service/cloudfront v1.44.6 + github.com/aws/aws-sdk-go-v2/service/ec2 v1.202.0 + github.com/aws/aws-sdk-go-v2/service/elasticloadbalancingv2 v1.43.8 + github.com/aws/aws-sdk-go-v2/service/resourcegroupstaggingapi v1.25.14 + github.com/aws/aws-sdk-go-v2/service/s3 v1.74.1 + github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.34.14 + github.com/aws/smithy-go v1.22.2 + github.com/bazelbuild/buildtools v0.0.0-20250128121225-1d7634006480 github.com/bazelbuild/rules_go v0.52.0 github.com/coreos/go-systemd/v22 v22.5.0 - github.com/docker/docker v27.5.0+incompatible + github.com/docker/docker v27.5.1+incompatible github.com/edgelesssys/go-azguestattestation v0.0.0-20240513062303-05f8770a633d github.com/edgelesssys/go-tdx-qpl v0.0.0-20240123150912-dcad3c41ec5f github.com/foxboron/go-uefi v0.0.0-20241219185318-19dc140271bf @@ -77,18 +77,18 @@ require ( github.com/gophercloud/gophercloud/v2 v2.4.0 github.com/gophercloud/utils/v2 v2.0.0-20250106080359-c8704d65b4fa github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.2.0 - github.com/hashicorp/go-kms-wrapping/v2 v2.0.16 - github.com/hashicorp/go-kms-wrapping/wrappers/awskms/v2 v2.0.10 - github.com/hashicorp/go-kms-wrapping/wrappers/azurekeyvault/v2 v2.0.11 - github.com/hashicorp/go-kms-wrapping/wrappers/gcpckms/v2 v2.0.12 + github.com/hashicorp/go-kms-wrapping/v2 v2.0.18 + github.com/hashicorp/go-kms-wrapping/wrappers/awskms/v2 v2.0.11 + github.com/hashicorp/go-kms-wrapping/wrappers/azurekeyvault/v2 v2.0.12 + github.com/hashicorp/go-kms-wrapping/wrappers/gcpckms/v2 v2.0.13 github.com/hashicorp/go-version v1.7.0 github.com/hashicorp/hc-install v0.9.1 github.com/hashicorp/hcl/v2 v2.23.0 - github.com/hashicorp/terraform-exec v0.21.0 + github.com/hashicorp/terraform-exec v0.22.0 github.com/hashicorp/terraform-json v0.24.0 github.com/hashicorp/terraform-plugin-framework v1.13.0 github.com/hashicorp/terraform-plugin-framework-validators v0.16.0 - github.com/hashicorp/terraform-plugin-go v0.25.0 + github.com/hashicorp/terraform-plugin-go v0.26.0 github.com/hashicorp/terraform-plugin-log v0.9.0 github.com/hashicorp/terraform-plugin-testing v1.11.0 github.com/hexops/gotextdiff v1.0.3 @@ -103,8 +103,8 @@ require ( github.com/samber/slog-multi v1.3.3 github.com/schollz/progressbar/v3 v3.18.0 github.com/secure-systems-lab/go-securesystemslib v0.9.0 - github.com/siderolabs/talos/pkg/machinery v1.9.2 - github.com/sigstore/rekor v1.3.8 + github.com/siderolabs/talos/pkg/machinery v1.9.3 + github.com/sigstore/rekor v1.3.9 github.com/sigstore/sigstore v1.8.12 github.com/spf13/afero v1.12.0 github.com/spf13/cobra v1.8.1 @@ -112,19 +112,19 @@ require ( github.com/stretchr/testify v1.10.0 github.com/tink-crypto/tink-go/v2 v2.3.0 github.com/vincent-petithory/dataurl v1.0.0 - go.etcd.io/etcd/api/v3 v3.5.17 - go.etcd.io/etcd/client/pkg/v3 v3.5.17 - go.etcd.io/etcd/client/v3 v3.5.17 + go.etcd.io/etcd/api/v3 v3.5.18 + go.etcd.io/etcd/client/pkg/v3 v3.5.18 + go.etcd.io/etcd/client/v3 v3.5.18 go.uber.org/goleak v1.3.0 golang.org/x/crypto v0.32.0 - golang.org/x/exp v0.0.0-20250106191152-7588d65b2ba8 + golang.org/x/exp v0.0.0-20250128182459-e0ece0dbea4c golang.org/x/mod v0.22.0 golang.org/x/sys v0.29.0 golang.org/x/text v0.21.0 golang.org/x/tools v0.29.0 - google.golang.org/api v0.217.0 - google.golang.org/grpc v1.69.4 - google.golang.org/protobuf v1.36.3 + google.golang.org/api v0.219.0 + google.golang.org/grpc v1.70.0 + google.golang.org/protobuf v1.36.4 gopkg.in/yaml.v3 v3.0.1 helm.sh/helm/v3 v3.17.0 k8s.io/api v0.32.1 @@ -138,12 +138,12 @@ require ( k8s.io/mount-utils v0.32.1 k8s.io/utils v0.0.0-20241210054802-24370beab758 libvirt.org/go/libvirt v1.11001.0 - sigs.k8s.io/controller-runtime v0.20.0 + sigs.k8s.io/controller-runtime v0.20.1 sigs.k8s.io/yaml v1.4.0 ) require ( - cel.dev/expr v0.18.0 // indirect + cel.dev/expr v0.19.0 // indirect cloud.google.com/go v0.116.0 // indirect cloud.google.com/go/auth v0.14.0 // indirect cloud.google.com/go/auth/oauth2adapt v0.2.7 // indirect @@ -178,18 +178,18 @@ require ( github.com/agext/levenshtein v1.2.2 // indirect github.com/apparentlymart/go-textseg/v15 v15.0.0 // indirect github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 // indirect - github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.7 // indirect - github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.28 // indirect - github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.28 // indirect - github.com/aws/aws-sdk-go-v2/internal/ini v1.8.1 // indirect - github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.28 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.1 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.5.2 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.9 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.9 // indirect - github.com/aws/aws-sdk-go-v2/service/sso v1.24.11 // indirect - github.com/aws/aws-sdk-go-v2/service/ssooidc v1.28.10 // indirect - github.com/aws/aws-sdk-go-v2/service/sts v1.33.9 // indirect + github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.8 // indirect + github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.29 // indirect + github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.29 // indirect + github.com/aws/aws-sdk-go-v2/internal/ini v1.8.2 // indirect + github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.29 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.2 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.5.3 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.10 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.10 // indirect + github.com/aws/aws-sdk-go-v2/service/sso v1.24.12 // indirect + github.com/aws/aws-sdk-go-v2/service/ssooidc v1.28.11 // indirect + github.com/aws/aws-sdk-go-v2/service/sts v1.33.10 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/blang/semver v3.5.1+incompatible // indirect github.com/blang/semver/v4 v4.0.0 // indirect @@ -250,7 +250,7 @@ require ( github.com/godbus/dbus/v5 v5.1.0 // indirect github.com/gofrs/uuid/v5 v5.3.0 // indirect github.com/gogo/protobuf v1.3.2 // indirect - github.com/golang-jwt/jwt/v4 v4.5.0 // indirect + github.com/golang-jwt/jwt/v4 v4.5.1 // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect github.com/golang/protobuf v1.5.4 // indirect github.com/google/btree v1.1.3 // indirect @@ -280,10 +280,13 @@ require ( github.com/hashicorp/go-plugin v1.6.2 // indirect github.com/hashicorp/go-retryablehttp v0.7.7 // indirect github.com/hashicorp/go-secure-stdlib/awsutil v0.1.6 // indirect + github.com/hashicorp/go-secure-stdlib/parseutil v0.1.9 // indirect + github.com/hashicorp/go-secure-stdlib/strutil v0.1.2 // indirect + github.com/hashicorp/go-sockaddr v1.0.6 // indirect github.com/hashicorp/go-uuid v1.0.3 // indirect github.com/hashicorp/logutils v1.0.0 // indirect github.com/hashicorp/terraform-plugin-sdk/v2 v2.35.0 // indirect - github.com/hashicorp/terraform-registry-address v0.2.3 // indirect + github.com/hashicorp/terraform-registry-address v0.2.4 // indirect github.com/hashicorp/terraform-svchost v0.1.1 // indirect github.com/hashicorp/yamux v0.1.1 // indirect github.com/huandu/xstrings v1.5.0 // indirect @@ -338,6 +341,7 @@ require ( github.com/rivo/uniseg v0.4.7 // indirect github.com/rubenv/sql-migrate v1.7.1 // indirect github.com/russross/blackfriday/v2 v2.1.0 // indirect + github.com/ryanuber/go-glob v1.0.0 // indirect github.com/samber/lo v1.47.0 // indirect github.com/sassoftware/relic v7.2.1+incompatible // indirect github.com/shopspring/decimal v1.4.0 // indirect @@ -357,17 +361,17 @@ require ( github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 // indirect github.com/xeipuuv/gojsonschema v1.2.0 // indirect github.com/xlab/treeprint v1.2.0 // indirect - github.com/zclconf/go-cty v1.15.1 // indirect + github.com/zclconf/go-cty v1.16.1 // indirect go.mongodb.org/mongo-driver v1.14.0 // indirect go.opencensus.io v0.24.0 // indirect - go.opentelemetry.io/contrib/detectors/gcp v1.31.0 // indirect + go.opentelemetry.io/contrib/detectors/gcp v1.32.0 // indirect go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.54.0 // indirect go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.54.0 // indirect - go.opentelemetry.io/otel v1.31.0 // indirect - go.opentelemetry.io/otel/metric v1.31.0 // indirect - go.opentelemetry.io/otel/sdk v1.31.0 // indirect - go.opentelemetry.io/otel/sdk/metric v1.31.0 // indirect - go.opentelemetry.io/otel/trace v1.31.0 // indirect + go.opentelemetry.io/otel v1.32.0 // indirect + go.opentelemetry.io/otel/metric v1.32.0 // indirect + go.opentelemetry.io/otel/sdk v1.32.0 // indirect + go.opentelemetry.io/otel/sdk/metric v1.32.0 // indirect + go.opentelemetry.io/otel/trace v1.32.0 // indirect go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.27.0 // indirect golang.org/x/net v0.34.0 // indirect @@ -379,7 +383,7 @@ require ( google.golang.org/appengine v1.6.8 // indirect google.golang.org/genproto v0.0.0-20241118233622-e639e219e697 // indirect google.golang.org/genproto/googleapis/api v0.0.0-20241209162323-e6fa225c2576 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20250106144421-5f5ef82da422 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20250124145028-65684f501c47 // indirect gopkg.in/evanphx/json-patch.v4 v4.12.0 // indirect gopkg.in/inf.v0 v0.9.1 // indirect k8s.io/cli-runtime v0.32.0 // indirect diff --git a/go.sum b/go.sum index 67da6ee6f..f64baa8f7 100644 --- a/go.sum +++ b/go.sum @@ -1,5 +1,5 @@ -cel.dev/expr v0.18.0 h1:CJ6drgk+Hf96lkLikr4rFf19WrU0BOWEihyZnI2TAzo= -cel.dev/expr v0.18.0/go.mod h1:MrpN08Q+lEBs+bGYdLxxHkZoUSsCp0nSKTs0nTymJgw= +cel.dev/expr v0.19.0 h1:lXuo+nDhpyJSpWxpPVi5cPUwzKb+dsdOiw6IreM5yt0= +cel.dev/expr v0.19.0/go.mod h1:MrpN08Q+lEBs+bGYdLxxHkZoUSsCp0nSKTs0nTymJgw= cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.116.0 h1:B3fRrSDkLRt5qSHWe40ERJvhvnQwdZiHu0bJOpldweE= cloud.google.com/go v0.116.0/go.mod h1:cEPSRWPzZEswwdr9BxE6ChEn01dWlTaF05LiC2Xs70U= @@ -63,8 +63,8 @@ github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/azsecrets v1.3.0 h1:WLUI github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/azsecrets v1.3.0/go.mod h1:hd8hTTIY3VmUVPRHNH7GVCHO3SHgXkJKZHReby/bnUQ= github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/internal v1.1.0 h1:eXnN9kaS8TiDwXjoie3hMRLuwdUBUMW9KRgOqB3mCaw= github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/internal v1.1.0/go.mod h1:XIpam8wumeZ5rVMuhdDQLMfIPDf1WO3IzrCRO3e3e3o= -github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.5.0 h1:mlmW46Q0B79I+Aj4azKC6xDMFN9a9SyZWESlGWYXbFs= -github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.5.0/go.mod h1:PXe2h+LKcWTX9afWdZoHyODqR4fBa5boUM/8uJfZ0Jo= +github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.6.0 h1:UXT0o77lXQrikd1kgwIPQOUect7EoR/+sbP4wQKdzxM= +github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.6.0/go.mod h1:cTvi54pg19DoT07ekoeMgE/taAwNtCShVeZqA+Iv2xI= github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161 h1:L/gRVlceqvL25UVaW/CKtUDjefjrs0SPonmDGUVOYP0= github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= github.com/Azure/go-autorest v14.2.0+incompatible h1:V5VMDjClD3GiElqLWO7mz2MxNAK/vTfRHdAubSIPRgs= @@ -138,58 +138,58 @@ github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2/go.mod h1:W github.com/aws/aws-sdk-go v1.30.27/go.mod h1:5zCpMtNQVjRREroY7sYe8lOMRSxkhG6MZveU8YkpAk0= github.com/aws/aws-sdk-go v1.55.6 h1:cSg4pvZ3m8dgYcgqB97MrcdjUmZ1BeMYKUxMMB89IPk= github.com/aws/aws-sdk-go v1.55.6/go.mod h1:eRwEWoyTWFMVYVQzKMNHWP5/RV4xIUGMQfXQHfHkpNU= -github.com/aws/aws-sdk-go-v2 v1.33.0 h1:Evgm4DI9imD81V0WwD+TN4DCwjUMdc94TrduMLbgZJs= -github.com/aws/aws-sdk-go-v2 v1.33.0/go.mod h1:P5WJBrYqqbWVaOxgH0X/FYYD47/nooaPOZPlQdmiN2U= -github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.7 h1:lL7IfaFzngfx0ZwUGOZdsFFnQ5uLvR0hWqqhyE7Q9M8= -github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.7/go.mod h1:QraP0UcVlQJsmHfioCrveWOC1nbiWUl3ej08h4mXWoc= -github.com/aws/aws-sdk-go-v2/config v1.29.1 h1:JZhGawAyZ/EuJeBtbQYnaoftczcb2drR2Iq36Wgz4sQ= -github.com/aws/aws-sdk-go-v2/config v1.29.1/go.mod h1:7bR2YD5euaxBhzt2y/oDkt3uNRb6tjFp98GlTFueRwk= -github.com/aws/aws-sdk-go-v2/credentials v1.17.54 h1:4UmqeOqJPvdvASZWrKlhzpRahAulBfyTJQUaYy4+hEI= -github.com/aws/aws-sdk-go-v2/credentials v1.17.54/go.mod h1:RTdfo0P0hbbTxIhmQrOsC/PquBZGabEPnCaxxKRPSnI= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.24 h1:5grmdTdMsovn9kPZPI23Hhvp0ZyNm5cRO+IZFIYiAfw= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.24/go.mod h1:zqi7TVKTswH3Ozq28PkmBmgzG1tona7mo9G2IJg4Cis= -github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.52 h1:6kI83R98XOnnyzHv9g9KTYXFawMyeQq8NeEERWMAwJk= -github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.52/go.mod h1:Juj7unpf3CIrWpEyJZhRJ6rJl9IYX7Hd8HOlwaZq/LE= -github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.28 h1:igORFSiH3bfq4lxKFkTSYDhJEUCYo6C8VKiWJjYwQuQ= -github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.28/go.mod h1:3So8EA/aAYm36L7XIvCVwLa0s5N0P7o2b1oqnx/2R4g= -github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.28 h1:1mOW9zAUMhTSrMDssEHS/ajx8JcAj/IcftzcmNlmVLI= -github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.28/go.mod h1:kGlXVIWDfvt2Ox5zEaNglmq0hXPHgQFNMix33Tw22jA= -github.com/aws/aws-sdk-go-v2/internal/ini v1.8.1 h1:VaRN3TlFdd6KxX1x3ILT5ynH6HvKgqdiXoTxAF4HQcQ= -github.com/aws/aws-sdk-go-v2/internal/ini v1.8.1/go.mod h1:FbtygfRFze9usAadmnGJNc8KsP346kEe+y2/oyhGAGc= -github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.28 h1:7kpeALOUeThs2kEjlAxlADAVfxKmkYAedlpZ3kdoSJ4= -github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.28/go.mod h1:pyaOYEdp1MJWgtXLy6q80r3DhsVdOIOZNB9hdTcJIvI= -github.com/aws/aws-sdk-go-v2/service/autoscaling v1.51.7 h1:LDQ3goASec/ylee0tYuHLnvaXej3TkEpGRpRxwSwXhc= -github.com/aws/aws-sdk-go-v2/service/autoscaling v1.51.7/go.mod h1:Zgti4LZawMEhtIBBwY1YijZJncgUOmeZoTO05uP9tIw= -github.com/aws/aws-sdk-go-v2/service/cloudfront v1.44.5 h1:oBLlEuSL5G9W8M4GtEVdNi+xsQP+9lphVkbYf38Isgs= -github.com/aws/aws-sdk-go-v2/service/cloudfront v1.44.5/go.mod h1:H/t3dGwvHy2WJ+ZwyDBWva7ttsoxSxt5qC1OMcc0iJ0= -github.com/aws/aws-sdk-go-v2/service/ec2 v1.200.0 h1:3hH6o7Z2WeE1twvz44Aitn6Qz8DZN3Dh5IB4Eh2xq7s= -github.com/aws/aws-sdk-go-v2/service/ec2 v1.200.0/go.mod h1:I76S7jN0nfsYTBtuTgTsJtK2Q8yJVDgrLr5eLN64wMA= -github.com/aws/aws-sdk-go-v2/service/elasticloadbalancingv2 v1.43.7 h1:5zMWovjTaEb1efvvFfoRkftUWA+xfEdognn/JZC1/Hg= -github.com/aws/aws-sdk-go-v2/service/elasticloadbalancingv2 v1.43.7/go.mod h1:6QynTIHgeX3wwdpwlDhCovlJTwJ3Mb+Km2kVOCh26BA= -github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.1 h1:iXtILhvDxB6kPvEXgsDhGaZCSC6LQET5ZHSdJozeI0Y= -github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.1/go.mod h1:9nu0fVANtYiAePIBh2/pFUSwtJ402hLnp854CNoDOeE= -github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.5.2 h1:e6um6+DWYQP1XCa+E9YVtG/9v1qk5lyAOelMOVwSyO8= -github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.5.2/go.mod h1:dIW8puxSbYLSPv/ju0d9A3CpwXdtqvJtYKDMVmPLOWE= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.9 h1:TQmKDyETFGiXVhZfQ/I0cCFziqqX58pi4tKJGYGFSz0= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.9/go.mod h1:HVLPK2iHQBUx7HfZeOQSEu3v2ubZaAY2YPbAm5/WUyY= -github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.9 h1:2aInXbh02XsbO0KobPGMNXyv2QP73VDKsWPNJARj/+4= -github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.9/go.mod h1:dgXS1i+HgWnYkPXqNoPIPKeUsUUYHaUbThC90aDnNiE= -github.com/aws/aws-sdk-go-v2/service/resourcegroupstaggingapi v1.25.13 h1:wdMzCMpoSKRYp4vtciAxPzjJy7wSEQsl0pkvlAJQ+Xo= -github.com/aws/aws-sdk-go-v2/service/resourcegroupstaggingapi v1.25.13/go.mod h1:jhfb2oFQrEqsl6AqYkFlhz1kUys4AWXaFzfA1BCzYWY= -github.com/aws/aws-sdk-go-v2/service/s3 v1.73.2 h1:F3h8VYq9ZLBXYurmwrT8W0SPhgCcU0q+0WZJfT1dFt0= -github.com/aws/aws-sdk-go-v2/service/s3 v1.73.2/go.mod h1:jGJ/v7FIi7Ys9t54tmEFnrxuaWeJLpwNgKp2DXAVhOU= -github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.34.13 h1:+dFX6kb0ekos09TP4icFIyqq/u3POCQDSrShc9ZkCCI= -github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.34.13/go.mod h1:l+Fboycn+g9RMQcYbTfpqF/d3qZn90q5PYmO7Biu+WM= -github.com/aws/aws-sdk-go-v2/service/sso v1.24.11 h1:kuIyu4fTT38Kj7YCC7ouNbVZSSpqkZ+LzIfhCr6Dg+I= -github.com/aws/aws-sdk-go-v2/service/sso v1.24.11/go.mod h1:Ro744S4fKiCCuZECXgOi760TiYylUM8ZBf6OGiZzJtY= -github.com/aws/aws-sdk-go-v2/service/ssooidc v1.28.10 h1:l+dgv/64iVlQ3WsBbnn+JSbkj01jIi+SM0wYsj3y/hY= -github.com/aws/aws-sdk-go-v2/service/ssooidc v1.28.10/go.mod h1:Fzsj6lZEb8AkTE5S68OhcbBqeWPsR8RnGuKPr8Todl8= -github.com/aws/aws-sdk-go-v2/service/sts v1.33.9 h1:BRVDbewN6VZcwr+FBOszDKvYeXY1kJ+GGMCcpghlw0U= -github.com/aws/aws-sdk-go-v2/service/sts v1.33.9/go.mod h1:f6vjfZER1M17Fokn0IzssOTMT2N8ZSq+7jnNF0tArvw= -github.com/aws/smithy-go v1.22.1 h1:/HPHZQ0g7f4eUeK6HKglFz8uwVfZKgoI25rb/J+dnro= -github.com/aws/smithy-go v1.22.1/go.mod h1:irrKGvNn1InZwb2d7fkIRNucdfwR8R+Ts3wxYa/cJHg= -github.com/bazelbuild/buildtools v0.0.0-20250117124929-3648bec1fd3c h1:J6JtwkUGjzQ5caC/4/JTJ1tFyQ9vwTqJeeuOS/RXUro= -github.com/bazelbuild/buildtools v0.0.0-20250117124929-3648bec1fd3c/go.mod h1:PLNUetjLa77TCCziPsz0EI8a6CUxgC+1jgmWv0H25tg= +github.com/aws/aws-sdk-go-v2 v1.34.0 h1:9iyL+cjifckRGEVpRKZP3eIxVlL06Qk1Tk13vreaVQU= +github.com/aws/aws-sdk-go-v2 v1.34.0/go.mod h1:JgstGg0JjWU1KpVJjD5H0y0yyAIpSdKEq556EI6yOOM= +github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.8 h1:zAxi9p3wsZMIaVCdoiQp2uZ9k1LsZvmAnoTBeZPXom0= +github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.8/go.mod h1:3XkePX5dSaxveLAYY7nsbsZZrKxCyEuE5pM4ziFxyGg= +github.com/aws/aws-sdk-go-v2/config v1.29.2 h1:JuIxOEPcSKpMB0J+khMjznG9LIhIBdmqNiEcPclnwqc= +github.com/aws/aws-sdk-go-v2/config v1.29.2/go.mod h1:HktTHregOZwNSM/e7WTfVSu9RCX+3eOv+6ij27PtaYs= +github.com/aws/aws-sdk-go-v2/credentials v1.17.55 h1:CDhKnDEaGkLA5ZszV/qw5uwN5M8rbv9Cl0JRN+PRsaM= +github.com/aws/aws-sdk-go-v2/credentials v1.17.55/go.mod h1:kPD/vj+RB5MREDUky376+zdnjZpR+WgdBBvwrmnlmKE= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.25 h1:kU7tmXNaJ07LsyN3BUgGqAmVmQtq0w6duVIHAKfp0/w= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.25/go.mod h1:OiC8+OiqrURb1wrwmr/UbOVLFSWEGxjinj5C299VQdo= +github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.54 h1:6BWOAho3Cgdy4cmNJ4HWY8VZgqODEU7Gw78XXireNZI= +github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.54/go.mod h1:n+t/oyYErOV3jf/GxNTVlizSM9RMV1yH7jvcIvld3Do= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.29 h1:Ej0Rf3GMv50Qh4G4852j2djtoDb7AzQ7MuQeFHa3D70= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.29/go.mod h1:oeNTC7PwJNoM5AznVr23wxhLnuJv0ZDe5v7w0wqIs9M= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.29 h1:6e8a71X+9GfghragVevC5bZqvATtc3mAMgxpSNbgzF0= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.29/go.mod h1:c4jkZiQ+BWpNqq7VtrxjwISrLrt/VvPq3XiopkUIolI= +github.com/aws/aws-sdk-go-v2/internal/ini v1.8.2 h1:Pg9URiobXy85kgFev3og2CuOZ8JZUBENF+dcgWBaYNk= +github.com/aws/aws-sdk-go-v2/internal/ini v1.8.2/go.mod h1:FbtygfRFze9usAadmnGJNc8KsP346kEe+y2/oyhGAGc= +github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.29 h1:g9OUETuxA8i/Www5Cby0R3WSTe7ppFTZXHVLNskNS4w= +github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.29/go.mod h1:CQk+koLR1QeY1+vm7lqNfFii07DEderKq6T3F1L2pyc= +github.com/aws/aws-sdk-go-v2/service/autoscaling v1.51.8 h1:x/d0R0YAZG8noHkdo9wQF50Y0CiEEKVjjyfT0opH9pY= +github.com/aws/aws-sdk-go-v2/service/autoscaling v1.51.8/go.mod h1:U2qbxDy8EfZqeyOY8Awba8pmluw0kFJ4L/fZTiC3boY= +github.com/aws/aws-sdk-go-v2/service/cloudfront v1.44.6 h1:h1g8lxLhRRIOJKx0hCuTkeDCYOV/DnP8OGugmgvVihY= +github.com/aws/aws-sdk-go-v2/service/cloudfront v1.44.6/go.mod h1:B0VXbI7WDpoR4kvqKBf4i43tdzrKxp31/MqWV7KtVEk= +github.com/aws/aws-sdk-go-v2/service/ec2 v1.202.0 h1:/kB9Uf7fgpYNLvwhAW0YiDSg7xQyxB6MbEYoC0yXtjs= +github.com/aws/aws-sdk-go-v2/service/ec2 v1.202.0/go.mod h1:cRD0Fhzj0YD+uAh16NChQAv9/BB0S9x3YK9hLx1jb/k= +github.com/aws/aws-sdk-go-v2/service/elasticloadbalancingv2 v1.43.8 h1:ukbsLI1BgjYPVdhDXsIYMR+yhiEBjjE5jY6G2hCQs28= +github.com/aws/aws-sdk-go-v2/service/elasticloadbalancingv2 v1.43.8/go.mod h1:7eYWJcAR97y5ZlEtGF6Ux3HXRPBfXLDHZm6d7bXNQNI= +github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.2 h1:D4oz8/CzT9bAEYtVhSBmFj2dNOtaHOtMKc2vHBwYizA= +github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.2/go.mod h1:Za3IHqTQ+yNcRHxu1OFucBh0ACZT4j4VQFF0BqpZcLY= +github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.5.3 h1:EP1ITDgYVPM2dL1bBBntJ7AW5yTjuWGz9XO+CZwpALU= +github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.5.3/go.mod h1:5lWNWeAgWenJ/BZ/CP9k9DjLbC0pjnM045WjXRPPi14= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.10 h1:hN4yJBGswmFTOVYqmbz1GBs9ZMtQe8SrYxPwrkrlRv8= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.10/go.mod h1:TsxON4fEZXyrKY+D+3d2gSTyJkGORexIYab9PTf56DA= +github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.10 h1:fXoWC2gi7tdJYNTPnnlSGzEVwewUchOi8xVq/dkg8Qs= +github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.10/go.mod h1:cvzBApD5dVazHU8C2rbBQzzzsKc8m5+wNJ9mCRZLKPc= +github.com/aws/aws-sdk-go-v2/service/resourcegroupstaggingapi v1.25.14 h1:oIgxyS1r3WcDMU+NyVycDQmfea6WLjJh8ZzmNMAQ4SQ= +github.com/aws/aws-sdk-go-v2/service/resourcegroupstaggingapi v1.25.14/go.mod h1:NerfbLSbEU2LZAlOLWXV02lnS9SVG3es9PXy71/4xlc= +github.com/aws/aws-sdk-go-v2/service/s3 v1.74.1 h1:9LawY3cDJ3HE+v2GMd5SOkNLDwgN4K7TsCjyVBYu/L4= +github.com/aws/aws-sdk-go-v2/service/s3 v1.74.1/go.mod h1:hHnELVnIHltd8EOF3YzahVX6F6y2C6dNqpRj1IMkS5I= +github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.34.14 h1:rhT0h8cSV5ZNZWy67Eqe3OQTFGRu9xwgyFsuGeIXmGQ= +github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.34.14/go.mod h1:CLEjbx0xH3ptihCb1l0XlrqoGfWD9xU0na47/s7fR/s= +github.com/aws/aws-sdk-go-v2/service/sso v1.24.12 h1:kznaW4f81mNMlREkU9w3jUuJvU5g/KsqDV43ab7Rp6s= +github.com/aws/aws-sdk-go-v2/service/sso v1.24.12/go.mod h1:bZy9r8e0/s0P7BSDHgMLXK2KvdyRRBIQ2blKlvLt0IU= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.28.11 h1:mUwIpAvILeKFnRx4h1dEgGEFGuV8KJ3pEScZWVFYuZA= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.28.11/go.mod h1:JDJtD+b8HNVv71axz8+S5492KM8wTzHRFpMKQbPlYxw= +github.com/aws/aws-sdk-go-v2/service/sts v1.33.10 h1:g9d+TOsu3ac7SgmY2dUf1qMgu/uJVTlQ4VCbH6hRxSw= +github.com/aws/aws-sdk-go-v2/service/sts v1.33.10/go.mod h1:WZfNmntu92HO44MVZAubQaz3qCuIdeOdog2sADfU6hU= +github.com/aws/smithy-go v1.22.2 h1:6D9hW43xKFrRx/tXXfAlIZc4JI+yQe6snnWcQyxSyLQ= +github.com/aws/smithy-go v1.22.2/go.mod h1:irrKGvNn1InZwb2d7fkIRNucdfwR8R+Ts3wxYa/cJHg= +github.com/bazelbuild/buildtools v0.0.0-20250128121225-1d7634006480 h1:roY1wEc6EAldFDRBDXI+9XU7ej5Bc4nFvCmMaucP8W4= +github.com/bazelbuild/buildtools v0.0.0-20250128121225-1d7634006480/go.mod h1:PLNUetjLa77TCCziPsz0EI8a6CUxgC+1jgmWv0H25tg= github.com/bazelbuild/rules_go v0.52.0 h1:+ozpngVAW67pCAwfhepaXSSrG3yHcj8K9hNAxSYBno4= github.com/bazelbuild/rules_go v0.52.0/go.mod h1:M+YrupNArA7OiTlv++rFUgQ6Sm+ZXbQ5HPUj0cGa0us= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= @@ -274,8 +274,8 @@ github.com/docker/cli v27.1.1+incompatible h1:goaZxOqs4QKxznZjjBWKONQci/MywhtRv2 github.com/docker/cli v27.1.1+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= github.com/docker/distribution v2.8.3+incompatible h1:AtKxIZ36LoNK51+Z6RpzLpddBirtxJnzDrHLEKxTAYk= github.com/docker/distribution v2.8.3+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= -github.com/docker/docker v27.5.0+incompatible h1:um++2NcQtGRTz5eEgO6aJimo6/JxrTXC941hd05JO6U= -github.com/docker/docker v27.5.0+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/docker v27.5.1+incompatible h1:4PYU5dnBYqRQi0294d1FBECqT9ECWeQAIfE8q4YnPY8= +github.com/docker/docker v27.5.1+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= github.com/docker/docker-credential-helpers v0.7.0 h1:xtCHsjxogADNZcdv1pKUHXryefjlVRqWqIhk/uXJp0A= github.com/docker/docker-credential-helpers v0.7.0/go.mod h1:rETQfLdHNT3foU5kuNkFR1R1V12OJRRO5lzt2D1b5X0= github.com/docker/go-connections v0.5.0 h1:USnMq7hx7gwdVZq1L49hLXaFtUdTADjXGp+uj1Br63c= @@ -402,8 +402,9 @@ github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7a github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= github.com/golang-jwt/jwt/v4 v4.0.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= -github.com/golang-jwt/jwt/v4 v4.5.0 h1:7cYmW1XlMY7h7ii7UhUyChSgS5wUJEnm9uZVTGqOWzg= github.com/golang-jwt/jwt/v4 v4.5.0/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= +github.com/golang-jwt/jwt/v4 v4.5.1 h1:JdqV9zKUdtaa9gdPlywC3aeoEsR681PlKC+4F5gQgeo= +github.com/golang-jwt/jwt/v4 v4.5.1/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= github.com/golang-jwt/jwt/v5 v5.2.1 h1:OuVbFODueb089Lh128TAcimifWaLhJwVflnrgM17wHk= github.com/golang-jwt/jwt/v5 v5.2.1/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= @@ -514,14 +515,14 @@ github.com/hashicorp/go-cty v1.4.1-0.20200414143053-d3edf31b6320/go.mod h1:EiZBM github.com/hashicorp/go-hclog v0.16.2/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= github.com/hashicorp/go-hclog v1.6.3 h1:Qr2kF+eVWjTiYmU7Y31tYlP1h0q/X3Nl3tPGdaB11/k= github.com/hashicorp/go-hclog v1.6.3/go.mod h1:W4Qnvbt70Wk/zYJryRzDRU/4r0kIg0PVHBcfoyhpF5M= -github.com/hashicorp/go-kms-wrapping/v2 v2.0.16 h1:WZeXfD26QMWYC35at25KgE021SF9L3u9UMHK8fJAdV0= -github.com/hashicorp/go-kms-wrapping/v2 v2.0.16/go.mod h1:ZiKZctjRTLEppuRwrttWkp71VYMbTTCkazK4xT7U/NQ= -github.com/hashicorp/go-kms-wrapping/wrappers/awskms/v2 v2.0.10 h1:YOSmJpqZt2X3KL0JUlKdih3WjpDlS9jQPyr6Etdh1GE= -github.com/hashicorp/go-kms-wrapping/wrappers/awskms/v2 v2.0.10/go.mod h1:eX4b0InOUfJ3NjfNWlJruBDT3rHXxOVw+7qNFmtjNbo= -github.com/hashicorp/go-kms-wrapping/wrappers/azurekeyvault/v2 v2.0.11 h1:/7SKkYIhA8cr3l8m1EKT6Q90bPoSVqqVBuQ6HgoMIkw= -github.com/hashicorp/go-kms-wrapping/wrappers/azurekeyvault/v2 v2.0.11/go.mod h1:LepS5s6ESGE0qQMpYaui5lX+mQYeiYiy06VzwWRioO8= -github.com/hashicorp/go-kms-wrapping/wrappers/gcpckms/v2 v2.0.12 h1:PCqWzT/Hii0KL07JsBZ3lJbv/wx02IAHYlhWQq8rxRY= -github.com/hashicorp/go-kms-wrapping/wrappers/gcpckms/v2 v2.0.12/go.mod h1:HSaOaX/lv3ShCdilUYbOTPnSvmoZ9xtQhgw+8hYcZkg= +github.com/hashicorp/go-kms-wrapping/v2 v2.0.18 h1:DLfC677GfKEpSAFpEWvl1vXsGpEcSHmbhBaPLrdDQHc= +github.com/hashicorp/go-kms-wrapping/v2 v2.0.18/go.mod h1:t/eaR/mi2mw3klfl1WEAuiLKrlZ/Q8cosmsT+RIPLu0= +github.com/hashicorp/go-kms-wrapping/wrappers/awskms/v2 v2.0.11 h1:J9zGa9SlcOHT3SQTj0Vv3shHo0anWbs58weURGCgChI= +github.com/hashicorp/go-kms-wrapping/wrappers/awskms/v2 v2.0.11/go.mod h1:iAOCu7/lG5eugg8+k7NVvQt0IpWT8s2Q9wnMtC/guM4= +github.com/hashicorp/go-kms-wrapping/wrappers/azurekeyvault/v2 v2.0.12 h1:ZL6jMQVOOvtog9/L9MLR1J7VssliIBVEFQlzKC9nn2c= +github.com/hashicorp/go-kms-wrapping/wrappers/azurekeyvault/v2 v2.0.12/go.mod h1:qAc0pzuhbesYKpFUmCWCPiOo6XdgpGEeYSE7Y7EXfgM= +github.com/hashicorp/go-kms-wrapping/wrappers/gcpckms/v2 v2.0.13 h1:NGBZnF+yPRZ3gjFl69Y2m58/U0iyB2oH9HaznL9tekA= +github.com/hashicorp/go-kms-wrapping/wrappers/gcpckms/v2 v2.0.13/go.mod h1:4Xb+6d8VPeDcUNuh4toPqJlDpkajeJyIQeg36TtWhKw= github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= github.com/hashicorp/go-plugin v1.6.2 h1:zdGAEd0V1lCaU0u+MxWQhtSDQmahpkwOun8U8EiRVog= @@ -530,6 +531,12 @@ github.com/hashicorp/go-retryablehttp v0.7.7 h1:C8hUCYzor8PIfXHa4UrZkU4VvK8o9ISH github.com/hashicorp/go-retryablehttp v0.7.7/go.mod h1:pkQpWZeYWskR+D1tR2O5OcBFOxfA7DoAO6xtkuQnHTk= github.com/hashicorp/go-secure-stdlib/awsutil v0.1.6 h1:W9WN8p6moV1fjKLkeqEgkAMu5rauy9QeYDAmIaPuuiA= github.com/hashicorp/go-secure-stdlib/awsutil v0.1.6/go.mod h1:MpCPSPGLDILGb4JMm94/mMi3YysIqsXzGCzkEZjcjXg= +github.com/hashicorp/go-secure-stdlib/parseutil v0.1.9 h1:FW0YttEnUNDJ2WL9XcrrfteS1xW8u+sh4ggM8pN5isQ= +github.com/hashicorp/go-secure-stdlib/parseutil v0.1.9/go.mod h1:Ll013mhdmsVDuoIXVfBtvgGJsXDYkTw1kooNcoCXuE0= +github.com/hashicorp/go-secure-stdlib/strutil v0.1.2 h1:kes8mmyCpxJsI7FTwtzRqEy9CdjCtrXrXGuOpxEA7Ts= +github.com/hashicorp/go-secure-stdlib/strutil v0.1.2/go.mod h1:Gou2R9+il93BqX25LAKCLuM+y9U2T4hlwvT1yprcna4= +github.com/hashicorp/go-sockaddr v1.0.6 h1:RSG8rKU28VTUTvEKghe5gIhIQpv8evvNpnDEyqO4u9I= +github.com/hashicorp/go-sockaddr v1.0.6/go.mod h1:uoUUmtwU7n9Dv3O4SNLeFvg0SxQ3lyjsj6+CCykpaxI= github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= github.com/hashicorp/go-uuid v1.0.3 h1:2gKiV6YVmrJ1i2CKKa9obLvRieoRGviZFL26PcT/Co8= github.com/hashicorp/go-uuid v1.0.3/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= @@ -543,24 +550,24 @@ github.com/hashicorp/hcl/v2 v2.23.0 h1:Fphj1/gCylPxHutVSEOf2fBOh1VE4AuLV7+kbJf3q github.com/hashicorp/hcl/v2 v2.23.0/go.mod h1:62ZYHrXgPoX8xBnzl8QzbWq4dyDsDtfCRgIq1rbJEvA= github.com/hashicorp/logutils v1.0.0 h1:dLEQVugN8vlakKOUE3ihGLTZJRB4j+M2cdTm/ORI65Y= github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64= -github.com/hashicorp/terraform-exec v0.21.0 h1:uNkLAe95ey5Uux6KJdua6+cv8asgILFVWkd/RG0D2XQ= -github.com/hashicorp/terraform-exec v0.21.0/go.mod h1:1PPeMYou+KDUSSeRE9szMZ/oHf4fYUmB923Wzbq1ICg= +github.com/hashicorp/terraform-exec v0.22.0 h1:G5+4Sz6jYZfRYUCg6eQgDsqTzkNXV+fP8l+uRmZHj64= +github.com/hashicorp/terraform-exec v0.22.0/go.mod h1:bjVbsncaeh8jVdhttWYZuBGj21FcYw6Ia/XfHcNO7lQ= github.com/hashicorp/terraform-json v0.24.0 h1:rUiyF+x1kYawXeRth6fKFm/MdfBS6+lW4NbeATsYz8Q= github.com/hashicorp/terraform-json v0.24.0/go.mod h1:Nfj5ubo9xbu9uiAoZVBsNOjvNKB66Oyrvtit74kC7ow= github.com/hashicorp/terraform-plugin-framework v1.13.0 h1:8OTG4+oZUfKgnfTdPTJwZ532Bh2BobF4H+yBiYJ/scw= github.com/hashicorp/terraform-plugin-framework v1.13.0/go.mod h1:j64rwMGpgM3NYXTKuxrCnyubQb/4VKldEKlcG8cvmjU= github.com/hashicorp/terraform-plugin-framework-validators v0.16.0 h1:O9QqGoYDzQT7lwTXUsZEtgabeWW96zUBh47Smn2lkFA= github.com/hashicorp/terraform-plugin-framework-validators v0.16.0/go.mod h1:Bh89/hNmqsEWug4/XWKYBwtnw3tbz5BAy1L1OgvbIaY= -github.com/hashicorp/terraform-plugin-go v0.25.0 h1:oi13cx7xXA6QciMcpcFi/rwA974rdTxjqEhXJjbAyks= -github.com/hashicorp/terraform-plugin-go v0.25.0/go.mod h1:+SYagMYadJP86Kvn+TGeV+ofr/R3g4/If0O5sO96MVw= +github.com/hashicorp/terraform-plugin-go v0.26.0 h1:cuIzCv4qwigug3OS7iKhpGAbZTiypAfFQmw8aE65O2M= +github.com/hashicorp/terraform-plugin-go v0.26.0/go.mod h1:+CXjuLDiFgqR+GcrM5a2E2Kal5t5q2jb0E3D57tTdNY= github.com/hashicorp/terraform-plugin-log v0.9.0 h1:i7hOA+vdAItN1/7UrfBqBwvYPQ9TFvymaRGZED3FCV0= github.com/hashicorp/terraform-plugin-log v0.9.0/go.mod h1:rKL8egZQ/eXSyDqzLUuwUYLVdlYeamldAHSxjUFADow= github.com/hashicorp/terraform-plugin-sdk/v2 v2.35.0 h1:wyKCCtn6pBBL46c1uIIBNUOWlNfYXfXpVo16iDyLp8Y= github.com/hashicorp/terraform-plugin-sdk/v2 v2.35.0/go.mod h1:B0Al8NyYVr8Mp/KLwssKXG1RqnTk7FySqSn4fRuLNgw= github.com/hashicorp/terraform-plugin-testing v1.11.0 h1:MeDT5W3YHbONJt2aPQyaBsgQeAIckwPX41EUHXEn29A= github.com/hashicorp/terraform-plugin-testing v1.11.0/go.mod h1:WNAHQ3DcgV/0J+B15WTE6hDvxcUdkPPpnB1FR3M910U= -github.com/hashicorp/terraform-registry-address v0.2.3 h1:2TAiKJ1A3MAkZlH1YI/aTVcLZRu7JseiXNRHbOAyoTI= -github.com/hashicorp/terraform-registry-address v0.2.3/go.mod h1:lFHA76T8jfQteVfT7caREqguFrW3c4MFSPhZB7HHgUM= +github.com/hashicorp/terraform-registry-address v0.2.4 h1:JXu/zHB2Ymg/TGVCRu10XqNa4Sh2bWcqCNyKWjnCPJA= +github.com/hashicorp/terraform-registry-address v0.2.4/go.mod h1:tUNYTVyCtU4OIGXXMDp7WNcJ+0W1B4nmstVDgHMjfAU= github.com/hashicorp/terraform-svchost v0.1.1 h1:EZZimZ1GxdqFRinZ1tpJwVxxt49xc/S52uzrw4x0jKQ= github.com/hashicorp/terraform-svchost v0.1.1/go.mod h1:mNsjQfZyf/Jhz35v6/0LWcv26+X7JPS+buii2c9/ctc= github.com/hashicorp/yamux v0.1.1 h1:yrQxtgseBDrq9Y652vSRDvsKCJKOUD+GzTS4Y0Y8pvE= @@ -761,6 +768,8 @@ github.com/rubenv/sql-migrate v1.7.1 h1:f/o0WgfO/GqNuVg+6801K/KW3WdDSupzSjDYODmi github.com/rubenv/sql-migrate v1.7.1/go.mod h1:Ob2Psprc0/3ggbM6wCzyYVFFuc6FyZrb2AS+ezLDFb4= github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/ryanuber/go-glob v1.0.0 h1:iQh3xXAumdQ+4Ufa5b25cRpC5TYKlno6hsv6Cb3pkBk= +github.com/ryanuber/go-glob v1.0.0/go.mod h1:807d1WSdnB0XRJzKNil9Om6lcp/3a0v4qIHxIXzX/Yc= github.com/samber/lo v1.47.0 h1:z7RynLwP5nbyRscyvcD043DWYoOcYRv3mV8lBeqOCLc= github.com/samber/lo v1.47.0/go.mod h1:RmDH9Ct32Qy3gduHQuKJ3gW1fMHAnE/fAzQuf6He5cU= github.com/samber/slog-multi v1.3.3 h1:qhFXaYdW73FIWLt8SrXMXfPwY58NpluzKDwRdPvhWWY= @@ -777,10 +786,10 @@ github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 h1:n661drycOFuPLCN github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3/go.mod h1:A0bzQcvG0E7Rwjx0REVgAGH58e96+X0MeOfepqsbeW4= github.com/shopspring/decimal v1.4.0 h1:bxl37RwXBklmTi0C79JfXCEBD1cqqHt0bbgBAGFp81k= github.com/shopspring/decimal v1.4.0/go.mod h1:gawqmDU56v4yIKSwfBSFip1HdCCXN8/+DMd9qYNcwME= -github.com/siderolabs/talos/pkg/machinery v1.9.2 h1:Y1MuXHUHOHikxF7IG76HniOo8tJvC8JoBlDfZ8URjpM= -github.com/siderolabs/talos/pkg/machinery v1.9.2/go.mod h1:AESzrVUMVMbrGiVdCQ5af7qYtL4ykCyee7dAgOTia3s= -github.com/sigstore/rekor v1.3.8 h1:B8kJI8mpSIXova4Jxa6vXdJyysRxFGsEsLKBDl0rRjA= -github.com/sigstore/rekor v1.3.8/go.mod h1:/dHFYKSuxEygfDRnEwyJ+ZD6qoVYNXQdi1mJrKvKWsI= +github.com/siderolabs/talos/pkg/machinery v1.9.3 h1:P3fb4UsmF3UEV2CDf100L7fVW+CBL5Yk6sEDis7uZr4= +github.com/siderolabs/talos/pkg/machinery v1.9.3/go.mod h1:G4swVKn4vK3455ssgcPUrikPTypx6n+uaqv7GyBWXy4= +github.com/sigstore/rekor v1.3.9 h1:sUjRpKVh/hhgqGMs0t+TubgYsksArZ6poLEC3MsGAzU= +github.com/sigstore/rekor v1.3.9/go.mod h1:xThNUhm6eNEmkJ/SiU/FVU7pLY2f380fSDZFsdDWlcM= github.com/sigstore/sigstore v1.8.12 h1:S8xMVZbE2z9ZBuQUEG737pxdLjnbOIcFi5v9UFfkJFc= github.com/sigstore/sigstore v1.8.12/go.mod h1:+PYQAa8rfw0QdPpBcT+Gl3egKD9c+TUgAlF12H3Nmjo= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= @@ -859,44 +868,44 @@ github.com/yvasiyarov/newrelic_platform_go v0.0.0-20140908184405-b21fdbd4370f h1 github.com/yvasiyarov/newrelic_platform_go v0.0.0-20140908184405-b21fdbd4370f/go.mod h1:GlGEuHIJweS1mbCqG+7vt2nvWLzLLnRHbXz5JKd/Qbg= github.com/zalando/go-keyring v0.2.3 h1:v9CUu9phlABObO4LPWycf+zwMG7nlbb3t/B5wa97yms= github.com/zalando/go-keyring v0.2.3/go.mod h1:HL4k+OXQfJUWaMnqyuSOc0drfGPX2b51Du6K+MRgZMk= -github.com/zclconf/go-cty v1.15.1 h1:RgQYm4j2EvoBRXOPxhUvxPzRrGDo1eCOhHXuGfrj5S0= -github.com/zclconf/go-cty v1.15.1/go.mod h1:VvMs5i0vgZdhYawQNq5kePSpLAoz8u1xvZgrPIxfnZE= +github.com/zclconf/go-cty v1.16.1 h1:a5TZEPzBFFR53udlIKApXzj8JIF4ZNQ6abH79z5R1S0= +github.com/zclconf/go-cty v1.16.1/go.mod h1:VvMs5i0vgZdhYawQNq5kePSpLAoz8u1xvZgrPIxfnZE= github.com/zclconf/go-cty-debug v0.0.0-20240509010212-0d6042c53940 h1:4r45xpDWB6ZMSMNJFMOjqrGHynW3DIBuR2H9j0ug+Mo= github.com/zclconf/go-cty-debug v0.0.0-20240509010212-0d6042c53940/go.mod h1:CmBdvvj3nqzfzJ6nTCIwDTPZ56aVGvDrmztiO5g3qrM= -go.etcd.io/etcd/api/v3 v3.5.17 h1:cQB8eb8bxwuxOilBpMJAEo8fAONyrdXTHUNcMd8yT1w= -go.etcd.io/etcd/api/v3 v3.5.17/go.mod h1:d1hvkRuXkts6PmaYk2Vrgqbv7H4ADfAKhyJqHNLJCB4= -go.etcd.io/etcd/client/pkg/v3 v3.5.17 h1:XxnDXAWq2pnxqx76ljWwiQ9jylbpC4rvkAeRVOUKKVw= -go.etcd.io/etcd/client/pkg/v3 v3.5.17/go.mod h1:4DqK1TKacp/86nJk4FLQqo6Mn2vvQFBmruW3pP14H/w= -go.etcd.io/etcd/client/v3 v3.5.17 h1:o48sINNeWz5+pjy/Z0+HKpj/xSnBkuVhVvXkjEXbqZY= -go.etcd.io/etcd/client/v3 v3.5.17/go.mod h1:j2d4eXTHWkT2ClBgnnEPm/Wuu7jsqku41v9DZ3OtjQo= +go.etcd.io/etcd/api/v3 v3.5.18 h1:Q4oDAKnmwqTo5lafvB+afbgCDF7E35E4EYV2g+FNGhs= +go.etcd.io/etcd/api/v3 v3.5.18/go.mod h1:uY03Ob2H50077J7Qq0DeehjM/A9S8PhVfbQ1mSaMopU= +go.etcd.io/etcd/client/pkg/v3 v3.5.18 h1:mZPOYw4h8rTk7TeJ5+3udUkfVGBqc+GCjOJYd68QgNM= +go.etcd.io/etcd/client/pkg/v3 v3.5.18/go.mod h1:BxVf2o5wXG9ZJV+/Cu7QNUiJYk4A29sAhoI5tIRsCu4= +go.etcd.io/etcd/client/v3 v3.5.18 h1:nvvYmNHGumkDjZhTHgVU36A9pykGa2K4lAJ0yY7hcXA= +go.etcd.io/etcd/client/v3 v3.5.18/go.mod h1:kmemwOsPU9broExyhYsBxX4spCTDX3yLgPMWtpBXG6E= go.mongodb.org/mongo-driver v1.14.0 h1:P98w8egYRjYe3XDjxhYJagTokP/H6HzlsnojRgZRd80= go.mongodb.org/mongo-driver v1.14.0/go.mod h1:Vzb0Mk/pa7e6cWw85R4F/endUC3u0U9jGcNU603k65c= go.mozilla.org/pkcs7 v0.0.0-20200128120323-432b2356ecb1 h1:A/5uWzF44DlIgdm/PQFwfMkW0JX+cIcQi/SwLAmZP5M= go.mozilla.org/pkcs7 v0.0.0-20200128120323-432b2356ecb1/go.mod h1:SNgMg+EgDFwmvSmLRTNKC5fegJjB7v23qTQ0XLGUNHk= go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0= go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= -go.opentelemetry.io/contrib/detectors/gcp v1.31.0 h1:G1JQOreVrfhRkner+l4mrGxmfqYCAuy76asTDAo0xsA= -go.opentelemetry.io/contrib/detectors/gcp v1.31.0/go.mod h1:tzQL6E1l+iV44YFTkcAeNQqzXUiekSYP9jjJjXwEd00= +go.opentelemetry.io/contrib/detectors/gcp v1.32.0 h1:P78qWqkLSShicHmAzfECaTgvslqHxblNE9j62Ws1NK8= +go.opentelemetry.io/contrib/detectors/gcp v1.32.0/go.mod h1:TVqo0Sda4Cv8gCIixd7LuLwW4EylumVWfhjZJjDD4DU= go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.54.0 h1:r6I7RJCN86bpD/FQwedZ0vSixDpwuWREjW9oRMsmqDc= go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.54.0/go.mod h1:B9yO6b04uB80CzjedvewuqDhxJxi11s7/GtiGa8bAjI= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.54.0 h1:TT4fX+nBOA/+LUkobKGW1ydGcn+G3vRw9+g5HwCphpk= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.54.0/go.mod h1:L7UH0GbB0p47T4Rri3uHjbpCFYrVrwc1I25QhNPiGK8= -go.opentelemetry.io/otel v1.31.0 h1:NsJcKPIW0D0H3NgzPDHmo0WW6SptzPdqg/L1zsIm2hY= -go.opentelemetry.io/otel v1.31.0/go.mod h1:O0C14Yl9FgkjqcCZAsE053C13OaddMYr/hz6clDkEJE= +go.opentelemetry.io/otel v1.32.0 h1:WnBN+Xjcteh0zdk01SVqV55d/m62NJLJdIyb4y/WO5U= +go.opentelemetry.io/otel v1.32.0/go.mod h1:00DCVSB0RQcnzlwyTfqtxSm+DRr9hpYrHjNGiBHVQIg= go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.28.0 h1:3Q/xZUyC1BBkualc9ROb4G8qkH90LXEIICcs5zv1OYY= go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.28.0/go.mod h1:s75jGIWA9OfCMzF0xr+ZgfrB5FEbbV7UuYo32ahUiFI= go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.19.0 h1:IeMeyr1aBvBiPVYihXIaeIZba6b8E1bYp7lbdxK8CQg= go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.19.0/go.mod h1:oVdCUtjq9MK9BlS7TtucsQwUcXcymNiEDjgDD2jMtZU= go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.29.0 h1:WDdP9acbMYjbKIyJUhTvtzj601sVJOqgWdUxSdR/Ysc= go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.29.0/go.mod h1:BLbf7zbNIONBLPwvFnwNHGj4zge8uTCM/UPIVW1Mq2I= -go.opentelemetry.io/otel/metric v1.31.0 h1:FSErL0ATQAmYHUIzSezZibnyVlft1ybhy4ozRPcF2fE= -go.opentelemetry.io/otel/metric v1.31.0/go.mod h1:C3dEloVbLuYoX41KpmAhOqNriGbA+qqH6PQ5E5mUfnY= -go.opentelemetry.io/otel/sdk v1.31.0 h1:xLY3abVHYZ5HSfOg3l2E5LUj2Cwva5Y7yGxnSW9H5Gk= -go.opentelemetry.io/otel/sdk v1.31.0/go.mod h1:TfRbMdhvxIIr/B2N2LQW2S5v9m3gOQ/08KsbbO5BPT0= -go.opentelemetry.io/otel/sdk/metric v1.31.0 h1:i9hxxLJF/9kkvfHppyLL55aW7iIJz4JjxTeYusH7zMc= -go.opentelemetry.io/otel/sdk/metric v1.31.0/go.mod h1:CRInTMVvNhUKgSAMbKyTMxqOBC0zgyxzW55lZzX43Y8= -go.opentelemetry.io/otel/trace v1.31.0 h1:ffjsj1aRouKewfr85U2aGagJ46+MvodynlQ1HYdmJys= -go.opentelemetry.io/otel/trace v1.31.0/go.mod h1:TXZkRk7SM2ZQLtR6eoAWQFIHPvzQ06FJAsO1tJg480A= +go.opentelemetry.io/otel/metric v1.32.0 h1:xV2umtmNcThh2/a/aCP+h64Xx5wsj8qqnkYZktzNa0M= +go.opentelemetry.io/otel/metric v1.32.0/go.mod h1:jH7CIbbK6SH2V2wE16W05BHCtIDzauciCRLoc/SyMv8= +go.opentelemetry.io/otel/sdk v1.32.0 h1:RNxepc9vK59A8XsgZQouW8ue8Gkb4jpWtJm9ge5lEG4= +go.opentelemetry.io/otel/sdk v1.32.0/go.mod h1:LqgegDBjKMmb2GC6/PrTnteJG39I8/vJCAP9LlJXEjU= +go.opentelemetry.io/otel/sdk/metric v1.32.0 h1:rZvFnvmvawYb0alrYkjraqJq0Z4ZUJAiyYCU9snn1CU= +go.opentelemetry.io/otel/sdk/metric v1.32.0/go.mod h1:PWeZlq0zt9YkYAp3gjKZ0eicRYvOh1Gd+X99x6GHpCQ= +go.opentelemetry.io/otel/trace v1.32.0 h1:WIC9mYrXf8TmY/EXuULKc8hR17vE+Hjv2cssQDe03fM= +go.opentelemetry.io/otel/trace v1.32.0/go.mod h1:+i4rkvCraA+tG6AzwloGaCtkx53Fa+L+V8e9a7YvhT8= go.opentelemetry.io/proto/otlp v1.3.1 h1:TrMUixzpM0yuc/znrFTP9MMRh8trP93mkCiDVeXrui0= go.opentelemetry.io/proto/otlp v1.3.1/go.mod h1:0X1WI4de4ZsLrrJNLAQbFeLCm3T7yBkR0XqQ7niQU+8= go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= @@ -916,8 +925,8 @@ golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDf golang.org/x/crypto v0.32.0 h1:euUpcYgM8WcP71gNpTqQCn6rC2t6ULUPiOzfWaXVVfc= golang.org/x/crypto v0.32.0/go.mod h1:ZnnJkOaASj8g0AjIduWNlq2NRxL0PlBrbKVyZ6V/Ugc= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20250106191152-7588d65b2ba8 h1:yqrTHse8TCMW1M1ZCP+VAR/l0kKxwaAIqN/il7x4voA= -golang.org/x/exp v0.0.0-20250106191152-7588d65b2ba8/go.mod h1:tujkw807nyEEAamNbDrEGzRav+ilXA7PCRAd6xsmwiU= +golang.org/x/exp v0.0.0-20250128182459-e0ece0dbea4c h1:KL/ZBHXgKGVmuZBZ01Lt57yE5ws8ZPSkkihmEyq7FXc= +golang.org/x/exp v0.0.0-20250128182459-e0ece0dbea4c/go.mod h1:tujkw807nyEEAamNbDrEGzRav+ilXA7PCRAd6xsmwiU= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= @@ -1028,8 +1037,8 @@ golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8T golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= gomodules.xyz/jsonpatch/v2 v2.4.0 h1:Ci3iUJyx9UeRx7CeFN8ARgGbkESwJK+KB9lLcWxY/Zw= gomodules.xyz/jsonpatch/v2 v2.4.0/go.mod h1:AH3dM2RI6uoBZxn3LVrfvJ3E0/9dG4cSrbuBJT4moAY= -google.golang.org/api v0.217.0 h1:GYrUtD289o4zl1AhiTZL0jvQGa2RDLyC+kX1N/lfGOU= -google.golang.org/api v0.217.0/go.mod h1:qMc2E8cBAbQlRypBTBWHklNJlaZZJBwDv81B1Iu8oSI= +google.golang.org/api v0.219.0 h1:nnKIvxKs/06jWawp2liznTBnMRQBEPpGo7I+oEypTX0= +google.golang.org/api v0.219.0/go.mod h1:K6OmjGm+NtLrIkHxv1U3a0qIf/0JOvAHd5O/6AoyKYE= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.6.8 h1:IhEN5q69dyKagZPYMSdIjS2HqprW324FRQZJcGqPAsM= @@ -1041,15 +1050,15 @@ google.golang.org/genproto v0.0.0-20241118233622-e639e219e697 h1:ToEetK57OidYuqD google.golang.org/genproto v0.0.0-20241118233622-e639e219e697/go.mod h1:JJrvXBWRZaFMxBufik1a4RpFw4HhgVtBBWQeQgUj2cc= google.golang.org/genproto/googleapis/api v0.0.0-20241209162323-e6fa225c2576 h1:CkkIfIt50+lT6NHAVoRYEyAvQGFM7xEwXUUywFvEb3Q= google.golang.org/genproto/googleapis/api v0.0.0-20241209162323-e6fa225c2576/go.mod h1:1R3kvZ1dtP3+4p4d3G8uJ8rFk/fWlScl38vanWACI08= -google.golang.org/genproto/googleapis/rpc v0.0.0-20250106144421-5f5ef82da422 h1:3UsHvIr4Wc2aW4brOaSCmcxh9ksica6fHEr8P1XhkYw= -google.golang.org/genproto/googleapis/rpc v0.0.0-20250106144421-5f5ef82da422/go.mod h1:3ENsm/5D1mzDyhpzeRi1NR784I0BcofWBoSc5QqqMK4= +google.golang.org/genproto/googleapis/rpc v0.0.0-20250124145028-65684f501c47 h1:91mG8dNTpkC0uChJUQ9zCiRqx3GEEFOWaRZ0mI6Oj2I= +google.golang.org/genproto/googleapis/rpc v0.0.0-20250124145028-65684f501c47/go.mod h1:+2Yz8+CLJbIfL9z73EW45avw8Lmge3xVElCP9zEKi50= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= -google.golang.org/grpc v1.69.4 h1:MF5TftSMkd8GLw/m0KM6V8CMOCY6NZ1NQDPGFgbTt4A= -google.golang.org/grpc v1.69.4/go.mod h1:vyjdE6jLBI76dgpDojsFGNaHlxdjXN9ghpnd2o7JGZ4= +google.golang.org/grpc v1.70.0 h1:pWFv03aZoHzlRKHWicjsZytKAiYCtNS0dHbXnIdq7jQ= +google.golang.org/grpc v1.70.0/go.mod h1:ofIJqVKDXx/JiXrwr2IG4/zwdH9txy3IlF40RmcJSQw= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= @@ -1061,8 +1070,8 @@ google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpAD google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.36.3 h1:82DV7MYdb8anAVi3qge1wSnMDrnKK7ebr+I0hHRN1BU= -google.golang.org/protobuf v1.36.3/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= +google.golang.org/protobuf v1.36.4 h1:6A3ZDJHn/eNqc1i+IdefRzy/9PokBTPvcqMySR7NNIM= +google.golang.org/protobuf v1.36.4/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= @@ -1123,8 +1132,8 @@ libvirt.org/go/libvirt v1.11001.0 h1:QJgpslxY7qkpXZIDxdMHpkDl7FfhgQJwqRTGBbg/S8E libvirt.org/go/libvirt v1.11001.0/go.mod h1:1WiFE8EjZfq+FCVog+rvr1yatKbKZ9FaFMZgEqxEJqQ= oras.land/oras-go v1.2.5 h1:XpYuAwAb0DfQsunIyMfeET92emK8km3W4yEzZvUbsTo= oras.land/oras-go v1.2.5/go.mod h1:PuAwRShRZCsZb7g8Ar3jKKQR/2A/qN+pkYxIOd/FAoo= -sigs.k8s.io/controller-runtime v0.20.0 h1:jjkMo29xEXH+02Md9qaVXfEIaMESSpy3TBWPrsfQkQs= -sigs.k8s.io/controller-runtime v0.20.0/go.mod h1:BrP3w158MwvB3ZbNpaAcIKkHQ7YGpYnzpoSTZ8E14WU= +sigs.k8s.io/controller-runtime v0.20.1 h1:JbGMAG/X94NeM3xvjenVUaBjy6Ui4Ogd/J5ZtjZnHaE= +sigs.k8s.io/controller-runtime v0.20.1/go.mod h1:BrP3w158MwvB3ZbNpaAcIKkHQ7YGpYnzpoSTZ8E14WU= sigs.k8s.io/json v0.0.0-20241010143419-9aa6b5e7a4b3 h1:/Rv+M11QRah1itp8VhT6HoVx1Ray9eB4DBr+K+/sCJ8= sigs.k8s.io/json v0.0.0-20241010143419-9aa6b5e7a4b3/go.mod h1:18nIHnGi6636UCz6m8i4DhaJ65T6EruyzmoQqI2BVDo= sigs.k8s.io/kustomize/api v0.18.0 h1:hTzp67k+3NEVInwz5BHyzc9rGxIauoXferXyjv5lWPo= diff --git a/internal/versions/components/components.pb.go b/internal/versions/components/components.pb.go index d82c863d4..16a2479a9 100644 --- a/internal/versions/components/components.pb.go +++ b/internal/versions/components/components.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.36.3 +// protoc-gen-go v1.36.4 // protoc v5.29.1 // source: internal/versions/components/components.proto @@ -11,6 +11,7 @@ import ( protoimpl "google.golang.org/protobuf/runtime/protoimpl" reflect "reflect" sync "sync" + unsafe "unsafe" ) const ( @@ -90,7 +91,7 @@ func (x *Component) GetExtract() bool { var File_internal_versions_components_components_proto protoreflect.FileDescriptor -var file_internal_versions_components_components_proto_rawDesc = []byte{ +var file_internal_versions_components_components_proto_rawDesc = string([]byte{ 0x0a, 0x2d, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, @@ -107,16 +108,16 @@ var file_internal_versions_components_components_proto_rawDesc = []byte{ 0x69, 0x6f, 0x6e, 0x2f, 0x76, 0x32, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} +}) var ( file_internal_versions_components_components_proto_rawDescOnce sync.Once - file_internal_versions_components_components_proto_rawDescData = file_internal_versions_components_components_proto_rawDesc + file_internal_versions_components_components_proto_rawDescData []byte ) func file_internal_versions_components_components_proto_rawDescGZIP() []byte { file_internal_versions_components_components_proto_rawDescOnce.Do(func() { - file_internal_versions_components_components_proto_rawDescData = protoimpl.X.CompressGZIP(file_internal_versions_components_components_proto_rawDescData) + file_internal_versions_components_components_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_internal_versions_components_components_proto_rawDesc), len(file_internal_versions_components_components_proto_rawDesc))) }) return file_internal_versions_components_components_proto_rawDescData } @@ -142,7 +143,7 @@ func file_internal_versions_components_components_proto_init() { out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_internal_versions_components_components_proto_rawDesc, + RawDescriptor: unsafe.Slice(unsafe.StringData(file_internal_versions_components_components_proto_rawDesc), len(file_internal_versions_components_components_proto_rawDesc)), NumEnums: 0, NumMessages: 1, NumExtensions: 0, @@ -153,7 +154,6 @@ func file_internal_versions_components_components_proto_init() { MessageInfos: file_internal_versions_components_components_proto_msgTypes, }.Build() File_internal_versions_components_components_proto = out.File - file_internal_versions_components_components_proto_rawDesc = nil file_internal_versions_components_components_proto_goTypes = nil file_internal_versions_components_components_proto_depIdxs = nil } diff --git a/joinservice/joinproto/join.pb.go b/joinservice/joinproto/join.pb.go index bf8245d22..c197bd6ca 100644 --- a/joinservice/joinproto/join.pb.go +++ b/joinservice/joinproto/join.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.36.3 +// protoc-gen-go v1.36.4 // protoc v5.29.1 // source: joinservice/joinproto/join.proto @@ -16,6 +16,7 @@ import ( protoimpl "google.golang.org/protobuf/runtime/protoimpl" reflect "reflect" sync "sync" + unsafe "unsafe" ) const ( @@ -351,7 +352,7 @@ func (x *IssueRejoinTicketResponse) GetMeasurementSecret() []byte { var File_joinservice_joinproto_join_proto protoreflect.FileDescriptor -var file_joinservice_joinproto_join_proto_rawDesc = []byte{ +var file_joinservice_joinproto_join_proto_rawDesc = string([]byte{ 0x0a, 0x20, 0x6a, 0x6f, 0x69, 0x6e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x6a, 0x6f, 0x69, 0x6e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x6a, 0x6f, 0x69, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x04, 0x6a, 0x6f, 0x69, 0x6e, 0x1a, 0x2d, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, @@ -431,16 +432,16 @@ var file_joinservice_joinproto_join_proto_rawDesc = []byte{ 0x6e, 0x2f, 0x76, 0x32, 0x2f, 0x6a, 0x6f, 0x69, 0x6e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x6a, 0x6f, 0x69, 0x6e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} +}) var ( file_joinservice_joinproto_join_proto_rawDescOnce sync.Once - file_joinservice_joinproto_join_proto_rawDescData = file_joinservice_joinproto_join_proto_rawDesc + file_joinservice_joinproto_join_proto_rawDescData []byte ) func file_joinservice_joinproto_join_proto_rawDescGZIP() []byte { file_joinservice_joinproto_join_proto_rawDescOnce.Do(func() { - file_joinservice_joinproto_join_proto_rawDescData = protoimpl.X.CompressGZIP(file_joinservice_joinproto_join_proto_rawDescData) + file_joinservice_joinproto_join_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_joinservice_joinproto_join_proto_rawDesc), len(file_joinservice_joinproto_join_proto_rawDesc))) }) return file_joinservice_joinproto_join_proto_rawDescData } @@ -477,7 +478,7 @@ func file_joinservice_joinproto_join_proto_init() { out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_joinservice_joinproto_join_proto_rawDesc, + RawDescriptor: unsafe.Slice(unsafe.StringData(file_joinservice_joinproto_join_proto_rawDesc), len(file_joinservice_joinproto_join_proto_rawDesc)), NumEnums: 0, NumMessages: 5, NumExtensions: 0, @@ -488,7 +489,6 @@ func file_joinservice_joinproto_join_proto_init() { MessageInfos: file_joinservice_joinproto_join_proto_msgTypes, }.Build() File_joinservice_joinproto_join_proto = out.File - file_joinservice_joinproto_join_proto_rawDesc = nil file_joinservice_joinproto_join_proto_goTypes = nil file_joinservice_joinproto_join_proto_depIdxs = nil } diff --git a/keyservice/keyserviceproto/keyservice.pb.go b/keyservice/keyserviceproto/keyservice.pb.go index a58cd571b..63287a6a8 100644 --- a/keyservice/keyserviceproto/keyservice.pb.go +++ b/keyservice/keyserviceproto/keyservice.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.36.3 +// protoc-gen-go v1.36.4 // protoc v5.29.1 // source: keyservice/keyserviceproto/keyservice.proto @@ -15,6 +15,7 @@ import ( protoimpl "google.golang.org/protobuf/runtime/protoimpl" reflect "reflect" sync "sync" + unsafe "unsafe" ) const ( @@ -122,7 +123,7 @@ func (x *GetDataKeyResponse) GetDataKey() []byte { var File_keyservice_keyserviceproto_keyservice_proto protoreflect.FileDescriptor -var file_keyservice_keyserviceproto_keyservice_proto_rawDesc = []byte{ +var file_keyservice_keyserviceproto_keyservice_proto_rawDesc = string([]byte{ 0x0a, 0x2b, 0x6b, 0x65, 0x79, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x6b, 0x65, 0x79, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x6b, 0x65, 0x79, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x03, 0x6b, @@ -144,16 +145,16 @@ var file_keyservice_keyserviceproto_keyservice_proto_rawDesc = []byte{ 0x32, 0x2f, 0x6b, 0x65, 0x79, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x6b, 0x65, 0x79, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} +}) var ( file_keyservice_keyserviceproto_keyservice_proto_rawDescOnce sync.Once - file_keyservice_keyserviceproto_keyservice_proto_rawDescData = file_keyservice_keyserviceproto_keyservice_proto_rawDesc + file_keyservice_keyserviceproto_keyservice_proto_rawDescData []byte ) func file_keyservice_keyserviceproto_keyservice_proto_rawDescGZIP() []byte { file_keyservice_keyserviceproto_keyservice_proto_rawDescOnce.Do(func() { - file_keyservice_keyserviceproto_keyservice_proto_rawDescData = protoimpl.X.CompressGZIP(file_keyservice_keyserviceproto_keyservice_proto_rawDescData) + file_keyservice_keyserviceproto_keyservice_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_keyservice_keyserviceproto_keyservice_proto_rawDesc), len(file_keyservice_keyserviceproto_keyservice_proto_rawDesc))) }) return file_keyservice_keyserviceproto_keyservice_proto_rawDescData } @@ -182,7 +183,7 @@ func file_keyservice_keyserviceproto_keyservice_proto_init() { out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_keyservice_keyserviceproto_keyservice_proto_rawDesc, + RawDescriptor: unsafe.Slice(unsafe.StringData(file_keyservice_keyserviceproto_keyservice_proto_rawDesc), len(file_keyservice_keyserviceproto_keyservice_proto_rawDesc)), NumEnums: 0, NumMessages: 2, NumExtensions: 0, @@ -193,7 +194,6 @@ func file_keyservice_keyserviceproto_keyservice_proto_init() { MessageInfos: file_keyservice_keyserviceproto_keyservice_proto_msgTypes, }.Build() File_keyservice_keyserviceproto_keyservice_proto = out.File - file_keyservice_keyserviceproto_keyservice_proto_rawDesc = nil file_keyservice_keyserviceproto_keyservice_proto_goTypes = nil file_keyservice_keyserviceproto_keyservice_proto_depIdxs = nil } diff --git a/upgrade-agent/upgradeproto/upgrade.pb.go b/upgrade-agent/upgradeproto/upgrade.pb.go index 6662b95c0..5cb49fed5 100644 --- a/upgrade-agent/upgradeproto/upgrade.pb.go +++ b/upgrade-agent/upgradeproto/upgrade.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.36.3 +// protoc-gen-go v1.36.4 // protoc v5.29.1 // source: upgrade-agent/upgradeproto/upgrade.proto @@ -16,6 +16,7 @@ import ( protoimpl "google.golang.org/protobuf/runtime/protoimpl" reflect "reflect" sync "sync" + unsafe "unsafe" ) const ( @@ -115,7 +116,7 @@ func (*ExecuteUpdateResponse) Descriptor() ([]byte, []int) { var File_upgrade_agent_upgradeproto_upgrade_proto protoreflect.FileDescriptor -var file_upgrade_agent_upgradeproto_upgrade_proto_rawDesc = []byte{ +var file_upgrade_agent_upgradeproto_upgrade_proto_rawDesc = string([]byte{ 0x0a, 0x28, 0x75, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x2d, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x2f, 0x75, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x75, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x07, 0x75, 0x70, 0x67, 0x72, @@ -147,16 +148,16 @@ var file_upgrade_agent_upgradeproto_upgrade_proto_rawDesc = []byte{ 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x76, 0x32, 0x2f, 0x75, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x2d, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x2f, 0x75, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} +}) var ( file_upgrade_agent_upgradeproto_upgrade_proto_rawDescOnce sync.Once - file_upgrade_agent_upgradeproto_upgrade_proto_rawDescData = file_upgrade_agent_upgradeproto_upgrade_proto_rawDesc + file_upgrade_agent_upgradeproto_upgrade_proto_rawDescData []byte ) func file_upgrade_agent_upgradeproto_upgrade_proto_rawDescGZIP() []byte { file_upgrade_agent_upgradeproto_upgrade_proto_rawDescOnce.Do(func() { - file_upgrade_agent_upgradeproto_upgrade_proto_rawDescData = protoimpl.X.CompressGZIP(file_upgrade_agent_upgradeproto_upgrade_proto_rawDescData) + file_upgrade_agent_upgradeproto_upgrade_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_upgrade_agent_upgradeproto_upgrade_proto_rawDesc), len(file_upgrade_agent_upgradeproto_upgrade_proto_rawDesc))) }) return file_upgrade_agent_upgradeproto_upgrade_proto_rawDescData } @@ -187,7 +188,7 @@ func file_upgrade_agent_upgradeproto_upgrade_proto_init() { out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_upgrade_agent_upgradeproto_upgrade_proto_rawDesc, + RawDescriptor: unsafe.Slice(unsafe.StringData(file_upgrade_agent_upgradeproto_upgrade_proto_rawDesc), len(file_upgrade_agent_upgradeproto_upgrade_proto_rawDesc)), NumEnums: 0, NumMessages: 2, NumExtensions: 0, @@ -198,7 +199,6 @@ func file_upgrade_agent_upgradeproto_upgrade_proto_init() { MessageInfos: file_upgrade_agent_upgradeproto_upgrade_proto_msgTypes, }.Build() File_upgrade_agent_upgradeproto_upgrade_proto = out.File - file_upgrade_agent_upgradeproto_upgrade_proto_rawDesc = nil file_upgrade_agent_upgradeproto_upgrade_proto_goTypes = nil file_upgrade_agent_upgradeproto_upgrade_proto_depIdxs = nil } diff --git a/verify/verifyproto/verify.pb.go b/verify/verifyproto/verify.pb.go index 6789d094b..77005c2a0 100644 --- a/verify/verifyproto/verify.pb.go +++ b/verify/verifyproto/verify.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.36.3 +// protoc-gen-go v1.36.4 // protoc v5.29.1 // source: verify/verifyproto/verify.proto @@ -15,6 +15,7 @@ import ( protoimpl "google.golang.org/protobuf/runtime/protoimpl" reflect "reflect" sync "sync" + unsafe "unsafe" ) const ( @@ -114,7 +115,7 @@ func (x *GetAttestationResponse) GetAttestation() []byte { var File_verify_verifyproto_verify_proto protoreflect.FileDescriptor -var file_verify_verifyproto_verify_proto_rawDesc = []byte{ +var file_verify_verifyproto_verify_proto_rawDesc = string([]byte{ 0x0a, 0x1f, 0x76, 0x65, 0x72, 0x69, 0x66, 0x79, 0x2f, 0x76, 0x65, 0x72, 0x69, 0x66, 0x79, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x76, 0x65, 0x72, 0x69, 0x66, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x06, 0x76, 0x65, 0x72, 0x69, 0x66, 0x79, 0x22, 0x2d, 0x0a, 0x15, 0x47, 0x65, 0x74, @@ -135,16 +136,16 @@ var file_verify_verifyproto_verify_proto_rawDesc = []byte{ 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x76, 0x32, 0x2f, 0x76, 0x65, 0x72, 0x69, 0x66, 0x79, 0x2f, 0x76, 0x65, 0x72, 0x69, 0x66, 0x79, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} +}) var ( file_verify_verifyproto_verify_proto_rawDescOnce sync.Once - file_verify_verifyproto_verify_proto_rawDescData = file_verify_verifyproto_verify_proto_rawDesc + file_verify_verifyproto_verify_proto_rawDescData []byte ) func file_verify_verifyproto_verify_proto_rawDescGZIP() []byte { file_verify_verifyproto_verify_proto_rawDescOnce.Do(func() { - file_verify_verifyproto_verify_proto_rawDescData = protoimpl.X.CompressGZIP(file_verify_verifyproto_verify_proto_rawDescData) + file_verify_verifyproto_verify_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_verify_verifyproto_verify_proto_rawDesc), len(file_verify_verifyproto_verify_proto_rawDesc))) }) return file_verify_verifyproto_verify_proto_rawDescData } @@ -173,7 +174,7 @@ func file_verify_verifyproto_verify_proto_init() { out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_verify_verifyproto_verify_proto_rawDesc, + RawDescriptor: unsafe.Slice(unsafe.StringData(file_verify_verifyproto_verify_proto_rawDesc), len(file_verify_verifyproto_verify_proto_rawDesc)), NumEnums: 0, NumMessages: 2, NumExtensions: 0, @@ -184,7 +185,6 @@ func file_verify_verifyproto_verify_proto_init() { MessageInfos: file_verify_verifyproto_verify_proto_msgTypes, }.Build() File_verify_verifyproto_verify_proto = out.File - file_verify_verifyproto_verify_proto_rawDesc = nil file_verify_verifyproto_verify_proto_goTypes = nil file_verify_verifyproto_verify_proto_depIdxs = nil } From 1faf2dd1b81dbca67bb51233e307e70a782c2bc5 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 30 Jan 2025 11:00:18 +0100 Subject: [PATCH 090/311] deps: update dependency gazelle to v0.42.0 (#3626) * deps: update dependency gazelle to v0.42.0 * deps: tidy all modules * ci: ignore GO-2025-3408 The vulnerability does not have a patch and is a denial-of-service. --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: edgelessci Co-authored-by: Markus Rudy --- MODULE.bazel | 2 +- MODULE.bazel.lock | 4 ++-- bazel/ci/govulncheck.sh.in | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/MODULE.bazel b/MODULE.bazel index 4a466fdde..ac6694c22 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -8,7 +8,7 @@ use_repo(bazel_lib, "jq_toolchains") use_repo(bazel_lib, "yq_toolchains") bazel_dep(name = "bazel_skylib", version = "1.7.1") -bazel_dep(name = "gazelle", version = "0.41.0") +bazel_dep(name = "gazelle", version = "0.42.0") bazel_dep(name = "hermetic_cc_toolchain", version = "3.1.1") bazel_dep(name = "rules_cc", version = "0.1.0") bazel_dep(name = "rules_go", version = "0.52.0", repo_name = "io_bazel_rules_go") diff --git a/MODULE.bazel.lock b/MODULE.bazel.lock index eb9b82958..25a7c1987 100644 --- a/MODULE.bazel.lock +++ b/MODULE.bazel.lock @@ -46,8 +46,8 @@ "https://bcr.bazel.build/modules/gazelle/0.33.0/MODULE.bazel": "a13a0f279b462b784fb8dd52a4074526c4a2afe70e114c7d09066097a46b3350", "https://bcr.bazel.build/modules/gazelle/0.34.0/MODULE.bazel": "abdd8ce4d70978933209db92e436deb3a8b737859e9354fb5fd11fb5c2004c8a", "https://bcr.bazel.build/modules/gazelle/0.36.0/MODULE.bazel": "e375d5d6e9a6ca59b0cb38b0540bc9a05b6aa926d322f2de268ad267a2ee74c0", - "https://bcr.bazel.build/modules/gazelle/0.41.0/MODULE.bazel": "fdce8a8f5129d5b6d693d91cb191d0a014fdcb88e9094e528325a7165de2a826", - "https://bcr.bazel.build/modules/gazelle/0.41.0/source.json": "bc00c665344d775b5cae6064608262e0478789c523677d40eef8f85031c6bfda", + "https://bcr.bazel.build/modules/gazelle/0.42.0/MODULE.bazel": "fa140a7c019f3a22779ba7c6132ffff9d2d10a51dba2f3304dee61523d11fef4", + "https://bcr.bazel.build/modules/gazelle/0.42.0/source.json": "eb6f7b0cb76c52d2679164910a01fa6ddcee409e6a7fee06e602ef259f65165c", "https://bcr.bazel.build/modules/google_benchmark/1.8.2/MODULE.bazel": "a70cf1bba851000ba93b58ae2f6d76490a9feb74192e57ab8e8ff13c34ec50cb", "https://bcr.bazel.build/modules/googletest/1.11.0/MODULE.bazel": "3a83f095183f66345ca86aa13c58b59f9f94a2f81999c093d4eeaa2d262d12f4", "https://bcr.bazel.build/modules/googletest/1.14.0.bcr.1/MODULE.bazel": "22c31a561553727960057361aa33bf20fb2e98584bc4fec007906e27053f80c6", diff --git a/bazel/ci/govulncheck.sh.in b/bazel/ci/govulncheck.sh.in index d3cda88be..ac9feab6f 100644 --- a/bazel/ci/govulncheck.sh.in +++ b/bazel/ci/govulncheck.sh.in @@ -31,7 +31,7 @@ check_module() { CGO_ENABLED=0 ${govulncheck} -C "$1" -format json "./..." | "${jq}" -sr ' (map(select(.osv) | {"key": .osv.id, "value": .osv.summary}) | from_entries) as $osvs | - map(select( .finding and .finding.osv != "GO-2024-3166" ) | .finding | select( .trace[-1].module | startswith("github.com/edgelesssys/") )) | + map(select( .finding and .finding.osv != "GO-2024-3166" and .finding.osv != "GO-2025-3408" ) | .finding | select( .trace[-1].module | startswith("github.com/edgelesssys/") )) | group_by(.osv) | map( {"osv": .[0].osv, "summary": $osvs[.[0].osv], "traces": [.[] | [.trace[] | .module]]} ) | if length > 0 then halt_error(1) else .[] end' From e6048e093bd4a0c8e31eca466bfb03ba484bccab Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 30 Jan 2025 11:45:03 +0100 Subject: [PATCH 091/311] deps: update dependency aspect_bazel_lib to v2.13.0 (#3627) * deps: update dependency aspect_bazel_lib to v2.13.0 * deps: tidy all modules --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: edgelessci --- MODULE.bazel | 2 +- MODULE.bazel.lock | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/MODULE.bazel b/MODULE.bazel index ac6694c22..5345067a5 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -1,6 +1,6 @@ module(name = "constellation") -bazel_dep(name = "aspect_bazel_lib", version = "2.11.0") +bazel_dep(name = "aspect_bazel_lib", version = "2.13.0") bazel_lib = use_extension("@aspect_bazel_lib//lib:extensions.bzl", "toolchains") bazel_lib.yq() diff --git a/MODULE.bazel.lock b/MODULE.bazel.lock index 25a7c1987..010e7e17e 100644 --- a/MODULE.bazel.lock +++ b/MODULE.bazel.lock @@ -12,8 +12,8 @@ "https://bcr.bazel.build/modules/abseil-cpp/20240116.1/source.json": "9be551b8d4e3ef76875c0d744b5d6a504a27e3ae67bc6b28f46415fd2d2957da", "https://bcr.bazel.build/modules/apple_support/1.5.0/MODULE.bazel": "50341a62efbc483e8a2a6aec30994a58749bd7b885e18dd96aa8c33031e558ef", "https://bcr.bazel.build/modules/apple_support/1.5.0/source.json": "eb98a7627c0bc486b57f598ad8da50f6625d974c8f723e9ea71bd39f709c9862", - "https://bcr.bazel.build/modules/aspect_bazel_lib/2.11.0/MODULE.bazel": "cb1ba9f9999ed0bc08600c221f532c1ddd8d217686b32ba7d45b0713b5131452", - "https://bcr.bazel.build/modules/aspect_bazel_lib/2.11.0/source.json": "92494d5aa43b96665397dd13ee16023097470fa85e276b93674d62a244de47ee", + "https://bcr.bazel.build/modules/aspect_bazel_lib/2.13.0/MODULE.bazel": "af4a546cb88c618f2e241721d2d76b70b7ecfaa1d58fe27b9187d3edb9e418da", + "https://bcr.bazel.build/modules/aspect_bazel_lib/2.13.0/source.json": "5538ef77a1ecff41c119e040d4bc0148c83e9e79464a165ec86a1aa3171a5535", "https://bcr.bazel.build/modules/bazel_features/1.1.0/MODULE.bazel": "cfd42ff3b815a5f39554d97182657f8c4b9719568eb7fded2b9135f084bf760b", "https://bcr.bazel.build/modules/bazel_features/1.1.1/MODULE.bazel": "27b8c79ef57efe08efccbd9dd6ef70d61b4798320b8d3c134fd571f78963dbcd", "https://bcr.bazel.build/modules/bazel_features/1.11.0/MODULE.bazel": "f9382337dd5a474c3b7d334c2f83e50b6eaedc284253334cf823044a26de03e8", @@ -392,7 +392,7 @@ "@@platforms//host:extension.bzl%host_platform": { "general": { "bzlTransitiveDigest": "xelQcPZH8+tmuOHVjL9vDxMnnQNMlwj0SlvgoqBkm4U=", - "usagesDigest": "JCEcit5USm9Aj2C/JNVREVGzgo8y8TR2x9tMNPBz6Lc=", + "usagesDigest": "8WuNbURwZrBrCS7egNs6hACAs9lW3nbF8SS2yX7+v9Y=", "recordedFileInputs": {}, "recordedDirentsInputs": {}, "envVariables": {}, From 706d1dff15ace617502605456828a3eb918453c4 Mon Sep 17 00:00:00 2001 From: miampf Date: Thu, 30 Jan 2025 12:08:59 +0000 Subject: [PATCH 092/311] cli: add `ssh` command to securely connect with nodes over ssh (#3568) --- bootstrapper/internal/initserver/BUILD.bazel | 2 + .../internal/initserver/initserver.go | 25 ++++ .../internal/joinclient/joinclient.go | 4 + .../internal/joinclient/joinclient_test.go | 20 +-- cli/cmd/root.go | 1 + cli/internal/cmd/BUILD.bazel | 5 + cli/internal/cmd/ssh.go | 122 ++++++++++++++++++ cli/internal/cmd/ssh_test.go | 114 ++++++++++++++++ docs/docs/reference/cli.md | 29 +++++ internal/constants/constants.go | 4 + internal/crypto/BUILD.bazel | 5 +- internal/crypto/crypto.go | 15 +++ internal/crypto/crypto_test.go | 42 ++++++ joinservice/internal/server/BUILD.bazel | 2 + joinservice/internal/server/server.go | 15 +++ joinservice/internal/server/server_test.go | 32 +++++ joinservice/joinproto/join.pb.go | 73 ++++++----- joinservice/joinproto/join.proto | 2 + 18 files changed, 471 insertions(+), 41 deletions(-) create mode 100644 cli/internal/cmd/ssh.go create mode 100644 cli/internal/cmd/ssh_test.go diff --git a/bootstrapper/internal/initserver/BUILD.bazel b/bootstrapper/internal/initserver/BUILD.bazel index 3ad04343c..f45aad1e6 100644 --- a/bootstrapper/internal/initserver/BUILD.bazel +++ b/bootstrapper/internal/initserver/BUILD.bazel @@ -11,6 +11,7 @@ go_library( "//bootstrapper/internal/journald", "//internal/atls", "//internal/attestation", + "//internal/constants", "//internal/crypto", "//internal/file", "//internal/grpc/atlscredentials", @@ -26,6 +27,7 @@ go_library( "@org_golang_google_grpc//keepalive", "@org_golang_google_grpc//status", "@org_golang_x_crypto//bcrypt", + "@org_golang_x_crypto//ssh", ], ) diff --git a/bootstrapper/internal/initserver/initserver.go b/bootstrapper/internal/initserver/initserver.go index a65a5f8b7..fad54abda 100644 --- a/bootstrapper/internal/initserver/initserver.go +++ b/bootstrapper/internal/initserver/initserver.go @@ -20,6 +20,7 @@ package initserver import ( "bufio" "context" + "crypto/ed25519" "errors" "fmt" "io" @@ -33,6 +34,7 @@ import ( "github.com/edgelesssys/constellation/v2/bootstrapper/internal/journald" "github.com/edgelesssys/constellation/v2/internal/atls" "github.com/edgelesssys/constellation/v2/internal/attestation" + "github.com/edgelesssys/constellation/v2/internal/constants" "github.com/edgelesssys/constellation/v2/internal/crypto" "github.com/edgelesssys/constellation/v2/internal/file" "github.com/edgelesssys/constellation/v2/internal/grpc/atlscredentials" @@ -44,6 +46,7 @@ import ( "github.com/edgelesssys/constellation/v2/internal/role" "github.com/edgelesssys/constellation/v2/internal/versions/components" "golang.org/x/crypto/bcrypt" + "golang.org/x/crypto/ssh" "google.golang.org/grpc" "google.golang.org/grpc/codes" "google.golang.org/grpc/keepalive" @@ -222,6 +225,28 @@ func (s *Server) Init(req *initproto.InitRequest, stream initproto.API_InitServe return err } + // Derive the emergency ssh CA key + key, err := cloudKms.GetDEK(stream.Context(), crypto.DEKPrefix+constants.SSHCAKeySuffix, ed25519.SeedSize) + if err != nil { + if e := s.sendLogsWithMessage(stream, status.Errorf(codes.Internal, "retrieving DEK for key derivation: %s", err)); e != nil { + err = errors.Join(err, e) + } + return err + } + ca, err := crypto.GenerateEmergencySSHCAKey(key) + if err != nil { + if e := s.sendLogsWithMessage(stream, status.Errorf(codes.Internal, "generating emergency SSH CA key: %s", err)); e != nil { + err = errors.Join(err, e) + } + return err + } + if err := s.fileHandler.Write(constants.SSHCAKeyPath, ssh.MarshalAuthorizedKey(ca.PublicKey()), file.OptMkdirAll); err != nil { + if e := s.sendLogsWithMessage(stream, status.Errorf(codes.Internal, "writing ssh CA pubkey: %s", err)); e != nil { + err = errors.Join(err, e) + } + return err + } + clusterName := req.ClusterName if clusterName == "" { clusterName = "constellation" diff --git a/bootstrapper/internal/joinclient/joinclient.go b/bootstrapper/internal/joinclient/joinclient.go index 37c9e9b8f..536906988 100644 --- a/bootstrapper/internal/joinclient/joinclient.go +++ b/bootstrapper/internal/joinclient/joinclient.go @@ -271,6 +271,10 @@ func (c *JoinClient) startNodeAndJoin(ticket *joinproto.IssueJoinTicketResponse, return fmt.Errorf("writing kubelet key: %w", err) } + if err := c.fileHandler.Write(constants.SSHCAKeyPath, ticket.AuthorizedCaPublicKey, file.OptMkdirAll); err != nil { + return fmt.Errorf("writing ssh ca key: %w", err) + } + state := nodestate.NodeState{ Role: c.role, MeasurementSalt: ticket.MeasurementSalt, diff --git a/bootstrapper/internal/joinclient/joinclient_test.go b/bootstrapper/internal/joinclient/joinclient_test.go index 6a0b89f4b..e652c5165 100644 --- a/bootstrapper/internal/joinclient/joinclient_test.go +++ b/bootstrapper/internal/joinclient/joinclient_test.go @@ -50,6 +50,8 @@ func TestClient(t *testing.T) { {Role: role.ControlPlane, Name: "node-4", VPCIP: "192.0.2.2"}, {Role: role.ControlPlane, Name: "node-5", VPCIP: "192.0.2.3"}, } + caDerivationKey := make([]byte, 256) + respCaKey := &joinproto.IssueJoinTicketResponse{AuthorizedCaPublicKey: caDerivationKey} testCases := map[string]struct { role role.Role @@ -69,7 +71,7 @@ func TestClient(t *testing.T) { selfAnswer{err: assert.AnError}, selfAnswer{instance: workerSelf}, listAnswer{instances: peers}, - issueJoinTicketAnswer{}, + issueJoinTicketAnswer{resp: respCaKey}, }, clusterJoiner: &stubClusterJoiner{}, nodeLock: newFakeLock(), @@ -85,7 +87,7 @@ func TestClient(t *testing.T) { selfAnswer{instance: metadata.InstanceMetadata{Name: "node-1"}}, selfAnswer{instance: workerSelf}, listAnswer{instances: peers}, - issueJoinTicketAnswer{}, + issueJoinTicketAnswer{resp: respCaKey}, }, clusterJoiner: &stubClusterJoiner{}, nodeLock: newFakeLock(), @@ -101,7 +103,7 @@ func TestClient(t *testing.T) { listAnswer{err: assert.AnError}, listAnswer{err: assert.AnError}, listAnswer{instances: peers}, - issueJoinTicketAnswer{}, + issueJoinTicketAnswer{resp: respCaKey}, }, clusterJoiner: &stubClusterJoiner{}, nodeLock: newFakeLock(), @@ -117,7 +119,7 @@ func TestClient(t *testing.T) { listAnswer{}, listAnswer{}, listAnswer{instances: peers}, - issueJoinTicketAnswer{}, + issueJoinTicketAnswer{resp: respCaKey}, }, clusterJoiner: &stubClusterJoiner{}, nodeLock: newFakeLock(), @@ -134,7 +136,7 @@ func TestClient(t *testing.T) { listAnswer{instances: peers}, issueJoinTicketAnswer{err: assert.AnError}, listAnswer{instances: peers}, - issueJoinTicketAnswer{}, + issueJoinTicketAnswer{resp: respCaKey}, }, clusterJoiner: &stubClusterJoiner{}, nodeLock: newFakeLock(), @@ -151,7 +153,7 @@ func TestClient(t *testing.T) { listAnswer{instances: peers}, issueJoinTicketAnswer{err: assert.AnError}, listAnswer{instances: peers}, - issueJoinTicketAnswer{}, + issueJoinTicketAnswer{resp: respCaKey}, }, clusterJoiner: &stubClusterJoiner{}, nodeLock: newFakeLock(), @@ -164,7 +166,7 @@ func TestClient(t *testing.T) { apiAnswers: []any{ selfAnswer{instance: controlSelf}, listAnswer{instances: peers}, - issueJoinTicketAnswer{}, + issueJoinTicketAnswer{resp: respCaKey}, }, clusterJoiner: &stubClusterJoiner{numBadCalls: -1, joinClusterErr: assert.AnError}, nodeLock: newFakeLock(), @@ -177,7 +179,7 @@ func TestClient(t *testing.T) { apiAnswers: []any{ selfAnswer{instance: controlSelf}, listAnswer{instances: peers}, - issueJoinTicketAnswer{}, + issueJoinTicketAnswer{resp: respCaKey}, }, clusterJoiner: &stubClusterJoiner{numBadCalls: 1, joinClusterErr: assert.AnError}, nodeLock: newFakeLock(), @@ -191,7 +193,7 @@ func TestClient(t *testing.T) { apiAnswers: []any{ selfAnswer{instance: controlSelf}, listAnswer{instances: peers}, - issueJoinTicketAnswer{}, + issueJoinTicketAnswer{resp: respCaKey}, }, clusterJoiner: &stubClusterJoiner{}, nodeLock: lockedLock, diff --git a/cli/cmd/root.go b/cli/cmd/root.go index 6baaf3f1f..cd3f24647 100644 --- a/cli/cmd/root.go +++ b/cli/cmd/root.go @@ -61,6 +61,7 @@ func NewRootCmd() *cobra.Command { rootCmd.AddCommand(cmd.NewIAMCmd()) rootCmd.AddCommand(cmd.NewVersionCmd()) rootCmd.AddCommand(cmd.NewInitCmd()) + rootCmd.AddCommand(cmd.NewSSHCmd()) rootCmd.AddCommand(cmd.NewMaaPatchCmd()) return rootCmd diff --git a/cli/internal/cmd/BUILD.bazel b/cli/internal/cmd/BUILD.bazel index 828a63d5b..bc6a71a50 100644 --- a/cli/internal/cmd/BUILD.bazel +++ b/cli/internal/cmd/BUILD.bazel @@ -37,6 +37,7 @@ go_library( "miniup_linux_amd64.go", "recover.go", "spinner.go", + "ssh.go", "status.go", "terminate.go", "upgrade.go", @@ -116,6 +117,8 @@ go_library( "//internal/attestation/azure/tdx", "@com_github_google_go_sev_guest//proto/sevsnp", "@com_github_google_go_tpm_tools//proto/attest", + "@org_golang_x_crypto//ssh", + "//internal/kms/setup", ] + select({ "@io_bazel_rules_go//go/platform:android_amd64": [ "@org_golang_x_sys//unix", @@ -142,6 +145,7 @@ go_test( "maapatch_test.go", "recover_test.go", "spinner_test.go", + "ssh_test.go", "status_test.go", "terminate_test.go", "upgradeapply_test.go", @@ -201,6 +205,7 @@ go_test( "@org_golang_google_grpc//:grpc", "@org_golang_google_grpc//codes", "@org_golang_google_grpc//status", + "@org_golang_x_crypto//ssh", "@org_golang_x_mod//semver", "@org_uber_go_goleak//:goleak", ], diff --git a/cli/internal/cmd/ssh.go b/cli/internal/cmd/ssh.go new file mode 100644 index 000000000..d65b85fc0 --- /dev/null +++ b/cli/internal/cmd/ssh.go @@ -0,0 +1,122 @@ +/* +Copyright (c) Edgeless Systems GmbH + +SPDX-License-Identifier: AGPL-3.0-only +*/ + +package cmd + +import ( + "crypto/ed25519" + "crypto/rand" + "fmt" + "os" + "time" + + "github.com/edgelesssys/constellation/v2/internal/constants" + "github.com/edgelesssys/constellation/v2/internal/crypto" + "github.com/edgelesssys/constellation/v2/internal/file" + "github.com/edgelesssys/constellation/v2/internal/kms/setup" + "github.com/edgelesssys/constellation/v2/internal/kms/uri" + "github.com/spf13/afero" + "github.com/spf13/cobra" + + "golang.org/x/crypto/ssh" +) + +// NewSSHCmd returns a new cobra.Command for the ssh command. +func NewSSHCmd() *cobra.Command { + cmd := &cobra.Command{ + Use: "ssh", + Short: "Prepare your cluster for emergency ssh access", + Long: "Prepare your cluster for emergency ssh access and sign a given key pair for authorization.", + Args: cobra.ExactArgs(0), + RunE: runSSH, + } + cmd.Flags().String("key", "", "the path to an existing ssh public key") + must(cmd.MarkFlagRequired("key")) + return cmd +} + +func runSSH(cmd *cobra.Command, _ []string) error { + fh := file.NewHandler(afero.NewOsFs()) + debugLogger, err := newDebugFileLogger(cmd, fh) + if err != nil { + return err + } + + keyPath, err := cmd.Flags().GetString("key") + if err != nil { + return fmt.Errorf("retrieving path to public key from flags: %s", err) + } + + return writeCertificateForKey(cmd, keyPath, fh, debugLogger) +} + +func writeCertificateForKey(cmd *cobra.Command, keyPath string, fh file.Handler, debugLogger debugLog) error { + _, err := fh.Stat(constants.TerraformWorkingDir) + if os.IsNotExist(err) { + return fmt.Errorf("directory %q does not exist", constants.TerraformWorkingDir) + } + if err != nil { + return err + } + + // NOTE(miampf): Since other KMS aren't fully implemented yet, this commands assumes that the cKMS is used and derives the key accordingly. + var mastersecret uri.MasterSecret + if err = fh.ReadJSON(constants.MasterSecretFilename, &mastersecret); err != nil { + return fmt.Errorf("reading master secret: %s", err) + } + + mastersecretURI := uri.MasterSecret{Key: mastersecret.Key, Salt: mastersecret.Salt} + kms, err := setup.KMS(cmd.Context(), uri.NoStoreURI, mastersecretURI.EncodeToURI()) + if err != nil { + return fmt.Errorf("setting up KMS: %s", err) + } + sshCAKeySeed, err := kms.GetDEK(cmd.Context(), crypto.DEKPrefix+constants.SSHCAKeySuffix, ed25519.SeedSize) + if err != nil { + return fmt.Errorf("retrieving key from KMS: %s", err) + } + + ca, err := crypto.GenerateEmergencySSHCAKey(sshCAKeySeed) + if err != nil { + return fmt.Errorf("generating ssh emergency CA key: %s", err) + } + + debugLogger.Debug("SSH CA KEY generated", "public-key", string(ssh.MarshalAuthorizedKey(ca.PublicKey()))) + + keyBuffer, err := fh.Read(keyPath) + if err != nil { + return fmt.Errorf("reading public key %q: %s", keyPath, err) + } + + pub, _, _, _, err := ssh.ParseAuthorizedKey(keyBuffer) + if err != nil { + return fmt.Errorf("parsing public key %q: %s", keyPath, err) + } + + certificate := ssh.Certificate{ + Key: pub, + CertType: ssh.UserCert, + ValidAfter: uint64(time.Now().Unix()), + ValidBefore: uint64(time.Now().Add(24 * time.Hour).Unix()), + ValidPrincipals: []string{"root"}, + Permissions: ssh.Permissions{ + Extensions: map[string]string{ + "permit-port-forwarding": "yes", + "permit-pty": "yes", + }, + }, + } + if err := certificate.SignCert(rand.Reader, ca); err != nil { + return fmt.Errorf("signing certificate: %s", err) + } + + debugLogger.Debug("Signed certificate", "certificate", string(ssh.MarshalAuthorizedKey(&certificate))) + if err := fh.Write(fmt.Sprintf("%s/ca_cert.pub", constants.TerraformWorkingDir), ssh.MarshalAuthorizedKey(&certificate), file.OptOverwrite); err != nil { + return fmt.Errorf("writing certificate: %s", err) + } + cmd.Printf("You can now connect to a node using 'ssh -F %s/ssh_config -i '.\nYou can obtain the private node IP via the web UI of your CSP.\n", constants.TerraformWorkingDir) + + return nil +} diff --git a/cli/internal/cmd/ssh_test.go b/cli/internal/cmd/ssh_test.go new file mode 100644 index 000000000..7f5fe566d --- /dev/null +++ b/cli/internal/cmd/ssh_test.go @@ -0,0 +1,114 @@ +/* +Copyright (c) Edgeless Systems GmbH + +SPDX-License-Identifier: AGPL-3.0-only +*/ + +package cmd + +import ( + "bytes" + "fmt" + "testing" + + "github.com/edgelesssys/constellation/v2/internal/constants" + "github.com/edgelesssys/constellation/v2/internal/file" + "github.com/edgelesssys/constellation/v2/internal/logger" + "github.com/spf13/afero" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + "golang.org/x/crypto/ssh" +) + +func TestSSH(t *testing.T) { + someSSHPubKey := "ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBDA1yYg1PIJNjAGjyuv66r8AJtpfBDFLdp3u9lVwkgbVKv1AzcaeTF/NEw+nhNJOjuCZ61LTPj12LZ8Wy/oSm0A= motte@lolcatghost" + someSSHPubKeyPath := "some-key.pub" + someMasterSecret := ` + { + "key": "MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK", + "salt": "MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK" + } + ` + + newFsWithDirectory := func() file.Handler { + require := require.New(t) + fh := file.NewHandler(afero.NewMemMapFs()) + require.NoError(fh.MkdirAll(constants.TerraformWorkingDir)) + return fh + } + newFsNoDirectory := func() file.Handler { + fh := file.NewHandler(afero.NewMemMapFs()) + return fh + } + + testCases := map[string]struct { + fh file.Handler + pubKey string + masterSecret string + wantErr bool + }{ + "everything exists": { + fh: newFsWithDirectory(), + pubKey: someSSHPubKey, + masterSecret: someMasterSecret, + }, + "no public key": { + fh: newFsWithDirectory(), + masterSecret: someMasterSecret, + wantErr: true, + }, + "no master secret": { + fh: newFsWithDirectory(), + pubKey: someSSHPubKey, + wantErr: true, + }, + "malformed public key": { + fh: newFsWithDirectory(), + pubKey: "asdf", + masterSecret: someMasterSecret, + wantErr: true, + }, + "malformed master secret": { + fh: newFsWithDirectory(), + masterSecret: "asdf", + pubKey: someSSHPubKey, + wantErr: true, + }, + "directory does not exist": { + fh: newFsNoDirectory(), + pubKey: someSSHPubKey, + masterSecret: someMasterSecret, + wantErr: true, + }, + } + + for name, tc := range testCases { + t.Run(name, func(t *testing.T) { + assert := assert.New(t) + require := require.New(t) + + if tc.pubKey != "" { + require.NoError(tc.fh.Write(someSSHPubKeyPath, []byte(tc.pubKey))) + } + if tc.masterSecret != "" { + require.NoError(tc.fh.Write(constants.MasterSecretFilename, []byte(tc.masterSecret))) + } + + cmd := NewSSHCmd() + cmd.SetOut(&bytes.Buffer{}) + cmd.SetErr(&bytes.Buffer{}) + cmd.SetIn(&bytes.Buffer{}) + + err := writeCertificateForKey(cmd, someSSHPubKeyPath, tc.fh, logger.NewTest(t)) + if tc.wantErr { + assert.Error(err) + } else { + assert.NoError(err) + cert, err := tc.fh.Read(fmt.Sprintf("%s/ca_cert.pub", constants.TerraformWorkingDir)) + require.NoError(err) + _, _, _, _, err = ssh.ParseAuthorizedKey(cert) + require.NoError(err) + } + }) + } +} diff --git a/docs/docs/reference/cli.md b/docs/docs/reference/cli.md index 99acef520..06e823e6e 100644 --- a/docs/docs/reference/cli.md +++ b/docs/docs/reference/cli.md @@ -39,6 +39,7 @@ Commands: * [apply](#constellation-iam-upgrade-apply): Apply an upgrade to an IAM profile * [version](#constellation-version): Display version of this CLI * [init](#constellation-init): Initialize the Constellation cluster +* [ssh](#constellation-ssh): Prepare your cluster for emergency ssh access ## constellation config @@ -842,3 +843,31 @@ constellation init [flags] -C, --workspace string path to the Constellation workspace ``` +## constellation ssh + +Prepare your cluster for emergency ssh access + +### Synopsis + +Prepare your cluster for emergency ssh access and sign a given key pair for authorization. + +``` +constellation ssh [flags] +``` + +### Options + +``` + -h, --help help for ssh + --key string the path to an existing ssh public key +``` + +### Options inherited from parent commands + +``` + --debug enable debug logging + --force disable version compatibility checks - might result in corrupted clusters + --tf-log string Terraform log level (default "NONE") + -C, --workspace string path to the Constellation workspace +``` + diff --git a/internal/constants/constants.go b/internal/constants/constants.go index c313b74a6..aecef23c8 100644 --- a/internal/constants/constants.go +++ b/internal/constants/constants.go @@ -42,6 +42,10 @@ const ( DefaultWorkerGroupName = "worker_default" // CLIDebugLogFile is the name of the debug log file for constellation init/constellation apply. CLIDebugLogFile = "constellation-debug.log" + // SSHCAKeySuffix is the suffix used together with the DEKPrefix to derive an SSH CA key for emergency ssh access. + SSHCAKeySuffix = "ca_emergency_ssh" + // SSHCAKeyPath is the path to the emergency SSH CA key on the node. + SSHCAKeyPath = "/run/ssh/ssh_ca.pub" // // Ports. diff --git a/internal/crypto/BUILD.bazel b/internal/crypto/BUILD.bazel index 28131c022..0b3e402d9 100644 --- a/internal/crypto/BUILD.bazel +++ b/internal/crypto/BUILD.bazel @@ -6,7 +6,10 @@ go_library( srcs = ["crypto.go"], importpath = "github.com/edgelesssys/constellation/v2/internal/crypto", visibility = ["//:__subpackages__"], - deps = ["@org_golang_x_crypto//hkdf"], + deps = [ + "@org_golang_x_crypto//hkdf", + "@org_golang_x_crypto//ssh", + ], ) go_test( diff --git a/internal/crypto/crypto.go b/internal/crypto/crypto.go index 081e25d71..0a88ec2f5 100644 --- a/internal/crypto/crypto.go +++ b/internal/crypto/crypto.go @@ -9,6 +9,7 @@ package crypto import ( "bytes" + "crypto/ed25519" "crypto/rand" "crypto/sha256" "crypto/x509" @@ -18,6 +19,7 @@ import ( "math/big" "golang.org/x/crypto/hkdf" + "golang.org/x/crypto/ssh" ) const ( @@ -62,6 +64,19 @@ func GenerateRandomBytes(length int) ([]byte, error) { return nonce, nil } +// GenerateEmergencySSHCAKey creates a CA that is used to sign keys for emergency ssh access. +func GenerateEmergencySSHCAKey(seed []byte) (ssh.Signer, error) { + _, priv, err := ed25519.GenerateKey(bytes.NewReader(seed)) + if err != nil { + return nil, err + } + ca, err := ssh.NewSignerFromSigner(priv) + if err != nil { + return nil, err + } + return ca, nil +} + // PemToX509Cert takes a list of PEM-encoded certificates, parses the first one and returns it // as an x.509 certificate. func PemToX509Cert(raw []byte) (*x509.Certificate, error) { diff --git a/internal/crypto/crypto_test.go b/internal/crypto/crypto_test.go index 674ec4c84..12c3bdc9c 100644 --- a/internal/crypto/crypto_test.go +++ b/internal/crypto/crypto_test.go @@ -7,6 +7,7 @@ SPDX-License-Identifier: AGPL-3.0-only package crypto import ( + "crypto/ed25519" "crypto/x509" "testing" @@ -121,6 +122,47 @@ func TestGenerateRandomBytes(t *testing.T) { assert.Len(n3, 16) } +func TestGenerateEmergencySSHCAKey(t *testing.T) { + nullKey := make([]byte, ed25519.SeedSize) + + testCases := map[string]struct { + key []byte + wantErr bool + }{ + "key length = 0": { + key: make([]byte, 0), + wantErr: true, + }, + "valid key": { + key: nullKey, + }, + "nil input": { + key: nil, + wantErr: true, + }, + "long key": { + key: make([]byte, 256), + }, + "key too short": { + key: make([]byte, ed25519.SeedSize-1), + wantErr: true, + }, + } + + for name, tc := range testCases { + t.Run(name, func(t *testing.T) { + assert := assert.New(t) + + _, err := GenerateEmergencySSHCAKey(tc.key) + if tc.wantErr { + assert.Error(err) + } else { + assert.NoError(err) + } + }) + } +} + func TestPemToX509Cert(t *testing.T) { testCases := map[string]struct { pemCert []byte diff --git a/joinservice/internal/server/BUILD.bazel b/joinservice/internal/server/BUILD.bazel index 7e29a733c..eed06e663 100644 --- a/joinservice/internal/server/BUILD.bazel +++ b/joinservice/internal/server/BUILD.bazel @@ -19,6 +19,7 @@ go_library( "@org_golang_google_grpc//codes", "@org_golang_google_grpc//credentials", "@org_golang_google_grpc//status", + "@org_golang_x_crypto//ssh", ], ) @@ -28,6 +29,7 @@ go_test( embed = [":server"], deps = [ "//internal/attestation", + "//internal/constants", "//internal/logger", "//internal/versions/components", "//joinservice/joinproto", diff --git a/joinservice/internal/server/server.go b/joinservice/internal/server/server.go index 21bb24d67..e6fc82b95 100644 --- a/joinservice/internal/server/server.go +++ b/joinservice/internal/server/server.go @@ -9,6 +9,7 @@ package server import ( "context" + "crypto/ed25519" "fmt" "log/slog" "net" @@ -21,6 +22,7 @@ import ( "github.com/edgelesssys/constellation/v2/internal/logger" "github.com/edgelesssys/constellation/v2/internal/versions/components" "github.com/edgelesssys/constellation/v2/joinservice/joinproto" + "golang.org/x/crypto/ssh" "google.golang.org/grpc" "google.golang.org/grpc/codes" "google.golang.org/grpc/credentials" @@ -100,6 +102,18 @@ func (s *Server) IssueJoinTicket(ctx context.Context, req *joinproto.IssueJoinTi return nil, status.Errorf(codes.Internal, "getting key for stateful disk: %s", err) } + log.Info("Requesting emergency SSH CA derivation key") + sshCAKeySeed, err := s.dataKeyGetter.GetDataKey(ctx, constants.SSHCAKeySuffix, ed25519.SeedSize) + if err != nil { + log.With(slog.Any("error", err)).Error("Failed to get seed material to derive SSH CA key") + return nil, status.Errorf(codes.Internal, "getting emergency SSH CA seed material: %s", err) + } + ca, err := crypto.GenerateEmergencySSHCAKey(sshCAKeySeed) + if err != nil { + log.With(slog.Any("error", err)).Error("Failed to derive ssh CA key from seed material") + return nil, status.Errorf(codes.Internal, "generating ssh emergency CA key: %s", err) + } + log.Info("Creating Kubernetes join token") kubeArgs, err := s.joinTokenGetter.GetJoinToken(constants.KubernetesJoinTokenTTL) if err != nil { @@ -167,6 +181,7 @@ func (s *Server) IssueJoinTicket(ctx context.Context, req *joinproto.IssueJoinTi KubeletCert: kubeletCert, ControlPlaneFiles: controlPlaneFiles, KubernetesComponents: components, + AuthorizedCaPublicKey: ssh.MarshalAuthorizedKey(ca.PublicKey()), }, nil } diff --git a/joinservice/internal/server/server_test.go b/joinservice/internal/server/server_test.go index ff11c7b57..2834a4640 100644 --- a/joinservice/internal/server/server_test.go +++ b/joinservice/internal/server/server_test.go @@ -8,11 +8,13 @@ package server import ( "context" + "crypto/ed25519" "errors" "testing" "time" "github.com/edgelesssys/constellation/v2/internal/attestation" + "github.com/edgelesssys/constellation/v2/internal/constants" "github.com/edgelesssys/constellation/v2/internal/logger" "github.com/edgelesssys/constellation/v2/internal/versions/components" "github.com/edgelesssys/constellation/v2/joinservice/joinproto" @@ -29,6 +31,7 @@ func TestMain(m *testing.M) { func TestIssueJoinTicket(t *testing.T) { someErr := errors.New("error") testKey := []byte{0x1, 0x2, 0x3} + testCaKey := make([]byte, ed25519.SeedSize) testCert := []byte{0x4, 0x5, 0x6} measurementSecret := []byte{0x7, 0x8, 0x9} uuid := "uuid" @@ -62,6 +65,7 @@ func TestIssueJoinTicket(t *testing.T) { kms: stubKeyGetter{dataKeys: map[string][]byte{ uuid: testKey, attestation.MeasurementSecretContext: measurementSecret, + constants.SSHCAKeySuffix: testCaKey, }}, ca: stubCA{cert: testCert, nodeName: "node"}, kubeClient: stubKubeClient{getComponentsVal: clusterComponents, getK8sComponentsRefFromNodeVersionCRDVal: "k8s-components-ref"}, @@ -71,6 +75,7 @@ func TestIssueJoinTicket(t *testing.T) { kms: stubKeyGetter{dataKeys: map[string][]byte{ uuid: testKey, attestation.MeasurementSecretContext: measurementSecret, + constants.SSHCAKeySuffix: testCaKey, }}, ca: stubCA{cert: testCert, nodeName: "node"}, kubeClient: stubKubeClient{getComponentsErr: someErr}, @@ -81,6 +86,7 @@ func TestIssueJoinTicket(t *testing.T) { kms: stubKeyGetter{dataKeys: map[string][]byte{ uuid: testKey, attestation.MeasurementSecretContext: measurementSecret, + constants.SSHCAKeySuffix: testCaKey, }}, ca: stubCA{cert: testCert, nodeName: "node", getNameErr: someErr}, kubeClient: stubKubeClient{getComponentsVal: clusterComponents, getK8sComponentsRefFromNodeVersionCRDVal: "k8s-components-ref"}, @@ -91,6 +97,7 @@ func TestIssueJoinTicket(t *testing.T) { kms: stubKeyGetter{dataKeys: map[string][]byte{ uuid: testKey, attestation.MeasurementSecretContext: measurementSecret, + constants.SSHCAKeySuffix: testCaKey, }}, ca: stubCA{cert: testCert, nodeName: "node"}, kubeClient: stubKubeClient{getComponentsVal: clusterComponents, addNodeToJoiningNodesErr: someErr, getK8sComponentsRefFromNodeVersionCRDVal: "k8s-components-ref"}, @@ -108,6 +115,7 @@ func TestIssueJoinTicket(t *testing.T) { kms: stubKeyGetter{dataKeys: map[string][]byte{ uuid: testKey, attestation.MeasurementSecretContext: measurementSecret, + constants.SSHCAKeySuffix: testCaKey, }}, ca: stubCA{cert: testCert, nodeName: "node"}, kubeClient: stubKubeClient{getComponentsVal: clusterComponents, getK8sComponentsRefFromNodeVersionCRDVal: "k8s-components-ref"}, @@ -118,6 +126,7 @@ func TestIssueJoinTicket(t *testing.T) { kms: stubKeyGetter{dataKeys: map[string][]byte{ uuid: testKey, attestation.MeasurementSecretContext: measurementSecret, + constants.SSHCAKeySuffix: testCaKey, }}, ca: stubCA{getCertErr: someErr, nodeName: "node"}, kubeClient: stubKubeClient{getComponentsVal: clusterComponents, getK8sComponentsRefFromNodeVersionCRDVal: "k8s-components-ref"}, @@ -132,6 +141,7 @@ func TestIssueJoinTicket(t *testing.T) { kms: stubKeyGetter{dataKeys: map[string][]byte{ uuid: testKey, attestation.MeasurementSecretContext: measurementSecret, + constants.SSHCAKeySuffix: testCaKey, }}, ca: stubCA{cert: testCert, nodeName: "node"}, kubeClient: stubKubeClient{getComponentsVal: clusterComponents, getK8sComponentsRefFromNodeVersionCRDVal: "k8s-components-ref"}, @@ -139,6 +149,28 @@ func TestIssueJoinTicket(t *testing.T) { "GetControlPlaneCertificateKey fails": { isControlPlane: true, kubeadm: stubTokenGetter{token: testJoinToken, certificateKeyErr: someErr}, + kms: stubKeyGetter{dataKeys: map[string][]byte{ + uuid: testKey, + attestation.MeasurementSecretContext: measurementSecret, + constants.SSHCAKeySuffix: testCaKey, + }}, + ca: stubCA{cert: testCert, nodeName: "node"}, + kubeClient: stubKubeClient{getComponentsVal: clusterComponents, getK8sComponentsRefFromNodeVersionCRDVal: "k8s-components-ref"}, + wantErr: true, + }, + "CA data key to short": { + kubeadm: stubTokenGetter{token: testJoinToken}, + kms: stubKeyGetter{dataKeys: map[string][]byte{ + uuid: testKey, + attestation.MeasurementSecretContext: measurementSecret, + constants.SSHCAKeySuffix: testKey, + }}, + ca: stubCA{cert: testCert, nodeName: "node"}, + kubeClient: stubKubeClient{getComponentsVal: clusterComponents, getK8sComponentsRefFromNodeVersionCRDVal: "k8s-components-ref"}, + wantErr: true, + }, + "CA data key doesn't exist": { + kubeadm: stubTokenGetter{token: testJoinToken}, kms: stubKeyGetter{dataKeys: map[string][]byte{ uuid: testKey, attestation.MeasurementSecretContext: measurementSecret, diff --git a/joinservice/joinproto/join.pb.go b/joinservice/joinproto/join.pb.go index c197bd6ca..8508a16b1 100644 --- a/joinservice/joinproto/join.pb.go +++ b/joinservice/joinproto/join.pb.go @@ -98,6 +98,7 @@ type IssueJoinTicketResponse struct { ControlPlaneFiles []*ControlPlaneCertOrKey `protobuf:"bytes,8,rep,name=control_plane_files,json=controlPlaneFiles,proto3" json:"control_plane_files,omitempty"` KubernetesVersion string `protobuf:"bytes,9,opt,name=kubernetes_version,json=kubernetesVersion,proto3" json:"kubernetes_version,omitempty"` KubernetesComponents []*components.Component `protobuf:"bytes,10,rep,name=kubernetes_components,json=kubernetesComponents,proto3" json:"kubernetes_components,omitempty"` + AuthorizedCaPublicKey []byte `protobuf:"bytes,11,opt,name=authorized_ca_public_key,json=authorizedCaPublicKey,proto3" json:"authorized_ca_public_key,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -202,6 +203,13 @@ func (x *IssueJoinTicketResponse) GetKubernetesComponents() []*components.Compon return nil } +func (x *IssueJoinTicketResponse) GetAuthorizedCaPublicKey() []byte { + if x != nil { + return x.AuthorizedCaPublicKey + } + return nil +} + type ControlPlaneCertOrKey struct { state protoimpl.MessageState `protogen:"open.v1"` Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` @@ -367,7 +375,7 @@ var file_joinservice_joinproto_join_proto_rawDesc = string([]byte{ 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x28, 0x0a, 0x10, 0x69, 0x73, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x5f, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x69, 0x73, 0x43, 0x6f, - 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x50, 0x6c, 0x61, 0x6e, 0x65, 0x22, 0x8e, 0x04, 0x0a, 0x17, 0x49, + 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x50, 0x6c, 0x61, 0x6e, 0x65, 0x22, 0xc7, 0x04, 0x0a, 0x17, 0x49, 0x73, 0x73, 0x75, 0x65, 0x4a, 0x6f, 0x69, 0x6e, 0x54, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x24, 0x0a, 0x0e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x5f, 0x64, 0x69, 0x73, 0x6b, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0c, @@ -400,38 +408,41 @@ var file_joinservice_joinproto_join_proto_rawDesc = string([]byte{ 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x52, 0x14, 0x6b, 0x75, 0x62, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x65, - 0x73, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x43, 0x0a, 0x19, 0x63, - 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x5f, 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x5f, 0x63, 0x65, 0x72, - 0x74, 0x5f, 0x6f, 0x72, 0x5f, 0x6b, 0x65, 0x79, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, - 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, - 0x22, 0x37, 0x0a, 0x18, 0x49, 0x73, 0x73, 0x75, 0x65, 0x52, 0x65, 0x6a, 0x6f, 0x69, 0x6e, 0x54, - 0x69, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, - 0x64, 0x69, 0x73, 0x6b, 0x5f, 0x75, 0x75, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x08, 0x64, 0x69, 0x73, 0x6b, 0x55, 0x75, 0x69, 0x64, 0x22, 0x70, 0x0a, 0x19, 0x49, 0x73, 0x73, + 0x73, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x37, 0x0a, 0x18, 0x61, + 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x64, 0x5f, 0x63, 0x61, 0x5f, 0x70, 0x75, 0x62, + 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x15, 0x61, + 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x64, 0x43, 0x61, 0x50, 0x75, 0x62, 0x6c, 0x69, + 0x63, 0x4b, 0x65, 0x79, 0x22, 0x43, 0x0a, 0x19, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x5f, + 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x5f, 0x63, 0x65, 0x72, 0x74, 0x5f, 0x6f, 0x72, 0x5f, 0x6b, 0x65, + 0x79, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x37, 0x0a, 0x18, 0x49, 0x73, 0x73, 0x75, 0x65, 0x52, 0x65, 0x6a, 0x6f, 0x69, 0x6e, 0x54, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x24, 0x0a, 0x0e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x5f, - 0x64, 0x69, 0x73, 0x6b, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0c, - 0x73, 0x74, 0x61, 0x74, 0x65, 0x44, 0x69, 0x73, 0x6b, 0x4b, 0x65, 0x79, 0x12, 0x2d, 0x0a, 0x12, - 0x6d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x73, 0x65, 0x63, 0x72, - 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x11, 0x6d, 0x65, 0x61, 0x73, 0x75, 0x72, - 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x32, 0xab, 0x01, 0x0a, 0x03, - 0x41, 0x50, 0x49, 0x12, 0x4e, 0x0a, 0x0f, 0x49, 0x73, 0x73, 0x75, 0x65, 0x4a, 0x6f, 0x69, 0x6e, - 0x54, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x1c, 0x2e, 0x6a, 0x6f, 0x69, 0x6e, 0x2e, 0x49, 0x73, - 0x73, 0x75, 0x65, 0x4a, 0x6f, 0x69, 0x6e, 0x54, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, 0x6a, 0x6f, 0x69, 0x6e, 0x2e, 0x49, 0x73, 0x73, 0x75, - 0x65, 0x4a, 0x6f, 0x69, 0x6e, 0x54, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x54, 0x0a, 0x11, 0x49, 0x73, 0x73, 0x75, 0x65, 0x52, 0x65, 0x6a, 0x6f, - 0x69, 0x6e, 0x54, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x12, 0x1e, 0x2e, 0x6a, 0x6f, 0x69, 0x6e, 0x2e, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x64, 0x69, 0x73, 0x6b, 0x5f, 0x75, 0x75, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x64, 0x69, 0x73, 0x6b, 0x55, 0x75, + 0x69, 0x64, 0x22, 0x70, 0x0a, 0x19, 0x49, 0x73, 0x73, 0x75, 0x65, 0x52, 0x65, 0x6a, 0x6f, 0x69, + 0x6e, 0x54, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x24, 0x0a, 0x0e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x5f, 0x64, 0x69, 0x73, 0x6b, 0x5f, 0x6b, 0x65, + 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0c, 0x73, 0x74, 0x61, 0x74, 0x65, 0x44, 0x69, + 0x73, 0x6b, 0x4b, 0x65, 0x79, 0x12, 0x2d, 0x0a, 0x12, 0x6d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, + 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0c, 0x52, 0x11, 0x6d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x65, + 0x63, 0x72, 0x65, 0x74, 0x32, 0xab, 0x01, 0x0a, 0x03, 0x41, 0x50, 0x49, 0x12, 0x4e, 0x0a, 0x0f, + 0x49, 0x73, 0x73, 0x75, 0x65, 0x4a, 0x6f, 0x69, 0x6e, 0x54, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x12, + 0x1c, 0x2e, 0x6a, 0x6f, 0x69, 0x6e, 0x2e, 0x49, 0x73, 0x73, 0x75, 0x65, 0x4a, 0x6f, 0x69, 0x6e, + 0x54, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, + 0x6a, 0x6f, 0x69, 0x6e, 0x2e, 0x49, 0x73, 0x73, 0x75, 0x65, 0x4a, 0x6f, 0x69, 0x6e, 0x54, 0x69, + 0x63, 0x6b, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x54, 0x0a, 0x11, 0x49, 0x73, 0x73, 0x75, 0x65, 0x52, 0x65, 0x6a, 0x6f, 0x69, 0x6e, 0x54, 0x69, 0x63, 0x6b, 0x65, - 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1f, 0x2e, 0x6a, 0x6f, 0x69, 0x6e, 0x2e, - 0x49, 0x73, 0x73, 0x75, 0x65, 0x52, 0x65, 0x6a, 0x6f, 0x69, 0x6e, 0x54, 0x69, 0x63, 0x6b, 0x65, - 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x3f, 0x5a, 0x3d, 0x67, 0x69, 0x74, - 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x65, 0x64, 0x67, 0x65, 0x6c, 0x65, 0x73, 0x73, - 0x73, 0x79, 0x73, 0x2f, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x65, 0x6c, 0x6c, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x2f, 0x76, 0x32, 0x2f, 0x6a, 0x6f, 0x69, 0x6e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x2f, 0x6a, 0x6f, 0x69, 0x6e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x33, + 0x74, 0x12, 0x1e, 0x2e, 0x6a, 0x6f, 0x69, 0x6e, 0x2e, 0x49, 0x73, 0x73, 0x75, 0x65, 0x52, 0x65, + 0x6a, 0x6f, 0x69, 0x6e, 0x54, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x1f, 0x2e, 0x6a, 0x6f, 0x69, 0x6e, 0x2e, 0x49, 0x73, 0x73, 0x75, 0x65, 0x52, 0x65, + 0x6a, 0x6f, 0x69, 0x6e, 0x54, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x42, 0x3f, 0x5a, 0x3d, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, + 0x2f, 0x65, 0x64, 0x67, 0x65, 0x6c, 0x65, 0x73, 0x73, 0x73, 0x79, 0x73, 0x2f, 0x63, 0x6f, 0x6e, + 0x73, 0x74, 0x65, 0x6c, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x76, 0x32, 0x2f, 0x6a, 0x6f, + 0x69, 0x6e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x6a, 0x6f, 0x69, 0x6e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, }) var ( diff --git a/joinservice/joinproto/join.proto b/joinservice/joinproto/join.proto index 2a910a039..89c40b8a0 100644 --- a/joinservice/joinproto/join.proto +++ b/joinservice/joinproto/join.proto @@ -45,6 +45,8 @@ message IssueJoinTicketResponse { string kubernetes_version = 9; // kubernetes_components is a list of components to install on the node. repeated components.Component kubernetes_components = 10; + // authorized_ca_public_key is an ssh ca key that can be used to connect to a node in case of an emergency. + bytes authorized_ca_public_key = 11; } message control_plane_cert_or_key { From 0e4f3a07163460199e9f3581812171d80da05f4f Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 30 Jan 2025 15:54:07 +0100 Subject: [PATCH 093/311] deps: update public.ecr.aws/eks/aws-load-balancer-controller Docker tag to v2.11.0 (#3611) * deps: update aws-load-balancer-controller Helm chart * deps: tidy all modules --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: edgelessci --- internal/constellation/helm/BUILD.bazel | 1 + .../aws-load-balancer-controller/Chart.yaml | 4 +- .../aws-load-balancer-controller/README.md | 201 ++++++------ .../crds/crds.yaml | 296 ++++++++++++------ .../templates/_helpers.tpl | 4 +- .../templates/deployment.yaml | 58 +++- .../templates/hpa.yaml | 34 ++ .../templates/rbac.yaml | 3 + .../templates/servicemonitor.yaml | 30 +- .../templates/webhook.yaml | 14 +- .../aws-load-balancer-controller/values.yaml | 101 +++++- .../helm/update-aws-load-balancer-chart.sh | 2 +- 12 files changed, 528 insertions(+), 220 deletions(-) create mode 100644 internal/constellation/helm/charts/aws-load-balancer-controller/templates/hpa.yaml diff --git a/internal/constellation/helm/BUILD.bazel b/internal/constellation/helm/BUILD.bazel index 928681b90..e82a7dfb8 100644 --- a/internal/constellation/helm/BUILD.bazel +++ b/internal/constellation/helm/BUILD.bazel @@ -473,6 +473,7 @@ go_library( "charts/coredns/templates/deployment.yaml", "charts/coredns/templates/service.yaml", "charts/coredns/templates/serviceaccount.yaml", + "charts/aws-load-balancer-controller/templates/hpa.yaml", ], importpath = "github.com/edgelesssys/constellation/v2/internal/constellation/helm", visibility = ["//:__subpackages__"], diff --git a/internal/constellation/helm/charts/aws-load-balancer-controller/Chart.yaml b/internal/constellation/helm/charts/aws-load-balancer-controller/Chart.yaml index 363fff854..1f1b4e9ba 100644 --- a/internal/constellation/helm/charts/aws-load-balancer-controller/Chart.yaml +++ b/internal/constellation/helm/charts/aws-load-balancer-controller/Chart.yaml @@ -1,8 +1,8 @@ apiVersion: v2 name: aws-load-balancer-controller description: AWS Load Balancer Controller Helm chart for Kubernetes -version: 1.5.4 -appVersion: v2.5.3 +version: 1.11.0 +appVersion: v2.11.0 home: https://github.com/aws/eks-charts icon: https://raw.githubusercontent.com/aws/eks-charts/master/docs/logo/aws.png sources: diff --git a/internal/constellation/helm/charts/aws-load-balancer-controller/README.md b/internal/constellation/helm/charts/aws-load-balancer-controller/README.md index ee4be9aad..180e50c08 100644 --- a/internal/constellation/helm/charts/aws-load-balancer-controller/README.md +++ b/internal/constellation/helm/charts/aws-load-balancer-controller/README.md @@ -22,7 +22,11 @@ AWS Load Balancer controller manages the following AWS resources As a security best practice, we recommend isolating the controller deployment pods to specific node groups which run critical components. The helm chart provides parameters ```nodeSelector```, ```tolerations``` and ```affinity``` to configure node isolation. For more information, please refer to the guidance [here](https://aws.github.io/aws-eks-best-practices/security/docs/multitenancy/#isolating-tenant-workloads-to-specific-nodes). ## Prerequisites -- Kubernetes >= 1.19 +- Supported Kubernetes Versions + - Chart version v1.5.0+ requires Kubernetes 1.22+ + - Chart version v1.4.0+ requires Kubernetes 1.19+ + - Chart version v1.2.0 - v1.3.3 supports Kubernetes 1.16-1.21 + - Chart version v1.1.6 and before supports Kubernetes 1.15 - IAM permissions - Helm v3 - Optional dependencies @@ -74,7 +78,7 @@ If migrating from ALB ingress controller, grant [additional IAM permissions](htt - Additional IAM permissions required, ensure you have granted the [required IAM permissions](https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/main/docs/install/iam_policy.json). - CRDs need to be updated as follows ```shell script -kubectl apply -k "github.com/aws/eks-charts/stable/aws-load-balancer-controller//crds?ref=master" +kubectl apply -k "github.com/aws/eks-charts/stable/aws-load-balancer-controller/crds?ref=master" ``` - you can run helm upgrade without uninstalling the old chart completely @@ -92,8 +96,11 @@ If you are setting `serviceMonitor.enabled: true` you need to have installed the ## Installing the Chart **Note**: You need to uninstall aws-alb-ingress-controller. Please refer to the [upgrade](#Upgrade) section below before you proceed. + **Note**: Starting chart version 1.4.1, you need to explicitly set `clusterSecretsPermissions.allowAllSecrets` to true to grant the controller permission to access all secrets for OIDC feature. We recommend configuring access to individual secrets resource separately [[link](https://kubernetes-sigs.github.io/aws-load-balancer-controller/v2.4/examples/secrets_access/)]. +**Note**: To ensure compatibility, we recommend installing the AWS Load Balancer controller image version with its compatible Helm chart version. Use the ```helm search repo eks/aws-load-balancer-controller --versions``` command to find the compatible versions. + Add the EKS repository to Helm: ```shell script helm repo add eks https://aws.github.io/eks-charts @@ -102,7 +109,7 @@ helm repo add eks https://aws.github.io/eks-charts Install the TargetGroupBinding CRDs: ```shell script -kubectl apply -k "github.com/aws/eks-charts/stable/aws-load-balancer-controller//crds?ref=master" +kubectl apply -k "github.com/aws/eks-charts/stable/aws-load-balancer-controller/crds?ref=master" ``` Install the AWS Load Balancer controller, if using iamserviceaccount @@ -171,88 +178,106 @@ Chart release v1.2.0 and later enables high availability configuration by defaul The following tables lists the configurable parameters of the chart and their default values. The default values set by the application itself can be confirmed [here](https://kubernetes-sigs.github.io/aws-load-balancer-controller/v2.4/deploy/configurations/#controller-configuration-options). -| Parameter | Description | Default | -|------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------------| -| `image.repository` | image repository | `public.ecr.aws/eks/aws-load-balancer-controller` | -| `image.tag` | image tag | `` | -| `image.pullPolicy` | image pull policy | `IfNotPresent` | -| `clusterName` | Kubernetes cluster name | None | -| `cluster.dnsDomain` | DNS domain of the Kubernetes cluster, included in TLS certificate requests | `cluster.local` | -| `securityContext` | Set to security context for pod | `{}` | -| `resources` | Controller pod resource requests & limits | `{}` | -| `priorityClassName` | Controller pod priority class | system-cluster-critical | -| `nodeSelector` | Node labels for controller pod assignment | `{}` | -| `tolerations` | Controller pod toleration for taints | `{}` | -| `affinity` | Affinity for pod assignment | `{}` | -| `configureDefaultAffinity` | Configure soft pod anti-affinity if custom affinity is not configured | `true` | -| `topologySpreadConstraints` | Topology Spread Constraints for pod assignment | `{}` | -| `deploymentAnnotations` | Annotations to add to deployment | `{}` | -| `podAnnotations` | Annotations to add to each pod | `{}` | -| `podLabels` | Labels to add to each pod | `{}` | -| `additionalLabels` | Labels to add to all components | `{}` | -| `rbac.create` | if `true`, create and use RBAC resources | `true` | -| `serviceAccount.annotations` | optional annotations to add to service account | None | -| `serviceAccount.automountServiceAccountToken` | Automount API credentials for a Service Account | `true` | -| `serviceAccount.imagePullSecrets` | List of image pull secrets to add to the Service Account | `[]` | -| `serviceAccount.create` | If `true`, create a new service account | `true` | -| `serviceAccount.name` | Service account to be used | None | -| `terminationGracePeriodSeconds` | Time period for controller pod to do a graceful shutdown | 10 | -| `ingressClass` | The ingress class to satisfy | alb | -| `createIngressClassResource` | Create ingressClass resource | true | -| `ingressClassParams.name` | IngressClassParams resource's name, default to the aws load balancer controller's name | None | -| `ingressClassParams.create` | If `true`, create a new ingressClassParams | true | -| `ingressClassParams.spec` | IngressClassParams defined ingress specifications | {} | -| `region` | The AWS region for the kubernetes cluster | None | -| `vpcId` | The VPC ID for the Kubernetes cluster | None | -| `awsApiEndpoints` | Custom AWS API Endpoints | None | -| `awsApiThrottle` | Custom AWS API throttle settings | None | -| `awsMaxRetries` | Maximum retries for AWS APIs | None | -| `defaultTargetType` | Default target type. Used as the default value of the `alb.ingress.kubernetes.io/target-type` and `service.beta.kubernetes.io/aws-load-balancer-nlb-target-type" annotations.`Possible values are `ip` and `instance`. | `instance` | -| `enablePodReadinessGateInject` | If enabled, targetHealth readiness gate will get injected to the pod spec for the matching endpoint pods | None | -| `enableShield` | Enable Shield addon for ALB | None | -| `enableWaf` | Enable WAF addon for ALB | None | -| `enableWafv2` | Enable WAF V2 addon for ALB | None | -| `ingressMaxConcurrentReconciles` | Maximum number of concurrently running reconcile loops for ingress | None | -| `logLevel` | Set the controller log level - info, debug | None | -| `metricsBindAddr` | The address the metric endpoint binds to | "" | -| `webhookBindPort` | The TCP port the Webhook server binds to | None | -| `webhookTLS.caCert` | TLS CA certificate for webhook (auto-generated if not provided) | "" | -| `webhookTLS.cert` | TLS certificate for webhook (auto-generated if not provided) | "" | -| `webhookTLS.key` | TLS private key for webhook (auto-generated if not provided) | "" | -| `webhookNamespaceSelectors` | Namespace selectors for the wekbook | None | -| `keepTLSSecret` | Reuse existing TLS Secret during chart upgrade | `true` | -| `serviceAnnotations` | Annotations to be added to the provisioned webhook service resource | `{}` | -| `serviceMaxConcurrentReconciles` | Maximum number of concurrently running reconcile loops for service | None | -| `targetgroupbindingMaxConcurrentReconciles` | Maximum number of concurrently running reconcile loops for targetGroupBinding | None | -| `targetgroupbindingMaxExponentialBackoffDelay` | Maximum duration of exponential backoff for targetGroupBinding reconcile failures | None | -| `syncPeriod` | Period at which the controller forces the repopulation of its local object stores | None | -| `watchNamespace` | Namespace the controller watches for updates to Kubernetes objects, If empty, all namespaces are watched | None | -| `disableIngressClassAnnotation` | Disables the usage of kubernetes.io/ingress.class annotation | None | -| `disableIngressGroupNameAnnotation` | Disables the usage of alb.ingress.kubernetes.io/group.name annotation | None | -| `defaultSSLPolicy` | Specifies the default SSL policy to use for HTTPS or TLS listeners | None | -| `externalManagedTags` | Specifies the list of tag keys on AWS resources that are managed externally | `[]` | -| `livenessProbe` | Liveness probe settings for the controller | (see `values.yaml`) | -| `env` | Environment variables to set for aws-load-balancer-controller pod | None | -| `hostNetwork` | If `true`, use hostNetwork | `false` | -| `dnsPolicy` | Set dnsPolicy if required | `ClusterFirst` | -| `extraVolumeMounts` | Extra volume mounts for the pod | `[]` | -| `extraVolumes` | Extra volumes for the pod | `[]` | -| `defaultTags` | Default tags to apply to all AWS resources managed by this controller | `{}` | -| `replicaCount` | Number of controller pods to run, only one will be active due to leader election | `2` | -| `podDisruptionBudget` | Limit the disruption for controller pods. Require at least 2 controller replicas and 3 worker nodes | `{}` | -| `updateStrategy` | Defines the update strategy for the deployment | `{}` | -| `enableCertManager` | If enabled, cert-manager issues the webhook certificates instead of the helm template, requires cert-manager and it's CRDs to be installed | `false` | -| `enableEndpointSlices` | If enabled, controller uses k8s EndpointSlices instead of Endpoints for IP targets | `false` | -| `enableBackendSecurityGroup` | If enabled, controller uses shared security group for backend traffic | `true` | -| `backendSecurityGroup` | Backend security group to use instead of auto created one if the feature is enabled | `` | -| `disableRestrictedSecurityGroupRules` | If disabled, controller will not specify port range restriction in the backend security group rules | `false` | -| `objectSelector.matchExpressions` | Webhook configuration to select specific pods by specifying the expression to be matched | None | -| `objectSelector.matchLabels` | Webhook configuration to select specific pods by specifying the key value label pair to be matched | None | -| `serviceMonitor.enabled` | Specifies whether a service monitor should be created, requires the ServiceMonitor CRD to be installed | `false` | -| `serviceMonitor.additionalLabels` | Labels to add to the service account | `{}` | -| `serviceMonitor.interval` | Prometheus scrape interval | `1m` | -| `serviceMonitor.namespace` | Namespace in which Prometheus is running | None | -| `clusterSecretsPermissions.allowAllSecrets` | If `true`, controller has access to all secrets in the cluster. | `false` | -| `controllerConfig.featureGates` | set of `key: value` pairs that describe AWS load balance controller features | `{}` | -| `ingressClassConfig.default` | If `true`, the ingressclass will be the default class of the cluster. | `false` | -| `enableServiceMutatorWebhook` | If `false`, disable the Service Mutator webhook which makes all new services of type LoadBalancer reconciled by the lb controller | `true` | + +| Parameter | Description | Default | +| ---------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------- | +| `image.repository` | image repository | `public.ecr.aws/eks/aws-load-balancer-controller` | +| `image.tag` | image tag | `` | +| `image.pullPolicy` | image pull policy | `IfNotPresent` | +| `clusterName` | Kubernetes cluster name | None | +| `cluster.dnsDomain` | DNS domain of the Kubernetes cluster, included in TLS certificate requests | `cluster.local` | +| `securityContext` | Set to security context for pod | `{}` | +| `resources` | Controller pod resource requests & limits | `{}` | +| `priorityClassName` | Controller pod priority class | system-cluster-critical | +| `nodeSelector` | Node labels for controller pod assignment | `{}` | +| `tolerations` | Controller pod toleration for taints | `{}` | +| `affinity` | Affinity for pod assignment | `{}` | +| `configureDefaultAffinity` | Configure soft pod anti-affinity if custom affinity is not configured | `true` | +| `topologySpreadConstraints` | Topology Spread Constraints for pod assignment | `{}` | +| `deploymentAnnotations` | Annotations to add to deployment | `{}` | +| `podAnnotations` | Annotations to add to each pod | `{}` | +| `podLabels` | Labels to add to each pod | `{}` | +| `additionalLabels` | Labels to add to all components | `{}` | +| `rbac.create` | if `true`, create and use RBAC resources | `true` | +| `serviceAccount.annotations` | optional annotations to add to service account | None | +| `serviceAccount.automountServiceAccountToken` | Automount API credentials for a Service Account | `true` | +| `serviceAccount.imagePullSecrets` | List of image pull secrets to add to the Service Account | `[]` | +| `serviceAccount.create` | If `true`, create a new service account | `true` | +| `serviceAccount.name` | Service account to be used | None | +| `terminationGracePeriodSeconds` | Time period for controller pod to do a graceful shutdown | 10 | +| `ingressClass` | The ingress class to satisfy | alb | +| `createIngressClassResource` | Create ingressClass resource | true | +| `ingressClassParams.name` | IngressClassParams resource's name, default to the aws load balancer controller's name | None | +| `ingressClassParams.create` | If `true`, create a new ingressClassParams | true | +| `ingressClassParams.spec` | IngressClassParams defined ingress specifications | {} | +| `region` | The AWS region for the kubernetes cluster | None | +| `vpcId` | The VPC ID for the Kubernetes cluster | None | +| `awsApiEndpoints` | Custom AWS API Endpoints | None | +| `awsApiThrottle` | Custom AWS API throttle settings | None | +| `awsMaxRetries` | Maximum retries for AWS APIs | None | +| `defaultTargetType` | Default target type. Used as the default value of the `alb.ingress.kubernetes.io/target-type` and `service.beta.kubernetes.io/aws-load-balancer-nlb-target-type" annotations.`Possible values are `ip` and `instance`. | `instance` | +| `enablePodReadinessGateInject` | If enabled, targetHealth readiness gate will get injected to the pod spec for the matching endpoint pods | None | +| `enableShield` | Enable Shield addon for ALB | None | +| `enableWaf` | Enable WAF addon for ALB | None | +| `enableWafv2` | Enable WAF V2 addon for ALB | None | +| `ingressMaxConcurrentReconciles` | Maximum number of concurrently running reconcile loops for ingress | None | +| `logLevel` | Set the controller log level - info, debug | None | +| `metricsBindAddr` | The address the metric endpoint binds to | "" | +| `webhookConfig.disableIngressValidation` | Disables the validation of resources of kind Ingress | None | +| `webhookBindPort` | The TCP port the Webhook server binds to | None | +| `webhookTLS.caCert` | TLS CA certificate for webhook (auto-generated if not provided) | "" | +| `webhookTLS.cert` | TLS certificate for webhook (auto-generated if not provided) | "" | +| `webhookTLS.key` | TLS private key for webhook (auto-generated if not provided) | "" | +| `webhookNamespaceSelectors` | Namespace selectors for the wekbook | None | +| `keepTLSSecret` | Reuse existing TLS Secret during chart upgrade | `true` | +| `serviceAnnotations` | Annotations to be added to the provisioned webhook service resource | `{}` | +| `serviceMaxConcurrentReconciles` | Maximum number of concurrently running reconcile loops for service | None | +| `targetgroupbindingMaxConcurrentReconciles` | Maximum number of concurrently running reconcile loops for targetGroupBinding | None | +| `targetgroupbindingMaxExponentialBackoffDelay` | Maximum duration of exponential backoff for targetGroupBinding reconcile failures | None | +| `syncPeriod` | Period at which the controller forces the repopulation of its local object stores | None | +| `watchNamespace` | Namespace the controller watches for updates to Kubernetes objects, If empty, all namespaces are watched | None | +| `disableIngressClassAnnotation` | Disables the usage of kubernetes.io/ingress.class annotation | None | +| `disableIngressGroupNameAnnotation` | Disables the usage of alb.ingress.kubernetes.io/group.name annotation | None | +| `tolerateNonExistentBackendService` | whether to allow rules that reference a backend service that does not exist. (When enabled, it will return 503 error if backend service not exist) | `true` | +| `tolerateNonExistentBackendAction` | whether to allow rules that reference a backend action that does not exist. (When enabled, it will return 503 error if backend action not exist) | `true` | +| `defaultSSLPolicy` | Specifies the default SSL policy to use for HTTPS or TLS listeners | None | +| `externalManagedTags` | Specifies the list of tag keys on AWS resources that are managed externally | `[]` | +| `livenessProbe` | Liveness probe settings for the controller | (see `values.yaml`) | +| `env` | Environment variables to set for aws-load-balancer-controller pod | None | +| `envFrom` | Environment variables to set for aws-load-balancer-controller pod from configMap or Secret | None | +| `envSecretName` | AWS credentials as environment variables from Secret (Secret keys `key_id` and `access_key`). | None | +| `hostNetwork` | If `true`, use hostNetwork | `false` | +| `dnsPolicy` | Set dnsPolicy if required | `ClusterFirst` | +| `extraVolumeMounts` | Extra volume mounts for the pod | `[]` | +| `extraVolumes` | Extra volumes for the pod | `[]` | +| `defaultTags` | Default tags to apply to all AWS resources managed by this controller | `{}` | +| `replicaCount` | Number of controller pods to run, only one will be active due to leader election | `2` | +| `revisionHistoryLimit` | Number of revisions to keep | `10` | +| `podDisruptionBudget` | Limit the disruption for controller pods. Require at least 2 controller replicas and 3 worker nodes | `{}` | +| `updateStrategy` | Defines the update strategy for the deployment | `{}` | +| `enableCertManager` | If enabled, cert-manager issues the webhook certificates instead of the helm template, requires cert-manager and it's CRDs to be installed | `false` | +| `enableEndpointSlices` | If enabled, controller uses k8s EndpointSlices instead of Endpoints for IP targets | `false` | +| `enableBackendSecurityGroup` | If enabled, controller uses shared security group for backend traffic | `true` | +| `backendSecurityGroup` | Backend security group to use instead of auto created one if the feature is enabled | `` | +| `disableRestrictedSecurityGroupRules` | If disabled, controller will not specify port range restriction in the backend security group rules | `false` | +| `objectSelector.matchExpressions` | Webhook configuration to select specific pods by specifying the expression to be matched | None | +| `objectSelector.matchLabels` | Webhook configuration to select specific pods by specifying the key value label pair to be matched | None | +| `serviceMonitor.enabled` | Specifies whether a service monitor should be created, requires the ServiceMonitor CRD to be installed | `false` | +| `serviceMonitor.namespace` | Namespace in which to create the service monitor | None | +| `serviceMonitor.additionalLabels` | Labels to add to the service monitor | `{}` | +| `serviceMonitor.interval` | Prometheus scrape interval | `1m` | +| `serviceMonitor.scrapeTimeout` | Prometheus scrape timeout | `1m` | +| `serviceMonitor.relabelings` | Relabelings to apply to samples before ingestion | `1m` | +| `serviceMonitor.metricRelabelings` | Metric relabelings to apply to samples before ingestion | `1m` | +| `clusterSecretsPermissions.allowAllSecrets` | If `true`, controller has access to all secrets in the cluster. | `false` | +| `controllerConfig.featureGates` | set of `key: value` pairs that describe AWS load balance controller features | `{}` | +| `ingressClassConfig.default` | If `true`, the ingressclass will be the default class of the cluster. | `false` | +| `enableServiceMutatorWebhook` | If `false`, disable the Service Mutator webhook which makes all new services of type LoadBalancer reconciled by the lb controller | `true` | +| `serviceMutatorWebhookConfig.failurePolicy` | Failure policy for the Service Mutator webhook | `Fail` | +| `serviceMutatorWebhookConfig.objectSelector` | Object selector(s) to limit which objects will be mutated by the Service Mutator webhook | `[]` | +| `serviceMutatorWebhookConfig.operations` | List of operations that will trigger the the Service Mutator webhook | `[ CREATE ]` | +| `autoscaling` | If `autoscaling.enabled=true`, enable the HPA on the controller mainly to survive load induced failure by the calls to the `aws-load-balancer-webhook-service`. Please keep in mind that the controller pods have `priorityClassName: system-cluster-critical`, enabling HPA may lead to the eviction of other low-priority pods in the node | `false` | +| `serviceTargetENISGTags` | set of `key=value` pairs of AWS tags in addition to cluster name for finding the target ENI security group to which to add inbound rules from NLBs | None | +| `loadBalancerClass` | Sets the AWS load balancer type to be used when the Kubernetes service requests an external load balancer | `service.k8s.aws/nlb` | +| `creator` | if set to a `value!=helm`, it will disable the addition of default helm labels | `helm` | +| `runtimeClassName` | Runtime class name for the controller pods , such as `gvisor` or `kata`. An unspecified `nil` or empty `""` RuntimeClassName is equivalent to the backwards-compatible default behavior as if the RuntimeClass feature is disabled. | "" | diff --git a/internal/constellation/helm/charts/aws-load-balancer-controller/crds/crds.yaml b/internal/constellation/helm/charts/aws-load-balancer-controller/crds/crds.yaml index 78c226660..b72e68789 100644 --- a/internal/constellation/helm/charts/aws-load-balancer-controller/crds/crds.yaml +++ b/internal/constellation/helm/charts/aws-load-balancer-controller/crds/crds.yaml @@ -2,8 +2,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.11.1 - creationTimestamp: null + controller-gen.kubebuilder.io/version: v0.14.0 name: ingressclassparams.elbv2.k8s.aws spec: group: elbv2.k8s.aws @@ -36,20 +35,31 @@ spec: description: IngressClassParams is the Schema for the IngressClassParams API properties: apiVersion: - description: 'APIVersion defines the versioned schema of this representation - of an object. Servers should convert recognized schemas to the latest - internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + description: |- + APIVersion defines the versioned schema of this representation of an object. + Servers should convert recognized schemas to the latest internal value, and + may reject unrecognized values. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources type: string kind: - description: 'Kind is a string value representing the REST resource this - object represents. Servers may infer this from the endpoint the client - submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + description: |- + Kind is a string value representing the REST resource this object represents. + Servers may infer this from the endpoint the client submits requests to. + Cannot be updated. + In CamelCase. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds type: string metadata: type: object spec: description: IngressClassParamsSpec defines the desired state of IngressClassParams properties: + certificateArn: + description: CertificateArn specifies the ARN of the certificates + for all Ingresses that belong to IngressClass with this IngressClassParams. + items: + type: string + type: array group: description: Group defines the IngressGroup for all Ingresses that belong to IngressClass with this IngressClassParams. @@ -72,7 +82,38 @@ spec: enum: - ipv4 - dualstack + - dualstack-without-public-ipv4 type: string + listeners: + description: Listeners define a list of listeners with their protocol, + port and attributes. + items: + properties: + listenerAttributes: + description: The attributes of the listener + items: + description: Attributes defines custom attributes on resources. + properties: + key: + description: The key of the attribute. + type: string + value: + description: The value of the attribute. + type: string + required: + - key + - value + type: object + type: array + port: + description: The port of the listener + format: int32 + type: integer + protocol: + description: The protocol of the listener + type: string + type: object + type: array loadBalancerAttributes: description: LoadBalancerAttributes define the custom attributes to LoadBalancers for all Ingress that that belong to IngressClass with @@ -91,50 +132,63 @@ spec: - value type: object type: array + minimumLoadBalancerCapacity: + description: MinimumLoadBalancerCapacity define the capacity reservation + for LoadBalancers for all Ingress that belong to IngressClass with + this IngressClassParams. + properties: + capacityUnits: + description: The Capacity Units Value. + format: int32 + type: integer + required: + - capacityUnits + type: object namespaceSelector: - description: NamespaceSelector restrict the namespaces of Ingresses - that are allowed to specify the IngressClass with this IngressClassParams. + description: |- + NamespaceSelector restrict the namespaces of Ingresses that are allowed to specify the IngressClass with this IngressClassParams. * if absent or present but empty, it selects all namespaces. properties: matchExpressions: description: matchExpressions is a list of label selector requirements. The requirements are ANDed. items: - description: A label selector requirement is a selector that - contains values, a key, and an operator that relates the key - and values. + description: |- + A label selector requirement is a selector that contains values, a key, and an operator that + relates the key and values. properties: key: description: key is the label key that the selector applies to. type: string operator: - description: operator represents a key's relationship to - a set of values. Valid operators are In, NotIn, Exists - and DoesNotExist. + description: |- + operator represents a key's relationship to a set of values. + Valid operators are In, NotIn, Exists and DoesNotExist. type: string values: - description: values is an array of string values. If the - operator is In or NotIn, the values array must be non-empty. - If the operator is Exists or DoesNotExist, the values - array must be empty. This array is replaced during a strategic + description: |- + values is an array of string values. If the operator is In or NotIn, + the values array must be non-empty. If the operator is Exists or DoesNotExist, + the values array must be empty. This array is replaced during a strategic merge patch. items: type: string type: array + x-kubernetes-list-type: atomic required: - key - operator type: object type: array + x-kubernetes-list-type: atomic matchLabels: additionalProperties: type: string - description: matchLabels is a map of {key,value} pairs. A single - {key,value} in the matchLabels map is equivalent to an element - of matchExpressions, whose key field is "key", the operator - is "In", and the values array contains only "value". The requirements - are ANDed. + description: |- + matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels + map is equivalent to an element of matchExpressions, whose key field is "key", the + operator is "In", and the values array contains only "value". The requirements are ANDed. type: object type: object x-kubernetes-map-type: atomic @@ -167,10 +221,11 @@ spec: items: type: string type: array - description: Tags specifies subnets in the load balancer's VPC - where each tag specified in the map key contains one of the - values in the corresponding value list. Exactly one of this - or `ids` must be specified. + description: |- + Tags specifies subnets in the load balancer's VPC where each + tag specified in the map key contains one of the values in the corresponding + value list. + Exactly one of this or `ids` must be specified. type: object type: object tags: @@ -200,8 +255,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.11.1 - creationTimestamp: null + controller-gen.kubebuilder.io/version: v0.14.0 name: targetgroupbindings.elbv2.k8s.aws spec: group: elbv2.k8s.aws @@ -230,6 +284,11 @@ spec: name: ARN priority: 1 type: string + - description: The AWS TargetGroup's Name + jsonPath: .spec.targetGroupName + name: NAME + priority: 2 + type: string - jsonPath: .metadata.creationTimestamp name: AGE type: date @@ -239,20 +298,29 @@ spec: description: TargetGroupBinding is the Schema for the TargetGroupBinding API properties: apiVersion: - description: 'APIVersion defines the versioned schema of this representation - of an object. Servers should convert recognized schemas to the latest - internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + description: |- + APIVersion defines the versioned schema of this representation of an object. + Servers should convert recognized schemas to the latest internal value, and + may reject unrecognized values. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources type: string kind: - description: 'Kind is a string value representing the REST resource this - object represents. Servers may infer this from the endpoint the client - submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + description: |- + Kind is a string value representing the REST resource this object represents. + Servers may infer this from the endpoint the client submits requests to. + Cannot be updated. + In CamelCase. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds type: string metadata: type: object spec: description: TargetGroupBindingSpec defines the desired state of TargetGroupBinding properties: + multiClusterTargetGroup: + description: MultiClusterTargetGroup Denotes if the TargetGroup is + shared among multiple clusters + type: boolean networking: description: networking provides the networking setup for ELBV2 LoadBalancer to access targets in TargetGroup. @@ -263,28 +331,30 @@ spec: items: properties: from: - description: List of peers which should be able to access - the targets in TargetGroup. At least one NetworkingPeer - should be specified. + description: |- + List of peers which should be able to access the targets in TargetGroup. + At least one NetworkingPeer should be specified. items: description: NetworkingPeer defines the source/destination peer for networking rules. properties: ipBlock: - description: IPBlock defines an IPBlock peer. If specified, - none of the other fields can be set. + description: |- + IPBlock defines an IPBlock peer. + If specified, none of the other fields can be set. properties: cidr: - description: CIDR is the network CIDR. Both IPV4 - or IPV6 CIDR are accepted. + description: |- + CIDR is the network CIDR. + Both IPV4 or IPV6 CIDR are accepted. type: string required: - cidr type: object securityGroup: - description: SecurityGroup defines a SecurityGroup - peer. If specified, none of the other fields can - be set. + description: |- + SecurityGroup defines a SecurityGroup peer. + If specified, none of the other fields can be set. properties: groupID: description: GroupID is the EC2 SecurityGroupID. @@ -295,24 +365,24 @@ spec: type: object type: array ports: - description: List of ports which should be made accessible - on the targets in TargetGroup. If ports is empty or unspecified, - it defaults to all ports with TCP. + description: |- + List of ports which should be made accessible on the targets in TargetGroup. + If ports is empty or unspecified, it defaults to all ports with TCP. items: properties: port: anyOf: - type: integer - type: string - description: The port which traffic must match. When - NodePort endpoints(instance TargetType) is used, - this must be a numerical port. When Port endpoints(ip - TargetType) is used, this can be either numerical - or named port on pods. if port is unspecified, it - defaults to all ports. + description: |- + The port which traffic must match. + When NodePort endpoints(instance TargetType) is used, this must be a numerical port. + When Port endpoints(ip TargetType) is used, this can be either numerical or named port on pods. + if port is unspecified, it defaults to all ports. x-kubernetes-int-or-string: true protocol: - description: The protocol which traffic must match. + description: |- + The protocol which traffic must match. If protocol is unspecified, it defaults to TCP. enum: - TCP @@ -347,6 +417,9 @@ spec: description: targetGroupARN is the Amazon Resource Name (ARN) for the TargetGroup. type: string + targetGroupName: + description: targetGroupName is the Name of the TargetGroup. + type: string targetType: description: targetType is the TargetType of TargetGroup. If unspecified, it will be automatically inferred. @@ -356,7 +429,6 @@ spec: type: string required: - serviceRef - - targetGroupARN type: object status: description: TargetGroupBindingStatus defines the observed state of TargetGroupBinding @@ -389,6 +461,11 @@ spec: name: ARN priority: 1 type: string + - description: The AWS TargetGroup's Name + jsonPath: .spec.targetGroupName + name: NAME + priority: 2 + type: string - jsonPath: .metadata.creationTimestamp name: AGE type: date @@ -398,14 +475,19 @@ spec: description: TargetGroupBinding is the Schema for the TargetGroupBinding API properties: apiVersion: - description: 'APIVersion defines the versioned schema of this representation - of an object. Servers should convert recognized schemas to the latest - internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + description: |- + APIVersion defines the versioned schema of this representation of an object. + Servers should convert recognized schemas to the latest internal value, and + may reject unrecognized values. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources type: string kind: - description: 'Kind is a string value representing the REST resource this - object represents. Servers may infer this from the endpoint the client - submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + description: |- + Kind is a string value representing the REST resource this object represents. + Servers may infer this from the endpoint the client submits requests to. + Cannot be updated. + In CamelCase. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds type: string metadata: type: object @@ -419,6 +501,10 @@ spec: - ipv4 - ipv6 type: string + multiClusterTargetGroup: + description: MultiClusterTargetGroup Denotes if the TargetGroup is + shared among multiple clusters + type: boolean networking: description: networking defines the networking rules to allow ELBV2 LoadBalancer to access targets in TargetGroup. @@ -431,28 +517,30 @@ spec: of traffic that is allowed to access TargetGroup's targets. properties: from: - description: List of peers which should be able to access - the targets in TargetGroup. At least one NetworkingPeer - should be specified. + description: |- + List of peers which should be able to access the targets in TargetGroup. + At least one NetworkingPeer should be specified. items: description: NetworkingPeer defines the source/destination peer for networking rules. properties: ipBlock: - description: IPBlock defines an IPBlock peer. If specified, - none of the other fields can be set. + description: |- + IPBlock defines an IPBlock peer. + If specified, none of the other fields can be set. properties: cidr: - description: CIDR is the network CIDR. Both IPV4 - or IPV6 CIDR are accepted. + description: |- + CIDR is the network CIDR. + Both IPV4 or IPV6 CIDR are accepted. type: string required: - cidr type: object securityGroup: - description: SecurityGroup defines a SecurityGroup - peer. If specified, none of the other fields can - be set. + description: |- + SecurityGroup defines a SecurityGroup peer. + If specified, none of the other fields can be set. properties: groupID: description: GroupID is the EC2 SecurityGroupID. @@ -463,9 +551,9 @@ spec: type: object type: array ports: - description: List of ports which should be made accessible - on the targets in TargetGroup. If ports is empty or unspecified, - it defaults to all ports with TCP. + description: |- + List of ports which should be made accessible on the targets in TargetGroup. + If ports is empty or unspecified, it defaults to all ports with TCP. items: description: NetworkingPort defines the port and protocol for networking rules. @@ -474,15 +562,15 @@ spec: anyOf: - type: integer - type: string - description: The port which traffic must match. When - NodePort endpoints(instance TargetType) is used, - this must be a numerical port. When Port endpoints(ip - TargetType) is used, this can be either numerical - or named port on pods. if port is unspecified, it - defaults to all ports. + description: |- + The port which traffic must match. + When NodePort endpoints(instance TargetType) is used, this must be a numerical port. + When Port endpoints(ip TargetType) is used, this can be either numerical or named port on pods. + if port is unspecified, it defaults to all ports. x-kubernetes-int-or-string: true protocol: - description: The protocol which traffic must match. + description: |- + The protocol which traffic must match. If protocol is unspecified, it defaults to TCP. enum: - TCP @@ -504,41 +592,42 @@ spec: description: matchExpressions is a list of label selector requirements. The requirements are ANDed. items: - description: A label selector requirement is a selector that - contains values, a key, and an operator that relates the key - and values. + description: |- + A label selector requirement is a selector that contains values, a key, and an operator that + relates the key and values. properties: key: description: key is the label key that the selector applies to. type: string operator: - description: operator represents a key's relationship to - a set of values. Valid operators are In, NotIn, Exists - and DoesNotExist. + description: |- + operator represents a key's relationship to a set of values. + Valid operators are In, NotIn, Exists and DoesNotExist. type: string values: - description: values is an array of string values. If the - operator is In or NotIn, the values array must be non-empty. - If the operator is Exists or DoesNotExist, the values - array must be empty. This array is replaced during a strategic + description: |- + values is an array of string values. If the operator is In or NotIn, + the values array must be non-empty. If the operator is Exists or DoesNotExist, + the values array must be empty. This array is replaced during a strategic merge patch. items: type: string type: array + x-kubernetes-list-type: atomic required: - key - operator type: object type: array + x-kubernetes-list-type: atomic matchLabels: additionalProperties: type: string - description: matchLabels is a map of {key,value} pairs. A single - {key,value} in the matchLabels map is equivalent to an element - of matchExpressions, whose key field is "key", the operator - is "In", and the values array contains only "value". The requirements - are ANDed. + description: |- + matchLabels is a map of {key,value} pairs. A single {key,value} in the matchLabels + map is equivalent to an element of matchExpressions, whose key field is "key", the + operator is "In", and the values array contains only "value". The requirements are ANDed. type: object type: object x-kubernetes-map-type: atomic @@ -562,7 +651,9 @@ spec: targetGroupARN: description: targetGroupARN is the Amazon Resource Name (ARN) for the TargetGroup. - minLength: 1 + type: string + targetGroupName: + description: targetGroupName is the Name of the TargetGroup. type: string targetType: description: targetType is the TargetType of TargetGroup. If unspecified, @@ -571,9 +662,12 @@ spec: - instance - ip type: string + vpcID: + description: VpcID is the VPC of the TargetGroup. If unspecified, + it will be automatically inferred. + type: string required: - serviceRef - - targetGroupARN type: object status: description: TargetGroupBindingStatus defines the observed state of TargetGroupBinding diff --git a/internal/constellation/helm/charts/aws-load-balancer-controller/templates/_helpers.tpl b/internal/constellation/helm/charts/aws-load-balancer-controller/templates/_helpers.tpl index 660f6ee9d..d916b99c4 100644 --- a/internal/constellation/helm/charts/aws-load-balancer-controller/templates/_helpers.tpl +++ b/internal/constellation/helm/charts/aws-load-balancer-controller/templates/_helpers.tpl @@ -45,12 +45,14 @@ This enables using a shorter name for the resources, for example aws-load-balanc Common labels */}} {{- define "aws-load-balancer-controller.labels" -}} +{{- if eq (default "helm" .Values.creator) "helm" -}} +app.kubernetes.io/managed-by: {{ .Release.Service }} helm.sh/chart: {{ include "aws-load-balancer-controller.chart" . }} +{{- end }} {{ include "aws-load-balancer-controller.selectorLabels" . }} {{- if .Chart.AppVersion }} app.kubernetes.io/version: {{ .Chart.AppVersion | quote }} {{- end }} -app.kubernetes.io/managed-by: {{ .Release.Service }} {{- if .Values.additionalLabels }} {{ toYaml .Values.additionalLabels }} {{- end -}} diff --git a/internal/constellation/helm/charts/aws-load-balancer-controller/templates/deployment.yaml b/internal/constellation/helm/charts/aws-load-balancer-controller/templates/deployment.yaml index e2b5225ff..4506d489e 100644 --- a/internal/constellation/helm/charts/aws-load-balancer-controller/templates/deployment.yaml +++ b/internal/constellation/helm/charts/aws-load-balancer-controller/templates/deployment.yaml @@ -11,6 +11,7 @@ metadata: {{- include "aws-load-balancer-controller.labels" . | nindent 4 }} spec: replicas: {{ .Values.replicaCount }} + revisionHistoryLimit: {{ .Values.revisionHistoryLimit }} selector: matchLabels: {{- include "aws-load-balancer-controller.selectorLabels" . | nindent 6 }} @@ -37,6 +38,9 @@ spec: {{- with .Values.imagePullSecrets }} imagePullSecrets: {{- toYaml . | nindent 8 }} + {{- end }} + {{- with .Values.runtimeClassName }} + runtimeClassName: {{ .Values.runtimeClassName }} {{- end }} serviceAccountName: {{ include "aws-load-balancer-controller.serviceAccountName" . }} volumes: @@ -58,15 +62,17 @@ spec: containers: - name: {{ .Chart.Name }} args: - - --cluster-name={{ required "Chart cannot be installed without a valid clusterName!" .Values.clusterName }} + - --cluster-name={{ required "Chart cannot be installed without a valid clusterName!" (tpl (default "" .Values.clusterName) .) }} {{- if .Values.ingressClass }} - --ingress-class={{ .Values.ingressClass }} {{- end }} - {{- if .Values.region }} + {{- $region := tpl (default "" .Values.region) . }} + {{- if $region }} - --aws-region={{ .Values.region }} {{- end }} - {{- if .Values.vpcId }} - - --aws-vpc-id={{ .Values.vpcId }} + {{- $vpcID := tpl (default "" .Values.vpcId) . }} + {{- if $vpcID }} + - --aws-vpc-id={{ $vpcID }} {{- end }} {{- if .Values.awsApiEndpoints }} - --aws-api-endpoints={{ .Values.awsApiEndpoints }} @@ -104,6 +110,9 @@ spec: {{- if .Values.targetgroupbindingMaxExponentialBackoffDelay }} - --targetgroupbinding-max-exponential-backoff-delay={{ .Values.targetgroupbindingMaxExponentialBackoffDelay }} {{- end }} + {{- if .Values.lbStabilizationMonitorInterval }} + - --lb-stabilization-monitor-interval={{ .Values.lbStabilizationMonitorInterval }} + {{- end }} {{- if .Values.logLevel }} - --log-level={{ .Values.logLevel }} {{- end }} @@ -122,6 +131,12 @@ spec: {{- if kindIs "bool" .Values.disableIngressGroupNameAnnotation }} - --disable-ingress-group-name-annotation={{ .Values.disableIngressGroupNameAnnotation }} {{- end }} + {{- if kindIs "bool" .Values.tolerateNonExistentBackendService }} + - --tolerate-non-existent-backend-service={{ .Values.tolerateNonExistentBackendService }} + {{- end }} + {{- if kindIs "bool" .Values.tolerateNonExistentBackendAction }} + - --tolerate-non-existent-backend-action={{ .Values.tolerateNonExistentBackendAction }} + {{- end }} {{- if .Values.defaultSSLPolicy }} - --default-ssl-policy={{ .Values.defaultSSLPolicy }} {{- end }} @@ -149,13 +164,42 @@ spec: {{- if ne .Values.defaultTargetType "instance" }} - --default-target-type={{ .Values.defaultTargetType }} {{- end }} - {{- if .Values.env }} + {{- if .Values.serviceTargetENISGTags }} + - --service-target-eni-security-group-tags={{ .Values.serviceTargetENISGTags }} + {{- end }} + {{- if .Values.certDiscovery.allowedCertificateAuthorityARNs }} + - --allowed-certificate-authority-arns={{ .Values.certDiscovery.allowedCertificateAuthorityARNs }} + {{- end }} + {{- if .Values.loadBalancerClass }} + - --load-balancer-class={{ .Values.loadBalancerClass }} + {{- end }} + {{- if or .Values.env .Values.envSecretName }} env: + {{- if .Values.env}} {{- range $key, $value := .Values.env }} - name: {{ $key }} value: "{{ $value }}" {{- end }} {{- end }} + {{- if .Values.envSecretName }} + - name: AWS_ACCESS_KEY_ID + valueFrom: + secretKeyRef: + name: {{ .Values.envSecretName }} + key: key_id + optional: true + - name: AWS_SECRET_ACCESS_KEY + valueFrom: + secretKeyRef: + name: {{ .Values.envSecretName }} + key: access_key + optional: true + {{- end }} + {{- end }} + {{- if .Values.envFrom }} + envFrom: + {{- toYaml .Values.envFrom | nindent 10 }} + {{- end }} securityContext: {{- toYaml .Values.securityContext | nindent 10 }} image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}" @@ -180,6 +224,10 @@ spec: livenessProbe: {{- toYaml . | nindent 10 }} {{- end }} + {{- with .Values.readinessProbe }} + readinessProbe: + {{- toYaml . | nindent 10 }} + {{- end }} terminationGracePeriodSeconds: {{ .Values.terminationGracePeriodSeconds }} {{- with .Values.nodeSelector }} nodeSelector: diff --git a/internal/constellation/helm/charts/aws-load-balancer-controller/templates/hpa.yaml b/internal/constellation/helm/charts/aws-load-balancer-controller/templates/hpa.yaml new file mode 100644 index 000000000..68689ba66 --- /dev/null +++ b/internal/constellation/helm/charts/aws-load-balancer-controller/templates/hpa.yaml @@ -0,0 +1,34 @@ +{{- if .Values.autoscaling.enabled }} +{{- if (semverCompare ">=1.23-0" .Capabilities.KubeVersion.Version)}} +apiVersion: autoscaling/v2 +{{- else }} +apiVersion: autoscaling/v2beta2 +{{- end }} +kind: HorizontalPodAutoscaler +metadata: + name: {{ include "aws-load-balancer-controller.fullname" . }} + namespace: {{ .Release.Namespace }} + labels: + {{- include "aws-load-balancer-controller.labels" . | nindent 4 }} + annotations: + {{- .Values.annotations | toYaml | nindent 4 }} +spec: + scaleTargetRef: + apiVersion: apps/v1 + kind: Deployment + name: {{ include "aws-load-balancer-controller.fullname" . }} + minReplicas: {{ .Values.autoscaling.minReplicas }} + maxReplicas: {{ required "A valid .Values.autoscaling.maxReplicas value is required" .Values.autoscaling.maxReplicas }} + metrics: + {{- if .Values.autoscaling.targetCPUUtilizationPercentage }} + - type: Resource + resource: + name: cpu + target: + averageUtilization: {{ .Values.autoscaling.targetCPUUtilizationPercentage }} + type: Utilization + {{- end }} + {{- if .Values.autoscaling.autoscaleBehavior }} + behavior: {{ toYaml .Values.autoscaling.autoscaleBehavior | nindent 4 }} + {{- end }} +{{- end }} diff --git a/internal/constellation/helm/charts/aws-load-balancer-controller/templates/rbac.yaml b/internal/constellation/helm/charts/aws-load-balancer-controller/templates/rbac.yaml index fc3bda695..0dcc68c77 100644 --- a/internal/constellation/helm/charts/aws-load-balancer-controller/templates/rbac.yaml +++ b/internal/constellation/helm/charts/aws-load-balancer-controller/templates/rbac.yaml @@ -75,6 +75,9 @@ rules: - apiGroups: [""] resources: [nodes, namespaces, endpoints] verbs: [get, list, watch] +- apiGroups: [""] + resources: [configmaps] + verbs: [get, delete, create, update] {{- if .Values.clusterSecretsPermissions.allowAllSecrets }} - apiGroups: [""] resources: [secrets] diff --git a/internal/constellation/helm/charts/aws-load-balancer-controller/templates/servicemonitor.yaml b/internal/constellation/helm/charts/aws-load-balancer-controller/templates/servicemonitor.yaml index c811be253..0454558c2 100644 --- a/internal/constellation/helm/charts/aws-load-balancer-controller/templates/servicemonitor.yaml +++ b/internal/constellation/helm/charts/aws-load-balancer-controller/templates/servicemonitor.yaml @@ -3,18 +3,14 @@ apiVersion: monitoring.coreos.com/v1 kind: ServiceMonitor metadata: name: {{ include "aws-load-balancer-controller.fullname" . }} - {{- if .Values.serviceMonitor.namespace }} - namespace: {{ .Values.serviceMonitor.namespace }} - {{- else }} - namespace: {{ .Release.Namespace | quote }} - {{- end }} + namespace: {{ default .Release.Namespace .Values.serviceMonitor.namespace }} labels: {{- include "aws-load-balancer-controller.labels" . | nindent 4 }} - {{- with .Values.serviceMonitor.additionalLabels }} + {{- with .Values.serviceMonitor.additionalLabels }} {{- toYaml . | nindent 4 }} - {{- end }} + {{- end }} spec: - jobLabel: {{ .Release.Name }} + jobLabel: app.kubernetes.io/instance namespaceSelector: matchNames: - {{ .Release.Namespace }} @@ -29,7 +25,19 @@ spec: endpoints: - port: metrics-server path: /metrics - {{- with .Values.serviceMonitor.interval }} + scheme: http + {{- with .Values.serviceMonitor.interval }} interval: {{ . }} - {{- end }} -{{- end -}} \ No newline at end of file + {{- end }} + {{- with .Values.serviceMonitor.scrapeTimeout }} + scrapeTimeout: {{ . }} + {{- end }} + {{- with .Values.serviceMonitor.relabelings }} + relabelings: + {{- toYaml . | nindent 8 }} + {{- end }} + {{- with .Values.serviceMonitor.metricRelabelings }} + metricRelabelings: + {{- toYaml . | nindent 8 }} + {{- end }} +{{- end -}} diff --git a/internal/constellation/helm/charts/aws-load-balancer-controller/templates/webhook.yaml b/internal/constellation/helm/charts/aws-load-balancer-controller/templates/webhook.yaml index e7d557e41..504f08ccb 100644 --- a/internal/constellation/helm/charts/aws-load-balancer-controller/templates/webhook.yaml +++ b/internal/constellation/helm/charts/aws-load-balancer-controller/templates/webhook.yaml @@ -65,7 +65,7 @@ webhooks: name: {{ template "aws-load-balancer-controller.webhookService" . }} namespace: {{ $.Release.Namespace }} path: /mutate-v1-service - failurePolicy: Fail + failurePolicy: {{ .Values.serviceMutatorWebhookConfig.failurePolicy }} name: mservice.elbv2.k8s.aws admissionReviewVersions: - v1beta1 @@ -75,13 +75,21 @@ webhooks: operator: NotIn values: - {{ include "aws-load-balancer-controller.name" . }} + {{- if .Values.serviceMutatorWebhookConfig.objectSelector.matchExpressions }} + {{- toYaml .Values.serviceMutatorWebhookConfig.objectSelector.matchExpressions | nindent 4 }} + {{- end }} + + {{- if .Values.serviceMutatorWebhookConfig.objectSelector.matchLabels }} + matchLabels: + {{- toYaml .Values.serviceMutatorWebhookConfig.objectSelector.matchLabels | nindent 6 }} + {{- end }} rules: - apiGroups: - "" apiVersions: - v1 operations: - - CREATE + {{- toYaml .Values.serviceMutatorWebhookConfig.operations | nindent 4 }} resources: - services sideEffects: None @@ -173,6 +181,7 @@ webhooks: resources: - targetgroupbindings sideEffects: None +{{- if not $.Values.webhookConfig.disableIngressValidation }} - clientConfig: {{ if not $.Values.enableCertManager -}} caBundle: {{ $tls.caCert }} @@ -197,6 +206,7 @@ webhooks: resources: - ingresses sideEffects: None +{{- end }} --- {{- if not $.Values.enableCertManager }} apiVersion: v1 diff --git a/internal/constellation/helm/charts/aws-load-balancer-controller/values.yaml b/internal/constellation/helm/charts/aws-load-balancer-controller/values.yaml index dea199559..c2f465bcd 100644 --- a/internal/constellation/helm/charts/aws-load-balancer-controller/values.yaml +++ b/internal/constellation/helm/charts/aws-load-balancer-controller/values.yaml @@ -4,15 +4,29 @@ replicaCount: 2 +revisionHistoryLimit: 10 + image: repository: public.ecr.aws/eks/aws-load-balancer-controller - tag: v2.5.3 + tag: v2.11.0 pullPolicy: IfNotPresent +runtimeClassName: "" imagePullSecrets: [] nameOverride: "" fullnameOverride: "" +# AWS LBC only has 1 main working pod, other pods are just standby +# the purpose of enable hpa is to survive load induced failure by the calls to the aws-load-balancer-webhook-service +# since the calls from kube-apiserver are sent round-robin to all replicas, and the failure policy on those webhooks is Fail +# if the pods become overloaded and do not respond within the timeout that could block the creation of pods, targetgroupbindings or ingresses +# Please keep in mind that the controller pods have `priorityClassName: system-cluster-critical`, enabling HPA may lead to the eviction of other low-priority pods in the node +autoscaling: + enabled: false + minReplicas: 1 + maxReplicas: 5 + targetCPUUtilizationPercentage: 80 + serviceAccount: # Specifies whether a service account should be created create: true @@ -106,8 +120,8 @@ clusterName: # cluster contains configurations specific to the kubernetes cluster cluster: - # Cluster DNS domain (required for requesting TLS certificates) - dnsDomain: cluster.local + # Cluster DNS domain (required for requesting TLS certificates) + dnsDomain: cluster.local # The ingress class this controller will satisfy. If not specified, controller will match all # ingresses without ingress class annotation and ingresses of type alb @@ -187,6 +201,10 @@ logLevel: # The address the metric endpoint binds to. (default ":8080") metricsBindAddr: "" +webhookConfig: + # disableIngressValidation disables the validation of resources of kind Ingress, false by default + disableIngressValidation: + # The TCP port the Webhook server binds to. (default 9443) webhookBindPort: @@ -196,7 +214,7 @@ webhookTLS: cert: key: -# array of namespace selectors for the webhook +# array of namespace selectors for the pod mutator webhook webhookNamespaceSelectors: # - key: elbv2.k8s.aws/pod-readiness-gate-inject # operator: In @@ -215,7 +233,10 @@ targetgroupbindingMaxConcurrentReconciles: # Maximum duration of exponential backoff for targetGroupBinding reconcile failures targetgroupbindingMaxExponentialBackoffDelay: -# Period at which the controller forces the repopulation of its local object stores. (default 1h0m0s) +# Interval at which the controller monitors the state of load balancer after creation for stabilization +lbStabilizationMonitorInterval: + +# Period at which the controller forces the repopulation of its local object stores. (default 10h0m0s) syncPeriod: # Namespace the controller watches for updates to Kubernetes objects, If empty, all namespaces are watched. @@ -227,6 +248,12 @@ disableIngressClassAnnotation: # disableIngressGroupNameAnnotation disables the usage of alb.ingress.kubernetes.io/group.name annotation, false by default disableIngressGroupNameAnnotation: +# tolerateNonExistentBackendService permits rules which specify backend services that don't exist, true by default (When enabled, it will return 503 error if backend service not exist) +tolerateNonExistentBackendService: + +# tolerateNonExistentBackendAction permits rules which specify backend actions that don't exist, true by default (When enabled, it will return 503 error if backend action not exist) +tolerateNonExistentBackendAction: + # defaultSSLPolicy specifies the default SSL policy to use for TLS/HTTPS listeners defaultSSLPolicy: @@ -240,6 +267,17 @@ livenessProbe: initialDelaySeconds: 30 timeoutSeconds: 10 +# readiness probe configuration for the controller +readinessProbe: + failureThreshold: 2 + httpGet: + path: /readyz + port: 61779 + scheme: HTTP + successThreshold: 1 + initialDelaySeconds: 10 + timeoutSeconds: 10 + # Environment variables to set for aws-load-balancer-controller pod. # We strongly discourage programming access credentials in the controller environment. You should setup IRSA or # comparable solutions like kube2iam, kiam etc instead. @@ -247,8 +285,15 @@ env: # ENV_1: "" # ENV_2: "" +# Use Environment variables credentials from Secret (aws-secret) for aws-load-balancer-controller pod similarly as The EBS CSI Driver does. +# envSecretName: aws-secret + +# Use envFrom to set environment variables from a Secret or ConfigMap +# envFrom: +# - secretRef: +# name: my-secret + # Specifies if aws-load-balancer-controller should be started in hostNetwork mode. -# # This is required if using a custom CNI where the managed control plane nodes are unable to initiate # network connections to the pods, for example using Calico CNI plugin on EKS. This is not required or # recommended if using the Amazon VPC CNI plugin. @@ -315,6 +360,11 @@ controllerConfig: # EnableIPTargetType: true # SubnetsClusterTagCheck: true # NLBHealthCheckAdvancedConfig: true + # ALBSingleSubnet: false + # LBCapacityReservation: true + +certDiscovery: + allowedCertificateAuthorityARNs: "" # empty means all CAs are in scope # objectSelector for webhook objectSelector: @@ -329,12 +379,18 @@ objectSelector: serviceMonitor: # Specifies whether a service monitor should be created enabled: false - # Labels to add to the service account + # Namespace to create the service monitor in + namespace: + # Labels to add to the service monitor additionalLabels: {} # Prometheus scrape interval interval: 1m - # Namespace to create the service monitor in - namespace: + # Prometheus scrape timeout + scrapeTimeout: + # Relabelings to apply to samples before ingestion + relabelings: + # Metric relabelings to apply to samples before ingestion + metricRelabelings: # clusterSecretsPermissions lets you configure RBAC permissions for secret resources # Access to secrets resource is required only if you use the OIDC feature, and instead of @@ -351,3 +407,30 @@ ingressClassConfig: # enableServiceMutatorWebhook allows you enable the webhook which makes this controller the default for all new services of type LoadBalancer enableServiceMutatorWebhook: true + +# serviceMutatorWebhook contains configurations specific to the service mutator webhook +serviceMutatorWebhookConfig: + # whether or not to fail the service creation if the webhook fails + failurePolicy: Fail + # limit webhook to only mutate services matching the objectSelector + objectSelector: + matchExpressions: [] + # - key: + # operator: + # values: + # - + matchLabels: {} + # key: value + # which operations trigger the webhook + operations: + - CREATE + # - UPDATE + +# serviceTargetENISGTags specifies AWS tags, in addition to the cluster tags, for finding the target ENI SG to which to add inbound rules from NLBs. +serviceTargetENISGTags: + +# Specifies the class of load balancer to use for services. This affects how services are provisioned if type LoadBalancer is used (default service.k8s.aws/nlb) +loadBalancerClass: + +# creator will disable helm default labels, so you can only add yours +# creator: "me" diff --git a/internal/constellation/helm/update-aws-load-balancer-chart.sh b/internal/constellation/helm/update-aws-load-balancer-chart.sh index 1c6a8519c..797defaa8 100755 --- a/internal/constellation/helm/update-aws-load-balancer-chart.sh +++ b/internal/constellation/helm/update-aws-load-balancer-chart.sh @@ -8,7 +8,7 @@ set -o errtrace shopt -s inherit_errexit echo "Updating AWS Load Balancer Controller Helm chart..." -branch="v0.0.140" # releases can update the AWS load-balancer-controller chart +branch="v0.0.190" # releases can update the AWS load-balancer-controller chart # Required tools if ! command -v git &> /dev/null; then echo "git could not be found" From 681a341b8f82e3376df5197fc97dae3a69e0a3d7 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 30 Jan 2025 16:36:45 +0100 Subject: [PATCH 094/311] deps: update bazel (plugins) (#3598) * deps: update bazel (plugins) * deps: fix renovate's attempt --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Markus Rudy --- bazel/toolchains/container_images.bzl | 2 +- bazel/toolchains/nixpkgs_deps.bzl | 8 ++++---- bazel/toolchains/oci_deps.bzl | 9 ++++----- 3 files changed, 9 insertions(+), 10 deletions(-) diff --git a/bazel/toolchains/container_images.bzl b/bazel/toolchains/container_images.bzl index a8e069966..d4e7cdd79 100644 --- a/bazel/toolchains/container_images.bzl +++ b/bazel/toolchains/container_images.bzl @@ -7,7 +7,7 @@ load("@rules_oci//oci:pull.bzl", "oci_pull") def containter_image_deps(): oci_pull( name = "distroless_static", - digest = "sha256:5c7e2b465ac6a2a4e5f4f7f722ce43b147dabe87cb21ac6c4007ae5178a1fa58", + digest = "sha256:3f2b64ef97bd285e36132c684e6b2ae8f2723293d09aae046196cca64251acac", image = "gcr.io/distroless/static", platforms = [ "linux/amd64", diff --git a/bazel/toolchains/nixpkgs_deps.bzl b/bazel/toolchains/nixpkgs_deps.bzl index d5391d01e..bdf5f0f1c 100644 --- a/bazel/toolchains/nixpkgs_deps.bzl +++ b/bazel/toolchains/nixpkgs_deps.bzl @@ -5,11 +5,11 @@ load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") def nixpkgs_deps(): http_archive( name = "io_tweag_rules_nixpkgs", - sha256 = "0f7ac344873873d89f8286b4971401dca4a1b249421c2f7c7b56a1befe4501cb", - strip_prefix = "rules_nixpkgs-4e169eefd4e9cf38a3569e0b463e93f0c7a3c181", + sha256 = "30271f7bd380e4e20e4d7132c324946c4fdbc31ebe0bbb6638a0f61a37e74397", + strip_prefix = "rules_nixpkgs-0.13.0", urls = [ - "https://cdn.confidential.cloud/constellation/cas/sha256/0f7ac344873873d89f8286b4971401dca4a1b249421c2f7c7b56a1befe4501cb", - "https://github.com/tweag/rules_nixpkgs/archive/4e169eefd4e9cf38a3569e0b463e93f0c7a3c181.tar.gz", + "https://cdn.confidential.cloud/constellation/cas/sha256/30271f7bd380e4e20e4d7132c324946c4fdbc31ebe0bbb6638a0f61a37e74397", + "https://github.com/tweag/rules_nixpkgs/releases/download/v0.13.0/rules_nixpkgs-0.13.0.tar.gz", ], type = "tar.gz", ) diff --git a/bazel/toolchains/oci_deps.bzl b/bazel/toolchains/oci_deps.bzl index 8cfbecf3b..dd1063ddc 100644 --- a/bazel/toolchains/oci_deps.bzl +++ b/bazel/toolchains/oci_deps.bzl @@ -7,14 +7,13 @@ def oci_deps(): # Remove this override once https://github.com/bazel-contrib/rules_oci/issues/420 is fixed. http_archive( name = "rules_oci", - strip_prefix = "rules_oci-2.0.1", + strip_prefix = "rules_oci-2.2.1", type = "tar.gz", urls = [ - "https://cdn.confidential.cloud/constellation/cas/sha256/acbf8f40e062f707f8754e914dcb0013803c6e5e3679d3e05b571a9f5c7e0b43", - "https://cdn.confidential.cloud/constellation/cas/sha256/f70f07f9d0d6c275d7ec7d3c7f236d9b552ba3205e8f37df9c1125031cf967cc", - "https://github.com/bazel-contrib/rules_oci/releases/download/v2.0.1/rules_oci-v2.0.1.tar.gz", + "https://cdn.confidential.cloud/constellation/cas/sha256/cfea16076ebbec1faea494882ab97d94b1a62d6bcd5aceabad8f95ea0d0a1361", + "https://github.com/bazel-contrib/rules_oci/releases/download/v2.2.1/rules_oci-v2.2.1.tar.gz", ], - sha256 = "acbf8f40e062f707f8754e914dcb0013803c6e5e3679d3e05b571a9f5c7e0b43", + sha256 = "cfea16076ebbec1faea494882ab97d94b1a62d6bcd5aceabad8f95ea0d0a1361", patches = ["//bazel/toolchains:0001-disable-Windows-support.patch"], patch_args = ["-p1"], ) From ad364f2089367e33e9fecc3e8241c7bceefa97fe Mon Sep 17 00:00:00 2001 From: edgelessci <71088502+edgelessci@users.noreply.github.com> Date: Fri, 31 Jan 2025 08:31:34 +0100 Subject: [PATCH 095/311] image: update measurements and image version (#3628) Co-authored-by: edgelessci --- .../measurements/measurements_enterprise.go | 16 ++++++++-------- internal/config/image_enterprise.go | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/internal/attestation/measurements/measurements_enterprise.go b/internal/attestation/measurements/measurements_enterprise.go index 3f372883c..acb8516dd 100644 --- a/internal/attestation/measurements/measurements_enterprise.go +++ b/internal/attestation/measurements/measurements_enterprise.go @@ -19,14 +19,14 @@ package measurements // revive:disable:var-naming var ( - aws_AWSNitroTPM = M{0: {Expected: []byte{0x73, 0x7f, 0x76, 0x7a, 0x12, 0xf5, 0x4e, 0x70, 0xee, 0xcb, 0xc8, 0x68, 0x40, 0x11, 0x32, 0x3a, 0xe2, 0xfe, 0x2d, 0xd9, 0xf9, 0x07, 0x85, 0x57, 0x79, 0x69, 0xd7, 0xa2, 0x01, 0x3e, 0x8c, 0x12}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x87, 0x20, 0xe7, 0x90, 0x08, 0x93, 0xe7, 0x3b, 0x0e, 0x00, 0xbf, 0x5e, 0xc4, 0x8f, 0x96, 0x81, 0xe8, 0x0d, 0xc9, 0x8f, 0x48, 0xd3, 0xfd, 0x8a, 0x7b, 0xd3, 0x60, 0xcd, 0x34, 0x6a, 0xc8, 0x40}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xac, 0x7f, 0x4f, 0xa8, 0x2c, 0x9a, 0x6e, 0xd7, 0x6c, 0x3a, 0x5d, 0x72, 0x71, 0x9c, 0x54, 0x56, 0x3d, 0x4c, 0x89, 0x35, 0xb1, 0x71, 0x2e, 0x07, 0xa0, 0x96, 0x58, 0x1b, 0x28, 0x90, 0xcc, 0x58}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x7c, 0x19, 0x50, 0xb5, 0x24, 0x6a, 0xe8, 0x10, 0x8e, 0xb5, 0x37, 0x10, 0xd5, 0x33, 0x80, 0xce, 0x41, 0x0b, 0xc9, 0x3f, 0x99, 0x0e, 0x01, 0xeb, 0x5c, 0xc4, 0xba, 0xf3, 0xfc, 0xb5, 0xcf, 0x3a}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - aws_AWSSEVSNP = M{0: {Expected: []byte{0xd6, 0xdf, 0x85, 0x53, 0x58, 0xf5, 0xb1, 0x0f, 0x06, 0xf0, 0xfa, 0xb3, 0xf4, 0x08, 0xad, 0x26, 0xcd, 0x16, 0x5a, 0x29, 0x49, 0xba, 0xd6, 0x9e, 0x2c, 0xc7, 0x56, 0x92, 0x52, 0x9e, 0x66, 0x2a}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x66, 0xeb, 0xc3, 0xfe, 0xf6, 0x42, 0xa3, 0xc2, 0x38, 0x77, 0x63, 0x11, 0x7d, 0x56, 0x59, 0x73, 0xb1, 0xf3, 0x11, 0x06, 0x75, 0x86, 0x02, 0xdd, 0x75, 0x37, 0x7a, 0x49, 0xc2, 0x3a, 0x18, 0x04}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xa4, 0xcb, 0x35, 0xae, 0xc9, 0x55, 0x4a, 0xb8, 0x86, 0x5e, 0xb2, 0x3c, 0xa5, 0x3d, 0x93, 0x8f, 0xed, 0x7b, 0xcf, 0xe1, 0x13, 0x8f, 0x7d, 0x2f, 0x9c, 0x6f, 0x3e, 0x46, 0x69, 0x2d, 0x20, 0xde}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xfc, 0x86, 0x05, 0xda, 0x15, 0xec, 0x2c, 0xdd, 0x17, 0x87, 0x02, 0x7a, 0x18, 0x61, 0x31, 0x88, 0x73, 0x09, 0x65, 0x8d, 0xbc, 0xc2, 0x1f, 0x53, 0xcb, 0x33, 0xd5, 0x0e, 0x4a, 0xc8, 0xca, 0x0c}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - azure_AzureSEVSNP = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x97, 0x96, 0x06, 0xd9, 0xc8, 0x09, 0x70, 0xdb, 0xf8, 0x57, 0x5c, 0xc4, 0x4d, 0xfa, 0x7e, 0x01, 0xeb, 0x41, 0x6c, 0xbc, 0x18, 0xcd, 0x6a, 0xed, 0xa8, 0x20, 0x35, 0xf6, 0x3a, 0xb4, 0xaf, 0x53}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x6b, 0x6c, 0xb0, 0x94, 0xaa, 0xe1, 0xeb, 0xca, 0x39, 0xe1, 0x67, 0xad, 0x95, 0x87, 0xb5, 0x99, 0xae, 0xe1, 0xf1, 0x9f, 0x87, 0xa8, 0x1f, 0x77, 0x44, 0x51, 0xda, 0xc4, 0xbf, 0x55, 0x52, 0xb4}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xd7, 0xc5, 0x11, 0x8c, 0xef, 0x9c, 0xe2, 0xe4, 0xd0, 0x9f, 0x67, 0xf3, 0x9d, 0xea, 0xea, 0x7a, 0x99, 0x67, 0xe0, 0xce, 0x58, 0x23, 0xa3, 0x29, 0x51, 0x16, 0xd8, 0xdf, 0xa5, 0x3b, 0x8d, 0x97}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - azure_AzureTDX = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xcc, 0xb1, 0x48, 0x5d, 0xc4, 0x70, 0x8d, 0xa1, 0xe4, 0x74, 0x4d, 0xa0, 0x03, 0x8e, 0x81, 0xcb, 0x84, 0x7a, 0x9f, 0x6f, 0x8a, 0x90, 0x12, 0xf8, 0x6f, 0xc7, 0x4a, 0xa0, 0xff, 0xf4, 0x78, 0xb3}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x86, 0xbc, 0xcf, 0x8c, 0x99, 0xef, 0x7d, 0x54, 0xe1, 0x6d, 0xb4, 0xcd, 0xea, 0x02, 0x84, 0x38, 0x08, 0x86, 0xe1, 0x1e, 0x66, 0x34, 0xd8, 0xf8, 0x78, 0xb0, 0xec, 0x86, 0x88, 0xc8, 0x35, 0x45}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xcc, 0x84, 0xf1, 0xc7, 0x03, 0x00, 0x09, 0xb6, 0x07, 0x3a, 0xeb, 0x8e, 0x5a, 0xd0, 0xf0, 0xcd, 0x72, 0x01, 0xf7, 0x67, 0x0f, 0x64, 0x29, 0xe5, 0x88, 0xc8, 0xc0, 0x1e, 0x30, 0x8e, 0x72, 0xa1}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + aws_AWSNitroTPM = M{0: {Expected: []byte{0x73, 0x7f, 0x76, 0x7a, 0x12, 0xf5, 0x4e, 0x70, 0xee, 0xcb, 0xc8, 0x68, 0x40, 0x11, 0x32, 0x3a, 0xe2, 0xfe, 0x2d, 0xd9, 0xf9, 0x07, 0x85, 0x57, 0x79, 0x69, 0xd7, 0xa2, 0x01, 0x3e, 0x8c, 0x12}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x2c, 0x9e, 0x10, 0x95, 0x5d, 0xbb, 0xb5, 0xe3, 0x11, 0xff, 0xe2, 0x83, 0x20, 0x2f, 0xb3, 0x5b, 0x92, 0xed, 0x2b, 0x66, 0x1f, 0xa6, 0x67, 0x7f, 0x30, 0x73, 0x70, 0x0c, 0xea, 0xa4, 0xdd, 0xf5}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xed, 0x1c, 0x09, 0xd6, 0xd6, 0x89, 0x4c, 0x3f, 0xc5, 0x94, 0x90, 0xa5, 0xd0, 0x1b, 0x09, 0xca, 0x10, 0x8a, 0x2d, 0x64, 0xda, 0x4c, 0xce, 0x8a, 0x9d, 0x65, 0xcf, 0x5f, 0x24, 0xad, 0x1f, 0x71}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xf0, 0x06, 0x6c, 0xd4, 0xda, 0x0d, 0x6c, 0x79, 0x39, 0x20, 0xd1, 0x40, 0x83, 0x6a, 0xce, 0x76, 0x51, 0x90, 0x09, 0x0f, 0xe5, 0x09, 0xf5, 0xf9, 0x89, 0x2a, 0x2a, 0x4d, 0x44, 0x4a, 0x0a, 0x38}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + aws_AWSSEVSNP = M{0: {Expected: []byte{0xd6, 0xdf, 0x85, 0x53, 0x58, 0xf5, 0xb1, 0x0f, 0x06, 0xf0, 0xfa, 0xb3, 0xf4, 0x08, 0xad, 0x26, 0xcd, 0x16, 0x5a, 0x29, 0x49, 0xba, 0xd6, 0x9e, 0x2c, 0xc7, 0x56, 0x92, 0x52, 0x9e, 0x66, 0x2a}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x4a, 0x8a, 0x64, 0x5e, 0xbf, 0x97, 0xa3, 0xdf, 0xa0, 0x30, 0x54, 0xef, 0x41, 0x70, 0x3b, 0x69, 0x7a, 0x24, 0x76, 0xe9, 0x21, 0x8e, 0xe8, 0x70, 0xf6, 0x52, 0x22, 0x27, 0xb5, 0x0c, 0xe4, 0x6b}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x69, 0x26, 0xc8, 0x57, 0x6c, 0xc4, 0xb8, 0x11, 0xa2, 0x57, 0x71, 0xb7, 0xdb, 0xc7, 0xf5, 0x5d, 0xad, 0x2a, 0xb8, 0x72, 0x52, 0xac, 0x9f, 0xab, 0xfe, 0x77, 0x63, 0x77, 0x67, 0x58, 0xb1, 0x9b}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x1c, 0x4d, 0xaf, 0xf7, 0x2e, 0x6f, 0x55, 0xf7, 0x79, 0xeb, 0x80, 0x65, 0xe3, 0x2a, 0xd9, 0xa9, 0xb1, 0x6a, 0xf1, 0x95, 0xca, 0x13, 0xad, 0x5c, 0x6e, 0x5f, 0x88, 0xa1, 0xf5, 0x9f, 0xe2, 0x94}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + azure_AzureSEVSNP = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x93, 0x75, 0x8c, 0x78, 0x83, 0x4a, 0x8e, 0x73, 0x4d, 0x0d, 0x57, 0x19, 0xae, 0xa8, 0xf8, 0x19, 0x00, 0xe6, 0xfe, 0x39, 0x84, 0xf6, 0x99, 0x86, 0x3e, 0xa2, 0x11, 0x90, 0xdd, 0x04, 0xf7, 0xc1}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x31, 0xe2, 0x18, 0x94, 0x3c, 0xfe, 0x71, 0xe3, 0x1c, 0xb7, 0x3e, 0xf6, 0x48, 0x14, 0x84, 0x1b, 0x0f, 0xd8, 0xf9, 0x71, 0xa0, 0x2d, 0xe9, 0xf3, 0x2e, 0x62, 0x1b, 0x6b, 0xda, 0x92, 0x99, 0xcc}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x1f, 0xc1, 0x50, 0xb8, 0xa7, 0x57, 0xad, 0x94, 0x13, 0x59, 0x29, 0xb2, 0x32, 0x2d, 0x92, 0x83, 0x3f, 0x43, 0x6a, 0xe4, 0x4e, 0x59, 0xd1, 0x62, 0x08, 0x43, 0xd6, 0xb7, 0x5f, 0x87, 0x6d, 0xdb}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + azure_AzureTDX = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x62, 0xd1, 0x5e, 0x83, 0x62, 0x8b, 0x45, 0x93, 0xb8, 0x6a, 0xf6, 0x3e, 0xcd, 0x9e, 0x77, 0xca, 0x47, 0x3b, 0x06, 0x39, 0x22, 0x11, 0x40, 0x3c, 0xd7, 0xa8, 0x8c, 0x1f, 0xde, 0x57, 0x2e, 0xc6}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xd7, 0x7c, 0xda, 0x97, 0x5c, 0x6d, 0x7c, 0x55, 0x6a, 0xd3, 0x14, 0x4e, 0x1f, 0x00, 0x49, 0x15, 0xe8, 0xb2, 0xb7, 0x2b, 0x27, 0x00, 0x81, 0xd0, 0x21, 0xa9, 0xda, 0xd3, 0x7c, 0xfd, 0x7f, 0xc9}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x06, 0x1a, 0xc3, 0xed, 0x82, 0x7e, 0xfc, 0x33, 0x14, 0x4c, 0xc1, 0xff, 0x03, 0x12, 0x42, 0xc1, 0x36, 0xfd, 0x79, 0x6c, 0x48, 0xc2, 0x27, 0x6c, 0xea, 0xf8, 0x8b, 0xbd, 0xf4, 0x5a, 0x81, 0x02}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} azure_AzureTrustedLaunch M - gcp_GCPSEVES = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x5a, 0xc6, 0x56, 0x80, 0x5c, 0x64, 0xae, 0xcc, 0xb5, 0x1b, 0xe2, 0x54, 0x94, 0x06, 0x19, 0x9d, 0xf8, 0xc9, 0x01, 0x87, 0x43, 0x20, 0x80, 0xd2, 0xca, 0x01, 0x0a, 0x43, 0x76, 0xf6, 0x0f, 0xd6}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xe8, 0x63, 0xff, 0x20, 0xb9, 0x82, 0x64, 0x84, 0x4a, 0x65, 0x9d, 0xdd, 0x7b, 0x7a, 0x31, 0xda, 0x91, 0x67, 0x53, 0x2c, 0xa5, 0x82, 0x6d, 0x1b, 0xe2, 0xa4, 0xf5, 0x60, 0xd8, 0x5b, 0x02, 0xdd}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x3b, 0x12, 0xc4, 0x7f, 0x19, 0x35, 0x09, 0xd2, 0xd3, 0x78, 0xb0, 0x6c, 0xf1, 0xfa, 0x4d, 0xf8, 0x18, 0x01, 0xa8, 0x16, 0xc5, 0x9e, 0x12, 0xe3, 0xdf, 0x0c, 0x36, 0xa1, 0xb1, 0x23, 0xb4, 0x91}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - gcp_GCPSEVSNP = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x3a, 0xa0, 0x52, 0x90, 0xae, 0xe6, 0x7d, 0x2c, 0x59, 0x02, 0x01, 0x59, 0xd2, 0x36, 0x0f, 0x4a, 0x7a, 0x23, 0xc9, 0x64, 0x29, 0x19, 0x66, 0x76, 0x5e, 0x03, 0xe6, 0x21, 0xf7, 0x66, 0x6f, 0x3d}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xb0, 0x2e, 0xe8, 0x72, 0x34, 0x6d, 0xe3, 0xac, 0x89, 0x24, 0xf9, 0x6c, 0xd9, 0x72, 0x8a, 0x75, 0x51, 0x6e, 0x64, 0xc3, 0x3d, 0x2b, 0xf9, 0xfd, 0x03, 0xc6, 0x00, 0xee, 0x2d, 0x38, 0x9a, 0x9f}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xc5, 0x2b, 0xb8, 0xe2, 0xb7, 0x4c, 0x59, 0x4e, 0x4a, 0x89, 0x8c, 0xb7, 0xbb, 0x34, 0x6b, 0x92, 0xe2, 0x26, 0x95, 0xb7, 0x70, 0x5f, 0xf4, 0xee, 0x30, 0x02, 0x29, 0x22, 0xeb, 0xcb, 0xca, 0xcd}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - openstack_QEMUVTPM = M{4: {Expected: []byte{0x16, 0xe5, 0x59, 0x8f, 0x6e, 0x16, 0xd9, 0x5d, 0x34, 0x96, 0x8b, 0x54, 0x84, 0x93, 0x8e, 0xf8, 0x63, 0x29, 0xd8, 0x9d, 0xbf, 0x8b, 0x46, 0xe2, 0xc1, 0x34, 0xbe, 0x35, 0xa5, 0x83, 0x6e, 0x89}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x3c, 0x04, 0x69, 0x9a, 0xa0, 0x46, 0x8c, 0x11, 0x32, 0x53, 0x82, 0xa5, 0x1a, 0xe5, 0xed, 0xa8, 0x04, 0xa1, 0xde, 0x66, 0x02, 0x2e, 0x99, 0x73, 0xc5, 0x37, 0x86, 0xca, 0x79, 0x39, 0x12, 0xa4}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x7b, 0x91, 0x50, 0x42, 0xce, 0x81, 0x79, 0x30, 0x23, 0x12, 0xe6, 0xf0, 0xaa, 0xaf, 0x2f, 0x33, 0xe5, 0x13, 0x63, 0x34, 0xed, 0x16, 0x5b, 0xb1, 0xf7, 0x0b, 0x26, 0x93, 0x82, 0x2c, 0x75, 0x86}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + gcp_GCPSEVES = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x74, 0x63, 0xac, 0x3b, 0x32, 0x22, 0x45, 0xbc, 0xe1, 0x9a, 0x07, 0x7f, 0x11, 0x7f, 0x5d, 0x07, 0xb2, 0x64, 0xc7, 0x42, 0xca, 0x9f, 0x08, 0xc8, 0xa0, 0x6a, 0x94, 0x6e, 0x9f, 0xe3, 0xf6, 0x18}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x46, 0x43, 0x89, 0x2f, 0xe0, 0x10, 0x2a, 0x0f, 0xdf, 0x59, 0x52, 0xac, 0x56, 0x6b, 0x9f, 0x23, 0x1c, 0x88, 0xe7, 0xb3, 0xc9, 0xa1, 0x41, 0x5a, 0xa8, 0x54, 0xef, 0xa1, 0x40, 0xef, 0xef, 0xc9}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x97, 0x34, 0x1c, 0x45, 0x00, 0xf8, 0x7e, 0x35, 0xe0, 0x2e, 0x37, 0xc3, 0x52, 0x2f, 0x16, 0xc9, 0x40, 0x78, 0x35, 0x9e, 0x53, 0x23, 0x0b, 0x05, 0xb7, 0x98, 0xdc, 0xe6, 0xe1, 0xb9, 0x8c, 0xe6}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + gcp_GCPSEVSNP = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x91, 0xd6, 0xe2, 0x57, 0x7e, 0xac, 0x49, 0x70, 0xb7, 0x8e, 0x9c, 0x79, 0xbf, 0xc8, 0x80, 0x5b, 0x4a, 0x8d, 0x79, 0xef, 0x3c, 0x27, 0x03, 0x2f, 0x44, 0x42, 0xa4, 0xc9, 0x75, 0x0d, 0xd0, 0x37}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xef, 0x6e, 0xc3, 0xc1, 0x7e, 0xd1, 0xa4, 0x20, 0x22, 0xd3, 0x6e, 0xd8, 0xbf, 0xdc, 0x4e, 0x9b, 0x56, 0x05, 0x6a, 0x1f, 0x34, 0xf4, 0x27, 0x6e, 0x54, 0x2b, 0x76, 0x1f, 0x4c, 0x06, 0x50, 0xd7}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x11, 0x13, 0x79, 0x40, 0x6a, 0x0e, 0x46, 0xf3, 0xc4, 0x1a, 0xbe, 0x3b, 0x58, 0x7a, 0x7d, 0x24, 0x19, 0xb8, 0xbc, 0xe7, 0x5c, 0xfa, 0x68, 0x97, 0xda, 0xb0, 0x81, 0xaf, 0x04, 0xb8, 0x60, 0x88}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + openstack_QEMUVTPM = M{4: {Expected: []byte{0xc1, 0x32, 0xc5, 0xaa, 0x3e, 0xb4, 0x5c, 0xac, 0x34, 0x5c, 0x1d, 0x0b, 0x0f, 0x34, 0xb5, 0xe4, 0x7e, 0x38, 0xf8, 0x0a, 0xbd, 0x48, 0xff, 0xdf, 0x0e, 0xb7, 0x69, 0xa4, 0x4b, 0x89, 0x33, 0xbe}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x71, 0xa8, 0x12, 0x20, 0x63, 0xf6, 0x2c, 0x77, 0xc7, 0x3c, 0x62, 0x01, 0x92, 0xd0, 0x8e, 0x5d, 0xf4, 0x18, 0x28, 0xed, 0xf0, 0xad, 0xf9, 0xe5, 0x05, 0xa5, 0x31, 0xbc, 0x20, 0xb5, 0xe6, 0x43}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x9a, 0x2b, 0x1c, 0xa9, 0x15, 0x48, 0x25, 0x3d, 0x49, 0x4a, 0x24, 0x5a, 0xde, 0xa4, 0xa2, 0x3b, 0x5d, 0xed, 0x57, 0x79, 0x42, 0x36, 0x0c, 0x07, 0x28, 0x8a, 0x46, 0x3a, 0x8b, 0xaf, 0x02, 0x74}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} qemu_QEMUTDX M - qemu_QEMUVTPM = M{4: {Expected: []byte{0x43, 0x54, 0xaf, 0x64, 0x0d, 0x02, 0xb7, 0x08, 0xaa, 0xc1, 0xac, 0xc9, 0xf0, 0xb7, 0x8f, 0x50, 0xd1, 0x37, 0xe3, 0x59, 0x72, 0x4b, 0xa0, 0x90, 0x69, 0xc8, 0x5b, 0x89, 0xdf, 0x20, 0xf3, 0xfb}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x7d, 0xd9, 0xb4, 0x8d, 0x23, 0x5c, 0xda, 0xcf, 0xc5, 0x1b, 0x09, 0x4e, 0x2d, 0x99, 0xc2, 0xe9, 0xce, 0x92, 0xa3, 0xd6, 0xf3, 0x41, 0xea, 0x66, 0x7b, 0x04, 0x85, 0x80, 0xc5, 0x3a, 0xd7, 0xec}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x2c, 0x51, 0x6d, 0x27, 0x65, 0xdd, 0x5f, 0x8e, 0x02, 0xa2, 0x32, 0xdd, 0xf6, 0x6b, 0x43, 0xf1, 0x58, 0xdb, 0xad, 0x03, 0xe4, 0x8f, 0xc7, 0x88, 0x96, 0x2f, 0xd3, 0x40, 0x18, 0xee, 0x09, 0xf4}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + qemu_QEMUVTPM = M{4: {Expected: []byte{0xf5, 0x04, 0x0f, 0x78, 0x7a, 0x27, 0xd3, 0x7d, 0x52, 0x54, 0x1e, 0x8c, 0x7e, 0x86, 0x34, 0x63, 0xab, 0x4b, 0xaa, 0xd9, 0xa8, 0x6d, 0x1a, 0x83, 0x14, 0x7e, 0xfe, 0x81, 0xed, 0x6e, 0x8f, 0x81}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x7e, 0xac, 0x99, 0xed, 0x5d, 0x8f, 0xe6, 0xeb, 0xd0, 0xa6, 0x7a, 0xb2, 0x5f, 0x77, 0x0a, 0x19, 0x66, 0x5c, 0x27, 0x5b, 0x09, 0x4f, 0xf3, 0x33, 0x53, 0x40, 0xa9, 0xaa, 0x91, 0xbb, 0xf0, 0x96}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x67, 0x50, 0x76, 0x33, 0x31, 0xc4, 0x9e, 0x87, 0x54, 0xe2, 0x78, 0x48, 0x4c, 0xeb, 0x1f, 0x44, 0xc1, 0xd8, 0x70, 0x44, 0xc2, 0xa2, 0x63, 0xa6, 0xb0, 0x09, 0x39, 0x6d, 0xf6, 0x4f, 0xd7, 0xd9}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} ) diff --git a/internal/config/image_enterprise.go b/internal/config/image_enterprise.go index fafdf9e32..9c1250d2d 100644 --- a/internal/config/image_enterprise.go +++ b/internal/config/image_enterprise.go @@ -10,5 +10,5 @@ package config const ( // defaultImage is the default image to use. - defaultImage = "ref/main/stream/nightly/v2.21.0-pre.0.20250128131250-8da08bec8de1" + defaultImage = "ref/main/stream/nightly/v2.21.0-pre.0.20250130163645-681a341b8f82" ) From 76b642baf9705adddc0372339a12ddbe6af682a3 Mon Sep 17 00:00:00 2001 From: edgelessci <71088502+edgelessci@users.noreply.github.com> Date: Sun, 2 Feb 2025 10:02:35 +0100 Subject: [PATCH 096/311] image: update locked rpms (#3630) --- image/mirror/SHA256SUMS | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/image/mirror/SHA256SUMS b/image/mirror/SHA256SUMS index c797082c9..074edc6f7 100644 --- a/image/mirror/SHA256SUMS +++ b/image/mirror/SHA256SUMS @@ -1,8 +1,8 @@ 37abef83e8927b4b48f69fcbdcc249d349c6029cc669401676d01f0ea326999e WALinuxAgent-udev-2.10.0.8-2.fc40.noarch.rpm 8f9c8c8be1df166f4285824580c9f6588864c167c8a2d51a6c4621d1ea3f8fde aardvark-dns-1.13.1-1.fc40.x86_64.rpm ac860c52abbc65af5835d1bd97400c531a5635d39bc1d68e36a1fe54863385ea alternatives-1.27-1.fc40.x86_64.rpm -6d0cfcd0e97421b42af58a824c7e99a6cbcdd0e81980b4ea9e0d4051ef723db3 audit-libs-4.0.2-1.fc40.i686.rpm -f4ed40457780c13bebf84c1cf8981550da7e0e728e80250aed179eda8915bc7f audit-libs-4.0.2-1.fc40.x86_64.rpm +b28e7d90ed3aeb6ca10ecb235b70534665011af35bd3677fb836b1e3cfa602a7 audit-libs-4.0.3-1.fc40.i686.rpm +accc1c623cc5345f983990416ad0f8d6028d63bc9f00bcb808688b2a3bb7caf9 audit-libs-4.0.3-1.fc40.x86_64.rpm e9fd8dd4c9068501c169edb684de7f6e38657548e9d4d1b838a4d6316e9f17cc authselect-1.5.0-6.fc40.x86_64.rpm db18a583ebde21d8b0b67f0306e25908b273bef9c532469ac0b7ab92578438f4 authselect-libs-1.5.0-6.fc40.x86_64.rpm 6404b1028262aeaf3e083f08959969abea1301f7f5e8610492cf900b3d13d5db basesystem-11-20.fc40.noarch.rpm @@ -58,7 +58,7 @@ afebefb578c9ac9ed6a4575e7d00f3938e0adcf50f60c8fca3365b41be77833e elfutils-libel d52142d916af296e889906eb45997ab24357055a4c5e09c1015b0a4a222ef706 elfutils-libs-0.192-7.fc40.i686.rpm c120bc4d029536ffa77aab0aab8058df196de83548c24a147f0ab5951412b2a7 elfutils-libs-0.192-7.fc40.x86_64.rpm 95cf8ee199b2e1b3471f920ebad57d3d8178f5e68d37ee35a8a94727473ec8d3 ethtool-6.11-1.fc40.x86_64.rpm -3a5ba168021a01107d6dd4dc7cffe8bb5553c64f236c436979b9fddfdc4cb59d expat-2.6.3-1.fc40.x86_64.rpm +6df53940c5e0575c6b6be4d4f1f48f5504a94b04bfb63ed2c80acc64412591b4 expat-2.6.4-1.fc40.x86_64.rpm 849feb04544096f9bbe16bc78c2198708fe658bdafa08575c911e538a7d31c18 fedora-gpg-keys-40-2.noarch.rpm 8f0a56982aa10b607bd3b8009e91bac1a7d9b7ba40eb4435ff9bd9efe7e5e76e fedora-release-40-40.noarch.rpm dde6f4b5d4415ce20df40cf1cb9ff3015aa5b1896c5b5625e49aa686cdce1d1d fedora-release-common-40-40.noarch.rpm @@ -81,12 +81,12 @@ c4cc69bf3a2655b9ee9ac23492d377bac57811c5b4f81fbf43537520ee33c7af gawk-all-langp 554a68e692ccdd0cf71ea67a4c550bac910685465f17eee503732d48ccda9c90 gettext-libs-0.22.5-4.fc40.x86_64.rpm 046971e9f5f0c88737854e1c9e02cce8f5854633575984b235cf3f8b11ec7b91 gettext-runtime-0.22.5-4.fc40.x86_64.rpm 0a32c6874ce180375c2c0b1e2f0c8fed38131a598e5c4ba3866cf3aee1f3f5fc glib2-2.80.3-1.fc40.x86_64.rpm -4a0cc12fb936afe9bafa10e65a2382ceb5d3527dca31edf6f582730c06c6cbe3 glibc-2.39-33.fc40.i686.rpm -7e6ec3b69b313065f0552ba72636b49ae1504aa13a18e98899c6dfea64e81698 glibc-2.39-33.fc40.x86_64.rpm -61a7a7eed34433eb05a5ce2156ca3e85afe5b9f26bbf69e4acac77139b430068 glibc-common-2.39-33.fc40.x86_64.rpm -2e3c0ce27ffa93e3af48bab5a0e3e3903026b6cab09e4b12c1ca5e0454292da6 glibc-gconv-extra-2.39-33.fc40.i686.rpm -11b66a6b5a32492854bb51e6b58bc3b6a5a96ad0bdbe1a59c208786306053784 glibc-gconv-extra-2.39-33.fc40.x86_64.rpm -97833431611221385a39324253a72fb12a696dedf031c479455c5a8a637f56e7 glibc-minimal-langpack-2.39-33.fc40.x86_64.rpm +07ae5eea58ee6f3c79cbd8a196a688362ed3f6a8c7d5438c4ef81cb5c1945fe3 glibc-2.39-37.fc40.i686.rpm +4f4ea118bba40108c179d9282b985864982791a32ee62e7479b30df8c713a5ff glibc-2.39-37.fc40.x86_64.rpm +361ad86f312b98a6e7bccd70955b10e48e128310daf0401dfe187f1532e951e2 glibc-common-2.39-37.fc40.x86_64.rpm +571e6718794b51639d56009b1ca9e2e3695092e3240c45cab4fb327d567a7814 glibc-gconv-extra-2.39-37.fc40.i686.rpm +d94ce03982cc4137789225c1cc2db730b265ebae0f2afde55dc8d9b9850fd9f1 glibc-gconv-extra-2.39-37.fc40.x86_64.rpm +9730234c5c0c9ba9ee3e1a4d7a108f23fa69bcc074cb3be52034170b93d759ff glibc-minimal-langpack-2.39-37.fc40.x86_64.rpm b054d6a9ee3477e935686b327aa47379bd1909eac4ce06c4c45dff1a201ecb49 gmp-6.2.1-8.fc40.x86_64.rpm 0a8b1b3fb625e4d1864ad6726f583e2db5db7f10d9f3564b5916ca7fed1b71cb gnupg2-2.4.4-1.fc40.x86_64.rpm 4425dbd35ab65f25b092d12ac56c4b565371a1c52ac882c8896dbeae7d52bbb1 gnupg2-smime-2.4.4-1.fc40.x86_64.rpm @@ -217,8 +217,8 @@ e541a1c8397dccf159b3602eb6bbb381ba21c544db337a3b3bfc49ccc2ef5c21 libunistring-1 b6db3e72ae6575127216145c1f65414ea94acd9db26d08c5081cb5d786101c1f libuuid-2.40.2-1.fc40.x86_64.rpm bea578631618692ba5e302beadfdf6d5894e23e5bddaea4b4fca2f377dd1aaac libverto-0.3.2-8.fc40.i686.rpm fadf7dd93c5eee57ba78e0628bf041dbd2ea037ace52f0a5cbac55b363234d27 libverto-0.3.2-8.fc40.x86_64.rpm -92cfec827fb61991f9a8082d254b3aa070ed6b24bc0f2c95fbb41e31b2c9b0e1 libxcrypt-4.4.37-4.fc40.i686.rpm -76fddf1c2e81e78187bb7d1eba5bae6b11bd572bd1e50727df0199470dfd2717 libxcrypt-4.4.37-4.fc40.x86_64.rpm +734de953d19ae8a9937799eced437393e99da6c541adeda46b8603b8c8a7cc92 libxcrypt-4.4.38-3.fc40.i686.rpm +ccea0e99b182f382fe9ca5cb77e3279345b25696a72e5480d65c3724884413ef libxcrypt-4.4.38-3.fc40.x86_64.rpm a17f9a8894a00ee97a42219b3b21d64bfb850d74059d89ae299210bc477e8967 libxkbcommon-1.6.0-2.fc40.i686.rpm 1f1d0c1e1132016735acc6fc3390102b35f9eb257244547c7b61c32a9c2314cc libxkbcommon-1.6.0-2.fc40.x86_64.rpm db2c5422aeef81940a186b597df582b75a0f156e481262bef262f1b69ea1b799 libxml2-2.12.9-1.fc40.i686.rpm @@ -233,7 +233,7 @@ f5f022440c4340b5e7fb1c1dbc382e6b0fd57030b3ff056940f2bb3d254408ec lz4-libs-1.9.4 03fbefea8c8d8465cf1caf66870fb935292ee18b4ca341853b5576ca9c7801eb mokutil-0.7.1-1.fc40.x86_64.rpm 0a3a3fc2471d2d64cbc85f4b23c93620df6eeee814851a2b69fc5ddf75406b56 mpdecimal-2.5.1-9.fc40.x86_64.rpm bc873693a8b8423d7f82e329abe207c9160a4c746fea9a32ef2a6ae8c912f227 mpfr-4.2.1-4.fc40.x86_64.rpm -9dda076af2bb08f06df9f73ce682b8e417deb7bfb900581d519eeda247a442e9 mtools-4.0.46-1.fc40.x86_64.rpm +421e3595b85884390549e1698aa38ebf453f8929ce58b932ddc39f7fe2bffa4e mtools-4.0.47-1.fc40.x86_64.rpm 7dfae7d898dfc40f3fe1fc66104cf31e434e866fec4d4944b55952d7f2f16657 nano-7.2-7.fc40.x86_64.rpm b404c27af03bb1e43fb0dc472d5a1fa152e0563fa2e4eefa29199c47578a829b nano-default-editor-7.2-7.fc40.noarch.rpm 8a93376ce7423bd1a649a13f4b5105f270b4603f5cf3b3e230bdbda7f25dd788 ncurses-base-6.4-12.20240127.fc40.noarch.rpm @@ -244,7 +244,7 @@ c425cdd1d0889edb688809ccc2a35a96e67a7dedc119ad540ddd05f8a8997b5e netavark-1.13. 188ce5004e6ed764b4a619b64a4a0f36f1cc4fa919fe0a300599ff1171844144 nftables-1.0.9-3.fc40.x86_64.rpm 784e0fbc9ccb7087c10f4c41edbed13904f94244ff658f308614abe48cdf0d42 npth-1.7-1.fc40.x86_64.rpm f814bc09b50daaab468715088ec056373dbc209a5075306e4ce76f5c55eb2b42 nvme-cli-2.8-1.fc40.x86_64.rpm -deed5caa94b7590e42976c73944e882ac6be7ac94b87ea8d476a7dfe4e56c427 openldap-2.6.8-1.fc40.x86_64.rpm +ecc7bc53e45b304272ed047ef681aec637eddae7a7ff0bc851665f3ac164f8ac openldap-2.6.8-2.fc40.x86_64.rpm 5df04d37e492e5f107cc21e547240f9f98b0b7613320467bc0b08f6aa1b0fb88 openssl-libs-3.2.2-3.fc40.i686.rpm e9fca52d76eb6277b9fec3238226faafc0938806318fad1143a527fdd28a16cf openssl-libs-3.2.2-3.fc40.x86_64.rpm 9f0336deb6f1b1524ec48d837622e7e2291995369b0356d7ad1e1d427f3b659a os-prober-1.81-6.fc40.x86_64.rpm @@ -266,7 +266,7 @@ f796a31cad58f4ebea8787020868581d9a721297ee0ef6a7c63a7f8444f60c17 pcsc-lite-libs cb7c5036f1d25c696de23a6670cb64caec9945116fb0c9a93555414746ecf253 pinentry-1.3.0-2.fc40.x86_64.rpm bbb4abafa9f7664e21350b56d49af2c928288e6d4dd68c304c4ab5d45b2c8ad7 pkcs11-provider-0.3-2.fc40.x86_64.rpm f2401414fa396e3b86471c311008383bcf51755aa30697c72147892a50de8894 podman-5.3.1-1.fc40.x86_64.rpm -8a0ee0be826338862ecd65d04032b43122cda333ba6bb6891b2ae6aed5208832 policycoreutils-3.7-3.fc40.x86_64.rpm +358aa7593e83481c7d0be87ec18bf24cad5bf2a5cf54763552ede4c8db3c75a6 policycoreutils-3.7-6.fc40.x86_64.rpm 30a4f9d3631aaa1280c93ce4305847a9773973aa312e1802d1cd676cb2421689 polkit-124-2.fc40.x86_64.rpm f47bc65177a8b160916c00df9c84442afa1dd353880b3c0503d5a0b052d4956c polkit-libs-124-2.fc40.x86_64.rpm b7decdd8a6fcb175fea2bb39bb1dbecad1ba820c365bab5a273a7b3982e55157 polkit-pkla-compat-0.1-28.fc40.x86_64.rpm @@ -274,7 +274,7 @@ c03ba1c46e0e2dda36e654941f307aaa0d6574ee5143d6fec6e9af2bdf3252a2 popt-1.19-6.fc 8a414572157d7e450eddcdc909521e09373289cc7a48ebc15f7b0c9922c17262 procps-ng-4.0.4-3.fc40.x86_64.rpm af85755cda79959a19161ebc26a45e507003298bd97b472b9ab0d512afa5e46a protobuf-c-1.5.0-3.fc40.x86_64.rpm 45ff2e9814aa059f323b23710c73309d41d36306667a3004f5fbb86b0cab4484 psmisc-23.6-6.fc40.x86_64.rpm -cca50802d4f75306bc37126feb92db79fed44dcdabf76c1556853334995b9d3b publicsuffix-list-dafsa-20240107-3.fc40.noarch.rpm +c000cbb0a7df2c0c61559ab3f3732eacd163b171673298f4ec043cb6d223f364 publicsuffix-list-dafsa-20250116-1.fc40.noarch.rpm 7c703b431508f44c5184b5c1df052ed0f49b7439d68aa3597a9a57a5b26bd648 python-pip-wheel-23.3.2-2.fc40.noarch.rpm 86e17167996c17798e116974f42e63dc2e0ac6bce1c10a47416d421c785a5ea4 python-unversioned-command-3.12.8-2.fc40.noarch.rpm 5526220160d59c64689dd2c017a03a26a909c5c50f7973c8bf3750f8f39ca114 python3-3.12.8-2.fc40.x86_64.rpm From 245700ee543975de3021a8ba2b28d2ceceb99fcf Mon Sep 17 00:00:00 2001 From: Moritz Sanft <58110325+msanft@users.noreply.github.com> Date: Mon, 3 Feb 2025 20:31:37 +0100 Subject: [PATCH 097/311] helm: grant configmap watch permission to constellation-operator-controller-manager (#3632) --- .../charts/constellation-operator/templates/manager-rbac.yaml | 1 + .../charts/constellation-operator/templates/manager-rbac.yaml | 1 + .../charts/constellation-operator/templates/manager-rbac.yaml | 1 + .../charts/constellation-operator/templates/manager-rbac.yaml | 1 + .../charts/constellation-operator/templates/manager-rbac.yaml | 1 + .../charts/constellation-operator/templates/manager-rbac.yaml | 1 + .../controllers/nodeversion_controller.go | 2 +- 7 files changed, 7 insertions(+), 1 deletion(-) diff --git a/internal/constellation/helm/charts/edgeless/operators/charts/constellation-operator/templates/manager-rbac.yaml b/internal/constellation/helm/charts/edgeless/operators/charts/constellation-operator/templates/manager-rbac.yaml index 45dddbdd9..2aee2191c 100644 --- a/internal/constellation/helm/charts/edgeless/operators/charts/constellation-operator/templates/manager-rbac.yaml +++ b/internal/constellation/helm/charts/edgeless/operators/charts/constellation-operator/templates/manager-rbac.yaml @@ -13,6 +13,7 @@ rules: verbs: - get - list + - watch - apiGroups: - "" resources: diff --git a/internal/constellation/helm/testdata/AWS/constellation-operators/charts/constellation-operator/templates/manager-rbac.yaml b/internal/constellation/helm/testdata/AWS/constellation-operators/charts/constellation-operator/templates/manager-rbac.yaml index 4fa4863c8..465bee103 100644 --- a/internal/constellation/helm/testdata/AWS/constellation-operators/charts/constellation-operator/templates/manager-rbac.yaml +++ b/internal/constellation/helm/testdata/AWS/constellation-operators/charts/constellation-operator/templates/manager-rbac.yaml @@ -16,6 +16,7 @@ rules: verbs: - get - list + - watch - apiGroups: - "" resources: diff --git a/internal/constellation/helm/testdata/Azure/constellation-operators/charts/constellation-operator/templates/manager-rbac.yaml b/internal/constellation/helm/testdata/Azure/constellation-operators/charts/constellation-operator/templates/manager-rbac.yaml index 4fa4863c8..465bee103 100644 --- a/internal/constellation/helm/testdata/Azure/constellation-operators/charts/constellation-operator/templates/manager-rbac.yaml +++ b/internal/constellation/helm/testdata/Azure/constellation-operators/charts/constellation-operator/templates/manager-rbac.yaml @@ -16,6 +16,7 @@ rules: verbs: - get - list + - watch - apiGroups: - "" resources: diff --git a/internal/constellation/helm/testdata/GCP/constellation-operators/charts/constellation-operator/templates/manager-rbac.yaml b/internal/constellation/helm/testdata/GCP/constellation-operators/charts/constellation-operator/templates/manager-rbac.yaml index 4fa4863c8..465bee103 100644 --- a/internal/constellation/helm/testdata/GCP/constellation-operators/charts/constellation-operator/templates/manager-rbac.yaml +++ b/internal/constellation/helm/testdata/GCP/constellation-operators/charts/constellation-operator/templates/manager-rbac.yaml @@ -16,6 +16,7 @@ rules: verbs: - get - list + - watch - apiGroups: - "" resources: diff --git a/internal/constellation/helm/testdata/OpenStack/constellation-operators/charts/constellation-operator/templates/manager-rbac.yaml b/internal/constellation/helm/testdata/OpenStack/constellation-operators/charts/constellation-operator/templates/manager-rbac.yaml index 4fa4863c8..465bee103 100644 --- a/internal/constellation/helm/testdata/OpenStack/constellation-operators/charts/constellation-operator/templates/manager-rbac.yaml +++ b/internal/constellation/helm/testdata/OpenStack/constellation-operators/charts/constellation-operator/templates/manager-rbac.yaml @@ -16,6 +16,7 @@ rules: verbs: - get - list + - watch - apiGroups: - "" resources: diff --git a/internal/constellation/helm/testdata/QEMU/constellation-operators/charts/constellation-operator/templates/manager-rbac.yaml b/internal/constellation/helm/testdata/QEMU/constellation-operators/charts/constellation-operator/templates/manager-rbac.yaml index 4fa4863c8..465bee103 100644 --- a/internal/constellation/helm/testdata/QEMU/constellation-operators/charts/constellation-operator/templates/manager-rbac.yaml +++ b/internal/constellation/helm/testdata/QEMU/constellation-operators/charts/constellation-operator/templates/manager-rbac.yaml @@ -16,6 +16,7 @@ rules: verbs: - get - list + - watch - apiGroups: - "" resources: diff --git a/operators/constellation-node-operator/controllers/nodeversion_controller.go b/operators/constellation-node-operator/controllers/nodeversion_controller.go index ff706c702..fc185b1e2 100644 --- a/operators/constellation-node-operator/controllers/nodeversion_controller.go +++ b/operators/constellation-node-operator/controllers/nodeversion_controller.go @@ -83,7 +83,7 @@ func NewNodeVersionReconciler(nodeReplacer nodeReplacer, etcdRemover etcdRemover //+kubebuilder:rbac:groups=nodemaintenance.medik8s.io,resources=nodemaintenances,verbs=get;list;watch;create;update;patch;delete //+kubebuilder:rbac:groups="",resources=nodes,verbs=get;list;watch;create;update;patch;delete //+kubebuilder:rbac:groups="",resources=nodes/status,verbs=get -//+kubebuilder:rbac:groups="",resources=configmaps,verbs=list;get +//+kubebuilder:rbac:groups="",resources=configmaps,verbs=list;get;watch // Reconcile replaces outdated nodes with new nodes as specified in the NodeVersion spec. func (r *NodeVersionReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Result, error) { From f1e30863c17d6ae45203356a8d59329bd309bc9d Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 4 Feb 2025 08:27:37 +0100 Subject: [PATCH 098/311] deps: update GitHub action dependencies (#3633) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/actions/build_micro_service/action.yml | 2 +- .github/actions/cdbg_deploy/action.yml | 4 ++-- .github/actions/constellation_destroy/action.yml | 2 +- .github/actions/constellation_iam_destroy/action.yml | 2 +- .github/actions/e2e_attestationconfigapi/action.yml | 2 +- .github/actions/e2e_benchmark/action.yml | 4 ++-- .github/actions/e2e_cleanup_timeframe/action.yml | 2 +- .github/actions/e2e_sonobuoy/action.yml | 2 +- .github/actions/e2e_test/action.yml | 4 ++-- .github/actions/e2e_verify/action.yml | 2 +- .github/actions/find_latest_image/action.yml | 2 +- .github/actions/login_gcp/action.yml | 4 ++-- .github/actions/select_image/action.yml | 2 +- .github/workflows/build-ccm-gcp.yml | 2 +- .github/workflows/build-gcp-guest-agent.yml | 2 +- .github/workflows/build-os-image.yml | 2 +- .github/workflows/codeql.yml | 4 ++-- .github/workflows/e2e-test-provider-example.yml | 2 +- .github/workflows/e2e-test-release.yml | 2 +- .github/workflows/e2e-test.yml | 2 +- .github/workflows/e2e-upgrade.yml | 6 +++--- .github/workflows/on-release.yml | 2 +- .github/workflows/purge-main.yml | 2 +- .github/workflows/scorecard.yml | 2 +- .github/workflows/test-tidy.yml | 2 +- .github/workflows/test-unittest.yml | 2 +- .github/workflows/update-rpms.yml | 2 +- .github/workflows/versionsapi.yml | 6 +++--- 28 files changed, 37 insertions(+), 37 deletions(-) diff --git a/.github/actions/build_micro_service/action.yml b/.github/actions/build_micro_service/action.yml index 6cf2e3895..9ab77067e 100644 --- a/.github/actions/build_micro_service/action.yml +++ b/.github/actions/build_micro_service/action.yml @@ -62,7 +62,7 @@ runs: - name: Build and push container image id: build-micro-service - uses: docker/build-push-action@67a2d409c0a876cbe6b11854e3e25193efe4e62d # v6.12.0 + uses: docker/build-push-action@ca877d9245402d1537745e0e356eab47c3520991 # v6.13.0 with: context: . file: ${{ inputs.dockerfile }} diff --git a/.github/actions/cdbg_deploy/action.yml b/.github/actions/cdbg_deploy/action.yml index b82a67226..decf419fc 100644 --- a/.github/actions/cdbg_deploy/action.yml +++ b/.github/actions/cdbg_deploy/action.yml @@ -61,7 +61,7 @@ runs: - name: Login to AWS (IAM service principal) if: inputs.cloudProvider == 'aws' - uses: aws-actions/configure-aws-credentials@e3dd6a429d7300a6a4c196c26e071d42e0343502 # v4.0.2 + uses: aws-actions/configure-aws-credentials@4fc4975a852c8cd99761e2de1f4ba73402e44dd9 # v4.0.3 with: role-to-assume: arn:aws:iam::795746500882:role/GithubActionsE2EIAM aws-region: eu-central-1 @@ -80,7 +80,7 @@ runs: - name: Login to AWS (Cluster service principal) if: inputs.cloudProvider == 'aws' - uses: aws-actions/configure-aws-credentials@e3dd6a429d7300a6a4c196c26e071d42e0343502 # v4.0.2 + uses: aws-actions/configure-aws-credentials@4fc4975a852c8cd99761e2de1f4ba73402e44dd9 # v4.0.3 with: role-to-assume: arn:aws:iam::795746500882:role/GithubActionsE2ECluster aws-region: eu-central-1 diff --git a/.github/actions/constellation_destroy/action.yml b/.github/actions/constellation_destroy/action.yml index 9ae79efd2..7d38d1bb5 100644 --- a/.github/actions/constellation_destroy/action.yml +++ b/.github/actions/constellation_destroy/action.yml @@ -67,7 +67,7 @@ runs: - name: Login to AWS (Cluster role) if: inputs.cloudProvider == 'aws' - uses: aws-actions/configure-aws-credentials@e3dd6a429d7300a6a4c196c26e071d42e0343502 # v4.0.2 + uses: aws-actions/configure-aws-credentials@4fc4975a852c8cd99761e2de1f4ba73402e44dd9 # v4.0.3 with: role-to-assume: arn:aws:iam::795746500882:role/GithubActionsE2ECluster aws-region: eu-central-1 diff --git a/.github/actions/constellation_iam_destroy/action.yml b/.github/actions/constellation_iam_destroy/action.yml index e89dd7c5d..b5fa0083e 100644 --- a/.github/actions/constellation_iam_destroy/action.yml +++ b/.github/actions/constellation_iam_destroy/action.yml @@ -23,7 +23,7 @@ runs: - name: Login to AWS (IAM role) if: inputs.cloudProvider == 'aws' - uses: aws-actions/configure-aws-credentials@e3dd6a429d7300a6a4c196c26e071d42e0343502 # v4.0.2 + uses: aws-actions/configure-aws-credentials@4fc4975a852c8cd99761e2de1f4ba73402e44dd9 # v4.0.3 with: role-to-assume: arn:aws:iam::795746500882:role/GithubActionsE2EIAM aws-region: eu-central-1 diff --git a/.github/actions/e2e_attestationconfigapi/action.yml b/.github/actions/e2e_attestationconfigapi/action.yml index 02ec28084..c3c49deaa 100644 --- a/.github/actions/e2e_attestationconfigapi/action.yml +++ b/.github/actions/e2e_attestationconfigapi/action.yml @@ -19,7 +19,7 @@ runs: uses: ./.github/actions/setup_bazel_nix - name: Login to AWS - uses: aws-actions/configure-aws-credentials@e3dd6a429d7300a6a4c196c26e071d42e0343502 # v4.0.2 + uses: aws-actions/configure-aws-credentials@4fc4975a852c8cd99761e2de1f4ba73402e44dd9 # v4.0.3 with: role-to-assume: arn:aws:iam::795746500882:role/GithubTestResourceAPI aws-region: eu-west-1 diff --git a/.github/actions/e2e_benchmark/action.yml b/.github/actions/e2e_benchmark/action.yml index d55a4c214..205c93c7c 100644 --- a/.github/actions/e2e_benchmark/action.yml +++ b/.github/actions/e2e_benchmark/action.yml @@ -32,7 +32,7 @@ runs: steps: - name: Setup python - uses: actions/setup-python@0b93645e9fea7318ecaed2b359559ac225c90a2b # v5.3.0 + uses: actions/setup-python@42375524e23c412d93fb67b49958b491fce71c38 # v5.4.0 with: python-version: "3.10" @@ -166,7 +166,7 @@ runs: encryptionSecret: ${{ inputs.encryptionSecret }} - name: Assume AWS role to retrieve and update benchmarks in S3 - uses: aws-actions/configure-aws-credentials@e3dd6a429d7300a6a4c196c26e071d42e0343502 # v4.0.2 + uses: aws-actions/configure-aws-credentials@4fc4975a852c8cd99761e2de1f4ba73402e44dd9 # v4.0.3 with: role-to-assume: arn:aws:iam::795746500882:role/GithubActionUpdateBenchmarks aws-region: us-east-2 diff --git a/.github/actions/e2e_cleanup_timeframe/action.yml b/.github/actions/e2e_cleanup_timeframe/action.yml index bfe40cbf3..8c3e64ce7 100644 --- a/.github/actions/e2e_cleanup_timeframe/action.yml +++ b/.github/actions/e2e_cleanup_timeframe/action.yml @@ -16,7 +16,7 @@ runs: using: "composite" steps: - name: Authenticate AWS - uses: aws-actions/configure-aws-credentials@e3dd6a429d7300a6a4c196c26e071d42e0343502 # v4.0.2 + uses: aws-actions/configure-aws-credentials@4fc4975a852c8cd99761e2de1f4ba73402e44dd9 # v4.0.3 with: role-to-assume: arn:aws:iam::795746500882:role/GithubActionsE2EDestroy aws-region: eu-central-1 diff --git a/.github/actions/e2e_sonobuoy/action.yml b/.github/actions/e2e_sonobuoy/action.yml index 40380f7ad..1f1d2dec7 100644 --- a/.github/actions/e2e_sonobuoy/action.yml +++ b/.github/actions/e2e_sonobuoy/action.yml @@ -70,7 +70,7 @@ runs: - name: Publish test results if: (!env.ACT) && contains(inputs.sonobuoyTestSuiteCmd, '--plugin e2e') - uses: mikepenz/action-junit-report@62516aa379bff6370c95fd5894d5a27fb6619d9b # v5.2.0 + uses: mikepenz/action-junit-report@ee6b445351cd81e2f73a16a0e52d598aeac2197f # v5.3.0 with: report_paths: "**/junit_01.xml" fail_on_failure: true diff --git a/.github/actions/e2e_test/action.yml b/.github/actions/e2e_test/action.yml index 14a31500e..505e61d4c 100644 --- a/.github/actions/e2e_test/action.yml +++ b/.github/actions/e2e_test/action.yml @@ -225,7 +225,7 @@ runs: - name: Login to AWS (IAM role) if: inputs.cloudProvider == 'aws' - uses: aws-actions/configure-aws-credentials@e3dd6a429d7300a6a4c196c26e071d42e0343502 # v4.0.2 + uses: aws-actions/configure-aws-credentials@4fc4975a852c8cd99761e2de1f4ba73402e44dd9 # v4.0.3 with: role-to-assume: arn:aws:iam::795746500882:role/GithubActionsE2EIAM aws-region: eu-central-1 @@ -290,7 +290,7 @@ runs: - name: Login to AWS (Cluster role) if: inputs.cloudProvider == 'aws' - uses: aws-actions/configure-aws-credentials@e3dd6a429d7300a6a4c196c26e071d42e0343502 # v4.0.2 + uses: aws-actions/configure-aws-credentials@4fc4975a852c8cd99761e2de1f4ba73402e44dd9 # v4.0.3 with: role-to-assume: arn:aws:iam::795746500882:role/GithubActionsE2ECluster aws-region: eu-central-1 diff --git a/.github/actions/e2e_verify/action.yml b/.github/actions/e2e_verify/action.yml index 22b86e893..e64c04bab 100644 --- a/.github/actions/e2e_verify/action.yml +++ b/.github/actions/e2e_verify/action.yml @@ -82,7 +82,7 @@ runs: - name: Login to AWS if: github.ref_name == 'main' - uses: aws-actions/configure-aws-credentials@e3dd6a429d7300a6a4c196c26e071d42e0343502 # v4.0.2 + uses: aws-actions/configure-aws-credentials@4fc4975a852c8cd99761e2de1f4ba73402e44dd9 # v4.0.3 with: role-to-assume: arn:aws:iam::795746500882:role/GitHubConstellationImagePipeline aws-region: eu-central-1 diff --git a/.github/actions/find_latest_image/action.yml b/.github/actions/find_latest_image/action.yml index 2c15f2327..fc70e207c 100644 --- a/.github/actions/find_latest_image/action.yml +++ b/.github/actions/find_latest_image/action.yml @@ -38,7 +38,7 @@ runs: - name: Login to AWS if: inputs.imageVersion == '' - uses: aws-actions/configure-aws-credentials@e3dd6a429d7300a6a4c196c26e071d42e0343502 # v4.0.2 + uses: aws-actions/configure-aws-credentials@4fc4975a852c8cd99761e2de1f4ba73402e44dd9 # v4.0.3 with: role-to-assume: arn:aws:iam::795746500882:role/GithubConstellationVersionsAPIRead aws-region: eu-central-1 diff --git a/.github/actions/login_gcp/action.yml b/.github/actions/login_gcp/action.yml index f6c19524f..bea30ac4e 100644 --- a/.github/actions/login_gcp/action.yml +++ b/.github/actions/login_gcp/action.yml @@ -20,11 +20,11 @@ runs: echo "GOOGLE_CLOUD_PROJECT=" >> "$GITHUB_ENV" - name: Authorize GCP access - uses: google-github-actions/auth@6fc4af4b145ae7821d527454aa9bd537d1f2dc5f # v2.1.7 + uses: google-github-actions/auth@71f986410dfbc7added4569d411d040a91dc6935 # v2.1.8 with: workload_identity_provider: projects/1052692473304/locations/global/workloadIdentityPools/constellation-ci-pool/providers/constellation-ci-provider service_account: ${{ inputs.service_account }} # Even if preinstalled in Github Actions runner image, this setup does some magic authentication required for gsutil. - name: Set up Cloud SDK - uses: google-github-actions/setup-gcloud@6189d56e4096ee891640bb02ac264be376592d6a # v2.1.2 + uses: google-github-actions/setup-gcloud@77e7a554d41e2ee56fc945c52dfd3f33d12def9a # v2.1.4 diff --git a/.github/actions/select_image/action.yml b/.github/actions/select_image/action.yml index e36e145ed..541e9d152 100644 --- a/.github/actions/select_image/action.yml +++ b/.github/actions/select_image/action.yml @@ -18,7 +18,7 @@ runs: using: "composite" steps: - name: Login to AWS - uses: aws-actions/configure-aws-credentials@e3dd6a429d7300a6a4c196c26e071d42e0343502 # v4.0.2 + uses: aws-actions/configure-aws-credentials@4fc4975a852c8cd99761e2de1f4ba73402e44dd9 # v4.0.3 with: role-to-assume: arn:aws:iam::795746500882:role/GithubConstellationVersionsAPIRead aws-region: eu-central-1 diff --git a/.github/workflows/build-ccm-gcp.yml b/.github/workflows/build-ccm-gcp.yml index 2f65d49c5..f62f26a14 100644 --- a/.github/workflows/build-ccm-gcp.yml +++ b/.github/workflows/build-ccm-gcp.yml @@ -113,7 +113,7 @@ jobs: - name: Build and push container image id: build - uses: docker/build-push-action@67a2d409c0a876cbe6b11854e3e25193efe4e62d # v6.12.0 + uses: docker/build-push-action@ca877d9245402d1537745e0e356eab47c3520991 # v6.13.0 with: context: ./cloud-provider-gcp push: ${{ github.ref_name == 'main' }} diff --git a/.github/workflows/build-gcp-guest-agent.yml b/.github/workflows/build-gcp-guest-agent.yml index bf9d15c78..280202889 100644 --- a/.github/workflows/build-gcp-guest-agent.yml +++ b/.github/workflows/build-gcp-guest-agent.yml @@ -114,7 +114,7 @@ jobs: - name: Build and push container image if: steps.needs-build.outputs.out == 'true' id: build - uses: docker/build-push-action@67a2d409c0a876cbe6b11854e3e25193efe4e62d # v6.12.0 + uses: docker/build-push-action@ca877d9245402d1537745e0e356eab47c3520991 # v6.13.0 with: context: ./guest-agent file: ./constellation/3rdparty/gcp-guest-agent/Dockerfile diff --git a/.github/workflows/build-os-image.yml b/.github/workflows/build-os-image.yml index f82aa4504..d3c7aed2a 100644 --- a/.github/workflows/build-os-image.yml +++ b/.github/workflows/build-os-image.yml @@ -147,7 +147,7 @@ jobs: useCache: "false" - name: Login to AWS - uses: aws-actions/configure-aws-credentials@e3dd6a429d7300a6a4c196c26e071d42e0343502 # v4.0.2 + uses: aws-actions/configure-aws-credentials@4fc4975a852c8cd99761e2de1f4ba73402e44dd9 # v4.0.3 with: role-to-assume: arn:aws:iam::795746500882:role/GitHubConstellationImagePipeline aws-region: eu-central-1 diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index b57240d6c..d8cc0a18e 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -44,7 +44,7 @@ jobs: cache: false - name: Initialize CodeQL - uses: github/codeql-action/init@b6a472f63d85b9c78a3ac5e89422239fc15e9b3c # v3.28.1 + uses: github/codeql-action/init@dd746615b3b9d728a6a37ca2045b68ca76d4841a # v3.28.8 with: languages: ${{ matrix.language }} @@ -63,6 +63,6 @@ jobs: echo "::endgroup::" - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@b6a472f63d85b9c78a3ac5e89422239fc15e9b3c # v3.28.1 + uses: github/codeql-action/analyze@dd746615b3b9d728a6a37ca2045b68ca76d4841a # v3.28.8 with: category: "/language:${{ matrix.language }}" diff --git a/.github/workflows/e2e-test-provider-example.yml b/.github/workflows/e2e-test-provider-example.yml index df52b2341..e8edb07bf 100644 --- a/.github/workflows/e2e-test-provider-example.yml +++ b/.github/workflows/e2e-test-provider-example.yml @@ -154,7 +154,7 @@ jobs: - name: Login to AWS (IAM + Cluster role) if: steps.determine.outputs.cloudProvider == 'aws' - uses: aws-actions/configure-aws-credentials@e3dd6a429d7300a6a4c196c26e071d42e0343502 # v4.0.2 + uses: aws-actions/configure-aws-credentials@4fc4975a852c8cd99761e2de1f4ba73402e44dd9 # v4.0.3 with: role-to-assume: arn:aws:iam::795746500882:role/GithubActionsE2ETerraform aws-region: eu-central-1 diff --git a/.github/workflows/e2e-test-release.yml b/.github/workflows/e2e-test-release.yml index 844a86e88..2a26d71bb 100644 --- a/.github/workflows/e2e-test-release.yml +++ b/.github/workflows/e2e-test-release.yml @@ -342,7 +342,7 @@ jobs: - name: Set up gcloud CLI (macOS) if: steps.split-attestationVariant.outputs.provider == 'gcp' && runner.os == 'macOS' - uses: google-github-actions/setup-gcloud@6189d56e4096ee891640bb02ac264be376592d6a # v2.1.2 + uses: google-github-actions/setup-gcloud@77e7a554d41e2ee56fc945c52dfd3f33d12def9a # v2.1.4 - name: Run E2E test id: e2e_test diff --git a/.github/workflows/e2e-test.yml b/.github/workflows/e2e-test.yml index 031ba8429..485024b87 100644 --- a/.github/workflows/e2e-test.yml +++ b/.github/workflows/e2e-test.yml @@ -232,7 +232,7 @@ jobs: - name: Set up gcloud CLI (macOS) if: needs.generate-input-parameters.outputs.cloudProvider == 'gcp' && runner.os == 'macOS' - uses: google-github-actions/setup-gcloud@6189d56e4096ee891640bb02ac264be376592d6a # v2.1.2 + uses: google-github-actions/setup-gcloud@77e7a554d41e2ee56fc945c52dfd3f33d12def9a # v2.1.4 - name: Run manual E2E test id: e2e_test diff --git a/.github/workflows/e2e-upgrade.yml b/.github/workflows/e2e-upgrade.yml index 2f5a49098..508ecd5a2 100644 --- a/.github/workflows/e2e-upgrade.yml +++ b/.github/workflows/e2e-upgrade.yml @@ -274,7 +274,7 @@ jobs: path: build/constellation - name: Login to AWS - uses: aws-actions/configure-aws-credentials@e3dd6a429d7300a6a4c196c26e071d42e0343502 # v4.0.2 + uses: aws-actions/configure-aws-credentials@4fc4975a852c8cd99761e2de1f4ba73402e44dd9 # v4.0.3 with: role-to-assume: arn:aws:iam::795746500882:role/GithubConstellationVersionsAPIRead aws-region: eu-central-1 @@ -296,7 +296,7 @@ jobs: - name: Login to AWS (IAM role) if: needs.generate-input-parameters.outputs.cloudProvider == 'aws' - uses: aws-actions/configure-aws-credentials@e3dd6a429d7300a6a4c196c26e071d42e0343502 # v4.0.2 + uses: aws-actions/configure-aws-credentials@4fc4975a852c8cd99761e2de1f4ba73402e44dd9 # v4.0.3 with: role-to-assume: arn:aws:iam::795746500882:role/GithubActionsE2EIAM aws-region: eu-central-1 @@ -347,7 +347,7 @@ jobs: - name: Login to AWS (Cluster role) if: always() && needs.generate-input-parameters.outputs.cloudProvider == 'aws' - uses: aws-actions/configure-aws-credentials@e3dd6a429d7300a6a4c196c26e071d42e0343502 # v4.0.2 + uses: aws-actions/configure-aws-credentials@4fc4975a852c8cd99761e2de1f4ba73402e44dd9 # v4.0.3 with: role-to-assume: arn:aws:iam::795746500882:role/GithubActionsE2ECluster aws-region: eu-central-1 diff --git a/.github/workflows/on-release.yml b/.github/workflows/on-release.yml index 1d46df5c9..5830e5700 100644 --- a/.github/workflows/on-release.yml +++ b/.github/workflows/on-release.yml @@ -142,7 +142,7 @@ jobs: - uses: ./.github/actions/setup_bazel_nix - name: Login to AWS - uses: aws-actions/configure-aws-credentials@e3dd6a429d7300a6a4c196c26e071d42e0343502 # v4.0.2 + uses: aws-actions/configure-aws-credentials@4fc4975a852c8cd99761e2de1f4ba73402e44dd9 # v4.0.3 with: role-to-assume: arn:aws:iam::795746500882:role/GitHubConstellationImagePipeline aws-region: eu-central-1 diff --git a/.github/workflows/purge-main.yml b/.github/workflows/purge-main.yml index b2d9403c9..b61df08ea 100644 --- a/.github/workflows/purge-main.yml +++ b/.github/workflows/purge-main.yml @@ -23,7 +23,7 @@ jobs: ref: ${{ github.head_ref }} - name: Login to AWS - uses: aws-actions/configure-aws-credentials@e3dd6a429d7300a6a4c196c26e071d42e0343502 # v4.0.2 + uses: aws-actions/configure-aws-credentials@4fc4975a852c8cd99761e2de1f4ba73402e44dd9 # v4.0.3 with: role-to-assume: arn:aws:iam::795746500882:role/GithubConstellationVersionsAPIRead aws-region: eu-central-1 diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml index 7b18e3a73..9da8c94d5 100644 --- a/.github/workflows/scorecard.yml +++ b/.github/workflows/scorecard.yml @@ -37,6 +37,6 @@ jobs: retention-days: 5 - name: Upload to code-scanning - uses: github/codeql-action/upload-sarif@b6a472f63d85b9c78a3ac5e89422239fc15e9b3c # v3.28.1 + uses: github/codeql-action/upload-sarif@dd746615b3b9d728a6a37ca2045b68ca76d4841a # v3.28.8 with: sarif_file: results.sarif diff --git a/.github/workflows/test-tidy.yml b/.github/workflows/test-tidy.yml index 99585ddaf..06aef3035 100644 --- a/.github/workflows/test-tidy.yml +++ b/.github/workflows/test-tidy.yml @@ -37,7 +37,7 @@ jobs: - name: Assume AWS role to upload Bazel dependencies to S3 if: startsWith(github.head_ref, 'renovate/') - uses: aws-actions/configure-aws-credentials@e3dd6a429d7300a6a4c196c26e071d42e0343502 # v4.0.2 + uses: aws-actions/configure-aws-credentials@4fc4975a852c8cd99761e2de1f4ba73402e44dd9 # v4.0.3 with: role-to-assume: arn:aws:iam::795746500882:role/GithubConstellationMirrorWrite aws-region: eu-central-1 diff --git a/.github/workflows/test-unittest.yml b/.github/workflows/test-unittest.yml index 0f0a0054c..eb93910ab 100644 --- a/.github/workflows/test-unittest.yml +++ b/.github/workflows/test-unittest.yml @@ -49,7 +49,7 @@ jobs: rm -rf awscliv2.zip aws - name: Login to AWS (IAM role) - uses: aws-actions/configure-aws-credentials@e3dd6a429d7300a6a4c196c26e071d42e0343502 # v4.0.2 + uses: aws-actions/configure-aws-credentials@4fc4975a852c8cd99761e2de1f4ba73402e44dd9 # v4.0.3 with: role-to-assume: arn:aws:iam::795746500882:role/GithubActionGocoverage aws-region: eu-central-1 diff --git a/.github/workflows/update-rpms.yml b/.github/workflows/update-rpms.yml index 411a6cc73..9ac23eee7 100644 --- a/.github/workflows/update-rpms.yml +++ b/.github/workflows/update-rpms.yml @@ -18,7 +18,7 @@ jobs: token: ${{ secrets.CI_COMMIT_PUSH_PR }} - name: Assume AWS role to upload Bazel dependencies to S3 - uses: aws-actions/configure-aws-credentials@e3dd6a429d7300a6a4c196c26e071d42e0343502 # v4.0.2 + uses: aws-actions/configure-aws-credentials@4fc4975a852c8cd99761e2de1f4ba73402e44dd9 # v4.0.3 with: role-to-assume: arn:aws:iam::795746500882:role/GithubConstellationMirrorWrite aws-region: eu-central-1 diff --git a/.github/workflows/versionsapi.yml b/.github/workflows/versionsapi.yml index c4e62d412..bf6720474 100644 --- a/.github/workflows/versionsapi.yml +++ b/.github/workflows/versionsapi.yml @@ -149,21 +149,21 @@ jobs: - name: Login to AWS without write access if: steps.check-rights.outputs.write == 'false' - uses: aws-actions/configure-aws-credentials@e3dd6a429d7300a6a4c196c26e071d42e0343502 # v4.0.2 + uses: aws-actions/configure-aws-credentials@4fc4975a852c8cd99761e2de1f4ba73402e44dd9 # v4.0.3 with: role-to-assume: arn:aws:iam::795746500882:role/GithubConstellationVersionsAPIRead aws-region: eu-central-1 - name: Login to AWS with write access if: steps.check-rights.outputs.write == 'true' && steps.check-rights.outputs.auth == 'false' - uses: aws-actions/configure-aws-credentials@e3dd6a429d7300a6a4c196c26e071d42e0343502 # v4.0.2 + uses: aws-actions/configure-aws-credentials@4fc4975a852c8cd99761e2de1f4ba73402e44dd9 # v4.0.3 with: role-to-assume: arn:aws:iam::795746500882:role/GithubConstellationVersionsAPIWrite aws-region: eu-central-1 - name: Login to AWS with write and image remove access if: steps.check-rights.outputs.write == 'true' && steps.check-rights.outputs.auth == 'true' - uses: aws-actions/configure-aws-credentials@e3dd6a429d7300a6a4c196c26e071d42e0343502 # v4.0.2 + uses: aws-actions/configure-aws-credentials@4fc4975a852c8cd99761e2de1f4ba73402e44dd9 # v4.0.3 with: role-to-assume: arn:aws:iam::795746500882:role/GithubConstellationVersionsAPIRemove aws-region: eu-central-1 From f41c7619e180b13c0e9e4b2639358b3214e17826 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 4 Feb 2025 10:02:41 +0100 Subject: [PATCH 099/311] deps: update ubuntu:24.04 Docker digest to 7229784 (#3634) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- 3rdparty/gcp-guest-agent/Dockerfile | 2 +- docs/screencasts/docker/Dockerfile | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/3rdparty/gcp-guest-agent/Dockerfile b/3rdparty/gcp-guest-agent/Dockerfile index b79b163df..580ad2ac0 100644 --- a/3rdparty/gcp-guest-agent/Dockerfile +++ b/3rdparty/gcp-guest-agent/Dockerfile @@ -1,4 +1,4 @@ -FROM ubuntu:24.04@sha256:80dd3c3b9c6cecb9f1667e9290b3bc61b78c2678c02cbdae5f0fea92cc6734ab as build +FROM ubuntu:24.04@sha256:72297848456d5d37d1262630108ab308d3e9ec7ed1c3286a32fe09856619a782 as build # Install packages RUN apt-get update && apt-get install -y \ diff --git a/docs/screencasts/docker/Dockerfile b/docs/screencasts/docker/Dockerfile index 4a02beca2..a2e32adc1 100644 --- a/docs/screencasts/docker/Dockerfile +++ b/docs/screencasts/docker/Dockerfile @@ -1,4 +1,4 @@ -FROM ubuntu:24.04@sha256:80dd3c3b9c6cecb9f1667e9290b3bc61b78c2678c02cbdae5f0fea92cc6734ab +FROM ubuntu:24.04@sha256:72297848456d5d37d1262630108ab308d3e9ec7ed1c3286a32fe09856619a782 # Install requirements RUN apt-get update && apt-get install -y software-properties-common &&\ From 6d42d9b40e224d5bb49b7189f1183b286f1b11ab Mon Sep 17 00:00:00 2001 From: edgelessci <71088502+edgelessci@users.noreply.github.com> Date: Wed, 5 Feb 2025 08:29:26 +0100 Subject: [PATCH 100/311] image: update measurements and image version (#3636) Co-authored-by: edgelessci --- .../measurements/measurements_enterprise.go | 16 ++++++++-------- internal/config/image_enterprise.go | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/internal/attestation/measurements/measurements_enterprise.go b/internal/attestation/measurements/measurements_enterprise.go index acb8516dd..c34f04ea4 100644 --- a/internal/attestation/measurements/measurements_enterprise.go +++ b/internal/attestation/measurements/measurements_enterprise.go @@ -19,14 +19,14 @@ package measurements // revive:disable:var-naming var ( - aws_AWSNitroTPM = M{0: {Expected: []byte{0x73, 0x7f, 0x76, 0x7a, 0x12, 0xf5, 0x4e, 0x70, 0xee, 0xcb, 0xc8, 0x68, 0x40, 0x11, 0x32, 0x3a, 0xe2, 0xfe, 0x2d, 0xd9, 0xf9, 0x07, 0x85, 0x57, 0x79, 0x69, 0xd7, 0xa2, 0x01, 0x3e, 0x8c, 0x12}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x2c, 0x9e, 0x10, 0x95, 0x5d, 0xbb, 0xb5, 0xe3, 0x11, 0xff, 0xe2, 0x83, 0x20, 0x2f, 0xb3, 0x5b, 0x92, 0xed, 0x2b, 0x66, 0x1f, 0xa6, 0x67, 0x7f, 0x30, 0x73, 0x70, 0x0c, 0xea, 0xa4, 0xdd, 0xf5}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xed, 0x1c, 0x09, 0xd6, 0xd6, 0x89, 0x4c, 0x3f, 0xc5, 0x94, 0x90, 0xa5, 0xd0, 0x1b, 0x09, 0xca, 0x10, 0x8a, 0x2d, 0x64, 0xda, 0x4c, 0xce, 0x8a, 0x9d, 0x65, 0xcf, 0x5f, 0x24, 0xad, 0x1f, 0x71}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xf0, 0x06, 0x6c, 0xd4, 0xda, 0x0d, 0x6c, 0x79, 0x39, 0x20, 0xd1, 0x40, 0x83, 0x6a, 0xce, 0x76, 0x51, 0x90, 0x09, 0x0f, 0xe5, 0x09, 0xf5, 0xf9, 0x89, 0x2a, 0x2a, 0x4d, 0x44, 0x4a, 0x0a, 0x38}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - aws_AWSSEVSNP = M{0: {Expected: []byte{0xd6, 0xdf, 0x85, 0x53, 0x58, 0xf5, 0xb1, 0x0f, 0x06, 0xf0, 0xfa, 0xb3, 0xf4, 0x08, 0xad, 0x26, 0xcd, 0x16, 0x5a, 0x29, 0x49, 0xba, 0xd6, 0x9e, 0x2c, 0xc7, 0x56, 0x92, 0x52, 0x9e, 0x66, 0x2a}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x4a, 0x8a, 0x64, 0x5e, 0xbf, 0x97, 0xa3, 0xdf, 0xa0, 0x30, 0x54, 0xef, 0x41, 0x70, 0x3b, 0x69, 0x7a, 0x24, 0x76, 0xe9, 0x21, 0x8e, 0xe8, 0x70, 0xf6, 0x52, 0x22, 0x27, 0xb5, 0x0c, 0xe4, 0x6b}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x69, 0x26, 0xc8, 0x57, 0x6c, 0xc4, 0xb8, 0x11, 0xa2, 0x57, 0x71, 0xb7, 0xdb, 0xc7, 0xf5, 0x5d, 0xad, 0x2a, 0xb8, 0x72, 0x52, 0xac, 0x9f, 0xab, 0xfe, 0x77, 0x63, 0x77, 0x67, 0x58, 0xb1, 0x9b}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x1c, 0x4d, 0xaf, 0xf7, 0x2e, 0x6f, 0x55, 0xf7, 0x79, 0xeb, 0x80, 0x65, 0xe3, 0x2a, 0xd9, 0xa9, 0xb1, 0x6a, 0xf1, 0x95, 0xca, 0x13, 0xad, 0x5c, 0x6e, 0x5f, 0x88, 0xa1, 0xf5, 0x9f, 0xe2, 0x94}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - azure_AzureSEVSNP = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x93, 0x75, 0x8c, 0x78, 0x83, 0x4a, 0x8e, 0x73, 0x4d, 0x0d, 0x57, 0x19, 0xae, 0xa8, 0xf8, 0x19, 0x00, 0xe6, 0xfe, 0x39, 0x84, 0xf6, 0x99, 0x86, 0x3e, 0xa2, 0x11, 0x90, 0xdd, 0x04, 0xf7, 0xc1}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x31, 0xe2, 0x18, 0x94, 0x3c, 0xfe, 0x71, 0xe3, 0x1c, 0xb7, 0x3e, 0xf6, 0x48, 0x14, 0x84, 0x1b, 0x0f, 0xd8, 0xf9, 0x71, 0xa0, 0x2d, 0xe9, 0xf3, 0x2e, 0x62, 0x1b, 0x6b, 0xda, 0x92, 0x99, 0xcc}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x1f, 0xc1, 0x50, 0xb8, 0xa7, 0x57, 0xad, 0x94, 0x13, 0x59, 0x29, 0xb2, 0x32, 0x2d, 0x92, 0x83, 0x3f, 0x43, 0x6a, 0xe4, 0x4e, 0x59, 0xd1, 0x62, 0x08, 0x43, 0xd6, 0xb7, 0x5f, 0x87, 0x6d, 0xdb}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - azure_AzureTDX = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x62, 0xd1, 0x5e, 0x83, 0x62, 0x8b, 0x45, 0x93, 0xb8, 0x6a, 0xf6, 0x3e, 0xcd, 0x9e, 0x77, 0xca, 0x47, 0x3b, 0x06, 0x39, 0x22, 0x11, 0x40, 0x3c, 0xd7, 0xa8, 0x8c, 0x1f, 0xde, 0x57, 0x2e, 0xc6}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xd7, 0x7c, 0xda, 0x97, 0x5c, 0x6d, 0x7c, 0x55, 0x6a, 0xd3, 0x14, 0x4e, 0x1f, 0x00, 0x49, 0x15, 0xe8, 0xb2, 0xb7, 0x2b, 0x27, 0x00, 0x81, 0xd0, 0x21, 0xa9, 0xda, 0xd3, 0x7c, 0xfd, 0x7f, 0xc9}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x06, 0x1a, 0xc3, 0xed, 0x82, 0x7e, 0xfc, 0x33, 0x14, 0x4c, 0xc1, 0xff, 0x03, 0x12, 0x42, 0xc1, 0x36, 0xfd, 0x79, 0x6c, 0x48, 0xc2, 0x27, 0x6c, 0xea, 0xf8, 0x8b, 0xbd, 0xf4, 0x5a, 0x81, 0x02}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + aws_AWSNitroTPM = M{0: {Expected: []byte{0x73, 0x7f, 0x76, 0x7a, 0x12, 0xf5, 0x4e, 0x70, 0xee, 0xcb, 0xc8, 0x68, 0x40, 0x11, 0x32, 0x3a, 0xe2, 0xfe, 0x2d, 0xd9, 0xf9, 0x07, 0x85, 0x57, 0x79, 0x69, 0xd7, 0xa2, 0x01, 0x3e, 0x8c, 0x12}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x97, 0xf3, 0x8b, 0x8d, 0x26, 0x7a, 0x0e, 0xb1, 0x80, 0x94, 0xf1, 0xf1, 0xd9, 0xf5, 0xb5, 0x84, 0xa2, 0xde, 0x32, 0xcc, 0xaf, 0x77, 0x93, 0x0b, 0x1e, 0xb9, 0x5c, 0x4e, 0x0b, 0x64, 0x8d, 0xcd}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xed, 0x26, 0xb9, 0xda, 0xc1, 0x07, 0x79, 0x80, 0x2e, 0x9c, 0x88, 0xd0, 0x5f, 0x51, 0xa5, 0x74, 0x59, 0x8a, 0x8d, 0xbc, 0xfd, 0xa2, 0x44, 0x8c, 0x14, 0xb8, 0x15, 0xdc, 0xdd, 0xde, 0x20, 0x31}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x1b, 0xf6, 0x6e, 0x8e, 0xe1, 0x2e, 0x9f, 0x24, 0x46, 0xbf, 0x71, 0xcd, 0x5d, 0x6a, 0x7e, 0x91, 0x52, 0x4d, 0x54, 0x7c, 0xe3, 0x65, 0xaa, 0x87, 0xa0, 0x1e, 0xbe, 0x5c, 0x13, 0x4f, 0xfa, 0x21}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + aws_AWSSEVSNP = M{0: {Expected: []byte{0xd6, 0xdf, 0x85, 0x53, 0x58, 0xf5, 0xb1, 0x0f, 0x06, 0xf0, 0xfa, 0xb3, 0xf4, 0x08, 0xad, 0x26, 0xcd, 0x16, 0x5a, 0x29, 0x49, 0xba, 0xd6, 0x9e, 0x2c, 0xc7, 0x56, 0x92, 0x52, 0x9e, 0x66, 0x2a}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xab, 0x56, 0xce, 0x0f, 0x4f, 0xef, 0x54, 0x93, 0xf5, 0x0d, 0xfa, 0xb2, 0x7e, 0x5a, 0xa1, 0x7e, 0x7b, 0x5f, 0xbd, 0x64, 0xad, 0xfa, 0xfa, 0x9c, 0x97, 0x84, 0x4e, 0xcb, 0x04, 0x3f, 0x9c, 0x72}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xd5, 0xb1, 0xa7, 0xba, 0x59, 0x9d, 0x1c, 0x39, 0xf9, 0xe7, 0xf0, 0x1c, 0x5d, 0xec, 0x7c, 0x9c, 0xc3, 0x25, 0xa0, 0xce, 0x0f, 0x35, 0x99, 0x9e, 0x78, 0x01, 0xf5, 0x29, 0xfa, 0xc5, 0x10, 0x3b}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x3c, 0xa6, 0x82, 0xeb, 0x11, 0x83, 0xb6, 0xf8, 0x2b, 0x05, 0xb9, 0x3a, 0xfe, 0xd5, 0x26, 0xad, 0xbc, 0xf2, 0x33, 0x55, 0x9a, 0xf3, 0x0e, 0x51, 0xe2, 0x64, 0xb9, 0x8a, 0xad, 0x36, 0xba, 0xa5}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + azure_AzureSEVSNP = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x83, 0x12, 0x2b, 0x18, 0x03, 0x95, 0x6c, 0x02, 0xbf, 0x0f, 0x9c, 0x33, 0x99, 0xe9, 0xee, 0xdc, 0xf8, 0xac, 0xb5, 0x4a, 0xfa, 0x98, 0xa6, 0x0a, 0xfd, 0xc3, 0xd7, 0xd8, 0xce, 0x97, 0x30, 0xed}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x88, 0x2c, 0x4b, 0x0b, 0x7a, 0x45, 0x39, 0xa5, 0x7b, 0x6a, 0x0c, 0xc5, 0xf4, 0x6a, 0x8d, 0x28, 0xd3, 0x85, 0xdb, 0x5f, 0xb0, 0xfd, 0x11, 0xd6, 0x94, 0x38, 0x63, 0xce, 0x72, 0x58, 0x97, 0x66}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xe2, 0xa7, 0x5a, 0x6d, 0x93, 0x73, 0x96, 0xff, 0x24, 0x95, 0x54, 0x64, 0xcf, 0x7b, 0xd8, 0x20, 0xb4, 0x82, 0xd4, 0xfd, 0x0e, 0xb8, 0xf3, 0x3e, 0xea, 0x5d, 0xf6, 0x0e, 0x99, 0x70, 0x6f, 0xd2}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + azure_AzureTDX = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x80, 0x29, 0x20, 0xad, 0x30, 0x6f, 0x02, 0x41, 0xd1, 0x45, 0xb2, 0x63, 0x37, 0xb8, 0xc1, 0x53, 0x27, 0xe5, 0x92, 0xc3, 0xe7, 0xf4, 0x51, 0x16, 0x6e, 0xdd, 0xe0, 0x67, 0x01, 0x51, 0x39, 0xbf}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x58, 0xb4, 0x50, 0x38, 0x1e, 0x55, 0xcb, 0x24, 0xc2, 0xc9, 0x57, 0xbf, 0xf8, 0xb4, 0x9e, 0x88, 0x1d, 0xee, 0x73, 0x39, 0xfc, 0x07, 0x1e, 0x6a, 0xad, 0x9f, 0x59, 0x5f, 0x45, 0x35, 0x2b, 0xf1}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x34, 0xac, 0xbc, 0x1b, 0xb4, 0x42, 0xaf, 0x4a, 0x37, 0x02, 0xf2, 0x4f, 0x2b, 0x59, 0xb0, 0x0a, 0xd1, 0x88, 0xcf, 0xc4, 0x8d, 0x59, 0x0d, 0x33, 0x7e, 0x5c, 0xd4, 0x20, 0xbd, 0x3d, 0x7d, 0xf9}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} azure_AzureTrustedLaunch M - gcp_GCPSEVES = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x74, 0x63, 0xac, 0x3b, 0x32, 0x22, 0x45, 0xbc, 0xe1, 0x9a, 0x07, 0x7f, 0x11, 0x7f, 0x5d, 0x07, 0xb2, 0x64, 0xc7, 0x42, 0xca, 0x9f, 0x08, 0xc8, 0xa0, 0x6a, 0x94, 0x6e, 0x9f, 0xe3, 0xf6, 0x18}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x46, 0x43, 0x89, 0x2f, 0xe0, 0x10, 0x2a, 0x0f, 0xdf, 0x59, 0x52, 0xac, 0x56, 0x6b, 0x9f, 0x23, 0x1c, 0x88, 0xe7, 0xb3, 0xc9, 0xa1, 0x41, 0x5a, 0xa8, 0x54, 0xef, 0xa1, 0x40, 0xef, 0xef, 0xc9}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x97, 0x34, 0x1c, 0x45, 0x00, 0xf8, 0x7e, 0x35, 0xe0, 0x2e, 0x37, 0xc3, 0x52, 0x2f, 0x16, 0xc9, 0x40, 0x78, 0x35, 0x9e, 0x53, 0x23, 0x0b, 0x05, 0xb7, 0x98, 0xdc, 0xe6, 0xe1, 0xb9, 0x8c, 0xe6}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - gcp_GCPSEVSNP = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x91, 0xd6, 0xe2, 0x57, 0x7e, 0xac, 0x49, 0x70, 0xb7, 0x8e, 0x9c, 0x79, 0xbf, 0xc8, 0x80, 0x5b, 0x4a, 0x8d, 0x79, 0xef, 0x3c, 0x27, 0x03, 0x2f, 0x44, 0x42, 0xa4, 0xc9, 0x75, 0x0d, 0xd0, 0x37}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xef, 0x6e, 0xc3, 0xc1, 0x7e, 0xd1, 0xa4, 0x20, 0x22, 0xd3, 0x6e, 0xd8, 0xbf, 0xdc, 0x4e, 0x9b, 0x56, 0x05, 0x6a, 0x1f, 0x34, 0xf4, 0x27, 0x6e, 0x54, 0x2b, 0x76, 0x1f, 0x4c, 0x06, 0x50, 0xd7}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x11, 0x13, 0x79, 0x40, 0x6a, 0x0e, 0x46, 0xf3, 0xc4, 0x1a, 0xbe, 0x3b, 0x58, 0x7a, 0x7d, 0x24, 0x19, 0xb8, 0xbc, 0xe7, 0x5c, 0xfa, 0x68, 0x97, 0xda, 0xb0, 0x81, 0xaf, 0x04, 0xb8, 0x60, 0x88}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - openstack_QEMUVTPM = M{4: {Expected: []byte{0xc1, 0x32, 0xc5, 0xaa, 0x3e, 0xb4, 0x5c, 0xac, 0x34, 0x5c, 0x1d, 0x0b, 0x0f, 0x34, 0xb5, 0xe4, 0x7e, 0x38, 0xf8, 0x0a, 0xbd, 0x48, 0xff, 0xdf, 0x0e, 0xb7, 0x69, 0xa4, 0x4b, 0x89, 0x33, 0xbe}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x71, 0xa8, 0x12, 0x20, 0x63, 0xf6, 0x2c, 0x77, 0xc7, 0x3c, 0x62, 0x01, 0x92, 0xd0, 0x8e, 0x5d, 0xf4, 0x18, 0x28, 0xed, 0xf0, 0xad, 0xf9, 0xe5, 0x05, 0xa5, 0x31, 0xbc, 0x20, 0xb5, 0xe6, 0x43}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x9a, 0x2b, 0x1c, 0xa9, 0x15, 0x48, 0x25, 0x3d, 0x49, 0x4a, 0x24, 0x5a, 0xde, 0xa4, 0xa2, 0x3b, 0x5d, 0xed, 0x57, 0x79, 0x42, 0x36, 0x0c, 0x07, 0x28, 0x8a, 0x46, 0x3a, 0x8b, 0xaf, 0x02, 0x74}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + gcp_GCPSEVES = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x0b, 0x9b, 0x5c, 0xd2, 0xf0, 0xfb, 0x82, 0x50, 0x2c, 0xcd, 0x36, 0x22, 0x90, 0x6c, 0x85, 0xf7, 0x56, 0x3d, 0x55, 0x9e, 0xfc, 0x9f, 0xc3, 0x59, 0x26, 0x19, 0xee, 0xb1, 0x3c, 0x75, 0x0e, 0xfd}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xf7, 0x18, 0x13, 0x5c, 0x49, 0x45, 0xdd, 0x9c, 0xaa, 0xcb, 0xb3, 0x50, 0x67, 0xc0, 0x69, 0xff, 0x45, 0x4f, 0xae, 0x64, 0xf1, 0xf3, 0x12, 0xb5, 0xc1, 0xd3, 0x5c, 0xeb, 0xef, 0xe6, 0x02, 0x0c}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x3c, 0xd5, 0xa0, 0xb3, 0x7f, 0x18, 0xb3, 0xee, 0x9a, 0x61, 0x62, 0x73, 0x1f, 0x60, 0x5c, 0xbf, 0xa6, 0xaa, 0xd2, 0x61, 0x25, 0x41, 0xd5, 0xac, 0x8c, 0x47, 0x5b, 0x2a, 0x5a, 0x78, 0x33, 0xb5}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + gcp_GCPSEVSNP = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x10, 0x2e, 0xeb, 0xea, 0x31, 0x8c, 0x88, 0x8f, 0xf5, 0xac, 0x8f, 0x2d, 0xf0, 0x9e, 0x7b, 0xd8, 0xac, 0x46, 0xd6, 0xa2, 0x52, 0x49, 0x2f, 0xc7, 0x05, 0xef, 0x71, 0x88, 0x12, 0xeb, 0xa4, 0x87}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x3a, 0xda, 0x55, 0x99, 0xf5, 0x87, 0x67, 0xf1, 0x51, 0x55, 0x3b, 0x84, 0x57, 0xd6, 0x1e, 0xdb, 0x8d, 0xbd, 0x33, 0x1c, 0x2f, 0x9e, 0xfc, 0x28, 0x5d, 0x4c, 0x3e, 0x6f, 0xb4, 0xb1, 0x7f, 0xc7}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xef, 0x72, 0x14, 0x03, 0x04, 0x17, 0x4a, 0xd6, 0x94, 0x16, 0xa4, 0x3d, 0x35, 0x82, 0xb6, 0x92, 0xc5, 0xc8, 0x2d, 0xf2, 0x0b, 0x7f, 0x80, 0x3a, 0x8c, 0x1c, 0xb3, 0x85, 0x5e, 0xb0, 0xac, 0x99}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + openstack_QEMUVTPM = M{4: {Expected: []byte{0x0b, 0x10, 0xe3, 0xf7, 0x2c, 0x02, 0xd9, 0x8e, 0x99, 0x4c, 0xa4, 0x43, 0x31, 0x60, 0x45, 0xe8, 0xd8, 0xbd, 0xe9, 0xaa, 0xb1, 0x41, 0xab, 0x2f, 0x50, 0x49, 0x28, 0x73, 0x19, 0xb4, 0x5c, 0x74}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x97, 0x10, 0x01, 0x9f, 0x43, 0x3b, 0xf3, 0x23, 0x33, 0x32, 0xbc, 0xa6, 0xaa, 0x8f, 0xe6, 0x63, 0x38, 0x84, 0xbc, 0x35, 0xe8, 0x4f, 0x86, 0x31, 0xcc, 0x50, 0xf2, 0xe5, 0xe8, 0xa3, 0xfc, 0xa9}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xa7, 0x0f, 0xf3, 0xa5, 0x8e, 0x89, 0xc0, 0xc8, 0xcd, 0xc9, 0x1f, 0x1b, 0x85, 0x89, 0x79, 0x58, 0x72, 0x5f, 0x67, 0xb7, 0xeb, 0xd9, 0x8e, 0x89, 0x4c, 0xb0, 0xee, 0x36, 0x72, 0x43, 0xf5, 0x24}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} qemu_QEMUTDX M - qemu_QEMUVTPM = M{4: {Expected: []byte{0xf5, 0x04, 0x0f, 0x78, 0x7a, 0x27, 0xd3, 0x7d, 0x52, 0x54, 0x1e, 0x8c, 0x7e, 0x86, 0x34, 0x63, 0xab, 0x4b, 0xaa, 0xd9, 0xa8, 0x6d, 0x1a, 0x83, 0x14, 0x7e, 0xfe, 0x81, 0xed, 0x6e, 0x8f, 0x81}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x7e, 0xac, 0x99, 0xed, 0x5d, 0x8f, 0xe6, 0xeb, 0xd0, 0xa6, 0x7a, 0xb2, 0x5f, 0x77, 0x0a, 0x19, 0x66, 0x5c, 0x27, 0x5b, 0x09, 0x4f, 0xf3, 0x33, 0x53, 0x40, 0xa9, 0xaa, 0x91, 0xbb, 0xf0, 0x96}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x67, 0x50, 0x76, 0x33, 0x31, 0xc4, 0x9e, 0x87, 0x54, 0xe2, 0x78, 0x48, 0x4c, 0xeb, 0x1f, 0x44, 0xc1, 0xd8, 0x70, 0x44, 0xc2, 0xa2, 0x63, 0xa6, 0xb0, 0x09, 0x39, 0x6d, 0xf6, 0x4f, 0xd7, 0xd9}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + qemu_QEMUVTPM = M{4: {Expected: []byte{0xcf, 0xa2, 0x57, 0xbb, 0x2d, 0xaa, 0x90, 0xca, 0xc3, 0xd9, 0x7a, 0xa5, 0xe6, 0xa2, 0x19, 0x24, 0xbf, 0x1a, 0x1e, 0x71, 0x29, 0x51, 0xf0, 0x11, 0xad, 0x68, 0xa6, 0x13, 0x24, 0xfc, 0x7c, 0x6f}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x8a, 0x47, 0x17, 0xca, 0xf8, 0xe1, 0x91, 0xda, 0x11, 0x1c, 0x57, 0x71, 0x3b, 0xfe, 0x94, 0xd5, 0x51, 0xdd, 0xf5, 0x44, 0x77, 0x4a, 0x27, 0xdb, 0x0f, 0x72, 0x3f, 0x9c, 0x95, 0xcd, 0x12, 0xbd}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x37, 0xcc, 0x4f, 0x23, 0x3e, 0x14, 0xa8, 0x6b, 0x10, 0x54, 0xa3, 0x73, 0x31, 0x78, 0xcf, 0xa9, 0x0a, 0x89, 0x3f, 0x81, 0x7d, 0x3f, 0xf2, 0xa1, 0xe0, 0x8d, 0x03, 0x31, 0xee, 0x30, 0x8e, 0x67}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} ) diff --git a/internal/config/image_enterprise.go b/internal/config/image_enterprise.go index 9c1250d2d..4b515bbef 100644 --- a/internal/config/image_enterprise.go +++ b/internal/config/image_enterprise.go @@ -10,5 +10,5 @@ package config const ( // defaultImage is the default image to use. - defaultImage = "ref/main/stream/nightly/v2.21.0-pre.0.20250130163645-681a341b8f82" + defaultImage = "ref/main/stream/nightly/v2.21.0-pre.0.20250204100241-f41c7619e180" ) From f81c357f516a265179cefde9117f23fa92352fec Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 6 Feb 2025 08:03:14 +0100 Subject: [PATCH 101/311] deps: update Constellation containers (#3638) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- bazel/toolchains/container_images.bzl | 2 +- internal/versions/versions.go | 6 +++--- s3proxy/deploy/s3proxy/values.yaml | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/bazel/toolchains/container_images.bzl b/bazel/toolchains/container_images.bzl index d4e7cdd79..f260c6bd5 100644 --- a/bazel/toolchains/container_images.bzl +++ b/bazel/toolchains/container_images.bzl @@ -16,6 +16,6 @@ def containter_image_deps(): ) oci_pull( name = "libvirtd_base", - digest = "sha256:99dbf3cf69b3f97cb0158bde152c9bc7c2a96458cf462527ee80b75754f572a7", + digest = "sha256:48ba2401ea66490ca1997b9d3e72b4bef7557ffbcdb1c95651fb3308f32fda58", image = "ghcr.io/edgelesssys/constellation/libvirtd-base", ) diff --git a/internal/versions/versions.go b/internal/versions/versions.go index ad22d4fb1..d31ce23aa 100644 --- a/internal/versions/versions.go +++ b/internal/versions/versions.go @@ -173,11 +173,11 @@ const ( // NodeMaintenanceOperatorImage is the image for the node maintenance operator. NodeMaintenanceOperatorImage = "quay.io/medik8s/node-maintenance-operator:v0.17.0@sha256:bf1c5758b3d266dd6234422d156c67ffdd47f50f70ce17d5cef1de6065030337" // renovate:container // LogstashImage is the container image of logstash, used for log collection by debugd. - LogstashImage = "ghcr.io/edgelesssys/constellation/logstash-debugd:v2.17.0-pre.0.20240627193502-8aed4bb0fe45@sha256:d6c5a06049e5c1b9d7ba4b83367fa0c06ba2d1b65e1d299f3e00f465f310642b" // renovate:container + LogstashImage = "ghcr.io/edgelesssys/constellation/logstash-debugd:v2.20.0-pre.0.20241128161539-b99bd53066cf@sha256:726d2e3a15d6fa83d2d64e6f0ecc9b725c5f135ff2be51d1e0e4052d3f5e784e" // renovate:container // FilebeatImage is the container image of filebeat, used for log collection by debugd. - FilebeatImage = "ghcr.io/edgelesssys/constellation/filebeat-debugd:v2.17.0-pre.0.20240627193502-8aed4bb0fe45@sha256:606adccf544a15e6b9ae9e11eec707668660bc1af346ff72559404e36da5baa2" // renovate:container + FilebeatImage = "ghcr.io/edgelesssys/constellation/filebeat-debugd:v2.20.0-pre.0.20241128161539-b99bd53066cf@sha256:ab030e79c7bb93aea93f5a787c95c566cab41f4a45e2012577c1f31615f8e687" // renovate:container // MetricbeatImage is the container image of filebeat, used for log collection by debugd. - MetricbeatImage = "ghcr.io/edgelesssys/constellation/metricbeat-debugd:v2.17.0-pre.0.20240627193502-8aed4bb0fe45@sha256:690b9d36cc334a7f83b58ca905169bb9f1c955b7a436c0044a07f4ce15a90594" // renovate:container + MetricbeatImage = "ghcr.io/edgelesssys/constellation/metricbeat-debugd:v2.20.0-pre.0.20241128161539-b99bd53066cf@sha256:f406201b3897acbaae41d75d42ebeda02ad08ddad1a3a4527a1b1d86a27ca4cb" // renovate:container // currently supported versions. //nolint:revive diff --git a/s3proxy/deploy/s3proxy/values.yaml b/s3proxy/deploy/s3proxy/values.yaml index cc41d5887..6153fd97c 100644 --- a/s3proxy/deploy/s3proxy/values.yaml +++ b/s3proxy/deploy/s3proxy/values.yaml @@ -3,7 +3,7 @@ awsAccessKeyID: "replaceme" awsSecretAccessKey: "replaceme" # Pod image to deploy. -image: "ghcr.io/edgelesssys/constellation/s3proxy:v2.18.0-pre.0.20240807132706-ffde0ef7b7d3" +image: "ghcr.io/edgelesssys/constellation/s3proxy:v2.21.0-pre.0.20250205082926-6d42d9b40e22" # Control if multipart uploads are blocked. allowMultipart: false From 3fa29a5ee85137ae0dbf198b95bfa5e53420fd8a Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 6 Feb 2025 11:07:06 +0100 Subject: [PATCH 102/311] deps: update Go dependencies (#3631) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * deps: update Go dependencies * deps: fix dependency for go-control-plane/envoy * Accept AGPL-3.0 for edgelesssys/go-tdx-qpl --------- Signed-off-by: Daniel Weiße Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Daniel Weiße --- bazel/ci/golicenses.sh.in | 4 +- go.mod | 116 +++++++-------- go.sum | 304 ++++++++++++++++---------------------- 3 files changed, 183 insertions(+), 241 deletions(-) diff --git a/bazel/ci/golicenses.sh.in b/bazel/ci/golicenses.sh.in index 2189b511d..768406c49 100644 --- a/bazel/ci/golicenses.sh.in +++ b/bazel/ci/golicenses.sh.in @@ -63,6 +63,8 @@ license_report() { github.com/edgelesssys/constellation/v2/operators/constellation-node-operator/api) ;; + github.com/edgelesssys/go-tdx-qpl) ;; + *) not_allowed ;; @@ -71,8 +73,6 @@ license_report() { Unknown) case ${pkg} in - github.com/edgelesssys/go-tdx-qpl/*) ;; - *) not_allowed ;; diff --git a/go.mod b/go.mod index 0d1c50867..d2db5b5ad 100644 --- a/go.mod +++ b/go.mod @@ -28,11 +28,11 @@ replace ( ) require ( - cloud.google.com/go/compute v1.31.1 + cloud.google.com/go/compute v1.33.0 cloud.google.com/go/compute/metadata v0.6.0 cloud.google.com/go/kms v1.20.5 - cloud.google.com/go/secretmanager v1.14.3 - cloud.google.com/go/storage v1.49.0 + cloud.google.com/go/secretmanager v1.14.4 + cloud.google.com/go/storage v1.50.0 dario.cat/mergo v1.0.1 github.com/Azure/azure-sdk-for-go v68.0.0+incompatible github.com/Azure/azure-sdk-for-go/sdk/azcore v1.17.0 @@ -43,43 +43,43 @@ require ( github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.6.0 github.com/BurntSushi/toml v1.4.0 github.com/aws/aws-sdk-go v1.55.6 - github.com/aws/aws-sdk-go-v2 v1.34.0 - github.com/aws/aws-sdk-go-v2/config v1.29.2 - github.com/aws/aws-sdk-go-v2/credentials v1.17.55 - github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.25 - github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.54 - github.com/aws/aws-sdk-go-v2/service/autoscaling v1.51.8 - github.com/aws/aws-sdk-go-v2/service/cloudfront v1.44.6 - github.com/aws/aws-sdk-go-v2/service/ec2 v1.202.0 - github.com/aws/aws-sdk-go-v2/service/elasticloadbalancingv2 v1.43.8 - github.com/aws/aws-sdk-go-v2/service/resourcegroupstaggingapi v1.25.14 - github.com/aws/aws-sdk-go-v2/service/s3 v1.74.1 - github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.34.14 + github.com/aws/aws-sdk-go-v2 v1.36.1 + github.com/aws/aws-sdk-go-v2/config v1.29.6 + github.com/aws/aws-sdk-go-v2/credentials v1.17.59 + github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.28 + github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.59 + github.com/aws/aws-sdk-go-v2/service/autoscaling v1.51.12 + github.com/aws/aws-sdk-go-v2/service/cloudfront v1.44.9 + github.com/aws/aws-sdk-go-v2/service/ec2 v1.202.4 + github.com/aws/aws-sdk-go-v2/service/elasticloadbalancingv2 v1.43.12 + github.com/aws/aws-sdk-go-v2/service/resourcegroupstaggingapi v1.25.18 + github.com/aws/aws-sdk-go-v2/service/s3 v1.75.4 + github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.34.18 github.com/aws/smithy-go v1.22.2 - github.com/bazelbuild/buildtools v0.0.0-20250128121225-1d7634006480 + github.com/bazelbuild/buildtools v0.0.0-20250204160707-ad48c76ab9b5 github.com/bazelbuild/rules_go v0.52.0 github.com/coreos/go-systemd/v22 v22.5.0 github.com/docker/docker v27.5.1+incompatible github.com/edgelesssys/go-azguestattestation v0.0.0-20240513062303-05f8770a633d - github.com/edgelesssys/go-tdx-qpl v0.0.0-20240123150912-dcad3c41ec5f + github.com/edgelesssys/go-tdx-qpl v0.0.0-20250129202750-607ac61e2377 github.com/foxboron/go-uefi v0.0.0-20241219185318-19dc140271bf github.com/fsnotify/fsnotify v1.8.0 github.com/go-playground/locales v0.14.1 github.com/go-playground/universal-translator v0.18.1 github.com/go-playground/validator/v10 v10.24.0 github.com/golang-jwt/jwt/v5 v5.2.1 - github.com/google/go-sev-guest v0.12.2-0.20250116170741-e5df25990fc0 + github.com/google/go-sev-guest v0.12.2-0.20250205052930-65042ded71f9 github.com/google/go-tdx-guest v0.3.1 github.com/google/go-tpm v0.9.3 github.com/google/go-tpm-tools v0.4.4 github.com/google/uuid v1.6.0 github.com/googleapis/gax-go/v2 v2.14.1 github.com/gophercloud/gophercloud/v2 v2.4.0 - github.com/gophercloud/utils/v2 v2.0.0-20250106080359-c8704d65b4fa + github.com/gophercloud/utils/v2 v2.0.0-20250205065254-a1bff20237e7 github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.2.0 github.com/hashicorp/go-kms-wrapping/v2 v2.0.18 github.com/hashicorp/go-kms-wrapping/wrappers/awskms/v2 v2.0.11 - github.com/hashicorp/go-kms-wrapping/wrappers/azurekeyvault/v2 v2.0.12 + github.com/hashicorp/go-kms-wrapping/wrappers/azurekeyvault/v2 v2.0.13 github.com/hashicorp/go-kms-wrapping/wrappers/gcpckms/v2 v2.0.13 github.com/hashicorp/go-version v1.7.0 github.com/hashicorp/hc-install v0.9.1 @@ -100,7 +100,7 @@ require ( github.com/pkg/errors v0.9.1 github.com/regclient/regclient v0.8.0 github.com/rogpeppe/go-internal v1.13.1 - github.com/samber/slog-multi v1.3.3 + github.com/samber/slog-multi v1.4.0 github.com/schollz/progressbar/v3 v3.18.0 github.com/secure-systems-lab/go-securesystemslib v0.9.0 github.com/siderolabs/talos/pkg/machinery v1.9.3 @@ -108,7 +108,7 @@ require ( github.com/sigstore/sigstore v1.8.12 github.com/spf13/afero v1.12.0 github.com/spf13/cobra v1.8.1 - github.com/spf13/pflag v1.0.5 + github.com/spf13/pflag v1.0.6 github.com/stretchr/testify v1.10.0 github.com/tink-crypto/tink-go/v2 v2.3.0 github.com/vincent-petithory/dataurl v1.0.0 @@ -118,11 +118,11 @@ require ( go.uber.org/goleak v1.3.0 golang.org/x/crypto v0.32.0 golang.org/x/exp v0.0.0-20250128182459-e0ece0dbea4c - golang.org/x/mod v0.22.0 - golang.org/x/sys v0.29.0 - golang.org/x/text v0.21.0 + golang.org/x/mod v0.23.0 + golang.org/x/sys v0.30.0 + golang.org/x/text v0.22.0 golang.org/x/tools v0.29.0 - google.golang.org/api v0.219.0 + google.golang.org/api v0.220.0 google.golang.org/grpc v1.70.0 google.golang.org/protobuf v1.36.4 gopkg.in/yaml.v3 v3.0.1 @@ -144,12 +144,12 @@ require ( require ( cel.dev/expr v0.19.0 // indirect - cloud.google.com/go v0.116.0 // indirect - cloud.google.com/go/auth v0.14.0 // indirect + cloud.google.com/go v0.118.1 // indirect + cloud.google.com/go/auth v0.14.1 // indirect cloud.google.com/go/auth/oauth2adapt v0.2.7 // indirect - cloud.google.com/go/iam v1.2.2 // indirect - cloud.google.com/go/longrunning v0.6.2 // indirect - cloud.google.com/go/monitoring v1.21.2 // indirect + cloud.google.com/go/iam v1.3.1 // indirect + cloud.google.com/go/longrunning v0.6.4 // indirect + cloud.google.com/go/monitoring v1.23.0 // indirect github.com/AdaLogics/go-fuzz-headers v0.0.0-20230811130428-ced1acdcaa24 // indirect github.com/Azure/azure-sdk-for-go/sdk/internal v1.10.0 // indirect github.com/Azure/azure-sdk-for-go/sdk/keyvault/azkeys v0.10.0 // indirect @@ -164,10 +164,10 @@ require ( github.com/Azure/go-autorest/autorest/validation v0.3.1 // indirect github.com/Azure/go-autorest/logger v0.2.1 // indirect github.com/Azure/go-autorest/tracing v0.6.0 // indirect - github.com/AzureAD/microsoft-authentication-library-for-go v1.3.2 // indirect + github.com/AzureAD/microsoft-authentication-library-for-go v1.3.3 // indirect github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.25.0 // indirect - github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.48.1 // indirect - github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.48.1 // indirect + github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.49.0 // indirect + github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.49.0 // indirect github.com/MakeNowJust/heredoc v1.0.0 // indirect github.com/Masterminds/goutils v1.1.1 // indirect github.com/Masterminds/semver/v3 v3.3.0 // indirect @@ -179,21 +179,20 @@ require ( github.com/apparentlymart/go-textseg/v15 v15.0.0 // indirect github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 // indirect github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.8 // indirect - github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.29 // indirect - github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.29 // indirect + github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.32 // indirect + github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.32 // indirect github.com/aws/aws-sdk-go-v2/internal/ini v1.8.2 // indirect - github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.29 // indirect + github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.32 // indirect github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.2 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.5.3 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.10 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.10 // indirect - github.com/aws/aws-sdk-go-v2/service/sso v1.24.12 // indirect - github.com/aws/aws-sdk-go-v2/service/ssooidc v1.28.11 // indirect - github.com/aws/aws-sdk-go-v2/service/sts v1.33.10 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.5.6 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.13 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.13 // indirect + github.com/aws/aws-sdk-go-v2/service/sso v1.24.15 // indirect + github.com/aws/aws-sdk-go-v2/service/ssooidc v1.28.14 // indirect + github.com/aws/aws-sdk-go-v2/service/sts v1.33.14 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/blang/semver v3.5.1+incompatible // indirect github.com/blang/semver/v4 v4.0.0 // indirect - github.com/census-instrumentation/opencensus-proto v0.4.1 // indirect github.com/cespare/xxhash/v2 v2.3.0 // indirect github.com/chai2010/gettext-go v1.0.2 // indirect github.com/cloudflare/circl v1.5.0 // indirect @@ -218,7 +217,7 @@ require ( github.com/docker/go-units v0.5.0 // indirect github.com/docker/libtrust v0.0.0-20160708172513-aabc10ec26b7 // indirect github.com/emicklei/go-restful/v3 v3.11.0 // indirect - github.com/envoyproxy/go-control-plane v0.13.1 // indirect + github.com/envoyproxy/go-control-plane/envoy v1.32.3 // indirect github.com/envoyproxy/protoc-gen-validate v1.1.0 // indirect github.com/evanphx/json-patch v5.9.0+incompatible // indirect github.com/evanphx/json-patch/v5 v5.9.0 // indirect @@ -251,7 +250,6 @@ require ( github.com/gofrs/uuid/v5 v5.3.0 // indirect github.com/gogo/protobuf v1.3.2 // indirect github.com/golang-jwt/jwt/v4 v4.5.1 // indirect - github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect github.com/golang/protobuf v1.5.4 // indirect github.com/google/btree v1.1.3 // indirect github.com/google/certificate-transparency-go v1.1.8 // indirect @@ -342,7 +340,7 @@ require ( github.com/rubenv/sql-migrate v1.7.1 // indirect github.com/russross/blackfriday/v2 v2.1.0 // indirect github.com/ryanuber/go-glob v1.0.0 // indirect - github.com/samber/lo v1.47.0 // indirect + github.com/samber/lo v1.49.1 // indirect github.com/sassoftware/relic v7.2.1+incompatible // indirect github.com/shopspring/decimal v1.4.0 // indirect github.com/sirupsen/logrus v1.9.3 // indirect @@ -363,27 +361,27 @@ require ( github.com/xlab/treeprint v1.2.0 // indirect github.com/zclconf/go-cty v1.16.1 // indirect go.mongodb.org/mongo-driver v1.14.0 // indirect - go.opencensus.io v0.24.0 // indirect - go.opentelemetry.io/contrib/detectors/gcp v1.32.0 // indirect - go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.54.0 // indirect - go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.54.0 // indirect - go.opentelemetry.io/otel v1.32.0 // indirect - go.opentelemetry.io/otel/metric v1.32.0 // indirect - go.opentelemetry.io/otel/sdk v1.32.0 // indirect + go.opentelemetry.io/auto/sdk v1.1.0 // indirect + go.opentelemetry.io/contrib/detectors/gcp v1.33.0 // indirect + go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.58.0 // indirect + go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.58.0 // indirect + go.opentelemetry.io/otel v1.34.0 // indirect + go.opentelemetry.io/otel/metric v1.34.0 // indirect + go.opentelemetry.io/otel/sdk v1.34.0 // indirect go.opentelemetry.io/otel/sdk/metric v1.32.0 // indirect - go.opentelemetry.io/otel/trace v1.32.0 // indirect + go.opentelemetry.io/otel/trace v1.34.0 // indirect go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.27.0 // indirect golang.org/x/net v0.34.0 // indirect golang.org/x/oauth2 v0.25.0 // indirect - golang.org/x/sync v0.10.0 // indirect + golang.org/x/sync v0.11.0 // indirect golang.org/x/term v0.28.0 // indirect golang.org/x/time v0.9.0 // indirect gomodules.xyz/jsonpatch/v2 v2.4.0 // indirect google.golang.org/appengine v1.6.8 // indirect - google.golang.org/genproto v0.0.0-20241118233622-e639e219e697 // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20241209162323-e6fa225c2576 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20250124145028-65684f501c47 // indirect + google.golang.org/genproto v0.0.0-20250122153221-138b5a5a4fd4 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20250124145028-65684f501c47 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20250127172529-29210b9bc287 // indirect gopkg.in/evanphx/json-patch.v4 v4.12.0 // indirect gopkg.in/inf.v0 v0.9.1 // indirect k8s.io/cli-runtime v0.32.0 // indirect diff --git a/go.sum b/go.sum index f64baa8f7..08711be37 100644 --- a/go.sum +++ b/go.sum @@ -1,32 +1,31 @@ cel.dev/expr v0.19.0 h1:lXuo+nDhpyJSpWxpPVi5cPUwzKb+dsdOiw6IreM5yt0= cel.dev/expr v0.19.0/go.mod h1:MrpN08Q+lEBs+bGYdLxxHkZoUSsCp0nSKTs0nTymJgw= -cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.116.0 h1:B3fRrSDkLRt5qSHWe40ERJvhvnQwdZiHu0bJOpldweE= -cloud.google.com/go v0.116.0/go.mod h1:cEPSRWPzZEswwdr9BxE6ChEn01dWlTaF05LiC2Xs70U= -cloud.google.com/go/auth v0.14.0 h1:A5C4dKV/Spdvxcl0ggWwWEzzP7AZMJSEIgrkngwhGYM= -cloud.google.com/go/auth v0.14.0/go.mod h1:CYsoRL1PdiDuqeQpZE0bP2pnPrGqFcOkI0nldEQis+A= +cloud.google.com/go v0.118.1 h1:b8RATMcrK9A4BH0rj8yQupPXp+aP+cJ0l6H7V9osV1E= +cloud.google.com/go v0.118.1/go.mod h1:CFO4UPEPi8oV21xoezZCrd3d81K4fFkDTEJu4R8K+9M= +cloud.google.com/go/auth v0.14.1 h1:AwoJbzUdxA/whv1qj3TLKwh3XX5sikny2fc40wUl+h0= +cloud.google.com/go/auth v0.14.1/go.mod h1:4JHUxlGXisL0AW8kXPtUF6ztuOksyfUQNFjfsOCXkPM= cloud.google.com/go/auth/oauth2adapt v0.2.7 h1:/Lc7xODdqcEw8IrZ9SvwnlLX6j9FHQM74z6cBk9Rw6M= cloud.google.com/go/auth/oauth2adapt v0.2.7/go.mod h1:NTbTTzfvPl1Y3V1nPpOgl2w6d/FjO7NNUQaWSox6ZMc= -cloud.google.com/go/compute v1.31.1 h1:SObuy8Fs6woazArpXp1fsHCw+ZH4iJ/8dGGTxUhHZQA= -cloud.google.com/go/compute v1.31.1/go.mod h1:hyOponWhXviDptJCJSoEh89XO1cfv616wbwbkde1/+8= +cloud.google.com/go/compute v1.33.0 h1:abGcwWokP7/bBpvRjUKlgchrZXYgRpwcKZIlNUHWf6Y= +cloud.google.com/go/compute v1.33.0/go.mod h1:Z8NErRhrWA3RmVWczlAPJjZcRTlqZB1pcpD0MaIc1ug= cloud.google.com/go/compute/metadata v0.6.0 h1:A6hENjEsCDtC1k8byVsgwvVcioamEHvZ4j01OwKxG9I= cloud.google.com/go/compute/metadata v0.6.0/go.mod h1:FjyFAW1MW0C203CEOMDTu3Dk1FlqW3Rga40jzHL4hfg= -cloud.google.com/go/iam v1.2.2 h1:ozUSofHUGf/F4tCNy/mu9tHLTaxZFLOUiKzjcgWHGIA= -cloud.google.com/go/iam v1.2.2/go.mod h1:0Ys8ccaZHdI1dEUilwzqng/6ps2YB6vRsjIe00/+6JY= +cloud.google.com/go/iam v1.3.1 h1:KFf8SaT71yYq+sQtRISn90Gyhyf4X8RGgeAVC8XGf3E= +cloud.google.com/go/iam v1.3.1/go.mod h1:3wMtuyT4NcbnYNPLMBzYRFiEfjKfJlLVLrisE7bwm34= cloud.google.com/go/kms v1.20.5 h1:aQQ8esAIVZ1atdJRxihhdxGQ64/zEbJoJnCz/ydSmKg= cloud.google.com/go/kms v1.20.5/go.mod h1:C5A8M1sv2YWYy1AE6iSrnddSG9lRGdJq5XEdBy28Lmw= -cloud.google.com/go/logging v1.12.0 h1:ex1igYcGFd4S/RZWOCU51StlIEuey5bjqwH9ZYjHibk= -cloud.google.com/go/logging v1.12.0/go.mod h1:wwYBt5HlYP1InnrtYI0wtwttpVU1rifnMT7RejksUAM= -cloud.google.com/go/longrunning v0.6.2 h1:xjDfh1pQcWPEvnfjZmwjKQEcHnpz6lHjfy7Fo0MK+hc= -cloud.google.com/go/longrunning v0.6.2/go.mod h1:k/vIs83RN4bE3YCswdXC5PFfWVILjm3hpEUlSko4PiI= -cloud.google.com/go/monitoring v1.21.2 h1:FChwVtClH19E7pJ+e0xUhJPGksctZNVOk2UhMmblmdU= -cloud.google.com/go/monitoring v1.21.2/go.mod h1:hS3pXvaG8KgWTSz+dAdyzPrGUYmi2Q+WFX8g2hqVEZU= -cloud.google.com/go/secretmanager v1.14.3 h1:XVGHbcXEsbrgi4XHzgK5np81l1eO7O72WOXHhXUemrM= -cloud.google.com/go/secretmanager v1.14.3/go.mod h1:Pwzcfn69Ni9Lrk1/XBzo1H9+MCJwJ6CDCoeoQUsMN+c= -cloud.google.com/go/storage v1.49.0 h1:zenOPBOWHCnojRd9aJZAyQXBYqkJkdQS42dxL55CIMw= -cloud.google.com/go/storage v1.49.0/go.mod h1:k1eHhhpLvrPjVGfo0mOUPEJ4Y2+a/Hv5PiwehZI9qGU= -cloud.google.com/go/trace v1.11.2 h1:4ZmaBdL8Ng/ajrgKqY5jfvzqMXbrDcBsUGXOT9aqTtI= -cloud.google.com/go/trace v1.11.2/go.mod h1:bn7OwXd4pd5rFuAnTrzBuoZ4ax2XQeG3qNgYmfCy0Io= +cloud.google.com/go/logging v1.13.0 h1:7j0HgAp0B94o1YRDqiqm26w4q1rDMH7XNRU34lJXHYc= +cloud.google.com/go/logging v1.13.0/go.mod h1:36CoKh6KA/M0PbhPKMq6/qety2DCAErbhXT62TuXALA= +cloud.google.com/go/longrunning v0.6.4 h1:3tyw9rO3E2XVXzSApn1gyEEnH2K9SynNQjMlBi3uHLg= +cloud.google.com/go/longrunning v0.6.4/go.mod h1:ttZpLCe6e7EXvn9OxpBRx7kZEB0efv8yBO6YnVMfhJs= +cloud.google.com/go/monitoring v1.23.0 h1:M3nXww2gn9oZ/qWN2bZ35CjolnVHM3qnSbu6srCPgjk= +cloud.google.com/go/monitoring v1.23.0/go.mod h1:034NnlQPDzrQ64G2Gavhl0LUHZs9H3rRmhtnp7jiJgg= +cloud.google.com/go/secretmanager v1.14.4 h1:SMWQMsUcACsdIuVhIBAw+QfKY4Xseiaa8qDnunjmhcM= +cloud.google.com/go/secretmanager v1.14.4/go.mod h1:pjwFw8+A6B4AcWrVXruLfz1QykkpMr8T/VT+zXB91iw= +cloud.google.com/go/storage v1.50.0 h1:3TbVkzTooBvnZsk7WaAQfOsNrdoM8QHusXA1cpk6QJs= +cloud.google.com/go/storage v1.50.0/go.mod h1:l7XeiD//vx5lfqE3RavfmU9yvk5Pp0Zhcv482poyafY= +cloud.google.com/go/trace v1.11.3 h1:c+I4YFjxRQjvAhRmSsmjpASUKq88chOX854ied0K/pE= +cloud.google.com/go/trace v1.11.3/go.mod h1:pt7zCYiDSQjC9Y2oqCsh9jF4GStB/hmjrYLsxRR27q8= dario.cat/mergo v1.0.1 h1:Ra4+bf83h2ztPIQYNP99R6m+Y7KfnARDfID+a+vLl4s= dario.cat/mergo v1.0.1/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk= filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA= @@ -89,21 +88,20 @@ github.com/Azure/go-autorest/tracing v0.6.0 h1:TYi4+3m5t6K48TGI9AUdb+IzbnSxvnvUM github.com/Azure/go-autorest/tracing v0.6.0/go.mod h1:+vhtPC754Xsa23ID7GlGsrdKBpUA79WCAKPPZVC2DeU= github.com/AzureAD/microsoft-authentication-extensions-for-go/cache v0.1.1 h1:WJTmL004Abzc5wDB5VtZG2PJk5ndYDgVacGqfirKxjM= github.com/AzureAD/microsoft-authentication-extensions-for-go/cache v0.1.1/go.mod h1:tCcJZ0uHAmvjsVYzEFivsRTN00oz5BEsRgQHu5JZ9WE= -github.com/AzureAD/microsoft-authentication-library-for-go v1.3.2 h1:kYRSnvJju5gYVyhkij+RTJ/VR6QIUaCfWeaFm2ycsjQ= -github.com/AzureAD/microsoft-authentication-library-for-go v1.3.2/go.mod h1:wP83P5OoQ5p6ip3ScPr0BAq0BvuPAvacpEuSzyouqAI= -github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/AzureAD/microsoft-authentication-library-for-go v1.3.3 h1:H5xDQaE3XowWfhZRUpnfC+rGZMEVoSiji+b+/HFAPU4= +github.com/AzureAD/microsoft-authentication-library-for-go v1.3.3/go.mod h1:wP83P5OoQ5p6ip3ScPr0BAq0BvuPAvacpEuSzyouqAI= github.com/BurntSushi/toml v1.4.0 h1:kuoIxZQy2WRRk1pttg9asf+WVv6tWQuBNVmK8+nqPr0= github.com/BurntSushi/toml v1.4.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho= github.com/DATA-DOG/go-sqlmock v1.5.2 h1:OcvFkGmslmlZibjAjaHm3L//6LiuBgolP7OputlJIzU= github.com/DATA-DOG/go-sqlmock v1.5.2/go.mod h1:88MAG/4G7SMwSE3CeA0ZKzrT5CiOU3OJ+JlNzwDqpNU= github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.25.0 h1:3c8yed4lgqTt+oTQ+JNMDo+F4xprBf+O/il4ZC0nRLw= github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.25.0/go.mod h1:obipzmGjfSjam60XLwGfqUkJsfiheAl+TUjG+4yzyPM= -github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.48.1 h1:UQ0AhxogsIRZDkElkblfnwjc3IaltCm2HUMvezQaL7s= -github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.48.1/go.mod h1:jyqM3eLpJ3IbIFDTKVz2rF9T/xWGW0rIriGwnz8l9Tk= -github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/cloudmock v0.48.1 h1:oTX4vsorBZo/Zdum6OKPA4o7544hm6smoRv1QjpTwGo= -github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/cloudmock v0.48.1/go.mod h1:0wEl7vrAD8mehJyohS9HZy+WyEOaQO2mJx86Cvh93kM= -github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.48.1 h1:8nn+rsCvTq9axyEh382S0PFLBeaFwNsT43IrPWzctRU= -github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.48.1/go.mod h1:viRWSEhtMZqz1rhwmOVKkWl6SwmVowfL9O2YR5gI2PE= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.49.0 h1:o90wcURuxekmXrtxmYWTyNla0+ZEHhud6DI1ZTxd1vI= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.49.0/go.mod h1:6fTWu4m3jocfUZLYF5KsZC1TUfRvEjs7lM4crme/irw= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/cloudmock v0.49.0 h1:jJKWl98inONJAr/IZrdFQUWcwUO95DLY1XMD1ZIut+g= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/cloudmock v0.49.0/go.mod h1:l2fIqmwB+FKSfvn3bAD/0i+AXAxhIZjTK2svT/mgUXs= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.49.0 h1:GYUJLfvd++4DMuMhCFLgLXvFwofIxh/qOwoGuS/LTew= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.49.0/go.mod h1:wRbFgBQUVm1YXrvWKofAEmq9HNJTDphbAaJSSX01KUI= github.com/MakeNowJust/heredoc v1.0.0 h1:cXCdzVdstXyiTqTvfqk9SDHpKNjxuom+DOlyEeQ4pzQ= github.com/MakeNowJust/heredoc v1.0.0/go.mod h1:mG5amYoWBHf8vpLOuehzbGGw0EHxpZZ6lCpQ4fNJ8LE= github.com/Masterminds/goutils v1.1.1 h1:5nUrii3FMTL5diU80unEVvNevw1nH4+ZV4DSLVJLSYI= @@ -138,58 +136,58 @@ github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2/go.mod h1:W github.com/aws/aws-sdk-go v1.30.27/go.mod h1:5zCpMtNQVjRREroY7sYe8lOMRSxkhG6MZveU8YkpAk0= github.com/aws/aws-sdk-go v1.55.6 h1:cSg4pvZ3m8dgYcgqB97MrcdjUmZ1BeMYKUxMMB89IPk= github.com/aws/aws-sdk-go v1.55.6/go.mod h1:eRwEWoyTWFMVYVQzKMNHWP5/RV4xIUGMQfXQHfHkpNU= -github.com/aws/aws-sdk-go-v2 v1.34.0 h1:9iyL+cjifckRGEVpRKZP3eIxVlL06Qk1Tk13vreaVQU= -github.com/aws/aws-sdk-go-v2 v1.34.0/go.mod h1:JgstGg0JjWU1KpVJjD5H0y0yyAIpSdKEq556EI6yOOM= +github.com/aws/aws-sdk-go-v2 v1.36.1 h1:iTDl5U6oAhkNPba0e1t1hrwAo02ZMqbrGq4k5JBWM5E= +github.com/aws/aws-sdk-go-v2 v1.36.1/go.mod h1:5PMILGVKiW32oDzjj6RU52yrNrDPUHcbZQYr1sM7qmM= github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.8 h1:zAxi9p3wsZMIaVCdoiQp2uZ9k1LsZvmAnoTBeZPXom0= github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.8/go.mod h1:3XkePX5dSaxveLAYY7nsbsZZrKxCyEuE5pM4ziFxyGg= -github.com/aws/aws-sdk-go-v2/config v1.29.2 h1:JuIxOEPcSKpMB0J+khMjznG9LIhIBdmqNiEcPclnwqc= -github.com/aws/aws-sdk-go-v2/config v1.29.2/go.mod h1:HktTHregOZwNSM/e7WTfVSu9RCX+3eOv+6ij27PtaYs= -github.com/aws/aws-sdk-go-v2/credentials v1.17.55 h1:CDhKnDEaGkLA5ZszV/qw5uwN5M8rbv9Cl0JRN+PRsaM= -github.com/aws/aws-sdk-go-v2/credentials v1.17.55/go.mod h1:kPD/vj+RB5MREDUky376+zdnjZpR+WgdBBvwrmnlmKE= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.25 h1:kU7tmXNaJ07LsyN3BUgGqAmVmQtq0w6duVIHAKfp0/w= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.25/go.mod h1:OiC8+OiqrURb1wrwmr/UbOVLFSWEGxjinj5C299VQdo= -github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.54 h1:6BWOAho3Cgdy4cmNJ4HWY8VZgqODEU7Gw78XXireNZI= -github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.54/go.mod h1:n+t/oyYErOV3jf/GxNTVlizSM9RMV1yH7jvcIvld3Do= -github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.29 h1:Ej0Rf3GMv50Qh4G4852j2djtoDb7AzQ7MuQeFHa3D70= -github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.29/go.mod h1:oeNTC7PwJNoM5AznVr23wxhLnuJv0ZDe5v7w0wqIs9M= -github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.29 h1:6e8a71X+9GfghragVevC5bZqvATtc3mAMgxpSNbgzF0= -github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.29/go.mod h1:c4jkZiQ+BWpNqq7VtrxjwISrLrt/VvPq3XiopkUIolI= +github.com/aws/aws-sdk-go-v2/config v1.29.6 h1:fqgqEKK5HaZVWLQoLiC9Q+xDlSp+1LYidp6ybGE2OGg= +github.com/aws/aws-sdk-go-v2/config v1.29.6/go.mod h1:Ft+WLODzDQmCTHDvqAH1JfC2xxbZ0MxpZAcJqmE1LTQ= +github.com/aws/aws-sdk-go-v2/credentials v1.17.59 h1:9btwmrt//Q6JcSdgJOLI98sdr5p7tssS9yAsGe8aKP4= +github.com/aws/aws-sdk-go-v2/credentials v1.17.59/go.mod h1:NM8fM6ovI3zak23UISdWidyZuI1ghNe2xjzUZAyT+08= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.28 h1:KwsodFKVQTlI5EyhRSugALzsV6mG/SGrdjlMXSZSdso= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.28/go.mod h1:EY3APf9MzygVhKuPXAc5H+MkGb8k/DOSQjWS0LgkKqI= +github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.59 h1:5Vsrfdlf9KQP3leGX1dD7VwZq/3HAerEFoXAII4t6zo= +github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.59/go.mod h1:7XTNs3NYApJjkx6A2Fk9qq23qBuBnIU58k3fKC2Fr1I= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.32 h1:BjUcr3X3K0wZPGFg2bxOWW3VPN8rkE3/61zhP+IHviA= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.32/go.mod h1:80+OGC/bgzzFFTUmcuwD0lb4YutwQeKLFpmt6hoWapU= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.32 h1:m1GeXHVMJsRsUAqG6HjZWx9dj7F5TR+cF1bjyfYyBd4= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.32/go.mod h1:IitoQxGfaKdVLNg0hD8/DXmAqNy0H4K2H2Sf91ti8sI= github.com/aws/aws-sdk-go-v2/internal/ini v1.8.2 h1:Pg9URiobXy85kgFev3og2CuOZ8JZUBENF+dcgWBaYNk= github.com/aws/aws-sdk-go-v2/internal/ini v1.8.2/go.mod h1:FbtygfRFze9usAadmnGJNc8KsP346kEe+y2/oyhGAGc= -github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.29 h1:g9OUETuxA8i/Www5Cby0R3WSTe7ppFTZXHVLNskNS4w= -github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.29/go.mod h1:CQk+koLR1QeY1+vm7lqNfFii07DEderKq6T3F1L2pyc= -github.com/aws/aws-sdk-go-v2/service/autoscaling v1.51.8 h1:x/d0R0YAZG8noHkdo9wQF50Y0CiEEKVjjyfT0opH9pY= -github.com/aws/aws-sdk-go-v2/service/autoscaling v1.51.8/go.mod h1:U2qbxDy8EfZqeyOY8Awba8pmluw0kFJ4L/fZTiC3boY= -github.com/aws/aws-sdk-go-v2/service/cloudfront v1.44.6 h1:h1g8lxLhRRIOJKx0hCuTkeDCYOV/DnP8OGugmgvVihY= -github.com/aws/aws-sdk-go-v2/service/cloudfront v1.44.6/go.mod h1:B0VXbI7WDpoR4kvqKBf4i43tdzrKxp31/MqWV7KtVEk= -github.com/aws/aws-sdk-go-v2/service/ec2 v1.202.0 h1:/kB9Uf7fgpYNLvwhAW0YiDSg7xQyxB6MbEYoC0yXtjs= -github.com/aws/aws-sdk-go-v2/service/ec2 v1.202.0/go.mod h1:cRD0Fhzj0YD+uAh16NChQAv9/BB0S9x3YK9hLx1jb/k= -github.com/aws/aws-sdk-go-v2/service/elasticloadbalancingv2 v1.43.8 h1:ukbsLI1BgjYPVdhDXsIYMR+yhiEBjjE5jY6G2hCQs28= -github.com/aws/aws-sdk-go-v2/service/elasticloadbalancingv2 v1.43.8/go.mod h1:7eYWJcAR97y5ZlEtGF6Ux3HXRPBfXLDHZm6d7bXNQNI= +github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.32 h1:OIHj/nAhVzIXGzbAE+4XmZ8FPvro3THr6NlqErJc3wY= +github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.32/go.mod h1:LiBEsDo34OJXqdDlRGsilhlIiXR7DL+6Cx2f4p1EgzI= +github.com/aws/aws-sdk-go-v2/service/autoscaling v1.51.12 h1:Bfz5hDqAgm9NByWdA0zfof70CVkjb6SE3RwU75lj66Y= +github.com/aws/aws-sdk-go-v2/service/autoscaling v1.51.12/go.mod h1:+yg2Ygx7ParYfxoo1CLHzqD1zcmWuKNDfxuB8CrOx44= +github.com/aws/aws-sdk-go-v2/service/cloudfront v1.44.9 h1:4PpVlmo6btpGYqq+SRkxbDKvfFrn9Fq0IWkqww4o8Nc= +github.com/aws/aws-sdk-go-v2/service/cloudfront v1.44.9/go.mod h1:uBca+/1aH5v/RYWXqyymLrsbmx1vU9bBxeurlC627Gc= +github.com/aws/aws-sdk-go-v2/service/ec2 v1.202.4 h1:gdFRXlTMgV0+yrhQLAJKb+vX2K32Vw3n2TntDd+8AEM= +github.com/aws/aws-sdk-go-v2/service/ec2 v1.202.4/go.mod h1:nSbxgPGhyI9j/cMVSHUEEtNQzEYeNOkbHnHNeTuQqt0= +github.com/aws/aws-sdk-go-v2/service/elasticloadbalancingv2 v1.43.12 h1:PLoBTtHl376mmxe5NSMUx1UD8yiM+BgIi9yJ1SgibHk= +github.com/aws/aws-sdk-go-v2/service/elasticloadbalancingv2 v1.43.12/go.mod h1:h7JSZfD6QGeaAWpTk0+e1hQw2Venf5gh7UlUTEAiZL8= github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.2 h1:D4oz8/CzT9bAEYtVhSBmFj2dNOtaHOtMKc2vHBwYizA= github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.2/go.mod h1:Za3IHqTQ+yNcRHxu1OFucBh0ACZT4j4VQFF0BqpZcLY= -github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.5.3 h1:EP1ITDgYVPM2dL1bBBntJ7AW5yTjuWGz9XO+CZwpALU= -github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.5.3/go.mod h1:5lWNWeAgWenJ/BZ/CP9k9DjLbC0pjnM045WjXRPPi14= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.10 h1:hN4yJBGswmFTOVYqmbz1GBs9ZMtQe8SrYxPwrkrlRv8= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.10/go.mod h1:TsxON4fEZXyrKY+D+3d2gSTyJkGORexIYab9PTf56DA= -github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.10 h1:fXoWC2gi7tdJYNTPnnlSGzEVwewUchOi8xVq/dkg8Qs= -github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.10/go.mod h1:cvzBApD5dVazHU8C2rbBQzzzsKc8m5+wNJ9mCRZLKPc= -github.com/aws/aws-sdk-go-v2/service/resourcegroupstaggingapi v1.25.14 h1:oIgxyS1r3WcDMU+NyVycDQmfea6WLjJh8ZzmNMAQ4SQ= -github.com/aws/aws-sdk-go-v2/service/resourcegroupstaggingapi v1.25.14/go.mod h1:NerfbLSbEU2LZAlOLWXV02lnS9SVG3es9PXy71/4xlc= -github.com/aws/aws-sdk-go-v2/service/s3 v1.74.1 h1:9LawY3cDJ3HE+v2GMd5SOkNLDwgN4K7TsCjyVBYu/L4= -github.com/aws/aws-sdk-go-v2/service/s3 v1.74.1/go.mod h1:hHnELVnIHltd8EOF3YzahVX6F6y2C6dNqpRj1IMkS5I= -github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.34.14 h1:rhT0h8cSV5ZNZWy67Eqe3OQTFGRu9xwgyFsuGeIXmGQ= -github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.34.14/go.mod h1:CLEjbx0xH3ptihCb1l0XlrqoGfWD9xU0na47/s7fR/s= -github.com/aws/aws-sdk-go-v2/service/sso v1.24.12 h1:kznaW4f81mNMlREkU9w3jUuJvU5g/KsqDV43ab7Rp6s= -github.com/aws/aws-sdk-go-v2/service/sso v1.24.12/go.mod h1:bZy9r8e0/s0P7BSDHgMLXK2KvdyRRBIQ2blKlvLt0IU= -github.com/aws/aws-sdk-go-v2/service/ssooidc v1.28.11 h1:mUwIpAvILeKFnRx4h1dEgGEFGuV8KJ3pEScZWVFYuZA= -github.com/aws/aws-sdk-go-v2/service/ssooidc v1.28.11/go.mod h1:JDJtD+b8HNVv71axz8+S5492KM8wTzHRFpMKQbPlYxw= -github.com/aws/aws-sdk-go-v2/service/sts v1.33.10 h1:g9d+TOsu3ac7SgmY2dUf1qMgu/uJVTlQ4VCbH6hRxSw= -github.com/aws/aws-sdk-go-v2/service/sts v1.33.10/go.mod h1:WZfNmntu92HO44MVZAubQaz3qCuIdeOdog2sADfU6hU= +github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.5.6 h1:cCBJaT7EeEojpJ4s7wTDbhZlHVJOgNHN7iw6qVurGaw= +github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.5.6/go.mod h1:WYH1ABybY7JK9TITPnk6ZlP7gQB8psI4c9qDmMsnLSA= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.13 h1:SYVGSFQHlchIcy6e7x12bsrxClCXSP5et8cqVhL8cuw= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.13/go.mod h1:kizuDaLX37bG5WZaoxGPQR/LNFXpxp0vsUnqfkWXfNE= +github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.13 h1:OBsrtam3rk8NfBEq7OLOMm5HtQ9Yyw32X4UQMya/wjw= +github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.13/go.mod h1:3U4gFA5pmoCOja7aq4nSaIAGbaOHv2Yl2ug018cmC+Q= +github.com/aws/aws-sdk-go-v2/service/resourcegroupstaggingapi v1.25.18 h1:mr5lJ4N4nVUHpVXVYeNnqzW/xAvmLwVIX0EeIbMX+bU= +github.com/aws/aws-sdk-go-v2/service/resourcegroupstaggingapi v1.25.18/go.mod h1:9SEz0V+tRP4QVFx7kLqtoXMWRcp+n8quOj95wjOrZuQ= +github.com/aws/aws-sdk-go-v2/service/s3 v1.75.4 h1:DJYjOvNgC30JAcDCRmtQHoYK4trc7XetDXRTEAReGKA= +github.com/aws/aws-sdk-go-v2/service/s3 v1.75.4/go.mod h1:KuLNrwYJFaC2AVZ+CVVc12k9NyqwgWsoNNHjwqF6QNk= +github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.34.18 h1:U/gg5eOAPx9vzip9A6cQ2GkIAPBthHMaKDfZ/WWEuj0= +github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.34.18/go.mod h1:ul2OTb6zT/dpZX/2bxKVwa6eIDBBlPNuau9uZuIoRAI= +github.com/aws/aws-sdk-go-v2/service/sso v1.24.15 h1:/eE3DogBjYlvlbhd2ssWyeuovWunHLxfgw3s/OJa4GQ= +github.com/aws/aws-sdk-go-v2/service/sso v1.24.15/go.mod h1:2PCJYpi7EKeA5SkStAmZlF6fi0uUABuhtF8ILHjGc3Y= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.28.14 h1:M/zwXiL2iXUrHputuXgmO94TVNmcenPHxgLXLutodKE= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.28.14/go.mod h1:RVwIw3y/IqxC2YEXSIkAzRDdEU1iRabDPaYjpGCbCGQ= +github.com/aws/aws-sdk-go-v2/service/sts v1.33.14 h1:TzeR06UCMUq+KA3bDkujxK1GVGy+G8qQN/QVYzGLkQE= +github.com/aws/aws-sdk-go-v2/service/sts v1.33.14/go.mod h1:dspXf/oYWGWo6DEvj98wpaTeqt5+DMidZD0A9BYTizc= github.com/aws/smithy-go v1.22.2 h1:6D9hW43xKFrRx/tXXfAlIZc4JI+yQe6snnWcQyxSyLQ= github.com/aws/smithy-go v1.22.2/go.mod h1:irrKGvNn1InZwb2d7fkIRNucdfwR8R+Ts3wxYa/cJHg= -github.com/bazelbuild/buildtools v0.0.0-20250128121225-1d7634006480 h1:roY1wEc6EAldFDRBDXI+9XU7ej5Bc4nFvCmMaucP8W4= -github.com/bazelbuild/buildtools v0.0.0-20250128121225-1d7634006480/go.mod h1:PLNUetjLa77TCCziPsz0EI8a6CUxgC+1jgmWv0H25tg= +github.com/bazelbuild/buildtools v0.0.0-20250204160707-ad48c76ab9b5 h1:ls2GvHSkr+EXNZBBGVrPewx3nc54YBHCHd6v4BOlz9g= +github.com/bazelbuild/buildtools v0.0.0-20250204160707-ad48c76ab9b5/go.mod h1:PLNUetjLa77TCCziPsz0EI8a6CUxgC+1jgmWv0H25tg= github.com/bazelbuild/rules_go v0.52.0 h1:+ozpngVAW67pCAwfhepaXSSrG3yHcj8K9hNAxSYBno4= github.com/bazelbuild/rules_go v0.52.0/go.mod h1:M+YrupNArA7OiTlv++rFUgQ6Sm+ZXbQ5HPUj0cGa0us= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= @@ -212,19 +210,14 @@ github.com/bugsnag/panicwrap v0.0.0-20151223152923-e2c28503fcd0 h1:nvj0OLI3YqYXe github.com/bugsnag/panicwrap v0.0.0-20151223152923-e2c28503fcd0/go.mod h1:D/8v3kj0zr8ZAKg1AQ6crr+5VwKN5eIywRkfhyM/+dE= github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8= github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= -github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/census-instrumentation/opencensus-proto v0.4.1 h1:iKLQ0xPNFxR/2hzXZMrBo8f1j86j5WHzznCCQxV/b8g= -github.com/census-instrumentation/opencensus-proto v0.4.1/go.mod h1:4T9NM4+4Vw91VeyqjLS6ao50K5bOcLKN6Q42XnYaRYw= github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/chai2010/gettext-go v1.0.2 h1:1Lwwip6Q2QGsAdl/ZKPCwTe9fe0CjlUbqj5bFNSjIRk= github.com/chai2010/gettext-go v1.0.2/go.mod h1:y+wnP2cHYaVj19NZhYKAwEMH2CI1gNHeQQ+5AjwawxA= github.com/chengxilo/virtualterm v1.0.4 h1:Z6IpERbRVlfB8WkOmtbHiDbBANU7cimRIof7mk9/PwM= github.com/chengxilo/virtualterm v1.0.4/go.mod h1:DyxxBZz/x1iqJjFxTFcr6/x+jSpqN0iwWCOK1q10rlY= -github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/cloudflare/circl v1.5.0 h1:hxIWksrX6XN5a1L2TI/h53AGPhNHoUBo+TD1ms9+pys= github.com/cloudflare/circl v1.5.0/go.mod h1:uddAzsPgqdMAYatqJ0lsjX1oECcQLIlRpzZh3pJrofs= -github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= github.com/cncf/xds/go v0.0.0-20240905190251-b4127c9b8d78 h1:QVw89YDxXxEe+l8gU8ETbOasdwEV+avkR75ZzsVV9WI= github.com/cncf/xds/go v0.0.0-20240905190251-b4127c9b8d78/go.mod h1:W+zGtBO5Y1IgJhy4+A9GOqVhqLpfZi+vwmdNXUehLA8= github.com/containerd/cgroups v1.1.0 h1:v8rEWFl6EoqHB+swVNjVoCJE8o3jX7e8nqBGPLaDFBM= @@ -290,18 +283,18 @@ github.com/docker/libtrust v0.0.0-20160708172513-aabc10ec26b7 h1:UhxFibDNY/bfvqU github.com/docker/libtrust v0.0.0-20160708172513-aabc10ec26b7/go.mod h1:cyGadeNEkKy96OOhEzfZl+yxihPEzKnqJwvfuSUqbZE= github.com/edgelesssys/go-azguestattestation v0.0.0-20240513062303-05f8770a633d h1:XcoMVhZve0RRkSxFDn9Bs/z4FpHqZ3eHgVNWNCNOkqc= github.com/edgelesssys/go-azguestattestation v0.0.0-20240513062303-05f8770a633d/go.mod h1:Lz4QaomI4wU2YbatD4/W7vatW2Q35tnkoJezB1clscc= -github.com/edgelesssys/go-tdx-qpl v0.0.0-20240123150912-dcad3c41ec5f h1:TCGUmmH50cQBGXPJsn32APf93fmWQXcSMi7pMbDPtV0= -github.com/edgelesssys/go-tdx-qpl v0.0.0-20240123150912-dcad3c41ec5f/go.mod h1:IC72qyykUIWl0ZmSk53L4xbLCFDBEGZVaujUmPQOEyw= +github.com/edgelesssys/go-tdx-qpl v0.0.0-20250129202750-607ac61e2377 h1:5JMJiBhvOUUR7EZ0UyeSy7a1WrqB2eM+DX3odLSHAh4= +github.com/edgelesssys/go-tdx-qpl v0.0.0-20250129202750-607ac61e2377/go.mod h1:IC72qyykUIWl0ZmSk53L4xbLCFDBEGZVaujUmPQOEyw= github.com/emicklei/go-restful/v3 v3.11.0 h1:rAQeMHw1c7zTmncogyy8VvRZwtkmkZ4FxERmMY4rD+g= github.com/emicklei/go-restful/v3 v3.11.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= github.com/emirpasic/gods v1.18.1 h1:FXtiHYKDGKCW2KzwZKx0iC0PQmdlorYgdFG9jPXJ1Bc= github.com/emirpasic/gods v1.18.1/go.mod h1:8tpGGwCnJ5H4r6BWwaV6OrWmMoPhUl5jm/FMNAnJvWQ= -github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= -github.com/envoyproxy/go-control-plane v0.13.1 h1:vPfJZCkob6yTMEgS+0TwfTUfbHjfy/6vOJ8hUWX/uXE= -github.com/envoyproxy/go-control-plane v0.13.1/go.mod h1:X45hY0mufo6Fd0KW3rqsGvQMw58jvjymeCzBU3mWyHw= -github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/envoyproxy/go-control-plane v0.13.4 h1:zEqyPVyku6IvWCFwux4x9RxkLOMUL+1vC9xUFv5l2/M= +github.com/envoyproxy/go-control-plane v0.13.4/go.mod h1:kDfuBlDVsSj2MjrLEtRWtHlsWIFcGyB2RMO44Dc5GZA= +github.com/envoyproxy/go-control-plane/envoy v1.32.3 h1:hVEaommgvzTjTd4xCaFd+kEQ2iYBtGxP6luyLrx6uOk= +github.com/envoyproxy/go-control-plane/envoy v1.32.3/go.mod h1:F6hWupPfh75TBXGKA++MCT/CZHFq5r9/uwt/kQYkZfE= +github.com/envoyproxy/go-control-plane/ratelimit v0.1.0 h1:/G9QYbddjL25KvtKTv3an9lx6VBE2cnb8wp1vEGNYGI= +github.com/envoyproxy/go-control-plane/ratelimit v0.1.0/go.mod h1:Wk+tMFAFbCXaJPzVVHnPgRKdUdwW/KdbRt94AzgRee4= github.com/envoyproxy/protoc-gen-validate v1.1.0 h1:tntQDh69XqOCOZsDz0lVJQez/2L6Uu2PdjCQwWCJ3bM= github.com/envoyproxy/protoc-gen-validate v1.1.0/go.mod h1:sXRDRVmzEbkM7CVcM06s9shE/m23dg3wzjl0UWqJ2q4= github.com/evanphx/json-patch v5.9.0+incompatible h1:fBXyNpNMuTTDdquAq/uisOr2lShz4oaXpDTX2bLe7ls= @@ -407,22 +400,12 @@ github.com/golang-jwt/jwt/v4 v4.5.1 h1:JdqV9zKUdtaa9gdPlywC3aeoEsR681PlKC+4F5gQg github.com/golang-jwt/jwt/v4 v4.5.1/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= github.com/golang-jwt/jwt/v5 v5.2.1 h1:OuVbFODueb089Lh128TAcimifWaLhJwVflnrgM17wHk= github.com/golang-jwt/jwt/v5 v5.2.1/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk= -github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE= github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/protobuf v1.1.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= -github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= -github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= -github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= -github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= -github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= -github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= @@ -438,12 +421,8 @@ github.com/google/gnostic-models v0.6.8 h1:yo/ABAfM5IMRsS1VnXjTBvUb61tFIHozhlYvR github.com/google/gnostic-models v0.6.8/go.mod h1:5n7qKqH0f5wFt+aWF8CW6pZLLNOfYuF5OpfBSENuI8U= github.com/google/go-attestation v0.5.1 h1:jqtOrLk5MNdliTKjPbIPrAaRKJaKW+0LIU2n/brJYms= github.com/google/go-attestation v0.5.1/go.mod h1:KqGatdUhg5kPFkokyzSBDxwSCFyRgIgtRkMp6c3lOBQ= -github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= @@ -452,8 +431,8 @@ github.com/google/go-configfs-tsm v0.2.2 h1:YnJ9rXIOj5BYD7/0DNnzs8AOp7UcvjfTvt21 github.com/google/go-configfs-tsm v0.2.2/go.mod h1:EL1GTDFMb5PZQWDviGfZV9n87WeGTR/JUg13RfwkgRo= github.com/google/go-containerregistry v0.20.2 h1:B1wPJ1SN/S7pB+ZAimcciVD+r+yV/l/DSArMxlbwseo= github.com/google/go-containerregistry v0.20.2/go.mod h1:z38EKdKh4h7IP2gSfUUqEvalZBqs6AoLeWfUy34nQC8= -github.com/google/go-sev-guest v0.12.2-0.20250116170741-e5df25990fc0 h1:DMFFpe9CG2u2ytgMZm9qOv1EjHsRK3VnVRmrKjCDB2I= -github.com/google/go-sev-guest v0.12.2-0.20250116170741-e5df25990fc0/go.mod h1:SK9vW+uyfuzYdVN0m8BShL3OQCtXZe/JPF7ZkpD3760= +github.com/google/go-sev-guest v0.12.2-0.20250205052930-65042ded71f9 h1:QEzwhdv1S+QD5K8GJnkQKGPng5ftJuwIHAKirFVcbDk= +github.com/google/go-sev-guest v0.12.2-0.20250205052930-65042ded71f9/go.mod h1:SK9vW+uyfuzYdVN0m8BShL3OQCtXZe/JPF7ZkpD3760= github.com/google/go-tdx-guest v0.3.1 h1:gl0KvjdsD4RrJzyLefDOvFOUH3NAJri/3qvaL5m83Iw= github.com/google/go-tdx-guest v0.3.1/go.mod h1:/rc3d7rnPykOPuY8U9saMyEps0PZDThLk/RygXm04nE= github.com/google/go-tpm v0.9.3 h1:+yx0/anQuGzi+ssRqeD6WpXjW2L/V0dItUayO0i9sRc= @@ -476,7 +455,6 @@ github.com/google/s2a-go v0.1.9/go.mod h1:YA0Ei2ZQL3acow2O62kdp9UlnvMmU7kA6Eutn0 github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 h1:El6M4kTTCOh6aBiKaUGG7oYTSPP8MxqL4YI3kZKwcP4= github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/googleapis/enterprise-certificate-proxy v0.3.4 h1:XYIDZApgAnrN1c855gTgghdIA6Stxb52D5RnLI1SLyw= @@ -485,8 +463,8 @@ github.com/googleapis/gax-go/v2 v2.14.1 h1:hb0FFeiPaQskmvakKu5EbCbpntQn48jyHuvrk github.com/googleapis/gax-go/v2 v2.14.1/go.mod h1:Hb/NubMaVM88SrNkvl8X/o8XWwDJEPqouaLeN2IUxoA= github.com/gophercloud/gophercloud/v2 v2.4.0 h1:XhP5tVEH3ni66NSNK1+0iSO6kaGPH/6srtx6Cr+8eCg= github.com/gophercloud/gophercloud/v2 v2.4.0/go.mod h1:uJWNpTgJPSl2gyzJqcU/pIAhFUWvIkp8eE8M15n9rs4= -github.com/gophercloud/utils/v2 v2.0.0-20250106080359-c8704d65b4fa h1:Hc3Dc0KeW5ejxPKbKd1HNvzLUJXT3YLXq6nz2dogrws= -github.com/gophercloud/utils/v2 v2.0.0-20250106080359-c8704d65b4fa/go.mod h1:z7jvB7v6jhL8w58JMuaPV7pGp07PTvOwIL3Vk2stf3M= +github.com/gophercloud/utils/v2 v2.0.0-20250205065254-a1bff20237e7 h1:GdOOPrlENsJQ2CrTNGezlIaGc+ErjDGA+5eSTojH2FM= +github.com/gophercloud/utils/v2 v2.0.0-20250205065254-a1bff20237e7/go.mod h1:U1WE9Dd6+RhpQY72JdtvRNRd6QeUhCedSBhijvFOn34= github.com/gorilla/handlers v1.5.1 h1:9lRY6j8DEeeBT10CvO9hGW0gmky0BprnvDI5vfhUHH4= github.com/gorilla/handlers v1.5.1/go.mod h1:t8XrUpc4KVXb7HGyJ4/cEnwQiaxrX/hz1Zv/4g96P1Q= github.com/gorilla/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY= @@ -519,8 +497,8 @@ github.com/hashicorp/go-kms-wrapping/v2 v2.0.18 h1:DLfC677GfKEpSAFpEWvl1vXsGpEcS github.com/hashicorp/go-kms-wrapping/v2 v2.0.18/go.mod h1:t/eaR/mi2mw3klfl1WEAuiLKrlZ/Q8cosmsT+RIPLu0= github.com/hashicorp/go-kms-wrapping/wrappers/awskms/v2 v2.0.11 h1:J9zGa9SlcOHT3SQTj0Vv3shHo0anWbs58weURGCgChI= github.com/hashicorp/go-kms-wrapping/wrappers/awskms/v2 v2.0.11/go.mod h1:iAOCu7/lG5eugg8+k7NVvQt0IpWT8s2Q9wnMtC/guM4= -github.com/hashicorp/go-kms-wrapping/wrappers/azurekeyvault/v2 v2.0.12 h1:ZL6jMQVOOvtog9/L9MLR1J7VssliIBVEFQlzKC9nn2c= -github.com/hashicorp/go-kms-wrapping/wrappers/azurekeyvault/v2 v2.0.12/go.mod h1:qAc0pzuhbesYKpFUmCWCPiOo6XdgpGEeYSE7Y7EXfgM= +github.com/hashicorp/go-kms-wrapping/wrappers/azurekeyvault/v2 v2.0.13 h1:Vh/i9Q0/2dpbK5FUPnpZJSIE6iPLe471Yvmi+CPnpS0= +github.com/hashicorp/go-kms-wrapping/wrappers/azurekeyvault/v2 v2.0.13/go.mod h1:fWxrv9YkAMqtsISde5mcutoMvuiH4kyg1AlDzzmqRh8= github.com/hashicorp/go-kms-wrapping/wrappers/gcpckms/v2 v2.0.13 h1:NGBZnF+yPRZ3gjFl69Y2m58/U0iyB2oH9HaznL9tekA= github.com/hashicorp/go-kms-wrapping/wrappers/gcpckms/v2 v2.0.13/go.mod h1:4Xb+6d8VPeDcUNuh4toPqJlDpkajeJyIQeg36TtWhKw= github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= @@ -742,7 +720,6 @@ github.com/prometheus/client_golang v1.20.5 h1:cxppBPuYhUnsO6yo/aoRol4L7q7UFfdm+ github.com/prometheus/client_golang v1.20.5/go.mod h1:PIEt8X02hGcP8JWbeHyeZ53Y/jReSnHgO035n//V5WE= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E= github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY= github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= @@ -770,10 +747,10 @@ github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/ryanuber/go-glob v1.0.0 h1:iQh3xXAumdQ+4Ufa5b25cRpC5TYKlno6hsv6Cb3pkBk= github.com/ryanuber/go-glob v1.0.0/go.mod h1:807d1WSdnB0XRJzKNil9Om6lcp/3a0v4qIHxIXzX/Yc= -github.com/samber/lo v1.47.0 h1:z7RynLwP5nbyRscyvcD043DWYoOcYRv3mV8lBeqOCLc= -github.com/samber/lo v1.47.0/go.mod h1:RmDH9Ct32Qy3gduHQuKJ3gW1fMHAnE/fAzQuf6He5cU= -github.com/samber/slog-multi v1.3.3 h1:qhFXaYdW73FIWLt8SrXMXfPwY58NpluzKDwRdPvhWWY= -github.com/samber/slog-multi v1.3.3/go.mod h1:ACuZ5B6heK57TfMVkVknN2UZHoFfjCwRxR0Q2OXKHlo= +github.com/samber/lo v1.49.1 h1:4BIFyVfuQSEpluc7Fua+j1NolZHiEHEpaSEKdsH0tew= +github.com/samber/lo v1.49.1/go.mod h1:dO6KHFzUKXgP8LDhU0oI8d2hekjXnGOu0DB8Jecxd6o= +github.com/samber/slog-multi v1.4.0 h1:pwlPMIE7PrbTHQyKWDU+RIoxP1+HKTNOujk3/kdkbdg= +github.com/samber/slog-multi v1.4.0/go.mod h1:FsQ4Uv2L+E/8TZt+/BVgYZ1LoDWCbfCU21wVIoMMrO8= github.com/sassoftware/relic v7.2.1+incompatible h1:Pwyh1F3I0r4clFJXkSI8bOyJINGqpgjJU3DYAZeI05A= github.com/sassoftware/relic v7.2.1+incompatible/go.mod h1:CWfAxv73/iLZ17rbyhIEq3K9hs5w6FpNMdUT//qR+zk= github.com/sassoftware/relic/v7 v7.6.2 h1:rS44Lbv9G9eXsukknS4mSjIAuuX+lMq/FnStgmZlUv4= @@ -803,8 +780,9 @@ github.com/spf13/cast v1.7.0 h1:ntdiHjuueXFgm5nzDRdOS4yfT43P5Fnud6DH50rz/7w= github.com/spf13/cast v1.7.0/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo= github.com/spf13/cobra v1.8.1 h1:e5/vxKd/rZsfSJMUX1agtjeTDf+qv1/JdBF8gg5k9ZM= github.com/spf13/cobra v1.8.1/go.mod h1:wHxEcudfqmLYa8iTfL+OuZPbBZkmvliBWKIezN3kD9Y= -github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +github.com/spf13/pflag v1.0.6 h1:jFzHGLGAlb3ruxLB8MhbI6A8+AQX/2eW4qeyNZXNp2o= +github.com/spf13/pflag v1.0.6/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= @@ -819,7 +797,6 @@ github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/ github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= -github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= @@ -884,28 +861,30 @@ go.mozilla.org/pkcs7 v0.0.0-20200128120323-432b2356ecb1 h1:A/5uWzF44DlIgdm/PQFwf go.mozilla.org/pkcs7 v0.0.0-20200128120323-432b2356ecb1/go.mod h1:SNgMg+EgDFwmvSmLRTNKC5fegJjB7v23qTQ0XLGUNHk= go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0= go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= -go.opentelemetry.io/contrib/detectors/gcp v1.32.0 h1:P78qWqkLSShicHmAzfECaTgvslqHxblNE9j62Ws1NK8= -go.opentelemetry.io/contrib/detectors/gcp v1.32.0/go.mod h1:TVqo0Sda4Cv8gCIixd7LuLwW4EylumVWfhjZJjDD4DU= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.54.0 h1:r6I7RJCN86bpD/FQwedZ0vSixDpwuWREjW9oRMsmqDc= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.54.0/go.mod h1:B9yO6b04uB80CzjedvewuqDhxJxi11s7/GtiGa8bAjI= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.54.0 h1:TT4fX+nBOA/+LUkobKGW1ydGcn+G3vRw9+g5HwCphpk= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.54.0/go.mod h1:L7UH0GbB0p47T4Rri3uHjbpCFYrVrwc1I25QhNPiGK8= -go.opentelemetry.io/otel v1.32.0 h1:WnBN+Xjcteh0zdk01SVqV55d/m62NJLJdIyb4y/WO5U= -go.opentelemetry.io/otel v1.32.0/go.mod h1:00DCVSB0RQcnzlwyTfqtxSm+DRr9hpYrHjNGiBHVQIg= +go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA= +go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A= +go.opentelemetry.io/contrib/detectors/gcp v1.33.0 h1:FVPoXEoILwgbZUu4X7YSgsESsAmGRgoYcnXkzgQPhP4= +go.opentelemetry.io/contrib/detectors/gcp v1.33.0/go.mod h1:ZHrLmr4ikK2AwRj9QL+c9s2SOlgoSRyMpNVzUj2fZqI= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.58.0 h1:PS8wXpbyaDJQ2VDHHncMe9Vct0Zn1fEjpsjrLxGJoSc= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.58.0/go.mod h1:HDBUsEjOuRC0EzKZ1bSaRGZWUBAzo+MhAcUUORSr4D0= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.58.0 h1:yd02MEjBdJkG3uabWP9apV+OuWRIXGDuJEUJbOHmCFU= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.58.0/go.mod h1:umTcuxiv1n/s/S6/c2AT/g2CQ7u5C59sHDNmfSwgz7Q= +go.opentelemetry.io/otel v1.34.0 h1:zRLXxLCgL1WyKsPVrgbSdMN4c0FMkDAskSTQP+0hdUY= +go.opentelemetry.io/otel v1.34.0/go.mod h1:OWFPOQ+h4G8xpyjgqo4SxJYdDQ/qmRH+wivy7zzx9oI= go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.28.0 h1:3Q/xZUyC1BBkualc9ROb4G8qkH90LXEIICcs5zv1OYY= go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.28.0/go.mod h1:s75jGIWA9OfCMzF0xr+ZgfrB5FEbbV7UuYo32ahUiFI= go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.19.0 h1:IeMeyr1aBvBiPVYihXIaeIZba6b8E1bYp7lbdxK8CQg= go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.19.0/go.mod h1:oVdCUtjq9MK9BlS7TtucsQwUcXcymNiEDjgDD2jMtZU= go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.29.0 h1:WDdP9acbMYjbKIyJUhTvtzj601sVJOqgWdUxSdR/Ysc= go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.29.0/go.mod h1:BLbf7zbNIONBLPwvFnwNHGj4zge8uTCM/UPIVW1Mq2I= -go.opentelemetry.io/otel/metric v1.32.0 h1:xV2umtmNcThh2/a/aCP+h64Xx5wsj8qqnkYZktzNa0M= -go.opentelemetry.io/otel/metric v1.32.0/go.mod h1:jH7CIbbK6SH2V2wE16W05BHCtIDzauciCRLoc/SyMv8= -go.opentelemetry.io/otel/sdk v1.32.0 h1:RNxepc9vK59A8XsgZQouW8ue8Gkb4jpWtJm9ge5lEG4= -go.opentelemetry.io/otel/sdk v1.32.0/go.mod h1:LqgegDBjKMmb2GC6/PrTnteJG39I8/vJCAP9LlJXEjU= +go.opentelemetry.io/otel/metric v1.34.0 h1:+eTR3U0MyfWjRDhmFMxe2SsW64QrZ84AOhvqS7Y+PoQ= +go.opentelemetry.io/otel/metric v1.34.0/go.mod h1:CEDrp0fy2D0MvkXE+dPV7cMi8tWZwX3dmaIhwPOaqHE= +go.opentelemetry.io/otel/sdk v1.34.0 h1:95zS4k/2GOy069d321O8jWgYsW3MzVV+KuSPKp7Wr1A= +go.opentelemetry.io/otel/sdk v1.34.0/go.mod h1:0e/pNiaMAqaykJGKbi+tSjWfNNHMTxoC9qANsCzbyxU= go.opentelemetry.io/otel/sdk/metric v1.32.0 h1:rZvFnvmvawYb0alrYkjraqJq0Z4ZUJAiyYCU9snn1CU= go.opentelemetry.io/otel/sdk/metric v1.32.0/go.mod h1:PWeZlq0zt9YkYAp3gjKZ0eicRYvOh1Gd+X99x6GHpCQ= -go.opentelemetry.io/otel/trace v1.32.0 h1:WIC9mYrXf8TmY/EXuULKc8hR17vE+Hjv2cssQDe03fM= -go.opentelemetry.io/otel/trace v1.32.0/go.mod h1:+i4rkvCraA+tG6AzwloGaCtkx53Fa+L+V8e9a7YvhT8= +go.opentelemetry.io/otel/trace v1.34.0 h1:+ouXS2V8Rd4hp4580a8q23bg0azF2nI8cqLYnC8mh/k= +go.opentelemetry.io/otel/trace v1.34.0/go.mod h1:Svm7lSjQD7kG7KJ/MUHPVXSDGz2OX4h0M2jHBhmSfRE= go.opentelemetry.io/proto/otlp v1.3.1 h1:TrMUixzpM0yuc/znrFTP9MMRh8trP93mkCiDVeXrui0= go.opentelemetry.io/proto/otlp v1.3.1/go.mod h1:0X1WI4de4ZsLrrJNLAQbFeLCm3T7yBkR0XqQ7niQU+8= go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= @@ -924,30 +903,21 @@ golang.org/x/crypto v0.6.0/go.mod h1:OFC/31mSvZgRz0V1QTNCzfAI1aIRzbiufJtkMIlEp58 golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU= golang.org/x/crypto v0.32.0 h1:euUpcYgM8WcP71gNpTqQCn6rC2t6ULUPiOzfWaXVVfc= golang.org/x/crypto v0.32.0/go.mod h1:ZnnJkOaASj8g0AjIduWNlq2NRxL0PlBrbKVyZ6V/Ugc= -golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20250128182459-e0ece0dbea4c h1:KL/ZBHXgKGVmuZBZ01Lt57yE5ws8ZPSkkihmEyq7FXc= golang.org/x/exp v0.0.0-20250128182459-e0ece0dbea4c/go.mod h1:tujkw807nyEEAamNbDrEGzRav+ilXA7PCRAd6xsmwiU= -golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= -golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/mod v0.22.0 h1:D4nJWe9zXqHOmWqj4VMOJhvzj7bEZg4wEYa759z1pH4= -golang.org/x/mod v0.22.0/go.mod h1:6SkKJ3Xj0I0BrPOZoBy3bdMptDDU9oJrpohJ3eWZ1fY= -golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/mod v0.23.0 h1:Zb7khfcRGKk+kqfxFaP5tZqCnDZMjC5VtUBs87Hr6QM= +golang.org/x/mod v0.23.0/go.mod h1:6SkKJ3Xj0I0BrPOZoBy3bdMptDDU9oJrpohJ3eWZ1fY= golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= @@ -955,7 +925,6 @@ golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= golang.org/x/net v0.34.0 h1:Mb7Mrk043xzHgnRM88suvJFwzVrRfHEHJEl5/71CKw0= golang.org/x/net v0.34.0/go.mod h1:di0qlW3YNM5oh6GqDGQr92MyTozJPmybPK4Ev/Gm31k= -golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.25.0 h1:CY4y7XT9v0cRI9oupztF8AgiIu99L/ksR/Xp/6jrZ70= golang.org/x/oauth2 v0.25.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -966,9 +935,8 @@ golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.10.0 h1:3NQrjDixjgGwUOCaF8w2+VYHv0Ve/vGYSbdkTa98gmQ= -golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= -golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sync v0.11.0 h1:GGz8+XQP4FvTTrjZPzNKTMFtSXH80RAzG+5ghFPgK9w= +golang.org/x/sync v0.11.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -997,8 +965,8 @@ golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.29.0 h1:TPYlXGxvx1MGTn2GiZDhnjPA9wZzZeGKHHmKhHYvgaU= -golang.org/x/sys v0.29.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.30.0 h1:QjkSwP/36a20jFYWkSue1YwXzLmsV5Gfq7Eiy72C1uc= +golang.org/x/sys v0.30.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= @@ -1015,15 +983,11 @@ golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= -golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo= -golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= +golang.org/x/text v0.22.0 h1:bofq7m3/HAFvbF51jz3Q9wLg3jkvSPuiZu/pD1XwgtM= +golang.org/x/text v0.22.0/go.mod h1:YRoo4H8PVmsu+E3Ou7cqLVH8oXWIHVoX0jqUWALQhfY= golang.org/x/time v0.9.0 h1:EsRrnYcQiGH+5FfbgvV4AP7qEZstoyrHB0DzarOQ4ZY= golang.org/x/time v0.9.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= -golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= @@ -1037,37 +1001,19 @@ golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8T golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= gomodules.xyz/jsonpatch/v2 v2.4.0 h1:Ci3iUJyx9UeRx7CeFN8ARgGbkESwJK+KB9lLcWxY/Zw= gomodules.xyz/jsonpatch/v2 v2.4.0/go.mod h1:AH3dM2RI6uoBZxn3LVrfvJ3E0/9dG4cSrbuBJT4moAY= -google.golang.org/api v0.219.0 h1:nnKIvxKs/06jWawp2liznTBnMRQBEPpGo7I+oEypTX0= -google.golang.org/api v0.219.0/go.mod h1:K6OmjGm+NtLrIkHxv1U3a0qIf/0JOvAHd5O/6AoyKYE= +google.golang.org/api v0.220.0 h1:3oMI4gdBgB72WFVwE1nerDD8W3HUOS4kypK6rRLbGns= +google.golang.org/api v0.220.0/go.mod h1:26ZAlY6aN/8WgpCzjPNy18QpYaz7Zgg1h0qe1GkZEmY= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= -google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.6.8 h1:IhEN5q69dyKagZPYMSdIjS2HqprW324FRQZJcGqPAsM= google.golang.org/appengine v1.6.8/go.mod h1:1jJ3jBArFh5pcgW8gCtRJnepW8FzD1V44FJffLiz/Ds= -google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= -google.golang.org/genproto v0.0.0-20241118233622-e639e219e697 h1:ToEetK57OidYuqD4Q5w+vfEnPvPpuTwedCNVohYJfNk= -google.golang.org/genproto v0.0.0-20241118233622-e639e219e697/go.mod h1:JJrvXBWRZaFMxBufik1a4RpFw4HhgVtBBWQeQgUj2cc= -google.golang.org/genproto/googleapis/api v0.0.0-20241209162323-e6fa225c2576 h1:CkkIfIt50+lT6NHAVoRYEyAvQGFM7xEwXUUywFvEb3Q= -google.golang.org/genproto/googleapis/api v0.0.0-20241209162323-e6fa225c2576/go.mod h1:1R3kvZ1dtP3+4p4d3G8uJ8rFk/fWlScl38vanWACI08= -google.golang.org/genproto/googleapis/rpc v0.0.0-20250124145028-65684f501c47 h1:91mG8dNTpkC0uChJUQ9zCiRqx3GEEFOWaRZ0mI6Oj2I= -google.golang.org/genproto/googleapis/rpc v0.0.0-20250124145028-65684f501c47/go.mod h1:+2Yz8+CLJbIfL9z73EW45avw8Lmge3xVElCP9zEKi50= -google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= -google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= -google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= +google.golang.org/genproto v0.0.0-20250122153221-138b5a5a4fd4 h1:Pw6WnI9W/LIdRxqK7T6XGugGbHIRl5Q7q3BssH6xk4s= +google.golang.org/genproto v0.0.0-20250122153221-138b5a5a4fd4/go.mod h1:qbZzneIOXSq+KFAFut9krLfRLZiFLzZL5u2t8SV83EE= +google.golang.org/genproto/googleapis/api v0.0.0-20250124145028-65684f501c47 h1:5iw9XJTD4thFidQmFVvx0wi4g5yOHk76rNRUxz1ZG5g= +google.golang.org/genproto/googleapis/api v0.0.0-20250124145028-65684f501c47/go.mod h1:AfA77qWLcidQWywD0YgqfpJzf50w2VjzBml3TybHeJU= +google.golang.org/genproto/googleapis/rpc v0.0.0-20250127172529-29210b9bc287 h1:J1H9f+LEdWAfHcez/4cvaVBox7cOYT+IU6rgqj5x++8= +google.golang.org/genproto/googleapis/rpc v0.0.0-20250127172529-29210b9bc287/go.mod h1:8BS3B93F/U1juMFq9+EDk+qOT5CO1R9IzXxG3PTqiRk= google.golang.org/grpc v1.70.0 h1:pWFv03aZoHzlRKHWicjsZytKAiYCtNS0dHbXnIdq7jQ= google.golang.org/grpc v1.70.0/go.mod h1:ofIJqVKDXx/JiXrwr2IG4/zwdH9txy3IlF40RmcJSQw= -google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= -google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= -google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= -google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= -google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= -google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.36.4 h1:6A3ZDJHn/eNqc1i+IdefRzy/9PokBTPvcqMySR7NNIM= @@ -1096,8 +1042,6 @@ gotest.tools/v3 v3.4.0 h1:ZazjZUfuVeZGLAmlKKuyv3IKP5orXcwtOwDQH6YVr6o= gotest.tools/v3 v3.4.0/go.mod h1:CtbdzLSsqVhDgMtKsx03ird5YTGB3ar27v0u/yKBW5g= helm.sh/helm/v3 v3.17.0 h1:DUD4AGdNVn7PSTYfxe1gmQG7s18QeWv/4jI9TubnhT0= helm.sh/helm/v3 v3.17.0/go.mod h1:Mo7eGyKPPHlS0Ml67W8z/lbkox/gD9Xt1XpD6bxvZZA= -honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= k8s.io/api v0.32.1 h1:f562zw9cy+GvXzXf0CKlVQ7yHJVYzLfL6JAS4kOAaOc= k8s.io/api v0.32.1/go.mod h1:/Yi/BqkuueW1BgpoePYBRdDYfjPF5sgTr5+YqDZra5k= k8s.io/apiextensions-apiserver v0.32.1 h1:hjkALhRUeCariC8DiVmb5jj0VjIc1N0DREP32+6UXZw= From cb77e7bb0db111f008b16b7ee90fb3b03abbd38e Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 6 Feb 2025 12:40:38 +0100 Subject: [PATCH 103/311] deps: update dependency asciinema-player to v3.9.0 (#3635) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- docs/package-lock.json | 8 ++++---- docs/package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/package-lock.json b/docs/package-lock.json index df99269fb..99f36b953 100644 --- a/docs/package-lock.json +++ b/docs/package-lock.json @@ -13,7 +13,7 @@ "@docusaurus/preset-classic": "3.7.0", "@docusaurus/theme-mermaid": "3.7.0", "@mdx-js/react": "3.1.0", - "asciinema-player": "3.8.2", + "asciinema-player": "3.9.0", "clsx": "2.1.1", "prism-react-renderer": "2.4.1", "react": "18.3.1", @@ -6171,9 +6171,9 @@ } }, "node_modules/asciinema-player": { - "version": "3.8.2", - "resolved": "https://registry.npmjs.org/asciinema-player/-/asciinema-player-3.8.2.tgz", - "integrity": "sha512-Lgcnj9u/H6sRpGRX1my7Azcay6llLmB/GVkCGcDbPwdTVTisS1ir8SQ9jRWRvjlLUjpSJkN0euruvy3sLRM8tw==", + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/asciinema-player/-/asciinema-player-3.9.0.tgz", + "integrity": "sha512-SXVFImVzeNr8ZUdNIHABGuzlbnGWTKy245AquAjODsAnv+Lp6vxjYGN0LfA8ns30tnx/ag/bMrTbLq13TpHE6w==", "license": "Apache-2.0", "dependencies": { "@babel/runtime": "^7.21.0", diff --git a/docs/package.json b/docs/package.json index e2d482d70..e6ce2f372 100644 --- a/docs/package.json +++ b/docs/package.json @@ -19,7 +19,7 @@ "@docusaurus/preset-classic": "3.7.0", "@docusaurus/theme-mermaid": "3.7.0", "@mdx-js/react": "3.1.0", - "asciinema-player": "3.8.2", + "asciinema-player": "3.9.0", "clsx": "2.1.1", "prism-react-renderer": "2.4.1", "react": "18.3.1", From 4d79ce277396744328ed1bb430b25009dc679c88 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Wei=C3=9Fe?= <66256922+daniel-weisse@users.noreply.github.com> Date: Fri, 7 Feb 2025 10:15:14 +0100 Subject: [PATCH 104/311] deps: bump Go to v1.23.6 (#3642) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Daniel Weiße --- .github/workflows/build-ccm-gcp.yml | 2 +- .github/workflows/build-os-image-scheduled.yml | 2 +- .github/workflows/codeql.yml | 2 +- .github/workflows/release.yml | 2 +- .github/workflows/test-operator-codegen.yml | 2 +- 3rdparty/gcp-guest-agent/Dockerfile | 2 +- MODULE.bazel | 2 +- go.mod | 2 +- go.work | 4 ++-- hack/tools/go.mod | 2 +- 10 files changed, 11 insertions(+), 11 deletions(-) diff --git a/.github/workflows/build-ccm-gcp.yml b/.github/workflows/build-ccm-gcp.yml index f62f26a14..699e94c37 100644 --- a/.github/workflows/build-ccm-gcp.yml +++ b/.github/workflows/build-ccm-gcp.yml @@ -31,7 +31,7 @@ jobs: - name: Setup Go environment uses: actions/setup-go@f111f3307d8850f501ac008e886eec1fd1932a34 # v5.3.0 with: - go-version: "1.23.5" + go-version: "1.23.6" cache: false - name: Install Crane diff --git a/.github/workflows/build-os-image-scheduled.yml b/.github/workflows/build-os-image-scheduled.yml index 4ac19874b..9df741ef6 100644 --- a/.github/workflows/build-os-image-scheduled.yml +++ b/.github/workflows/build-os-image-scheduled.yml @@ -67,7 +67,7 @@ jobs: - name: Setup Go environment uses: actions/setup-go@f111f3307d8850f501ac008e886eec1fd1932a34 # v5.3.0 with: - go-version: "1.23.5" + go-version: "1.23.6" cache: false - name: Determine version diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index d8cc0a18e..61ea34bd8 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -40,7 +40,7 @@ jobs: if: matrix.language == 'go' uses: actions/setup-go@f111f3307d8850f501ac008e886eec1fd1932a34 # v5.3.0 with: - go-version: "1.23.5" + go-version: "1.23.6" cache: false - name: Initialize CodeQL diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 4890a5888..ed1f8260a 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -257,7 +257,7 @@ jobs: - name: Setup Go environment uses: actions/setup-go@f111f3307d8850f501ac008e886eec1fd1932a34 # v5.3.0 with: - go-version: "1.23.5" + go-version: "1.23.6" cache: true - name: Build generateMeasurements tool diff --git a/.github/workflows/test-operator-codegen.yml b/.github/workflows/test-operator-codegen.yml index bc157c11d..f54b3a8b4 100644 --- a/.github/workflows/test-operator-codegen.yml +++ b/.github/workflows/test-operator-codegen.yml @@ -28,7 +28,7 @@ jobs: - name: Setup Go environment uses: actions/setup-go@f111f3307d8850f501ac008e886eec1fd1932a34 # v5.3.0 with: - go-version: "1.23.5" + go-version: "1.23.6" cache: true - name: Run code generation diff --git a/3rdparty/gcp-guest-agent/Dockerfile b/3rdparty/gcp-guest-agent/Dockerfile index 580ad2ac0..ab437d512 100644 --- a/3rdparty/gcp-guest-agent/Dockerfile +++ b/3rdparty/gcp-guest-agent/Dockerfile @@ -6,7 +6,7 @@ RUN apt-get update && apt-get install -y \ git # Install Go -ARG GO_VER=1.23.5 +ARG GO_VER=1.23.6 RUN wget -q https://go.dev/dl/go${GO_VER}.linux-amd64.tar.gz && \ tar -C /usr/local -xzf go${GO_VER}.linux-amd64.tar.gz && \ rm go${GO_VER}.linux-amd64.tar.gz diff --git a/MODULE.bazel b/MODULE.bazel index 5345067a5..a1a0574a6 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -22,7 +22,7 @@ go_sdk = use_extension("@io_bazel_rules_go//go:extensions.bzl", "go_sdk") go_sdk.download( name = "go_sdk", patches = ["//3rdparty/bazel/org_golang:go_tls_max_handshake_size.patch"], - version = "1.23.5", + version = "1.23.6", ) python = use_extension("@rules_python//python/extensions:python.bzl", "python") diff --git a/go.mod b/go.mod index d2db5b5ad..6d46b008e 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,6 @@ module github.com/edgelesssys/constellation/v2 -go 1.23.5 +go 1.23.6 // TODO(daniel-weisse): revert after merging https://github.com/martinjungblut/go-cryptsetup/pull/16. replace github.com/martinjungblut/go-cryptsetup => github.com/daniel-weisse/go-cryptsetup v0.0.0-20230705150314-d8c07bd1723c diff --git a/go.work b/go.work index e4cc14603..799457415 100644 --- a/go.work +++ b/go.work @@ -1,6 +1,6 @@ -go 1.23.5 +go 1.23.6 -toolchain go1.23.5 +toolchain go1.23.6 use ( . diff --git a/hack/tools/go.mod b/hack/tools/go.mod index b1ff419f2..cefa8b004 100644 --- a/hack/tools/go.mod +++ b/hack/tools/go.mod @@ -1,6 +1,6 @@ module github.com/edgelesssys/constellation/v2/hack/tools -go 1.23.5 +go 1.23.6 require ( github.com/google/go-licenses v1.6.0 From 571c81cfd5db3885989952f997aa6bf5bc9599c2 Mon Sep 17 00:00:00 2001 From: edgelessci <71088502+edgelessci@users.noreply.github.com> Date: Fri, 7 Feb 2025 13:38:12 +0100 Subject: [PATCH 105/311] image: update measurements and image version (#3641) Co-authored-by: edgelessci --- .../measurements/measurements_enterprise.go | 16 ++++++++-------- internal/config/image_enterprise.go | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/internal/attestation/measurements/measurements_enterprise.go b/internal/attestation/measurements/measurements_enterprise.go index c34f04ea4..6e8b2291a 100644 --- a/internal/attestation/measurements/measurements_enterprise.go +++ b/internal/attestation/measurements/measurements_enterprise.go @@ -19,14 +19,14 @@ package measurements // revive:disable:var-naming var ( - aws_AWSNitroTPM = M{0: {Expected: []byte{0x73, 0x7f, 0x76, 0x7a, 0x12, 0xf5, 0x4e, 0x70, 0xee, 0xcb, 0xc8, 0x68, 0x40, 0x11, 0x32, 0x3a, 0xe2, 0xfe, 0x2d, 0xd9, 0xf9, 0x07, 0x85, 0x57, 0x79, 0x69, 0xd7, 0xa2, 0x01, 0x3e, 0x8c, 0x12}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x97, 0xf3, 0x8b, 0x8d, 0x26, 0x7a, 0x0e, 0xb1, 0x80, 0x94, 0xf1, 0xf1, 0xd9, 0xf5, 0xb5, 0x84, 0xa2, 0xde, 0x32, 0xcc, 0xaf, 0x77, 0x93, 0x0b, 0x1e, 0xb9, 0x5c, 0x4e, 0x0b, 0x64, 0x8d, 0xcd}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xed, 0x26, 0xb9, 0xda, 0xc1, 0x07, 0x79, 0x80, 0x2e, 0x9c, 0x88, 0xd0, 0x5f, 0x51, 0xa5, 0x74, 0x59, 0x8a, 0x8d, 0xbc, 0xfd, 0xa2, 0x44, 0x8c, 0x14, 0xb8, 0x15, 0xdc, 0xdd, 0xde, 0x20, 0x31}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x1b, 0xf6, 0x6e, 0x8e, 0xe1, 0x2e, 0x9f, 0x24, 0x46, 0xbf, 0x71, 0xcd, 0x5d, 0x6a, 0x7e, 0x91, 0x52, 0x4d, 0x54, 0x7c, 0xe3, 0x65, 0xaa, 0x87, 0xa0, 0x1e, 0xbe, 0x5c, 0x13, 0x4f, 0xfa, 0x21}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - aws_AWSSEVSNP = M{0: {Expected: []byte{0xd6, 0xdf, 0x85, 0x53, 0x58, 0xf5, 0xb1, 0x0f, 0x06, 0xf0, 0xfa, 0xb3, 0xf4, 0x08, 0xad, 0x26, 0xcd, 0x16, 0x5a, 0x29, 0x49, 0xba, 0xd6, 0x9e, 0x2c, 0xc7, 0x56, 0x92, 0x52, 0x9e, 0x66, 0x2a}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xab, 0x56, 0xce, 0x0f, 0x4f, 0xef, 0x54, 0x93, 0xf5, 0x0d, 0xfa, 0xb2, 0x7e, 0x5a, 0xa1, 0x7e, 0x7b, 0x5f, 0xbd, 0x64, 0xad, 0xfa, 0xfa, 0x9c, 0x97, 0x84, 0x4e, 0xcb, 0x04, 0x3f, 0x9c, 0x72}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xd5, 0xb1, 0xa7, 0xba, 0x59, 0x9d, 0x1c, 0x39, 0xf9, 0xe7, 0xf0, 0x1c, 0x5d, 0xec, 0x7c, 0x9c, 0xc3, 0x25, 0xa0, 0xce, 0x0f, 0x35, 0x99, 0x9e, 0x78, 0x01, 0xf5, 0x29, 0xfa, 0xc5, 0x10, 0x3b}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x3c, 0xa6, 0x82, 0xeb, 0x11, 0x83, 0xb6, 0xf8, 0x2b, 0x05, 0xb9, 0x3a, 0xfe, 0xd5, 0x26, 0xad, 0xbc, 0xf2, 0x33, 0x55, 0x9a, 0xf3, 0x0e, 0x51, 0xe2, 0x64, 0xb9, 0x8a, 0xad, 0x36, 0xba, 0xa5}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - azure_AzureSEVSNP = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x83, 0x12, 0x2b, 0x18, 0x03, 0x95, 0x6c, 0x02, 0xbf, 0x0f, 0x9c, 0x33, 0x99, 0xe9, 0xee, 0xdc, 0xf8, 0xac, 0xb5, 0x4a, 0xfa, 0x98, 0xa6, 0x0a, 0xfd, 0xc3, 0xd7, 0xd8, 0xce, 0x97, 0x30, 0xed}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x88, 0x2c, 0x4b, 0x0b, 0x7a, 0x45, 0x39, 0xa5, 0x7b, 0x6a, 0x0c, 0xc5, 0xf4, 0x6a, 0x8d, 0x28, 0xd3, 0x85, 0xdb, 0x5f, 0xb0, 0xfd, 0x11, 0xd6, 0x94, 0x38, 0x63, 0xce, 0x72, 0x58, 0x97, 0x66}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xe2, 0xa7, 0x5a, 0x6d, 0x93, 0x73, 0x96, 0xff, 0x24, 0x95, 0x54, 0x64, 0xcf, 0x7b, 0xd8, 0x20, 0xb4, 0x82, 0xd4, 0xfd, 0x0e, 0xb8, 0xf3, 0x3e, 0xea, 0x5d, 0xf6, 0x0e, 0x99, 0x70, 0x6f, 0xd2}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - azure_AzureTDX = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x80, 0x29, 0x20, 0xad, 0x30, 0x6f, 0x02, 0x41, 0xd1, 0x45, 0xb2, 0x63, 0x37, 0xb8, 0xc1, 0x53, 0x27, 0xe5, 0x92, 0xc3, 0xe7, 0xf4, 0x51, 0x16, 0x6e, 0xdd, 0xe0, 0x67, 0x01, 0x51, 0x39, 0xbf}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x58, 0xb4, 0x50, 0x38, 0x1e, 0x55, 0xcb, 0x24, 0xc2, 0xc9, 0x57, 0xbf, 0xf8, 0xb4, 0x9e, 0x88, 0x1d, 0xee, 0x73, 0x39, 0xfc, 0x07, 0x1e, 0x6a, 0xad, 0x9f, 0x59, 0x5f, 0x45, 0x35, 0x2b, 0xf1}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x34, 0xac, 0xbc, 0x1b, 0xb4, 0x42, 0xaf, 0x4a, 0x37, 0x02, 0xf2, 0x4f, 0x2b, 0x59, 0xb0, 0x0a, 0xd1, 0x88, 0xcf, 0xc4, 0x8d, 0x59, 0x0d, 0x33, 0x7e, 0x5c, 0xd4, 0x20, 0xbd, 0x3d, 0x7d, 0xf9}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + aws_AWSNitroTPM = M{0: {Expected: []byte{0x73, 0x7f, 0x76, 0x7a, 0x12, 0xf5, 0x4e, 0x70, 0xee, 0xcb, 0xc8, 0x68, 0x40, 0x11, 0x32, 0x3a, 0xe2, 0xfe, 0x2d, 0xd9, 0xf9, 0x07, 0x85, 0x57, 0x79, 0x69, 0xd7, 0xa2, 0x01, 0x3e, 0x8c, 0x12}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x4c, 0x47, 0xbd, 0x08, 0x94, 0xd6, 0xa7, 0x09, 0x00, 0x59, 0xf5, 0x47, 0x79, 0xa1, 0x11, 0x1c, 0x45, 0x35, 0x15, 0xdc, 0xb2, 0xd2, 0x6a, 0x78, 0x0b, 0x1a, 0x13, 0x1b, 0x76, 0x0a, 0x91, 0x0f}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xa6, 0x95, 0x41, 0xac, 0x8e, 0xc2, 0x33, 0x87, 0x53, 0x00, 0x2c, 0xba, 0xb2, 0x5c, 0x9d, 0xcd, 0x61, 0x29, 0xd8, 0x5a, 0xbd, 0x3d, 0x58, 0x1e, 0xa5, 0x03, 0xc3, 0xce, 0x26, 0x7a, 0xf0, 0x4a}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xdd, 0xdc, 0x85, 0x38, 0x56, 0xeb, 0x5e, 0x9b, 0x26, 0xf6, 0xe2, 0x47, 0x8e, 0x12, 0xb4, 0xa3, 0x50, 0xa4, 0xf4, 0x67, 0x5d, 0x04, 0xc3, 0xda, 0xfb, 0x24, 0x9b, 0x46, 0x5a, 0xc0, 0x03, 0x7d}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + aws_AWSSEVSNP = M{0: {Expected: []byte{0xd6, 0xdf, 0x85, 0x53, 0x58, 0xf5, 0xb1, 0x0f, 0x06, 0xf0, 0xfa, 0xb3, 0xf4, 0x08, 0xad, 0x26, 0xcd, 0x16, 0x5a, 0x29, 0x49, 0xba, 0xd6, 0x9e, 0x2c, 0xc7, 0x56, 0x92, 0x52, 0x9e, 0x66, 0x2a}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x9b, 0x12, 0xdc, 0xd8, 0x2e, 0xf9, 0xe0, 0xaf, 0x94, 0x76, 0x9e, 0x09, 0x2e, 0x9b, 0xac, 0xe9, 0x6b, 0xfe, 0xcf, 0xee, 0x2a, 0x5e, 0x32, 0x67, 0xf8, 0xe4, 0x99, 0xad, 0xe6, 0x88, 0x11, 0xd7}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x26, 0x5c, 0x41, 0xc3, 0xba, 0xbd, 0x38, 0x2c, 0x46, 0x99, 0x71, 0x3d, 0xcf, 0xf0, 0x09, 0xdc, 0x0c, 0x1b, 0xae, 0xa1, 0x18, 0x38, 0x3d, 0x50, 0x14, 0x68, 0xca, 0x33, 0xb9, 0x86, 0x54, 0x97}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x42, 0x40, 0x67, 0x44, 0x63, 0x06, 0x9a, 0xc5, 0xb2, 0x03, 0x67, 0x59, 0xec, 0x29, 0x67, 0xca, 0xbe, 0x40, 0x25, 0xd8, 0xdd, 0x08, 0xec, 0xdf, 0xce, 0x2f, 0xb2, 0xe6, 0x07, 0xcb, 0x87, 0xe6}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + azure_AzureSEVSNP = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xb1, 0x05, 0xec, 0x3d, 0xbc, 0xa7, 0xf5, 0x16, 0xc1, 0x3f, 0x36, 0x72, 0xe4, 0x92, 0x80, 0x0d, 0x57, 0xab, 0x93, 0xb1, 0x86, 0x72, 0x37, 0x87, 0xc8, 0x33, 0x44, 0x1d, 0x68, 0x4b, 0xe0, 0x59}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x85, 0x45, 0xf1, 0xea, 0xce, 0x7c, 0x7a, 0x66, 0x16, 0x3d, 0x9a, 0x66, 0x86, 0xe7, 0xf5, 0xb6, 0x61, 0x38, 0x7c, 0x62, 0x44, 0x69, 0x4f, 0x62, 0xb9, 0x84, 0x08, 0x22, 0xe5, 0x07, 0x92, 0xc3}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xba, 0x9d, 0x74, 0x0b, 0xd3, 0x0a, 0x15, 0xa3, 0x41, 0x5c, 0xdb, 0x1e, 0x2f, 0xdd, 0x92, 0xfb, 0x7b, 0x80, 0x0f, 0x1e, 0x92, 0x1a, 0xf5, 0x7b, 0xd8, 0x68, 0x03, 0x2f, 0x04, 0x0b, 0x5b, 0xf2}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + azure_AzureTDX = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xe7, 0xf4, 0x80, 0x28, 0xd0, 0xf9, 0xdf, 0xdc, 0xfd, 0x85, 0xb8, 0x28, 0xfc, 0xfd, 0xd0, 0x78, 0xe0, 0xe1, 0x34, 0x6f, 0xd6, 0xa6, 0xfe, 0xd8, 0xf2, 0xe7, 0x19, 0x8a, 0xe7, 0xe0, 0x66, 0x43}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x02, 0xda, 0x4a, 0x19, 0x04, 0x90, 0x3a, 0x76, 0xd3, 0x05, 0x59, 0xb1, 0xce, 0x2a, 0x73, 0xd4, 0x51, 0x27, 0x67, 0xa6, 0x35, 0x9b, 0x73, 0x1b, 0x01, 0x9a, 0x07, 0xa6, 0x4d, 0x55, 0x99, 0x38}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x99, 0xa1, 0x0f, 0xd1, 0x0d, 0xd4, 0xeb, 0xaa, 0xc1, 0x80, 0x8e, 0xdd, 0x34, 0xb2, 0x03, 0xcb, 0x59, 0x83, 0x58, 0x75, 0xad, 0xb9, 0xf1, 0x38, 0xff, 0xcc, 0x45, 0xeb, 0xcc, 0x4f, 0x85, 0xc4}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} azure_AzureTrustedLaunch M - gcp_GCPSEVES = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x0b, 0x9b, 0x5c, 0xd2, 0xf0, 0xfb, 0x82, 0x50, 0x2c, 0xcd, 0x36, 0x22, 0x90, 0x6c, 0x85, 0xf7, 0x56, 0x3d, 0x55, 0x9e, 0xfc, 0x9f, 0xc3, 0x59, 0x26, 0x19, 0xee, 0xb1, 0x3c, 0x75, 0x0e, 0xfd}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xf7, 0x18, 0x13, 0x5c, 0x49, 0x45, 0xdd, 0x9c, 0xaa, 0xcb, 0xb3, 0x50, 0x67, 0xc0, 0x69, 0xff, 0x45, 0x4f, 0xae, 0x64, 0xf1, 0xf3, 0x12, 0xb5, 0xc1, 0xd3, 0x5c, 0xeb, 0xef, 0xe6, 0x02, 0x0c}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x3c, 0xd5, 0xa0, 0xb3, 0x7f, 0x18, 0xb3, 0xee, 0x9a, 0x61, 0x62, 0x73, 0x1f, 0x60, 0x5c, 0xbf, 0xa6, 0xaa, 0xd2, 0x61, 0x25, 0x41, 0xd5, 0xac, 0x8c, 0x47, 0x5b, 0x2a, 0x5a, 0x78, 0x33, 0xb5}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - gcp_GCPSEVSNP = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x10, 0x2e, 0xeb, 0xea, 0x31, 0x8c, 0x88, 0x8f, 0xf5, 0xac, 0x8f, 0x2d, 0xf0, 0x9e, 0x7b, 0xd8, 0xac, 0x46, 0xd6, 0xa2, 0x52, 0x49, 0x2f, 0xc7, 0x05, 0xef, 0x71, 0x88, 0x12, 0xeb, 0xa4, 0x87}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x3a, 0xda, 0x55, 0x99, 0xf5, 0x87, 0x67, 0xf1, 0x51, 0x55, 0x3b, 0x84, 0x57, 0xd6, 0x1e, 0xdb, 0x8d, 0xbd, 0x33, 0x1c, 0x2f, 0x9e, 0xfc, 0x28, 0x5d, 0x4c, 0x3e, 0x6f, 0xb4, 0xb1, 0x7f, 0xc7}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xef, 0x72, 0x14, 0x03, 0x04, 0x17, 0x4a, 0xd6, 0x94, 0x16, 0xa4, 0x3d, 0x35, 0x82, 0xb6, 0x92, 0xc5, 0xc8, 0x2d, 0xf2, 0x0b, 0x7f, 0x80, 0x3a, 0x8c, 0x1c, 0xb3, 0x85, 0x5e, 0xb0, 0xac, 0x99}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - openstack_QEMUVTPM = M{4: {Expected: []byte{0x0b, 0x10, 0xe3, 0xf7, 0x2c, 0x02, 0xd9, 0x8e, 0x99, 0x4c, 0xa4, 0x43, 0x31, 0x60, 0x45, 0xe8, 0xd8, 0xbd, 0xe9, 0xaa, 0xb1, 0x41, 0xab, 0x2f, 0x50, 0x49, 0x28, 0x73, 0x19, 0xb4, 0x5c, 0x74}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x97, 0x10, 0x01, 0x9f, 0x43, 0x3b, 0xf3, 0x23, 0x33, 0x32, 0xbc, 0xa6, 0xaa, 0x8f, 0xe6, 0x63, 0x38, 0x84, 0xbc, 0x35, 0xe8, 0x4f, 0x86, 0x31, 0xcc, 0x50, 0xf2, 0xe5, 0xe8, 0xa3, 0xfc, 0xa9}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xa7, 0x0f, 0xf3, 0xa5, 0x8e, 0x89, 0xc0, 0xc8, 0xcd, 0xc9, 0x1f, 0x1b, 0x85, 0x89, 0x79, 0x58, 0x72, 0x5f, 0x67, 0xb7, 0xeb, 0xd9, 0x8e, 0x89, 0x4c, 0xb0, 0xee, 0x36, 0x72, 0x43, 0xf5, 0x24}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + gcp_GCPSEVES = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x27, 0xc4, 0xfb, 0xa2, 0x5f, 0x19, 0xba, 0x15, 0x63, 0xf8, 0xd4, 0x65, 0xe1, 0x22, 0x61, 0xf3, 0xf4, 0xb2, 0xf0, 0x3a, 0x9e, 0x73, 0xdc, 0x4a, 0xb0, 0x93, 0xda, 0xb1, 0x32, 0x46, 0xeb, 0xba}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xde, 0x56, 0xe2, 0x11, 0x5c, 0x89, 0x16, 0x65, 0x89, 0xaf, 0x7c, 0xe2, 0xa5, 0xce, 0xb7, 0x31, 0x4f, 0xa0, 0x3f, 0x58, 0x18, 0xb3, 0x0e, 0x1d, 0xc5, 0x83, 0x1f, 0xc8, 0x77, 0xf8, 0xc4, 0x64}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xe5, 0xe5, 0x47, 0x8b, 0x5d, 0xba, 0xb9, 0x43, 0x9a, 0xfc, 0xb4, 0xd2, 0x74, 0x42, 0x0d, 0xfe, 0x88, 0x4c, 0x65, 0x9b, 0x58, 0x8b, 0x17, 0xca, 0xd3, 0x59, 0x39, 0x1e, 0x63, 0x32, 0x30, 0xc7}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + gcp_GCPSEVSNP = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xb1, 0x36, 0xe6, 0x06, 0xc9, 0x7c, 0x65, 0x3d, 0xdf, 0xb8, 0xaf, 0xae, 0x4f, 0x96, 0x61, 0x2a, 0x5c, 0xef, 0x67, 0x10, 0xb0, 0x3f, 0x0d, 0x49, 0x1f, 0x3c, 0xcf, 0x32, 0xfe, 0xae, 0x03, 0xbd}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x0d, 0x28, 0x27, 0xc7, 0x31, 0xc4, 0x5c, 0xf7, 0x36, 0xc6, 0xe6, 0x06, 0x6e, 0x44, 0x4f, 0x30, 0x55, 0xa6, 0xd4, 0x51, 0xa9, 0xe0, 0x96, 0xab, 0xc3, 0xe9, 0xc4, 0x50, 0x63, 0x8b, 0xae, 0xae}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x09, 0x59, 0xf6, 0xeb, 0x53, 0xa4, 0x9e, 0xf6, 0xd2, 0x82, 0x77, 0xe6, 0x70, 0xf2, 0x51, 0xe8, 0x4f, 0x9c, 0x43, 0xeb, 0x49, 0xb9, 0x2c, 0x8d, 0x62, 0x7b, 0x0b, 0x8f, 0x68, 0x09, 0xe7, 0xcb}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + openstack_QEMUVTPM = M{4: {Expected: []byte{0x6f, 0xed, 0x32, 0x7e, 0x4b, 0x89, 0xc6, 0xa3, 0xdb, 0xee, 0x8f, 0x36, 0x76, 0x9a, 0x6e, 0xf4, 0x31, 0xae, 0x21, 0x13, 0x1e, 0x70, 0xb6, 0x77, 0xf7, 0xb2, 0x07, 0xad, 0x2d, 0x12, 0xea, 0xa3}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x85, 0x8e, 0x63, 0x24, 0xb0, 0x6f, 0x9b, 0x58, 0x1e, 0xfa, 0xc6, 0x9f, 0xfc, 0xd3, 0xe1, 0xff, 0x18, 0x6b, 0xa0, 0x43, 0x95, 0xcc, 0x44, 0xb1, 0x35, 0x82, 0x7b, 0x8d, 0x2d, 0xa9, 0x98, 0x07}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x74, 0xde, 0x36, 0x72, 0x7f, 0x78, 0x6a, 0xba, 0x43, 0x3e, 0xb5, 0x82, 0x1f, 0x5c, 0xa9, 0xc3, 0x65, 0x10, 0x86, 0x60, 0x81, 0x73, 0x30, 0xfe, 0x46, 0x26, 0xab, 0xaa, 0x55, 0xae, 0x57, 0x10}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} qemu_QEMUTDX M - qemu_QEMUVTPM = M{4: {Expected: []byte{0xcf, 0xa2, 0x57, 0xbb, 0x2d, 0xaa, 0x90, 0xca, 0xc3, 0xd9, 0x7a, 0xa5, 0xe6, 0xa2, 0x19, 0x24, 0xbf, 0x1a, 0x1e, 0x71, 0x29, 0x51, 0xf0, 0x11, 0xad, 0x68, 0xa6, 0x13, 0x24, 0xfc, 0x7c, 0x6f}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x8a, 0x47, 0x17, 0xca, 0xf8, 0xe1, 0x91, 0xda, 0x11, 0x1c, 0x57, 0x71, 0x3b, 0xfe, 0x94, 0xd5, 0x51, 0xdd, 0xf5, 0x44, 0x77, 0x4a, 0x27, 0xdb, 0x0f, 0x72, 0x3f, 0x9c, 0x95, 0xcd, 0x12, 0xbd}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x37, 0xcc, 0x4f, 0x23, 0x3e, 0x14, 0xa8, 0x6b, 0x10, 0x54, 0xa3, 0x73, 0x31, 0x78, 0xcf, 0xa9, 0x0a, 0x89, 0x3f, 0x81, 0x7d, 0x3f, 0xf2, 0xa1, 0xe0, 0x8d, 0x03, 0x31, 0xee, 0x30, 0x8e, 0x67}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + qemu_QEMUVTPM = M{4: {Expected: []byte{0x2c, 0xc2, 0x6d, 0x2b, 0x6b, 0x07, 0x44, 0x5a, 0x2b, 0xc6, 0xe5, 0xb1, 0x26, 0x86, 0xe0, 0x9a, 0x57, 0x7d, 0x32, 0xf5, 0x55, 0x0f, 0xd6, 0x06, 0x65, 0x27, 0x55, 0xe8, 0x8b, 0xe4, 0x58, 0xe7}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x6d, 0xdb, 0x55, 0x01, 0x5e, 0xe9, 0xce, 0x65, 0x6b, 0x03, 0xa8, 0x7a, 0x45, 0x06, 0x24, 0xe1, 0x48, 0xa2, 0x44, 0x77, 0x3a, 0x42, 0x37, 0x57, 0x4b, 0x5e, 0x07, 0x1d, 0x5d, 0x85, 0xd0, 0xb8}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x67, 0x13, 0xe3, 0x22, 0x6d, 0x69, 0xd9, 0xf1, 0xb0, 0xee, 0xe8, 0x61, 0x16, 0xd3, 0x73, 0x4e, 0xcb, 0xd3, 0x32, 0x23, 0x1a, 0x54, 0x6a, 0x65, 0x7a, 0xee, 0x88, 0xd5, 0xe3, 0xd6, 0x2b, 0x4b}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} ) diff --git a/internal/config/image_enterprise.go b/internal/config/image_enterprise.go index 4b515bbef..062fd83d6 100644 --- a/internal/config/image_enterprise.go +++ b/internal/config/image_enterprise.go @@ -10,5 +10,5 @@ package config const ( // defaultImage is the default image to use. - defaultImage = "ref/main/stream/nightly/v2.21.0-pre.0.20250204100241-f41c7619e180" + defaultImage = "ref/main/stream/nightly/v2.21.0-pre.0.20250206124038-cb77e7bb0db1" ) From c39ecc8a8285499c2ced46c8acede5d0a43ba5be Mon Sep 17 00:00:00 2001 From: edgelessci <71088502+edgelessci@users.noreply.github.com> Date: Wed, 12 Feb 2025 09:42:02 +0100 Subject: [PATCH 106/311] image: update measurements and image version (#3645) Co-authored-by: edgelessci --- .../measurements/measurements_enterprise.go | 16 ++++++++-------- internal/config/image_enterprise.go | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/internal/attestation/measurements/measurements_enterprise.go b/internal/attestation/measurements/measurements_enterprise.go index 6e8b2291a..689071fbf 100644 --- a/internal/attestation/measurements/measurements_enterprise.go +++ b/internal/attestation/measurements/measurements_enterprise.go @@ -19,14 +19,14 @@ package measurements // revive:disable:var-naming var ( - aws_AWSNitroTPM = M{0: {Expected: []byte{0x73, 0x7f, 0x76, 0x7a, 0x12, 0xf5, 0x4e, 0x70, 0xee, 0xcb, 0xc8, 0x68, 0x40, 0x11, 0x32, 0x3a, 0xe2, 0xfe, 0x2d, 0xd9, 0xf9, 0x07, 0x85, 0x57, 0x79, 0x69, 0xd7, 0xa2, 0x01, 0x3e, 0x8c, 0x12}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x4c, 0x47, 0xbd, 0x08, 0x94, 0xd6, 0xa7, 0x09, 0x00, 0x59, 0xf5, 0x47, 0x79, 0xa1, 0x11, 0x1c, 0x45, 0x35, 0x15, 0xdc, 0xb2, 0xd2, 0x6a, 0x78, 0x0b, 0x1a, 0x13, 0x1b, 0x76, 0x0a, 0x91, 0x0f}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xa6, 0x95, 0x41, 0xac, 0x8e, 0xc2, 0x33, 0x87, 0x53, 0x00, 0x2c, 0xba, 0xb2, 0x5c, 0x9d, 0xcd, 0x61, 0x29, 0xd8, 0x5a, 0xbd, 0x3d, 0x58, 0x1e, 0xa5, 0x03, 0xc3, 0xce, 0x26, 0x7a, 0xf0, 0x4a}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xdd, 0xdc, 0x85, 0x38, 0x56, 0xeb, 0x5e, 0x9b, 0x26, 0xf6, 0xe2, 0x47, 0x8e, 0x12, 0xb4, 0xa3, 0x50, 0xa4, 0xf4, 0x67, 0x5d, 0x04, 0xc3, 0xda, 0xfb, 0x24, 0x9b, 0x46, 0x5a, 0xc0, 0x03, 0x7d}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - aws_AWSSEVSNP = M{0: {Expected: []byte{0xd6, 0xdf, 0x85, 0x53, 0x58, 0xf5, 0xb1, 0x0f, 0x06, 0xf0, 0xfa, 0xb3, 0xf4, 0x08, 0xad, 0x26, 0xcd, 0x16, 0x5a, 0x29, 0x49, 0xba, 0xd6, 0x9e, 0x2c, 0xc7, 0x56, 0x92, 0x52, 0x9e, 0x66, 0x2a}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x9b, 0x12, 0xdc, 0xd8, 0x2e, 0xf9, 0xe0, 0xaf, 0x94, 0x76, 0x9e, 0x09, 0x2e, 0x9b, 0xac, 0xe9, 0x6b, 0xfe, 0xcf, 0xee, 0x2a, 0x5e, 0x32, 0x67, 0xf8, 0xe4, 0x99, 0xad, 0xe6, 0x88, 0x11, 0xd7}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x26, 0x5c, 0x41, 0xc3, 0xba, 0xbd, 0x38, 0x2c, 0x46, 0x99, 0x71, 0x3d, 0xcf, 0xf0, 0x09, 0xdc, 0x0c, 0x1b, 0xae, 0xa1, 0x18, 0x38, 0x3d, 0x50, 0x14, 0x68, 0xca, 0x33, 0xb9, 0x86, 0x54, 0x97}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x42, 0x40, 0x67, 0x44, 0x63, 0x06, 0x9a, 0xc5, 0xb2, 0x03, 0x67, 0x59, 0xec, 0x29, 0x67, 0xca, 0xbe, 0x40, 0x25, 0xd8, 0xdd, 0x08, 0xec, 0xdf, 0xce, 0x2f, 0xb2, 0xe6, 0x07, 0xcb, 0x87, 0xe6}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - azure_AzureSEVSNP = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xb1, 0x05, 0xec, 0x3d, 0xbc, 0xa7, 0xf5, 0x16, 0xc1, 0x3f, 0x36, 0x72, 0xe4, 0x92, 0x80, 0x0d, 0x57, 0xab, 0x93, 0xb1, 0x86, 0x72, 0x37, 0x87, 0xc8, 0x33, 0x44, 0x1d, 0x68, 0x4b, 0xe0, 0x59}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x85, 0x45, 0xf1, 0xea, 0xce, 0x7c, 0x7a, 0x66, 0x16, 0x3d, 0x9a, 0x66, 0x86, 0xe7, 0xf5, 0xb6, 0x61, 0x38, 0x7c, 0x62, 0x44, 0x69, 0x4f, 0x62, 0xb9, 0x84, 0x08, 0x22, 0xe5, 0x07, 0x92, 0xc3}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xba, 0x9d, 0x74, 0x0b, 0xd3, 0x0a, 0x15, 0xa3, 0x41, 0x5c, 0xdb, 0x1e, 0x2f, 0xdd, 0x92, 0xfb, 0x7b, 0x80, 0x0f, 0x1e, 0x92, 0x1a, 0xf5, 0x7b, 0xd8, 0x68, 0x03, 0x2f, 0x04, 0x0b, 0x5b, 0xf2}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - azure_AzureTDX = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xe7, 0xf4, 0x80, 0x28, 0xd0, 0xf9, 0xdf, 0xdc, 0xfd, 0x85, 0xb8, 0x28, 0xfc, 0xfd, 0xd0, 0x78, 0xe0, 0xe1, 0x34, 0x6f, 0xd6, 0xa6, 0xfe, 0xd8, 0xf2, 0xe7, 0x19, 0x8a, 0xe7, 0xe0, 0x66, 0x43}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x02, 0xda, 0x4a, 0x19, 0x04, 0x90, 0x3a, 0x76, 0xd3, 0x05, 0x59, 0xb1, 0xce, 0x2a, 0x73, 0xd4, 0x51, 0x27, 0x67, 0xa6, 0x35, 0x9b, 0x73, 0x1b, 0x01, 0x9a, 0x07, 0xa6, 0x4d, 0x55, 0x99, 0x38}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x99, 0xa1, 0x0f, 0xd1, 0x0d, 0xd4, 0xeb, 0xaa, 0xc1, 0x80, 0x8e, 0xdd, 0x34, 0xb2, 0x03, 0xcb, 0x59, 0x83, 0x58, 0x75, 0xad, 0xb9, 0xf1, 0x38, 0xff, 0xcc, 0x45, 0xeb, 0xcc, 0x4f, 0x85, 0xc4}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + aws_AWSNitroTPM = M{0: {Expected: []byte{0x73, 0x7f, 0x76, 0x7a, 0x12, 0xf5, 0x4e, 0x70, 0xee, 0xcb, 0xc8, 0x68, 0x40, 0x11, 0x32, 0x3a, 0xe2, 0xfe, 0x2d, 0xd9, 0xf9, 0x07, 0x85, 0x57, 0x79, 0x69, 0xd7, 0xa2, 0x01, 0x3e, 0x8c, 0x12}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x27, 0x60, 0xcd, 0x44, 0x3a, 0x80, 0xfd, 0x88, 0x7c, 0xb0, 0x90, 0xf0, 0x9e, 0x6d, 0x4a, 0x90, 0xc7, 0x75, 0xdf, 0x7b, 0x64, 0x64, 0xd1, 0xed, 0x8d, 0xd3, 0x56, 0xe9, 0x07, 0x11, 0x98, 0x07}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xf6, 0xf2, 0x4c, 0x3e, 0x50, 0x90, 0xd4, 0xbe, 0x60, 0xd4, 0x18, 0x9e, 0x0c, 0xc7, 0x41, 0xa1, 0x1c, 0xd7, 0x66, 0x86, 0x1f, 0xf3, 0x3c, 0x75, 0xc3, 0x7b, 0xb0, 0xf4, 0x04, 0x80, 0x7f, 0xbe}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x0c, 0x8a, 0x08, 0xb1, 0x33, 0xa4, 0x7d, 0x3f, 0xc4, 0x4f, 0x43, 0x9a, 0x96, 0x89, 0xad, 0x44, 0x98, 0xaf, 0xf3, 0xe1, 0x11, 0xd8, 0xc0, 0xd7, 0x7c, 0xf4, 0xd2, 0x1b, 0xc6, 0x33, 0x80, 0x26}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + aws_AWSSEVSNP = M{0: {Expected: []byte{0xd6, 0xdf, 0x85, 0x53, 0x58, 0xf5, 0xb1, 0x0f, 0x06, 0xf0, 0xfa, 0xb3, 0xf4, 0x08, 0xad, 0x26, 0xcd, 0x16, 0x5a, 0x29, 0x49, 0xba, 0xd6, 0x9e, 0x2c, 0xc7, 0x56, 0x92, 0x52, 0x9e, 0x66, 0x2a}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x00, 0xdc, 0x5d, 0x51, 0xd7, 0x00, 0xfd, 0x9e, 0xa6, 0x2b, 0x60, 0xd1, 0xc2, 0x31, 0xfa, 0x5e, 0xff, 0x5f, 0xf0, 0x3b, 0xb5, 0xad, 0x59, 0x71, 0x55, 0xab, 0x4a, 0x73, 0x66, 0xd4, 0x57, 0x98}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x3b, 0xec, 0xab, 0x41, 0xd3, 0xb1, 0x1d, 0x89, 0xc7, 0x96, 0xd1, 0x2b, 0x09, 0x46, 0x94, 0xe3, 0xad, 0xec, 0x2a, 0x1b, 0xe5, 0xe7, 0x32, 0x46, 0x0b, 0x8a, 0x05, 0xd4, 0xad, 0x20, 0xc4, 0x48}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xfd, 0x13, 0x3d, 0xac, 0xce, 0xf2, 0x59, 0x69, 0x64, 0xb7, 0xf9, 0x66, 0x26, 0x15, 0xb4, 0x6d, 0x70, 0x2c, 0x40, 0xbc, 0x0b, 0x58, 0xb7, 0x38, 0x52, 0x1f, 0xa7, 0xc2, 0x10, 0x9e, 0xf2, 0x6d}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + azure_AzureSEVSNP = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x1e, 0xa4, 0xc1, 0xe8, 0xf9, 0x63, 0x84, 0xd8, 0xdf, 0x0c, 0x86, 0xba, 0x89, 0x44, 0xb6, 0x6c, 0x27, 0x7c, 0xa7, 0x69, 0xae, 0x90, 0xda, 0xfe, 0x64, 0x1e, 0x25, 0x0d, 0x6d, 0xce, 0xb1, 0x97}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x66, 0xfc, 0x83, 0xde, 0x1c, 0x5c, 0x06, 0x89, 0x74, 0x05, 0xcb, 0x02, 0xbf, 0x30, 0xa4, 0xf5, 0x40, 0x01, 0x40, 0xdd, 0xb1, 0xc9, 0x91, 0x47, 0x9a, 0xed, 0x8a, 0x5b, 0xaf, 0x7f, 0xb8, 0x3f}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xce, 0x17, 0x51, 0x07, 0x5e, 0xf1, 0xec, 0x16, 0x30, 0x9e, 0xae, 0xd0, 0x2a, 0xc7, 0x36, 0x25, 0x49, 0x89, 0x7c, 0xda, 0x0e, 0x53, 0xb0, 0x88, 0x40, 0xf4, 0x62, 0x32, 0x5e, 0x8a, 0x6e, 0xb1}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + azure_AzureTDX = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x37, 0x99, 0x64, 0x06, 0x9d, 0x6a, 0xa3, 0x4a, 0x17, 0xe1, 0x4e, 0xb8, 0x98, 0x42, 0x80, 0xa5, 0xcc, 0x77, 0xac, 0x33, 0x8e, 0x33, 0x0e, 0x93, 0x5b, 0x3f, 0xc1, 0x04, 0x97, 0xb5, 0x98, 0xca}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xf4, 0xfa, 0xc7, 0x69, 0xf1, 0x9b, 0xb6, 0xb9, 0x26, 0x1d, 0x9e, 0xa7, 0x8f, 0xc0, 0x09, 0xd6, 0x58, 0xa8, 0x18, 0x34, 0xc8, 0x64, 0x10, 0xac, 0xfe, 0x42, 0x8e, 0x4d, 0x60, 0xb7, 0x1d, 0xdc}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xf7, 0x14, 0x18, 0xbe, 0xda, 0x87, 0x89, 0x92, 0x96, 0xba, 0x7c, 0xd4, 0x41, 0xbc, 0xe5, 0x98, 0x7d, 0x7a, 0xd3, 0xd6, 0x7a, 0xf1, 0xc4, 0x84, 0xc6, 0x7c, 0xac, 0x14, 0xfc, 0x61, 0xb0, 0x43}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} azure_AzureTrustedLaunch M - gcp_GCPSEVES = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x27, 0xc4, 0xfb, 0xa2, 0x5f, 0x19, 0xba, 0x15, 0x63, 0xf8, 0xd4, 0x65, 0xe1, 0x22, 0x61, 0xf3, 0xf4, 0xb2, 0xf0, 0x3a, 0x9e, 0x73, 0xdc, 0x4a, 0xb0, 0x93, 0xda, 0xb1, 0x32, 0x46, 0xeb, 0xba}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xde, 0x56, 0xe2, 0x11, 0x5c, 0x89, 0x16, 0x65, 0x89, 0xaf, 0x7c, 0xe2, 0xa5, 0xce, 0xb7, 0x31, 0x4f, 0xa0, 0x3f, 0x58, 0x18, 0xb3, 0x0e, 0x1d, 0xc5, 0x83, 0x1f, 0xc8, 0x77, 0xf8, 0xc4, 0x64}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xe5, 0xe5, 0x47, 0x8b, 0x5d, 0xba, 0xb9, 0x43, 0x9a, 0xfc, 0xb4, 0xd2, 0x74, 0x42, 0x0d, 0xfe, 0x88, 0x4c, 0x65, 0x9b, 0x58, 0x8b, 0x17, 0xca, 0xd3, 0x59, 0x39, 0x1e, 0x63, 0x32, 0x30, 0xc7}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - gcp_GCPSEVSNP = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xb1, 0x36, 0xe6, 0x06, 0xc9, 0x7c, 0x65, 0x3d, 0xdf, 0xb8, 0xaf, 0xae, 0x4f, 0x96, 0x61, 0x2a, 0x5c, 0xef, 0x67, 0x10, 0xb0, 0x3f, 0x0d, 0x49, 0x1f, 0x3c, 0xcf, 0x32, 0xfe, 0xae, 0x03, 0xbd}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x0d, 0x28, 0x27, 0xc7, 0x31, 0xc4, 0x5c, 0xf7, 0x36, 0xc6, 0xe6, 0x06, 0x6e, 0x44, 0x4f, 0x30, 0x55, 0xa6, 0xd4, 0x51, 0xa9, 0xe0, 0x96, 0xab, 0xc3, 0xe9, 0xc4, 0x50, 0x63, 0x8b, 0xae, 0xae}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x09, 0x59, 0xf6, 0xeb, 0x53, 0xa4, 0x9e, 0xf6, 0xd2, 0x82, 0x77, 0xe6, 0x70, 0xf2, 0x51, 0xe8, 0x4f, 0x9c, 0x43, 0xeb, 0x49, 0xb9, 0x2c, 0x8d, 0x62, 0x7b, 0x0b, 0x8f, 0x68, 0x09, 0xe7, 0xcb}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - openstack_QEMUVTPM = M{4: {Expected: []byte{0x6f, 0xed, 0x32, 0x7e, 0x4b, 0x89, 0xc6, 0xa3, 0xdb, 0xee, 0x8f, 0x36, 0x76, 0x9a, 0x6e, 0xf4, 0x31, 0xae, 0x21, 0x13, 0x1e, 0x70, 0xb6, 0x77, 0xf7, 0xb2, 0x07, 0xad, 0x2d, 0x12, 0xea, 0xa3}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x85, 0x8e, 0x63, 0x24, 0xb0, 0x6f, 0x9b, 0x58, 0x1e, 0xfa, 0xc6, 0x9f, 0xfc, 0xd3, 0xe1, 0xff, 0x18, 0x6b, 0xa0, 0x43, 0x95, 0xcc, 0x44, 0xb1, 0x35, 0x82, 0x7b, 0x8d, 0x2d, 0xa9, 0x98, 0x07}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x74, 0xde, 0x36, 0x72, 0x7f, 0x78, 0x6a, 0xba, 0x43, 0x3e, 0xb5, 0x82, 0x1f, 0x5c, 0xa9, 0xc3, 0x65, 0x10, 0x86, 0x60, 0x81, 0x73, 0x30, 0xfe, 0x46, 0x26, 0xab, 0xaa, 0x55, 0xae, 0x57, 0x10}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + gcp_GCPSEVES = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x96, 0xe9, 0x8f, 0x5d, 0x82, 0x13, 0x20, 0x8a, 0x32, 0x82, 0x02, 0x29, 0x67, 0x15, 0xbf, 0xcd, 0xe4, 0x9e, 0xc9, 0xb1, 0x57, 0x0c, 0x9f, 0xea, 0x15, 0x69, 0xcf, 0x01, 0x7a, 0xb5, 0x89, 0xd8}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x05, 0x4e, 0x71, 0x38, 0x9e, 0xbe, 0xf4, 0xc8, 0xcb, 0xa5, 0xe7, 0x9f, 0x2e, 0xea, 0x2a, 0x67, 0x11, 0xb3, 0xdf, 0x27, 0x27, 0x67, 0x59, 0xa7, 0xf3, 0x8c, 0x22, 0x21, 0x7e, 0x5c, 0xac, 0x0b}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x67, 0x06, 0x84, 0x75, 0x2f, 0x96, 0x2d, 0x59, 0xf6, 0x93, 0x6c, 0x64, 0x59, 0x54, 0xca, 0xa7, 0x9f, 0xb6, 0xf7, 0x49, 0xee, 0x54, 0x31, 0xf1, 0x0f, 0x0b, 0x8d, 0x04, 0x50, 0x48, 0xaf, 0x7e}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + gcp_GCPSEVSNP = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x30, 0xce, 0x69, 0xd4, 0x3e, 0x28, 0x11, 0x32, 0xca, 0xa6, 0x76, 0x69, 0x56, 0x6b, 0x5d, 0x02, 0xf7, 0xdb, 0x54, 0x92, 0xac, 0x50, 0x1c, 0xd7, 0xa4, 0x17, 0x67, 0x09, 0x93, 0x34, 0x94, 0xb3}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x7b, 0x67, 0x3a, 0x07, 0xd9, 0x0c, 0x54, 0x0e, 0x16, 0xd8, 0x6d, 0x8a, 0xfe, 0x6a, 0x55, 0x33, 0x5b, 0x61, 0x7b, 0xa7, 0x50, 0xcd, 0xbb, 0xb5, 0x47, 0x6a, 0x11, 0x9b, 0xfa, 0x26, 0x4d, 0x69}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x35, 0xe1, 0x60, 0x19, 0xf2, 0x53, 0xfa, 0x73, 0xc1, 0xcd, 0x0f, 0xea, 0x22, 0xe7, 0xc4, 0x4b, 0x5a, 0x8f, 0x46, 0x46, 0x2c, 0x8f, 0x50, 0xf3, 0x99, 0x28, 0xab, 0xf2, 0x47, 0x8d, 0xfc, 0x05}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + openstack_QEMUVTPM = M{4: {Expected: []byte{0x89, 0xe9, 0x47, 0x4f, 0xd5, 0xab, 0xa8, 0x7d, 0x27, 0x9f, 0x05, 0x42, 0xaa, 0xf1, 0x70, 0x16, 0x36, 0x31, 0x55, 0xb0, 0xf4, 0xdc, 0x6a, 0x77, 0x0f, 0xcb, 0x8f, 0xe8, 0xb0, 0xc0, 0x40, 0x4d}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x6a, 0x50, 0x8e, 0xf5, 0xac, 0x10, 0x97, 0x5f, 0x73, 0xb0, 0x61, 0x22, 0xa5, 0x0d, 0xd3, 0xa4, 0xf1, 0x72, 0x41, 0xeb, 0xfa, 0x40, 0x17, 0xc7, 0x76, 0x5d, 0x8f, 0x48, 0x39, 0x14, 0x4e, 0xea}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xa6, 0x86, 0xa1, 0x42, 0x71, 0x42, 0xc6, 0xad, 0x44, 0xfd, 0x57, 0x90, 0xe5, 0x4d, 0xac, 0xee, 0x81, 0x4c, 0x13, 0x83, 0x3e, 0x0e, 0x8a, 0xb6, 0xd4, 0x25, 0xda, 0x84, 0xe4, 0xb1, 0x29, 0xb3}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} qemu_QEMUTDX M - qemu_QEMUVTPM = M{4: {Expected: []byte{0x2c, 0xc2, 0x6d, 0x2b, 0x6b, 0x07, 0x44, 0x5a, 0x2b, 0xc6, 0xe5, 0xb1, 0x26, 0x86, 0xe0, 0x9a, 0x57, 0x7d, 0x32, 0xf5, 0x55, 0x0f, 0xd6, 0x06, 0x65, 0x27, 0x55, 0xe8, 0x8b, 0xe4, 0x58, 0xe7}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x6d, 0xdb, 0x55, 0x01, 0x5e, 0xe9, 0xce, 0x65, 0x6b, 0x03, 0xa8, 0x7a, 0x45, 0x06, 0x24, 0xe1, 0x48, 0xa2, 0x44, 0x77, 0x3a, 0x42, 0x37, 0x57, 0x4b, 0x5e, 0x07, 0x1d, 0x5d, 0x85, 0xd0, 0xb8}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x67, 0x13, 0xe3, 0x22, 0x6d, 0x69, 0xd9, 0xf1, 0xb0, 0xee, 0xe8, 0x61, 0x16, 0xd3, 0x73, 0x4e, 0xcb, 0xd3, 0x32, 0x23, 0x1a, 0x54, 0x6a, 0x65, 0x7a, 0xee, 0x88, 0xd5, 0xe3, 0xd6, 0x2b, 0x4b}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + qemu_QEMUVTPM = M{4: {Expected: []byte{0xbe, 0x6d, 0x9b, 0x1f, 0x69, 0x58, 0xa6, 0x92, 0xf8, 0x38, 0x50, 0xdf, 0x12, 0xec, 0x08, 0xac, 0xae, 0x1a, 0x1e, 0xc4, 0x23, 0xdb, 0x18, 0xbb, 0xb4, 0x3d, 0x04, 0xc8, 0x78, 0x17, 0x17, 0x61}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x3b, 0x5f, 0x3c, 0x24, 0xf3, 0x21, 0xf9, 0xba, 0x15, 0x04, 0x7d, 0xea, 0xc4, 0xf7, 0x55, 0x54, 0xe1, 0xa2, 0x86, 0xc1, 0xe0, 0x4f, 0xdc, 0xf7, 0xe4, 0x60, 0xcf, 0xac, 0xcb, 0x8c, 0xf1, 0x4f}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x98, 0x04, 0x47, 0x9b, 0x42, 0xae, 0xbf, 0x1c, 0xe0, 0x15, 0x2e, 0xfb, 0xe3, 0x59, 0xf2, 0x19, 0x31, 0xae, 0x61, 0x84, 0x72, 0xd9, 0x29, 0xd9, 0x8f, 0xa2, 0x7c, 0x84, 0x63, 0xcd, 0x77, 0x89}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} ) diff --git a/internal/config/image_enterprise.go b/internal/config/image_enterprise.go index 062fd83d6..7e3e3ab63 100644 --- a/internal/config/image_enterprise.go +++ b/internal/config/image_enterprise.go @@ -10,5 +10,5 @@ package config const ( // defaultImage is the default image to use. - defaultImage = "ref/main/stream/nightly/v2.21.0-pre.0.20250206124038-cb77e7bb0db1" + defaultImage = "ref/main/stream/nightly/v2.21.0-pre.0.20250207133812-571c81cfd5db" ) From 1551f8884ece14fda1c83fcca5e5dc83a69ea1f3 Mon Sep 17 00:00:00 2001 From: Thomas Tendyck Date: Tue, 11 Feb 2025 15:54:02 +0100 Subject: [PATCH 107/311] attestation: update go-azguestattestation to fix MAA PCR11 bug --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 6d46b008e..5f7c05ae3 100644 --- a/go.mod +++ b/go.mod @@ -60,7 +60,7 @@ require ( github.com/bazelbuild/rules_go v0.52.0 github.com/coreos/go-systemd/v22 v22.5.0 github.com/docker/docker v27.5.1+incompatible - github.com/edgelesssys/go-azguestattestation v0.0.0-20240513062303-05f8770a633d + github.com/edgelesssys/go-azguestattestation v0.0.0-20250212085035-c38c01af80ba github.com/edgelesssys/go-tdx-qpl v0.0.0-20250129202750-607ac61e2377 github.com/foxboron/go-uefi v0.0.0-20241219185318-19dc140271bf github.com/fsnotify/fsnotify v1.8.0 diff --git a/go.sum b/go.sum index 08711be37..9edb14a10 100644 --- a/go.sum +++ b/go.sum @@ -281,8 +281,8 @@ github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4 github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= github.com/docker/libtrust v0.0.0-20160708172513-aabc10ec26b7 h1:UhxFibDNY/bfvqU5CAUmr9zpesgbU6SWc8/B4mflAE4= github.com/docker/libtrust v0.0.0-20160708172513-aabc10ec26b7/go.mod h1:cyGadeNEkKy96OOhEzfZl+yxihPEzKnqJwvfuSUqbZE= -github.com/edgelesssys/go-azguestattestation v0.0.0-20240513062303-05f8770a633d h1:XcoMVhZve0RRkSxFDn9Bs/z4FpHqZ3eHgVNWNCNOkqc= -github.com/edgelesssys/go-azguestattestation v0.0.0-20240513062303-05f8770a633d/go.mod h1:Lz4QaomI4wU2YbatD4/W7vatW2Q35tnkoJezB1clscc= +github.com/edgelesssys/go-azguestattestation v0.0.0-20250212085035-c38c01af80ba h1:3eLZZbCil066H3RIC7a++C4jDTJSQ4NsOQnvvra+ELA= +github.com/edgelesssys/go-azguestattestation v0.0.0-20250212085035-c38c01af80ba/go.mod h1:Lz4QaomI4wU2YbatD4/W7vatW2Q35tnkoJezB1clscc= github.com/edgelesssys/go-tdx-qpl v0.0.0-20250129202750-607ac61e2377 h1:5JMJiBhvOUUR7EZ0UyeSy7a1WrqB2eM+DX3odLSHAh4= github.com/edgelesssys/go-tdx-qpl v0.0.0-20250129202750-607ac61e2377/go.mod h1:IC72qyykUIWl0ZmSk53L4xbLCFDBEGZVaujUmPQOEyw= github.com/emicklei/go-restful/v3 v3.11.0 h1:rAQeMHw1c7zTmncogyy8VvRZwtkmkZ4FxERmMY4rD+g= From 28e92b9732dd5a84fb27df0eb093899caf48cff8 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 13 Feb 2025 10:23:24 +0100 Subject: [PATCH 108/311] deps: update dependency rules_cc to v0.1.1 (#3643) * deps: update dependency rules_cc to v0.1.1 * deps: tidy all modules --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: edgelessci --- MODULE.bazel | 2 +- MODULE.bazel.lock | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/MODULE.bazel b/MODULE.bazel index a1a0574a6..64728fcc5 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -10,7 +10,7 @@ use_repo(bazel_lib, "yq_toolchains") bazel_dep(name = "bazel_skylib", version = "1.7.1") bazel_dep(name = "gazelle", version = "0.42.0") bazel_dep(name = "hermetic_cc_toolchain", version = "3.1.1") -bazel_dep(name = "rules_cc", version = "0.1.0") +bazel_dep(name = "rules_cc", version = "0.1.1") bazel_dep(name = "rules_go", version = "0.52.0", repo_name = "io_bazel_rules_go") bazel_dep(name = "rules_pkg", version = "1.0.1") bazel_dep(name = "rules_proto", version = "7.1.0") diff --git a/MODULE.bazel.lock b/MODULE.bazel.lock index 010e7e17e..821e2e9b3 100644 --- a/MODULE.bazel.lock +++ b/MODULE.bazel.lock @@ -91,8 +91,8 @@ "https://bcr.bazel.build/modules/rules_cc/0.0.6/MODULE.bazel": "abf360251023dfe3efcef65ab9d56beefa8394d4176dd29529750e1c57eaa33f", "https://bcr.bazel.build/modules/rules_cc/0.0.8/MODULE.bazel": "964c85c82cfeb6f3855e6a07054fdb159aced38e99a5eecf7bce9d53990afa3e", "https://bcr.bazel.build/modules/rules_cc/0.0.9/MODULE.bazel": "836e76439f354b89afe6a911a7adf59a6b2518fafb174483ad78a2a2fde7b1c5", - "https://bcr.bazel.build/modules/rules_cc/0.1.0/MODULE.bazel": "2fef03775b9ba995ec543868840041cc69e8bc705eb0cb6604a36eee18c87d8b", - "https://bcr.bazel.build/modules/rules_cc/0.1.0/source.json": "8a4e832d75e073ab56c74dd77008cf7a81e107dec4544019eb1eefc1320d55be", + "https://bcr.bazel.build/modules/rules_cc/0.1.1/MODULE.bazel": "2f0222a6f229f0bf44cd711dc13c858dad98c62d52bd51d8fc3a764a83125513", + "https://bcr.bazel.build/modules/rules_cc/0.1.1/source.json": "d61627377bd7dd1da4652063e368d9366fc9a73920bfa396798ad92172cf645c", "https://bcr.bazel.build/modules/rules_foreign_cc/0.9.0/MODULE.bazel": "c9e8c682bf75b0e7c704166d79b599f93b72cfca5ad7477df596947891feeef6", "https://bcr.bazel.build/modules/rules_fuzzing/0.5.2/MODULE.bazel": "40c97d1144356f52905566c55811f13b299453a14ac7769dfba2ac38192337a8", "https://bcr.bazel.build/modules/rules_fuzzing/0.5.2/source.json": "c8b1e2c717646f1702290959a3302a178fb639d987ab61d548105019f11e527e", From df2383ab096802725ab1a5bee5bbfbd6fd491d08 Mon Sep 17 00:00:00 2001 From: edgelessci <71088502+edgelessci@users.noreply.github.com> Date: Thu, 13 Feb 2025 20:04:58 +0100 Subject: [PATCH 109/311] chore: update CI for v2.20.1 (#3647) Co-authored-by: edgelessci --- .github/workflows/e2e-test-release.yml | 2 +- .github/workflows/e2e-test-weekly.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/e2e-test-release.yml b/.github/workflows/e2e-test-release.yml index 2a26d71bb..7c2cd4d0f 100644 --- a/.github/workflows/e2e-test-release.yml +++ b/.github/workflows/e2e-test-release.yml @@ -409,7 +409,7 @@ jobs: fail-fast: false max-parallel: 1 matrix: - fromVersion: ["v2.20.0"] + fromVersion: ["v2.20.1"] attestationVariant: ["gcp-sev-snp", "azure-sev-snp", "azure-tdx", "aws-sev-snp"] name: Run upgrade tests secrets: inherit diff --git a/.github/workflows/e2e-test-weekly.yml b/.github/workflows/e2e-test-weekly.yml index 117b2bcce..d32e2db9a 100644 --- a/.github/workflows/e2e-test-weekly.yml +++ b/.github/workflows/e2e-test-weekly.yml @@ -420,7 +420,7 @@ jobs: fail-fast: false max-parallel: 1 matrix: - fromVersion: ["v2.20.0"] + fromVersion: ["v2.20.1"] attestationVariant: ["gcp-sev-snp", "azure-sev-snp", "azure-tdx", "aws-sev-snp"] name: Run upgrade tests secrets: inherit From b204b3c59bc7c0c139cd5dd2434458453597ab5b Mon Sep 17 00:00:00 2001 From: edgelessci <71088502+edgelessci@users.noreply.github.com> Date: Fri, 14 Feb 2025 08:35:50 +0100 Subject: [PATCH 110/311] image: update measurements and image version (#3649) Co-authored-by: edgelessci --- .../measurements/measurements_enterprise.go | 16 ++++++++-------- internal/config/image_enterprise.go | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/internal/attestation/measurements/measurements_enterprise.go b/internal/attestation/measurements/measurements_enterprise.go index 689071fbf..20dd083f9 100644 --- a/internal/attestation/measurements/measurements_enterprise.go +++ b/internal/attestation/measurements/measurements_enterprise.go @@ -19,14 +19,14 @@ package measurements // revive:disable:var-naming var ( - aws_AWSNitroTPM = M{0: {Expected: []byte{0x73, 0x7f, 0x76, 0x7a, 0x12, 0xf5, 0x4e, 0x70, 0xee, 0xcb, 0xc8, 0x68, 0x40, 0x11, 0x32, 0x3a, 0xe2, 0xfe, 0x2d, 0xd9, 0xf9, 0x07, 0x85, 0x57, 0x79, 0x69, 0xd7, 0xa2, 0x01, 0x3e, 0x8c, 0x12}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x27, 0x60, 0xcd, 0x44, 0x3a, 0x80, 0xfd, 0x88, 0x7c, 0xb0, 0x90, 0xf0, 0x9e, 0x6d, 0x4a, 0x90, 0xc7, 0x75, 0xdf, 0x7b, 0x64, 0x64, 0xd1, 0xed, 0x8d, 0xd3, 0x56, 0xe9, 0x07, 0x11, 0x98, 0x07}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xf6, 0xf2, 0x4c, 0x3e, 0x50, 0x90, 0xd4, 0xbe, 0x60, 0xd4, 0x18, 0x9e, 0x0c, 0xc7, 0x41, 0xa1, 0x1c, 0xd7, 0x66, 0x86, 0x1f, 0xf3, 0x3c, 0x75, 0xc3, 0x7b, 0xb0, 0xf4, 0x04, 0x80, 0x7f, 0xbe}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x0c, 0x8a, 0x08, 0xb1, 0x33, 0xa4, 0x7d, 0x3f, 0xc4, 0x4f, 0x43, 0x9a, 0x96, 0x89, 0xad, 0x44, 0x98, 0xaf, 0xf3, 0xe1, 0x11, 0xd8, 0xc0, 0xd7, 0x7c, 0xf4, 0xd2, 0x1b, 0xc6, 0x33, 0x80, 0x26}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - aws_AWSSEVSNP = M{0: {Expected: []byte{0xd6, 0xdf, 0x85, 0x53, 0x58, 0xf5, 0xb1, 0x0f, 0x06, 0xf0, 0xfa, 0xb3, 0xf4, 0x08, 0xad, 0x26, 0xcd, 0x16, 0x5a, 0x29, 0x49, 0xba, 0xd6, 0x9e, 0x2c, 0xc7, 0x56, 0x92, 0x52, 0x9e, 0x66, 0x2a}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x00, 0xdc, 0x5d, 0x51, 0xd7, 0x00, 0xfd, 0x9e, 0xa6, 0x2b, 0x60, 0xd1, 0xc2, 0x31, 0xfa, 0x5e, 0xff, 0x5f, 0xf0, 0x3b, 0xb5, 0xad, 0x59, 0x71, 0x55, 0xab, 0x4a, 0x73, 0x66, 0xd4, 0x57, 0x98}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x3b, 0xec, 0xab, 0x41, 0xd3, 0xb1, 0x1d, 0x89, 0xc7, 0x96, 0xd1, 0x2b, 0x09, 0x46, 0x94, 0xe3, 0xad, 0xec, 0x2a, 0x1b, 0xe5, 0xe7, 0x32, 0x46, 0x0b, 0x8a, 0x05, 0xd4, 0xad, 0x20, 0xc4, 0x48}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xfd, 0x13, 0x3d, 0xac, 0xce, 0xf2, 0x59, 0x69, 0x64, 0xb7, 0xf9, 0x66, 0x26, 0x15, 0xb4, 0x6d, 0x70, 0x2c, 0x40, 0xbc, 0x0b, 0x58, 0xb7, 0x38, 0x52, 0x1f, 0xa7, 0xc2, 0x10, 0x9e, 0xf2, 0x6d}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - azure_AzureSEVSNP = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x1e, 0xa4, 0xc1, 0xe8, 0xf9, 0x63, 0x84, 0xd8, 0xdf, 0x0c, 0x86, 0xba, 0x89, 0x44, 0xb6, 0x6c, 0x27, 0x7c, 0xa7, 0x69, 0xae, 0x90, 0xda, 0xfe, 0x64, 0x1e, 0x25, 0x0d, 0x6d, 0xce, 0xb1, 0x97}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x66, 0xfc, 0x83, 0xde, 0x1c, 0x5c, 0x06, 0x89, 0x74, 0x05, 0xcb, 0x02, 0xbf, 0x30, 0xa4, 0xf5, 0x40, 0x01, 0x40, 0xdd, 0xb1, 0xc9, 0x91, 0x47, 0x9a, 0xed, 0x8a, 0x5b, 0xaf, 0x7f, 0xb8, 0x3f}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xce, 0x17, 0x51, 0x07, 0x5e, 0xf1, 0xec, 0x16, 0x30, 0x9e, 0xae, 0xd0, 0x2a, 0xc7, 0x36, 0x25, 0x49, 0x89, 0x7c, 0xda, 0x0e, 0x53, 0xb0, 0x88, 0x40, 0xf4, 0x62, 0x32, 0x5e, 0x8a, 0x6e, 0xb1}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - azure_AzureTDX = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x37, 0x99, 0x64, 0x06, 0x9d, 0x6a, 0xa3, 0x4a, 0x17, 0xe1, 0x4e, 0xb8, 0x98, 0x42, 0x80, 0xa5, 0xcc, 0x77, 0xac, 0x33, 0x8e, 0x33, 0x0e, 0x93, 0x5b, 0x3f, 0xc1, 0x04, 0x97, 0xb5, 0x98, 0xca}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xf4, 0xfa, 0xc7, 0x69, 0xf1, 0x9b, 0xb6, 0xb9, 0x26, 0x1d, 0x9e, 0xa7, 0x8f, 0xc0, 0x09, 0xd6, 0x58, 0xa8, 0x18, 0x34, 0xc8, 0x64, 0x10, 0xac, 0xfe, 0x42, 0x8e, 0x4d, 0x60, 0xb7, 0x1d, 0xdc}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xf7, 0x14, 0x18, 0xbe, 0xda, 0x87, 0x89, 0x92, 0x96, 0xba, 0x7c, 0xd4, 0x41, 0xbc, 0xe5, 0x98, 0x7d, 0x7a, 0xd3, 0xd6, 0x7a, 0xf1, 0xc4, 0x84, 0xc6, 0x7c, 0xac, 0x14, 0xfc, 0x61, 0xb0, 0x43}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + aws_AWSNitroTPM = M{0: {Expected: []byte{0x73, 0x7f, 0x76, 0x7a, 0x12, 0xf5, 0x4e, 0x70, 0xee, 0xcb, 0xc8, 0x68, 0x40, 0x11, 0x32, 0x3a, 0xe2, 0xfe, 0x2d, 0xd9, 0xf9, 0x07, 0x85, 0x57, 0x79, 0x69, 0xd7, 0xa2, 0x01, 0x3e, 0x8c, 0x12}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x34, 0xa9, 0x9a, 0x43, 0xbe, 0x1a, 0xb3, 0x17, 0x60, 0xa2, 0xd8, 0xd3, 0x88, 0x2a, 0x00, 0x12, 0x94, 0x5a, 0x40, 0xb5, 0xe3, 0x0d, 0xb9, 0xea, 0x36, 0x98, 0x61, 0xef, 0xe9, 0x37, 0x1d, 0xf7}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x6e, 0xd2, 0x8e, 0x30, 0x71, 0x2d, 0xcb, 0xae, 0x05, 0xb5, 0xa3, 0x80, 0x7d, 0x98, 0xfa, 0x21, 0xdc, 0x2b, 0x45, 0x5c, 0x19, 0x8d, 0x74, 0x53, 0x0a, 0x55, 0x5d, 0xbd, 0xd1, 0x85, 0xc7, 0x7c}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x1b, 0x82, 0x9e, 0x7e, 0x0b, 0x10, 0x1d, 0x1c, 0x45, 0xe6, 0x41, 0x8f, 0x11, 0xc1, 0xfa, 0x1f, 0x17, 0xb6, 0xa6, 0x04, 0x5f, 0x91, 0x36, 0xbe, 0x8c, 0xc4, 0x2d, 0xfd, 0x52, 0x8c, 0xb2, 0xa1}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + aws_AWSSEVSNP = M{0: {Expected: []byte{0xd6, 0xdf, 0x85, 0x53, 0x58, 0xf5, 0xb1, 0x0f, 0x06, 0xf0, 0xfa, 0xb3, 0xf4, 0x08, 0xad, 0x26, 0xcd, 0x16, 0x5a, 0x29, 0x49, 0xba, 0xd6, 0x9e, 0x2c, 0xc7, 0x56, 0x92, 0x52, 0x9e, 0x66, 0x2a}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x8d, 0x02, 0x42, 0xb8, 0x80, 0xcc, 0xfb, 0x3a, 0x68, 0x6d, 0x50, 0x02, 0xce, 0xc0, 0x97, 0x30, 0xe9, 0x1e, 0x79, 0x8a, 0x66, 0x68, 0x31, 0xa1, 0x1c, 0xd8, 0x99, 0xc6, 0x47, 0x76, 0xa1, 0x76}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x4f, 0xb7, 0xcf, 0x7b, 0xf9, 0x8d, 0x88, 0x45, 0xaf, 0x2c, 0x34, 0x59, 0xd8, 0xff, 0xa5, 0xa1, 0xea, 0x47, 0x9a, 0x69, 0x2c, 0xee, 0xc5, 0xe8, 0x7f, 0xc0, 0xa5, 0xb1, 0x7c, 0xf7, 0x58, 0x20}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x54, 0xd7, 0x8d, 0x32, 0xdf, 0xd7, 0x7e, 0x3d, 0xae, 0x0b, 0x49, 0x81, 0x71, 0x5a, 0x98, 0x6b, 0x2f, 0xdc, 0x73, 0xdf, 0x76, 0xee, 0xa0, 0xdb, 0x8e, 0x32, 0x3f, 0x25, 0x51, 0x84, 0x0b, 0x0c}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + azure_AzureSEVSNP = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xd3, 0xa8, 0x3e, 0x38, 0xd8, 0x7b, 0xe3, 0x7c, 0xab, 0x5e, 0xc7, 0xf9, 0x59, 0x3b, 0x07, 0x50, 0xc4, 0x0d, 0xbb, 0x00, 0xca, 0x9e, 0x8e, 0xe0, 0x4d, 0xf9, 0x62, 0x04, 0xbb, 0x37, 0xbb, 0x1f}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x20, 0x05, 0x71, 0x3f, 0x2c, 0x01, 0xe0, 0xe3, 0xa8, 0x6c, 0x43, 0x48, 0x58, 0x35, 0xed, 0x8d, 0x7b, 0x82, 0xf0, 0xe1, 0x82, 0xbe, 0xef, 0x30, 0x32, 0x4a, 0xb4, 0x1c, 0x90, 0x65, 0xc2, 0xdd}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x48, 0x5f, 0xbf, 0x17, 0x38, 0xa0, 0xd0, 0x08, 0xe0, 0x08, 0x96, 0xa6, 0x40, 0xb2, 0x46, 0x23, 0x01, 0x44, 0x47, 0x41, 0x93, 0xaa, 0xbf, 0x61, 0xb0, 0x5a, 0xd7, 0x7f, 0xdc, 0x69, 0x5a, 0x92}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + azure_AzureTDX = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x06, 0x7c, 0x7f, 0x7d, 0x40, 0x0c, 0xa5, 0x94, 0xed, 0x8b, 0xe3, 0x5f, 0x6c, 0x0b, 0xe0, 0x6e, 0x2c, 0xd0, 0x1a, 0x7e, 0xbf, 0xd0, 0xab, 0xb8, 0x7c, 0x59, 0x99, 0x12, 0x2f, 0x65, 0xe2, 0xb8}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x32, 0x73, 0xf6, 0xd5, 0xdf, 0x54, 0x63, 0xdd, 0xf7, 0xef, 0x51, 0x62, 0x5a, 0xc4, 0x59, 0x0a, 0x89, 0xe6, 0x69, 0x66, 0xa3, 0xf1, 0x8a, 0x9c, 0x5c, 0x7e, 0xd3, 0x96, 0x3b, 0x97, 0xa8, 0x3e}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xf3, 0xbb, 0x03, 0x36, 0xdd, 0xc3, 0x13, 0x41, 0x89, 0x5a, 0xcf, 0x73, 0xaf, 0x2b, 0xf5, 0x7c, 0x15, 0x6e, 0x68, 0x39, 0x75, 0xf4, 0xe5, 0x09, 0x71, 0x4b, 0x0d, 0xc4, 0x1e, 0x71, 0x6e, 0x27}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} azure_AzureTrustedLaunch M - gcp_GCPSEVES = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x96, 0xe9, 0x8f, 0x5d, 0x82, 0x13, 0x20, 0x8a, 0x32, 0x82, 0x02, 0x29, 0x67, 0x15, 0xbf, 0xcd, 0xe4, 0x9e, 0xc9, 0xb1, 0x57, 0x0c, 0x9f, 0xea, 0x15, 0x69, 0xcf, 0x01, 0x7a, 0xb5, 0x89, 0xd8}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x05, 0x4e, 0x71, 0x38, 0x9e, 0xbe, 0xf4, 0xc8, 0xcb, 0xa5, 0xe7, 0x9f, 0x2e, 0xea, 0x2a, 0x67, 0x11, 0xb3, 0xdf, 0x27, 0x27, 0x67, 0x59, 0xa7, 0xf3, 0x8c, 0x22, 0x21, 0x7e, 0x5c, 0xac, 0x0b}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x67, 0x06, 0x84, 0x75, 0x2f, 0x96, 0x2d, 0x59, 0xf6, 0x93, 0x6c, 0x64, 0x59, 0x54, 0xca, 0xa7, 0x9f, 0xb6, 0xf7, 0x49, 0xee, 0x54, 0x31, 0xf1, 0x0f, 0x0b, 0x8d, 0x04, 0x50, 0x48, 0xaf, 0x7e}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - gcp_GCPSEVSNP = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x30, 0xce, 0x69, 0xd4, 0x3e, 0x28, 0x11, 0x32, 0xca, 0xa6, 0x76, 0x69, 0x56, 0x6b, 0x5d, 0x02, 0xf7, 0xdb, 0x54, 0x92, 0xac, 0x50, 0x1c, 0xd7, 0xa4, 0x17, 0x67, 0x09, 0x93, 0x34, 0x94, 0xb3}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x7b, 0x67, 0x3a, 0x07, 0xd9, 0x0c, 0x54, 0x0e, 0x16, 0xd8, 0x6d, 0x8a, 0xfe, 0x6a, 0x55, 0x33, 0x5b, 0x61, 0x7b, 0xa7, 0x50, 0xcd, 0xbb, 0xb5, 0x47, 0x6a, 0x11, 0x9b, 0xfa, 0x26, 0x4d, 0x69}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x35, 0xe1, 0x60, 0x19, 0xf2, 0x53, 0xfa, 0x73, 0xc1, 0xcd, 0x0f, 0xea, 0x22, 0xe7, 0xc4, 0x4b, 0x5a, 0x8f, 0x46, 0x46, 0x2c, 0x8f, 0x50, 0xf3, 0x99, 0x28, 0xab, 0xf2, 0x47, 0x8d, 0xfc, 0x05}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - openstack_QEMUVTPM = M{4: {Expected: []byte{0x89, 0xe9, 0x47, 0x4f, 0xd5, 0xab, 0xa8, 0x7d, 0x27, 0x9f, 0x05, 0x42, 0xaa, 0xf1, 0x70, 0x16, 0x36, 0x31, 0x55, 0xb0, 0xf4, 0xdc, 0x6a, 0x77, 0x0f, 0xcb, 0x8f, 0xe8, 0xb0, 0xc0, 0x40, 0x4d}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x6a, 0x50, 0x8e, 0xf5, 0xac, 0x10, 0x97, 0x5f, 0x73, 0xb0, 0x61, 0x22, 0xa5, 0x0d, 0xd3, 0xa4, 0xf1, 0x72, 0x41, 0xeb, 0xfa, 0x40, 0x17, 0xc7, 0x76, 0x5d, 0x8f, 0x48, 0x39, 0x14, 0x4e, 0xea}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xa6, 0x86, 0xa1, 0x42, 0x71, 0x42, 0xc6, 0xad, 0x44, 0xfd, 0x57, 0x90, 0xe5, 0x4d, 0xac, 0xee, 0x81, 0x4c, 0x13, 0x83, 0x3e, 0x0e, 0x8a, 0xb6, 0xd4, 0x25, 0xda, 0x84, 0xe4, 0xb1, 0x29, 0xb3}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + gcp_GCPSEVES = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x46, 0xdb, 0xf2, 0x1e, 0x37, 0xfb, 0xcc, 0xd1, 0x6e, 0x69, 0x56, 0x7b, 0x33, 0xd6, 0xf5, 0x05, 0x05, 0x86, 0xb8, 0x90, 0xb2, 0x96, 0xf8, 0x01, 0x7c, 0xce, 0xfe, 0x94, 0xbb, 0x97, 0xc1, 0x24}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xc7, 0xf7, 0xd9, 0x61, 0x3e, 0x36, 0xfc, 0x25, 0x66, 0xf0, 0xec, 0xe8, 0x6b, 0x21, 0x02, 0x5f, 0x80, 0x2c, 0x27, 0x07, 0xe2, 0x51, 0x26, 0x1d, 0x72, 0xae, 0x07, 0xdc, 0x2d, 0x15, 0x66, 0x7d}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xc0, 0x25, 0x39, 0x3e, 0x36, 0x55, 0x29, 0x4a, 0x1d, 0xd5, 0xe0, 0x86, 0x40, 0xd3, 0x72, 0xcd, 0x18, 0x26, 0xc1, 0xa1, 0x5c, 0xec, 0x95, 0xd3, 0x4d, 0x7d, 0x23, 0xaa, 0x64, 0x19, 0xec, 0x91}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + gcp_GCPSEVSNP = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x70, 0xea, 0xb1, 0xc6, 0x91, 0x03, 0xe1, 0x01, 0xa0, 0x2e, 0x35, 0x2a, 0x56, 0x2c, 0x12, 0x88, 0x6e, 0xc6, 0x4b, 0xfb, 0x3f, 0x18, 0x17, 0x9c, 0x76, 0x28, 0xe4, 0x12, 0x04, 0x70, 0xeb, 0x7e}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x56, 0x9d, 0xee, 0x62, 0x82, 0x64, 0x2f, 0x43, 0xe2, 0x3c, 0x22, 0x45, 0x47, 0x95, 0x99, 0x7a, 0x3b, 0xf7, 0x32, 0x57, 0x0f, 0xd4, 0x95, 0xbc, 0x30, 0x2c, 0xa1, 0xc9, 0xa8, 0x6c, 0xc5, 0x84}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xd3, 0xe0, 0x2b, 0x3b, 0x43, 0x63, 0xf4, 0x7e, 0x86, 0xc8, 0x92, 0x18, 0xa8, 0x2d, 0xed, 0x56, 0xa4, 0x8a, 0xdf, 0x3c, 0x5d, 0x86, 0x11, 0x3c, 0xe5, 0xad, 0xbd, 0xff, 0x51, 0x6a, 0x7f, 0x09}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + openstack_QEMUVTPM = M{4: {Expected: []byte{0x15, 0x8c, 0x3d, 0x42, 0x0a, 0xb0, 0xac, 0x53, 0xd6, 0xb6, 0x4c, 0xe9, 0xf1, 0xc7, 0xd1, 0x91, 0xce, 0x5b, 0xeb, 0xc8, 0x62, 0x10, 0xf9, 0x71, 0x9e, 0x5b, 0xcb, 0x8a, 0x25, 0xeb, 0x57, 0xcb}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x96, 0xaf, 0x14, 0xd1, 0x8f, 0x51, 0xd3, 0x43, 0x9d, 0xa0, 0xa7, 0xd9, 0x3a, 0x7c, 0x5a, 0xa6, 0xd2, 0x63, 0x45, 0xe4, 0xdf, 0x72, 0x6a, 0xc6, 0x3b, 0x51, 0x7d, 0x4c, 0x38, 0xb7, 0xfe, 0x22}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xd0, 0x59, 0x07, 0x0f, 0x84, 0x96, 0x41, 0x9f, 0x76, 0xea, 0xce, 0x81, 0x05, 0x88, 0xd9, 0x6d, 0x68, 0x53, 0x25, 0xc7, 0x5f, 0x2a, 0x27, 0x1b, 0x67, 0xe4, 0x4a, 0x88, 0xb7, 0xaa, 0x78, 0xe4}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} qemu_QEMUTDX M - qemu_QEMUVTPM = M{4: {Expected: []byte{0xbe, 0x6d, 0x9b, 0x1f, 0x69, 0x58, 0xa6, 0x92, 0xf8, 0x38, 0x50, 0xdf, 0x12, 0xec, 0x08, 0xac, 0xae, 0x1a, 0x1e, 0xc4, 0x23, 0xdb, 0x18, 0xbb, 0xb4, 0x3d, 0x04, 0xc8, 0x78, 0x17, 0x17, 0x61}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x3b, 0x5f, 0x3c, 0x24, 0xf3, 0x21, 0xf9, 0xba, 0x15, 0x04, 0x7d, 0xea, 0xc4, 0xf7, 0x55, 0x54, 0xe1, 0xa2, 0x86, 0xc1, 0xe0, 0x4f, 0xdc, 0xf7, 0xe4, 0x60, 0xcf, 0xac, 0xcb, 0x8c, 0xf1, 0x4f}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x98, 0x04, 0x47, 0x9b, 0x42, 0xae, 0xbf, 0x1c, 0xe0, 0x15, 0x2e, 0xfb, 0xe3, 0x59, 0xf2, 0x19, 0x31, 0xae, 0x61, 0x84, 0x72, 0xd9, 0x29, 0xd9, 0x8f, 0xa2, 0x7c, 0x84, 0x63, 0xcd, 0x77, 0x89}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + qemu_QEMUVTPM = M{4: {Expected: []byte{0xd7, 0x23, 0x15, 0x97, 0x74, 0x6e, 0x51, 0x08, 0xec, 0xcc, 0xd3, 0x24, 0x7a, 0xe9, 0xad, 0x22, 0xdf, 0x84, 0x0a, 0x6f, 0xe0, 0xc3, 0x07, 0x19, 0x64, 0x72, 0xe5, 0xc7, 0x3c, 0x14, 0xe5, 0x72}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xe1, 0xd7, 0x2c, 0x0b, 0x93, 0xc0, 0x2d, 0xc2, 0x96, 0x85, 0x1b, 0x74, 0xe0, 0x6d, 0x49, 0xc6, 0x77, 0xd7, 0xd1, 0x06, 0x32, 0xcd, 0xa3, 0xd2, 0x2a, 0xcb, 0x3f, 0x8b, 0x3e, 0xc5, 0x1d, 0xcc}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x39, 0x14, 0x0c, 0x92, 0x55, 0x19, 0x74, 0xa6, 0xdd, 0x6b, 0xa0, 0x19, 0x26, 0x32, 0xc9, 0xc4, 0xc8, 0xa2, 0x8f, 0xa0, 0x65, 0x81, 0xa7, 0x25, 0xeb, 0xf7, 0x39, 0x93, 0xcb, 0xed, 0x2f, 0xce}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} ) diff --git a/internal/config/image_enterprise.go b/internal/config/image_enterprise.go index 7e3e3ab63..5a4b45d6b 100644 --- a/internal/config/image_enterprise.go +++ b/internal/config/image_enterprise.go @@ -10,5 +10,5 @@ package config const ( // defaultImage is the default image to use. - defaultImage = "ref/main/stream/nightly/v2.21.0-pre.0.20250207133812-571c81cfd5db" + defaultImage = "ref/main/stream/nightly/v2.21.0-pre.0.20250213200458-df2383ab0968" ) From 0abd06053c35af3ff679ca990dd56b6f0c8edc7e Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 14 Feb 2025 09:16:50 +0100 Subject: [PATCH 111/311] deps: update module k8s.io/kubernetes to v1.32.2 [SECURITY] (#3648) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 5f7c05ae3..42558ea75 100644 --- a/go.mod +++ b/go.mod @@ -134,7 +134,7 @@ require ( k8s.io/client-go v0.32.1 k8s.io/cluster-bootstrap v0.32.1 k8s.io/kubelet v0.32.1 - k8s.io/kubernetes v1.32.1 + k8s.io/kubernetes v1.32.2 k8s.io/mount-utils v0.32.1 k8s.io/utils v0.0.0-20241210054802-24370beab758 libvirt.org/go/libvirt v1.11001.0 diff --git a/go.sum b/go.sum index 9edb14a10..fb16e7b13 100644 --- a/go.sum +++ b/go.sum @@ -1066,8 +1066,8 @@ k8s.io/kubectl v0.32.0 h1:rpxl+ng9qeG79YA4Em9tLSfX0G8W0vfaiPVrc/WR7Xw= k8s.io/kubectl v0.32.0/go.mod h1:qIjSX+QgPQUgdy8ps6eKsYNF+YmFOAO3WygfucIqFiE= k8s.io/kubelet v0.32.1 h1:bB91GvMsZb+LfzBxnjPEr1Fal/sdxZtYphlfwAaRJGw= k8s.io/kubelet v0.32.1/go.mod h1:4sAEZ6PlewD0GroV3zscY7llym6kmNNTVmUI/Qshm6w= -k8s.io/kubernetes v1.32.1 h1:46YPpIBCT9dkmeglstZ2Gg4LGaAdro1/3IQ+1AfbF1s= -k8s.io/kubernetes v1.32.1/go.mod h1:tiIKO63GcdPRBHW2WiUFm3C0eoLczl3f7qi56Dm1W8I= +k8s.io/kubernetes v1.32.2 h1:mShetlA102UpjRVSGzB+5vjJwy8oPy8FMWrkTH5f37o= +k8s.io/kubernetes v1.32.2/go.mod h1:tiIKO63GcdPRBHW2WiUFm3C0eoLczl3f7qi56Dm1W8I= k8s.io/mount-utils v0.32.1 h1:RJOD6xXzEJT/OOJoG1KstfVa8ZXJJPlHb+t2MoulPHM= k8s.io/mount-utils v0.32.1/go.mod h1:Kun5c2svjAPx0nnvJKYQWhfeNW+O0EpzHgRhDcYoSY0= k8s.io/utils v0.0.0-20241210054802-24370beab758 h1:sdbE21q2nlQtFh65saZY+rRM6x6aJJI8IUa1AmH/qa0= From d208251df1152199c8d242b254455e3d5b7baa50 Mon Sep 17 00:00:00 2001 From: edgelessci <71088502+edgelessci@users.noreply.github.com> Date: Mon, 17 Feb 2025 08:28:12 +0100 Subject: [PATCH 112/311] image: update locked rpms (#3650) Co-authored-by: edgelessci --- image/mirror/SHA256SUMS | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/image/mirror/SHA256SUMS b/image/mirror/SHA256SUMS index 074edc6f7..26dd416ad 100644 --- a/image/mirror/SHA256SUMS +++ b/image/mirror/SHA256SUMS @@ -119,8 +119,8 @@ c8e382e9de90e6946dd9bc2f706d6c307ea4ebba3eca91a283f1bb72b5b3ac9c kbd-2.6.4-3.fc 42994ac67877595861b55adafd75ab3ce02d397e2ccddac8fb40ec0fecb4436b kmod-libs-31-5.fc40.i686.rpm 53dd95341767a2ea40b68e4621a231883bd5b69426f0920ce1f1ca94e18765cb kmod-libs-31-5.fc40.x86_64.rpm 9a03b21936528f6d08700757cb460c48e9557a71efaaa5e93b01b3f7614320f3 kpartx-0.9.7-7.fc40.x86_64.rpm -821a2a47fa5ff1f9450f82118c812bc105f8afd5eb6a8e00523665c2a14a651d krb5-libs-1.21.3-2.fc40.i686.rpm -2db3a289d5a710b5f8ebbd603228d67ee59281622f086e3530efe8f2545057d6 krb5-libs-1.21.3-2.fc40.x86_64.rpm +cd3402d654af18c421c0ae866ef668094cff5c032bb3f769606261eca8dcf8fa krb5-libs-1.21.3-3.fc40.i686.rpm +878a5a48835ecfec5fa04c7c7a1f24bdae7bd8e9aeca7b3f9dd97f6a23b9b41e krb5-libs-1.21.3-3.fc40.x86_64.rpm 6f2f0a522f2f10f273a77a60fdb7e066c14059d0a3676c9f723162daa7110b42 libacl-2.3.2-1.fc40.i686.rpm b753174804f57c3c6bae7afeb6145005498f18ae5d1aa0d340f9df5b8d71312f libacl-2.3.2-1.fc40.x86_64.rpm 74d72760c1982830358d676794ee3972ab05550fe7235ae9756a40de8266091f libarchive-3.7.2-7.fc40.x86_64.rpm @@ -254,8 +254,8 @@ b3b261e448a25c6550f050ca1813509dd6edbb10f22c02a535548332435b6bc4 pam-1.6.1-5.fc 753d7b5a6531eec7689414dc1a4ce76ba4d327b8ad0363a9298ee67b565c1d95 pam-libs-1.6.1-5.fc40.i686.rpm 6ca8efd0b2a26cc51917c1c81260d919ef7760f0e0770dc872a78b1b829299cd pam-libs-1.6.1-5.fc40.x86_64.rpm 9bbce784622e02af0371ced8e9a7d26adba7eabd66ecfcb8bbe2d24cf616e3c1 parted-3.6-4.fc40.x86_64.rpm -c974aaedb25dbef6641edfe7a6671c38f114a607a10930f11d76715bb50b8dca passt-0^20241211.g09478d5-1.fc40.x86_64.rpm -4ea0e7215b5c9a7e98960c7c42931a0440361d8427099c7722b2c8cb37f15e4c passt-selinux-0^20241211.g09478d5-1.fc40.noarch.rpm +4e5a6475fe4f0c5d4919b7bafa52cd1f54b21a26610c9f0582f9feb262b578d9 passt-0^20250121.g4f2c8e7-2.fc40.x86_64.rpm +23e04153376f97de74593687fe282fc76c5a7694d6b05fffabe81a35ef5cd05b passt-selinux-0^20250121.g4f2c8e7-2.fc40.noarch.rpm a0fb808d6b7ff8cd9cfdc1a60f213851cecdcace334d6e5aa1e0e54b81d79a25 pcre2-10.44-1.fc40.i686.rpm 73e50df09266fcffda9c24a3738f579dd365c2c187c294da054ef9915edc3851 pcre2-10.44-1.fc40.x86_64.rpm dbec699e88d42fc6fb1df0a8c0b9023941ed1b1b7625694253a612eaf9f2691d pcre2-syntax-10.44-1.fc40.noarch.rpm @@ -266,7 +266,7 @@ f796a31cad58f4ebea8787020868581d9a721297ee0ef6a7c63a7f8444f60c17 pcsc-lite-libs cb7c5036f1d25c696de23a6670cb64caec9945116fb0c9a93555414746ecf253 pinentry-1.3.0-2.fc40.x86_64.rpm bbb4abafa9f7664e21350b56d49af2c928288e6d4dd68c304c4ab5d45b2c8ad7 pkcs11-provider-0.3-2.fc40.x86_64.rpm f2401414fa396e3b86471c311008383bcf51755aa30697c72147892a50de8894 podman-5.3.1-1.fc40.x86_64.rpm -358aa7593e83481c7d0be87ec18bf24cad5bf2a5cf54763552ede4c8db3c75a6 policycoreutils-3.7-6.fc40.x86_64.rpm +f6291fc1fd3ececcd23c9e693ae0d309d66d57cc2de5d3d389235604804c1c2a policycoreutils-3.7-7.fc40.x86_64.rpm 30a4f9d3631aaa1280c93ce4305847a9773973aa312e1802d1cd676cb2421689 polkit-124-2.fc40.x86_64.rpm f47bc65177a8b160916c00df9c84442afa1dd353880b3c0503d5a0b052d4956c polkit-libs-124-2.fc40.x86_64.rpm b7decdd8a6fcb175fea2bb39bb1dbecad1ba820c365bab5a273a7b3982e55157 polkit-pkla-compat-0.1-28.fc40.x86_64.rpm @@ -307,7 +307,7 @@ dacd59edbe4744fd9f6823d672e01eff89f871e88537554f16c0a275a17d04e9 readline-8.2-8 c48c149f4aebfe44d649eea6f7a8eaa229dc8db71ff70b66c7403aa9bd072820 rpm-libs-4.19.1.1-1.fc40.x86_64.rpm 7bebda41ea91faf8cf8911a403c051eb59d444e60f8091d14d10987b713f39ff rpm-plugin-audit-4.19.1.1-1.fc40.x86_64.rpm d400a4e4440bea56566fb1e9582d86d1ac2e07745d37fa6e71f43a8fea05217c rpm-plugin-selinux-4.19.1.1-1.fc40.x86_64.rpm -7fdc56b6abf0b36209010e2f4cc02febe079b50b0cb1ed7e564045b34059d8a7 rpm-sequoia-1.7.0-3.fc40.x86_64.rpm +ce3b3148bb617e132c2ae9a28cc9f1990f806bc45722489f4c09f4d90821b6cd rpm-sequoia-1.7.0-5.fc40.x86_64.rpm 22fe9c46b5a273164b3520428d2f00f58b1c3ec7ccc52a9f0285d72e823ef0a5 runc-1.2.4-1.fc40.x86_64.rpm 5dbd069183076ed8048c839c31f713c0f6080fb9ebfdda92ac550030688e811b sbsigntools-0.9.5-6.fc40.x86_64.rpm 6a21b2c132a54fd6d9acb846d0a96289ab739b745cdc4c2b31bdbf6b2434a1a7 sed-4.9-1.fc40.x86_64.rpm @@ -317,7 +317,7 @@ b4e188db51c7ec2d5f0cba79783eb2df7c14a92c2c6e55a9eb490d28d17d123d selinux-policy cfde0d25ecac7e689ee083b330b78df51d346c2b7557c83a189d5df95c4e2c8d shadow-utils-4.15.1-4.fc40.x86_64.rpm 6e9b6b6196f1782419e447ac806c762d002c6930fe39b18999d9b32c24a0ecfc shadow-utils-subid-4.15.1-4.fc40.x86_64.rpm 67eede27af5b4773eb2f7ac794df694be030310d40bce462864c05b8f65c87c3 socat-1.8.0.0-2.fc40.x86_64.rpm -a1e23ae521e93ab19d3df77889a6a418c3432025e4880cfd893e40f7165876a7 sqlite-libs-3.45.1-2.fc40.x86_64.rpm +9fe46c08d942a5eaa66d997368f372557a81383fe9831ddeb801bccdde64f28b sqlite-libs-3.45.1-3.fc40.x86_64.rpm 50d517b44eeb126c05afcbc2e450bd5bfa1c6af0e9744e5a8fa749b0bbbd872e systemd-255.16-1.fc40.i686.rpm f86b4e2a602905aeb1a87b2e0fcab9e783fa3347adb40d4e04c288ae0321f79f systemd-255.16-1.fc40.x86_64.rpm 7987560126dd84f8101bfc0e10455ed055f313c5df419d41417ebfcd7de16d97 systemd-boot-unsigned-255.16-1.fc40.x86_64.rpm @@ -332,24 +332,24 @@ d59030b779fdc989af950179ce808639a58878e6b8db4458fa7f7217c1b3b833 systemd-pam-25 0478e12152cc3432a31dfca5ddbc80966800af437c6d7c0b26be307d5e1272e7 tpm2-tools-5.7-1.fc40.x86_64.rpm c3be8a6d0ea23b1d0bf466b19857b97f7ffde811ad7adec0599161059d84cc74 tpm2-tss-4.1.3-1.fc40.x86_64.rpm 5df98756883badf7743cdd75f5689b62606bff0b74494b20241cb9d78335c251 tpm2-tss-fapi-4.1.3-1.fc40.x86_64.rpm -83c8c9d550ada195a1e4e22b44f3f4d669d95c697411f0a65bbc638e4fe13d43 tzdata-2024b-1.fc40.noarch.rpm -9fc3b3f602c81bdb5e1daa4a7f9a254d35481bd1186ac0b01fbb0c3243440ca8 unbound-anchor-1.21.1-3.fc40.x86_64.rpm -1432f6a67a9400d10b09b5eee96c6fbf89b8bef99cc7e1abc6d885cf69a61fb2 unbound-libs-1.21.1-3.fc40.x86_64.rpm +1073ad5a60c424d205e1db3503816bde05931a205976da56fc1446d0c48c0f4f tzdata-2025a-1.fc40.noarch.rpm +e1d443f7dcaec55eedc34bb66dd798ba9901dba69a169cff46f6c45671a3b3fa unbound-anchor-1.21.1-11.fc40.x86_64.rpm +8eb278cecd9f28fa4131dc402a31c74c427626aae53b2231bb452e745a9e9346 unbound-libs-1.21.1-11.fc40.x86_64.rpm 36ffa617a0dfe523424a28290241a81cd51f7d82e776e58131f16d092d49797b util-linux-2.40-0.9.rc1.fc40.i686.rpm 945aa536bc30050abc1870cef167cb944cf78d6628923476db43201a0054574b util-linux-2.40.2-1.fc40.x86_64.rpm 7ec1b5df780c5a30f8e901179480125a6ea87f1f7bad3b69da7f4b351b88c3dd util-linux-core-2.40-0.9.rc1.fc40.x86_64.rpm b1aa4e816c01c08c18924865640f214f717cdfc66837e53a24b8edfb80a86f9d util-linux-core-2.40.2-1.fc40.x86_64.rpm -df5ab0573bfe904aaab3b735ea1855202c16df9308a73082b77771cf8b21da07 vim-common-9.1.1000-1.fc40.x86_64.rpm -dc1d384fc3554f7185a5b5d59044b3f723bf131dd6e15e7c082b62d990dec950 vim-data-9.1.1000-1.fc40.noarch.rpm -150be77f965f76c47f4f3f6e13ce794d89fae5fc35593bffae849998da707bd3 vim-enhanced-9.1.1000-1.fc40.x86_64.rpm -90e56222622b0be483ab536789611e3a4272ee55a6208e4c2ad32d185e2254bc vim-filesystem-9.1.1000-1.fc40.noarch.rpm +c1ca72605589eb4116c8c339b4df2334dd270fe827e9bad347468a7b6580b595 vim-common-9.1.1081-1.fc40.x86_64.rpm +28c56e09bdcb307dfaaa144811680e28926b9976f03be5032b37b3048779584e vim-data-9.1.1081-1.fc40.noarch.rpm +468596456cb9b4d269d5878972c7ff27052a5e6c0e1dcffc91702a442b69df68 vim-enhanced-9.1.1081-1.fc40.x86_64.rpm +dbc8d88c0f3c05bb49f59bc774a5560a1ba2e49e1c3b774c76fced79b8f71661 vim-filesystem-9.1.1081-1.fc40.noarch.rpm 5f4aef6a6f19712c142b3e592ff05bba03dee877a0a098df294d876063918805 wget2-2.2.0-1.fc40.x86_64.rpm a4119091a85b4aa4262a26f6ed2d6653de9b7c4def3636a2b0ad066436f29acd wget2-libs-2.2.0-1.fc40.x86_64.rpm 4948040a53814b1b4b76f6ec9d64ec21f3f2d1196a0a1c5b117f91fa58a267b1 wget2-wget-2.2.0-1.fc40.x86_64.rpm cf0306ceed1c6b3be39060d85f16b1953b464d3a625488b170d3b7aadf600645 which-2.21-41.fc40.x86_64.rpm 4ede95a2fa3bc0ae617c8bf3a375b800163d58733b4829b15d9f038505d79fee whois-nls-5.5.20-3.fc40.noarch.rpm e2195010e857f56b19246f8b821f9391922880b7691b3728a413f540edc890a6 xkeyboard-config-2.41-1.fc40.noarch.rpm -3b970af481308b88f6bdb62a60895580213d1e9ec3b19ddd5219b6238984040c xxd-9.1.1000-1.fc40.x86_64.rpm +c9dbcdedc3047f49ab85ef0e427207b6ee1d221a447557de2174e5b0d8960136 xxd-9.1.1081-1.fc40.x86_64.rpm ee599a1c4d7ee635e54ec137af4dded83f433b9c8a5976f75ecdcd000b5246e3 xz-5.4.6-3.fc40.x86_64.rpm b92ef78d8ab424c22130e457d0ef691d8197bff61c3b8852205d1b02baba3819 xz-libs-5.4.6-3.fc40.i686.rpm b6ee44b3d7e494b0364f26b7d0b169a8092180af787423cd5e8a47dc0f738a66 xz-libs-5.4.6-3.fc40.x86_64.rpm From 28ae7de4ea47169735090181568a23b2e22dd9b2 Mon Sep 17 00:00:00 2001 From: Moritz Sanft <58110325+msanft@users.noreply.github.com> Date: Mon, 17 Feb 2025 15:27:51 +0100 Subject: [PATCH 113/311] ci: supply STACKIT credentials to cleanup job (#3651) --- .github/actions/e2e_cleanup_timeframe/action.yml | 16 ++++++++++++++++ .github/workflows/e2e-cleanup-weekly.yml | 4 +++- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/.github/actions/e2e_cleanup_timeframe/action.yml b/.github/actions/e2e_cleanup_timeframe/action.yml index 8c3e64ce7..fdf2d4db9 100644 --- a/.github/actions/e2e_cleanup_timeframe/action.yml +++ b/.github/actions/e2e_cleanup_timeframe/action.yml @@ -11,6 +11,12 @@ inputs: azure_credentials: description: "Credentials authorized to create Constellation on Azure." required: true + openStackCloudsYaml: + description: "The contents of ~/.config/openstack/clouds.yaml" + required: false + stackitUat: + description: "The UAT for STACKIT" + required: false runs: using: "composite" @@ -31,6 +37,16 @@ runs: with: service_account: "destroy-e2e@constellation-e2e.iam.gserviceaccount.com" + - name: Login to OpenStack + uses: ./.github/actions/login_openstack + with: + clouds_yaml: ${{ inputs.openStackCloudsYaml }} + + - name: Login to STACKIT + uses: ./.github/actions/login_stackit + with: + serviceAccountToken: ${{ inputs.stackitUat }} + - name: Install tools uses: ./.github/actions/setup_bazel_nix with: diff --git a/.github/workflows/e2e-cleanup-weekly.yml b/.github/workflows/e2e-cleanup-weekly.yml index e8e5ffa92..da557ae08 100644 --- a/.github/workflows/e2e-cleanup-weekly.yml +++ b/.github/workflows/e2e-cleanup-weekly.yml @@ -4,7 +4,7 @@ on: schedule: - cron: "0 0 * * 0" # At 00:00 every Sunday UTC workflow_dispatch: - + jobs: cleanup: @@ -22,3 +22,5 @@ jobs: ghToken: ${{ secrets.GITHUB_TOKEN }} encryptionSecret: ${{ secrets.ARTIFACT_ENCRYPT_PASSWD }} azure_credentials: ${{ secrets.AZURE_E2E_DESTROY_CREDENTIALS }} + openStackCloudsYaml: ${{ secrets.STACKIT_CI_CLOUDS_YAML }} + stackitUat: ${{ secrets.STACKIT_CI_UAT }} From 758191ad426800f40de480ec15dd367a962a4c90 Mon Sep 17 00:00:00 2001 From: Markus Rudy Date: Tue, 18 Feb 2025 11:06:56 +0100 Subject: [PATCH 114/311] operator: bump controller-gen version (#3653) * operator: bump controller-gen version This bump the controller gen version and also adjusts the generate commands (back to the original ones). This allows correct generation of CRDs and go code. --------- Co-authored-by: Leonard Cohnen --- .../crds/autoscalingstrategy-crd.yaml | 35 +- .../crds/joiningnode-crd.yaml | 28 +- .../crds/nodeversion-crd.yaml | 681 +++++++----------- .../crds/pendingnode-crd.yaml | 44 +- .../crds/scalinggroup-crd.yaml | 98 ++- .../templates/manager-rbac.yaml | 114 +-- .../templates/manager-rbac.yaml | 114 +-- .../templates/manager-rbac.yaml | 114 +-- .../templates/manager-rbac.yaml | 114 +-- .../templates/manager-rbac.yaml | 114 +-- .../templates/manager-rbac.yaml | 114 +-- .../constellation-node-operator/Makefile | 6 +- .../api/v1alpha1/zz_generated.deepcopy.go | 1 - ...dgeless.systems_autoscalingstrategies.yaml | 20 +- .../update.edgeless.systems_joiningnodes.yaml | 20 +- .../update.edgeless.systems_nodeversions.yaml | 678 +++++++---------- .../update.edgeless.systems_pendingnodes.yaml | 29 +- ...update.edgeless.systems_scalinggroups.yaml | 70 +- .../config/rbac/role.yaml | 116 +-- 19 files changed, 780 insertions(+), 1730 deletions(-) diff --git a/internal/constellation/helm/charts/edgeless/operators/charts/constellation-operator/crds/autoscalingstrategy-crd.yaml b/internal/constellation/helm/charts/edgeless/operators/charts/constellation-operator/crds/autoscalingstrategy-crd.yaml index 18dce5e37..9156e3e71 100644 --- a/internal/constellation/helm/charts/edgeless/operators/charts/constellation-operator/crds/autoscalingstrategy-crd.yaml +++ b/internal/constellation/helm/charts/edgeless/operators/charts/constellation-operator/crds/autoscalingstrategy-crd.yaml @@ -1,9 +1,10 @@ +--- apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: - name: autoscalingstrategies.update.edgeless.systems annotations: - controller-gen.kubebuilder.io/version: v0.9.0 + controller-gen.kubebuilder.io/version: v0.16.4 + name: autoscalingstrategies.update.edgeless.systems spec: group: update.edgeless.systems names: @@ -20,14 +21,19 @@ spec: API. properties: apiVersion: - description: 'APIVersion defines the versioned schema of this representation - of an object. Servers should convert recognized schemas to the latest - internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + description: |- + APIVersion defines the versioned schema of this representation of an object. + Servers should convert recognized schemas to the latest internal value, and + may reject unrecognized values. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources type: string kind: - description: 'Kind is a string value representing the REST resource this - object represents. Servers may infer this from the endpoint the client - submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + description: |- + Kind is a string value representing the REST resource this object represents. + Servers may infer this from the endpoint the client submits requests to. + Cannot be updated. + In CamelCase. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds type: string metadata: type: object @@ -48,8 +54,8 @@ spec: deployment. type: string enabled: - description: Enabled defines whether cluster autoscaling should be enabled - or not. + description: Enabled defines whether cluster autoscaling should be + enabled or not. type: boolean required: - deploymentName @@ -64,7 +70,8 @@ spec: enabled or not. type: boolean replicas: - description: Replicas is the number of replicas for the autoscaler deployment. + description: Replicas is the number of replicas for the autoscaler + deployment. format: int32 type: integer type: object @@ -73,9 +80,3 @@ spec: storage: true subresources: status: {} -status: - acceptedNames: - kind: "" - plural: "" - conditions: [] - storedVersions: [] diff --git a/internal/constellation/helm/charts/edgeless/operators/charts/constellation-operator/crds/joiningnode-crd.yaml b/internal/constellation/helm/charts/edgeless/operators/charts/constellation-operator/crds/joiningnode-crd.yaml index 88fb65ae8..1beca7221 100644 --- a/internal/constellation/helm/charts/edgeless/operators/charts/constellation-operator/crds/joiningnode-crd.yaml +++ b/internal/constellation/helm/charts/edgeless/operators/charts/constellation-operator/crds/joiningnode-crd.yaml @@ -1,9 +1,10 @@ +--- apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: - name: joiningnodes.update.edgeless.systems annotations: - controller-gen.kubebuilder.io/version: v0.9.0 + controller-gen.kubebuilder.io/version: v0.16.4 + name: joiningnodes.update.edgeless.systems spec: group: update.edgeless.systems names: @@ -19,14 +20,19 @@ spec: description: JoiningNode is the Schema for the joiningnodes API. properties: apiVersion: - description: 'APIVersion defines the versioned schema of this representation - of an object. Servers should convert recognized schemas to the latest - internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + description: |- + APIVersion defines the versioned schema of this representation of an object. + Servers should convert recognized schemas to the latest internal value, and + may reject unrecognized values. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources type: string kind: - description: 'Kind is a string value representing the REST resource this - object represents. Servers may infer this from the endpoint the client - submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + description: |- + Kind is a string value representing the REST resource this object represents. + Servers may infer this from the endpoint the client submits requests to. + Cannot be updated. + In CamelCase. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds type: string metadata: type: object @@ -59,9 +65,3 @@ spec: storage: true subresources: status: {} -status: - acceptedNames: - kind: "" - plural: "" - conditions: [] - storedVersions: [] \ No newline at end of file diff --git a/internal/constellation/helm/charts/edgeless/operators/charts/constellation-operator/crds/nodeversion-crd.yaml b/internal/constellation/helm/charts/edgeless/operators/charts/constellation-operator/crds/nodeversion-crd.yaml index 9c46b695c..4b7f7b7e0 100644 --- a/internal/constellation/helm/charts/edgeless/operators/charts/constellation-operator/crds/nodeversion-crd.yaml +++ b/internal/constellation/helm/charts/edgeless/operators/charts/constellation-operator/crds/nodeversion-crd.yaml @@ -1,9 +1,10 @@ +--- apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: - name: nodeversions.update.edgeless.systems annotations: - controller-gen.kubebuilder.io/version: v0.9.0 + controller-gen.kubebuilder.io/version: v0.16.4 + name: nodeversions.update.edgeless.systems spec: group: update.edgeless.systems names: @@ -19,14 +20,19 @@ spec: description: NodeVersion is the Schema for the nodeversions API. properties: apiVersion: - description: 'APIVersion defines the versioned schema of this representation - of an object. Servers should convert recognized schemas to the latest - internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + description: |- + APIVersion defines the versioned schema of this representation of an object. + Servers should convert recognized schemas to the latest internal value, and + may reject unrecognized values. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources type: string kind: - description: 'Kind is a string value representing the REST resource this - object represents. Servers may infer this from the endpoint the client - submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + description: |- + Kind is a string value representing the REST resource this object represents. + Servers may infer this from the endpoint the client submits requests to. + Cannot be updated. + In CamelCase. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds type: string metadata: type: object @@ -60,65 +66,49 @@ spec: description: AwaitingAnnotation is a list of nodes that are waiting for the operator to annotate them. items: - description: "ObjectReference contains enough information to let - you inspect or modify the referred object. --- New uses of this - type are discouraged because of difficulty describing its usage - when embedded in APIs. 1. Ignored fields. It includes many fields - which are not generally honored. For instance, ResourceVersion - and FieldPath are both very rarely valid in actual usage. 2. Invalid - usage help. It is impossible to add specific help for individual - usage. In most embedded usages, there are particular restrictions - like, \"must refer only to types A and B\" or \"UID not honored\" - or \"name must be restricted\". Those cannot be well described - when embedded. 3. Inconsistent validation. Because the usages - are different, the validation rules are different by usage, which - makes it hard for users to predict what will happen. 4. The fields - are both imprecise and overly precise. Kind is not a precise - mapping to a URL. This can produce ambiguity during interpretation - and require a REST mapping. In most cases, the dependency is - on the group,resource tuple and the version of the actual struct - is irrelevant. 5. We cannot easily change it. Because this type - is embedded in many locations, updates to this type will affect - numerous schemas. Don't make new APIs embed an underspecified - API type they do not control. \n Instead of using this type, create - a locally provided and used type that is well-focused on your - reference. For example, ServiceReferences for admission registration: - https://github.com/kubernetes/api/blob/release-1.17/admissionregistration/v1/types.go#L533 - ." + description: ObjectReference contains enough information to let + you inspect or modify the referred object. properties: apiVersion: description: API version of the referent. type: string fieldPath: - description: 'If referring to a piece of an object instead of - an entire object, this string should contain a valid JSON/Go - field access statement, such as desiredState.manifest.containers[2]. - For example, if the object reference is to a container within - a pod, this would take on a value like: "spec.containers{name}" - (where "name" refers to the name of the container that triggered - the event) or if no container name is specified "spec.containers[2]" - (container with index 2 in this pod). This syntax is chosen - only to have some well-defined way of referencing a part of - an object. TODO: this design is not final and this field is - subject to change in the future.' + description: |- + If referring to a piece of an object instead of an entire object, this string + should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2]. + For example, if the object reference is to a container within a pod, this would take on a value like: + "spec.containers{name}" (where "name" refers to the name of the container that triggered + the event) or if no container name is specified "spec.containers[2]" (container with + index 2 in this pod). This syntax is chosen only to have some well-defined way of + referencing a part of an object. type: string kind: - description: 'Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + description: |- + Kind of the referent. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds type: string name: - description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + description: |- + Name of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names type: string namespace: - description: 'Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/' + description: |- + Namespace of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/ type: string resourceVersion: - description: 'Specific resourceVersion to which this reference - is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency' + description: |- + Specific resourceVersion to which this reference is made, if any. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency type: string uid: - description: 'UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids' + description: |- + UID of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids type: string type: object + x-kubernetes-map-type: atomic type: array budget: description: Budget is the amount of extra nodes that can be created @@ -129,43 +119,35 @@ spec: description: Conditions represent the latest available observations of an object's state items: - description: "Condition contains details for one aspect of the current - state of this API Resource. --- This struct is intended for direct - use as an array at the field path .status.conditions. For example, - \n type FooStatus struct{ // Represents the observations of a - foo's current state. // Known .status.conditions.type are: \"Available\", - \"Progressing\", and \"Degraded\" // +patchMergeKey=type // +patchStrategy=merge - // +listType=map // +listMapKey=type Conditions []metav1.Condition - `json:\"conditions,omitempty\" patchStrategy:\"merge\" patchMergeKey:\"type\" - protobuf:\"bytes,1,rep,name=conditions\"` \n // other fields }" + description: Condition contains details for one aspect of the current + state of this API Resource. properties: lastTransitionTime: - description: lastTransitionTime is the last time the condition - transitioned from one status to another. This should be when - the underlying condition changed. If that is not known, then - using the time when the API field changed is acceptable. + description: |- + lastTransitionTime is the last time the condition transitioned from one status to another. + This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable. format: date-time type: string message: - description: message is a human readable message indicating - details about the transition. This may be an empty string. + description: |- + message is a human readable message indicating details about the transition. + This may be an empty string. maxLength: 32768 type: string observedGeneration: - description: observedGeneration represents the .metadata.generation - that the condition was set based upon. For instance, if .metadata.generation - is currently 12, but the .status.conditions[x].observedGeneration - is 9, the condition is out of date with respect to the current - state of the instance. + description: |- + observedGeneration represents the .metadata.generation that the condition was set based upon. + For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date + with respect to the current state of the instance. format: int64 minimum: 0 type: integer reason: - description: reason contains a programmatic identifier indicating - the reason for the condition's last transition. Producers - of specific condition types may define expected values and - meanings for this field, and whether the values are considered - a guaranteed API. The value should be a CamelCase string. + description: |- + reason contains a programmatic identifier indicating the reason for the condition's last transition. + Producers of specific condition types may define expected values and meanings for this field, + and whether the values are considered a guaranteed API. + The value should be a CamelCase string. This field may not be empty. maxLength: 1024 minLength: 1 @@ -180,10 +162,6 @@ spec: type: string type: description: type of condition in CamelCase or in foo.example.com/CamelCase. - --- Many .condition.type values are consistent across resources - like Available, but because arbitrary conditions can be useful - (see .node.status.conditions), the ability to deconflict is - important. The regex it matches is (dns1123SubdomainFmt/)?(qualifiedNameFmt) maxLength: 316 pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ type: string @@ -199,516 +177,389 @@ spec: description: Donors is a list of outdated nodes that donate labels to heirs. items: - description: "ObjectReference contains enough information to let - you inspect or modify the referred object. --- New uses of this - type are discouraged because of difficulty describing its usage - when embedded in APIs. 1. Ignored fields. It includes many fields - which are not generally honored. For instance, ResourceVersion - and FieldPath are both very rarely valid in actual usage. 2. Invalid - usage help. It is impossible to add specific help for individual - usage. In most embedded usages, there are particular restrictions - like, \"must refer only to types A and B\" or \"UID not honored\" - or \"name must be restricted\". Those cannot be well described - when embedded. 3. Inconsistent validation. Because the usages - are different, the validation rules are different by usage, which - makes it hard for users to predict what will happen. 4. The fields - are both imprecise and overly precise. Kind is not a precise - mapping to a URL. This can produce ambiguity during interpretation - and require a REST mapping. In most cases, the dependency is - on the group,resource tuple and the version of the actual struct - is irrelevant. 5. We cannot easily change it. Because this type - is embedded in many locations, updates to this type will affect - numerous schemas. Don't make new APIs embed an underspecified - API type they do not control. \n Instead of using this type, create - a locally provided and used type that is well-focused on your - reference. For example, ServiceReferences for admission registration: - https://github.com/kubernetes/api/blob/release-1.17/admissionregistration/v1/types.go#L533 - ." + description: ObjectReference contains enough information to let + you inspect or modify the referred object. properties: apiVersion: description: API version of the referent. type: string fieldPath: - description: 'If referring to a piece of an object instead of - an entire object, this string should contain a valid JSON/Go - field access statement, such as desiredState.manifest.containers[2]. - For example, if the object reference is to a container within - a pod, this would take on a value like: "spec.containers{name}" - (where "name" refers to the name of the container that triggered - the event) or if no container name is specified "spec.containers[2]" - (container with index 2 in this pod). This syntax is chosen - only to have some well-defined way of referencing a part of - an object. TODO: this design is not final and this field is - subject to change in the future.' + description: |- + If referring to a piece of an object instead of an entire object, this string + should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2]. + For example, if the object reference is to a container within a pod, this would take on a value like: + "spec.containers{name}" (where "name" refers to the name of the container that triggered + the event) or if no container name is specified "spec.containers[2]" (container with + index 2 in this pod). This syntax is chosen only to have some well-defined way of + referencing a part of an object. type: string kind: - description: 'Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + description: |- + Kind of the referent. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds type: string name: - description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + description: |- + Name of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names type: string namespace: - description: 'Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/' + description: |- + Namespace of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/ type: string resourceVersion: - description: 'Specific resourceVersion to which this reference - is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency' + description: |- + Specific resourceVersion to which this reference is made, if any. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency type: string uid: - description: 'UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids' + description: |- + UID of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids type: string type: object + x-kubernetes-map-type: atomic type: array heirs: description: Heirs is a list of nodes using the latest image that still need to inherit labels from donors. items: - description: "ObjectReference contains enough information to let - you inspect or modify the referred object. --- New uses of this - type are discouraged because of difficulty describing its usage - when embedded in APIs. 1. Ignored fields. It includes many fields - which are not generally honored. For instance, ResourceVersion - and FieldPath are both very rarely valid in actual usage. 2. Invalid - usage help. It is impossible to add specific help for individual - usage. In most embedded usages, there are particular restrictions - like, \"must refer only to types A and B\" or \"UID not honored\" - or \"name must be restricted\". Those cannot be well described - when embedded. 3. Inconsistent validation. Because the usages - are different, the validation rules are different by usage, which - makes it hard for users to predict what will happen. 4. The fields - are both imprecise and overly precise. Kind is not a precise - mapping to a URL. This can produce ambiguity during interpretation - and require a REST mapping. In most cases, the dependency is - on the group,resource tuple and the version of the actual struct - is irrelevant. 5. We cannot easily change it. Because this type - is embedded in many locations, updates to this type will affect - numerous schemas. Don't make new APIs embed an underspecified - API type they do not control. \n Instead of using this type, create - a locally provided and used type that is well-focused on your - reference. For example, ServiceReferences for admission registration: - https://github.com/kubernetes/api/blob/release-1.17/admissionregistration/v1/types.go#L533 - ." + description: ObjectReference contains enough information to let + you inspect or modify the referred object. properties: apiVersion: description: API version of the referent. type: string fieldPath: - description: 'If referring to a piece of an object instead of - an entire object, this string should contain a valid JSON/Go - field access statement, such as desiredState.manifest.containers[2]. - For example, if the object reference is to a container within - a pod, this would take on a value like: "spec.containers{name}" - (where "name" refers to the name of the container that triggered - the event) or if no container name is specified "spec.containers[2]" - (container with index 2 in this pod). This syntax is chosen - only to have some well-defined way of referencing a part of - an object. TODO: this design is not final and this field is - subject to change in the future.' + description: |- + If referring to a piece of an object instead of an entire object, this string + should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2]. + For example, if the object reference is to a container within a pod, this would take on a value like: + "spec.containers{name}" (where "name" refers to the name of the container that triggered + the event) or if no container name is specified "spec.containers[2]" (container with + index 2 in this pod). This syntax is chosen only to have some well-defined way of + referencing a part of an object. type: string kind: - description: 'Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + description: |- + Kind of the referent. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds type: string name: - description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + description: |- + Name of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names type: string namespace: - description: 'Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/' + description: |- + Namespace of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/ type: string resourceVersion: - description: 'Specific resourceVersion to which this reference - is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency' + description: |- + Specific resourceVersion to which this reference is made, if any. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency type: string uid: - description: 'UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids' + description: |- + UID of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids type: string type: object + x-kubernetes-map-type: atomic type: array invalid: description: Invalid is a list of invalid nodes (nodes that cannot be processed by the operator due to missing information or transient faults). items: - description: "ObjectReference contains enough information to let - you inspect or modify the referred object. --- New uses of this - type are discouraged because of difficulty describing its usage - when embedded in APIs. 1. Ignored fields. It includes many fields - which are not generally honored. For instance, ResourceVersion - and FieldPath are both very rarely valid in actual usage. 2. Invalid - usage help. It is impossible to add specific help for individual - usage. In most embedded usages, there are particular restrictions - like, \"must refer only to types A and B\" or \"UID not honored\" - or \"name must be restricted\". Those cannot be well described - when embedded. 3. Inconsistent validation. Because the usages - are different, the validation rules are different by usage, which - makes it hard for users to predict what will happen. 4. The fields - are both imprecise and overly precise. Kind is not a precise - mapping to a URL. This can produce ambiguity during interpretation - and require a REST mapping. In most cases, the dependency is - on the group,resource tuple and the version of the actual struct - is irrelevant. 5. We cannot easily change it. Because this type - is embedded in many locations, updates to this type will affect - numerous schemas. Don't make new APIs embed an underspecified - API type they do not control. \n Instead of using this type, create - a locally provided and used type that is well-focused on your - reference. For example, ServiceReferences for admission registration: - https://github.com/kubernetes/api/blob/release-1.17/admissionregistration/v1/types.go#L533 - ." + description: ObjectReference contains enough information to let + you inspect or modify the referred object. properties: apiVersion: description: API version of the referent. type: string fieldPath: - description: 'If referring to a piece of an object instead of - an entire object, this string should contain a valid JSON/Go - field access statement, such as desiredState.manifest.containers[2]. - For example, if the object reference is to a container within - a pod, this would take on a value like: "spec.containers{name}" - (where "name" refers to the name of the container that triggered - the event) or if no container name is specified "spec.containers[2]" - (container with index 2 in this pod). This syntax is chosen - only to have some well-defined way of referencing a part of - an object. TODO: this design is not final and this field is - subject to change in the future.' + description: |- + If referring to a piece of an object instead of an entire object, this string + should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2]. + For example, if the object reference is to a container within a pod, this would take on a value like: + "spec.containers{name}" (where "name" refers to the name of the container that triggered + the event) or if no container name is specified "spec.containers[2]" (container with + index 2 in this pod). This syntax is chosen only to have some well-defined way of + referencing a part of an object. type: string kind: - description: 'Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + description: |- + Kind of the referent. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds type: string name: - description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + description: |- + Name of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names type: string namespace: - description: 'Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/' + description: |- + Namespace of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/ type: string resourceVersion: - description: 'Specific resourceVersion to which this reference - is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency' + description: |- + Specific resourceVersion to which this reference is made, if any. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency type: string uid: - description: 'UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids' + description: |- + UID of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids type: string type: object + x-kubernetes-map-type: atomic type: array mints: description: Mints is a list of up to date nodes that will become heirs. items: - description: "ObjectReference contains enough information to let - you inspect or modify the referred object. --- New uses of this - type are discouraged because of difficulty describing its usage - when embedded in APIs. 1. Ignored fields. It includes many fields - which are not generally honored. For instance, ResourceVersion - and FieldPath are both very rarely valid in actual usage. 2. Invalid - usage help. It is impossible to add specific help for individual - usage. In most embedded usages, there are particular restrictions - like, \"must refer only to types A and B\" or \"UID not honored\" - or \"name must be restricted\". Those cannot be well described - when embedded. 3. Inconsistent validation. Because the usages - are different, the validation rules are different by usage, which - makes it hard for users to predict what will happen. 4. The fields - are both imprecise and overly precise. Kind is not a precise - mapping to a URL. This can produce ambiguity during interpretation - and require a REST mapping. In most cases, the dependency is - on the group,resource tuple and the version of the actual struct - is irrelevant. 5. We cannot easily change it. Because this type - is embedded in many locations, updates to this type will affect - numerous schemas. Don't make new APIs embed an underspecified - API type they do not control. \n Instead of using this type, create - a locally provided and used type that is well-focused on your - reference. For example, ServiceReferences for admission registration: - https://github.com/kubernetes/api/blob/release-1.17/admissionregistration/v1/types.go#L533 - ." + description: ObjectReference contains enough information to let + you inspect or modify the referred object. properties: apiVersion: description: API version of the referent. type: string fieldPath: - description: 'If referring to a piece of an object instead of - an entire object, this string should contain a valid JSON/Go - field access statement, such as desiredState.manifest.containers[2]. - For example, if the object reference is to a container within - a pod, this would take on a value like: "spec.containers{name}" - (where "name" refers to the name of the container that triggered - the event) or if no container name is specified "spec.containers[2]" - (container with index 2 in this pod). This syntax is chosen - only to have some well-defined way of referencing a part of - an object. TODO: this design is not final and this field is - subject to change in the future.' + description: |- + If referring to a piece of an object instead of an entire object, this string + should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2]. + For example, if the object reference is to a container within a pod, this would take on a value like: + "spec.containers{name}" (where "name" refers to the name of the container that triggered + the event) or if no container name is specified "spec.containers[2]" (container with + index 2 in this pod). This syntax is chosen only to have some well-defined way of + referencing a part of an object. type: string kind: - description: 'Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + description: |- + Kind of the referent. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds type: string name: - description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + description: |- + Name of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names type: string namespace: - description: 'Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/' + description: |- + Namespace of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/ type: string resourceVersion: - description: 'Specific resourceVersion to which this reference - is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency' + description: |- + Specific resourceVersion to which this reference is made, if any. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency type: string uid: - description: 'UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids' + description: |- + UID of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids type: string type: object + x-kubernetes-map-type: atomic type: array obsolete: description: Obsolete is a list of obsolete nodes (nodes that have been created by the operator but are no longer needed). items: - description: "ObjectReference contains enough information to let - you inspect or modify the referred object. --- New uses of this - type are discouraged because of difficulty describing its usage - when embedded in APIs. 1. Ignored fields. It includes many fields - which are not generally honored. For instance, ResourceVersion - and FieldPath are both very rarely valid in actual usage. 2. Invalid - usage help. It is impossible to add specific help for individual - usage. In most embedded usages, there are particular restrictions - like, \"must refer only to types A and B\" or \"UID not honored\" - or \"name must be restricted\". Those cannot be well described - when embedded. 3. Inconsistent validation. Because the usages - are different, the validation rules are different by usage, which - makes it hard for users to predict what will happen. 4. The fields - are both imprecise and overly precise. Kind is not a precise - mapping to a URL. This can produce ambiguity during interpretation - and require a REST mapping. In most cases, the dependency is - on the group,resource tuple and the version of the actual struct - is irrelevant. 5. We cannot easily change it. Because this type - is embedded in many locations, updates to this type will affect - numerous schemas. Don't make new APIs embed an underspecified - API type they do not control. \n Instead of using this type, create - a locally provided and used type that is well-focused on your - reference. For example, ServiceReferences for admission registration: - https://github.com/kubernetes/api/blob/release-1.17/admissionregistration/v1/types.go#L533 - ." + description: ObjectReference contains enough information to let + you inspect or modify the referred object. properties: apiVersion: description: API version of the referent. type: string fieldPath: - description: 'If referring to a piece of an object instead of - an entire object, this string should contain a valid JSON/Go - field access statement, such as desiredState.manifest.containers[2]. - For example, if the object reference is to a container within - a pod, this would take on a value like: "spec.containers{name}" - (where "name" refers to the name of the container that triggered - the event) or if no container name is specified "spec.containers[2]" - (container with index 2 in this pod). This syntax is chosen - only to have some well-defined way of referencing a part of - an object. TODO: this design is not final and this field is - subject to change in the future.' + description: |- + If referring to a piece of an object instead of an entire object, this string + should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2]. + For example, if the object reference is to a container within a pod, this would take on a value like: + "spec.containers{name}" (where "name" refers to the name of the container that triggered + the event) or if no container name is specified "spec.containers[2]" (container with + index 2 in this pod). This syntax is chosen only to have some well-defined way of + referencing a part of an object. type: string kind: - description: 'Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + description: |- + Kind of the referent. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds type: string name: - description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + description: |- + Name of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names type: string namespace: - description: 'Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/' + description: |- + Namespace of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/ type: string resourceVersion: - description: 'Specific resourceVersion to which this reference - is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency' + description: |- + Specific resourceVersion to which this reference is made, if any. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency type: string uid: - description: 'UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids' + description: |- + UID of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids type: string type: object + x-kubernetes-map-type: atomic type: array outdated: description: Outdated is a list of nodes that are using an outdated image. items: - description: "ObjectReference contains enough information to let - you inspect or modify the referred object. --- New uses of this - type are discouraged because of difficulty describing its usage - when embedded in APIs. 1. Ignored fields. It includes many fields - which are not generally honored. For instance, ResourceVersion - and FieldPath are both very rarely valid in actual usage. 2. Invalid - usage help. It is impossible to add specific help for individual - usage. In most embedded usages, there are particular restrictions - like, \"must refer only to types A and B\" or \"UID not honored\" - or \"name must be restricted\". Those cannot be well described - when embedded. 3. Inconsistent validation. Because the usages - are different, the validation rules are different by usage, which - makes it hard for users to predict what will happen. 4. The fields - are both imprecise and overly precise. Kind is not a precise - mapping to a URL. This can produce ambiguity during interpretation - and require a REST mapping. In most cases, the dependency is - on the group,resource tuple and the version of the actual struct - is irrelevant. 5. We cannot easily change it. Because this type - is embedded in many locations, updates to this type will affect - numerous schemas. Don't make new APIs embed an underspecified - API type they do not control. \n Instead of using this type, create - a locally provided and used type that is well-focused on your - reference. For example, ServiceReferences for admission registration: - https://github.com/kubernetes/api/blob/release-1.17/admissionregistration/v1/types.go#L533 - ." + description: ObjectReference contains enough information to let + you inspect or modify the referred object. properties: apiVersion: description: API version of the referent. type: string fieldPath: - description: 'If referring to a piece of an object instead of - an entire object, this string should contain a valid JSON/Go - field access statement, such as desiredState.manifest.containers[2]. - For example, if the object reference is to a container within - a pod, this would take on a value like: "spec.containers{name}" - (where "name" refers to the name of the container that triggered - the event) or if no container name is specified "spec.containers[2]" - (container with index 2 in this pod). This syntax is chosen - only to have some well-defined way of referencing a part of - an object. TODO: this design is not final and this field is - subject to change in the future.' + description: |- + If referring to a piece of an object instead of an entire object, this string + should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2]. + For example, if the object reference is to a container within a pod, this would take on a value like: + "spec.containers{name}" (where "name" refers to the name of the container that triggered + the event) or if no container name is specified "spec.containers[2]" (container with + index 2 in this pod). This syntax is chosen only to have some well-defined way of + referencing a part of an object. type: string kind: - description: 'Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + description: |- + Kind of the referent. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds type: string name: - description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + description: |- + Name of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names type: string namespace: - description: 'Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/' + description: |- + Namespace of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/ type: string resourceVersion: - description: 'Specific resourceVersion to which this reference - is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency' + description: |- + Specific resourceVersion to which this reference is made, if any. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency type: string uid: - description: 'UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids' + description: |- + UID of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids type: string type: object + x-kubernetes-map-type: atomic type: array pending: description: Pending is a list of pending nodes (joining or leaving the cluster). items: - description: "ObjectReference contains enough information to let - you inspect or modify the referred object. --- New uses of this - type are discouraged because of difficulty describing its usage - when embedded in APIs. 1. Ignored fields. It includes many fields - which are not generally honored. For instance, ResourceVersion - and FieldPath are both very rarely valid in actual usage. 2. Invalid - usage help. It is impossible to add specific help for individual - usage. In most embedded usages, there are particular restrictions - like, \"must refer only to types A and B\" or \"UID not honored\" - or \"name must be restricted\". Those cannot be well described - when embedded. 3. Inconsistent validation. Because the usages - are different, the validation rules are different by usage, which - makes it hard for users to predict what will happen. 4. The fields - are both imprecise and overly precise. Kind is not a precise - mapping to a URL. This can produce ambiguity during interpretation - and require a REST mapping. In most cases, the dependency is - on the group,resource tuple and the version of the actual struct - is irrelevant. 5. We cannot easily change it. Because this type - is embedded in many locations, updates to this type will affect - numerous schemas. Don't make new APIs embed an underspecified - API type they do not control. \n Instead of using this type, create - a locally provided and used type that is well-focused on your - reference. For example, ServiceReferences for admission registration: - https://github.com/kubernetes/api/blob/release-1.17/admissionregistration/v1/types.go#L533 - ." + description: ObjectReference contains enough information to let + you inspect or modify the referred object. properties: apiVersion: description: API version of the referent. type: string fieldPath: - description: 'If referring to a piece of an object instead of - an entire object, this string should contain a valid JSON/Go - field access statement, such as desiredState.manifest.containers[2]. - For example, if the object reference is to a container within - a pod, this would take on a value like: "spec.containers{name}" - (where "name" refers to the name of the container that triggered - the event) or if no container name is specified "spec.containers[2]" - (container with index 2 in this pod). This syntax is chosen - only to have some well-defined way of referencing a part of - an object. TODO: this design is not final and this field is - subject to change in the future.' + description: |- + If referring to a piece of an object instead of an entire object, this string + should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2]. + For example, if the object reference is to a container within a pod, this would take on a value like: + "spec.containers{name}" (where "name" refers to the name of the container that triggered + the event) or if no container name is specified "spec.containers[2]" (container with + index 2 in this pod). This syntax is chosen only to have some well-defined way of + referencing a part of an object. type: string kind: - description: 'Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + description: |- + Kind of the referent. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds type: string name: - description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + description: |- + Name of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names type: string namespace: - description: 'Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/' + description: |- + Namespace of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/ type: string resourceVersion: - description: 'Specific resourceVersion to which this reference - is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency' + description: |- + Specific resourceVersion to which this reference is made, if any. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency type: string uid: - description: 'UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids' + description: |- + UID of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids type: string type: object + x-kubernetes-map-type: atomic type: array upToDate: description: UpToDate is a list of nodes that are using the latest image and labels. items: - description: "ObjectReference contains enough information to let - you inspect or modify the referred object. --- New uses of this - type are discouraged because of difficulty describing its usage - when embedded in APIs. 1. Ignored fields. It includes many fields - which are not generally honored. For instance, ResourceVersion - and FieldPath are both very rarely valid in actual usage. 2. Invalid - usage help. It is impossible to add specific help for individual - usage. In most embedded usages, there are particular restrictions - like, \"must refer only to types A and B\" or \"UID not honored\" - or \"name must be restricted\". Those cannot be well described - when embedded. 3. Inconsistent validation. Because the usages - are different, the validation rules are different by usage, which - makes it hard for users to predict what will happen. 4. The fields - are both imprecise and overly precise. Kind is not a precise - mapping to a URL. This can produce ambiguity during interpretation - and require a REST mapping. In most cases, the dependency is - on the group,resource tuple and the version of the actual struct - is irrelevant. 5. We cannot easily change it. Because this type - is embedded in many locations, updates to this type will affect - numerous schemas. Don't make new APIs embed an underspecified - API type they do not control. \n Instead of using this type, create - a locally provided and used type that is well-focused on your - reference. For example, ServiceReferences for admission registration: - https://github.com/kubernetes/api/blob/release-1.17/admissionregistration/v1/types.go#L533 - ." + description: ObjectReference contains enough information to let + you inspect or modify the referred object. properties: apiVersion: description: API version of the referent. type: string fieldPath: - description: 'If referring to a piece of an object instead of - an entire object, this string should contain a valid JSON/Go - field access statement, such as desiredState.manifest.containers[2]. - For example, if the object reference is to a container within - a pod, this would take on a value like: "spec.containers{name}" - (where "name" refers to the name of the container that triggered - the event) or if no container name is specified "spec.containers[2]" - (container with index 2 in this pod). This syntax is chosen - only to have some well-defined way of referencing a part of - an object. TODO: this design is not final and this field is - subject to change in the future.' + description: |- + If referring to a piece of an object instead of an entire object, this string + should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2]. + For example, if the object reference is to a container within a pod, this would take on a value like: + "spec.containers{name}" (where "name" refers to the name of the container that triggered + the event) or if no container name is specified "spec.containers[2]" (container with + index 2 in this pod). This syntax is chosen only to have some well-defined way of + referencing a part of an object. type: string kind: - description: 'Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + description: |- + Kind of the referent. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds type: string name: - description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + description: |- + Name of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names type: string namespace: - description: 'Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/' + description: |- + Namespace of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/ type: string resourceVersion: - description: 'Specific resourceVersion to which this reference - is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency' + description: |- + Specific resourceVersion to which this reference is made, if any. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency type: string uid: - description: 'UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids' + description: |- + UID of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids type: string type: object + x-kubernetes-map-type: atomic type: array required: + - activeclusterversionupgrade - budget - conditions type: object diff --git a/internal/constellation/helm/charts/edgeless/operators/charts/constellation-operator/crds/pendingnode-crd.yaml b/internal/constellation/helm/charts/edgeless/operators/charts/constellation-operator/crds/pendingnode-crd.yaml index 41b5a4cd7..c6cd2db6a 100644 --- a/internal/constellation/helm/charts/edgeless/operators/charts/constellation-operator/crds/pendingnode-crd.yaml +++ b/internal/constellation/helm/charts/edgeless/operators/charts/constellation-operator/crds/pendingnode-crd.yaml @@ -1,9 +1,10 @@ +--- apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: - name: pendingnodes.update.edgeless.systems annotations: - controller-gen.kubebuilder.io/version: v0.9.0 + controller-gen.kubebuilder.io/version: v0.16.4 + name: pendingnodes.update.edgeless.systems spec: group: update.edgeless.systems names: @@ -19,14 +20,19 @@ spec: description: PendingNode is the Schema for the pendingnodes API. properties: apiVersion: - description: 'APIVersion defines the versioned schema of this representation - of an object. Servers should convert recognized schemas to the latest - internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + description: |- + APIVersion defines the versioned schema of this representation of an object. + Servers should convert recognized schemas to the latest internal value, and + may reject unrecognized values. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources type: string kind: - description: 'Kind is a string value representing the REST resource this - object represents. Servers may infer this from the endpoint the client - submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + description: |- + Kind is a string value representing the REST resource this object represents. + Servers may infer this from the endpoint the client submits requests to. + Cannot be updated. + In CamelCase. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds type: string metadata: type: object @@ -34,10 +40,11 @@ spec: description: PendingNodeSpec defines the desired state of PendingNode. properties: deadline: - description: Deadline is the deadline for reaching the goal state. Joining - nodes will be terminated if the deadline is exceeded. Leaving nodes - will remain as unschedulable to prevent data loss. If not specified, - the node may remain in the pending state indefinitely. + description: |- + Deadline is the deadline for reaching the goal state. + Joining nodes will be terminated if the deadline is exceeded. + Leaving nodes will remain as unschedulable to prevent data loss. + If not specified, the node may remain in the pending state indefinitely. format: date-time type: string goal: @@ -47,8 +54,8 @@ spec: - Leave type: string groupID: - description: ScalingGroupID is the ID of the group that this node shall - be part of. + description: ScalingGroupID is the ID of the group that this node + shall be part of. type: string nodeName: description: NodeName is the kubernetes internal name of the node. @@ -72,7 +79,8 @@ spec: - Failed type: string reachedGoal: - description: ReachedGoal is true if the node has reached the goal state. + description: ReachedGoal is true if the node has reached the goal + state. type: boolean type: object type: object @@ -80,9 +88,3 @@ spec: storage: true subresources: status: {} -status: - acceptedNames: - kind: "" - plural: "" - conditions: [] - storedVersions: [] diff --git a/internal/constellation/helm/charts/edgeless/operators/charts/constellation-operator/crds/scalinggroup-crd.yaml b/internal/constellation/helm/charts/edgeless/operators/charts/constellation-operator/crds/scalinggroup-crd.yaml index 0e334ae29..5eed4ebc8 100644 --- a/internal/constellation/helm/charts/edgeless/operators/charts/constellation-operator/crds/scalinggroup-crd.yaml +++ b/internal/constellation/helm/charts/edgeless/operators/charts/constellation-operator/crds/scalinggroup-crd.yaml @@ -1,9 +1,10 @@ +--- apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: - name: scalinggroups.update.edgeless.systems annotations: - controller-gen.kubebuilder.io/version: v0.9.0 + controller-gen.kubebuilder.io/version: v0.16.4 + name: scalinggroups.update.edgeless.systems spec: group: update.edgeless.systems names: @@ -19,14 +20,19 @@ spec: description: ScalingGroup is the Schema for the scalinggroups API. properties: apiVersion: - description: 'APIVersion defines the versioned schema of this representation - of an object. Servers should convert recognized schemas to the latest - internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + description: |- + APIVersion defines the versioned schema of this representation of an object. + Servers should convert recognized schemas to the latest internal value, and + may reject unrecognized values. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources type: string kind: - description: 'Kind is a string value representing the REST resource this - object represents. Servers may infer this from the endpoint the client - submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + description: |- + Kind is a string value representing the REST resource this object represents. + Servers may infer this from the endpoint the client submits requests to. + Cannot be updated. + In CamelCase. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds type: string metadata: type: object @@ -37,16 +43,16 @@ spec: description: AutoscalerGroupName is name that is expected by the autoscaler. type: string autoscaling: - description: Autoscaling specifies wether the scaling group should automatically - scale using the cluster-autoscaler. + description: Autoscaling specifies wether the scaling group should + automatically scale using the cluster-autoscaler. type: boolean groupId: - description: GroupID is the CSP specific, canonical identifier of a - scaling group. + description: GroupID is the CSP specific, canonical identifier of + a scaling group. type: string max: - description: Max is the maximum number of autoscaled nodes in the scaling - group (used by cluster-autoscaler). + description: Max is the maximum number of autoscaled nodes in the + scaling group (used by cluster-autoscaler). format: int32 type: integer min: @@ -55,11 +61,11 @@ spec: format: int32 type: integer nodeGroupName: - description: NodeGroupName is the human friendly name of the node group - as defined in the Constellation configuration. + description: NodeGroupName is the human friendly name of the node + group as defined in the Constellation configuration. type: string nodeImage: - description: NodeImage is the name of the NodeImage resource. + description: NodeVersion is the name of the NodeVersion resource. type: string role: description: Role is the role of the nodes in the scaling group. @@ -75,44 +81,36 @@ spec: description: Conditions represent the latest available observations of an object's state. items: - description: "Condition contains details for one aspect of the current - state of this API Resource. --- This struct is intended for direct - use as an array at the field path .status.conditions. For example, - \n type FooStatus struct{ // Represents the observations of a foo's - current state. // Known .status.conditions.type are: \"Available\", - \"Progressing\", and \"Degraded\" // +patchMergeKey=type // +patchStrategy=merge - // +listType=map // +listMapKey=type Conditions []metav1.Condition - `json:\"conditions,omitempty\" patchStrategy:\"merge\" patchMergeKey:\"type\" - protobuf:\"bytes,1,rep,name=conditions\"` \n // other fields }" + description: Condition contains details for one aspect of the current + state of this API Resource. properties: lastTransitionTime: - description: lastTransitionTime is the last time the condition - transitioned from one status to another. This should be when - the underlying condition changed. If that is not known, then - using the time when the API field changed is acceptable. + description: |- + lastTransitionTime is the last time the condition transitioned from one status to another. + This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable. format: date-time type: string message: - description: message is a human readable message indicating details - about the transition. This may be an empty string. + description: |- + message is a human readable message indicating details about the transition. + This may be an empty string. maxLength: 32768 type: string observedGeneration: - description: observedGeneration represents the .metadata.generation - that the condition was set based upon. For instance, if .metadata.generation - is currently 12, but the .status.conditions[x].observedGeneration - is 9, the condition is out of date with respect to the current - state of the instance. + description: |- + observedGeneration represents the .metadata.generation that the condition was set based upon. + For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date + with respect to the current state of the instance. format: int64 minimum: 0 type: integer reason: - description: reason contains a programmatic identifier indicating - the reason for the condition's last transition. Producers of - specific condition types may define expected values and meanings - for this field, and whether the values are considered a guaranteed - API. The value should be a CamelCase string. This field may - not be empty. + description: |- + reason contains a programmatic identifier indicating the reason for the condition's last transition. + Producers of specific condition types may define expected values and meanings for this field, + and whether the values are considered a guaranteed API. + The value should be a CamelCase string. + This field may not be empty. maxLength: 1024 minLength: 1 pattern: ^[A-Za-z]([A-Za-z0-9_,:]*[A-Za-z0-9_])?$ @@ -126,10 +124,6 @@ spec: type: string type: description: type of condition in CamelCase or in foo.example.com/CamelCase. - --- Many .condition.type values are consistent across resources - like Available, but because arbitrary conditions can be useful - (see .node.status.conditions), the ability to deconflict is - important. The regex it matches is (dns1123SubdomainFmt/)?(qualifiedNameFmt) maxLength: 316 pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ type: string @@ -142,8 +136,8 @@ spec: type: object type: array imageReference: - description: ImageReference is the image currently used for newly created - nodes in this scaling group. + description: ImageReference is the image currently used for newly + created nodes in this scaling group. type: string required: - conditions @@ -153,9 +147,3 @@ spec: storage: true subresources: status: {} -status: - acceptedNames: - kind: "" - plural: "" - conditions: [] - storedVersions: [] diff --git a/internal/constellation/helm/charts/edgeless/operators/charts/constellation-operator/templates/manager-rbac.yaml b/internal/constellation/helm/charts/edgeless/operators/charts/constellation-operator/templates/manager-rbac.yaml index 2aee2191c..0e271ff7f 100644 --- a/internal/constellation/helm/charts/edgeless/operators/charts/constellation-operator/templates/manager-rbac.yaml +++ b/internal/constellation/helm/charts/edgeless/operators/charts/constellation-operator/templates/manager-rbac.yaml @@ -59,6 +59,10 @@ rules: - update.edgeless.systems resources: - autoscalingstrategies + - joiningnodes + - nodeversions + - pendingnodes + - scalinggroups verbs: - create - delete @@ -71,38 +75,20 @@ rules: - update.edgeless.systems resources: - autoscalingstrategies/finalizers + - joiningnodes/finalizers + - nodeversions/finalizers + - pendingnodes/finalizers + - scalinggroups/finalizers verbs: - update - apiGroups: - update.edgeless.systems resources: - autoscalingstrategies/status - verbs: - - get - - patch - - update -- apiGroups: - - update.edgeless.systems - resources: - - joiningnodes - verbs: - - create - - delete - - get - - list - - patch - - update - - watch -- apiGroups: - - update.edgeless.systems - resources: - - joiningnodes/finalizers - verbs: - - update -- apiGroups: - - update.edgeless.systems - resources: - joiningnodes/status + - nodeversions/status + - pendingnodes/status + - scalinggroups/status verbs: - get - patch @@ -121,84 +107,6 @@ rules: - nodeversion/status verbs: - get -- apiGroups: - - update.edgeless.systems - resources: - - nodeversions - verbs: - - create - - delete - - get - - list - - patch - - update - - watch -- apiGroups: - - update.edgeless.systems - resources: - - nodeversions/finalizers - verbs: - - update -- apiGroups: - - update.edgeless.systems - resources: - - nodeversions/status - verbs: - - get - - patch - - update -- apiGroups: - - update.edgeless.systems - resources: - - pendingnodes - verbs: - - create - - delete - - get - - list - - patch - - update - - watch -- apiGroups: - - update.edgeless.systems - resources: - - pendingnodes/finalizers - verbs: - - update -- apiGroups: - - update.edgeless.systems - resources: - - pendingnodes/status - verbs: - - get - - patch - - update -- apiGroups: - - update.edgeless.systems - resources: - - scalinggroups - verbs: - - create - - delete - - get - - list - - patch - - update - - watch -- apiGroups: - - update.edgeless.systems - resources: - - scalinggroups/finalizers - verbs: - - update -- apiGroups: - - update.edgeless.systems - resources: - - scalinggroups/status - verbs: - - get - - patch - - update --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding diff --git a/internal/constellation/helm/testdata/AWS/constellation-operators/charts/constellation-operator/templates/manager-rbac.yaml b/internal/constellation/helm/testdata/AWS/constellation-operators/charts/constellation-operator/templates/manager-rbac.yaml index 465bee103..56bf77080 100644 --- a/internal/constellation/helm/testdata/AWS/constellation-operators/charts/constellation-operator/templates/manager-rbac.yaml +++ b/internal/constellation/helm/testdata/AWS/constellation-operators/charts/constellation-operator/templates/manager-rbac.yaml @@ -62,6 +62,10 @@ rules: - update.edgeless.systems resources: - autoscalingstrategies + - joiningnodes + - nodeversions + - pendingnodes + - scalinggroups verbs: - create - delete @@ -74,38 +78,20 @@ rules: - update.edgeless.systems resources: - autoscalingstrategies/finalizers + - joiningnodes/finalizers + - nodeversions/finalizers + - pendingnodes/finalizers + - scalinggroups/finalizers verbs: - update - apiGroups: - update.edgeless.systems resources: - autoscalingstrategies/status - verbs: - - get - - patch - - update -- apiGroups: - - update.edgeless.systems - resources: - - joiningnodes - verbs: - - create - - delete - - get - - list - - patch - - update - - watch -- apiGroups: - - update.edgeless.systems - resources: - - joiningnodes/finalizers - verbs: - - update -- apiGroups: - - update.edgeless.systems - resources: - joiningnodes/status + - nodeversions/status + - pendingnodes/status + - scalinggroups/status verbs: - get - patch @@ -124,84 +110,6 @@ rules: - nodeversion/status verbs: - get -- apiGroups: - - update.edgeless.systems - resources: - - nodeversions - verbs: - - create - - delete - - get - - list - - patch - - update - - watch -- apiGroups: - - update.edgeless.systems - resources: - - nodeversions/finalizers - verbs: - - update -- apiGroups: - - update.edgeless.systems - resources: - - nodeversions/status - verbs: - - get - - patch - - update -- apiGroups: - - update.edgeless.systems - resources: - - pendingnodes - verbs: - - create - - delete - - get - - list - - patch - - update - - watch -- apiGroups: - - update.edgeless.systems - resources: - - pendingnodes/finalizers - verbs: - - update -- apiGroups: - - update.edgeless.systems - resources: - - pendingnodes/status - verbs: - - get - - patch - - update -- apiGroups: - - update.edgeless.systems - resources: - - scalinggroups - verbs: - - create - - delete - - get - - list - - patch - - update - - watch -- apiGroups: - - update.edgeless.systems - resources: - - scalinggroups/finalizers - verbs: - - update -- apiGroups: - - update.edgeless.systems - resources: - - scalinggroups/status - verbs: - - get - - patch - - update --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding diff --git a/internal/constellation/helm/testdata/Azure/constellation-operators/charts/constellation-operator/templates/manager-rbac.yaml b/internal/constellation/helm/testdata/Azure/constellation-operators/charts/constellation-operator/templates/manager-rbac.yaml index 465bee103..56bf77080 100644 --- a/internal/constellation/helm/testdata/Azure/constellation-operators/charts/constellation-operator/templates/manager-rbac.yaml +++ b/internal/constellation/helm/testdata/Azure/constellation-operators/charts/constellation-operator/templates/manager-rbac.yaml @@ -62,6 +62,10 @@ rules: - update.edgeless.systems resources: - autoscalingstrategies + - joiningnodes + - nodeversions + - pendingnodes + - scalinggroups verbs: - create - delete @@ -74,38 +78,20 @@ rules: - update.edgeless.systems resources: - autoscalingstrategies/finalizers + - joiningnodes/finalizers + - nodeversions/finalizers + - pendingnodes/finalizers + - scalinggroups/finalizers verbs: - update - apiGroups: - update.edgeless.systems resources: - autoscalingstrategies/status - verbs: - - get - - patch - - update -- apiGroups: - - update.edgeless.systems - resources: - - joiningnodes - verbs: - - create - - delete - - get - - list - - patch - - update - - watch -- apiGroups: - - update.edgeless.systems - resources: - - joiningnodes/finalizers - verbs: - - update -- apiGroups: - - update.edgeless.systems - resources: - joiningnodes/status + - nodeversions/status + - pendingnodes/status + - scalinggroups/status verbs: - get - patch @@ -124,84 +110,6 @@ rules: - nodeversion/status verbs: - get -- apiGroups: - - update.edgeless.systems - resources: - - nodeversions - verbs: - - create - - delete - - get - - list - - patch - - update - - watch -- apiGroups: - - update.edgeless.systems - resources: - - nodeversions/finalizers - verbs: - - update -- apiGroups: - - update.edgeless.systems - resources: - - nodeversions/status - verbs: - - get - - patch - - update -- apiGroups: - - update.edgeless.systems - resources: - - pendingnodes - verbs: - - create - - delete - - get - - list - - patch - - update - - watch -- apiGroups: - - update.edgeless.systems - resources: - - pendingnodes/finalizers - verbs: - - update -- apiGroups: - - update.edgeless.systems - resources: - - pendingnodes/status - verbs: - - get - - patch - - update -- apiGroups: - - update.edgeless.systems - resources: - - scalinggroups - verbs: - - create - - delete - - get - - list - - patch - - update - - watch -- apiGroups: - - update.edgeless.systems - resources: - - scalinggroups/finalizers - verbs: - - update -- apiGroups: - - update.edgeless.systems - resources: - - scalinggroups/status - verbs: - - get - - patch - - update --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding diff --git a/internal/constellation/helm/testdata/GCP/constellation-operators/charts/constellation-operator/templates/manager-rbac.yaml b/internal/constellation/helm/testdata/GCP/constellation-operators/charts/constellation-operator/templates/manager-rbac.yaml index 465bee103..56bf77080 100644 --- a/internal/constellation/helm/testdata/GCP/constellation-operators/charts/constellation-operator/templates/manager-rbac.yaml +++ b/internal/constellation/helm/testdata/GCP/constellation-operators/charts/constellation-operator/templates/manager-rbac.yaml @@ -62,6 +62,10 @@ rules: - update.edgeless.systems resources: - autoscalingstrategies + - joiningnodes + - nodeversions + - pendingnodes + - scalinggroups verbs: - create - delete @@ -74,38 +78,20 @@ rules: - update.edgeless.systems resources: - autoscalingstrategies/finalizers + - joiningnodes/finalizers + - nodeversions/finalizers + - pendingnodes/finalizers + - scalinggroups/finalizers verbs: - update - apiGroups: - update.edgeless.systems resources: - autoscalingstrategies/status - verbs: - - get - - patch - - update -- apiGroups: - - update.edgeless.systems - resources: - - joiningnodes - verbs: - - create - - delete - - get - - list - - patch - - update - - watch -- apiGroups: - - update.edgeless.systems - resources: - - joiningnodes/finalizers - verbs: - - update -- apiGroups: - - update.edgeless.systems - resources: - joiningnodes/status + - nodeversions/status + - pendingnodes/status + - scalinggroups/status verbs: - get - patch @@ -124,84 +110,6 @@ rules: - nodeversion/status verbs: - get -- apiGroups: - - update.edgeless.systems - resources: - - nodeversions - verbs: - - create - - delete - - get - - list - - patch - - update - - watch -- apiGroups: - - update.edgeless.systems - resources: - - nodeversions/finalizers - verbs: - - update -- apiGroups: - - update.edgeless.systems - resources: - - nodeversions/status - verbs: - - get - - patch - - update -- apiGroups: - - update.edgeless.systems - resources: - - pendingnodes - verbs: - - create - - delete - - get - - list - - patch - - update - - watch -- apiGroups: - - update.edgeless.systems - resources: - - pendingnodes/finalizers - verbs: - - update -- apiGroups: - - update.edgeless.systems - resources: - - pendingnodes/status - verbs: - - get - - patch - - update -- apiGroups: - - update.edgeless.systems - resources: - - scalinggroups - verbs: - - create - - delete - - get - - list - - patch - - update - - watch -- apiGroups: - - update.edgeless.systems - resources: - - scalinggroups/finalizers - verbs: - - update -- apiGroups: - - update.edgeless.systems - resources: - - scalinggroups/status - verbs: - - get - - patch - - update --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding diff --git a/internal/constellation/helm/testdata/OpenStack/constellation-operators/charts/constellation-operator/templates/manager-rbac.yaml b/internal/constellation/helm/testdata/OpenStack/constellation-operators/charts/constellation-operator/templates/manager-rbac.yaml index 465bee103..56bf77080 100644 --- a/internal/constellation/helm/testdata/OpenStack/constellation-operators/charts/constellation-operator/templates/manager-rbac.yaml +++ b/internal/constellation/helm/testdata/OpenStack/constellation-operators/charts/constellation-operator/templates/manager-rbac.yaml @@ -62,6 +62,10 @@ rules: - update.edgeless.systems resources: - autoscalingstrategies + - joiningnodes + - nodeversions + - pendingnodes + - scalinggroups verbs: - create - delete @@ -74,38 +78,20 @@ rules: - update.edgeless.systems resources: - autoscalingstrategies/finalizers + - joiningnodes/finalizers + - nodeversions/finalizers + - pendingnodes/finalizers + - scalinggroups/finalizers verbs: - update - apiGroups: - update.edgeless.systems resources: - autoscalingstrategies/status - verbs: - - get - - patch - - update -- apiGroups: - - update.edgeless.systems - resources: - - joiningnodes - verbs: - - create - - delete - - get - - list - - patch - - update - - watch -- apiGroups: - - update.edgeless.systems - resources: - - joiningnodes/finalizers - verbs: - - update -- apiGroups: - - update.edgeless.systems - resources: - joiningnodes/status + - nodeversions/status + - pendingnodes/status + - scalinggroups/status verbs: - get - patch @@ -124,84 +110,6 @@ rules: - nodeversion/status verbs: - get -- apiGroups: - - update.edgeless.systems - resources: - - nodeversions - verbs: - - create - - delete - - get - - list - - patch - - update - - watch -- apiGroups: - - update.edgeless.systems - resources: - - nodeversions/finalizers - verbs: - - update -- apiGroups: - - update.edgeless.systems - resources: - - nodeversions/status - verbs: - - get - - patch - - update -- apiGroups: - - update.edgeless.systems - resources: - - pendingnodes - verbs: - - create - - delete - - get - - list - - patch - - update - - watch -- apiGroups: - - update.edgeless.systems - resources: - - pendingnodes/finalizers - verbs: - - update -- apiGroups: - - update.edgeless.systems - resources: - - pendingnodes/status - verbs: - - get - - patch - - update -- apiGroups: - - update.edgeless.systems - resources: - - scalinggroups - verbs: - - create - - delete - - get - - list - - patch - - update - - watch -- apiGroups: - - update.edgeless.systems - resources: - - scalinggroups/finalizers - verbs: - - update -- apiGroups: - - update.edgeless.systems - resources: - - scalinggroups/status - verbs: - - get - - patch - - update --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding diff --git a/internal/constellation/helm/testdata/QEMU/constellation-operators/charts/constellation-operator/templates/manager-rbac.yaml b/internal/constellation/helm/testdata/QEMU/constellation-operators/charts/constellation-operator/templates/manager-rbac.yaml index 465bee103..56bf77080 100644 --- a/internal/constellation/helm/testdata/QEMU/constellation-operators/charts/constellation-operator/templates/manager-rbac.yaml +++ b/internal/constellation/helm/testdata/QEMU/constellation-operators/charts/constellation-operator/templates/manager-rbac.yaml @@ -62,6 +62,10 @@ rules: - update.edgeless.systems resources: - autoscalingstrategies + - joiningnodes + - nodeversions + - pendingnodes + - scalinggroups verbs: - create - delete @@ -74,38 +78,20 @@ rules: - update.edgeless.systems resources: - autoscalingstrategies/finalizers + - joiningnodes/finalizers + - nodeversions/finalizers + - pendingnodes/finalizers + - scalinggroups/finalizers verbs: - update - apiGroups: - update.edgeless.systems resources: - autoscalingstrategies/status - verbs: - - get - - patch - - update -- apiGroups: - - update.edgeless.systems - resources: - - joiningnodes - verbs: - - create - - delete - - get - - list - - patch - - update - - watch -- apiGroups: - - update.edgeless.systems - resources: - - joiningnodes/finalizers - verbs: - - update -- apiGroups: - - update.edgeless.systems - resources: - joiningnodes/status + - nodeversions/status + - pendingnodes/status + - scalinggroups/status verbs: - get - patch @@ -124,84 +110,6 @@ rules: - nodeversion/status verbs: - get -- apiGroups: - - update.edgeless.systems - resources: - - nodeversions - verbs: - - create - - delete - - get - - list - - patch - - update - - watch -- apiGroups: - - update.edgeless.systems - resources: - - nodeversions/finalizers - verbs: - - update -- apiGroups: - - update.edgeless.systems - resources: - - nodeversions/status - verbs: - - get - - patch - - update -- apiGroups: - - update.edgeless.systems - resources: - - pendingnodes - verbs: - - create - - delete - - get - - list - - patch - - update - - watch -- apiGroups: - - update.edgeless.systems - resources: - - pendingnodes/finalizers - verbs: - - update -- apiGroups: - - update.edgeless.systems - resources: - - pendingnodes/status - verbs: - - get - - patch - - update -- apiGroups: - - update.edgeless.systems - resources: - - scalinggroups - verbs: - - create - - delete - - get - - list - - patch - - update - - watch -- apiGroups: - - update.edgeless.systems - resources: - - scalinggroups/finalizers - verbs: - - update -- apiGroups: - - update.edgeless.systems - resources: - - scalinggroups/status - verbs: - - get - - patch - - update --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding diff --git a/operators/constellation-node-operator/Makefile b/operators/constellation-node-operator/Makefile index ca2bd0906..777b1ecb1 100644 --- a/operators/constellation-node-operator/Makefile +++ b/operators/constellation-node-operator/Makefile @@ -86,11 +86,11 @@ help: ## Display this help. .PHONY: manifests manifests: controller-gen ## Generate WebhookConfiguration, ClusterRole and CustomResourceDefinition objects. - $(CONTROLLER_GEN) rbac:roleName=manager-role crd webhook paths="./" output:crd:artifacts:config=config/crd/bases + $(CONTROLLER_GEN) rbac:roleName=manager-role crd webhook paths="./..." output:crd:artifacts:config=config/crd/bases .PHONY: generate generate: controller-gen ## Generate code containing DeepCopy, DeepCopyInto, and DeepCopyObject method implementations. - $(CONTROLLER_GEN) object:headerFile="hack/boilerplate.go.txt" paths="./" + $(CONTROLLER_GEN) object:headerFile="hack/boilerplate.go.txt" paths="./..." .PHONY: fmt fmt: ## Run go fmt against code. @@ -162,7 +162,7 @@ CONTROLLER_GEN ?= $(LOCALBIN)/controller-gen ## Tool Versions KUSTOMIZE_VERSION ?= v3.8.7 -CONTROLLER_TOOLS_VERSION ?= v0.9.0 +CONTROLLER_TOOLS_VERSION ?= v0.16.4 KUSTOMIZE_INSTALL_SCRIPT ?= "https://raw.githubusercontent.com/kubernetes-sigs/kustomize/master/hack/install_kustomize.sh" .PHONY: kustomize diff --git a/operators/constellation-node-operator/api/v1alpha1/zz_generated.deepcopy.go b/operators/constellation-node-operator/api/v1alpha1/zz_generated.deepcopy.go index 198fc055c..b25cfc280 100644 --- a/operators/constellation-node-operator/api/v1alpha1/zz_generated.deepcopy.go +++ b/operators/constellation-node-operator/api/v1alpha1/zz_generated.deepcopy.go @@ -1,5 +1,4 @@ //go:build !ignore_autogenerated -// +build !ignore_autogenerated // Code generated by controller-gen. DO NOT EDIT. diff --git a/operators/constellation-node-operator/config/crd/bases/update.edgeless.systems_autoscalingstrategies.yaml b/operators/constellation-node-operator/config/crd/bases/update.edgeless.systems_autoscalingstrategies.yaml index 6a014a394..9156e3e71 100644 --- a/operators/constellation-node-operator/config/crd/bases/update.edgeless.systems_autoscalingstrategies.yaml +++ b/operators/constellation-node-operator/config/crd/bases/update.edgeless.systems_autoscalingstrategies.yaml @@ -3,8 +3,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.9.0 - creationTimestamp: null + controller-gen.kubebuilder.io/version: v0.16.4 name: autoscalingstrategies.update.edgeless.systems spec: group: update.edgeless.systems @@ -22,14 +21,19 @@ spec: API. properties: apiVersion: - description: 'APIVersion defines the versioned schema of this representation - of an object. Servers should convert recognized schemas to the latest - internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + description: |- + APIVersion defines the versioned schema of this representation of an object. + Servers should convert recognized schemas to the latest internal value, and + may reject unrecognized values. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources type: string kind: - description: 'Kind is a string value representing the REST resource this - object represents. Servers may infer this from the endpoint the client - submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + description: |- + Kind is a string value representing the REST resource this object represents. + Servers may infer this from the endpoint the client submits requests to. + Cannot be updated. + In CamelCase. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds type: string metadata: type: object diff --git a/operators/constellation-node-operator/config/crd/bases/update.edgeless.systems_joiningnodes.yaml b/operators/constellation-node-operator/config/crd/bases/update.edgeless.systems_joiningnodes.yaml index 9c8e9e5a2..1beca7221 100644 --- a/operators/constellation-node-operator/config/crd/bases/update.edgeless.systems_joiningnodes.yaml +++ b/operators/constellation-node-operator/config/crd/bases/update.edgeless.systems_joiningnodes.yaml @@ -3,8 +3,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.9.0 - creationTimestamp: null + controller-gen.kubebuilder.io/version: v0.16.4 name: joiningnodes.update.edgeless.systems spec: group: update.edgeless.systems @@ -21,14 +20,19 @@ spec: description: JoiningNode is the Schema for the joiningnodes API. properties: apiVersion: - description: 'APIVersion defines the versioned schema of this representation - of an object. Servers should convert recognized schemas to the latest - internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + description: |- + APIVersion defines the versioned schema of this representation of an object. + Servers should convert recognized schemas to the latest internal value, and + may reject unrecognized values. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources type: string kind: - description: 'Kind is a string value representing the REST resource this - object represents. Servers may infer this from the endpoint the client - submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + description: |- + Kind is a string value representing the REST resource this object represents. + Servers may infer this from the endpoint the client submits requests to. + Cannot be updated. + In CamelCase. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds type: string metadata: type: object diff --git a/operators/constellation-node-operator/config/crd/bases/update.edgeless.systems_nodeversions.yaml b/operators/constellation-node-operator/config/crd/bases/update.edgeless.systems_nodeversions.yaml index e4c435ec1..4b7f7b7e0 100644 --- a/operators/constellation-node-operator/config/crd/bases/update.edgeless.systems_nodeversions.yaml +++ b/operators/constellation-node-operator/config/crd/bases/update.edgeless.systems_nodeversions.yaml @@ -3,8 +3,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.9.0 - creationTimestamp: null + controller-gen.kubebuilder.io/version: v0.16.4 name: nodeversions.update.edgeless.systems spec: group: update.edgeless.systems @@ -21,14 +20,19 @@ spec: description: NodeVersion is the Schema for the nodeversions API. properties: apiVersion: - description: 'APIVersion defines the versioned schema of this representation - of an object. Servers should convert recognized schemas to the latest - internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + description: |- + APIVersion defines the versioned schema of this representation of an object. + Servers should convert recognized schemas to the latest internal value, and + may reject unrecognized values. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources type: string kind: - description: 'Kind is a string value representing the REST resource this - object represents. Servers may infer this from the endpoint the client - submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + description: |- + Kind is a string value representing the REST resource this object represents. + Servers may infer this from the endpoint the client submits requests to. + Cannot be updated. + In CamelCase. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds type: string metadata: type: object @@ -62,65 +66,49 @@ spec: description: AwaitingAnnotation is a list of nodes that are waiting for the operator to annotate them. items: - description: "ObjectReference contains enough information to let - you inspect or modify the referred object. --- New uses of this - type are discouraged because of difficulty describing its usage - when embedded in APIs. 1. Ignored fields. It includes many fields - which are not generally honored. For instance, ResourceVersion - and FieldPath are both very rarely valid in actual usage. 2. Invalid - usage help. It is impossible to add specific help for individual - usage. In most embedded usages, there are particular restrictions - like, \"must refer only to types A and B\" or \"UID not honored\" - or \"name must be restricted\". Those cannot be well described - when embedded. 3. Inconsistent validation. Because the usages - are different, the validation rules are different by usage, which - makes it hard for users to predict what will happen. 4. The fields - are both imprecise and overly precise. Kind is not a precise - mapping to a URL. This can produce ambiguity during interpretation - and require a REST mapping. In most cases, the dependency is - on the group,resource tuple and the version of the actual struct - is irrelevant. 5. We cannot easily change it. Because this type - is embedded in many locations, updates to this type will affect - numerous schemas. Don't make new APIs embed an underspecified - API type they do not control. \n Instead of using this type, create - a locally provided and used type that is well-focused on your - reference. For example, ServiceReferences for admission registration: - https://github.com/kubernetes/api/blob/release-1.17/admissionregistration/v1/types.go#L533 - ." + description: ObjectReference contains enough information to let + you inspect or modify the referred object. properties: apiVersion: description: API version of the referent. type: string fieldPath: - description: 'If referring to a piece of an object instead of - an entire object, this string should contain a valid JSON/Go - field access statement, such as desiredState.manifest.containers[2]. - For example, if the object reference is to a container within - a pod, this would take on a value like: "spec.containers{name}" - (where "name" refers to the name of the container that triggered - the event) or if no container name is specified "spec.containers[2]" - (container with index 2 in this pod). This syntax is chosen - only to have some well-defined way of referencing a part of - an object. TODO: this design is not final and this field is - subject to change in the future.' + description: |- + If referring to a piece of an object instead of an entire object, this string + should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2]. + For example, if the object reference is to a container within a pod, this would take on a value like: + "spec.containers{name}" (where "name" refers to the name of the container that triggered + the event) or if no container name is specified "spec.containers[2]" (container with + index 2 in this pod). This syntax is chosen only to have some well-defined way of + referencing a part of an object. type: string kind: - description: 'Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + description: |- + Kind of the referent. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds type: string name: - description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + description: |- + Name of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names type: string namespace: - description: 'Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/' + description: |- + Namespace of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/ type: string resourceVersion: - description: 'Specific resourceVersion to which this reference - is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency' + description: |- + Specific resourceVersion to which this reference is made, if any. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency type: string uid: - description: 'UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids' + description: |- + UID of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids type: string type: object + x-kubernetes-map-type: atomic type: array budget: description: Budget is the amount of extra nodes that can be created @@ -131,43 +119,35 @@ spec: description: Conditions represent the latest available observations of an object's state items: - description: "Condition contains details for one aspect of the current - state of this API Resource. --- This struct is intended for direct - use as an array at the field path .status.conditions. For example, - \n type FooStatus struct{ // Represents the observations of a - foo's current state. // Known .status.conditions.type are: \"Available\", - \"Progressing\", and \"Degraded\" // +patchMergeKey=type // +patchStrategy=merge - // +listType=map // +listMapKey=type Conditions []metav1.Condition - `json:\"conditions,omitempty\" patchStrategy:\"merge\" patchMergeKey:\"type\" - protobuf:\"bytes,1,rep,name=conditions\"` \n // other fields }" + description: Condition contains details for one aspect of the current + state of this API Resource. properties: lastTransitionTime: - description: lastTransitionTime is the last time the condition - transitioned from one status to another. This should be when - the underlying condition changed. If that is not known, then - using the time when the API field changed is acceptable. + description: |- + lastTransitionTime is the last time the condition transitioned from one status to another. + This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable. format: date-time type: string message: - description: message is a human readable message indicating - details about the transition. This may be an empty string. + description: |- + message is a human readable message indicating details about the transition. + This may be an empty string. maxLength: 32768 type: string observedGeneration: - description: observedGeneration represents the .metadata.generation - that the condition was set based upon. For instance, if .metadata.generation - is currently 12, but the .status.conditions[x].observedGeneration - is 9, the condition is out of date with respect to the current - state of the instance. + description: |- + observedGeneration represents the .metadata.generation that the condition was set based upon. + For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date + with respect to the current state of the instance. format: int64 minimum: 0 type: integer reason: - description: reason contains a programmatic identifier indicating - the reason for the condition's last transition. Producers - of specific condition types may define expected values and - meanings for this field, and whether the values are considered - a guaranteed API. The value should be a CamelCase string. + description: |- + reason contains a programmatic identifier indicating the reason for the condition's last transition. + Producers of specific condition types may define expected values and meanings for this field, + and whether the values are considered a guaranteed API. + The value should be a CamelCase string. This field may not be empty. maxLength: 1024 minLength: 1 @@ -182,10 +162,6 @@ spec: type: string type: description: type of condition in CamelCase or in foo.example.com/CamelCase. - --- Many .condition.type values are consistent across resources - like Available, but because arbitrary conditions can be useful - (see .node.status.conditions), the ability to deconflict is - important. The regex it matches is (dns1123SubdomainFmt/)?(qualifiedNameFmt) maxLength: 316 pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ type: string @@ -201,514 +177,386 @@ spec: description: Donors is a list of outdated nodes that donate labels to heirs. items: - description: "ObjectReference contains enough information to let - you inspect or modify the referred object. --- New uses of this - type are discouraged because of difficulty describing its usage - when embedded in APIs. 1. Ignored fields. It includes many fields - which are not generally honored. For instance, ResourceVersion - and FieldPath are both very rarely valid in actual usage. 2. Invalid - usage help. It is impossible to add specific help for individual - usage. In most embedded usages, there are particular restrictions - like, \"must refer only to types A and B\" or \"UID not honored\" - or \"name must be restricted\". Those cannot be well described - when embedded. 3. Inconsistent validation. Because the usages - are different, the validation rules are different by usage, which - makes it hard for users to predict what will happen. 4. The fields - are both imprecise and overly precise. Kind is not a precise - mapping to a URL. This can produce ambiguity during interpretation - and require a REST mapping. In most cases, the dependency is - on the group,resource tuple and the version of the actual struct - is irrelevant. 5. We cannot easily change it. Because this type - is embedded in many locations, updates to this type will affect - numerous schemas. Don't make new APIs embed an underspecified - API type they do not control. \n Instead of using this type, create - a locally provided and used type that is well-focused on your - reference. For example, ServiceReferences for admission registration: - https://github.com/kubernetes/api/blob/release-1.17/admissionregistration/v1/types.go#L533 - ." + description: ObjectReference contains enough information to let + you inspect or modify the referred object. properties: apiVersion: description: API version of the referent. type: string fieldPath: - description: 'If referring to a piece of an object instead of - an entire object, this string should contain a valid JSON/Go - field access statement, such as desiredState.manifest.containers[2]. - For example, if the object reference is to a container within - a pod, this would take on a value like: "spec.containers{name}" - (where "name" refers to the name of the container that triggered - the event) or if no container name is specified "spec.containers[2]" - (container with index 2 in this pod). This syntax is chosen - only to have some well-defined way of referencing a part of - an object. TODO: this design is not final and this field is - subject to change in the future.' + description: |- + If referring to a piece of an object instead of an entire object, this string + should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2]. + For example, if the object reference is to a container within a pod, this would take on a value like: + "spec.containers{name}" (where "name" refers to the name of the container that triggered + the event) or if no container name is specified "spec.containers[2]" (container with + index 2 in this pod). This syntax is chosen only to have some well-defined way of + referencing a part of an object. type: string kind: - description: 'Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + description: |- + Kind of the referent. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds type: string name: - description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + description: |- + Name of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names type: string namespace: - description: 'Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/' + description: |- + Namespace of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/ type: string resourceVersion: - description: 'Specific resourceVersion to which this reference - is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency' + description: |- + Specific resourceVersion to which this reference is made, if any. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency type: string uid: - description: 'UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids' + description: |- + UID of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids type: string type: object + x-kubernetes-map-type: atomic type: array heirs: description: Heirs is a list of nodes using the latest image that still need to inherit labels from donors. items: - description: "ObjectReference contains enough information to let - you inspect or modify the referred object. --- New uses of this - type are discouraged because of difficulty describing its usage - when embedded in APIs. 1. Ignored fields. It includes many fields - which are not generally honored. For instance, ResourceVersion - and FieldPath are both very rarely valid in actual usage. 2. Invalid - usage help. It is impossible to add specific help for individual - usage. In most embedded usages, there are particular restrictions - like, \"must refer only to types A and B\" or \"UID not honored\" - or \"name must be restricted\". Those cannot be well described - when embedded. 3. Inconsistent validation. Because the usages - are different, the validation rules are different by usage, which - makes it hard for users to predict what will happen. 4. The fields - are both imprecise and overly precise. Kind is not a precise - mapping to a URL. This can produce ambiguity during interpretation - and require a REST mapping. In most cases, the dependency is - on the group,resource tuple and the version of the actual struct - is irrelevant. 5. We cannot easily change it. Because this type - is embedded in many locations, updates to this type will affect - numerous schemas. Don't make new APIs embed an underspecified - API type they do not control. \n Instead of using this type, create - a locally provided and used type that is well-focused on your - reference. For example, ServiceReferences for admission registration: - https://github.com/kubernetes/api/blob/release-1.17/admissionregistration/v1/types.go#L533 - ." + description: ObjectReference contains enough information to let + you inspect or modify the referred object. properties: apiVersion: description: API version of the referent. type: string fieldPath: - description: 'If referring to a piece of an object instead of - an entire object, this string should contain a valid JSON/Go - field access statement, such as desiredState.manifest.containers[2]. - For example, if the object reference is to a container within - a pod, this would take on a value like: "spec.containers{name}" - (where "name" refers to the name of the container that triggered - the event) or if no container name is specified "spec.containers[2]" - (container with index 2 in this pod). This syntax is chosen - only to have some well-defined way of referencing a part of - an object. TODO: this design is not final and this field is - subject to change in the future.' + description: |- + If referring to a piece of an object instead of an entire object, this string + should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2]. + For example, if the object reference is to a container within a pod, this would take on a value like: + "spec.containers{name}" (where "name" refers to the name of the container that triggered + the event) or if no container name is specified "spec.containers[2]" (container with + index 2 in this pod). This syntax is chosen only to have some well-defined way of + referencing a part of an object. type: string kind: - description: 'Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + description: |- + Kind of the referent. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds type: string name: - description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + description: |- + Name of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names type: string namespace: - description: 'Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/' + description: |- + Namespace of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/ type: string resourceVersion: - description: 'Specific resourceVersion to which this reference - is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency' + description: |- + Specific resourceVersion to which this reference is made, if any. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency type: string uid: - description: 'UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids' + description: |- + UID of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids type: string type: object + x-kubernetes-map-type: atomic type: array invalid: description: Invalid is a list of invalid nodes (nodes that cannot be processed by the operator due to missing information or transient faults). items: - description: "ObjectReference contains enough information to let - you inspect or modify the referred object. --- New uses of this - type are discouraged because of difficulty describing its usage - when embedded in APIs. 1. Ignored fields. It includes many fields - which are not generally honored. For instance, ResourceVersion - and FieldPath are both very rarely valid in actual usage. 2. Invalid - usage help. It is impossible to add specific help for individual - usage. In most embedded usages, there are particular restrictions - like, \"must refer only to types A and B\" or \"UID not honored\" - or \"name must be restricted\". Those cannot be well described - when embedded. 3. Inconsistent validation. Because the usages - are different, the validation rules are different by usage, which - makes it hard for users to predict what will happen. 4. The fields - are both imprecise and overly precise. Kind is not a precise - mapping to a URL. This can produce ambiguity during interpretation - and require a REST mapping. In most cases, the dependency is - on the group,resource tuple and the version of the actual struct - is irrelevant. 5. We cannot easily change it. Because this type - is embedded in many locations, updates to this type will affect - numerous schemas. Don't make new APIs embed an underspecified - API type they do not control. \n Instead of using this type, create - a locally provided and used type that is well-focused on your - reference. For example, ServiceReferences for admission registration: - https://github.com/kubernetes/api/blob/release-1.17/admissionregistration/v1/types.go#L533 - ." + description: ObjectReference contains enough information to let + you inspect or modify the referred object. properties: apiVersion: description: API version of the referent. type: string fieldPath: - description: 'If referring to a piece of an object instead of - an entire object, this string should contain a valid JSON/Go - field access statement, such as desiredState.manifest.containers[2]. - For example, if the object reference is to a container within - a pod, this would take on a value like: "spec.containers{name}" - (where "name" refers to the name of the container that triggered - the event) or if no container name is specified "spec.containers[2]" - (container with index 2 in this pod). This syntax is chosen - only to have some well-defined way of referencing a part of - an object. TODO: this design is not final and this field is - subject to change in the future.' + description: |- + If referring to a piece of an object instead of an entire object, this string + should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2]. + For example, if the object reference is to a container within a pod, this would take on a value like: + "spec.containers{name}" (where "name" refers to the name of the container that triggered + the event) or if no container name is specified "spec.containers[2]" (container with + index 2 in this pod). This syntax is chosen only to have some well-defined way of + referencing a part of an object. type: string kind: - description: 'Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + description: |- + Kind of the referent. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds type: string name: - description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + description: |- + Name of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names type: string namespace: - description: 'Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/' + description: |- + Namespace of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/ type: string resourceVersion: - description: 'Specific resourceVersion to which this reference - is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency' + description: |- + Specific resourceVersion to which this reference is made, if any. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency type: string uid: - description: 'UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids' + description: |- + UID of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids type: string type: object + x-kubernetes-map-type: atomic type: array mints: description: Mints is a list of up to date nodes that will become heirs. items: - description: "ObjectReference contains enough information to let - you inspect or modify the referred object. --- New uses of this - type are discouraged because of difficulty describing its usage - when embedded in APIs. 1. Ignored fields. It includes many fields - which are not generally honored. For instance, ResourceVersion - and FieldPath are both very rarely valid in actual usage. 2. Invalid - usage help. It is impossible to add specific help for individual - usage. In most embedded usages, there are particular restrictions - like, \"must refer only to types A and B\" or \"UID not honored\" - or \"name must be restricted\". Those cannot be well described - when embedded. 3. Inconsistent validation. Because the usages - are different, the validation rules are different by usage, which - makes it hard for users to predict what will happen. 4. The fields - are both imprecise and overly precise. Kind is not a precise - mapping to a URL. This can produce ambiguity during interpretation - and require a REST mapping. In most cases, the dependency is - on the group,resource tuple and the version of the actual struct - is irrelevant. 5. We cannot easily change it. Because this type - is embedded in many locations, updates to this type will affect - numerous schemas. Don't make new APIs embed an underspecified - API type they do not control. \n Instead of using this type, create - a locally provided and used type that is well-focused on your - reference. For example, ServiceReferences for admission registration: - https://github.com/kubernetes/api/blob/release-1.17/admissionregistration/v1/types.go#L533 - ." + description: ObjectReference contains enough information to let + you inspect or modify the referred object. properties: apiVersion: description: API version of the referent. type: string fieldPath: - description: 'If referring to a piece of an object instead of - an entire object, this string should contain a valid JSON/Go - field access statement, such as desiredState.manifest.containers[2]. - For example, if the object reference is to a container within - a pod, this would take on a value like: "spec.containers{name}" - (where "name" refers to the name of the container that triggered - the event) or if no container name is specified "spec.containers[2]" - (container with index 2 in this pod). This syntax is chosen - only to have some well-defined way of referencing a part of - an object. TODO: this design is not final and this field is - subject to change in the future.' + description: |- + If referring to a piece of an object instead of an entire object, this string + should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2]. + For example, if the object reference is to a container within a pod, this would take on a value like: + "spec.containers{name}" (where "name" refers to the name of the container that triggered + the event) or if no container name is specified "spec.containers[2]" (container with + index 2 in this pod). This syntax is chosen only to have some well-defined way of + referencing a part of an object. type: string kind: - description: 'Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + description: |- + Kind of the referent. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds type: string name: - description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + description: |- + Name of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names type: string namespace: - description: 'Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/' + description: |- + Namespace of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/ type: string resourceVersion: - description: 'Specific resourceVersion to which this reference - is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency' + description: |- + Specific resourceVersion to which this reference is made, if any. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency type: string uid: - description: 'UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids' + description: |- + UID of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids type: string type: object + x-kubernetes-map-type: atomic type: array obsolete: description: Obsolete is a list of obsolete nodes (nodes that have been created by the operator but are no longer needed). items: - description: "ObjectReference contains enough information to let - you inspect or modify the referred object. --- New uses of this - type are discouraged because of difficulty describing its usage - when embedded in APIs. 1. Ignored fields. It includes many fields - which are not generally honored. For instance, ResourceVersion - and FieldPath are both very rarely valid in actual usage. 2. Invalid - usage help. It is impossible to add specific help for individual - usage. In most embedded usages, there are particular restrictions - like, \"must refer only to types A and B\" or \"UID not honored\" - or \"name must be restricted\". Those cannot be well described - when embedded. 3. Inconsistent validation. Because the usages - are different, the validation rules are different by usage, which - makes it hard for users to predict what will happen. 4. The fields - are both imprecise and overly precise. Kind is not a precise - mapping to a URL. This can produce ambiguity during interpretation - and require a REST mapping. In most cases, the dependency is - on the group,resource tuple and the version of the actual struct - is irrelevant. 5. We cannot easily change it. Because this type - is embedded in many locations, updates to this type will affect - numerous schemas. Don't make new APIs embed an underspecified - API type they do not control. \n Instead of using this type, create - a locally provided and used type that is well-focused on your - reference. For example, ServiceReferences for admission registration: - https://github.com/kubernetes/api/blob/release-1.17/admissionregistration/v1/types.go#L533 - ." + description: ObjectReference contains enough information to let + you inspect or modify the referred object. properties: apiVersion: description: API version of the referent. type: string fieldPath: - description: 'If referring to a piece of an object instead of - an entire object, this string should contain a valid JSON/Go - field access statement, such as desiredState.manifest.containers[2]. - For example, if the object reference is to a container within - a pod, this would take on a value like: "spec.containers{name}" - (where "name" refers to the name of the container that triggered - the event) or if no container name is specified "spec.containers[2]" - (container with index 2 in this pod). This syntax is chosen - only to have some well-defined way of referencing a part of - an object. TODO: this design is not final and this field is - subject to change in the future.' + description: |- + If referring to a piece of an object instead of an entire object, this string + should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2]. + For example, if the object reference is to a container within a pod, this would take on a value like: + "spec.containers{name}" (where "name" refers to the name of the container that triggered + the event) or if no container name is specified "spec.containers[2]" (container with + index 2 in this pod). This syntax is chosen only to have some well-defined way of + referencing a part of an object. type: string kind: - description: 'Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + description: |- + Kind of the referent. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds type: string name: - description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + description: |- + Name of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names type: string namespace: - description: 'Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/' + description: |- + Namespace of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/ type: string resourceVersion: - description: 'Specific resourceVersion to which this reference - is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency' + description: |- + Specific resourceVersion to which this reference is made, if any. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency type: string uid: - description: 'UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids' + description: |- + UID of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids type: string type: object + x-kubernetes-map-type: atomic type: array outdated: description: Outdated is a list of nodes that are using an outdated image. items: - description: "ObjectReference contains enough information to let - you inspect or modify the referred object. --- New uses of this - type are discouraged because of difficulty describing its usage - when embedded in APIs. 1. Ignored fields. It includes many fields - which are not generally honored. For instance, ResourceVersion - and FieldPath are both very rarely valid in actual usage. 2. Invalid - usage help. It is impossible to add specific help for individual - usage. In most embedded usages, there are particular restrictions - like, \"must refer only to types A and B\" or \"UID not honored\" - or \"name must be restricted\". Those cannot be well described - when embedded. 3. Inconsistent validation. Because the usages - are different, the validation rules are different by usage, which - makes it hard for users to predict what will happen. 4. The fields - are both imprecise and overly precise. Kind is not a precise - mapping to a URL. This can produce ambiguity during interpretation - and require a REST mapping. In most cases, the dependency is - on the group,resource tuple and the version of the actual struct - is irrelevant. 5. We cannot easily change it. Because this type - is embedded in many locations, updates to this type will affect - numerous schemas. Don't make new APIs embed an underspecified - API type they do not control. \n Instead of using this type, create - a locally provided and used type that is well-focused on your - reference. For example, ServiceReferences for admission registration: - https://github.com/kubernetes/api/blob/release-1.17/admissionregistration/v1/types.go#L533 - ." + description: ObjectReference contains enough information to let + you inspect or modify the referred object. properties: apiVersion: description: API version of the referent. type: string fieldPath: - description: 'If referring to a piece of an object instead of - an entire object, this string should contain a valid JSON/Go - field access statement, such as desiredState.manifest.containers[2]. - For example, if the object reference is to a container within - a pod, this would take on a value like: "spec.containers{name}" - (where "name" refers to the name of the container that triggered - the event) or if no container name is specified "spec.containers[2]" - (container with index 2 in this pod). This syntax is chosen - only to have some well-defined way of referencing a part of - an object. TODO: this design is not final and this field is - subject to change in the future.' + description: |- + If referring to a piece of an object instead of an entire object, this string + should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2]. + For example, if the object reference is to a container within a pod, this would take on a value like: + "spec.containers{name}" (where "name" refers to the name of the container that triggered + the event) or if no container name is specified "spec.containers[2]" (container with + index 2 in this pod). This syntax is chosen only to have some well-defined way of + referencing a part of an object. type: string kind: - description: 'Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + description: |- + Kind of the referent. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds type: string name: - description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + description: |- + Name of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names type: string namespace: - description: 'Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/' + description: |- + Namespace of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/ type: string resourceVersion: - description: 'Specific resourceVersion to which this reference - is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency' + description: |- + Specific resourceVersion to which this reference is made, if any. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency type: string uid: - description: 'UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids' + description: |- + UID of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids type: string type: object + x-kubernetes-map-type: atomic type: array pending: description: Pending is a list of pending nodes (joining or leaving the cluster). items: - description: "ObjectReference contains enough information to let - you inspect or modify the referred object. --- New uses of this - type are discouraged because of difficulty describing its usage - when embedded in APIs. 1. Ignored fields. It includes many fields - which are not generally honored. For instance, ResourceVersion - and FieldPath are both very rarely valid in actual usage. 2. Invalid - usage help. It is impossible to add specific help for individual - usage. In most embedded usages, there are particular restrictions - like, \"must refer only to types A and B\" or \"UID not honored\" - or \"name must be restricted\". Those cannot be well described - when embedded. 3. Inconsistent validation. Because the usages - are different, the validation rules are different by usage, which - makes it hard for users to predict what will happen. 4. The fields - are both imprecise and overly precise. Kind is not a precise - mapping to a URL. This can produce ambiguity during interpretation - and require a REST mapping. In most cases, the dependency is - on the group,resource tuple and the version of the actual struct - is irrelevant. 5. We cannot easily change it. Because this type - is embedded in many locations, updates to this type will affect - numerous schemas. Don't make new APIs embed an underspecified - API type they do not control. \n Instead of using this type, create - a locally provided and used type that is well-focused on your - reference. For example, ServiceReferences for admission registration: - https://github.com/kubernetes/api/blob/release-1.17/admissionregistration/v1/types.go#L533 - ." + description: ObjectReference contains enough information to let + you inspect or modify the referred object. properties: apiVersion: description: API version of the referent. type: string fieldPath: - description: 'If referring to a piece of an object instead of - an entire object, this string should contain a valid JSON/Go - field access statement, such as desiredState.manifest.containers[2]. - For example, if the object reference is to a container within - a pod, this would take on a value like: "spec.containers{name}" - (where "name" refers to the name of the container that triggered - the event) or if no container name is specified "spec.containers[2]" - (container with index 2 in this pod). This syntax is chosen - only to have some well-defined way of referencing a part of - an object. TODO: this design is not final and this field is - subject to change in the future.' + description: |- + If referring to a piece of an object instead of an entire object, this string + should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2]. + For example, if the object reference is to a container within a pod, this would take on a value like: + "spec.containers{name}" (where "name" refers to the name of the container that triggered + the event) or if no container name is specified "spec.containers[2]" (container with + index 2 in this pod). This syntax is chosen only to have some well-defined way of + referencing a part of an object. type: string kind: - description: 'Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + description: |- + Kind of the referent. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds type: string name: - description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + description: |- + Name of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names type: string namespace: - description: 'Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/' + description: |- + Namespace of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/ type: string resourceVersion: - description: 'Specific resourceVersion to which this reference - is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency' + description: |- + Specific resourceVersion to which this reference is made, if any. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency type: string uid: - description: 'UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids' + description: |- + UID of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids type: string type: object + x-kubernetes-map-type: atomic type: array upToDate: description: UpToDate is a list of nodes that are using the latest image and labels. items: - description: "ObjectReference contains enough information to let - you inspect or modify the referred object. --- New uses of this - type are discouraged because of difficulty describing its usage - when embedded in APIs. 1. Ignored fields. It includes many fields - which are not generally honored. For instance, ResourceVersion - and FieldPath are both very rarely valid in actual usage. 2. Invalid - usage help. It is impossible to add specific help for individual - usage. In most embedded usages, there are particular restrictions - like, \"must refer only to types A and B\" or \"UID not honored\" - or \"name must be restricted\". Those cannot be well described - when embedded. 3. Inconsistent validation. Because the usages - are different, the validation rules are different by usage, which - makes it hard for users to predict what will happen. 4. The fields - are both imprecise and overly precise. Kind is not a precise - mapping to a URL. This can produce ambiguity during interpretation - and require a REST mapping. In most cases, the dependency is - on the group,resource tuple and the version of the actual struct - is irrelevant. 5. We cannot easily change it. Because this type - is embedded in many locations, updates to this type will affect - numerous schemas. Don't make new APIs embed an underspecified - API type they do not control. \n Instead of using this type, create - a locally provided and used type that is well-focused on your - reference. For example, ServiceReferences for admission registration: - https://github.com/kubernetes/api/blob/release-1.17/admissionregistration/v1/types.go#L533 - ." + description: ObjectReference contains enough information to let + you inspect or modify the referred object. properties: apiVersion: description: API version of the referent. type: string fieldPath: - description: 'If referring to a piece of an object instead of - an entire object, this string should contain a valid JSON/Go - field access statement, such as desiredState.manifest.containers[2]. - For example, if the object reference is to a container within - a pod, this would take on a value like: "spec.containers{name}" - (where "name" refers to the name of the container that triggered - the event) or if no container name is specified "spec.containers[2]" - (container with index 2 in this pod). This syntax is chosen - only to have some well-defined way of referencing a part of - an object. TODO: this design is not final and this field is - subject to change in the future.' + description: |- + If referring to a piece of an object instead of an entire object, this string + should contain a valid JSON/Go field access statement, such as desiredState.manifest.containers[2]. + For example, if the object reference is to a container within a pod, this would take on a value like: + "spec.containers{name}" (where "name" refers to the name of the container that triggered + the event) or if no container name is specified "spec.containers[2]" (container with + index 2 in this pod). This syntax is chosen only to have some well-defined way of + referencing a part of an object. type: string kind: - description: 'Kind of the referent. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + description: |- + Kind of the referent. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds type: string name: - description: 'Name of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names' + description: |- + Name of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names type: string namespace: - description: 'Namespace of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/' + description: |- + Namespace of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/namespaces/ type: string resourceVersion: - description: 'Specific resourceVersion to which this reference - is made, if any. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency' + description: |- + Specific resourceVersion to which this reference is made, if any. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#concurrency-control-and-consistency type: string uid: - description: 'UID of the referent. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids' + description: |- + UID of the referent. + More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#uids type: string type: object + x-kubernetes-map-type: atomic type: array required: - activeclusterversionupgrade diff --git a/operators/constellation-node-operator/config/crd/bases/update.edgeless.systems_pendingnodes.yaml b/operators/constellation-node-operator/config/crd/bases/update.edgeless.systems_pendingnodes.yaml index 7c5b5618b..c6cd2db6a 100644 --- a/operators/constellation-node-operator/config/crd/bases/update.edgeless.systems_pendingnodes.yaml +++ b/operators/constellation-node-operator/config/crd/bases/update.edgeless.systems_pendingnodes.yaml @@ -3,8 +3,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.9.0 - creationTimestamp: null + controller-gen.kubebuilder.io/version: v0.16.4 name: pendingnodes.update.edgeless.systems spec: group: update.edgeless.systems @@ -21,14 +20,19 @@ spec: description: PendingNode is the Schema for the pendingnodes API. properties: apiVersion: - description: 'APIVersion defines the versioned schema of this representation - of an object. Servers should convert recognized schemas to the latest - internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + description: |- + APIVersion defines the versioned schema of this representation of an object. + Servers should convert recognized schemas to the latest internal value, and + may reject unrecognized values. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources type: string kind: - description: 'Kind is a string value representing the REST resource this - object represents. Servers may infer this from the endpoint the client - submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + description: |- + Kind is a string value representing the REST resource this object represents. + Servers may infer this from the endpoint the client submits requests to. + Cannot be updated. + In CamelCase. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds type: string metadata: type: object @@ -36,10 +40,11 @@ spec: description: PendingNodeSpec defines the desired state of PendingNode. properties: deadline: - description: Deadline is the deadline for reaching the goal state. - Joining nodes will be terminated if the deadline is exceeded. Leaving - nodes will remain as unschedulable to prevent data loss. If not - specified, the node may remain in the pending state indefinitely. + description: |- + Deadline is the deadline for reaching the goal state. + Joining nodes will be terminated if the deadline is exceeded. + Leaving nodes will remain as unschedulable to prevent data loss. + If not specified, the node may remain in the pending state indefinitely. format: date-time type: string goal: diff --git a/operators/constellation-node-operator/config/crd/bases/update.edgeless.systems_scalinggroups.yaml b/operators/constellation-node-operator/config/crd/bases/update.edgeless.systems_scalinggroups.yaml index 0f87fbab1..5eed4ebc8 100644 --- a/operators/constellation-node-operator/config/crd/bases/update.edgeless.systems_scalinggroups.yaml +++ b/operators/constellation-node-operator/config/crd/bases/update.edgeless.systems_scalinggroups.yaml @@ -3,8 +3,7 @@ apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: annotations: - controller-gen.kubebuilder.io/version: v0.9.0 - creationTimestamp: null + controller-gen.kubebuilder.io/version: v0.16.4 name: scalinggroups.update.edgeless.systems spec: group: update.edgeless.systems @@ -21,14 +20,19 @@ spec: description: ScalingGroup is the Schema for the scalinggroups API. properties: apiVersion: - description: 'APIVersion defines the versioned schema of this representation - of an object. Servers should convert recognized schemas to the latest - internal value, and may reject unrecognized values. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources' + description: |- + APIVersion defines the versioned schema of this representation of an object. + Servers should convert recognized schemas to the latest internal value, and + may reject unrecognized values. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#resources type: string kind: - description: 'Kind is a string value representing the REST resource this - object represents. Servers may infer this from the endpoint the client - submits requests to. Cannot be updated. In CamelCase. More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds' + description: |- + Kind is a string value representing the REST resource this object represents. + Servers may infer this from the endpoint the client submits requests to. + Cannot be updated. + In CamelCase. + More info: https://git.k8s.io/community/contributors/devel/sig-architecture/api-conventions.md#types-kinds type: string metadata: type: object @@ -57,8 +61,8 @@ spec: format: int32 type: integer nodeGroupName: - description: NodeGroupName is the human friendly name of the node group - as defined in the Constellation configuration. + description: NodeGroupName is the human friendly name of the node + group as defined in the Constellation configuration. type: string nodeImage: description: NodeVersion is the name of the NodeVersion resource. @@ -77,43 +81,35 @@ spec: description: Conditions represent the latest available observations of an object's state. items: - description: "Condition contains details for one aspect of the current - state of this API Resource. --- This struct is intended for direct - use as an array at the field path .status.conditions. For example, - \n type FooStatus struct{ // Represents the observations of a - foo's current state. // Known .status.conditions.type are: \"Available\", - \"Progressing\", and \"Degraded\" // +patchMergeKey=type // +patchStrategy=merge - // +listType=map // +listMapKey=type Conditions []metav1.Condition - `json:\"conditions,omitempty\" patchStrategy:\"merge\" patchMergeKey:\"type\" - protobuf:\"bytes,1,rep,name=conditions\"` \n // other fields }" + description: Condition contains details for one aspect of the current + state of this API Resource. properties: lastTransitionTime: - description: lastTransitionTime is the last time the condition - transitioned from one status to another. This should be when - the underlying condition changed. If that is not known, then - using the time when the API field changed is acceptable. + description: |- + lastTransitionTime is the last time the condition transitioned from one status to another. + This should be when the underlying condition changed. If that is not known, then using the time when the API field changed is acceptable. format: date-time type: string message: - description: message is a human readable message indicating - details about the transition. This may be an empty string. + description: |- + message is a human readable message indicating details about the transition. + This may be an empty string. maxLength: 32768 type: string observedGeneration: - description: observedGeneration represents the .metadata.generation - that the condition was set based upon. For instance, if .metadata.generation - is currently 12, but the .status.conditions[x].observedGeneration - is 9, the condition is out of date with respect to the current - state of the instance. + description: |- + observedGeneration represents the .metadata.generation that the condition was set based upon. + For instance, if .metadata.generation is currently 12, but the .status.conditions[x].observedGeneration is 9, the condition is out of date + with respect to the current state of the instance. format: int64 minimum: 0 type: integer reason: - description: reason contains a programmatic identifier indicating - the reason for the condition's last transition. Producers - of specific condition types may define expected values and - meanings for this field, and whether the values are considered - a guaranteed API. The value should be a CamelCase string. + description: |- + reason contains a programmatic identifier indicating the reason for the condition's last transition. + Producers of specific condition types may define expected values and meanings for this field, + and whether the values are considered a guaranteed API. + The value should be a CamelCase string. This field may not be empty. maxLength: 1024 minLength: 1 @@ -128,10 +124,6 @@ spec: type: string type: description: type of condition in CamelCase or in foo.example.com/CamelCase. - --- Many .condition.type values are consistent across resources - like Available, but because arbitrary conditions can be useful - (see .node.status.conditions), the ability to deconflict is - important. The regex it matches is (dns1123SubdomainFmt/)?(qualifiedNameFmt) maxLength: 316 pattern: ^([a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*/)?(([A-Za-z0-9][-A-Za-z0-9_.]*)?[A-Za-z0-9])$ type: string diff --git a/operators/constellation-node-operator/config/rbac/role.yaml b/operators/constellation-node-operator/config/rbac/role.yaml index 8700132c4..a1f60ee8f 100644 --- a/operators/constellation-node-operator/config/rbac/role.yaml +++ b/operators/constellation-node-operator/config/rbac/role.yaml @@ -2,7 +2,6 @@ apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: - creationTimestamp: null name: manager-role rules: - apiGroups: @@ -12,6 +11,7 @@ rules: verbs: - get - list + - watch - apiGroups: - "" resources: @@ -57,6 +57,10 @@ rules: - update.edgeless.systems resources: - autoscalingstrategies + - joiningnodes + - nodeversions + - pendingnodes + - scalinggroups verbs: - create - delete @@ -69,38 +73,20 @@ rules: - update.edgeless.systems resources: - autoscalingstrategies/finalizers + - joiningnodes/finalizers + - nodeversions/finalizers + - pendingnodes/finalizers + - scalinggroups/finalizers verbs: - update - apiGroups: - update.edgeless.systems resources: - autoscalingstrategies/status - verbs: - - get - - patch - - update -- apiGroups: - - update.edgeless.systems - resources: - - joiningnodes - verbs: - - create - - delete - - get - - list - - patch - - update - - watch -- apiGroups: - - update.edgeless.systems - resources: - - joiningnodes/finalizers - verbs: - - update -- apiGroups: - - update.edgeless.systems - resources: - joiningnodes/status + - nodeversions/status + - pendingnodes/status + - scalinggroups/status verbs: - get - patch @@ -119,81 +105,3 @@ rules: - nodeversion/status verbs: - get -- apiGroups: - - update.edgeless.systems - resources: - - nodeversions - verbs: - - create - - delete - - get - - list - - patch - - update - - watch -- apiGroups: - - update.edgeless.systems - resources: - - nodeversions/finalizers - verbs: - - update -- apiGroups: - - update.edgeless.systems - resources: - - nodeversions/status - verbs: - - get - - patch - - update -- apiGroups: - - update.edgeless.systems - resources: - - pendingnodes - verbs: - - create - - delete - - get - - list - - patch - - update - - watch -- apiGroups: - - update.edgeless.systems - resources: - - pendingnodes/finalizers - verbs: - - update -- apiGroups: - - update.edgeless.systems - resources: - - pendingnodes/status - verbs: - - get - - patch - - update -- apiGroups: - - update.edgeless.systems - resources: - - scalinggroups - verbs: - - create - - delete - - get - - list - - patch - - update - - watch -- apiGroups: - - update.edgeless.systems - resources: - - scalinggroups/finalizers - verbs: - - update -- apiGroups: - - update.edgeless.systems - resources: - - scalinggroups/status - verbs: - - get - - patch - - update From f8a95de174a09d13d697ef314ef264035aad1b65 Mon Sep 17 00:00:00 2001 From: edgelessci <71088502+edgelessci@users.noreply.github.com> Date: Wed, 19 Feb 2025 08:28:08 +0100 Subject: [PATCH 115/311] image: update measurements and image version (#3655) Co-authored-by: edgelessci --- .../measurements/measurements_enterprise.go | 16 ++++++++-------- internal/config/image_enterprise.go | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/internal/attestation/measurements/measurements_enterprise.go b/internal/attestation/measurements/measurements_enterprise.go index 20dd083f9..58629919b 100644 --- a/internal/attestation/measurements/measurements_enterprise.go +++ b/internal/attestation/measurements/measurements_enterprise.go @@ -19,14 +19,14 @@ package measurements // revive:disable:var-naming var ( - aws_AWSNitroTPM = M{0: {Expected: []byte{0x73, 0x7f, 0x76, 0x7a, 0x12, 0xf5, 0x4e, 0x70, 0xee, 0xcb, 0xc8, 0x68, 0x40, 0x11, 0x32, 0x3a, 0xe2, 0xfe, 0x2d, 0xd9, 0xf9, 0x07, 0x85, 0x57, 0x79, 0x69, 0xd7, 0xa2, 0x01, 0x3e, 0x8c, 0x12}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x34, 0xa9, 0x9a, 0x43, 0xbe, 0x1a, 0xb3, 0x17, 0x60, 0xa2, 0xd8, 0xd3, 0x88, 0x2a, 0x00, 0x12, 0x94, 0x5a, 0x40, 0xb5, 0xe3, 0x0d, 0xb9, 0xea, 0x36, 0x98, 0x61, 0xef, 0xe9, 0x37, 0x1d, 0xf7}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x6e, 0xd2, 0x8e, 0x30, 0x71, 0x2d, 0xcb, 0xae, 0x05, 0xb5, 0xa3, 0x80, 0x7d, 0x98, 0xfa, 0x21, 0xdc, 0x2b, 0x45, 0x5c, 0x19, 0x8d, 0x74, 0x53, 0x0a, 0x55, 0x5d, 0xbd, 0xd1, 0x85, 0xc7, 0x7c}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x1b, 0x82, 0x9e, 0x7e, 0x0b, 0x10, 0x1d, 0x1c, 0x45, 0xe6, 0x41, 0x8f, 0x11, 0xc1, 0xfa, 0x1f, 0x17, 0xb6, 0xa6, 0x04, 0x5f, 0x91, 0x36, 0xbe, 0x8c, 0xc4, 0x2d, 0xfd, 0x52, 0x8c, 0xb2, 0xa1}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - aws_AWSSEVSNP = M{0: {Expected: []byte{0xd6, 0xdf, 0x85, 0x53, 0x58, 0xf5, 0xb1, 0x0f, 0x06, 0xf0, 0xfa, 0xb3, 0xf4, 0x08, 0xad, 0x26, 0xcd, 0x16, 0x5a, 0x29, 0x49, 0xba, 0xd6, 0x9e, 0x2c, 0xc7, 0x56, 0x92, 0x52, 0x9e, 0x66, 0x2a}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x8d, 0x02, 0x42, 0xb8, 0x80, 0xcc, 0xfb, 0x3a, 0x68, 0x6d, 0x50, 0x02, 0xce, 0xc0, 0x97, 0x30, 0xe9, 0x1e, 0x79, 0x8a, 0x66, 0x68, 0x31, 0xa1, 0x1c, 0xd8, 0x99, 0xc6, 0x47, 0x76, 0xa1, 0x76}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x4f, 0xb7, 0xcf, 0x7b, 0xf9, 0x8d, 0x88, 0x45, 0xaf, 0x2c, 0x34, 0x59, 0xd8, 0xff, 0xa5, 0xa1, 0xea, 0x47, 0x9a, 0x69, 0x2c, 0xee, 0xc5, 0xe8, 0x7f, 0xc0, 0xa5, 0xb1, 0x7c, 0xf7, 0x58, 0x20}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x54, 0xd7, 0x8d, 0x32, 0xdf, 0xd7, 0x7e, 0x3d, 0xae, 0x0b, 0x49, 0x81, 0x71, 0x5a, 0x98, 0x6b, 0x2f, 0xdc, 0x73, 0xdf, 0x76, 0xee, 0xa0, 0xdb, 0x8e, 0x32, 0x3f, 0x25, 0x51, 0x84, 0x0b, 0x0c}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - azure_AzureSEVSNP = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xd3, 0xa8, 0x3e, 0x38, 0xd8, 0x7b, 0xe3, 0x7c, 0xab, 0x5e, 0xc7, 0xf9, 0x59, 0x3b, 0x07, 0x50, 0xc4, 0x0d, 0xbb, 0x00, 0xca, 0x9e, 0x8e, 0xe0, 0x4d, 0xf9, 0x62, 0x04, 0xbb, 0x37, 0xbb, 0x1f}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x20, 0x05, 0x71, 0x3f, 0x2c, 0x01, 0xe0, 0xe3, 0xa8, 0x6c, 0x43, 0x48, 0x58, 0x35, 0xed, 0x8d, 0x7b, 0x82, 0xf0, 0xe1, 0x82, 0xbe, 0xef, 0x30, 0x32, 0x4a, 0xb4, 0x1c, 0x90, 0x65, 0xc2, 0xdd}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x48, 0x5f, 0xbf, 0x17, 0x38, 0xa0, 0xd0, 0x08, 0xe0, 0x08, 0x96, 0xa6, 0x40, 0xb2, 0x46, 0x23, 0x01, 0x44, 0x47, 0x41, 0x93, 0xaa, 0xbf, 0x61, 0xb0, 0x5a, 0xd7, 0x7f, 0xdc, 0x69, 0x5a, 0x92}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - azure_AzureTDX = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x06, 0x7c, 0x7f, 0x7d, 0x40, 0x0c, 0xa5, 0x94, 0xed, 0x8b, 0xe3, 0x5f, 0x6c, 0x0b, 0xe0, 0x6e, 0x2c, 0xd0, 0x1a, 0x7e, 0xbf, 0xd0, 0xab, 0xb8, 0x7c, 0x59, 0x99, 0x12, 0x2f, 0x65, 0xe2, 0xb8}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x32, 0x73, 0xf6, 0xd5, 0xdf, 0x54, 0x63, 0xdd, 0xf7, 0xef, 0x51, 0x62, 0x5a, 0xc4, 0x59, 0x0a, 0x89, 0xe6, 0x69, 0x66, 0xa3, 0xf1, 0x8a, 0x9c, 0x5c, 0x7e, 0xd3, 0x96, 0x3b, 0x97, 0xa8, 0x3e}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xf3, 0xbb, 0x03, 0x36, 0xdd, 0xc3, 0x13, 0x41, 0x89, 0x5a, 0xcf, 0x73, 0xaf, 0x2b, 0xf5, 0x7c, 0x15, 0x6e, 0x68, 0x39, 0x75, 0xf4, 0xe5, 0x09, 0x71, 0x4b, 0x0d, 0xc4, 0x1e, 0x71, 0x6e, 0x27}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + aws_AWSNitroTPM = M{0: {Expected: []byte{0x73, 0x7f, 0x76, 0x7a, 0x12, 0xf5, 0x4e, 0x70, 0xee, 0xcb, 0xc8, 0x68, 0x40, 0x11, 0x32, 0x3a, 0xe2, 0xfe, 0x2d, 0xd9, 0xf9, 0x07, 0x85, 0x57, 0x79, 0x69, 0xd7, 0xa2, 0x01, 0x3e, 0x8c, 0x12}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xba, 0xf2, 0x8b, 0xee, 0xcf, 0x9d, 0xdb, 0xf2, 0x3e, 0x88, 0x4e, 0xb0, 0x1c, 0x04, 0xd2, 0x51, 0x27, 0x98, 0xa0, 0x4d, 0xf6, 0x6c, 0x61, 0x69, 0xf0, 0x4e, 0x3e, 0xa2, 0x2d, 0xdb, 0x50, 0x65}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x3c, 0xb4, 0x2b, 0x91, 0x36, 0x55, 0xb6, 0xcb, 0xb4, 0x17, 0xa2, 0x4e, 0x75, 0x66, 0x93, 0x99, 0xdf, 0xc7, 0x9c, 0xf9, 0xad, 0x70, 0x52, 0xda, 0x21, 0x90, 0x1b, 0xc4, 0x25, 0x7d, 0xba, 0x9f}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x29, 0x81, 0xbb, 0x6e, 0x8b, 0xf8, 0xf5, 0x6f, 0x87, 0x56, 0x1a, 0xb4, 0xcf, 0x09, 0xe5, 0xb5, 0xdb, 0x6e, 0x9c, 0x66, 0x3b, 0xb9, 0x32, 0x55, 0x3d, 0x02, 0x75, 0x24, 0x62, 0x8c, 0x77, 0xf4}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + aws_AWSSEVSNP = M{0: {Expected: []byte{0xd6, 0xdf, 0x85, 0x53, 0x58, 0xf5, 0xb1, 0x0f, 0x06, 0xf0, 0xfa, 0xb3, 0xf4, 0x08, 0xad, 0x26, 0xcd, 0x16, 0x5a, 0x29, 0x49, 0xba, 0xd6, 0x9e, 0x2c, 0xc7, 0x56, 0x92, 0x52, 0x9e, 0x66, 0x2a}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x8f, 0xc1, 0x73, 0x73, 0x34, 0x3b, 0x1e, 0x10, 0xbf, 0x29, 0xa9, 0xb6, 0x2f, 0x89, 0x94, 0x28, 0x68, 0xe9, 0x5e, 0x1e, 0x9a, 0x30, 0xc8, 0xb7, 0xaa, 0x1a, 0x9f, 0x18, 0xa8, 0x8a, 0x64, 0x24}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xbd, 0x95, 0x55, 0x60, 0xce, 0x8c, 0xd3, 0x0a, 0x7b, 0x45, 0xf3, 0x83, 0xdb, 0xec, 0xa1, 0xfe, 0x10, 0xa9, 0x7d, 0xdf, 0x4e, 0x28, 0xc4, 0x40, 0x7f, 0xc4, 0x29, 0x31, 0x43, 0x7c, 0x4f, 0x49}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x01, 0xef, 0xf4, 0xfc, 0x65, 0x06, 0xee, 0x33, 0xc1, 0x35, 0xca, 0x8a, 0xaa, 0x30, 0xe4, 0xa7, 0xae, 0x39, 0x74, 0xcd, 0x6a, 0x17, 0x39, 0xef, 0xef, 0x24, 0x44, 0x48, 0x9a, 0xe5, 0xbe, 0x57}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + azure_AzureSEVSNP = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x43, 0xec, 0x54, 0xee, 0x84, 0x39, 0xf3, 0x81, 0xa1, 0xe6, 0x26, 0x9c, 0x85, 0x24, 0x4d, 0xf6, 0x6d, 0x82, 0x87, 0x8d, 0x31, 0x12, 0xf0, 0x6c, 0x5b, 0xe9, 0x68, 0x32, 0x0d, 0xb8, 0x65, 0x54}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x30, 0x43, 0x8d, 0x04, 0x35, 0xf2, 0x0b, 0xe6, 0x9d, 0xcd, 0x1f, 0x35, 0x12, 0x99, 0xa9, 0x09, 0x45, 0x2e, 0x1f, 0x02, 0xe5, 0x24, 0x13, 0x8a, 0xed, 0x57, 0xd7, 0x06, 0xe0, 0xdc, 0xdd, 0xdc}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x65, 0xc9, 0x0b, 0x46, 0x29, 0x13, 0x2d, 0x5d, 0xa1, 0x84, 0x83, 0x22, 0x3e, 0x53, 0xb7, 0xf5, 0xd5, 0x3b, 0x46, 0x61, 0xda, 0x1d, 0x70, 0xf5, 0xda, 0xea, 0xc0, 0xb6, 0x86, 0x70, 0x37, 0x69}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + azure_AzureTDX = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xb3, 0xc2, 0x0e, 0x50, 0x2a, 0x7e, 0xd8, 0x65, 0xbb, 0x2e, 0xdf, 0x9c, 0x28, 0x91, 0x14, 0x79, 0x9b, 0x4d, 0xed, 0x50, 0x2f, 0x96, 0x17, 0x22, 0xf2, 0xd5, 0xa5, 0x55, 0x03, 0xa4, 0xe7, 0x67}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xf4, 0x66, 0x7d, 0x8d, 0xa3, 0x8a, 0x03, 0x11, 0x8f, 0x80, 0xcb, 0x96, 0xe9, 0xe3, 0x01, 0x7a, 0xee, 0x22, 0xec, 0x7e, 0x74, 0xa3, 0x62, 0xb5, 0x43, 0x0a, 0x98, 0xb6, 0x7d, 0x35, 0xaa, 0x26}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xc9, 0x0e, 0x47, 0x9c, 0xbc, 0x3b, 0xe7, 0xd8, 0xf2, 0x35, 0xe2, 0x0b, 0xc3, 0xe1, 0xc5, 0xea, 0xe3, 0x5a, 0x27, 0xc0, 0xb6, 0xbb, 0xae, 0xe0, 0xee, 0x39, 0x69, 0x72, 0xfe, 0x00, 0x30, 0xad}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} azure_AzureTrustedLaunch M - gcp_GCPSEVES = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x46, 0xdb, 0xf2, 0x1e, 0x37, 0xfb, 0xcc, 0xd1, 0x6e, 0x69, 0x56, 0x7b, 0x33, 0xd6, 0xf5, 0x05, 0x05, 0x86, 0xb8, 0x90, 0xb2, 0x96, 0xf8, 0x01, 0x7c, 0xce, 0xfe, 0x94, 0xbb, 0x97, 0xc1, 0x24}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xc7, 0xf7, 0xd9, 0x61, 0x3e, 0x36, 0xfc, 0x25, 0x66, 0xf0, 0xec, 0xe8, 0x6b, 0x21, 0x02, 0x5f, 0x80, 0x2c, 0x27, 0x07, 0xe2, 0x51, 0x26, 0x1d, 0x72, 0xae, 0x07, 0xdc, 0x2d, 0x15, 0x66, 0x7d}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xc0, 0x25, 0x39, 0x3e, 0x36, 0x55, 0x29, 0x4a, 0x1d, 0xd5, 0xe0, 0x86, 0x40, 0xd3, 0x72, 0xcd, 0x18, 0x26, 0xc1, 0xa1, 0x5c, 0xec, 0x95, 0xd3, 0x4d, 0x7d, 0x23, 0xaa, 0x64, 0x19, 0xec, 0x91}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - gcp_GCPSEVSNP = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x70, 0xea, 0xb1, 0xc6, 0x91, 0x03, 0xe1, 0x01, 0xa0, 0x2e, 0x35, 0x2a, 0x56, 0x2c, 0x12, 0x88, 0x6e, 0xc6, 0x4b, 0xfb, 0x3f, 0x18, 0x17, 0x9c, 0x76, 0x28, 0xe4, 0x12, 0x04, 0x70, 0xeb, 0x7e}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x56, 0x9d, 0xee, 0x62, 0x82, 0x64, 0x2f, 0x43, 0xe2, 0x3c, 0x22, 0x45, 0x47, 0x95, 0x99, 0x7a, 0x3b, 0xf7, 0x32, 0x57, 0x0f, 0xd4, 0x95, 0xbc, 0x30, 0x2c, 0xa1, 0xc9, 0xa8, 0x6c, 0xc5, 0x84}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xd3, 0xe0, 0x2b, 0x3b, 0x43, 0x63, 0xf4, 0x7e, 0x86, 0xc8, 0x92, 0x18, 0xa8, 0x2d, 0xed, 0x56, 0xa4, 0x8a, 0xdf, 0x3c, 0x5d, 0x86, 0x11, 0x3c, 0xe5, 0xad, 0xbd, 0xff, 0x51, 0x6a, 0x7f, 0x09}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - openstack_QEMUVTPM = M{4: {Expected: []byte{0x15, 0x8c, 0x3d, 0x42, 0x0a, 0xb0, 0xac, 0x53, 0xd6, 0xb6, 0x4c, 0xe9, 0xf1, 0xc7, 0xd1, 0x91, 0xce, 0x5b, 0xeb, 0xc8, 0x62, 0x10, 0xf9, 0x71, 0x9e, 0x5b, 0xcb, 0x8a, 0x25, 0xeb, 0x57, 0xcb}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x96, 0xaf, 0x14, 0xd1, 0x8f, 0x51, 0xd3, 0x43, 0x9d, 0xa0, 0xa7, 0xd9, 0x3a, 0x7c, 0x5a, 0xa6, 0xd2, 0x63, 0x45, 0xe4, 0xdf, 0x72, 0x6a, 0xc6, 0x3b, 0x51, 0x7d, 0x4c, 0x38, 0xb7, 0xfe, 0x22}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xd0, 0x59, 0x07, 0x0f, 0x84, 0x96, 0x41, 0x9f, 0x76, 0xea, 0xce, 0x81, 0x05, 0x88, 0xd9, 0x6d, 0x68, 0x53, 0x25, 0xc7, 0x5f, 0x2a, 0x27, 0x1b, 0x67, 0xe4, 0x4a, 0x88, 0xb7, 0xaa, 0x78, 0xe4}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + gcp_GCPSEVES = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x20, 0x65, 0x27, 0x3c, 0xf2, 0x50, 0x10, 0x07, 0x74, 0x18, 0x34, 0x13, 0x2b, 0x78, 0x60, 0x1a, 0xb2, 0x32, 0x48, 0xa5, 0xc2, 0x40, 0x9d, 0xa5, 0xd8, 0x6f, 0x92, 0x35, 0x19, 0xfb, 0x62, 0x5e}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xea, 0xe5, 0xc7, 0x22, 0xdd, 0x9c, 0x41, 0x6f, 0x74, 0xd9, 0x8b, 0x65, 0x74, 0xd7, 0xfd, 0xc1, 0xc8, 0xbf, 0xb7, 0xf3, 0xf8, 0x13, 0x49, 0x36, 0xf1, 0x7d, 0xf5, 0x1c, 0xdb, 0xa6, 0x26, 0x31}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x44, 0xd3, 0x46, 0x4e, 0x4e, 0x16, 0xfb, 0x4d, 0x81, 0xeb, 0xb2, 0x44, 0xdc, 0xbe, 0x10, 0x90, 0x51, 0xad, 0xe1, 0x0c, 0x37, 0x18, 0xfc, 0x80, 0xa0, 0x43, 0x5b, 0xd2, 0xa9, 0x1f, 0x04, 0xd3}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + gcp_GCPSEVSNP = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x88, 0x45, 0x83, 0x61, 0xf6, 0xa1, 0x40, 0x4b, 0x39, 0xf9, 0xf1, 0x28, 0x31, 0xc5, 0xc7, 0xf3, 0x86, 0x71, 0xb8, 0x19, 0xde, 0x62, 0x7d, 0x25, 0x15, 0x85, 0xc5, 0x56, 0x0a, 0x37, 0xde, 0x85}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x0f, 0xa6, 0xa1, 0x0c, 0x15, 0xea, 0xb5, 0x3b, 0x4c, 0xfb, 0x5d, 0x60, 0x22, 0x72, 0x01, 0x48, 0x18, 0xb5, 0xbd, 0x66, 0x20, 0x4b, 0x80, 0x87, 0x32, 0x9b, 0xba, 0x98, 0xd7, 0xe3, 0xf0, 0x12}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x1c, 0x49, 0x07, 0xf4, 0xd3, 0x70, 0x07, 0x05, 0x34, 0xf8, 0x99, 0x12, 0x91, 0x40, 0xfc, 0x62, 0xf7, 0xf2, 0xf4, 0x2e, 0x08, 0x6a, 0xa3, 0x76, 0xc1, 0xef, 0xc0, 0x28, 0x20, 0xb9, 0xfd, 0xb8}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + openstack_QEMUVTPM = M{4: {Expected: []byte{0x51, 0x88, 0xc0, 0x51, 0xe6, 0xdf, 0x1a, 0x94, 0x8b, 0x03, 0xd7, 0xf1, 0x05, 0xdc, 0xbe, 0x9c, 0x4b, 0x2c, 0x1b, 0x57, 0x81, 0xda, 0x79, 0x05, 0xe3, 0x45, 0x2e, 0x72, 0x45, 0xcc, 0x2b, 0xd2}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x28, 0x84, 0x34, 0x60, 0x2d, 0x46, 0xe6, 0xba, 0xa4, 0x0b, 0xdf, 0x13, 0xe1, 0xfa, 0x25, 0xe8, 0xc1, 0x40, 0x7c, 0x85, 0xb0, 0x49, 0xda, 0xc3, 0x46, 0x8d, 0xb6, 0xb5, 0x0f, 0xb0, 0x7f, 0x09}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x77, 0x10, 0x7a, 0xf5, 0xbc, 0x66, 0x2e, 0x2a, 0x6b, 0x35, 0xbe, 0x7c, 0xab, 0x8d, 0x74, 0x5a, 0x98, 0x6a, 0x85, 0xf9, 0xe2, 0x19, 0x7e, 0xfd, 0x0b, 0xef, 0xa2, 0x25, 0x87, 0xc4, 0x94, 0x0d}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} qemu_QEMUTDX M - qemu_QEMUVTPM = M{4: {Expected: []byte{0xd7, 0x23, 0x15, 0x97, 0x74, 0x6e, 0x51, 0x08, 0xec, 0xcc, 0xd3, 0x24, 0x7a, 0xe9, 0xad, 0x22, 0xdf, 0x84, 0x0a, 0x6f, 0xe0, 0xc3, 0x07, 0x19, 0x64, 0x72, 0xe5, 0xc7, 0x3c, 0x14, 0xe5, 0x72}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xe1, 0xd7, 0x2c, 0x0b, 0x93, 0xc0, 0x2d, 0xc2, 0x96, 0x85, 0x1b, 0x74, 0xe0, 0x6d, 0x49, 0xc6, 0x77, 0xd7, 0xd1, 0x06, 0x32, 0xcd, 0xa3, 0xd2, 0x2a, 0xcb, 0x3f, 0x8b, 0x3e, 0xc5, 0x1d, 0xcc}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x39, 0x14, 0x0c, 0x92, 0x55, 0x19, 0x74, 0xa6, 0xdd, 0x6b, 0xa0, 0x19, 0x26, 0x32, 0xc9, 0xc4, 0xc8, 0xa2, 0x8f, 0xa0, 0x65, 0x81, 0xa7, 0x25, 0xeb, 0xf7, 0x39, 0x93, 0xcb, 0xed, 0x2f, 0xce}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + qemu_QEMUVTPM = M{4: {Expected: []byte{0x8e, 0xdd, 0x62, 0x20, 0x84, 0xba, 0xd7, 0x0a, 0x25, 0xfc, 0x70, 0xc8, 0xd7, 0x63, 0xf8, 0xaa, 0xaa, 0x15, 0xda, 0xf5, 0xb3, 0xe3, 0xfe, 0x35, 0x11, 0x10, 0xe2, 0x6a, 0x60, 0x23, 0x0e, 0xc1}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xa6, 0x43, 0xac, 0x0c, 0x64, 0x73, 0x9c, 0x8c, 0x16, 0xa3, 0x82, 0x5c, 0xc1, 0xaa, 0x8e, 0x30, 0x11, 0xb5, 0x88, 0xdd, 0x6f, 0x88, 0xe7, 0x12, 0x13, 0xf9, 0x93, 0x53, 0xf1, 0xc7, 0x8e, 0xa2}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x7e, 0x1f, 0x8e, 0x89, 0xa1, 0xed, 0x17, 0xa2, 0x5a, 0x1e, 0x06, 0xc0, 0x08, 0x56, 0xa4, 0xc0, 0x0f, 0x2b, 0x2a, 0xf6, 0x7b, 0x53, 0xe6, 0x01, 0xff, 0x50, 0xa2, 0x4e, 0xd8, 0x48, 0xf4, 0xbe}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} ) diff --git a/internal/config/image_enterprise.go b/internal/config/image_enterprise.go index 5a4b45d6b..1fadfcb86 100644 --- a/internal/config/image_enterprise.go +++ b/internal/config/image_enterprise.go @@ -10,5 +10,5 @@ package config const ( // defaultImage is the default image to use. - defaultImage = "ref/main/stream/nightly/v2.21.0-pre.0.20250213200458-df2383ab0968" + defaultImage = "ref/main/stream/nightly/v2.21.0-pre.0.20250218110656-758191ad4268" ) From 99a81cd24676083358ac97e21c224b704fe03190 Mon Sep 17 00:00:00 2001 From: 3u13r Date: Wed, 19 Feb 2025 11:41:10 +0100 Subject: [PATCH 116/311] versionsapi: canonicalize ref in version constructors (#3652) * versionsapi: canonicalize ref in version constructors Co-authored-by: 3u13r Signed-off-by: Paul Meyer * hack/cli-k8s-compat: canonicalize ref --------- Signed-off-by: Paul Meyer Co-authored-by: Paul Meyer --- hack/cli-k8s-compatibility/main.go | 2 +- internal/api/versionsapi/cli/add.go | 95 +++++------------ internal/api/versionsapi/version.go | 9 +- internal/api/versionsapi/version_test.go | 125 +++++++++++++++++++++++ 4 files changed, 156 insertions(+), 75 deletions(-) diff --git a/hack/cli-k8s-compatibility/main.go b/hack/cli-k8s-compatibility/main.go index 5361fcdf4..af5e6ca97 100644 --- a/hack/cli-k8s-compatibility/main.go +++ b/hack/cli-k8s-compatibility/main.go @@ -45,7 +45,7 @@ func main() { } cliInfo := versionsapi.CLIInfo{ - Ref: *refFlag, + Ref: versionsapi.CanonicalizeRef(*refFlag), Stream: *streamFlag, Version: *versionFlag, Kubernetes: []string{}, diff --git a/internal/api/versionsapi/cli/add.go b/internal/api/versionsapi/cli/add.go index f1a6fc4fd..c28505c79 100644 --- a/internal/api/versionsapi/cli/add.go +++ b/internal/api/versionsapi/cli/add.go @@ -16,7 +16,6 @@ import ( "github.com/edgelesssys/constellation/v2/internal/api/versionsapi" "github.com/edgelesssys/constellation/v2/internal/logger" "github.com/spf13/cobra" - "golang.org/x/mod/semver" ) func newAddCmd() *cobra.Command { @@ -53,19 +52,8 @@ func runAdd(cmd *cobra.Command, _ []string) (retErr error) { return err } log := logger.NewTextLogger(flags.logLevel) - log.Debug("Using flags", "dryRun", flags.dryRun, "kind", flags.kind, "latest", flags.latest, "ref", flags.ref, - "release", flags.release, "stream", flags.stream, "version", flags.version) - - log.Debug("Validating flags") - if err := flags.validate(log); err != nil { - return err - } - - log.Debug("Creating version struct") - ver, err := versionsapi.NewVersion(flags.ref, flags.stream, flags.version, flags.kind) - if err != nil { - return fmt.Errorf("creating version: %w", err) - } + log.Debug("Using flags", "dryRun", flags.dryRun, "kind", flags.version.Kind(), "latest", flags.latest, "ref", flags.version.Ref(), + "stream", flags.version.Stream(), "version", flags.version.Version()) log.Debug("Creating versions API client") client, clientClose, err := versionsapi.NewClient(cmd.Context(), flags.region, flags.bucket, flags.distributionID, flags.dryRun, log) @@ -80,27 +68,27 @@ func runAdd(cmd *cobra.Command, _ []string) (retErr error) { }() log.Info("Adding version") - if err := ensureVersion(cmd.Context(), client, flags.kind, ver, versionsapi.GranularityMajor, log); err != nil { + if err := ensureVersion(cmd.Context(), client, flags.version, versionsapi.GranularityMajor, log); err != nil { return err } - if err := ensureVersion(cmd.Context(), client, flags.kind, ver, versionsapi.GranularityMinor, log); err != nil { + if err := ensureVersion(cmd.Context(), client, flags.version, versionsapi.GranularityMinor, log); err != nil { return err } if flags.latest { - if err := updateLatest(cmd.Context(), client, flags.kind, ver, log); err != nil { + if err := updateLatest(cmd.Context(), client, flags.version, log); err != nil { return fmt.Errorf("setting latest version: %w", err) } } - log.Info(fmt.Sprintf("List major->minor URL: %s", ver.ListURL(versionsapi.GranularityMajor))) - log.Info(fmt.Sprintf("List minor->patch URL: %s", ver.ListURL(versionsapi.GranularityMinor))) + log.Info(fmt.Sprintf("List major->minor URL: %s", flags.version.ListURL(versionsapi.GranularityMajor))) + log.Info(fmt.Sprintf("List minor->patch URL: %s", flags.version.ListURL(versionsapi.GranularityMinor))) return nil } -func ensureVersion(ctx context.Context, client *versionsapi.Client, kind versionsapi.VersionKind, ver versionsapi.Version, gran versionsapi.Granularity, +func ensureVersion(ctx context.Context, client *versionsapi.Client, ver versionsapi.Version, gran versionsapi.Granularity, log *slog.Logger, ) error { verListReq := versionsapi.List{ @@ -108,7 +96,7 @@ func ensureVersion(ctx context.Context, client *versionsapi.Client, kind version Stream: ver.Stream(), Granularity: gran, Base: ver.WithGranularity(gran), - Kind: kind, + Kind: ver.Kind(), } verList, err := client.FetchVersionList(ctx, verListReq) var notFoundErr *apiclient.NotFoundError @@ -140,11 +128,11 @@ func ensureVersion(ctx context.Context, client *versionsapi.Client, kind version return nil } -func updateLatest(ctx context.Context, client *versionsapi.Client, kind versionsapi.VersionKind, ver versionsapi.Version, log *slog.Logger) error { +func updateLatest(ctx context.Context, client *versionsapi.Client, ver versionsapi.Version, log *slog.Logger) error { latest := versionsapi.Latest{ Ref: ver.Ref(), Stream: ver.Stream(), - Kind: kind, + Kind: ver.Kind(), } latest, err := client.FetchVersionLatest(ctx, latest) var notFoundErr *apiclient.NotFoundError @@ -164,7 +152,7 @@ func updateLatest(ctx context.Context, client *versionsapi.Client, kind versions Ref: ver.Ref(), Stream: ver.Stream(), Version: ver.Version(), - Kind: kind, + Kind: ver.Kind(), } if err := client.UpdateVersionLatest(ctx, latest); err != nil { return fmt.Errorf("updating latest version: %w", err) @@ -174,60 +162,20 @@ func updateLatest(ctx context.Context, client *versionsapi.Client, kind versions } type addFlags struct { - version string - stream string - ref string - release bool + version versionsapi.Version latest bool dryRun bool region string bucket string distributionID string - kind versionsapi.VersionKind logLevel slog.Level } -func (f *addFlags) validate(log *slog.Logger) error { - if !semver.IsValid(f.version) { - return fmt.Errorf("version %q is not a valid semantic version", f.version) - } - if semver.Canonical(f.version) != f.version { - return fmt.Errorf("version %q is not a canonical semantic version", f.version) - } - - if f.ref == "" && !f.release { - return fmt.Errorf("either --ref or --release must be set") - } - - if f.kind == versionsapi.VersionKindUnknown { - return fmt.Errorf("unknown version kind %q", f.kind) - } - - if f.release { - log.Debug(fmt.Sprintf("Setting ref to %q, as release flag is set", versionsapi.ReleaseRef)) - f.ref = versionsapi.ReleaseRef - } else { - log.Debug("Setting latest to true, as release flag is not set") - f.latest = true // always set latest for non-release versions - } - - if err := versionsapi.ValidateRef(f.ref); err != nil { - return fmt.Errorf("invalid ref %w", err) - } - - if err := versionsapi.ValidateStream(f.ref, f.stream); err != nil { - return fmt.Errorf("invalid stream %w", err) - } - - return nil -} - func parseAddFlags(cmd *cobra.Command) (addFlags, error) { ref, err := cmd.Flags().GetString("ref") if err != nil { return addFlags{}, err } - ref = versionsapi.CanonicalizeRef(ref) stream, err := cmd.Flags().GetString("stream") if err != nil { return addFlags{}, err @@ -274,17 +222,24 @@ func parseAddFlags(cmd *cobra.Command) (addFlags, error) { return addFlags{}, err } + if release { + ref = versionsapi.ReleaseRef + } else { + latest = true // always set latest for non-release versions + } + + ver, err := versionsapi.NewVersion(ref, stream, version, kind) + if err != nil { + return addFlags{}, fmt.Errorf("creating version: %w", err) + } + return addFlags{ - version: version, - stream: stream, - ref: versionsapi.CanonicalizeRef(ref), - release: release, + version: ver, latest: latest, dryRun: dryRun, region: region, bucket: bucket, distributionID: distributionID, logLevel: logLevel, - kind: kind, }, nil } diff --git a/internal/api/versionsapi/version.go b/internal/api/versionsapi/version.go index 12d1e8100..180c27e5f 100644 --- a/internal/api/versionsapi/version.go +++ b/internal/api/versionsapi/version.go @@ -41,7 +41,7 @@ type Version struct { // NewVersion creates a new Version object and validates it. func NewVersion(ref, stream, version string, kind VersionKind) (Version, error) { ver := Version{ - ref: ref, + ref: CanonicalizeRef(ref), stream: stream, version: version, kind: kind, @@ -62,7 +62,7 @@ func NewVersionFromShortPath(shortPath string, kind VersionKind) (Version, error } ver := Version{ - ref: ref, + ref: ref, // Canonicalized by parseShortPath. stream: stream, version: version, kind: kind, @@ -331,7 +331,7 @@ func CanonicalizeRef(ref string) string { canRef := notAZ09Regexp.ReplaceAllString(ref, "-") if canRef == ReleaseRef { - return "" // No ref should be cannonicalized to the release ref. + return "" // No ref should be canonicalized to the release ref. } return canRef @@ -401,7 +401,7 @@ func MeasurementURL(version Version) (measurementURL, signatureURL *url.URL, err } var ( - shortPathRegex = regexp.MustCompile(`^ref/([a-zA-Z0-9-]+)/stream/([a-zA-Z0-9-]+)/([a-zA-Z0-9.-]+)$`) + shortPathRegex = regexp.MustCompile(`^ref/([^/]+)/stream/([a-zA-Z0-9-]+)/([a-zA-Z0-9.-]+)$`) shortPathReleaseRegex = regexp.MustCompile(`^stream/([a-zA-Z0-9-]+)/([a-zA-Z0-9.-]+)$`) ) @@ -422,6 +422,7 @@ func parseShortPath(shortPath string) (ref, stream, version string, err error) { if shortPathRegex.MatchString(shortPath) { matches := shortPathRegex.FindStringSubmatch(shortPath) ref := matches[1] + ref = CanonicalizeRef(ref) if err := ValidateRef(ref); err != nil { return "", "", "", err } diff --git a/internal/api/versionsapi/version_test.go b/internal/api/versionsapi/version_test.go index 25f0f8ce0..66e48d2b9 100644 --- a/internal/api/versionsapi/version_test.go +++ b/internal/api/versionsapi/version_test.go @@ -16,6 +16,111 @@ import ( "github.com/edgelesssys/constellation/v2/internal/constants" ) +func TestNewVersion(t *testing.T) { + testCases := map[string]struct { + ref string + stream string + version string + kind VersionKind + wantVer Version + wantErr bool + }{ + "stable release image": { + ref: ReleaseRef, + stream: "stable", + version: "v9.9.9", + kind: VersionKindImage, + wantVer: Version{ + ref: ReleaseRef, + stream: "stable", + version: "v9.9.9", + kind: VersionKindImage, + }, + }, + "release debug image": { + ref: ReleaseRef, + stream: "debug", + version: "v9.9.9", + kind: VersionKindImage, + wantVer: Version{ + ref: ReleaseRef, + stream: "debug", + version: "v9.9.9", + kind: VersionKindImage, + }, + }, + "stable release cli": { + ref: ReleaseRef, + stream: "stable", + version: "v9.9.9", + kind: VersionKindCLI, + wantVer: Version{ + ref: ReleaseRef, + stream: "stable", + version: "v9.9.9", + kind: VersionKindCLI, + }, + }, + "release debug cli": { + ref: ReleaseRef, + stream: "debug", + version: "v9.9.9", + kind: VersionKindCLI, + wantVer: Version{ + ref: ReleaseRef, + stream: "debug", + version: "v9.9.9", + kind: VersionKindCLI, + }, + }, + "unknown kind": { + ref: ReleaseRef, + stream: "debug", + version: "v9.9.9", + kind: VersionKindUnknown, + wantErr: true, + }, + "non-release ref as input": { + ref: "working-branch", + stream: "debug", + version: "v9.9.9", + kind: VersionKindImage, + wantVer: Version{ + ref: "working-branch", + stream: "debug", + version: "v9.9.9", + kind: VersionKindImage, + }, + }, + "non-canonical ref as input": { + ref: "testing-1.23", + stream: "debug", + version: "v9.9.9", + kind: VersionKindImage, + wantVer: Version{ + ref: "testing-1-23", + stream: "debug", + version: "v9.9.9", + kind: VersionKindImage, + }, + }, + } + + for name, tc := range testCases { + t.Run(name, func(t *testing.T) { + assert := assert.New(t) + + ver, err := NewVersion(tc.ref, tc.stream, tc.version, tc.kind) + if tc.wantErr { + assert.Error(err) + return + } + assert.NoError(err) + assert.Equal(tc.wantVer, ver) + }) + } +} + func TestNewVersionFromShortPath(t *testing.T) { testCases := map[string]struct { path string @@ -78,6 +183,26 @@ func TestNewVersionFromShortPath(t *testing.T) { kind: VersionKindCLI, wantErr: true, }, + "non-release ref as input": { + path: "ref/working-branch/stream/debug/v9.9.9", + kind: VersionKindImage, + wantVer: Version{ + ref: "working-branch", + stream: "debug", + version: "v9.9.9", + kind: VersionKindImage, + }, + }, + "non-canonical ref as input": { + path: "ref/testing-1.23/stream/debug/v9.9.9", + kind: VersionKindImage, + wantVer: Version{ + ref: "testing-1-23", + stream: "debug", + version: "v9.9.9", + kind: VersionKindImage, + }, + }, } for name, tc := range testCases { From 148cb1e1507a7689f81c2e83c65202080a002b6b Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 21 Feb 2025 11:33:25 +0100 Subject: [PATCH 117/311] deps: update Terraform dependencies (#3637) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .../vpn/on-prem-terraform/.terraform.lock.hcl | 48 +++++++-------- dev-docs/howto/vpn/on-prem-terraform/main.tf | 2 +- .../azure-terraform/.terraform.lock.hcl | 48 +++++++-------- .../miniconstellation/azure-terraform/main.tf | 2 +- e2e/miniconstellation/.terraform.lock.hcl | 48 +++++++-------- e2e/miniconstellation/main.tf | 2 +- .../examples/full/aws/main.tf | 2 +- .../examples/full/azure/main.tf | 2 +- .../examples/full/gcp/main.tf | 2 +- .../examples/full/stackit/main.tf | 2 +- .../infrastructure/aws/.terraform.lock.hcl | 60 +++++++++---------- terraform/infrastructure/aws/main.tf | 2 +- .../aws/modules/instance_group/main.tf | 2 +- .../aws/modules/jump_host/main.tf | 2 +- .../aws/modules/load_balancer_target/main.tf | 2 +- .../aws/modules/public_private_subnet/main.tf | 2 +- .../infrastructure/azure/.terraform.lock.hcl | 48 +++++++-------- terraform/infrastructure/azure/main.tf | 2 +- .../modules/load_balancer_backend/main.tf | 2 +- .../azure/modules/scale_set/main.tf | 2 +- .../infrastructure/gcp/.terraform.lock.hcl | 48 +++++++-------- terraform/infrastructure/gcp/main.tf | 2 +- .../gcp/modules/instance_group/main.tf | 2 +- .../modules/internal_load_balancer/main.tf | 2 +- .../gcp/modules/jump_host/main.tf | 2 +- .../gcp/modules/loadbalancer/main.tf | 2 +- .../iam/aws/.terraform.lock.hcl | 60 +++++++++---------- terraform/infrastructure/iam/aws/main.tf | 2 +- .../iam/azure/.terraform.lock.hcl | 48 +++++++-------- terraform/infrastructure/iam/azure/main.tf | 2 +- .../iam/gcp/.terraform.lock.hcl | 48 +++++++-------- terraform/infrastructure/iam/gcp/main.tf | 2 +- .../openstack/.terraform.lock.hcl | 60 +++++++++---------- terraform/infrastructure/openstack/main.tf | 2 +- .../modules/stackit_loadbalancer/main.tf | 2 +- 35 files changed, 283 insertions(+), 283 deletions(-) diff --git a/dev-docs/howto/vpn/on-prem-terraform/.terraform.lock.hcl b/dev-docs/howto/vpn/on-prem-terraform/.terraform.lock.hcl index 26584ea56..8294746f1 100644 --- a/dev-docs/howto/vpn/on-prem-terraform/.terraform.lock.hcl +++ b/dev-docs/howto/vpn/on-prem-terraform/.terraform.lock.hcl @@ -2,32 +2,32 @@ # Manual edits may be lost in future updates. provider "registry.terraform.io/hashicorp/azurerm" { - version = "4.16.0" - constraints = "4.16.0" + version = "4.20.0" + constraints = "4.20.0" hashes = [ - "h1:5aUNrEyEto0kuqvVlot0oJIfjZvufkaVpBLFRAHKYEk=", - "h1:7e25Wr4cpUvlAcwL+9ZOeeA1xha84LqTZNviDaVQFlo=", - "h1:8hK4uDEChFAWE9MvC+/HBB4WUkhJdedn7Q4pLJEQDl4=", - "h1:HZdmFPnC/+x6si15pq4rGYv/1TrCcyQXLnDMqq1SONw=", - "h1:UNZga7kYMfYfDHmuP6LvHmJNXlb3fyvRY1tA9ol6yY4=", - "h1:ZJgJLXK4nZKfj1z2TIKCKa+7Jt+p1G5Mwty2PTF7Tso=", - "h1:iTxbOUuean5hkvi0xyxU+UXK5HT3DfxZYumlJHphCIw=", - "h1:kZJbZZTpZVW6rfj0wt4I7VFekUEDD5CRa1sAP6wrwGI=", - "h1:uIzu9HMGN1ySZ1s+iYCKY9UqsgCjgH05tnBg1DgHtV4=", - "h1:uulWiJ93kZmKKh6/EtHktJQ901npRmTb/ao7oTP402w=", - "h1:zQ3svnDlwO7XtuXurLKLanW7arcRbFmw/pUd1DzLuEU=", - "zh:2035e461a94bd4180557a06f8e56f228a8a035608d0dac4d08e5870cf9265276", - "zh:3f15778a22ef1b9d0fa28670e5ea6ef1094b0be2533f43f350a2ef15d471b353", - "zh:4f1a4d03b008dd958bcd6bf82cf088fbaa9c121be2fd35e10e6b06c6e8f6aaa1", - "zh:5859f31c342364e849b4f8c437a46f33e927fa820244d0732b8d2ec74a95712d", - "zh:693d0f15512ca8c6b5e999b3a7551503feb06b408b3836bc6a6403e518b9ddab", - "zh:7f4912bec5b04f5156935292377c12484c13582151eb3c2555df409a7e5fb6e0", - "zh:bb9a509497f3a131c52fac32348919bf1b9e06c69a65f24607b03f7b56fb47b6", - "zh:c1b0c64e49ac591fd038ad71e71403ff71c07476e27e8da718c29f0028ea6d0d", - "zh:dd4ca432ee14eb0bb0cdc0bb463c8675b8ef02497be870a20d8dfee3e7fe52b3", - "zh:df58bb7fea984d2b11709567842ca4d55b3f24e187aa6be99e3677f55cbbe7da", + "h1:/zBU/N0BTzGRlCUTnFvYg8UiD7Bh4HryW3y3AVDROjc=", + "h1:8TynqZl/QvhZiutnNk9uJZliWb20c9G+G8bGtTiliXI=", + "h1:BZDq7lDdLTYgIeAsLaiXLn8qycoR9D+NFs/OaC6LqNs=", + "h1:ELnu4gb15QAtc1RurC1H6A5OmV3zILizqbuL8kwUEmo=", + "h1:EMP1r+hGjE4zwj31RnVYEu0CLh3x7QSZ+4Z1ysVeqyM=", + "h1:O7hZA85M9/G5LZt+m0bppCinoyp8C346JpI+QnMjYVo=", + "h1:RAigruLqw4uLPyHtFnrgEsYNoZZG/sN+N1waujuiE6w=", + "h1:iWgZaQbV+/YXmO1+47R82zKF6ozCN8nnwLchYRiBtMo=", + "h1:m0gw9qg+hu43PlWDZuTKCFGp0SvBJIv338lIHOqLZmU=", + "h1:qMMFID97Se3U3dxypUF6edxz6TJG/WQfwO1mwOd3ze4=", + "h1:xyhSZmLLirjEN7lmrh4pdM6fOhaA0yWpHUgXdx69vV4=", + "zh:0d29f06abed90da7b943690244420fe1de3e28d4c6de0db441f1af2aa91ea6b8", + "zh:2345e07e91dfec9af3df25fd5119d3a09f91e37ca10af30a344f7b3c297e9ad8", + "zh:42d77650df0238333bcce5da91b4f3d62e54b1ed456f58a9c913270d80a70262", + "zh:43ce137f2644769ceada99a2c815c9c30807e42f61f2f6ce60869411217375f9", + "zh:5e4d8f6a5212f6b7ba29846a2ff328214c7f983ce772196f8e6721edcefd4c59", + "zh:69613d671884fc568a075359e2920d7c19e6d588717b4532b90fb4a4ca8aabd0", + "zh:827ca4fcc25958c731677cb1d87cb09764e3a24ae4117fd9776429341fcdeabe", + "zh:8fad25f949dff7c6f40ea22b13a8b4de6ea0de3c5a975c4a3281529e4797e897", + "zh:b3d175e2725fe38f2a71d5fb346a9d4ff70d449a9d229c95c24f88e764dd2d47", + "zh:c53f3fef67aa64664c85bb8603b0a9730a267a76d7d84ceae16416de7ccb2437", "zh:f569b65999264a9416862bca5cd2a6177d94ccb0424f3a4ef424428912b9cb3c", - "zh:f7fb37704da50c096f9c7c25e8a95fe73ce1d3c5aab0d616d506f07bc5cfcdd8", + "zh:f7d9ff06344547232e6c84bc3f6bf9c29cf978ba7cd585c10f4c3361a4b81f22", ] } diff --git a/dev-docs/howto/vpn/on-prem-terraform/main.tf b/dev-docs/howto/vpn/on-prem-terraform/main.tf index ab95b15c0..3a2b402e2 100644 --- a/dev-docs/howto/vpn/on-prem-terraform/main.tf +++ b/dev-docs/howto/vpn/on-prem-terraform/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { azurerm = { source = "hashicorp/azurerm" - version = "4.16.0" + version = "4.20.0" } random = { source = "hashicorp/random" diff --git a/dev-docs/miniconstellation/azure-terraform/.terraform.lock.hcl b/dev-docs/miniconstellation/azure-terraform/.terraform.lock.hcl index 475defc00..636f19c06 100644 --- a/dev-docs/miniconstellation/azure-terraform/.terraform.lock.hcl +++ b/dev-docs/miniconstellation/azure-terraform/.terraform.lock.hcl @@ -2,32 +2,32 @@ # Manual edits may be lost in future updates. provider "registry.terraform.io/hashicorp/azurerm" { - version = "4.16.0" - constraints = "4.16.0" + version = "4.20.0" + constraints = "4.20.0" hashes = [ - "h1:5aUNrEyEto0kuqvVlot0oJIfjZvufkaVpBLFRAHKYEk=", - "h1:7e25Wr4cpUvlAcwL+9ZOeeA1xha84LqTZNviDaVQFlo=", - "h1:8hK4uDEChFAWE9MvC+/HBB4WUkhJdedn7Q4pLJEQDl4=", - "h1:HZdmFPnC/+x6si15pq4rGYv/1TrCcyQXLnDMqq1SONw=", - "h1:UNZga7kYMfYfDHmuP6LvHmJNXlb3fyvRY1tA9ol6yY4=", - "h1:ZJgJLXK4nZKfj1z2TIKCKa+7Jt+p1G5Mwty2PTF7Tso=", - "h1:iTxbOUuean5hkvi0xyxU+UXK5HT3DfxZYumlJHphCIw=", - "h1:kZJbZZTpZVW6rfj0wt4I7VFekUEDD5CRa1sAP6wrwGI=", - "h1:uIzu9HMGN1ySZ1s+iYCKY9UqsgCjgH05tnBg1DgHtV4=", - "h1:uulWiJ93kZmKKh6/EtHktJQ901npRmTb/ao7oTP402w=", - "h1:zQ3svnDlwO7XtuXurLKLanW7arcRbFmw/pUd1DzLuEU=", - "zh:2035e461a94bd4180557a06f8e56f228a8a035608d0dac4d08e5870cf9265276", - "zh:3f15778a22ef1b9d0fa28670e5ea6ef1094b0be2533f43f350a2ef15d471b353", - "zh:4f1a4d03b008dd958bcd6bf82cf088fbaa9c121be2fd35e10e6b06c6e8f6aaa1", - "zh:5859f31c342364e849b4f8c437a46f33e927fa820244d0732b8d2ec74a95712d", - "zh:693d0f15512ca8c6b5e999b3a7551503feb06b408b3836bc6a6403e518b9ddab", - "zh:7f4912bec5b04f5156935292377c12484c13582151eb3c2555df409a7e5fb6e0", - "zh:bb9a509497f3a131c52fac32348919bf1b9e06c69a65f24607b03f7b56fb47b6", - "zh:c1b0c64e49ac591fd038ad71e71403ff71c07476e27e8da718c29f0028ea6d0d", - "zh:dd4ca432ee14eb0bb0cdc0bb463c8675b8ef02497be870a20d8dfee3e7fe52b3", - "zh:df58bb7fea984d2b11709567842ca4d55b3f24e187aa6be99e3677f55cbbe7da", + "h1:/zBU/N0BTzGRlCUTnFvYg8UiD7Bh4HryW3y3AVDROjc=", + "h1:8TynqZl/QvhZiutnNk9uJZliWb20c9G+G8bGtTiliXI=", + "h1:BZDq7lDdLTYgIeAsLaiXLn8qycoR9D+NFs/OaC6LqNs=", + "h1:ELnu4gb15QAtc1RurC1H6A5OmV3zILizqbuL8kwUEmo=", + "h1:EMP1r+hGjE4zwj31RnVYEu0CLh3x7QSZ+4Z1ysVeqyM=", + "h1:O7hZA85M9/G5LZt+m0bppCinoyp8C346JpI+QnMjYVo=", + "h1:RAigruLqw4uLPyHtFnrgEsYNoZZG/sN+N1waujuiE6w=", + "h1:iWgZaQbV+/YXmO1+47R82zKF6ozCN8nnwLchYRiBtMo=", + "h1:m0gw9qg+hu43PlWDZuTKCFGp0SvBJIv338lIHOqLZmU=", + "h1:qMMFID97Se3U3dxypUF6edxz6TJG/WQfwO1mwOd3ze4=", + "h1:xyhSZmLLirjEN7lmrh4pdM6fOhaA0yWpHUgXdx69vV4=", + "zh:0d29f06abed90da7b943690244420fe1de3e28d4c6de0db441f1af2aa91ea6b8", + "zh:2345e07e91dfec9af3df25fd5119d3a09f91e37ca10af30a344f7b3c297e9ad8", + "zh:42d77650df0238333bcce5da91b4f3d62e54b1ed456f58a9c913270d80a70262", + "zh:43ce137f2644769ceada99a2c815c9c30807e42f61f2f6ce60869411217375f9", + "zh:5e4d8f6a5212f6b7ba29846a2ff328214c7f983ce772196f8e6721edcefd4c59", + "zh:69613d671884fc568a075359e2920d7c19e6d588717b4532b90fb4a4ca8aabd0", + "zh:827ca4fcc25958c731677cb1d87cb09764e3a24ae4117fd9776429341fcdeabe", + "zh:8fad25f949dff7c6f40ea22b13a8b4de6ea0de3c5a975c4a3281529e4797e897", + "zh:b3d175e2725fe38f2a71d5fb346a9d4ff70d449a9d229c95c24f88e764dd2d47", + "zh:c53f3fef67aa64664c85bb8603b0a9730a267a76d7d84ceae16416de7ccb2437", "zh:f569b65999264a9416862bca5cd2a6177d94ccb0424f3a4ef424428912b9cb3c", - "zh:f7fb37704da50c096f9c7c25e8a95fe73ce1d3c5aab0d616d506f07bc5cfcdd8", + "zh:f7d9ff06344547232e6c84bc3f6bf9c29cf978ba7cd585c10f4c3361a4b81f22", ] } diff --git a/dev-docs/miniconstellation/azure-terraform/main.tf b/dev-docs/miniconstellation/azure-terraform/main.tf index 6b0b82a26..412371f65 100644 --- a/dev-docs/miniconstellation/azure-terraform/main.tf +++ b/dev-docs/miniconstellation/azure-terraform/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { azurerm = { source = "hashicorp/azurerm" - version = "4.16.0" + version = "4.20.0" } random = { source = "hashicorp/random" diff --git a/e2e/miniconstellation/.terraform.lock.hcl b/e2e/miniconstellation/.terraform.lock.hcl index d98936cba..3ab652036 100644 --- a/e2e/miniconstellation/.terraform.lock.hcl +++ b/e2e/miniconstellation/.terraform.lock.hcl @@ -2,32 +2,32 @@ # Manual edits may be lost in future updates. provider "registry.terraform.io/hashicorp/azurerm" { - version = "4.16.0" - constraints = "4.16.0" + version = "4.20.0" + constraints = "4.20.0" hashes = [ - "h1:5aUNrEyEto0kuqvVlot0oJIfjZvufkaVpBLFRAHKYEk=", - "h1:7e25Wr4cpUvlAcwL+9ZOeeA1xha84LqTZNviDaVQFlo=", - "h1:8hK4uDEChFAWE9MvC+/HBB4WUkhJdedn7Q4pLJEQDl4=", - "h1:HZdmFPnC/+x6si15pq4rGYv/1TrCcyQXLnDMqq1SONw=", - "h1:UNZga7kYMfYfDHmuP6LvHmJNXlb3fyvRY1tA9ol6yY4=", - "h1:ZJgJLXK4nZKfj1z2TIKCKa+7Jt+p1G5Mwty2PTF7Tso=", - "h1:iTxbOUuean5hkvi0xyxU+UXK5HT3DfxZYumlJHphCIw=", - "h1:kZJbZZTpZVW6rfj0wt4I7VFekUEDD5CRa1sAP6wrwGI=", - "h1:uIzu9HMGN1ySZ1s+iYCKY9UqsgCjgH05tnBg1DgHtV4=", - "h1:uulWiJ93kZmKKh6/EtHktJQ901npRmTb/ao7oTP402w=", - "h1:zQ3svnDlwO7XtuXurLKLanW7arcRbFmw/pUd1DzLuEU=", - "zh:2035e461a94bd4180557a06f8e56f228a8a035608d0dac4d08e5870cf9265276", - "zh:3f15778a22ef1b9d0fa28670e5ea6ef1094b0be2533f43f350a2ef15d471b353", - "zh:4f1a4d03b008dd958bcd6bf82cf088fbaa9c121be2fd35e10e6b06c6e8f6aaa1", - "zh:5859f31c342364e849b4f8c437a46f33e927fa820244d0732b8d2ec74a95712d", - "zh:693d0f15512ca8c6b5e999b3a7551503feb06b408b3836bc6a6403e518b9ddab", - "zh:7f4912bec5b04f5156935292377c12484c13582151eb3c2555df409a7e5fb6e0", - "zh:bb9a509497f3a131c52fac32348919bf1b9e06c69a65f24607b03f7b56fb47b6", - "zh:c1b0c64e49ac591fd038ad71e71403ff71c07476e27e8da718c29f0028ea6d0d", - "zh:dd4ca432ee14eb0bb0cdc0bb463c8675b8ef02497be870a20d8dfee3e7fe52b3", - "zh:df58bb7fea984d2b11709567842ca4d55b3f24e187aa6be99e3677f55cbbe7da", + "h1:/zBU/N0BTzGRlCUTnFvYg8UiD7Bh4HryW3y3AVDROjc=", + "h1:8TynqZl/QvhZiutnNk9uJZliWb20c9G+G8bGtTiliXI=", + "h1:BZDq7lDdLTYgIeAsLaiXLn8qycoR9D+NFs/OaC6LqNs=", + "h1:ELnu4gb15QAtc1RurC1H6A5OmV3zILizqbuL8kwUEmo=", + "h1:EMP1r+hGjE4zwj31RnVYEu0CLh3x7QSZ+4Z1ysVeqyM=", + "h1:O7hZA85M9/G5LZt+m0bppCinoyp8C346JpI+QnMjYVo=", + "h1:RAigruLqw4uLPyHtFnrgEsYNoZZG/sN+N1waujuiE6w=", + "h1:iWgZaQbV+/YXmO1+47R82zKF6ozCN8nnwLchYRiBtMo=", + "h1:m0gw9qg+hu43PlWDZuTKCFGp0SvBJIv338lIHOqLZmU=", + "h1:qMMFID97Se3U3dxypUF6edxz6TJG/WQfwO1mwOd3ze4=", + "h1:xyhSZmLLirjEN7lmrh4pdM6fOhaA0yWpHUgXdx69vV4=", + "zh:0d29f06abed90da7b943690244420fe1de3e28d4c6de0db441f1af2aa91ea6b8", + "zh:2345e07e91dfec9af3df25fd5119d3a09f91e37ca10af30a344f7b3c297e9ad8", + "zh:42d77650df0238333bcce5da91b4f3d62e54b1ed456f58a9c913270d80a70262", + "zh:43ce137f2644769ceada99a2c815c9c30807e42f61f2f6ce60869411217375f9", + "zh:5e4d8f6a5212f6b7ba29846a2ff328214c7f983ce772196f8e6721edcefd4c59", + "zh:69613d671884fc568a075359e2920d7c19e6d588717b4532b90fb4a4ca8aabd0", + "zh:827ca4fcc25958c731677cb1d87cb09764e3a24ae4117fd9776429341fcdeabe", + "zh:8fad25f949dff7c6f40ea22b13a8b4de6ea0de3c5a975c4a3281529e4797e897", + "zh:b3d175e2725fe38f2a71d5fb346a9d4ff70d449a9d229c95c24f88e764dd2d47", + "zh:c53f3fef67aa64664c85bb8603b0a9730a267a76d7d84ceae16416de7ccb2437", "zh:f569b65999264a9416862bca5cd2a6177d94ccb0424f3a4ef424428912b9cb3c", - "zh:f7fb37704da50c096f9c7c25e8a95fe73ce1d3c5aab0d616d506f07bc5cfcdd8", + "zh:f7d9ff06344547232e6c84bc3f6bf9c29cf978ba7cd585c10f4c3361a4b81f22", ] } diff --git a/e2e/miniconstellation/main.tf b/e2e/miniconstellation/main.tf index 29cad56e3..8889c844d 100644 --- a/e2e/miniconstellation/main.tf +++ b/e2e/miniconstellation/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { azurerm = { source = "hashicorp/azurerm" - version = "4.16.0" + version = "4.20.0" } tls = { source = "hashicorp/tls" diff --git a/terraform-provider-constellation/examples/full/aws/main.tf b/terraform-provider-constellation/examples/full/aws/main.tf index 085dbb79f..dcde86b6e 100644 --- a/terraform-provider-constellation/examples/full/aws/main.tf +++ b/terraform-provider-constellation/examples/full/aws/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { constellation = { source = "edgelesssys/constellation" - version = "2.20.0" // replace with the version you want to use + version = "2.20.1" // replace with the version you want to use } random = { source = "hashicorp/random" diff --git a/terraform-provider-constellation/examples/full/azure/main.tf b/terraform-provider-constellation/examples/full/azure/main.tf index e327d98f0..034356138 100644 --- a/terraform-provider-constellation/examples/full/azure/main.tf +++ b/terraform-provider-constellation/examples/full/azure/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { constellation = { source = "edgelesssys/constellation" - version = "2.20.0" // replace with the version you want to use + version = "2.20.1" // replace with the version you want to use } random = { source = "hashicorp/random" diff --git a/terraform-provider-constellation/examples/full/gcp/main.tf b/terraform-provider-constellation/examples/full/gcp/main.tf index aa05d9b0e..bf573410b 100644 --- a/terraform-provider-constellation/examples/full/gcp/main.tf +++ b/terraform-provider-constellation/examples/full/gcp/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { constellation = { source = "edgelesssys/constellation" - version = "2.20.0" // replace with the version you want to use + version = "2.20.1" // replace with the version you want to use } random = { source = "hashicorp/random" diff --git a/terraform-provider-constellation/examples/full/stackit/main.tf b/terraform-provider-constellation/examples/full/stackit/main.tf index c27554bfc..a145be5f4 100644 --- a/terraform-provider-constellation/examples/full/stackit/main.tf +++ b/terraform-provider-constellation/examples/full/stackit/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { constellation = { source = "edgelesssys/constellation" - version = "2.20.0" // replace with the version you want to use + version = "2.20.1" // replace with the version you want to use } random = { source = "hashicorp/random" diff --git a/terraform/infrastructure/aws/.terraform.lock.hcl b/terraform/infrastructure/aws/.terraform.lock.hcl index 91dd9df3a..f39a26eb9 100644 --- a/terraform/infrastructure/aws/.terraform.lock.hcl +++ b/terraform/infrastructure/aws/.terraform.lock.hcl @@ -2,38 +2,38 @@ # Manual edits may be lost in future updates. provider "registry.terraform.io/hashicorp/aws" { - version = "5.84.0" - constraints = "5.84.0" + version = "5.88.0" + constraints = "5.88.0" hashes = [ - "h1:897cPKLnktFTBHxlPDyv52hQoR7rUy52Tzr9F/bvXW0=", - "h1:EJLTu1eqP93P4+DexFZHnuMCwEapkmHhEUirUT+tjZw=", - "h1:MVppdPvKcROdwwj1i7OMoZ/ODFZlqrYr7GVHI1Fevb8=", - "h1:MsFKMU05GLbXfXQZHqy+eC5FC5hDxyRB1irY3lvAaf8=", - "h1:N0mARumaxRCk1FmbDiEW89izbpV/3jkWowrm/78HucQ=", - "h1:OJ53RNte7HLHSMxSkzu1S6H8sC0T8qnCAOcNLjjtMpc=", - "h1:TpsSFMkiuLC1V29n4Ov99g4L6jlsBmBMWxqDX3GZNww=", - "h1:X50oGSrQb2Hzf6i1BWnYOqIneJSy7TiWNtKK+VY+aGA=", - "h1:dwpeFUdcxgXVAc0JSqO57xf0/r2qOBLPloombCQWFz8=", - "h1:eeLhwhBhj96w3YFnTcOMPV0ybGER5fbv/ihcTMeoTk4=", - "h1:iBnPrv1hIjnS26jHVGXuxTDF27OaVOx2XJ0Sbp45qHs=", - "h1:lL0Ftd7QOGinm/1w/1qwfoj6urdJsmRSVxV+xfBD8R4=", - "h1:mwHAD66PY6wi858oGl5NcWGfA9X7mdxPrZrAGfJGS3A=", - "h1:p7kabmCUZYyP5A6VqtIvuy/+CTiGn03jVdcIFMbQkOI=", - "zh:078f77438aba6ec8bf9154b7d223e5c71c48d805d6cd3bcf9db0cc1e82668ac3", - "zh:1f6591ff96be00501e71b792ed3a5a14b21ff03afec9a1c4a3fd9300e6e5b674", - "zh:2ab694e022e81dd74485351c5836148a842ed71cf640664c9d871cb517b09602", - "zh:33c8ccb6e3dc496e828a7572dd981366c6271075c1189f249b9b5236361d7eff", - "zh:6f31068ebad1d627e421c72ccdaafe678c53600ca73714e977bf45ff43ae5d17", - "zh:7488623dccfb639347cae66f9001d39cf06b92e8081975235a1ac3a0ac3f44aa", - "zh:7f042b78b9690a8725c95b91a70fc8e264011b836605bcc342ac297b9ea3937d", - "zh:88b56ac6c7209dc0a775b79975a371918f3aed8f015c37d5899f31deff37c61a", + "h1:8So0IR8jwKx8WhVuD1LDsbeMTe78/SF5g4d7z5C6+C4=", + "h1:CtUi38/zeD7FmxC327T/r1RGze7GNrC8QFaSSBy7u9M=", + "h1:Gsl/jrA6UmJI6iJg5HtQuZWERwWFyl8361jicsGEOj4=", + "h1:H9Ur5AHP1XwvGS7tJvPMo7JNFxHYwxsYtXBML0gas9A=", + "h1:Lox8X0csC/88j8PokcK1rTRDLBYpSASQyurE27e6C+Y=", + "h1:NpZJqGhTv3LsjL0Jg8OBpIto5cbyahoyn6bNlQ0XbVI=", + "h1:PXaP+z5Z9pcUUcJqS6ea09wR/cscBq1F9jRsNqe39rM=", + "h1:Uqmvemsy5d+fqf21wwnqQOx/RQg0mJ3gXdWRWQs7cKc=", + "h1:YwZyjmqgCzgSq5YzfPmb8Iqy5u/7SiJECeUyQK8kma0=", + "h1:aXxdTbDqZ7sIv0eKcpB1iNGH+gjwYjYZuJAAtXKSkTU=", + "h1:nks+LOLQf0gfh7EZCqpWErw9/03yqYDEaGxYqUfEc78=", + "h1:u8hinU3pUne1S4oijYQHzx4ynQDRzJ8gpwgxtDu8KlA=", + "h1:vZVMI4zaLpESWoN79JGDBTqTxM+bt5PoIx/bt0NC2+A=", + "h1:wZQjYp5BEHgwnX2sb7OTiiXxueVJOVFtkb4K1GVAtL4=", + "zh:24f852b1cca276d91f950cb7fb575cacc385f55edccf4beec1f611cdd7626cf5", + "zh:2a3b3f5ac513f8d6448a31d9619f8a96e0597dd354459de3a4698e684c909f96", + "zh:3700499885a8e0e532eccba3cb068340e411cf9e616bf8a59e815d3b62ca3e46", + "zh:4aab3605468244a74cbde66784ea1d30dc0fc6caf26d1b099427ecd5790f7c4d", + "zh:74eca9314d6dd80b215d7bc1c4be37d81e1045d625d5b512995f3a352d7a43bc", + "zh:77d9a06c63a4ad615bc97f67f948250397267f15698ebb2547fbdd20f734983c", + "zh:82d6aaef1eb0caf9ca451887fdbdcff10ab09318b1d60faa883a013283ab2b15", + "zh:8dbcfb121b887ce8572f5ab8174d592a729390ca32dc5fdacac4c7c1c508411a", + "zh:95d51e80b55ff9064f5c1bc61d78f992e2f89c986ba2b10546ea4461d35c24f9", "zh:9b12af85486a96aedd8d7984b0ff811a4b42e3d88dad1a3fb4c0b580d04fa425", - "zh:a1979ba840d704af0932f8de5f541cbb4caa9b6bbd25ed552a24e6772175ba07", - "zh:b058c0533dae580e69d1adbc1f69e6a80632374abfc10e8634d06187a108e87b", - "zh:c88610af9cf957f8dcf4382e0c9ca566ef10e3290f5de01d4d90b2d81b078aa8", - "zh:e9562c055a2247d0c287772b55abef468c79f8d66a74780fe1c5e5dae1a284a9", - "zh:f7a7c71d28441d925a25c08c4485c015b2d9f0338bc9707443e91ff8e161d3d9", - "zh:fee533e81976d0900aa6fa443dc54ef171cbd901847f28a6e8edb1d161fa6fde", + "zh:9ead5de0e123020926a0edaf88d9eed5cb86afe438a875528f6d11d0d27eed73", + "zh:ab7c940cbb2081314f4af3cdd61ed2c1d59fd7a60fa3db27770887d63072fbdd", + "zh:d52cd68006fd6fa8d028cdf569a6620fbc31726019beb7c75affa8764622d398", + "zh:f179ca86ad5d5fb88dfd8e8e7c448f2c0ad550d22152f939b8465baeaf9289e9", + "zh:f54dda271fa6dfee06537066278669a3f92c872e7dfa5a0184cd9117f7e47b8c", ] } diff --git a/terraform/infrastructure/aws/main.tf b/terraform/infrastructure/aws/main.tf index 3d9049ef9..fa86bee7f 100644 --- a/terraform/infrastructure/aws/main.tf +++ b/terraform/infrastructure/aws/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { aws = { source = "hashicorp/aws" - version = "5.84.0" + version = "5.88.0" } random = { source = "hashicorp/random" diff --git a/terraform/infrastructure/aws/modules/instance_group/main.tf b/terraform/infrastructure/aws/modules/instance_group/main.tf index 273db6e24..d7140cfd4 100644 --- a/terraform/infrastructure/aws/modules/instance_group/main.tf +++ b/terraform/infrastructure/aws/modules/instance_group/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { aws = { source = "hashicorp/aws" - version = "5.84.0" + version = "5.88.0" } random = { source = "hashicorp/random" diff --git a/terraform/infrastructure/aws/modules/jump_host/main.tf b/terraform/infrastructure/aws/modules/jump_host/main.tf index 2c777b271..6dd0503c5 100644 --- a/terraform/infrastructure/aws/modules/jump_host/main.tf +++ b/terraform/infrastructure/aws/modules/jump_host/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { aws = { source = "hashicorp/aws" - version = "5.84.0" + version = "5.88.0" } } } diff --git a/terraform/infrastructure/aws/modules/load_balancer_target/main.tf b/terraform/infrastructure/aws/modules/load_balancer_target/main.tf index 61b64ee98..a7b70a480 100644 --- a/terraform/infrastructure/aws/modules/load_balancer_target/main.tf +++ b/terraform/infrastructure/aws/modules/load_balancer_target/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { aws = { source = "hashicorp/aws" - version = "5.84.0" + version = "5.88.0" } } } diff --git a/terraform/infrastructure/aws/modules/public_private_subnet/main.tf b/terraform/infrastructure/aws/modules/public_private_subnet/main.tf index 37217b253..83a59d58e 100644 --- a/terraform/infrastructure/aws/modules/public_private_subnet/main.tf +++ b/terraform/infrastructure/aws/modules/public_private_subnet/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { aws = { source = "hashicorp/aws" - version = "5.84.0" + version = "5.88.0" } } } diff --git a/terraform/infrastructure/azure/.terraform.lock.hcl b/terraform/infrastructure/azure/.terraform.lock.hcl index 26584ea56..8294746f1 100644 --- a/terraform/infrastructure/azure/.terraform.lock.hcl +++ b/terraform/infrastructure/azure/.terraform.lock.hcl @@ -2,32 +2,32 @@ # Manual edits may be lost in future updates. provider "registry.terraform.io/hashicorp/azurerm" { - version = "4.16.0" - constraints = "4.16.0" + version = "4.20.0" + constraints = "4.20.0" hashes = [ - "h1:5aUNrEyEto0kuqvVlot0oJIfjZvufkaVpBLFRAHKYEk=", - "h1:7e25Wr4cpUvlAcwL+9ZOeeA1xha84LqTZNviDaVQFlo=", - "h1:8hK4uDEChFAWE9MvC+/HBB4WUkhJdedn7Q4pLJEQDl4=", - "h1:HZdmFPnC/+x6si15pq4rGYv/1TrCcyQXLnDMqq1SONw=", - "h1:UNZga7kYMfYfDHmuP6LvHmJNXlb3fyvRY1tA9ol6yY4=", - "h1:ZJgJLXK4nZKfj1z2TIKCKa+7Jt+p1G5Mwty2PTF7Tso=", - "h1:iTxbOUuean5hkvi0xyxU+UXK5HT3DfxZYumlJHphCIw=", - "h1:kZJbZZTpZVW6rfj0wt4I7VFekUEDD5CRa1sAP6wrwGI=", - "h1:uIzu9HMGN1ySZ1s+iYCKY9UqsgCjgH05tnBg1DgHtV4=", - "h1:uulWiJ93kZmKKh6/EtHktJQ901npRmTb/ao7oTP402w=", - "h1:zQ3svnDlwO7XtuXurLKLanW7arcRbFmw/pUd1DzLuEU=", - "zh:2035e461a94bd4180557a06f8e56f228a8a035608d0dac4d08e5870cf9265276", - "zh:3f15778a22ef1b9d0fa28670e5ea6ef1094b0be2533f43f350a2ef15d471b353", - "zh:4f1a4d03b008dd958bcd6bf82cf088fbaa9c121be2fd35e10e6b06c6e8f6aaa1", - "zh:5859f31c342364e849b4f8c437a46f33e927fa820244d0732b8d2ec74a95712d", - "zh:693d0f15512ca8c6b5e999b3a7551503feb06b408b3836bc6a6403e518b9ddab", - "zh:7f4912bec5b04f5156935292377c12484c13582151eb3c2555df409a7e5fb6e0", - "zh:bb9a509497f3a131c52fac32348919bf1b9e06c69a65f24607b03f7b56fb47b6", - "zh:c1b0c64e49ac591fd038ad71e71403ff71c07476e27e8da718c29f0028ea6d0d", - "zh:dd4ca432ee14eb0bb0cdc0bb463c8675b8ef02497be870a20d8dfee3e7fe52b3", - "zh:df58bb7fea984d2b11709567842ca4d55b3f24e187aa6be99e3677f55cbbe7da", + "h1:/zBU/N0BTzGRlCUTnFvYg8UiD7Bh4HryW3y3AVDROjc=", + "h1:8TynqZl/QvhZiutnNk9uJZliWb20c9G+G8bGtTiliXI=", + "h1:BZDq7lDdLTYgIeAsLaiXLn8qycoR9D+NFs/OaC6LqNs=", + "h1:ELnu4gb15QAtc1RurC1H6A5OmV3zILizqbuL8kwUEmo=", + "h1:EMP1r+hGjE4zwj31RnVYEu0CLh3x7QSZ+4Z1ysVeqyM=", + "h1:O7hZA85M9/G5LZt+m0bppCinoyp8C346JpI+QnMjYVo=", + "h1:RAigruLqw4uLPyHtFnrgEsYNoZZG/sN+N1waujuiE6w=", + "h1:iWgZaQbV+/YXmO1+47R82zKF6ozCN8nnwLchYRiBtMo=", + "h1:m0gw9qg+hu43PlWDZuTKCFGp0SvBJIv338lIHOqLZmU=", + "h1:qMMFID97Se3U3dxypUF6edxz6TJG/WQfwO1mwOd3ze4=", + "h1:xyhSZmLLirjEN7lmrh4pdM6fOhaA0yWpHUgXdx69vV4=", + "zh:0d29f06abed90da7b943690244420fe1de3e28d4c6de0db441f1af2aa91ea6b8", + "zh:2345e07e91dfec9af3df25fd5119d3a09f91e37ca10af30a344f7b3c297e9ad8", + "zh:42d77650df0238333bcce5da91b4f3d62e54b1ed456f58a9c913270d80a70262", + "zh:43ce137f2644769ceada99a2c815c9c30807e42f61f2f6ce60869411217375f9", + "zh:5e4d8f6a5212f6b7ba29846a2ff328214c7f983ce772196f8e6721edcefd4c59", + "zh:69613d671884fc568a075359e2920d7c19e6d588717b4532b90fb4a4ca8aabd0", + "zh:827ca4fcc25958c731677cb1d87cb09764e3a24ae4117fd9776429341fcdeabe", + "zh:8fad25f949dff7c6f40ea22b13a8b4de6ea0de3c5a975c4a3281529e4797e897", + "zh:b3d175e2725fe38f2a71d5fb346a9d4ff70d449a9d229c95c24f88e764dd2d47", + "zh:c53f3fef67aa64664c85bb8603b0a9730a267a76d7d84ceae16416de7ccb2437", "zh:f569b65999264a9416862bca5cd2a6177d94ccb0424f3a4ef424428912b9cb3c", - "zh:f7fb37704da50c096f9c7c25e8a95fe73ce1d3c5aab0d616d506f07bc5cfcdd8", + "zh:f7d9ff06344547232e6c84bc3f6bf9c29cf978ba7cd585c10f4c3361a4b81f22", ] } diff --git a/terraform/infrastructure/azure/main.tf b/terraform/infrastructure/azure/main.tf index a749b8cf6..e115a1971 100644 --- a/terraform/infrastructure/azure/main.tf +++ b/terraform/infrastructure/azure/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { azurerm = { source = "hashicorp/azurerm" - version = "4.16.0" + version = "4.20.0" } random = { source = "hashicorp/random" diff --git a/terraform/infrastructure/azure/modules/load_balancer_backend/main.tf b/terraform/infrastructure/azure/modules/load_balancer_backend/main.tf index b78659fa5..4ad3b2f38 100644 --- a/terraform/infrastructure/azure/modules/load_balancer_backend/main.tf +++ b/terraform/infrastructure/azure/modules/load_balancer_backend/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { azurerm = { source = "hashicorp/azurerm" - version = "4.16.0" + version = "4.20.0" } } } diff --git a/terraform/infrastructure/azure/modules/scale_set/main.tf b/terraform/infrastructure/azure/modules/scale_set/main.tf index 50652e02f..a8e205cd0 100644 --- a/terraform/infrastructure/azure/modules/scale_set/main.tf +++ b/terraform/infrastructure/azure/modules/scale_set/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { azurerm = { source = "hashicorp/azurerm" - version = "4.16.0" + version = "4.20.0" } random = { source = "hashicorp/random" diff --git a/terraform/infrastructure/gcp/.terraform.lock.hcl b/terraform/infrastructure/gcp/.terraform.lock.hcl index 88ac1fcf6..d5c3ad220 100644 --- a/terraform/infrastructure/gcp/.terraform.lock.hcl +++ b/terraform/infrastructure/gcp/.terraform.lock.hcl @@ -2,32 +2,32 @@ # Manual edits may be lost in future updates. provider "registry.terraform.io/hashicorp/google" { - version = "6.17.0" - constraints = "6.17.0" + version = "6.21.0" + constraints = "6.21.0" hashes = [ - "h1:2ycjv7XhGgMjTnDR+6ZfSLCPrm3o5nLn9RZ7g7iYT+0=", - "h1:ATBXbtcc0yaEQNkTK8eWxmMXH045AfLSDFMJOtoq3qQ=", - "h1:J7qp2vw9rlE7S80yO/WAK6kpri6r18J18/9lYm9lNB8=", - "h1:KaUdG4wHUzLBnIMeuYWyVMSSPmeemyJqMyc+/c0jYDE=", - "h1:QRjzeNePGTvp1a9UzGqu9Z8mMVjnRkfbZy2Uq13DRjU=", - "h1:Ro8XL1RTzXYs7e7EenvpiU/Rgsw/X6maSGWYb6e3Tpo=", - "h1:TQtswaM3aJSK0DPpBrpkGC9wQBoj9bO0h93sJ9NE264=", - "h1:aEcEXIGwaTDu+XAQP1xxso97MxDLWvLw9q0Q9kZiz6A=", - "h1:jTC2VqqElSe4qv/GS2rgI+AhILiVv1uIh0QJMnBemm8=", - "h1:n5tFN82RSrqLQlueXx5h4kgUbud2YhMkSDv3hw41kzE=", - "h1:siQ5DPLcE3KCbl55zr9yE1ceecICvbZ3MKkLbIcHZ04=", - "zh:2ae1ba33889babf740298f131c3151477c638a6d8dc2d850f207380ae91d5ee0", - "zh:2b950b0f4dcb1f79e10ad9611fc1573114028be423af742eb9b5027d1e1127fc", - "zh:4557ce5a9ce78e365af99c15c3a2d4d37a246535d0d62182a66cfc1c9de53cbd", - "zh:5ced8255a5cd868ebd6a0ba377b5016f578be402daea7479e488c109a74e8339", - "zh:6b7666678f6238637c7f78020edb8405669804a18ae580296419fb4179642cf6", - "zh:8677c153477daf1b636421a00633f25022b8c33fc803699d6ea6f89b75b4554b", - "zh:9f85498e26bf90049c252e6220a5a47cff88a4cd249e08845c59bd4c16aa48f3", - "zh:dce93c05d1852f1c692566c2ebf7200cb98aa059301044c2211c10319354c680", - "zh:df72b36e76e0721904c63eab34191bc9c4ccf93d067c2a0d455dd8bb39e73b66", - "zh:e9a9e8d8ae14ab6e661f3f9b07c5edec60507203dac7d2f187dc716317f4d79c", + "h1:/2ryBD3VQ/z8JXb5eyHvSdTCeLFNakInr/L7Dxbty+0=", + "h1:3H1lP+5rZ0tgYR1KdXW685CdfZwPIMXZZwfV8Sxk9uY=", + "h1:8gVYYyXvXKolFLbLS7i7A4l+3Yn8daf0frtgtzGHCm4=", + "h1:FAlxafbm3jeUgH4l+NdOuqbdu2yGnq68cTMTq9aBYmE=", + "h1:M4X6/r6w8QrkzoOu/8+61+fkYy4+kqNt1fbHE7Igvgg=", + "h1:TS3CkZ8djIu+v9NJ8PxreYD3hywG8sbeTbtpQQcD5tg=", + "h1:Uhpn0W3JpwQr9WlzDZwOdTtWPlv1buGljc0096etzjM=", + "h1:dcklD/rIK/ES/o8AybEMCqkqMJcYCDy90su7umQHHnY=", + "h1:ia0GGmKDt45bBjld4tapN3fFrrg4yVziFTaWWDM6sxc=", + "h1:pZhpGdzOtzGkX38PIYbXWilwA/LtWXQ22dkt6Fh2DAQ=", + "h1:uiKyMwXmBBeXZv471jVUZBuRXUgIGwwheKW3mcVHq8Q=", + "zh:1c2462367d92f6f8f6c527115905f7cca78e48cf5d5bc7448d3beeb7c9e895eb", + "zh:3644dbd09c3740e6d843e035de34a74ed41ffc32e7ed04a19aecddc4c57334cc", + "zh:3a586bbb9a9c6463c975a94ddd4671f2a84992a2c169bfb2f5053c2cea55849c", + "zh:4ae96672e6a52a077760a11c95946ec9d3f84f7ab84c0ba3c0cb66c3d3580d59", + "zh:9c26b3dbc1f9a594d1d07b6a25ce089f8463e8331324f4ecde73829e9d1d5ee5", + "zh:b99a602111d6ca5842c852ac1eff5c009f1d75492e355ea25f3dbd6e008e4d9a", + "zh:d45100c41c940c35c07fae2876f6cc654328d405077f01d268e8bd5a25b56c30", + "zh:de6e14e85a9ea2322a4fd971fde3b71071e7b6435a12dbcd3b8c5f42765e8b3c", + "zh:e22f6b54cfebb0c1a0991d83adc83b3d454ba6d9b5c21574af135799b488ed66", "zh:f569b65999264a9416862bca5cd2a6177d94ccb0424f3a4ef424428912b9cb3c", - "zh:fb92287bca4fc7b49666c644ca7789e4acf5b17317acb963f138c0ae6347a289", + "zh:f6964268874a15788dfed47a26cb880718f47c94cba7c8a0284b70921fec807b", + "zh:ff51b3e83149798ce6c7545688fe3b9703b04d5c0376cd55215a93767144f40e", ] } diff --git a/terraform/infrastructure/gcp/main.tf b/terraform/infrastructure/gcp/main.tf index 19275bb06..5be9a8f17 100644 --- a/terraform/infrastructure/gcp/main.tf +++ b/terraform/infrastructure/gcp/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { google = { source = "hashicorp/google" - version = "6.17.0" + version = "6.21.0" } random = { diff --git a/terraform/infrastructure/gcp/modules/instance_group/main.tf b/terraform/infrastructure/gcp/modules/instance_group/main.tf index 2ba833bbb..910721a71 100644 --- a/terraform/infrastructure/gcp/modules/instance_group/main.tf +++ b/terraform/infrastructure/gcp/modules/instance_group/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { google = { source = "hashicorp/google" - version = "6.17.0" + version = "6.21.0" } random = { diff --git a/terraform/infrastructure/gcp/modules/internal_load_balancer/main.tf b/terraform/infrastructure/gcp/modules/internal_load_balancer/main.tf index 807c61dc9..66fc745aa 100644 --- a/terraform/infrastructure/gcp/modules/internal_load_balancer/main.tf +++ b/terraform/infrastructure/gcp/modules/internal_load_balancer/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { google = { source = "hashicorp/google" - version = "6.17.0" + version = "6.21.0" } } } diff --git a/terraform/infrastructure/gcp/modules/jump_host/main.tf b/terraform/infrastructure/gcp/modules/jump_host/main.tf index 0d0a8ca78..112d0db5f 100644 --- a/terraform/infrastructure/gcp/modules/jump_host/main.tf +++ b/terraform/infrastructure/gcp/modules/jump_host/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { google = { source = "hashicorp/google" - version = "6.17.0" + version = "6.21.0" } } } diff --git a/terraform/infrastructure/gcp/modules/loadbalancer/main.tf b/terraform/infrastructure/gcp/modules/loadbalancer/main.tf index 6083c7cbc..567093b97 100644 --- a/terraform/infrastructure/gcp/modules/loadbalancer/main.tf +++ b/terraform/infrastructure/gcp/modules/loadbalancer/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { google = { source = "hashicorp/google" - version = "6.17.0" + version = "6.21.0" } } } diff --git a/terraform/infrastructure/iam/aws/.terraform.lock.hcl b/terraform/infrastructure/iam/aws/.terraform.lock.hcl index 91dd9df3a..f39a26eb9 100644 --- a/terraform/infrastructure/iam/aws/.terraform.lock.hcl +++ b/terraform/infrastructure/iam/aws/.terraform.lock.hcl @@ -2,38 +2,38 @@ # Manual edits may be lost in future updates. provider "registry.terraform.io/hashicorp/aws" { - version = "5.84.0" - constraints = "5.84.0" + version = "5.88.0" + constraints = "5.88.0" hashes = [ - "h1:897cPKLnktFTBHxlPDyv52hQoR7rUy52Tzr9F/bvXW0=", - "h1:EJLTu1eqP93P4+DexFZHnuMCwEapkmHhEUirUT+tjZw=", - "h1:MVppdPvKcROdwwj1i7OMoZ/ODFZlqrYr7GVHI1Fevb8=", - "h1:MsFKMU05GLbXfXQZHqy+eC5FC5hDxyRB1irY3lvAaf8=", - "h1:N0mARumaxRCk1FmbDiEW89izbpV/3jkWowrm/78HucQ=", - "h1:OJ53RNte7HLHSMxSkzu1S6H8sC0T8qnCAOcNLjjtMpc=", - "h1:TpsSFMkiuLC1V29n4Ov99g4L6jlsBmBMWxqDX3GZNww=", - "h1:X50oGSrQb2Hzf6i1BWnYOqIneJSy7TiWNtKK+VY+aGA=", - "h1:dwpeFUdcxgXVAc0JSqO57xf0/r2qOBLPloombCQWFz8=", - "h1:eeLhwhBhj96w3YFnTcOMPV0ybGER5fbv/ihcTMeoTk4=", - "h1:iBnPrv1hIjnS26jHVGXuxTDF27OaVOx2XJ0Sbp45qHs=", - "h1:lL0Ftd7QOGinm/1w/1qwfoj6urdJsmRSVxV+xfBD8R4=", - "h1:mwHAD66PY6wi858oGl5NcWGfA9X7mdxPrZrAGfJGS3A=", - "h1:p7kabmCUZYyP5A6VqtIvuy/+CTiGn03jVdcIFMbQkOI=", - "zh:078f77438aba6ec8bf9154b7d223e5c71c48d805d6cd3bcf9db0cc1e82668ac3", - "zh:1f6591ff96be00501e71b792ed3a5a14b21ff03afec9a1c4a3fd9300e6e5b674", - "zh:2ab694e022e81dd74485351c5836148a842ed71cf640664c9d871cb517b09602", - "zh:33c8ccb6e3dc496e828a7572dd981366c6271075c1189f249b9b5236361d7eff", - "zh:6f31068ebad1d627e421c72ccdaafe678c53600ca73714e977bf45ff43ae5d17", - "zh:7488623dccfb639347cae66f9001d39cf06b92e8081975235a1ac3a0ac3f44aa", - "zh:7f042b78b9690a8725c95b91a70fc8e264011b836605bcc342ac297b9ea3937d", - "zh:88b56ac6c7209dc0a775b79975a371918f3aed8f015c37d5899f31deff37c61a", + "h1:8So0IR8jwKx8WhVuD1LDsbeMTe78/SF5g4d7z5C6+C4=", + "h1:CtUi38/zeD7FmxC327T/r1RGze7GNrC8QFaSSBy7u9M=", + "h1:Gsl/jrA6UmJI6iJg5HtQuZWERwWFyl8361jicsGEOj4=", + "h1:H9Ur5AHP1XwvGS7tJvPMo7JNFxHYwxsYtXBML0gas9A=", + "h1:Lox8X0csC/88j8PokcK1rTRDLBYpSASQyurE27e6C+Y=", + "h1:NpZJqGhTv3LsjL0Jg8OBpIto5cbyahoyn6bNlQ0XbVI=", + "h1:PXaP+z5Z9pcUUcJqS6ea09wR/cscBq1F9jRsNqe39rM=", + "h1:Uqmvemsy5d+fqf21wwnqQOx/RQg0mJ3gXdWRWQs7cKc=", + "h1:YwZyjmqgCzgSq5YzfPmb8Iqy5u/7SiJECeUyQK8kma0=", + "h1:aXxdTbDqZ7sIv0eKcpB1iNGH+gjwYjYZuJAAtXKSkTU=", + "h1:nks+LOLQf0gfh7EZCqpWErw9/03yqYDEaGxYqUfEc78=", + "h1:u8hinU3pUne1S4oijYQHzx4ynQDRzJ8gpwgxtDu8KlA=", + "h1:vZVMI4zaLpESWoN79JGDBTqTxM+bt5PoIx/bt0NC2+A=", + "h1:wZQjYp5BEHgwnX2sb7OTiiXxueVJOVFtkb4K1GVAtL4=", + "zh:24f852b1cca276d91f950cb7fb575cacc385f55edccf4beec1f611cdd7626cf5", + "zh:2a3b3f5ac513f8d6448a31d9619f8a96e0597dd354459de3a4698e684c909f96", + "zh:3700499885a8e0e532eccba3cb068340e411cf9e616bf8a59e815d3b62ca3e46", + "zh:4aab3605468244a74cbde66784ea1d30dc0fc6caf26d1b099427ecd5790f7c4d", + "zh:74eca9314d6dd80b215d7bc1c4be37d81e1045d625d5b512995f3a352d7a43bc", + "zh:77d9a06c63a4ad615bc97f67f948250397267f15698ebb2547fbdd20f734983c", + "zh:82d6aaef1eb0caf9ca451887fdbdcff10ab09318b1d60faa883a013283ab2b15", + "zh:8dbcfb121b887ce8572f5ab8174d592a729390ca32dc5fdacac4c7c1c508411a", + "zh:95d51e80b55ff9064f5c1bc61d78f992e2f89c986ba2b10546ea4461d35c24f9", "zh:9b12af85486a96aedd8d7984b0ff811a4b42e3d88dad1a3fb4c0b580d04fa425", - "zh:a1979ba840d704af0932f8de5f541cbb4caa9b6bbd25ed552a24e6772175ba07", - "zh:b058c0533dae580e69d1adbc1f69e6a80632374abfc10e8634d06187a108e87b", - "zh:c88610af9cf957f8dcf4382e0c9ca566ef10e3290f5de01d4d90b2d81b078aa8", - "zh:e9562c055a2247d0c287772b55abef468c79f8d66a74780fe1c5e5dae1a284a9", - "zh:f7a7c71d28441d925a25c08c4485c015b2d9f0338bc9707443e91ff8e161d3d9", - "zh:fee533e81976d0900aa6fa443dc54ef171cbd901847f28a6e8edb1d161fa6fde", + "zh:9ead5de0e123020926a0edaf88d9eed5cb86afe438a875528f6d11d0d27eed73", + "zh:ab7c940cbb2081314f4af3cdd61ed2c1d59fd7a60fa3db27770887d63072fbdd", + "zh:d52cd68006fd6fa8d028cdf569a6620fbc31726019beb7c75affa8764622d398", + "zh:f179ca86ad5d5fb88dfd8e8e7c448f2c0ad550d22152f939b8465baeaf9289e9", + "zh:f54dda271fa6dfee06537066278669a3f92c872e7dfa5a0184cd9117f7e47b8c", ] } diff --git a/terraform/infrastructure/iam/aws/main.tf b/terraform/infrastructure/iam/aws/main.tf index 6a8ffe6c9..aec15be35 100644 --- a/terraform/infrastructure/iam/aws/main.tf +++ b/terraform/infrastructure/iam/aws/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { aws = { source = "hashicorp/aws" - version = "5.84.0" + version = "5.88.0" } random = { source = "hashicorp/random" diff --git a/terraform/infrastructure/iam/azure/.terraform.lock.hcl b/terraform/infrastructure/iam/azure/.terraform.lock.hcl index 34ad5d9ee..ad98b498a 100644 --- a/terraform/infrastructure/iam/azure/.terraform.lock.hcl +++ b/terraform/infrastructure/iam/azure/.terraform.lock.hcl @@ -32,31 +32,31 @@ provider "registry.terraform.io/hashicorp/azuread" { } provider "registry.terraform.io/hashicorp/azurerm" { - version = "4.16.0" - constraints = "4.16.0" + version = "4.20.0" + constraints = "4.20.0" hashes = [ - "h1:5aUNrEyEto0kuqvVlot0oJIfjZvufkaVpBLFRAHKYEk=", - "h1:7e25Wr4cpUvlAcwL+9ZOeeA1xha84LqTZNviDaVQFlo=", - "h1:8hK4uDEChFAWE9MvC+/HBB4WUkhJdedn7Q4pLJEQDl4=", - "h1:HZdmFPnC/+x6si15pq4rGYv/1TrCcyQXLnDMqq1SONw=", - "h1:UNZga7kYMfYfDHmuP6LvHmJNXlb3fyvRY1tA9ol6yY4=", - "h1:ZJgJLXK4nZKfj1z2TIKCKa+7Jt+p1G5Mwty2PTF7Tso=", - "h1:iTxbOUuean5hkvi0xyxU+UXK5HT3DfxZYumlJHphCIw=", - "h1:kZJbZZTpZVW6rfj0wt4I7VFekUEDD5CRa1sAP6wrwGI=", - "h1:uIzu9HMGN1ySZ1s+iYCKY9UqsgCjgH05tnBg1DgHtV4=", - "h1:uulWiJ93kZmKKh6/EtHktJQ901npRmTb/ao7oTP402w=", - "h1:zQ3svnDlwO7XtuXurLKLanW7arcRbFmw/pUd1DzLuEU=", - "zh:2035e461a94bd4180557a06f8e56f228a8a035608d0dac4d08e5870cf9265276", - "zh:3f15778a22ef1b9d0fa28670e5ea6ef1094b0be2533f43f350a2ef15d471b353", - "zh:4f1a4d03b008dd958bcd6bf82cf088fbaa9c121be2fd35e10e6b06c6e8f6aaa1", - "zh:5859f31c342364e849b4f8c437a46f33e927fa820244d0732b8d2ec74a95712d", - "zh:693d0f15512ca8c6b5e999b3a7551503feb06b408b3836bc6a6403e518b9ddab", - "zh:7f4912bec5b04f5156935292377c12484c13582151eb3c2555df409a7e5fb6e0", - "zh:bb9a509497f3a131c52fac32348919bf1b9e06c69a65f24607b03f7b56fb47b6", - "zh:c1b0c64e49ac591fd038ad71e71403ff71c07476e27e8da718c29f0028ea6d0d", - "zh:dd4ca432ee14eb0bb0cdc0bb463c8675b8ef02497be870a20d8dfee3e7fe52b3", - "zh:df58bb7fea984d2b11709567842ca4d55b3f24e187aa6be99e3677f55cbbe7da", + "h1:/zBU/N0BTzGRlCUTnFvYg8UiD7Bh4HryW3y3AVDROjc=", + "h1:8TynqZl/QvhZiutnNk9uJZliWb20c9G+G8bGtTiliXI=", + "h1:BZDq7lDdLTYgIeAsLaiXLn8qycoR9D+NFs/OaC6LqNs=", + "h1:ELnu4gb15QAtc1RurC1H6A5OmV3zILizqbuL8kwUEmo=", + "h1:EMP1r+hGjE4zwj31RnVYEu0CLh3x7QSZ+4Z1ysVeqyM=", + "h1:O7hZA85M9/G5LZt+m0bppCinoyp8C346JpI+QnMjYVo=", + "h1:RAigruLqw4uLPyHtFnrgEsYNoZZG/sN+N1waujuiE6w=", + "h1:iWgZaQbV+/YXmO1+47R82zKF6ozCN8nnwLchYRiBtMo=", + "h1:m0gw9qg+hu43PlWDZuTKCFGp0SvBJIv338lIHOqLZmU=", + "h1:qMMFID97Se3U3dxypUF6edxz6TJG/WQfwO1mwOd3ze4=", + "h1:xyhSZmLLirjEN7lmrh4pdM6fOhaA0yWpHUgXdx69vV4=", + "zh:0d29f06abed90da7b943690244420fe1de3e28d4c6de0db441f1af2aa91ea6b8", + "zh:2345e07e91dfec9af3df25fd5119d3a09f91e37ca10af30a344f7b3c297e9ad8", + "zh:42d77650df0238333bcce5da91b4f3d62e54b1ed456f58a9c913270d80a70262", + "zh:43ce137f2644769ceada99a2c815c9c30807e42f61f2f6ce60869411217375f9", + "zh:5e4d8f6a5212f6b7ba29846a2ff328214c7f983ce772196f8e6721edcefd4c59", + "zh:69613d671884fc568a075359e2920d7c19e6d588717b4532b90fb4a4ca8aabd0", + "zh:827ca4fcc25958c731677cb1d87cb09764e3a24ae4117fd9776429341fcdeabe", + "zh:8fad25f949dff7c6f40ea22b13a8b4de6ea0de3c5a975c4a3281529e4797e897", + "zh:b3d175e2725fe38f2a71d5fb346a9d4ff70d449a9d229c95c24f88e764dd2d47", + "zh:c53f3fef67aa64664c85bb8603b0a9730a267a76d7d84ceae16416de7ccb2437", "zh:f569b65999264a9416862bca5cd2a6177d94ccb0424f3a4ef424428912b9cb3c", - "zh:f7fb37704da50c096f9c7c25e8a95fe73ce1d3c5aab0d616d506f07bc5cfcdd8", + "zh:f7d9ff06344547232e6c84bc3f6bf9c29cf978ba7cd585c10f4c3361a4b81f22", ] } diff --git a/terraform/infrastructure/iam/azure/main.tf b/terraform/infrastructure/iam/azure/main.tf index b87630a0e..42782941d 100644 --- a/terraform/infrastructure/iam/azure/main.tf +++ b/terraform/infrastructure/iam/azure/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { azurerm = { source = "hashicorp/azurerm" - version = "4.16.0" + version = "4.20.0" } azuread = { source = "hashicorp/azuread" diff --git a/terraform/infrastructure/iam/gcp/.terraform.lock.hcl b/terraform/infrastructure/iam/gcp/.terraform.lock.hcl index 082a504ca..22b3c1b19 100644 --- a/terraform/infrastructure/iam/gcp/.terraform.lock.hcl +++ b/terraform/infrastructure/iam/gcp/.terraform.lock.hcl @@ -2,32 +2,32 @@ # Manual edits may be lost in future updates. provider "registry.terraform.io/hashicorp/google" { - version = "6.17.0" - constraints = "6.17.0" + version = "6.21.0" + constraints = "6.21.0" hashes = [ - "h1:2ycjv7XhGgMjTnDR+6ZfSLCPrm3o5nLn9RZ7g7iYT+0=", - "h1:ATBXbtcc0yaEQNkTK8eWxmMXH045AfLSDFMJOtoq3qQ=", - "h1:J7qp2vw9rlE7S80yO/WAK6kpri6r18J18/9lYm9lNB8=", - "h1:KaUdG4wHUzLBnIMeuYWyVMSSPmeemyJqMyc+/c0jYDE=", - "h1:QRjzeNePGTvp1a9UzGqu9Z8mMVjnRkfbZy2Uq13DRjU=", - "h1:Ro8XL1RTzXYs7e7EenvpiU/Rgsw/X6maSGWYb6e3Tpo=", - "h1:TQtswaM3aJSK0DPpBrpkGC9wQBoj9bO0h93sJ9NE264=", - "h1:aEcEXIGwaTDu+XAQP1xxso97MxDLWvLw9q0Q9kZiz6A=", - "h1:jTC2VqqElSe4qv/GS2rgI+AhILiVv1uIh0QJMnBemm8=", - "h1:n5tFN82RSrqLQlueXx5h4kgUbud2YhMkSDv3hw41kzE=", - "h1:siQ5DPLcE3KCbl55zr9yE1ceecICvbZ3MKkLbIcHZ04=", - "zh:2ae1ba33889babf740298f131c3151477c638a6d8dc2d850f207380ae91d5ee0", - "zh:2b950b0f4dcb1f79e10ad9611fc1573114028be423af742eb9b5027d1e1127fc", - "zh:4557ce5a9ce78e365af99c15c3a2d4d37a246535d0d62182a66cfc1c9de53cbd", - "zh:5ced8255a5cd868ebd6a0ba377b5016f578be402daea7479e488c109a74e8339", - "zh:6b7666678f6238637c7f78020edb8405669804a18ae580296419fb4179642cf6", - "zh:8677c153477daf1b636421a00633f25022b8c33fc803699d6ea6f89b75b4554b", - "zh:9f85498e26bf90049c252e6220a5a47cff88a4cd249e08845c59bd4c16aa48f3", - "zh:dce93c05d1852f1c692566c2ebf7200cb98aa059301044c2211c10319354c680", - "zh:df72b36e76e0721904c63eab34191bc9c4ccf93d067c2a0d455dd8bb39e73b66", - "zh:e9a9e8d8ae14ab6e661f3f9b07c5edec60507203dac7d2f187dc716317f4d79c", + "h1:/2ryBD3VQ/z8JXb5eyHvSdTCeLFNakInr/L7Dxbty+0=", + "h1:3H1lP+5rZ0tgYR1KdXW685CdfZwPIMXZZwfV8Sxk9uY=", + "h1:8gVYYyXvXKolFLbLS7i7A4l+3Yn8daf0frtgtzGHCm4=", + "h1:FAlxafbm3jeUgH4l+NdOuqbdu2yGnq68cTMTq9aBYmE=", + "h1:M4X6/r6w8QrkzoOu/8+61+fkYy4+kqNt1fbHE7Igvgg=", + "h1:TS3CkZ8djIu+v9NJ8PxreYD3hywG8sbeTbtpQQcD5tg=", + "h1:Uhpn0W3JpwQr9WlzDZwOdTtWPlv1buGljc0096etzjM=", + "h1:dcklD/rIK/ES/o8AybEMCqkqMJcYCDy90su7umQHHnY=", + "h1:ia0GGmKDt45bBjld4tapN3fFrrg4yVziFTaWWDM6sxc=", + "h1:pZhpGdzOtzGkX38PIYbXWilwA/LtWXQ22dkt6Fh2DAQ=", + "h1:uiKyMwXmBBeXZv471jVUZBuRXUgIGwwheKW3mcVHq8Q=", + "zh:1c2462367d92f6f8f6c527115905f7cca78e48cf5d5bc7448d3beeb7c9e895eb", + "zh:3644dbd09c3740e6d843e035de34a74ed41ffc32e7ed04a19aecddc4c57334cc", + "zh:3a586bbb9a9c6463c975a94ddd4671f2a84992a2c169bfb2f5053c2cea55849c", + "zh:4ae96672e6a52a077760a11c95946ec9d3f84f7ab84c0ba3c0cb66c3d3580d59", + "zh:9c26b3dbc1f9a594d1d07b6a25ce089f8463e8331324f4ecde73829e9d1d5ee5", + "zh:b99a602111d6ca5842c852ac1eff5c009f1d75492e355ea25f3dbd6e008e4d9a", + "zh:d45100c41c940c35c07fae2876f6cc654328d405077f01d268e8bd5a25b56c30", + "zh:de6e14e85a9ea2322a4fd971fde3b71071e7b6435a12dbcd3b8c5f42765e8b3c", + "zh:e22f6b54cfebb0c1a0991d83adc83b3d454ba6d9b5c21574af135799b488ed66", "zh:f569b65999264a9416862bca5cd2a6177d94ccb0424f3a4ef424428912b9cb3c", - "zh:fb92287bca4fc7b49666c644ca7789e4acf5b17317acb963f138c0ae6347a289", + "zh:f6964268874a15788dfed47a26cb880718f47c94cba7c8a0284b70921fec807b", + "zh:ff51b3e83149798ce6c7545688fe3b9703b04d5c0376cd55215a93767144f40e", ] } diff --git a/terraform/infrastructure/iam/gcp/main.tf b/terraform/infrastructure/iam/gcp/main.tf index 9ed3759b3..2c11f1bdd 100644 --- a/terraform/infrastructure/iam/gcp/main.tf +++ b/terraform/infrastructure/iam/gcp/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { google = { source = "hashicorp/google" - version = "6.17.0" + version = "6.21.0" } } } diff --git a/terraform/infrastructure/openstack/.terraform.lock.hcl b/terraform/infrastructure/openstack/.terraform.lock.hcl index cd8658f5f..3754fd184 100644 --- a/terraform/infrastructure/openstack/.terraform.lock.hcl +++ b/terraform/infrastructure/openstack/.terraform.lock.hcl @@ -26,38 +26,38 @@ provider "registry.terraform.io/hashicorp/random" { } provider "registry.terraform.io/stackitcloud/stackit" { - version = "0.38.1" - constraints = "0.38.1" + version = "0.43.0" + constraints = "0.43.0" hashes = [ - "h1:1LAGJMIsTnf+DhVZDZLtpof5FB7VtEsxE98p1t5PuOs=", - "h1:1dQrHeQdOpewhnh/Rz6JIJqj6kyIwso9w7s6tCGDtsM=", - "h1:4fYdfWm+ti2xYTX90UGOrYkVLtM8tSi+HfkcBJdIObM=", - "h1:7TooHG6to8D2RlDoEP0Fuz0Lktchmu0H0oBByVzMwKM=", - "h1:Km8FPzLnedZcFENgo4u4af37r+VkCWtfAf9dMznOxqg=", - "h1:TvFy03F4/9vesitFMBrIkHC9iWX1eeV4wj0XAHdpnVA=", - "h1:Uis0BoqSQfXvPyV3CbEIjKNgTqbh3NhQRPkOuGpNmn4=", - "h1:XtQ8SWl4Pqf1aAebXj9PoOZrkqgjcOZNuPj6dPuMV/M=", - "h1:Y0kOAyLn1m/qpue90crAffDbDkq7xHnIJGxw5DGKEP4=", - "h1:fh2O14WRqldJx5YBpdLNPyqHg3WHVeJmM44hoF5YQl8=", - "h1:gY+i4W98ezO6gaVNID3kLA0+OYeMd/9aMOqdJzIdDN4=", - "h1:hPo/FfJ8IfaB50Zlu/by+2icTWhAgackLdzsd2JApos=", - "h1:oBE467k/eARxlMCaCW+3OgpVC1HkZNIP+6ETXmqUPYk=", - "h1:wS1JAwpfkBgAKDCUPlp+dUhcMNaEL4XnFK/5Z4DN+IE=", - "zh:084513bebdc2dd7cdfc8e4686ac4ba25e0bf9290c133a62f89a1544d13626fd9", - "zh:0958295f3fa2af31e89988af4d9118321867d1ec85e3fcf24c1da6f39300d09b", + "h1:39MzRvF21cIRoUGA7UbAhw0xucgcv9yjVEs+ndy82Ng=", + "h1:4b8A9ooj1/klabO2q/dcHeo4zcphac1gAm2gJ9ja6gM=", + "h1:8uU5OCaJ1IMBgTIwbbADbDv/8LuawaA3TcMbYR4uT7o=", + "h1:EqUnbh2nRivUjbXf6hpsbM3FB3eDVlpLZ8apWUMoo5k=", + "h1:I81D3nCh+2EHBJTCbTOgplYImZDR62TuRKikvHsOvaM=", + "h1:JyJvn8oFkmNkRrXUJAlBt94wK50Nk6TJbw3xNrzZdJU=", + "h1:OctY7rNYy4iBODgJDdvzza0Wry6lvJ1nshY/GS3lYhI=", + "h1:R8K1ZF2CvRln5D3L5429BgMp/4sxDLhxdziJmNk8BWM=", + "h1:RHCfqNAEgLoH8kEnKLjwfs301LpOnJpudd/ZHt4s9HI=", + "h1:Ui02h0uPk1NkxlDcS5c7qX3UQGW0i6fYdcbdG5zGSUc=", + "h1:WNHcKDx5NovyhTKxTGwjUoXx/QAiWwoqd82z8SObN28=", + "h1:fOyilk4619RGgXY/DSaU2IpIOBhqQs3fPDzLUuw2N5M=", + "h1:npfPqFK+A8k5rlAF1OHyYUEquGRp6g0waro87lwyJvs=", + "h1:v1yk+DKyV45Mz+YmF0oG7r5Ok3iGPeO/oFPpVAbA7ZI=", + "zh:038c1871e9b609159573619800cf160a77d6d41670a9adfec4aabdcdfa463226", "zh:0dde99e7b343fa01f8eefc378171fb8621bedb20f59157d6cc8e3d46c738105f", - "zh:210c657417030db1053382e5e622e658b8529b3ef14c01c6387a5c6123454e15", - "zh:3b5dbfa4391300b0b62dbf40441d4448c9b9b6a6a501a07c2fabde4b9e9820b0", - "zh:4976de748f0bcd0317f9a3fdcdd179ba9609532359ecee92c51a64c212a91608", - "zh:4ba4651d6e7ca04befe4bac30daf38b603ec5e3477cf5d92e3612521537e2af5", - "zh:55e1c7e9137c41e3e971554280ee0247593fcbf0c4da0450f0892d016ca3ad63", - "zh:7fa01355c2b3cd2ff5067234190dcf052391de4f708203ae81a9ea67fee4c28e", - "zh:af244a5cb1c0166f64900e794b99feaf5bc5120fdd85c1ae34f11390ac6bd435", - "zh:cc386615a10b268e31e7b9357a88be809eeb3dd3168d13e1b5237558947598cf", - "zh:da6220184444728f949b3cf70ca32d3aa87eac8633b882e622a1b78fd8a63bb7", - "zh:e058bcaf81b84ba74a1ce9f0f89d7e8bf564558a6f312cc60ce9e939bba90eb0", - "zh:e8f8e2e2ee2c2069ad552ff4350414fde874a04db058c03544917ddb88140e0c", - "zh:fe7fa7fca9d5e7ccfec95ba6ff9ff00e13a5de87b0378293dbd43d3e19aeb0a6", + "zh:0f594d08f6ba2e2800176619f956e9ab4524fad29c54a1f8ea8bfc9920dc7b1b", + "zh:19e9eda25184eb6e83ce85485a39a1d78e24a8bf8579b35bb4005d5f7522573b", + "zh:1b421734f1c694907de15dcea8302f42aed4cc7b617584f03daccc71b3f272f9", + "zh:204deb43fb3c85184ea96f212cc07f81a10eaac9f515621c9cec88d00d2ff9a7", + "zh:22ffa5022ab2c919ef0b0869d3d2465057c5434d8812fb67c7330b0d29377576", + "zh:35d17f2d9dbe0847707bd63aa8c1d0442ac3cc294f56e686a8e8afa13f981b58", + "zh:43580d52aa392ff05141a7992e352445ec3032bcfb649c3d890802bc5afaa3fa", + "zh:6765f21f1f0817d0a5753e47b2b3e30d627b58e6d6505d6fb4a303c3cb7dd14a", + "zh:6ba8b4f08bc47c98d7ad3c51fc112452101a97daa855ff7ecf1138d8abdd3e46", + "zh:8f9502f576ad3ba975da834474bdf9faf1f9b4891f6129b258b162d896b21402", + "zh:a1863d7d48916d6cf20cff7ad5f827e68b870eeea005f9f1a1c22b3d0289592b", + "zh:ec44380407b313c67d43e839f8389717a145ec02a659cb482d37b5dd8f7093bd", + "zh:f7d68470b7b04996ec7b371d9600aaaf4b537b54e6ec6a814b81e931c78070e6", ] } diff --git a/terraform/infrastructure/openstack/main.tf b/terraform/infrastructure/openstack/main.tf index 1ccbe1542..3667b99ce 100644 --- a/terraform/infrastructure/openstack/main.tf +++ b/terraform/infrastructure/openstack/main.tf @@ -7,7 +7,7 @@ terraform { stackit = { source = "stackitcloud/stackit" - version = "0.38.1" + version = "0.43.0" } random = { diff --git a/terraform/infrastructure/openstack/modules/stackit_loadbalancer/main.tf b/terraform/infrastructure/openstack/modules/stackit_loadbalancer/main.tf index 5156c30d1..17ca10d08 100644 --- a/terraform/infrastructure/openstack/modules/stackit_loadbalancer/main.tf +++ b/terraform/infrastructure/openstack/modules/stackit_loadbalancer/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { stackit = { source = "stackitcloud/stackit" - version = "0.38.1" + version = "0.43.0" } } } From 159e60d8bbed5c811ae258b2786fbfab25ea0879 Mon Sep 17 00:00:00 2001 From: edgelessci <71088502+edgelessci@users.noreply.github.com> Date: Fri, 21 Feb 2025 12:36:20 +0100 Subject: [PATCH 118/311] image: update measurements and image version (#3658) Co-authored-by: edgelessci --- .../measurements/measurements_enterprise.go | 16 ++++++++-------- internal/config/image_enterprise.go | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/internal/attestation/measurements/measurements_enterprise.go b/internal/attestation/measurements/measurements_enterprise.go index 58629919b..d8281c7a7 100644 --- a/internal/attestation/measurements/measurements_enterprise.go +++ b/internal/attestation/measurements/measurements_enterprise.go @@ -19,14 +19,14 @@ package measurements // revive:disable:var-naming var ( - aws_AWSNitroTPM = M{0: {Expected: []byte{0x73, 0x7f, 0x76, 0x7a, 0x12, 0xf5, 0x4e, 0x70, 0xee, 0xcb, 0xc8, 0x68, 0x40, 0x11, 0x32, 0x3a, 0xe2, 0xfe, 0x2d, 0xd9, 0xf9, 0x07, 0x85, 0x57, 0x79, 0x69, 0xd7, 0xa2, 0x01, 0x3e, 0x8c, 0x12}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xba, 0xf2, 0x8b, 0xee, 0xcf, 0x9d, 0xdb, 0xf2, 0x3e, 0x88, 0x4e, 0xb0, 0x1c, 0x04, 0xd2, 0x51, 0x27, 0x98, 0xa0, 0x4d, 0xf6, 0x6c, 0x61, 0x69, 0xf0, 0x4e, 0x3e, 0xa2, 0x2d, 0xdb, 0x50, 0x65}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x3c, 0xb4, 0x2b, 0x91, 0x36, 0x55, 0xb6, 0xcb, 0xb4, 0x17, 0xa2, 0x4e, 0x75, 0x66, 0x93, 0x99, 0xdf, 0xc7, 0x9c, 0xf9, 0xad, 0x70, 0x52, 0xda, 0x21, 0x90, 0x1b, 0xc4, 0x25, 0x7d, 0xba, 0x9f}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x29, 0x81, 0xbb, 0x6e, 0x8b, 0xf8, 0xf5, 0x6f, 0x87, 0x56, 0x1a, 0xb4, 0xcf, 0x09, 0xe5, 0xb5, 0xdb, 0x6e, 0x9c, 0x66, 0x3b, 0xb9, 0x32, 0x55, 0x3d, 0x02, 0x75, 0x24, 0x62, 0x8c, 0x77, 0xf4}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - aws_AWSSEVSNP = M{0: {Expected: []byte{0xd6, 0xdf, 0x85, 0x53, 0x58, 0xf5, 0xb1, 0x0f, 0x06, 0xf0, 0xfa, 0xb3, 0xf4, 0x08, 0xad, 0x26, 0xcd, 0x16, 0x5a, 0x29, 0x49, 0xba, 0xd6, 0x9e, 0x2c, 0xc7, 0x56, 0x92, 0x52, 0x9e, 0x66, 0x2a}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x8f, 0xc1, 0x73, 0x73, 0x34, 0x3b, 0x1e, 0x10, 0xbf, 0x29, 0xa9, 0xb6, 0x2f, 0x89, 0x94, 0x28, 0x68, 0xe9, 0x5e, 0x1e, 0x9a, 0x30, 0xc8, 0xb7, 0xaa, 0x1a, 0x9f, 0x18, 0xa8, 0x8a, 0x64, 0x24}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xbd, 0x95, 0x55, 0x60, 0xce, 0x8c, 0xd3, 0x0a, 0x7b, 0x45, 0xf3, 0x83, 0xdb, 0xec, 0xa1, 0xfe, 0x10, 0xa9, 0x7d, 0xdf, 0x4e, 0x28, 0xc4, 0x40, 0x7f, 0xc4, 0x29, 0x31, 0x43, 0x7c, 0x4f, 0x49}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x01, 0xef, 0xf4, 0xfc, 0x65, 0x06, 0xee, 0x33, 0xc1, 0x35, 0xca, 0x8a, 0xaa, 0x30, 0xe4, 0xa7, 0xae, 0x39, 0x74, 0xcd, 0x6a, 0x17, 0x39, 0xef, 0xef, 0x24, 0x44, 0x48, 0x9a, 0xe5, 0xbe, 0x57}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - azure_AzureSEVSNP = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x43, 0xec, 0x54, 0xee, 0x84, 0x39, 0xf3, 0x81, 0xa1, 0xe6, 0x26, 0x9c, 0x85, 0x24, 0x4d, 0xf6, 0x6d, 0x82, 0x87, 0x8d, 0x31, 0x12, 0xf0, 0x6c, 0x5b, 0xe9, 0x68, 0x32, 0x0d, 0xb8, 0x65, 0x54}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x30, 0x43, 0x8d, 0x04, 0x35, 0xf2, 0x0b, 0xe6, 0x9d, 0xcd, 0x1f, 0x35, 0x12, 0x99, 0xa9, 0x09, 0x45, 0x2e, 0x1f, 0x02, 0xe5, 0x24, 0x13, 0x8a, 0xed, 0x57, 0xd7, 0x06, 0xe0, 0xdc, 0xdd, 0xdc}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x65, 0xc9, 0x0b, 0x46, 0x29, 0x13, 0x2d, 0x5d, 0xa1, 0x84, 0x83, 0x22, 0x3e, 0x53, 0xb7, 0xf5, 0xd5, 0x3b, 0x46, 0x61, 0xda, 0x1d, 0x70, 0xf5, 0xda, 0xea, 0xc0, 0xb6, 0x86, 0x70, 0x37, 0x69}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - azure_AzureTDX = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xb3, 0xc2, 0x0e, 0x50, 0x2a, 0x7e, 0xd8, 0x65, 0xbb, 0x2e, 0xdf, 0x9c, 0x28, 0x91, 0x14, 0x79, 0x9b, 0x4d, 0xed, 0x50, 0x2f, 0x96, 0x17, 0x22, 0xf2, 0xd5, 0xa5, 0x55, 0x03, 0xa4, 0xe7, 0x67}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xf4, 0x66, 0x7d, 0x8d, 0xa3, 0x8a, 0x03, 0x11, 0x8f, 0x80, 0xcb, 0x96, 0xe9, 0xe3, 0x01, 0x7a, 0xee, 0x22, 0xec, 0x7e, 0x74, 0xa3, 0x62, 0xb5, 0x43, 0x0a, 0x98, 0xb6, 0x7d, 0x35, 0xaa, 0x26}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xc9, 0x0e, 0x47, 0x9c, 0xbc, 0x3b, 0xe7, 0xd8, 0xf2, 0x35, 0xe2, 0x0b, 0xc3, 0xe1, 0xc5, 0xea, 0xe3, 0x5a, 0x27, 0xc0, 0xb6, 0xbb, 0xae, 0xe0, 0xee, 0x39, 0x69, 0x72, 0xfe, 0x00, 0x30, 0xad}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + aws_AWSNitroTPM = M{0: {Expected: []byte{0x73, 0x7f, 0x76, 0x7a, 0x12, 0xf5, 0x4e, 0x70, 0xee, 0xcb, 0xc8, 0x68, 0x40, 0x11, 0x32, 0x3a, 0xe2, 0xfe, 0x2d, 0xd9, 0xf9, 0x07, 0x85, 0x57, 0x79, 0x69, 0xd7, 0xa2, 0x01, 0x3e, 0x8c, 0x12}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x60, 0x99, 0x69, 0xd9, 0xd0, 0x9d, 0x9d, 0xd8, 0x4b, 0xc5, 0x98, 0xe8, 0x3b, 0x44, 0x3e, 0xf5, 0xbb, 0xaf, 0x7d, 0xb0, 0xe6, 0xe2, 0x93, 0xd7, 0x1d, 0xf4, 0xc8, 0xce, 0x3f, 0xdc, 0x49, 0x1e}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x6c, 0x1d, 0xa2, 0x80, 0x81, 0xdc, 0xdd, 0x0f, 0x36, 0x14, 0xea, 0x95, 0xf6, 0x44, 0x41, 0x53, 0xf0, 0xa2, 0xe5, 0xc5, 0xec, 0x28, 0x65, 0x70, 0x80, 0xc7, 0x19, 0x00, 0xb8, 0xbd, 0x86, 0x1e}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x3e, 0x66, 0x03, 0x86, 0x4d, 0x08, 0x80, 0xbc, 0xf9, 0xdc, 0xe1, 0xfe, 0xc7, 0x77, 0xe7, 0x6b, 0xd8, 0x1c, 0x22, 0x80, 0xc9, 0x6e, 0x5d, 0x2a, 0xaa, 0x19, 0x8a, 0x47, 0x8f, 0xd9, 0xbd, 0x70}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + aws_AWSSEVSNP = M{0: {Expected: []byte{0xd6, 0xdf, 0x85, 0x53, 0x58, 0xf5, 0xb1, 0x0f, 0x06, 0xf0, 0xfa, 0xb3, 0xf4, 0x08, 0xad, 0x26, 0xcd, 0x16, 0x5a, 0x29, 0x49, 0xba, 0xd6, 0x9e, 0x2c, 0xc7, 0x56, 0x92, 0x52, 0x9e, 0x66, 0x2a}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x4c, 0xc7, 0xdf, 0x86, 0x5f, 0x73, 0xe3, 0xec, 0x3f, 0x7f, 0xaf, 0x53, 0x65, 0x37, 0x1f, 0x2e, 0x68, 0x93, 0xfb, 0x72, 0xda, 0xc8, 0xb5, 0x42, 0x73, 0x0b, 0x37, 0x3e, 0x31, 0xd2, 0xf4, 0x0d}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x82, 0xa6, 0xf9, 0x27, 0x22, 0xd4, 0xbe, 0x4d, 0xe1, 0x4f, 0xde, 0x3b, 0xdf, 0x7c, 0x8b, 0xdd, 0xfd, 0x4b, 0xd9, 0x11, 0x40, 0x7d, 0x2e, 0xdf, 0xc7, 0xa2, 0x80, 0x3b, 0x64, 0x2f, 0x85, 0x00}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x49, 0xf4, 0x07, 0x22, 0xd2, 0xc8, 0xb7, 0xb4, 0xe9, 0xd0, 0x83, 0xb2, 0x0a, 0xeb, 0x32, 0x0c, 0x8e, 0x8f, 0x20, 0x19, 0xc5, 0x7d, 0xba, 0xa1, 0xa1, 0x24, 0x41, 0xb0, 0x00, 0xce, 0xf0, 0x92}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + azure_AzureSEVSNP = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xd8, 0x86, 0x24, 0xf2, 0x2f, 0xcc, 0xf4, 0x73, 0x04, 0x1e, 0xa2, 0xca, 0x15, 0xe2, 0xa1, 0x65, 0x47, 0x61, 0x04, 0x2d, 0xce, 0x7c, 0x18, 0x4d, 0x9c, 0x93, 0xd5, 0x9d, 0x6c, 0x3a, 0x78, 0x50}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xa9, 0x23, 0xb6, 0x14, 0x9d, 0x65, 0xec, 0x05, 0xb9, 0x77, 0xd0, 0xbf, 0x7c, 0x1c, 0xb6, 0x8a, 0x86, 0xdf, 0xa4, 0xa8, 0x36, 0xd0, 0x0a, 0x4d, 0xd2, 0x09, 0x1c, 0xc2, 0x5e, 0x00, 0x38, 0x6e}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x74, 0xfd, 0x6f, 0x37, 0x3e, 0x98, 0xdc, 0x9e, 0xbe, 0x04, 0x54, 0x1b, 0x84, 0xd8, 0x2b, 0x62, 0x20, 0x1a, 0xb0, 0xf5, 0xf5, 0xe2, 0xba, 0x8c, 0x73, 0x14, 0xb1, 0x0f, 0x40, 0x6f, 0x15, 0x9e}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + azure_AzureTDX = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x09, 0x1b, 0xb6, 0xfc, 0xe6, 0x9b, 0xc4, 0xb2, 0x16, 0x4f, 0xae, 0x5b, 0xeb, 0xcb, 0xaa, 0x80, 0x18, 0x9d, 0x22, 0x72, 0x79, 0x83, 0xc1, 0xc8, 0x0d, 0x84, 0x90, 0x28, 0x4d, 0x78, 0x1d, 0xbb}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x0b, 0x1f, 0x6b, 0xc4, 0x6f, 0x19, 0x88, 0x19, 0x3e, 0x13, 0xa0, 0x24, 0xe2, 0x7a, 0xc8, 0x0e, 0xe0, 0x17, 0x6e, 0x09, 0x6b, 0x97, 0x03, 0x6f, 0xf1, 0x7a, 0x0c, 0x64, 0x61, 0xf5, 0x1b, 0x82}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x41, 0x0a, 0xde, 0x2f, 0xd5, 0x06, 0x8f, 0xda, 0x09, 0xb5, 0x4c, 0x35, 0x14, 0x3c, 0x71, 0x71, 0xae, 0x8b, 0x90, 0x5c, 0xf6, 0x3e, 0xc6, 0xad, 0xf4, 0xb2, 0xab, 0x49, 0x0c, 0x4a, 0xf7, 0x1c}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} azure_AzureTrustedLaunch M - gcp_GCPSEVES = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x20, 0x65, 0x27, 0x3c, 0xf2, 0x50, 0x10, 0x07, 0x74, 0x18, 0x34, 0x13, 0x2b, 0x78, 0x60, 0x1a, 0xb2, 0x32, 0x48, 0xa5, 0xc2, 0x40, 0x9d, 0xa5, 0xd8, 0x6f, 0x92, 0x35, 0x19, 0xfb, 0x62, 0x5e}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xea, 0xe5, 0xc7, 0x22, 0xdd, 0x9c, 0x41, 0x6f, 0x74, 0xd9, 0x8b, 0x65, 0x74, 0xd7, 0xfd, 0xc1, 0xc8, 0xbf, 0xb7, 0xf3, 0xf8, 0x13, 0x49, 0x36, 0xf1, 0x7d, 0xf5, 0x1c, 0xdb, 0xa6, 0x26, 0x31}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x44, 0xd3, 0x46, 0x4e, 0x4e, 0x16, 0xfb, 0x4d, 0x81, 0xeb, 0xb2, 0x44, 0xdc, 0xbe, 0x10, 0x90, 0x51, 0xad, 0xe1, 0x0c, 0x37, 0x18, 0xfc, 0x80, 0xa0, 0x43, 0x5b, 0xd2, 0xa9, 0x1f, 0x04, 0xd3}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - gcp_GCPSEVSNP = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x88, 0x45, 0x83, 0x61, 0xf6, 0xa1, 0x40, 0x4b, 0x39, 0xf9, 0xf1, 0x28, 0x31, 0xc5, 0xc7, 0xf3, 0x86, 0x71, 0xb8, 0x19, 0xde, 0x62, 0x7d, 0x25, 0x15, 0x85, 0xc5, 0x56, 0x0a, 0x37, 0xde, 0x85}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x0f, 0xa6, 0xa1, 0x0c, 0x15, 0xea, 0xb5, 0x3b, 0x4c, 0xfb, 0x5d, 0x60, 0x22, 0x72, 0x01, 0x48, 0x18, 0xb5, 0xbd, 0x66, 0x20, 0x4b, 0x80, 0x87, 0x32, 0x9b, 0xba, 0x98, 0xd7, 0xe3, 0xf0, 0x12}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x1c, 0x49, 0x07, 0xf4, 0xd3, 0x70, 0x07, 0x05, 0x34, 0xf8, 0x99, 0x12, 0x91, 0x40, 0xfc, 0x62, 0xf7, 0xf2, 0xf4, 0x2e, 0x08, 0x6a, 0xa3, 0x76, 0xc1, 0xef, 0xc0, 0x28, 0x20, 0xb9, 0xfd, 0xb8}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - openstack_QEMUVTPM = M{4: {Expected: []byte{0x51, 0x88, 0xc0, 0x51, 0xe6, 0xdf, 0x1a, 0x94, 0x8b, 0x03, 0xd7, 0xf1, 0x05, 0xdc, 0xbe, 0x9c, 0x4b, 0x2c, 0x1b, 0x57, 0x81, 0xda, 0x79, 0x05, 0xe3, 0x45, 0x2e, 0x72, 0x45, 0xcc, 0x2b, 0xd2}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x28, 0x84, 0x34, 0x60, 0x2d, 0x46, 0xe6, 0xba, 0xa4, 0x0b, 0xdf, 0x13, 0xe1, 0xfa, 0x25, 0xe8, 0xc1, 0x40, 0x7c, 0x85, 0xb0, 0x49, 0xda, 0xc3, 0x46, 0x8d, 0xb6, 0xb5, 0x0f, 0xb0, 0x7f, 0x09}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x77, 0x10, 0x7a, 0xf5, 0xbc, 0x66, 0x2e, 0x2a, 0x6b, 0x35, 0xbe, 0x7c, 0xab, 0x8d, 0x74, 0x5a, 0x98, 0x6a, 0x85, 0xf9, 0xe2, 0x19, 0x7e, 0xfd, 0x0b, 0xef, 0xa2, 0x25, 0x87, 0xc4, 0x94, 0x0d}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + gcp_GCPSEVES = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xfa, 0xb6, 0x56, 0xb7, 0xd3, 0x75, 0xf7, 0x8d, 0x37, 0x76, 0x5f, 0xf6, 0xa1, 0x06, 0x7a, 0xad, 0x37, 0xf1, 0x1f, 0x8a, 0xcd, 0x30, 0x9c, 0x2a, 0x6f, 0x51, 0xdb, 0x02, 0x04, 0xd1, 0xa6, 0x5d}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xd6, 0xf5, 0x69, 0xd8, 0x9d, 0x8d, 0x90, 0x99, 0x4a, 0x00, 0xb8, 0x70, 0x15, 0x1d, 0xfb, 0x3f, 0xa6, 0x69, 0xc2, 0x33, 0xb7, 0xdb, 0x3d, 0x70, 0xde, 0xcf, 0x0a, 0x7b, 0x49, 0x04, 0xe7, 0x48}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x2e, 0x37, 0xbd, 0x92, 0x48, 0xff, 0x4b, 0x5d, 0x18, 0xca, 0x44, 0xf9, 0xf6, 0xfa, 0xd6, 0x09, 0x58, 0x86, 0x30, 0x13, 0x2e, 0x7a, 0x05, 0x97, 0x0b, 0x65, 0x25, 0x53, 0x75, 0x57, 0x7c, 0x3f}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + gcp_GCPSEVSNP = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x59, 0x40, 0x09, 0x14, 0xea, 0xee, 0x41, 0x41, 0xa0, 0x66, 0xdd, 0x10, 0xa4, 0x72, 0x69, 0xec, 0xc9, 0xfc, 0x38, 0x85, 0xaa, 0x6b, 0xaa, 0x32, 0xaf, 0x9d, 0xc3, 0x5b, 0x8d, 0xfd, 0xf8, 0x5d}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x5f, 0xfe, 0x5a, 0x28, 0x0e, 0x84, 0x96, 0xaa, 0x68, 0xb3, 0xea, 0x2b, 0xcb, 0x4b, 0x6d, 0x21, 0x2f, 0x8f, 0xaa, 0x38, 0xa6, 0x51, 0x3f, 0xf9, 0x52, 0x9b, 0xc7, 0xa6, 0x48, 0xd1, 0x72, 0x0c}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xf1, 0xf7, 0xbb, 0x05, 0xb8, 0x7c, 0x82, 0x67, 0x7d, 0xc5, 0xdd, 0x46, 0x86, 0x16, 0x2d, 0x8c, 0x29, 0xd6, 0xc1, 0xab, 0x73, 0x9e, 0xef, 0x0d, 0x01, 0xc5, 0xbf, 0x50, 0xc9, 0xac, 0x28, 0x0d}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + openstack_QEMUVTPM = M{4: {Expected: []byte{0xe4, 0x08, 0x0c, 0x26, 0x0a, 0x63, 0xc4, 0xb8, 0x23, 0x32, 0xea, 0x05, 0x96, 0xf0, 0x3b, 0x95, 0x88, 0x3b, 0xdf, 0x2b, 0x42, 0x9f, 0xc2, 0x24, 0x91, 0x5b, 0x07, 0x98, 0x04, 0xa6, 0x5e, 0x18}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xa6, 0xe2, 0x8d, 0x62, 0x6e, 0xe2, 0x49, 0x8c, 0xf5, 0x17, 0x75, 0x2e, 0xc9, 0x99, 0xf4, 0x7f, 0x60, 0xb3, 0xf0, 0x39, 0x87, 0x30, 0xc9, 0xfe, 0x22, 0xe2, 0x81, 0xbc, 0xcd, 0xac, 0xbd, 0xa5}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x3c, 0x0c, 0xc4, 0xf7, 0x97, 0x4c, 0x6b, 0xd6, 0x18, 0x45, 0x07, 0x95, 0x4d, 0x64, 0x98, 0x11, 0x86, 0x88, 0xd0, 0xcd, 0xa6, 0xf5, 0x0b, 0xed, 0xac, 0x22, 0x37, 0x93, 0xa7, 0x62, 0xf4, 0xf8}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} qemu_QEMUTDX M - qemu_QEMUVTPM = M{4: {Expected: []byte{0x8e, 0xdd, 0x62, 0x20, 0x84, 0xba, 0xd7, 0x0a, 0x25, 0xfc, 0x70, 0xc8, 0xd7, 0x63, 0xf8, 0xaa, 0xaa, 0x15, 0xda, 0xf5, 0xb3, 0xe3, 0xfe, 0x35, 0x11, 0x10, 0xe2, 0x6a, 0x60, 0x23, 0x0e, 0xc1}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xa6, 0x43, 0xac, 0x0c, 0x64, 0x73, 0x9c, 0x8c, 0x16, 0xa3, 0x82, 0x5c, 0xc1, 0xaa, 0x8e, 0x30, 0x11, 0xb5, 0x88, 0xdd, 0x6f, 0x88, 0xe7, 0x12, 0x13, 0xf9, 0x93, 0x53, 0xf1, 0xc7, 0x8e, 0xa2}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x7e, 0x1f, 0x8e, 0x89, 0xa1, 0xed, 0x17, 0xa2, 0x5a, 0x1e, 0x06, 0xc0, 0x08, 0x56, 0xa4, 0xc0, 0x0f, 0x2b, 0x2a, 0xf6, 0x7b, 0x53, 0xe6, 0x01, 0xff, 0x50, 0xa2, 0x4e, 0xd8, 0x48, 0xf4, 0xbe}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + qemu_QEMUVTPM = M{4: {Expected: []byte{0x29, 0xed, 0xbb, 0xff, 0x70, 0x4e, 0x32, 0x30, 0xe9, 0xa4, 0xa5, 0x69, 0x6e, 0x0d, 0x0f, 0x9d, 0x2e, 0xdf, 0x3c, 0xf1, 0xb8, 0xcf, 0x3c, 0x07, 0xa5, 0x41, 0xbd, 0x93, 0x18, 0x77, 0xe2, 0x05}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x55, 0x9c, 0xaa, 0xaf, 0x3e, 0x1f, 0x7b, 0x5b, 0x50, 0x14, 0x4d, 0x49, 0xeb, 0x6f, 0x8a, 0x82, 0x7f, 0xed, 0xc7, 0x82, 0x49, 0x62, 0x0a, 0x21, 0xc1, 0x3d, 0x14, 0xcd, 0xf0, 0xe7, 0x5c, 0x3e}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x8e, 0x7c, 0x1f, 0x71, 0xdb, 0x2b, 0x5c, 0x9e, 0xfa, 0x68, 0x3b, 0x09, 0xb8, 0xd0, 0xbb, 0x60, 0x1a, 0xab, 0xcd, 0xea, 0x0e, 0x2a, 0x05, 0x38, 0xbe, 0xbe, 0x12, 0x66, 0xa6, 0x9f, 0x5c, 0xc8}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} ) diff --git a/internal/config/image_enterprise.go b/internal/config/image_enterprise.go index 1fadfcb86..be32d5d2b 100644 --- a/internal/config/image_enterprise.go +++ b/internal/config/image_enterprise.go @@ -10,5 +10,5 @@ package config const ( // defaultImage is the default image to use. - defaultImage = "ref/main/stream/nightly/v2.21.0-pre.0.20250218110656-758191ad4268" + defaultImage = "ref/main/stream/nightly/v2.21.0-pre.0.20250219114110-99a81cd24676" ) From a65176ee0682a3c3fd78b128b8d60881df640eb7 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 21 Feb 2025 12:36:38 +0100 Subject: [PATCH 119/311] deps: update K8s constrained Azure versions (#3646) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- internal/versions/versions.go | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/internal/versions/versions.go b/internal/versions/versions.go index d31ce23aa..999c7a0de 100644 --- a/internal/versions/versions.go +++ b/internal/versions/versions.go @@ -252,10 +252,10 @@ var VersionConfigs = map[ValidK8sVersion]KubernetesVersion{ CloudControllerManagerImageAWS: "registry.k8s.io/provider-aws/cloud-controller-manager:v1.28.10@sha256:582571fc487b4ba52fbafe4385daec5d97f57cdd7f3e901211eef6411b2a90a6", // renovate:container // CloudControllerManagerImageAzure is the CCM image used on Azure. // Check for newer versions at https://github.com/kubernetes-sigs/cloud-provider-azure/blob/master/README.md. - CloudControllerManagerImageAzure: "mcr.microsoft.com/oss/kubernetes/azure-cloud-controller-manager:v1.28.13@sha256:8b853f4f54a09c363806714189435933a8575ac6dca27e991976bd685603113e", // renovate:container + CloudControllerManagerImageAzure: "mcr.microsoft.com/oss/kubernetes/azure-cloud-controller-manager:v1.28.14@sha256:6a906998155e3546f7832dd3bd3000654920ff3371a7499e225c549094957303", // renovate:container // CloudNodeManagerImageAzure is the cloud-node-manager image used on Azure. // Check for newer versions at https://github.com/kubernetes-sigs/cloud-provider-azure/blob/master/README.md. - CloudNodeManagerImageAzure: "mcr.microsoft.com/oss/kubernetes/azure-cloud-node-manager:v1.28.13@sha256:525ca9c8a44bbdfa9acc0a417776bb822a1bbdaaf27d9776b8dcf5b3519c346a", // renovate:container + CloudNodeManagerImageAzure: "mcr.microsoft.com/oss/kubernetes/azure-cloud-node-manager:v1.28.14@sha256:cf9ee6f4affbdd2a602fbf7bfeb69ebfd6de1ec2582c0e65e87bb061385fdbc2", // renovate:container // CloudControllerManagerImageGCP is the CCM image used on GCP. CloudControllerManagerImageGCP: "ghcr.io/edgelesssys/cloud-provider-gcp:v28.10.0@sha256:f3b6fa7faea27b4a303c91b3bc7ee192b050e21e27579e9f3da90ae4ba38e626", // renovate:container // CloudControllerManagerImageOpenStack is the CCM image used on OpenStack. @@ -319,10 +319,10 @@ var VersionConfigs = map[ValidK8sVersion]KubernetesVersion{ CloudControllerManagerImageAWS: "registry.k8s.io/provider-aws/cloud-controller-manager:v1.29.7@sha256:5dfb0bf6bbfa99e0f572bb8b65fbb36576c4f256499e63371b550353702c0483", // renovate:container // CloudControllerManagerImageAzure is the CCM image used on Azure. // Check for newer versions at https://github.com/kubernetes-sigs/cloud-provider-azure/blob/master/README.md. - CloudControllerManagerImageAzure: "mcr.microsoft.com/oss/kubernetes/azure-cloud-controller-manager:v1.29.11@sha256:2ecdca660c03b17110a4ee732230424ce0377c5b1756a4408666e40938ee976a", // renovate:container + CloudControllerManagerImageAzure: "mcr.microsoft.com/oss/kubernetes/azure-cloud-controller-manager:v1.29.12@sha256:9d232f2faa9d7e9f98ca13be09e787b015fa39856eceedd1ac987204342dbafd", // renovate:container // CloudNodeManagerImageAzure is the cloud-node-manager image used on Azure. // Check for newer versions at https://github.com/kubernetes-sigs/cloud-provider-azure/blob/master/README.md. - CloudNodeManagerImageAzure: "mcr.microsoft.com/oss/kubernetes/azure-cloud-node-manager:v1.29.11@sha256:17888b0ebaec6735214b85d20bdcc8062f051bc27e835454e9ef89734d34aa4b", // renovate:container + CloudNodeManagerImageAzure: "mcr.microsoft.com/oss/kubernetes/azure-cloud-node-manager:v1.29.12@sha256:4e90411ec084ec3800dad61cebf94feddc3617cb357ac133db9d151295c95220", // renovate:container // CloudControllerManagerImageGCP is the CCM image used on GCP. CloudControllerManagerImageGCP: "ghcr.io/edgelesssys/cloud-provider-gcp:v29.5.1@sha256:ebbc6f5755725b6c2c81ca1d1580e2feba83572c41608b739c50f85b2e5de936", // renovate:container // CloudControllerManagerImageOpenStack is the CCM image used on OpenStack. @@ -386,10 +386,10 @@ var VersionConfigs = map[ValidK8sVersion]KubernetesVersion{ CloudControllerManagerImageAWS: "registry.k8s.io/provider-aws/cloud-controller-manager:v1.30.6@sha256:cfdfa9e436f27fccfd3f0961e9607088482b17e43e2e1990e02e925a833f0ef3", // renovate:container // CloudControllerManagerImageAzure is the CCM image used on Azure. // Check for newer versions at https://github.com/kubernetes-sigs/cloud-provider-azure/blob/master/README.md. - CloudControllerManagerImageAzure: "mcr.microsoft.com/oss/kubernetes/azure-cloud-controller-manager:v1.30.7@sha256:03b2876f481507781a27b56a6e66c1928b7b93774e787e52a5239aefa41191e4", // renovate:container + CloudControllerManagerImageAzure: "mcr.microsoft.com/oss/kubernetes/azure-cloud-controller-manager:v1.30.8@sha256:8956b68b9914fe2d5d3b360406bb0db8e4b222d75e231786f3695879c605b8df", // renovate:container // CloudNodeManagerImageAzure is the cloud-node-manager image used on Azure. // Check for newer versions at https://github.com/kubernetes-sigs/cloud-provider-azure/blob/master/README.md. - CloudNodeManagerImageAzure: "mcr.microsoft.com/oss/kubernetes/azure-cloud-node-manager:v1.30.7@sha256:f18feb78e36eef88f0e23d98d798476d2bf6837de11892fe118ab043afdcd497", // renovate:container + CloudNodeManagerImageAzure: "mcr.microsoft.com/oss/kubernetes/azure-cloud-node-manager:v1.30.8@sha256:0ad7ecf741f30b35ea62072e3c552a2d6ef09b549ac8644b2f6482dddbfd79fd", // renovate:container // CloudControllerManagerImageGCP is the CCM image used on GCP. CloudControllerManagerImageGCP: "ghcr.io/edgelesssys/cloud-provider-gcp:v30.1.4@sha256:0c3695a18d3825492196facb092e5fe56e466fa8517cde5a206fe21630c1da13", // renovate:container // CloudControllerManagerImageOpenStack is the CCM image used on OpenStack. From 144d5e9d0662bbe66d7a8c422e820efdf1baf312 Mon Sep 17 00:00:00 2001 From: edgelessci <71088502+edgelessci@users.noreply.github.com> Date: Sun, 23 Feb 2025 10:56:58 +0100 Subject: [PATCH 120/311] image: update locked rpms (#3662) Co-authored-by: edgelessci --- image/mirror/SHA256SUMS | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/image/mirror/SHA256SUMS b/image/mirror/SHA256SUMS index 26dd416ad..09dfbfc07 100644 --- a/image/mirror/SHA256SUMS +++ b/image/mirror/SHA256SUMS @@ -276,9 +276,9 @@ af85755cda79959a19161ebc26a45e507003298bd97b472b9ab0d512afa5e46a protobuf-c-1.5 45ff2e9814aa059f323b23710c73309d41d36306667a3004f5fbb86b0cab4484 psmisc-23.6-6.fc40.x86_64.rpm c000cbb0a7df2c0c61559ab3f3732eacd163b171673298f4ec043cb6d223f364 publicsuffix-list-dafsa-20250116-1.fc40.noarch.rpm 7c703b431508f44c5184b5c1df052ed0f49b7439d68aa3597a9a57a5b26bd648 python-pip-wheel-23.3.2-2.fc40.noarch.rpm -86e17167996c17798e116974f42e63dc2e0ac6bce1c10a47416d421c785a5ea4 python-unversioned-command-3.12.8-2.fc40.noarch.rpm -5526220160d59c64689dd2c017a03a26a909c5c50f7973c8bf3750f8f39ca114 python3-3.12.8-2.fc40.x86_64.rpm -0905050a05fce20538191ad45e61bca86d61877f58da47df1b59465d034a4ae6 python3-libs-3.12.8-2.fc40.x86_64.rpm +15a80b975cc29fdbf3b71a0c8fa3f76a3fe722529036435b0cf7272f01a560c3 python-unversioned-command-3.12.9-1.fc40.noarch.rpm +870b11ae674851e6f9a02e650681c2e4a9fb1c91311beb944813ac6a2d4e15c9 python3-3.12.9-1.fc40.x86_64.rpm +2406c85716129d4183fcd2be8de2923770e8d6a12de270ac94cc427404a34a26 python3-libs-3.12.9-1.fc40.x86_64.rpm d50b24d1a217e5201b4f8350945b7a3bc3fa01a61a8dd8d28e1b9512295238e1 qemu-user-static-8.2.8-2.fc40.x86_64.rpm 11f752c50493eca8f6dddf3140c694d3db4bc808771eaba25978ea2c309b2196 qemu-user-static-aarch64-8.2.8-2.fc40.x86_64.rpm 8598fde32ac72cafcc57f30edbfed1f920c58001dbeecb6932f4de8ce76091ba qemu-user-static-alpha-8.2.8-2.fc40.x86_64.rpm @@ -308,7 +308,7 @@ c48c149f4aebfe44d649eea6f7a8eaa229dc8db71ff70b66c7403aa9bd072820 rpm-libs-4.19. 7bebda41ea91faf8cf8911a403c051eb59d444e60f8091d14d10987b713f39ff rpm-plugin-audit-4.19.1.1-1.fc40.x86_64.rpm d400a4e4440bea56566fb1e9582d86d1ac2e07745d37fa6e71f43a8fea05217c rpm-plugin-selinux-4.19.1.1-1.fc40.x86_64.rpm ce3b3148bb617e132c2ae9a28cc9f1990f806bc45722489f4c09f4d90821b6cd rpm-sequoia-1.7.0-5.fc40.x86_64.rpm -22fe9c46b5a273164b3520428d2f00f58b1c3ec7ccc52a9f0285d72e823ef0a5 runc-1.2.4-1.fc40.x86_64.rpm +193f8c9ed008172d801fd512e1ca1c0d726f9d871bf088d47155c5ad3e0734bb runc-1.2.5-1.fc40.x86_64.rpm 5dbd069183076ed8048c839c31f713c0f6080fb9ebfdda92ac550030688e811b sbsigntools-0.9.5-6.fc40.x86_64.rpm 6a21b2c132a54fd6d9acb846d0a96289ab739b745cdc4c2b31bdbf6b2434a1a7 sed-4.9-1.fc40.x86_64.rpm b4e188db51c7ec2d5f0cba79783eb2df7c14a92c2c6e55a9eb490d28d17d123d selinux-policy-40.29-2.fc40.noarch.rpm From d97e60fea501997c8cfdf863e21958c7d459d0c9 Mon Sep 17 00:00:00 2001 From: Moritz Sanft <58110325+msanft@users.noreply.github.com> Date: Mon, 24 Feb 2025 08:58:57 +0100 Subject: [PATCH 121/311] dev-docs: fix attestationconfigapi instructions (#3661) --- dev-docs/workflows/attestationconfigapi.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dev-docs/workflows/attestationconfigapi.md b/dev-docs/workflows/attestationconfigapi.md index 5da8eda35..4881497ce 100644 --- a/dev-docs/workflows/attestationconfigapi.md +++ b/dev-docs/workflows/attestationconfigapi.md @@ -8,10 +8,10 @@ This estimate might make manual intervention necessary when a global rollout did ### Manually delete a version ``` -COSIGN_PASSWORD=$CPW COSIGN_PRIVATE_KEY="$(cat $PATH_TO_KEY)" AWS_ACCESS_KEY_ID=$ID AWS_ACCESS_KEY=$KEY bazel run //internal/api/attestationconfigapi/cli delete -- --version 2023-09-02-12-52 +COSIGN_PASSWORD=$CPW COSIGN_PRIVATE_KEY="$(cat $PATH_TO_KEY)" AWS_ACCESS_KEY_ID=$ID AWS_ACCESS_KEY=$KEY bazel run //internal/api/attestationconfigapi/cli -- delete azure-sev-snp attestation-report 2025-01-18-09-15 ``` ### Manually upload a version ``` -COSIGN_PASSWORD=$CPW COSIGN_PRIVATE_KEY="$(cat $PATH_TO_KEY)" AWS_ACCESS_KEY_ID=$ID AWS_ACCESS_KEY=$KEY bazel run //internal/api/attestationconfigapi/cli -- --force --version 2023-09-02-12-52 --maa-claims-path "${path}" +COSIGN_PASSWORD=$CPW COSIGN_PRIVATE_KEY="$(cat $PATH_TO_KEY)" AWS_ACCESS_KEY_ID=$ID AWS_ACCESS_KEY=$KEY bazel run //internal/api/attestationconfigapi/cli -- upload azure-sev-snp attestation-report 2025-01-18-09-15 --force ``` From fb609b23b0ba4aa948fab8354718742a3240dcfc Mon Sep 17 00:00:00 2001 From: edgelessci <71088502+edgelessci@users.noreply.github.com> Date: Wed, 26 Feb 2025 08:16:57 +0100 Subject: [PATCH 122/311] image: update measurements and image version (#3664) Co-authored-by: edgelessci --- .../measurements/measurements_enterprise.go | 16 ++++++++-------- internal/config/image_enterprise.go | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/internal/attestation/measurements/measurements_enterprise.go b/internal/attestation/measurements/measurements_enterprise.go index d8281c7a7..a0dcf3c09 100644 --- a/internal/attestation/measurements/measurements_enterprise.go +++ b/internal/attestation/measurements/measurements_enterprise.go @@ -19,14 +19,14 @@ package measurements // revive:disable:var-naming var ( - aws_AWSNitroTPM = M{0: {Expected: []byte{0x73, 0x7f, 0x76, 0x7a, 0x12, 0xf5, 0x4e, 0x70, 0xee, 0xcb, 0xc8, 0x68, 0x40, 0x11, 0x32, 0x3a, 0xe2, 0xfe, 0x2d, 0xd9, 0xf9, 0x07, 0x85, 0x57, 0x79, 0x69, 0xd7, 0xa2, 0x01, 0x3e, 0x8c, 0x12}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x60, 0x99, 0x69, 0xd9, 0xd0, 0x9d, 0x9d, 0xd8, 0x4b, 0xc5, 0x98, 0xe8, 0x3b, 0x44, 0x3e, 0xf5, 0xbb, 0xaf, 0x7d, 0xb0, 0xe6, 0xe2, 0x93, 0xd7, 0x1d, 0xf4, 0xc8, 0xce, 0x3f, 0xdc, 0x49, 0x1e}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x6c, 0x1d, 0xa2, 0x80, 0x81, 0xdc, 0xdd, 0x0f, 0x36, 0x14, 0xea, 0x95, 0xf6, 0x44, 0x41, 0x53, 0xf0, 0xa2, 0xe5, 0xc5, 0xec, 0x28, 0x65, 0x70, 0x80, 0xc7, 0x19, 0x00, 0xb8, 0xbd, 0x86, 0x1e}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x3e, 0x66, 0x03, 0x86, 0x4d, 0x08, 0x80, 0xbc, 0xf9, 0xdc, 0xe1, 0xfe, 0xc7, 0x77, 0xe7, 0x6b, 0xd8, 0x1c, 0x22, 0x80, 0xc9, 0x6e, 0x5d, 0x2a, 0xaa, 0x19, 0x8a, 0x47, 0x8f, 0xd9, 0xbd, 0x70}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - aws_AWSSEVSNP = M{0: {Expected: []byte{0xd6, 0xdf, 0x85, 0x53, 0x58, 0xf5, 0xb1, 0x0f, 0x06, 0xf0, 0xfa, 0xb3, 0xf4, 0x08, 0xad, 0x26, 0xcd, 0x16, 0x5a, 0x29, 0x49, 0xba, 0xd6, 0x9e, 0x2c, 0xc7, 0x56, 0x92, 0x52, 0x9e, 0x66, 0x2a}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x4c, 0xc7, 0xdf, 0x86, 0x5f, 0x73, 0xe3, 0xec, 0x3f, 0x7f, 0xaf, 0x53, 0x65, 0x37, 0x1f, 0x2e, 0x68, 0x93, 0xfb, 0x72, 0xda, 0xc8, 0xb5, 0x42, 0x73, 0x0b, 0x37, 0x3e, 0x31, 0xd2, 0xf4, 0x0d}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x82, 0xa6, 0xf9, 0x27, 0x22, 0xd4, 0xbe, 0x4d, 0xe1, 0x4f, 0xde, 0x3b, 0xdf, 0x7c, 0x8b, 0xdd, 0xfd, 0x4b, 0xd9, 0x11, 0x40, 0x7d, 0x2e, 0xdf, 0xc7, 0xa2, 0x80, 0x3b, 0x64, 0x2f, 0x85, 0x00}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x49, 0xf4, 0x07, 0x22, 0xd2, 0xc8, 0xb7, 0xb4, 0xe9, 0xd0, 0x83, 0xb2, 0x0a, 0xeb, 0x32, 0x0c, 0x8e, 0x8f, 0x20, 0x19, 0xc5, 0x7d, 0xba, 0xa1, 0xa1, 0x24, 0x41, 0xb0, 0x00, 0xce, 0xf0, 0x92}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - azure_AzureSEVSNP = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xd8, 0x86, 0x24, 0xf2, 0x2f, 0xcc, 0xf4, 0x73, 0x04, 0x1e, 0xa2, 0xca, 0x15, 0xe2, 0xa1, 0x65, 0x47, 0x61, 0x04, 0x2d, 0xce, 0x7c, 0x18, 0x4d, 0x9c, 0x93, 0xd5, 0x9d, 0x6c, 0x3a, 0x78, 0x50}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xa9, 0x23, 0xb6, 0x14, 0x9d, 0x65, 0xec, 0x05, 0xb9, 0x77, 0xd0, 0xbf, 0x7c, 0x1c, 0xb6, 0x8a, 0x86, 0xdf, 0xa4, 0xa8, 0x36, 0xd0, 0x0a, 0x4d, 0xd2, 0x09, 0x1c, 0xc2, 0x5e, 0x00, 0x38, 0x6e}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x74, 0xfd, 0x6f, 0x37, 0x3e, 0x98, 0xdc, 0x9e, 0xbe, 0x04, 0x54, 0x1b, 0x84, 0xd8, 0x2b, 0x62, 0x20, 0x1a, 0xb0, 0xf5, 0xf5, 0xe2, 0xba, 0x8c, 0x73, 0x14, 0xb1, 0x0f, 0x40, 0x6f, 0x15, 0x9e}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - azure_AzureTDX = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x09, 0x1b, 0xb6, 0xfc, 0xe6, 0x9b, 0xc4, 0xb2, 0x16, 0x4f, 0xae, 0x5b, 0xeb, 0xcb, 0xaa, 0x80, 0x18, 0x9d, 0x22, 0x72, 0x79, 0x83, 0xc1, 0xc8, 0x0d, 0x84, 0x90, 0x28, 0x4d, 0x78, 0x1d, 0xbb}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x0b, 0x1f, 0x6b, 0xc4, 0x6f, 0x19, 0x88, 0x19, 0x3e, 0x13, 0xa0, 0x24, 0xe2, 0x7a, 0xc8, 0x0e, 0xe0, 0x17, 0x6e, 0x09, 0x6b, 0x97, 0x03, 0x6f, 0xf1, 0x7a, 0x0c, 0x64, 0x61, 0xf5, 0x1b, 0x82}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x41, 0x0a, 0xde, 0x2f, 0xd5, 0x06, 0x8f, 0xda, 0x09, 0xb5, 0x4c, 0x35, 0x14, 0x3c, 0x71, 0x71, 0xae, 0x8b, 0x90, 0x5c, 0xf6, 0x3e, 0xc6, 0xad, 0xf4, 0xb2, 0xab, 0x49, 0x0c, 0x4a, 0xf7, 0x1c}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + aws_AWSNitroTPM = M{0: {Expected: []byte{0x73, 0x7f, 0x76, 0x7a, 0x12, 0xf5, 0x4e, 0x70, 0xee, 0xcb, 0xc8, 0x68, 0x40, 0x11, 0x32, 0x3a, 0xe2, 0xfe, 0x2d, 0xd9, 0xf9, 0x07, 0x85, 0x57, 0x79, 0x69, 0xd7, 0xa2, 0x01, 0x3e, 0x8c, 0x12}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xc7, 0xe7, 0x05, 0xbc, 0x19, 0x20, 0xc0, 0x4e, 0xd7, 0xda, 0x18, 0x45, 0x4c, 0x28, 0x6c, 0xa7, 0x32, 0x58, 0x37, 0x6a, 0x09, 0xf2, 0x4d, 0xa1, 0x4d, 0x01, 0xbf, 0xb8, 0x53, 0xfe, 0x14, 0xf1}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x08, 0x91, 0xb1, 0x6b, 0x69, 0x55, 0x40, 0xc9, 0x85, 0x64, 0x35, 0xc0, 0x58, 0x48, 0x38, 0x02, 0x8f, 0x39, 0x0e, 0xcd, 0xa9, 0xd6, 0xf3, 0x91, 0x65, 0x68, 0xbc, 0xce, 0xff, 0x0d, 0x86, 0xa3}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x8b, 0xc0, 0xa8, 0xce, 0x8f, 0xff, 0xde, 0x72, 0x49, 0x7a, 0x4d, 0x53, 0x3b, 0xf0, 0xa9, 0x6c, 0x66, 0xd9, 0x7b, 0x88, 0x5c, 0x87, 0xf8, 0x65, 0xad, 0x73, 0x11, 0x97, 0xec, 0x17, 0x08, 0x63}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + aws_AWSSEVSNP = M{0: {Expected: []byte{0xd6, 0xdf, 0x85, 0x53, 0x58, 0xf5, 0xb1, 0x0f, 0x06, 0xf0, 0xfa, 0xb3, 0xf4, 0x08, 0xad, 0x26, 0xcd, 0x16, 0x5a, 0x29, 0x49, 0xba, 0xd6, 0x9e, 0x2c, 0xc7, 0x56, 0x92, 0x52, 0x9e, 0x66, 0x2a}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x9a, 0xa5, 0x92, 0xeb, 0x9f, 0xb3, 0xd1, 0x7b, 0x73, 0x55, 0xef, 0x3d, 0x72, 0x50, 0xee, 0x20, 0xc4, 0xa7, 0x62, 0x33, 0x99, 0xee, 0x19, 0x8a, 0xec, 0x2b, 0x18, 0x54, 0xee, 0x26, 0x90, 0x66}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x9c, 0x35, 0x4c, 0x42, 0x58, 0xc8, 0xb2, 0xa1, 0x57, 0xc0, 0x93, 0x5b, 0xe1, 0xb1, 0xf6, 0xc6, 0x96, 0xb0, 0xe8, 0x1a, 0x1b, 0x60, 0xb0, 0x44, 0xe1, 0x09, 0xf4, 0x24, 0x99, 0x7b, 0xf9, 0xc5}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x43, 0xbf, 0xf5, 0x21, 0xdc, 0xd8, 0x3b, 0x86, 0x63, 0xde, 0x8a, 0x4c, 0xe6, 0x9d, 0x98, 0x77, 0x47, 0xb8, 0xae, 0x5f, 0x11, 0xb8, 0xc2, 0x3e, 0xd1, 0x17, 0x48, 0xad, 0xcc, 0x87, 0xfb, 0xa0}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + azure_AzureSEVSNP = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xec, 0xf4, 0xf6, 0xd6, 0xb7, 0x0b, 0x06, 0x22, 0x64, 0xce, 0x94, 0xcd, 0xd9, 0x7d, 0xb5, 0x00, 0x01, 0xe9, 0x3a, 0x2b, 0x0b, 0x37, 0x2b, 0x8c, 0x73, 0x51, 0x36, 0xe9, 0xaa, 0x0f, 0xaa, 0x8a}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x2f, 0x9f, 0x91, 0xb5, 0x42, 0x8f, 0xd3, 0x0a, 0x02, 0x51, 0x70, 0x65, 0xfe, 0x4e, 0x61, 0xbb, 0xb0, 0x7f, 0x77, 0x38, 0x80, 0xe6, 0xea, 0x73, 0x19, 0x3b, 0xa7, 0x54, 0x6b, 0x7e, 0x89, 0x7d}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x4a, 0x8c, 0x53, 0xc7, 0x76, 0xaa, 0x31, 0x54, 0x5f, 0xdb, 0xe1, 0xe1, 0x12, 0xf9, 0x84, 0xb6, 0x02, 0x7c, 0xf3, 0x00, 0x6d, 0x1e, 0xdf, 0x38, 0xb6, 0x82, 0x17, 0xd9, 0x72, 0x3e, 0x39, 0xc3}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + azure_AzureTDX = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x5a, 0x01, 0x5d, 0x2a, 0x28, 0xba, 0x3f, 0x7f, 0xcc, 0x12, 0x9d, 0x6e, 0xc4, 0x56, 0x67, 0x81, 0xc6, 0xc2, 0x03, 0x32, 0x46, 0x6d, 0x89, 0xa3, 0x91, 0x54, 0xe2, 0x72, 0x1b, 0xf2, 0x66, 0x16}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xbc, 0x60, 0x8d, 0x75, 0x5b, 0x77, 0xdf, 0xd1, 0xf0, 0xf4, 0x17, 0x98, 0xfc, 0x52, 0x61, 0x8a, 0x2b, 0x38, 0x14, 0xba, 0x40, 0x8a, 0x36, 0xa4, 0x70, 0x58, 0x59, 0xc2, 0x36, 0x98, 0x33, 0xa5}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x21, 0x58, 0xaa, 0x4f, 0x12, 0x71, 0xe1, 0xbf, 0x30, 0xd0, 0xd3, 0x83, 0x40, 0x3c, 0xb3, 0xf7, 0xa9, 0x61, 0xe4, 0x25, 0x4f, 0x50, 0xbd, 0x62, 0x74, 0x64, 0x22, 0x1c, 0x35, 0xe3, 0x44, 0x08}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} azure_AzureTrustedLaunch M - gcp_GCPSEVES = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xfa, 0xb6, 0x56, 0xb7, 0xd3, 0x75, 0xf7, 0x8d, 0x37, 0x76, 0x5f, 0xf6, 0xa1, 0x06, 0x7a, 0xad, 0x37, 0xf1, 0x1f, 0x8a, 0xcd, 0x30, 0x9c, 0x2a, 0x6f, 0x51, 0xdb, 0x02, 0x04, 0xd1, 0xa6, 0x5d}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xd6, 0xf5, 0x69, 0xd8, 0x9d, 0x8d, 0x90, 0x99, 0x4a, 0x00, 0xb8, 0x70, 0x15, 0x1d, 0xfb, 0x3f, 0xa6, 0x69, 0xc2, 0x33, 0xb7, 0xdb, 0x3d, 0x70, 0xde, 0xcf, 0x0a, 0x7b, 0x49, 0x04, 0xe7, 0x48}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x2e, 0x37, 0xbd, 0x92, 0x48, 0xff, 0x4b, 0x5d, 0x18, 0xca, 0x44, 0xf9, 0xf6, 0xfa, 0xd6, 0x09, 0x58, 0x86, 0x30, 0x13, 0x2e, 0x7a, 0x05, 0x97, 0x0b, 0x65, 0x25, 0x53, 0x75, 0x57, 0x7c, 0x3f}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - gcp_GCPSEVSNP = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x59, 0x40, 0x09, 0x14, 0xea, 0xee, 0x41, 0x41, 0xa0, 0x66, 0xdd, 0x10, 0xa4, 0x72, 0x69, 0xec, 0xc9, 0xfc, 0x38, 0x85, 0xaa, 0x6b, 0xaa, 0x32, 0xaf, 0x9d, 0xc3, 0x5b, 0x8d, 0xfd, 0xf8, 0x5d}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x5f, 0xfe, 0x5a, 0x28, 0x0e, 0x84, 0x96, 0xaa, 0x68, 0xb3, 0xea, 0x2b, 0xcb, 0x4b, 0x6d, 0x21, 0x2f, 0x8f, 0xaa, 0x38, 0xa6, 0x51, 0x3f, 0xf9, 0x52, 0x9b, 0xc7, 0xa6, 0x48, 0xd1, 0x72, 0x0c}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xf1, 0xf7, 0xbb, 0x05, 0xb8, 0x7c, 0x82, 0x67, 0x7d, 0xc5, 0xdd, 0x46, 0x86, 0x16, 0x2d, 0x8c, 0x29, 0xd6, 0xc1, 0xab, 0x73, 0x9e, 0xef, 0x0d, 0x01, 0xc5, 0xbf, 0x50, 0xc9, 0xac, 0x28, 0x0d}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - openstack_QEMUVTPM = M{4: {Expected: []byte{0xe4, 0x08, 0x0c, 0x26, 0x0a, 0x63, 0xc4, 0xb8, 0x23, 0x32, 0xea, 0x05, 0x96, 0xf0, 0x3b, 0x95, 0x88, 0x3b, 0xdf, 0x2b, 0x42, 0x9f, 0xc2, 0x24, 0x91, 0x5b, 0x07, 0x98, 0x04, 0xa6, 0x5e, 0x18}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xa6, 0xe2, 0x8d, 0x62, 0x6e, 0xe2, 0x49, 0x8c, 0xf5, 0x17, 0x75, 0x2e, 0xc9, 0x99, 0xf4, 0x7f, 0x60, 0xb3, 0xf0, 0x39, 0x87, 0x30, 0xc9, 0xfe, 0x22, 0xe2, 0x81, 0xbc, 0xcd, 0xac, 0xbd, 0xa5}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x3c, 0x0c, 0xc4, 0xf7, 0x97, 0x4c, 0x6b, 0xd6, 0x18, 0x45, 0x07, 0x95, 0x4d, 0x64, 0x98, 0x11, 0x86, 0x88, 0xd0, 0xcd, 0xa6, 0xf5, 0x0b, 0xed, 0xac, 0x22, 0x37, 0x93, 0xa7, 0x62, 0xf4, 0xf8}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + gcp_GCPSEVES = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xda, 0xea, 0xe7, 0x2b, 0x9e, 0x7f, 0x02, 0xa8, 0x80, 0x5d, 0xea, 0x9f, 0xa6, 0xaf, 0x96, 0xfc, 0x71, 0x42, 0x1f, 0x27, 0xe8, 0x16, 0x61, 0x25, 0x58, 0xc3, 0xa0, 0x60, 0x7c, 0x91, 0xa0, 0x86}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x66, 0x74, 0x91, 0xf8, 0x78, 0x38, 0x95, 0xe7, 0x7a, 0xc9, 0xba, 0x8b, 0x21, 0x08, 0x66, 0xfc, 0x7c, 0x71, 0xab, 0xcc, 0xe6, 0xb8, 0xde, 0xbb, 0x20, 0x75, 0xff, 0x60, 0xd0, 0x4d, 0x15, 0x52}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x93, 0x8a, 0xc5, 0x5a, 0x4c, 0x0d, 0xd2, 0x56, 0xa9, 0x58, 0xe6, 0x2e, 0x74, 0x25, 0x84, 0xb1, 0x2e, 0xc0, 0x9f, 0x98, 0xfb, 0x7c, 0xa5, 0x5d, 0xa1, 0x61, 0x26, 0x8d, 0x8a, 0x72, 0x71, 0xf2}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + gcp_GCPSEVSNP = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xa0, 0xa9, 0xbd, 0x09, 0x88, 0xb8, 0x56, 0x9b, 0x69, 0xa3, 0xdc, 0xb0, 0x70, 0x65, 0xd5, 0x32, 0x0c, 0xfb, 0xdd, 0x68, 0x44, 0xce, 0xd5, 0x20, 0x62, 0xee, 0xea, 0xbb, 0xba, 0x76, 0x26, 0x20}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x83, 0x02, 0xdc, 0xe5, 0xb6, 0x4d, 0x30, 0x08, 0x6a, 0x30, 0x7c, 0xf3, 0x72, 0x85, 0xdb, 0xba, 0x47, 0xed, 0xa4, 0xce, 0x0d, 0x81, 0x3e, 0x47, 0x7c, 0xc1, 0x78, 0xd0, 0xfa, 0x51, 0xec, 0x8e}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x77, 0xbd, 0xf9, 0x6b, 0x29, 0xd8, 0x89, 0xbf, 0x8c, 0xcc, 0x43, 0x3e, 0x28, 0xb0, 0x39, 0xee, 0x71, 0x8f, 0x68, 0xc2, 0x99, 0x4f, 0xea, 0x32, 0xdf, 0x0b, 0x8c, 0xda, 0x94, 0x23, 0x75, 0xf3}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + openstack_QEMUVTPM = M{4: {Expected: []byte{0x7a, 0xd0, 0x30, 0x57, 0xd0, 0x04, 0xe2, 0xd1, 0x50, 0x5b, 0x32, 0x26, 0xa6, 0xaa, 0x26, 0x14, 0x9a, 0x21, 0x3c, 0x1e, 0x66, 0xe7, 0x68, 0xae, 0x41, 0x27, 0x25, 0x05, 0x9e, 0xf0, 0xca, 0xa6}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x05, 0x5b, 0xba, 0xf9, 0x11, 0x42, 0xeb, 0xa8, 0xf7, 0x96, 0x0c, 0xd7, 0x9a, 0xb4, 0x07, 0xcb, 0x3c, 0x84, 0x64, 0xa0, 0x3e, 0x3c, 0x94, 0xde, 0xc9, 0x9e, 0x6e, 0x64, 0x71, 0x9f, 0xf6, 0x37}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xfc, 0x5a, 0xb3, 0xaf, 0x06, 0xe4, 0xef, 0x61, 0x2c, 0xb5, 0x62, 0x8d, 0xde, 0x86, 0xde, 0x24, 0x1a, 0x33, 0x20, 0x8f, 0xab, 0x0b, 0xb6, 0x37, 0x5c, 0x20, 0xea, 0x96, 0xec, 0x12, 0x17, 0xe1}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} qemu_QEMUTDX M - qemu_QEMUVTPM = M{4: {Expected: []byte{0x29, 0xed, 0xbb, 0xff, 0x70, 0x4e, 0x32, 0x30, 0xe9, 0xa4, 0xa5, 0x69, 0x6e, 0x0d, 0x0f, 0x9d, 0x2e, 0xdf, 0x3c, 0xf1, 0xb8, 0xcf, 0x3c, 0x07, 0xa5, 0x41, 0xbd, 0x93, 0x18, 0x77, 0xe2, 0x05}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x55, 0x9c, 0xaa, 0xaf, 0x3e, 0x1f, 0x7b, 0x5b, 0x50, 0x14, 0x4d, 0x49, 0xeb, 0x6f, 0x8a, 0x82, 0x7f, 0xed, 0xc7, 0x82, 0x49, 0x62, 0x0a, 0x21, 0xc1, 0x3d, 0x14, 0xcd, 0xf0, 0xe7, 0x5c, 0x3e}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x8e, 0x7c, 0x1f, 0x71, 0xdb, 0x2b, 0x5c, 0x9e, 0xfa, 0x68, 0x3b, 0x09, 0xb8, 0xd0, 0xbb, 0x60, 0x1a, 0xab, 0xcd, 0xea, 0x0e, 0x2a, 0x05, 0x38, 0xbe, 0xbe, 0x12, 0x66, 0xa6, 0x9f, 0x5c, 0xc8}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + qemu_QEMUVTPM = M{4: {Expected: []byte{0xaa, 0x94, 0xf1, 0x82, 0xa9, 0xe4, 0x9a, 0xde, 0x8c, 0x77, 0xb6, 0xfd, 0x06, 0x5d, 0xa9, 0x5e, 0xab, 0xbb, 0x2a, 0xe7, 0xb5, 0xac, 0x93, 0xd4, 0x37, 0x71, 0xf0, 0x56, 0x67, 0xf9, 0x5e, 0x74}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xb5, 0x0e, 0x14, 0x35, 0xdc, 0xcc, 0x3d, 0xa3, 0x34, 0x53, 0x9d, 0x9d, 0x16, 0xcc, 0x8e, 0x0f, 0x92, 0x04, 0x14, 0xe6, 0x48, 0x57, 0xe5, 0xcf, 0x39, 0x5d, 0x13, 0xf7, 0xf5, 0xc3, 0x1d, 0xdb}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xed, 0x03, 0x8b, 0x9e, 0x2b, 0x5c, 0x16, 0xdd, 0xef, 0x77, 0x43, 0x79, 0xa4, 0xf8, 0xc5, 0x33, 0x8f, 0x23, 0xcc, 0x46, 0xa0, 0xbd, 0x83, 0x1b, 0x31, 0x03, 0xa5, 0x36, 0xa3, 0x7c, 0xd3, 0x6f}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} ) diff --git a/internal/config/image_enterprise.go b/internal/config/image_enterprise.go index be32d5d2b..25fe5a092 100644 --- a/internal/config/image_enterprise.go +++ b/internal/config/image_enterprise.go @@ -10,5 +10,5 @@ package config const ( // defaultImage is the default image to use. - defaultImage = "ref/main/stream/nightly/v2.21.0-pre.0.20250219114110-99a81cd24676" + defaultImage = "ref/main/stream/nightly/v2.21.0-pre.0.20250224085857-d97e60fea501" ) From 473b04abd597e0ab81b610ef2ab50cff345983bd Mon Sep 17 00:00:00 2001 From: Markus Rudy Date: Wed, 26 Feb 2025 14:07:42 +0100 Subject: [PATCH 123/311] versions: add k8s 1.31, remove k8s 1.28 (#3396) * constellation-node-operator: upgrade control plane nodes first (#3663) * versions: add k8s 1.31, remove k8s 1.28 * e2e: set default k8s version for daily to 1.30 * e2e: remove defaults for required arguments * versions: move 1.31 to the end of the list * kubernetes: set feature gate ControlPlaneKubeletLocalMode Co-Authored-By: Leonard Cohnen Co-authored-by: Moritz Sanft <58110325+msanft@users.noreply.github.com> --- .github/workflows/e2e-test-daily.yml | 2 +- .github/workflows/e2e-test-internal-lb.yml | 1 - .../workflows/e2e-test-marketplace-image.yml | 1 - .github/workflows/e2e-test-release.yml | 20 +-- .../workflows/e2e-test-terraform-provider.yml | 1 - .github/workflows/e2e-test-weekly.yml | 30 ++-- .github/workflows/e2e-test.yml | 2 +- .../internal/kubernetes/k8sapi/BUILD.bazel | 1 + .../kubernetes/k8sapi/kubeadm_config.go | 8 +- docs/docs/architecture/versions.md | 2 +- docs/docs/reference/cli.md | 2 +- internal/constellation/kubecmd/BUILD.bazel | 5 +- internal/constellation/kubecmd/kubecmd.go | 146 ++++++++++-------- .../constellation/kubecmd/kubecmd_test.go | 127 +++++++++++++++ internal/versions/versions.go | 144 ++++++++--------- .../controllers/nodeversion_controller.go | 20 ++- .../nodeversion_controller_test.go | 102 +++++++++++- .../docs/resources/cluster.md | 2 +- 18 files changed, 442 insertions(+), 174 deletions(-) diff --git a/.github/workflows/e2e-test-daily.yml b/.github/workflows/e2e-test-daily.yml index 5e36add52..a618b44a6 100644 --- a/.github/workflows/e2e-test-daily.yml +++ b/.github/workflows/e2e-test-daily.yml @@ -45,7 +45,7 @@ jobs: fail-fast: false max-parallel: 5 matrix: - kubernetesVersion: ["1.28"] # should be default + kubernetesVersion: ["1.30"] # This should correspond to the current default k8s minor. attestationVariant: ["gcp-sev-es", "gcp-sev-snp", "azure-sev-snp", "azure-tdx", "aws-sev-snp"] refStream: ["ref/main/stream/debug/?", "ref/release/stream/stable/?"] test: ["sonobuoy quick"] diff --git a/.github/workflows/e2e-test-internal-lb.yml b/.github/workflows/e2e-test-internal-lb.yml index 818e2abc9..ab36cec4a 100644 --- a/.github/workflows/e2e-test-internal-lb.yml +++ b/.github/workflows/e2e-test-internal-lb.yml @@ -41,7 +41,6 @@ on: required: true kubernetesVersion: description: "Kubernetes version to create the cluster from." - default: "1.28" required: true cliVersion: description: "Version of a released CLI to download. Leave empty to build the CLI from the checked out ref." diff --git a/.github/workflows/e2e-test-marketplace-image.yml b/.github/workflows/e2e-test-marketplace-image.yml index 57afac6be..28e8e9310 100644 --- a/.github/workflows/e2e-test-marketplace-image.yml +++ b/.github/workflows/e2e-test-marketplace-image.yml @@ -41,7 +41,6 @@ on: required: true kubernetesVersion: description: "Kubernetes version to create the cluster from." - default: "1.28" required: true cliVersion: description: "Version of a released CLI to download. Leave empty to build the CLI from the checked out ref." diff --git a/.github/workflows/e2e-test-release.yml b/.github/workflows/e2e-test-release.yml index 7c2cd4d0f..47d077bc0 100644 --- a/.github/workflows/e2e-test-release.yml +++ b/.github/workflows/e2e-test-release.yml @@ -73,53 +73,53 @@ jobs: - test: "sonobuoy full" attestationVariant: "gcp-sev-es" - kubernetes-version: "v1.29" + kubernetes-version: "v1.30" runner: "ubuntu-24.04" clusterCreation: "cli" - test: "sonobuoy full" attestationVariant: "gcp-sev-snp" - kubernetes-version: "v1.29" + kubernetes-version: "v1.30" runner: "ubuntu-24.04" clusterCreation: "cli" - test: "sonobuoy full" attestationVariant: "azure-sev-snp" - kubernetes-version: "v1.29" + kubernetes-version: "v1.30" runner: "ubuntu-24.04" clusterCreation: "cli" - test: "sonobuoy full" attestationVariant: "azure-tdx" - kubernetes-version: "v1.29" + kubernetes-version: "v1.30" runner: "ubuntu-24.04" clusterCreation: "cli" - test: "sonobuoy full" attestationVariant: "aws-sev-snp" - kubernetes-version: "v1.29" + kubernetes-version: "v1.30" runner: "ubuntu-24.04" clusterCreation: "cli" - test: "sonobuoy full" attestationVariant: "gcp-sev-es" - kubernetes-version: "v1.28" + kubernetes-version: "v1.29" runner: "ubuntu-24.04" clusterCreation: "cli" - test: "sonobuoy full" attestationVariant: "gcp-sev-snp" - kubernetes-version: "v1.28" + kubernetes-version: "v1.29" runner: "ubuntu-24.04" clusterCreation: "cli" - test: "sonobuoy full" attestationVariant: "azure-sev-snp" - kubernetes-version: "v1.28" + kubernetes-version: "v1.29" runner: "ubuntu-24.04" clusterCreation: "cli" - test: "sonobuoy full" attestationVariant: "azure-tdx" - kubernetes-version: "v1.28" + kubernetes-version: "v1.29" runner: "ubuntu-24.04" clusterCreation: "cli" - test: "sonobuoy full" attestationVariant: "aws-sev-snp" - kubernetes-version: "v1.28" + kubernetes-version: "v1.29" runner: "ubuntu-24.04" clusterCreation: "cli" diff --git a/.github/workflows/e2e-test-terraform-provider.yml b/.github/workflows/e2e-test-terraform-provider.yml index 780cd7418..c7aa5a0e5 100644 --- a/.github/workflows/e2e-test-terraform-provider.yml +++ b/.github/workflows/e2e-test-terraform-provider.yml @@ -41,7 +41,6 @@ on: required: true kubernetesVersion: description: "Kubernetes version to create the cluster from." - default: "1.28" required: true releaseVersion: description: "Version of a released provider to download. Leave empty to build the provider from the checked out ref." diff --git a/.github/workflows/e2e-test-weekly.yml b/.github/workflows/e2e-test-weekly.yml index d32e2db9a..067390eeb 100644 --- a/.github/workflows/e2e-test-weekly.yml +++ b/.github/workflows/e2e-test-weekly.yml @@ -89,53 +89,53 @@ jobs: - test: "sonobuoy quick" refStream: "ref/main/stream/debug/?" attestationVariant: "gcp-sev-es" - kubernetes-version: "v1.29" + kubernetes-version: "v1.30" clusterCreation: "cli" - test: "sonobuoy quick" refStream: "ref/main/stream/debug/?" attestationVariant: "gcp-sev-snp" - kubernetes-version: "v1.29" + kubernetes-version: "v1.30" clusterCreation: "cli" - test: "sonobuoy quick" refStream: "ref/main/stream/debug/?" attestationVariant: "azure-sev-snp" - kubernetes-version: "v1.29" + kubernetes-version: "v1.30" clusterCreation: "cli" - test: "sonobuoy quick" refStream: "ref/main/stream/debug/?" attestationVariant: "azure-tdx" - kubernetes-version: "v1.29" + kubernetes-version: "v1.30" clusterCreation: "cli" - test: "sonobuoy quick" refStream: "ref/main/stream/debug/?" attestationVariant: "aws-sev-snp" - kubernetes-version: "v1.29" + kubernetes-version: "v1.30" clusterCreation: "cli" - test: "sonobuoy quick" refStream: "ref/main/stream/debug/?" attestationVariant: "gcp-sev-es" - kubernetes-version: "v1.28" + kubernetes-version: "v1.29" clusterCreation: "cli" - test: "sonobuoy quick" refStream: "ref/main/stream/debug/?" attestationVariant: "gcp-sev-snp" - kubernetes-version: "v1.28" + kubernetes-version: "v1.29" clusterCreation: "cli" - test: "sonobuoy quick" refStream: "ref/main/stream/debug/?" attestationVariant: "azure-sev-snp" - kubernetes-version: "v1.28" + kubernetes-version: "v1.29" clusterCreation: "cli" - test: "sonobuoy quick" refStream: "ref/main/stream/debug/?" attestationVariant: "azure-tdx" - kubernetes-version: "v1.28" + kubernetes-version: "v1.29" clusterCreation: "cli" - test: "sonobuoy quick" refStream: "ref/main/stream/debug/?" attestationVariant: "aws-sev-snp" - kubernetes-version: "v1.28" + kubernetes-version: "v1.29" clusterCreation: "cli" @@ -290,27 +290,27 @@ jobs: - test: "verify" refStream: "ref/release/stream/stable/?" attestationVariant: "gcp-sev-es" - kubernetes-version: "v1.29" + kubernetes-version: "v1.30" clusterCreation: "cli" - test: "verify" refStream: "ref/release/stream/stable/?" attestationVariant: "gcp-sev-snp" - kubernetes-version: "v1.29" + kubernetes-version: "v1.30" clusterCreation: "cli" - test: "verify" refStream: "ref/release/stream/stable/?" attestationVariant: "azure-sev-snp" - kubernetes-version: "v1.29" + kubernetes-version: "v1.30" clusterCreation: "cli" - test: "verify" refStream: "ref/release/stream/stable/?" attestationVariant: "azure-tdx" - kubernetes-version: "v1.29" + kubernetes-version: "v1.30" clusterCreation: "cli" - test: "verify" refStream: "ref/release/stream/stable/?" attestationVariant: "aws-sev-snp" - kubernetes-version: "v1.29" + kubernetes-version: "v1.30" clusterCreation: "cli" runs-on: ubuntu-24.04 diff --git a/.github/workflows/e2e-test.yml b/.github/workflows/e2e-test.yml index 485024b87..ea1c9c24d 100644 --- a/.github/workflows/e2e-test.yml +++ b/.github/workflows/e2e-test.yml @@ -44,7 +44,7 @@ on: required: true kubernetesVersion: description: "Kubernetes version to create the cluster from." - default: "1.29" + default: "1.30" required: true cliVersion: description: "Version of a released CLI to download. Leave empty to build the CLI from the checked out ref." diff --git a/bootstrapper/internal/kubernetes/k8sapi/BUILD.bazel b/bootstrapper/internal/kubernetes/k8sapi/BUILD.bazel index ef87085bd..968a2b011 100644 --- a/bootstrapper/internal/kubernetes/k8sapi/BUILD.bazel +++ b/bootstrapper/internal/kubernetes/k8sapi/BUILD.bazel @@ -28,6 +28,7 @@ go_library( "@io_k8s_kubelet//config/v1beta1", "@io_k8s_kubernetes//cmd/kubeadm/app/apis/kubeadm/v1beta3", "@io_k8s_kubernetes//cmd/kubeadm/app/constants", + "@org_golang_x_mod//semver", ], ) diff --git a/bootstrapper/internal/kubernetes/k8sapi/kubeadm_config.go b/bootstrapper/internal/kubernetes/k8sapi/kubeadm_config.go index 430839a46..1ce387aeb 100644 --- a/bootstrapper/internal/kubernetes/k8sapi/kubeadm_config.go +++ b/bootstrapper/internal/kubernetes/k8sapi/kubeadm_config.go @@ -12,6 +12,7 @@ import ( "github.com/edgelesssys/constellation/v2/bootstrapper/internal/certificate" "github.com/edgelesssys/constellation/v2/internal/constants" "github.com/edgelesssys/constellation/v2/internal/kubernetes" + "golang.org/x/mod/semver" corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" kubeletconf "k8s.io/kubelet/config/v1beta1" @@ -38,7 +39,7 @@ func (c *KubdeadmConfiguration) InitConfiguration(externalCloudProvider bool, cl cloudProvider = "external" } - return KubeadmInitYAML{ + initConfig := KubeadmInitYAML{ InitConfiguration: kubeadm.InitConfiguration{ TypeMeta: metav1.TypeMeta{ APIVersion: kubeadm.SchemeGroupVersion.String(), @@ -157,6 +158,11 @@ func (c *KubdeadmConfiguration) InitConfiguration(externalCloudProvider bool, cl TLSPrivateKeyFile: certificate.KeyFilename, }, } + + if semver.Compare(clusterVersion, "v1.31.0") >= 0 { + initConfig.ClusterConfiguration.FeatureGates = map[string]bool{"ControlPlaneKubeletLocalMode": true} + } + return initConfig } // JoinConfiguration returns a new kubeadm join configuration. diff --git a/docs/docs/architecture/versions.md b/docs/docs/architecture/versions.md index d9e28bcc7..efb97b932 100644 --- a/docs/docs/architecture/versions.md +++ b/docs/docs/architecture/versions.md @@ -16,6 +16,6 @@ Subsequent Constellation releases drop support for the oldest (and deprecated) K The following Kubernetes versions are currently supported: -* v1.28.15 * v1.29.13 * v1.30.9 +* v1.31.1 diff --git a/docs/docs/reference/cli.md b/docs/docs/reference/cli.md index 06e823e6e..7bb4d5b40 100644 --- a/docs/docs/reference/cli.md +++ b/docs/docs/reference/cli.md @@ -81,7 +81,7 @@ constellation config generate {aws|azure|gcp|openstack|qemu|stackit} [flags] ``` -a, --attestation string attestation variant to use {aws-sev-snp|aws-nitro-tpm|azure-sev-snp|azure-tdx|azure-trustedlaunch|gcp-sev-snp|gcp-sev-es|qemu-vtpm}. If not specified, the default for the cloud provider is used -h, --help help for generate - -k, --kubernetes string Kubernetes version to use in format MAJOR.MINOR (default "v1.29") + -k, --kubernetes string Kubernetes version to use in format MAJOR.MINOR (default "v1.30") -t, --tags strings additional tags for created resources given a list of key=value ``` diff --git a/internal/constellation/kubecmd/BUILD.bazel b/internal/constellation/kubecmd/BUILD.bazel index 71bae3c32..aca26d0bb 100644 --- a/internal/constellation/kubecmd/BUILD.bazel +++ b/internal/constellation/kubecmd/BUILD.bazel @@ -30,8 +30,11 @@ go_library( "@io_k8s_apimachinery//pkg/apis/meta/v1/unstructured", "@io_k8s_apimachinery//pkg/runtime", "@io_k8s_apimachinery//pkg/runtime/schema", + "@io_k8s_apimachinery//pkg/runtime/serializer/json", "@io_k8s_client_go//util/retry", - "@io_k8s_kubernetes//cmd/kubeadm/app/apis/kubeadm/v1beta3", + "@io_k8s_kubernetes//cmd/kubeadm/app/apis/kubeadm", + "@io_k8s_kubernetes//cmd/kubeadm/app/apis/kubeadm/scheme", + "@io_k8s_kubernetes//cmd/kubeadm/app/apis/kubeadm/v1beta4", "@io_k8s_sigs_yaml//:yaml", ], ) diff --git a/internal/constellation/kubecmd/kubecmd.go b/internal/constellation/kubecmd/kubecmd.go index 1ebf99265..dd3c4f9da 100644 --- a/internal/constellation/kubecmd/kubecmd.go +++ b/internal/constellation/kubecmd/kubecmd.go @@ -42,9 +42,11 @@ import ( "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/schema" + k8sjson "k8s.io/apimachinery/pkg/runtime/serializer/json" "k8s.io/client-go/util/retry" - kubeadmv1beta3 "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/v1beta3" - "sigs.k8s.io/yaml" + "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm" + kubeadmscheme "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/scheme" + kubeadmv1beta4 "k8s.io/kubernetes/cmd/kubeadm/app/apis/kubeadm/v1beta4" ) // ErrInProgress signals that an upgrade is in progress inside the cluster. @@ -129,6 +131,18 @@ func (k *KubeCmd) UpgradeKubernetesVersion(ctx context.Context, kubernetesVersio ) } + // TODO(burgerdev): remove after releasing v2.19 + // Workaround for https://github.com/kubernetes/kubernetes/issues/127316: force kubelet to + // connect to the local API server. + if err := k.patchKubeadmConfig(ctx, func(cc *kubeadm.ClusterConfiguration) { + if cc.FeatureGates == nil { + cc.FeatureGates = map[string]bool{} + } + cc.FeatureGates["ControlPlaneKubeletLocalMode"] = true + }); err != nil { + return fmt.Errorf("setting FeatureGate ControlPlaneKubeletLocalMode: %w", err) + } + versionConfig, ok := versions.VersionConfigs[kubernetesVersion] if !ok { return fmt.Errorf("skipping Kubernetes upgrade: %w", compatibility.NewInvalidUpgradeError( @@ -234,48 +248,32 @@ func (k *KubeCmd) ApplyJoinConfig(ctx context.Context, newAttestConfig config.At // ExtendClusterConfigCertSANs extends the ClusterConfig stored under "kube-system/kubeadm-config" with the given SANs. // Empty strings are ignored, existing SANs are preserved. func (k *KubeCmd) ExtendClusterConfigCertSANs(ctx context.Context, alternativeNames []string) error { - clusterConfiguration, kubeadmConfig, err := k.getClusterConfiguration(ctx) - if err != nil { - return fmt.Errorf("getting ClusterConfig: %w", err) - } - - existingSANs := make(map[string]struct{}) - for _, existingSAN := range clusterConfiguration.APIServer.CertSANs { - existingSANs[existingSAN] = struct{}{} - } - - var missingSANs []string - for _, san := range alternativeNames { - if san == "" { - continue // skip empty SANs + if err := k.patchKubeadmConfig(ctx, func(clusterConfiguration *kubeadm.ClusterConfiguration) { + existingSANs := make(map[string]struct{}) + for _, existingSAN := range clusterConfiguration.APIServer.CertSANs { + existingSANs[existingSAN] = struct{}{} } - if _, ok := existingSANs[san]; !ok { - missingSANs = append(missingSANs, san) - existingSANs[san] = struct{}{} // make sure we don't add the same SAN twice + + var missingSANs []string + for _, san := range alternativeNames { + if san == "" { + continue // skip empty SANs + } + if _, ok := existingSANs[san]; !ok { + missingSANs = append(missingSANs, san) + existingSANs[san] = struct{}{} // make sure we don't add the same SAN twice + } } - } - if len(missingSANs) == 0 { - k.log.Debug("No new SANs to add to the cluster's apiserver SAN field") - return nil - } - k.log.Debug("Extending the cluster's apiserver SAN field", "certSANs", strings.Join(missingSANs, ", ")) + if len(missingSANs) == 0 { + k.log.Debug("No new SANs to add to the cluster's apiserver SAN field") + } + k.log.Debug("Extending the cluster's apiserver SAN field", "certSANs", strings.Join(missingSANs, ", ")) - clusterConfiguration.APIServer.CertSANs = append(clusterConfiguration.APIServer.CertSANs, missingSANs...) - sort.Strings(clusterConfiguration.APIServer.CertSANs) - - newConfigYAML, err := yaml.Marshal(clusterConfiguration) - if err != nil { - return fmt.Errorf("marshaling ClusterConfiguration: %w", err) - } - - kubeadmConfig.Data[constants.ClusterConfigurationKey] = string(newConfigYAML) - k.log.Debug("Triggering kubeadm config update now") - if err = k.retryAction(ctx, func(ctx context.Context) error { - _, err := k.kubectl.UpdateConfigMap(ctx, kubeadmConfig) - return err + clusterConfiguration.APIServer.CertSANs = append(clusterConfiguration.APIServer.CertSANs, missingSANs...) + sort.Strings(clusterConfiguration.APIServer.CertSANs) }); err != nil { - return fmt.Errorf("setting new kubeadm config: %w", err) + return fmt.Errorf("extending ClusterConfig.CertSANs: %w", err) } k.log.Debug("Successfully extended the cluster's apiserver SAN field") @@ -316,31 +314,6 @@ func (k *KubeCmd) getConstellationVersion(ctx context.Context) (updatev1alpha1.N return nodeVersion, nil } -// getClusterConfiguration fetches the kubeadm-config configmap from the cluster, extracts the config -// and returns both the full configmap and the ClusterConfiguration. -func (k *KubeCmd) getClusterConfiguration(ctx context.Context) (kubeadmv1beta3.ClusterConfiguration, *corev1.ConfigMap, error) { - var existingConf *corev1.ConfigMap - if err := k.retryAction(ctx, func(ctx context.Context) error { - var err error - existingConf, err = k.kubectl.GetConfigMap(ctx, constants.ConstellationNamespace, constants.KubeadmConfigMap) - return err - }); err != nil { - return kubeadmv1beta3.ClusterConfiguration{}, nil, fmt.Errorf("retrieving current kubeadm-config: %w", err) - } - - clusterConf, ok := existingConf.Data[constants.ClusterConfigurationKey] - if !ok { - return kubeadmv1beta3.ClusterConfiguration{}, nil, errors.New("ClusterConfiguration missing from kubeadm-config") - } - - var existingClusterConfig kubeadmv1beta3.ClusterConfiguration - if err := yaml.Unmarshal([]byte(clusterConf), &existingClusterConfig); err != nil { - return kubeadmv1beta3.ClusterConfiguration{}, nil, fmt.Errorf("unmarshaling ClusterConfiguration: %w", err) - } - - return existingClusterConfig, existingConf, nil -} - // applyComponentsCM applies the k8s components ConfigMap to the cluster. func (k *KubeCmd) applyComponentsCM(ctx context.Context, components *corev1.ConfigMap) error { if err := k.retryAction(ctx, func(ctx context.Context) error { @@ -468,6 +441,51 @@ func (k *KubeCmd) retryAction(ctx context.Context, action func(ctx context.Conte return retrier.Do(ctx) } +// patchKubeadmConfig fetches and unpacks the kube-system/kubeadm-config ClusterConfiguration entry, +// runs doPatch on it and uploads the result. +func (k *KubeCmd) patchKubeadmConfig(ctx context.Context, doPatch func(*kubeadm.ClusterConfiguration)) error { + var kubeadmConfig *corev1.ConfigMap + if err := k.retryAction(ctx, func(ctx context.Context) error { + var err error + kubeadmConfig, err = k.kubectl.GetConfigMap(ctx, constants.ConstellationNamespace, constants.KubeadmConfigMap) + return err + }); err != nil { + return fmt.Errorf("retrieving current kubeadm-config: %w", err) + } + + clusterConfigData, ok := kubeadmConfig.Data[constants.ClusterConfigurationKey] + if !ok { + return errors.New("ClusterConfiguration missing from kubeadm-config") + } + + var clusterConfiguration kubeadm.ClusterConfiguration + if err := runtime.DecodeInto(kubeadmscheme.Codecs.UniversalDecoder(), []byte(clusterConfigData), &clusterConfiguration); err != nil { + return fmt.Errorf("decoding cluster configuration data: %w", err) + } + + doPatch(&clusterConfiguration) + + opt := k8sjson.SerializerOptions{Yaml: true} + serializer := k8sjson.NewSerializerWithOptions(k8sjson.DefaultMetaFactory, kubeadmscheme.Scheme, kubeadmscheme.Scheme, opt) + encoder := kubeadmscheme.Codecs.EncoderForVersion(serializer, kubeadmv1beta4.SchemeGroupVersion) + newConfigYAML, err := runtime.Encode(encoder, &clusterConfiguration) + if err != nil { + return fmt.Errorf("marshaling ClusterConfiguration: %w", err) + } + + kubeadmConfig.Data[constants.ClusterConfigurationKey] = string(newConfigYAML) + k.log.Debug("Triggering kubeadm config update now") + if err = k.retryAction(ctx, func(ctx context.Context) error { + _, err := k.kubectl.UpdateConfigMap(ctx, kubeadmConfig) + return err + }); err != nil { + return fmt.Errorf("setting new kubeadm config: %w", err) + } + + k.log.Debug("Successfully patched the cluster's kubeadm-config") + return nil +} + func checkForApplyError(expected, actual updatev1alpha1.NodeVersion) error { var err error switch { diff --git a/internal/constellation/kubecmd/kubecmd_test.go b/internal/constellation/kubecmd/kubecmd_test.go index 74e9562c1..c88dab9bd 100644 --- a/internal/constellation/kubecmd/kubecmd_test.go +++ b/internal/constellation/kubecmd/kubecmd_test.go @@ -281,6 +281,9 @@ func TestUpgradeKubernetesVersion(t *testing.T) { } kubectl := &stubKubectl{ unstructuredInterface: unstructuredClient, + configMaps: map[string]*corev1.ConfigMap{ + constants.KubeadmConfigMap: {Data: map[string]string{"ClusterConfiguration": kubeadmClusterConfigurationV1Beta4}}, + }, } if tc.customClientFn != nil { kubectl.unstructuredInterface = tc.customClientFn(nodeVersion) @@ -676,6 +679,50 @@ func TestRetryAction(t *testing.T) { } } +func TestExtendClusterConfigCertSANs(t *testing.T) { + ctx := context.Background() + + testCases := map[string]struct { + clusterConfig string + }{ + "kubeadmv1beta3.ClusterConfiguration": { + clusterConfig: kubeadmClusterConfigurationV1Beta3, + }, + "kubeadmv1beta4.ClusterConfiguration": { + clusterConfig: kubeadmClusterConfigurationV1Beta4, + }, + } + + for name, tc := range testCases { + t.Run(name, func(t *testing.T) { + require := require.New(t) + assert := assert.New(t) + kubectl := &fakeConfigMapClient{ + configMaps: map[string]*corev1.ConfigMap{ + constants.KubeadmConfigMap: {Data: map[string]string{"ClusterConfiguration": tc.clusterConfig}}, + }, + } + cmd := &KubeCmd{ + kubectl: kubectl, + log: logger.NewTest(t), + retryInterval: time.Millisecond, + } + + err := cmd.ExtendClusterConfigCertSANs(ctx, []string{"example.com"}) + require.NoError(err) + + cm := kubectl.configMaps["kubeadm-config"] + require.NotNil(cm) + cc := cm.Data["ClusterConfiguration"] + require.NotNil(cc) + // Verify that SAN was added. + assert.Contains(cc, "example.com") + // Verify that config was written in v1beta4, regardless of the version read. + assert.Contains(cc, "kubeadm.k8s.io/v1beta4") + }) + } +} + type fakeUnstructuredClient struct { mock.Mock } @@ -835,3 +882,83 @@ func supportedValidK8sVersions() (res []versions.ValidK8sVersion) { } return } + +var kubeadmClusterConfigurationV1Beta3 = ` +apiVersion: kubeadm.k8s.io/v1beta3 +kind: ClusterConfiguration +apiServer: + certSANs: + - 127.0.0.1 + extraArgs: + kubelet-certificate-authority: /etc/kubernetes/pki/ca.crt + profiling: "false" + extraVolumes: + - hostPath: /var/log/kubernetes/audit/ + mountPath: /var/log/kubernetes/audit/ + name: audit-log + pathType: DirectoryOrCreate +certificatesDir: /etc/kubernetes/pki +clusterName: test-55bbf58d +controlPlaneEndpoint: 34.149.125.227:6443 +controllerManager: + extraArgs: + cloud-provider: external +dns: + disabled: true +encryptionAlgorithm: RSA-2048 +etcd: + local: + dataDir: /var/lib/etcd +imageRepository: registry.k8s.io +kubernetesVersion: v1.31.1 +networking: + dnsDomain: cluster.local + serviceSubnet: 10.96.0.0/12 +proxy: + disabled: true +scheduler: + extraArgs: + profiling: "false" +` + +var kubeadmClusterConfigurationV1Beta4 = ` +apiVersion: kubeadm.k8s.io/v1beta4 +kind: ClusterConfiguration +apiServer: + certSANs: + - 127.0.0.1 + extraArgs: + - name: kubelet-certificate-authority + value: /etc/kubernetes/pki/ca.crt + - name: profiling + value: "false" + extraVolumes: + - hostPath: /var/log/kubernetes/audit/ + mountPath: /var/log/kubernetes/audit/ + name: audit-log + pathType: DirectoryOrCreate +certificatesDir: /etc/kubernetes/pki +clusterName: test-55bbf58d +controlPlaneEndpoint: 34.149.125.227:6443 +controllerManager: + extraArgs: + - name: cloud-provider + value: external +dns: + disabled: true +encryptionAlgorithm: RSA-2048 +etcd: + local: + dataDir: /var/lib/etcd +imageRepository: registry.k8s.io +kubernetesVersion: v1.31.1 +networking: + dnsDomain: cluster.local + serviceSubnet: 10.96.0.0/12 +proxy: + disabled: true +scheduler: + extraArgs: + - name: profiling + value: "false" +` diff --git a/internal/versions/versions.go b/internal/versions/versions.go index 999c7a0de..b77861fed 100644 --- a/internal/versions/versions.go +++ b/internal/versions/versions.go @@ -100,12 +100,12 @@ func ResolveK8sPatchVersion(k8sVersion string) (string, error) { // supported patch version as PATCH. func k8sVersionFromMajorMinor(version string) string { switch version { - case semver.MajorMinor(string(V1_28)): - return string(V1_28) case semver.MajorMinor(string(V1_29)): return string(V1_29) case semver.MajorMinor(string(V1_30)): return string(V1_30) + case semver.MajorMinor(string(V1_31)): + return string(V1_31) default: return "" } @@ -181,14 +181,14 @@ const ( // currently supported versions. //nolint:revive - V1_28 ValidK8sVersion = "v1.28.15" // renovate:kubernetes-release - //nolint:revive V1_29 ValidK8sVersion = "v1.29.13" // renovate:kubernetes-release //nolint:revive V1_30 ValidK8sVersion = "v1.30.9" // renovate:kubernetes-release + //nolint:revive + V1_31 ValidK8sVersion = "v1.31.1" // renovate:kubernetes-release // Default k8s version deployed by Constellation. - Default ValidK8sVersion = V1_29 + Default ValidK8sVersion = V1_30 ) // Regenerate the hashes by running go generate. @@ -197,73 +197,6 @@ const ( // VersionConfigs holds download URLs for all required kubernetes components for every supported version. var VersionConfigs = map[ValidK8sVersion]KubernetesVersion{ - V1_28: { - ClusterVersion: "v1.28.15", // renovate:kubernetes-release - KubernetesComponents: components.Components{ - { - Url: "https://github.com/containernetworking/plugins/releases/download/v1.6.2/cni-plugins-linux-amd64-v1.6.2.tgz", // renovate:cni-plugins-release - Hash: "sha256:b8e811578fb66023f90d2e238d80cec3bdfca4b44049af74c374d4fae0f9c090", - InstallPath: constants.CniPluginsDir, - Extract: true, - }, - { - Url: "https://github.com/kubernetes-sigs/cri-tools/releases/download/v1.32.0/crictl-v1.32.0-linux-amd64.tar.gz", // renovate:crictl-release - Hash: "sha256:f050b71d3a73a91a4e0990b90143ed04dcd100cc66f953736fcb6a2730e283c4", - InstallPath: constants.BinDir, - Extract: true, - }, - { - Url: "https://dl.k8s.io/v1.28.15/bin/linux/amd64/kubelet", // renovate:kubernetes-release - Hash: "sha256:b07a27fd5bd2419c9c623de15c1dd339af84eb27e9276c81070071065db00036", - InstallPath: constants.KubeletPath, - Extract: false, - }, - { - Url: "https://dl.k8s.io/v1.28.15/bin/linux/amd64/kubeadm", // renovate:kubernetes-release - Hash: "sha256:0555b2c2fd30efcdb44b7fba5460c3dc3d3e39f2301e1eef7894a9f8976e1b4c", - InstallPath: constants.KubeadmPath, - Extract: false, - }, - { - Url: "https://dl.k8s.io/v1.28.15/bin/linux/amd64/kubectl", // renovate:kubernetes-release - Hash: "sha256:1f7651ad0b50ef4561aa82e77f3ad06599b5e6b0b2a5fb6c4f474d95a77e41c5", - InstallPath: constants.KubectlPath, - Extract: false, - }, - { - Url: "data:application/json;base64,W3sib3AiOiJyZXBsYWNlIiwicGF0aCI6Ii9zcGVjL2NvbnRhaW5lcnMvMC9pbWFnZSIsInZhbHVlIjoicmVnaXN0cnkuazhzLmlvL2t1YmUtYXBpc2VydmVyOnYxLjI4LjE1QHNoYTI1Njo2ZGZhODRmNWQ2YmU3MTFhZTBkMTk3NTgyMDFkMzM3ZTgzNmFiN2RlNzMzMDZmZjE0NzI1Y2VhYTk3OGZlYThmIn1d", - InstallPath: patchFilePath("kube-apiserver"), - }, - { - Url: "data:application/json;base64,W3sib3AiOiJyZXBsYWNlIiwicGF0aCI6Ii9zcGVjL2NvbnRhaW5lcnMvMC9pbWFnZSIsInZhbHVlIjoicmVnaXN0cnkuazhzLmlvL2t1YmUtY29udHJvbGxlci1tYW5hZ2VyOnYxLjI4LjE1QHNoYTI1NjpkYWRkMmEzNzg0NzgzMDE4YTdlZTg1ODhkMTFmNzg3ZmVlNGQ1NDI0ZjJjZGQ2Y2U4OWQzYmExODQ0YTZjMTc1In1d", - InstallPath: patchFilePath("kube-controller-manager"), - }, - { - Url: "data:application/json;base64,W3sib3AiOiJyZXBsYWNlIiwicGF0aCI6Ii9zcGVjL2NvbnRhaW5lcnMvMC9pbWFnZSIsInZhbHVlIjoicmVnaXN0cnkuazhzLmlvL2t1YmUtc2NoZWR1bGVyOnYxLjI4LjE1QHNoYTI1Njo4MmY0YTQyMzE3NDUwODU4ZDNkNzBmZGU1YjNjMGYyMjE1M2VhMTU1ZmQwNTNmMDk4NjU5OTlhNDY2MWYyZGNhIn1d", - InstallPath: patchFilePath("kube-scheduler"), - }, - { - Url: "data:application/json;base64,W3sib3AiOiJyZXBsYWNlIiwicGF0aCI6Ii9zcGVjL2NvbnRhaW5lcnMvMC9pbWFnZSIsInZhbHVlIjoicmVnaXN0cnkuazhzLmlvL2V0Y2Q6My41LjE2LTBAc2hhMjU2OmM2YTlkMTFjYzVjMDRiMTE0Y2NkZWYzOWE5MjY1ZWVlZjgxOGUzZDAyZjUzNTliZTAzNWFlNzg0MDk3ZmRlYzUifV0=", - InstallPath: patchFilePath("etcd"), - }, - }, - // CloudControllerManagerImageAWS is the CCM image used on AWS. - // Check for newer versions at https://github.com/kubernetes/cloud-provider-aws/releases. - CloudControllerManagerImageAWS: "registry.k8s.io/provider-aws/cloud-controller-manager:v1.28.10@sha256:582571fc487b4ba52fbafe4385daec5d97f57cdd7f3e901211eef6411b2a90a6", // renovate:container - // CloudControllerManagerImageAzure is the CCM image used on Azure. - // Check for newer versions at https://github.com/kubernetes-sigs/cloud-provider-azure/blob/master/README.md. - CloudControllerManagerImageAzure: "mcr.microsoft.com/oss/kubernetes/azure-cloud-controller-manager:v1.28.14@sha256:6a906998155e3546f7832dd3bd3000654920ff3371a7499e225c549094957303", // renovate:container - // CloudNodeManagerImageAzure is the cloud-node-manager image used on Azure. - // Check for newer versions at https://github.com/kubernetes-sigs/cloud-provider-azure/blob/master/README.md. - CloudNodeManagerImageAzure: "mcr.microsoft.com/oss/kubernetes/azure-cloud-node-manager:v1.28.14@sha256:cf9ee6f4affbdd2a602fbf7bfeb69ebfd6de1ec2582c0e65e87bb061385fdbc2", // renovate:container - // CloudControllerManagerImageGCP is the CCM image used on GCP. - CloudControllerManagerImageGCP: "ghcr.io/edgelesssys/cloud-provider-gcp:v28.10.0@sha256:f3b6fa7faea27b4a303c91b3bc7ee192b050e21e27579e9f3da90ae4ba38e626", // renovate:container - // CloudControllerManagerImageOpenStack is the CCM image used on OpenStack. - CloudControllerManagerImageOpenStack: "docker.io/k8scloudprovider/openstack-cloud-controller-manager:v1.26.4@sha256:05e846fb13481b6dbe4a1e50491feb219e8f5101af6cf662a086115735624db0", // renovate:container - // External service image. Depends on k8s version. - // Check for new versions at https://github.com/kubernetes/autoscaler/releases. - ClusterAutoscalerImage: "registry.k8s.io/autoscaling/cluster-autoscaler:v1.28.7@sha256:77906954da9171425c8c8d3286091818143b6dcf9039abd49b8f33f1502978a1", // renovate:container - }, V1_29: { ClusterVersion: "v1.29.13", // renovate:kubernetes-release KubernetesComponents: components.Components{ @@ -398,6 +331,73 @@ var VersionConfigs = map[ValidK8sVersion]KubernetesVersion{ // Check for new versions at https://github.com/kubernetes/autoscaler/releases. ClusterAutoscalerImage: "registry.k8s.io/autoscaling/cluster-autoscaler:v1.30.3@sha256:08fd86ee093760849ac4fd579eb90185b669fc20aa56c156aa34ea7b73dd5e34", // renovate:container }, + V1_31: { + ClusterVersion: "v1.31.1", // renovate:kubernetes-release + KubernetesComponents: components.Components{ + { + Url: "https://github.com/containernetworking/plugins/releases/download/v1.6.2/cni-plugins-linux-amd64-v1.6.2.tgz", // renovate:cni-plugins-release + Hash: "sha256:b8e811578fb66023f90d2e238d80cec3bdfca4b44049af74c374d4fae0f9c090", + InstallPath: constants.CniPluginsDir, + Extract: true, + }, + { + Url: "https://github.com/kubernetes-sigs/cri-tools/releases/download/v1.31.1/crictl-v1.31.1-linux-amd64.tar.gz", // renovate:crictl-release + Hash: "sha256:0a03ba6b1e4c253d63627f8d210b2ea07675a8712587e697657b236d06d7d231", + InstallPath: constants.BinDir, + Extract: true, + }, + { + Url: "https://dl.k8s.io/v1.31.1/bin/linux/amd64/kubelet", // renovate:kubernetes-release + Hash: "sha256:50619fff95bdd7e690c049cc083f495ae0e7c66d0cdf6a8bcad298af5fe28438", + InstallPath: constants.KubeletPath, + Extract: false, + }, + { + Url: "https://dl.k8s.io/v1.31.1/bin/linux/amd64/kubeadm", // renovate:kubernetes-release + Hash: "sha256:b3f92d19d482359116dd9ee9c0a10cb86e32a2a2aef79b853d5f07d6a093b0df", + InstallPath: constants.KubeadmPath, + Extract: false, + }, + { + Url: "https://dl.k8s.io/v1.31.1/bin/linux/amd64/kubectl", // renovate:kubernetes-release + Hash: "sha256:57b514a7facce4ee62c93b8dc21fda8cf62ef3fed22e44ffc9d167eab843b2ae", + InstallPath: constants.KubectlPath, + Extract: false, + }, + { + Url: "data:application/json;base64,W3sib3AiOiJyZXBsYWNlIiwicGF0aCI6Ii9zcGVjL2NvbnRhaW5lcnMvMC9pbWFnZSIsInZhbHVlIjoicmVnaXN0cnkuazhzLmlvL2t1YmUtYXBpc2VydmVyOnYxLjMxLjFAc2hhMjU2OjI0MDljMjNkYmI1YTJiN2E4MWFkYmIxODRkM2VhYzQzYWM2NTNlOWI5N2E3YzBlZTEyMWI4OWJiM2VmNjFmZGIifV0=", + InstallPath: patchFilePath("kube-apiserver"), + }, + { + Url: "data:application/json;base64,W3sib3AiOiJyZXBsYWNlIiwicGF0aCI6Ii9zcGVjL2NvbnRhaW5lcnMvMC9pbWFnZSIsInZhbHVlIjoicmVnaXN0cnkuazhzLmlvL2t1YmUtY29udHJvbGxlci1tYW5hZ2VyOnYxLjMxLjFAc2hhMjU2OjlmOWRhNWIyN2UwM2Y4OTU5OWNjNDBiYTg5MTUwYWViZjNiNGNmZjAwMWU2ZGI2ZDk5ODY3NGIzNDE4MWUxYTEifV0=", + InstallPath: patchFilePath("kube-controller-manager"), + }, + { + Url: "data:application/json;base64,W3sib3AiOiJyZXBsYWNlIiwicGF0aCI6Ii9zcGVjL2NvbnRhaW5lcnMvMC9pbWFnZSIsInZhbHVlIjoicmVnaXN0cnkuazhzLmlvL2t1YmUtc2NoZWR1bGVyOnYxLjMxLjFAc2hhMjU2Ojk2OWE3ZTk2MzQwZjNhOTI3YjNkNjUyNTgyZWRlYzJkNmQ4MmEwODM4NzFkODFlZjUwNjRiN2VkYWFiNDMwZDAifV0=", + InstallPath: patchFilePath("kube-scheduler"), + }, + { + Url: "data:application/json;base64,W3sib3AiOiJyZXBsYWNlIiwicGF0aCI6Ii9zcGVjL2NvbnRhaW5lcnMvMC9pbWFnZSIsInZhbHVlIjoicmVnaXN0cnkuazhzLmlvL2V0Y2Q6My41LjE2LTBAc2hhMjU2OmM2YTlkMTFjYzVjMDRiMTE0Y2NkZWYzOWE5MjY1ZWVlZjgxOGUzZDAyZjUzNTliZTAzNWFlNzg0MDk3ZmRlYzUifV0=", + InstallPath: patchFilePath("etcd"), + }, + }, + // CloudControllerManagerImageAWS is the CCM image used on AWS. + // Check for newer versions at https://github.com/kubernetes/cloud-provider-aws/releases. + CloudControllerManagerImageAWS: "registry.k8s.io/provider-aws/cloud-controller-manager:v1.31.4@sha256:47f861081efbc04bda32b6212ca2c74b5b2ce190e595a285e1b712ca0afec0c7", // renovate:container + // CloudControllerManagerImageAzure is the CCM image used on Azure. + // Check for newer versions at https://github.com/kubernetes-sigs/cloud-provider-azure/blob/master/README.md. + CloudControllerManagerImageAzure: "mcr.microsoft.com/oss/kubernetes/azure-cloud-controller-manager:v1.31.1@sha256:b5aa55a7e9d38137f7fcd0adc9335b06e7c96061764addd7e6bb9f86403f0110", // renovate:container + // CloudNodeManagerImageAzure is the cloud-node-manager image used on Azure. + // Check for newer versions at https://github.com/kubernetes-sigs/cloud-provider-azure/blob/master/README.md. + CloudNodeManagerImageAzure: "mcr.microsoft.com/oss/kubernetes/azure-cloud-node-manager:v1.31.1@sha256:e9b522399e4ec6bc4ce90c173e59db135d742de7b16f0f5454b4d88ba78a98c7", // renovate:container + // CloudControllerManagerImageGCP is the CCM image used on GCP. + CloudControllerManagerImageGCP: "ghcr.io/edgelesssys/cloud-provider-gcp:v30.1.0@sha256:64d2d5d4d2b5fb426c307c64ada9a61b64e797b56d9768363f145f2bd957998f", // renovate:container + // CloudControllerManagerImageOpenStack is the CCM image used on OpenStack. + CloudControllerManagerImageOpenStack: "registry.k8s.io/provider-os/openstack-cloud-controller-manager:v1.31.1@sha256:72cc0d22b83c613df809d8134e50404171513d92287e63e2313d9ad7e1ed630e", // renovate:container + // External service image. Depends on k8s version. + // Check for new versions at https://github.com/kubernetes/autoscaler/releases. + ClusterAutoscalerImage: "registry.k8s.io/autoscaling/cluster-autoscaler:v1.31.0@sha256:6d4c51c35f344d230341d71bb6d35f2c2f0c0a6f205a7887ae44e6d852fb5b5f", // renovate:container + }, } // KubernetesVersion bundles download Urls to all version-releated binaries necessary for installing/deploying a particular Kubernetes version. diff --git a/operators/constellation-node-operator/controllers/nodeversion_controller.go b/operators/constellation-node-operator/controllers/nodeversion_controller.go index fc185b1e2..c46c7b313 100644 --- a/operators/constellation-node-operator/controllers/nodeversion_controller.go +++ b/operators/constellation-node-operator/controllers/nodeversion_controller.go @@ -214,7 +214,7 @@ func (r *NodeVersionReconciler) Reconcile(ctx context.Context, req ctrl.Request) return ctrl.Result{Requeue: shouldRequeue}, nil } - newNodeConfig := newNodeConfig{desiredNodeVersion, groups.Outdated, pendingNodeList.Items, scalingGroupByID, newNodesBudget} + newNodeConfig := newNodeConfig{desiredNodeVersion, groups.Outdated, groups.Donors, pendingNodeList.Items, scalingGroupByID, newNodesBudget} if err := r.createNewNodes(ctx, newNodeConfig); err != nil { logr.Error(err, "Creating new nodes") return ctrl.Result{Requeue: shouldRequeue}, nil @@ -614,6 +614,15 @@ func (r *NodeVersionReconciler) createNewNodes(ctx context.Context, config newNo if config.newNodesBudget < 1 || len(config.outdatedNodes) == 0 { return nil } + // We need to look at both the outdated nodes *and* the nodes that have already + // been moved to the donors here because even if a CP node has already been moved to + // the donors, we still want to defer worker upgrades until the new CP node is actually joined. + hasOutdatedControlPlanes := false + for _, entry := range append(config.outdatedNodes, config.donors...) { + if nodeutil.IsControlPlaneNode(&entry) { + hasOutdatedControlPlanes = true + } + } outdatedNodesPerScalingGroup := make(map[string]int) for _, node := range config.outdatedNodes { // skip outdated nodes that got assigned an heir in this Reconcile call @@ -648,6 +657,12 @@ func (r *NodeVersionReconciler) createNewNodes(ctx context.Context, config newNo continue } if requiredNodesPerScalingGroup[scalingGroupID] == 0 { + logr.Info("No new nodes needed for scaling group", "scalingGroup", scalingGroupID) + continue + } + // if we are a worker group and still have outdated control planes, we must wait for them to be upgraded. + if hasOutdatedControlPlanes && scalingGroup.Spec.Role != updatev1alpha1.ControlPlaneRole { + logr.Info("There are still outdated control plane nodes which must be replaced first before this worker scaling group is upgraded", "scalingGroup", scalingGroupID) continue } for { @@ -679,7 +694,7 @@ func (r *NodeVersionReconciler) createNewNodes(ctx context.Context, config newNo if err := r.Create(ctx, pendingNode); err != nil { return err } - logr.Info("Created new node", "createdNode", nodeName, "scalingGroup", scalingGroupID) + logr.Info("Created new node", "createdNode", nodeName, "scalingGroup", scalingGroupID, "requiredNodes", requiredNodesPerScalingGroup[scalingGroupID]) requiredNodesPerScalingGroup[scalingGroupID]-- config.newNodesBudget-- } @@ -939,6 +954,7 @@ type kubernetesServerVersionGetter interface { type newNodeConfig struct { desiredNodeVersion updatev1alpha1.NodeVersion outdatedNodes []corev1.Node + donors []corev1.Node pendingNodes []updatev1alpha1.PendingNode scalingGroupByID map[string]updatev1alpha1.ScalingGroup newNodesBudget int diff --git a/operators/constellation-node-operator/controllers/nodeversion_controller_test.go b/operators/constellation-node-operator/controllers/nodeversion_controller_test.go index c9ae88042..6b8531851 100644 --- a/operators/constellation-node-operator/controllers/nodeversion_controller_test.go +++ b/operators/constellation-node-operator/controllers/nodeversion_controller_test.go @@ -330,6 +330,7 @@ func TestMatchDonorsAndHeirs(t *testing.T) { func TestCreateNewNodes(t *testing.T) { testCases := map[string]struct { outdatedNodes []corev1.Node + donors []corev1.Node pendingNodes []updatev1alpha1.PendingNode scalingGroupByID map[string]updatev1alpha1.ScalingGroup budget int @@ -573,6 +574,105 @@ func TestCreateNewNodes(t *testing.T) { }, budget: 1, }, + "control plane node upgraded first": { + outdatedNodes: []corev1.Node{ + // CP node + { + ObjectMeta: metav1.ObjectMeta{ + Name: "control-plane-node", + Annotations: map[string]string{ + scalingGroupAnnotation: "control-plane-scaling-group", + }, + Labels: map[string]string{ + // Mark this as a CP node as per + // https://kubernetes.io/docs/reference/labels-annotations-taints/#node-role-kubernetes-io-control-plane + "node-role.kubernetes.io/control-plane": "", + }, + }, + }, + // Worker node + { + ObjectMeta: metav1.ObjectMeta{ + Name: "node", + Annotations: map[string]string{ + scalingGroupAnnotation: "scaling-group", + }, + }, + }, + }, + scalingGroupByID: map[string]updatev1alpha1.ScalingGroup{ + "scaling-group": { + Spec: updatev1alpha1.ScalingGroupSpec{ + GroupID: "scaling-group", + Role: updatev1alpha1.WorkerRole, + }, + Status: updatev1alpha1.ScalingGroupStatus{ + ImageReference: "image", + }, + }, + "control-plane-scaling-group": { + Spec: updatev1alpha1.ScalingGroupSpec{ + GroupID: "control-plane-scaling-group", + Role: updatev1alpha1.ControlPlaneRole, + }, + Status: updatev1alpha1.ScalingGroupStatus{ + ImageReference: "image", + }, + }, + }, + budget: 2, + wantCreateCalls: []string{"control-plane-scaling-group"}, + }, + "worker not upgraded while cp is in donors": { + donors: []corev1.Node{ + // CP node + { + ObjectMeta: metav1.ObjectMeta{ + Name: "control-plane-node", + Annotations: map[string]string{ + scalingGroupAnnotation: "control-plane-scaling-group", + }, + Labels: map[string]string{ + // Mark this as a CP node as per + // https://kubernetes.io/docs/reference/labels-annotations-taints/#node-role-kubernetes-io-control-plane + "node-role.kubernetes.io/control-plane": "", + }, + }, + }, + }, + outdatedNodes: []corev1.Node{ + // Worker node + { + ObjectMeta: metav1.ObjectMeta{ + Name: "node", + Annotations: map[string]string{ + scalingGroupAnnotation: "scaling-group", + }, + }, + }, + }, + scalingGroupByID: map[string]updatev1alpha1.ScalingGroup{ + "scaling-group": { + Spec: updatev1alpha1.ScalingGroupSpec{ + GroupID: "scaling-group", + Role: updatev1alpha1.WorkerRole, + }, + Status: updatev1alpha1.ScalingGroupStatus{ + ImageReference: "image", + }, + }, + "control-plane-scaling-group": { + Spec: updatev1alpha1.ScalingGroupSpec{ + GroupID: "control-plane-scaling-group", + Role: updatev1alpha1.ControlPlaneRole, + }, + Status: updatev1alpha1.ScalingGroupStatus{ + ImageReference: "image", + }, + }, + }, + budget: 1, + }, } for name, tc := range testCases { @@ -592,7 +692,7 @@ func TestCreateNewNodes(t *testing.T) { }, Scheme: getScheme(t), } - newNodeConfig := newNodeConfig{desiredNodeImage, tc.outdatedNodes, tc.pendingNodes, tc.scalingGroupByID, tc.budget} + newNodeConfig := newNodeConfig{desiredNodeImage, tc.outdatedNodes, tc.donors, tc.pendingNodes, tc.scalingGroupByID, tc.budget} err := reconciler.createNewNodes(context.Background(), newNodeConfig) require.NoError(err) assert.Equal(tc.wantCreateCalls, reconciler.nodeReplacer.(*stubNodeReplacerWriter).createCalls) diff --git a/terraform-provider-constellation/docs/resources/cluster.md b/terraform-provider-constellation/docs/resources/cluster.md index eb4ed95e5..b2ba67286 100644 --- a/terraform-provider-constellation/docs/resources/cluster.md +++ b/terraform-provider-constellation/docs/resources/cluster.md @@ -69,7 +69,7 @@ resource "constellation_cluster" "azure_example" { See the [full list of CSPs](https://docs.edgeless.systems/constellation/overview/clouds) that Constellation supports. - `image` (Attributes) Constellation OS Image to use on the nodes. (see [below for nested schema](#nestedatt--image)) - `init_secret` (String) Secret used for initialization of the cluster. -- `kubernetes_version` (String) The Kubernetes version to use for the cluster. The supported versions are [v1.28.15 v1.29.13 v1.30.9]. +- `kubernetes_version` (String) The Kubernetes version to use for the cluster. The supported versions are [v1.29.13 v1.30.9 v1.31.1]. - `master_secret` (String) Hex-encoded 32-byte master secret for the cluster. - `master_secret_salt` (String) Hex-encoded 32-byte master secret salt for the cluster. - `measurement_salt` (String) Hex-encoded 32-byte measurement salt for the cluster. From 0ccaa000267727f0dc1264ad59fd0c5dc0e4229a Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 26 Feb 2025 14:34:41 +0100 Subject: [PATCH 124/311] deps: update ghcr.io/edgelesssys/gcp-guest-agent Docker tag to v20250225 (#3639) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- internal/versions/versions.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/versions/versions.go b/internal/versions/versions.go index b77861fed..725004e9a 100644 --- a/internal/versions/versions.go +++ b/internal/versions/versions.go @@ -169,7 +169,7 @@ const ( // GcpGuestImage image for GCP guest agent. // Check for new versions at https://github.com/GoogleCloudPlatform/guest-agent/releases and update in /.github/workflows/build-gcp-guest-agent.yml. - GcpGuestImage = "ghcr.io/edgelesssys/gcp-guest-agent:v20240816.0.0@sha256:a6f871346da12d95a1961cb247343ccaa708039f49999ce56d00e35f3f701b97" // renovate:container + GcpGuestImage = "ghcr.io/edgelesssys/gcp-guest-agent:v20250225.0.0@sha256:2b947decf2cbd5c0fdd0815010812231098936ccf5768733ff972b3056a15623" // renovate:container // NodeMaintenanceOperatorImage is the image for the node maintenance operator. NodeMaintenanceOperatorImage = "quay.io/medik8s/node-maintenance-operator:v0.17.0@sha256:bf1c5758b3d266dd6234422d156c67ffdd47f50f70ce17d5cef1de6065030337" // renovate:container // LogstashImage is the container image of logstash, used for log collection by debugd. From 9e1578aca174e4cb4c2add46c3b35c6479cdaaaf Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 26 Feb 2025 15:38:23 +0100 Subject: [PATCH 125/311] deps: update golangci/golangci-lint to v1.64.5 (#3666) * deps: update golangci/golangci-lint to v1.64.5 * deps: tidy all modules --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: edgelessci --- bazel/toolchains/ci_deps.bzl | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/bazel/toolchains/ci_deps.bzl b/bazel/toolchains/ci_deps.bzl index d4fe439ab..cf4848ced 100644 --- a/bazel/toolchains/ci_deps.bzl +++ b/bazel/toolchains/ci_deps.bzl @@ -223,45 +223,45 @@ def _golangci_lint_deps(): name = "com_github_golangci_golangci_lint_linux_amd64", build_file = "//bazel/toolchains:BUILD.golangci.bazel", urls = [ - "https://cdn.confidential.cloud/constellation/cas/sha256/01abb14a4df47b5ca585eff3c34b105023cba92ec34ff17212dbb83855581690", - "https://github.com/golangci/golangci-lint/releases/download/v1.63.4/golangci-lint-1.63.4-linux-amd64.tar.gz", + "https://cdn.confidential.cloud/constellation/cas/sha256/e6bd399a0479c5fd846dcf9f3990d20448b4f0d1e5027d82348eab9f80f7ac71", + "https://github.com/golangci/golangci-lint/releases/download/v1.64.5/golangci-lint-1.64.5-linux-amd64.tar.gz", ], - strip_prefix = "golangci-lint-1.63.4-linux-amd64", + strip_prefix = "golangci-lint-1.64.5-linux-amd64", type = "tar.gz", - sha256 = "01abb14a4df47b5ca585eff3c34b105023cba92ec34ff17212dbb83855581690", + sha256 = "e6bd399a0479c5fd846dcf9f3990d20448b4f0d1e5027d82348eab9f80f7ac71", ) http_archive( name = "com_github_golangci_golangci_lint_linux_arm64", build_file = "//bazel/toolchains:BUILD.golangci.bazel", urls = [ - "https://cdn.confidential.cloud/constellation/cas/sha256/51f0c79d19a92353e0465fb30a4901a0644a975d34e6f399ad2eebc0160bbb24", - "https://github.com/golangci/golangci-lint/releases/download/v1.63.4/golangci-lint-1.63.4-linux-arm64.tar.gz", + "https://cdn.confidential.cloud/constellation/cas/sha256/59df27f9a82e461b00597c5f6d96c6a46bfdb4b7cddd9341502641d3d874a65a", + "https://github.com/golangci/golangci-lint/releases/download/v1.64.5/golangci-lint-1.64.5-linux-arm64.tar.gz", ], - strip_prefix = "golangci-lint-1.63.4-linux-arm64", + strip_prefix = "golangci-lint-1.64.5-linux-arm64", type = "tar.gz", - sha256 = "51f0c79d19a92353e0465fb30a4901a0644a975d34e6f399ad2eebc0160bbb24", + sha256 = "59df27f9a82e461b00597c5f6d96c6a46bfdb4b7cddd9341502641d3d874a65a", ) http_archive( name = "com_github_golangci_golangci_lint_darwin_amd64", build_file = "//bazel/toolchains:BUILD.golangci.bazel", urls = [ - "https://cdn.confidential.cloud/constellation/cas/sha256/878d017cc360e4fb19510d39852c8189852e3c48e7ce0337577df73507c97d68", - "https://github.com/golangci/golangci-lint/releases/download/v1.63.4/golangci-lint-1.63.4-darwin-amd64.tar.gz", + "https://cdn.confidential.cloud/constellation/cas/sha256/7681c3e919491030558ef39b6ccaf49be1b3d19de611d30c02aec828dad822c1", + "https://github.com/golangci/golangci-lint/releases/download/v1.64.5/golangci-lint-1.64.5-darwin-amd64.tar.gz", ], - strip_prefix = "golangci-lint-1.63.4-darwin-amd64", + strip_prefix = "golangci-lint-1.64.5-darwin-amd64", type = "tar.gz", - sha256 = "878d017cc360e4fb19510d39852c8189852e3c48e7ce0337577df73507c97d68", + sha256 = "7681c3e919491030558ef39b6ccaf49be1b3d19de611d30c02aec828dad822c1", ) http_archive( name = "com_github_golangci_golangci_lint_darwin_arm64", build_file = "//bazel/toolchains:BUILD.golangci.bazel", urls = [ - "https://cdn.confidential.cloud/constellation/cas/sha256/a2b630c2ac8466393f0ccbbede4462387b6c190697a70bc2298c6d2123f21bbf", - "https://github.com/golangci/golangci-lint/releases/download/v1.63.4/golangci-lint-1.63.4-darwin-arm64.tar.gz", + "https://cdn.confidential.cloud/constellation/cas/sha256/8c4f11ef3a22d610dd5836a09c98e944b405624f932f20c7e72ae78abc552311", + "https://github.com/golangci/golangci-lint/releases/download/v1.64.5/golangci-lint-1.64.5-darwin-arm64.tar.gz", ], - strip_prefix = "golangci-lint-1.63.4-darwin-arm64", + strip_prefix = "golangci-lint-1.64.5-darwin-arm64", type = "tar.gz", - sha256 = "a2b630c2ac8466393f0ccbbede4462387b6c190697a70bc2298c6d2123f21bbf", + sha256 = "8c4f11ef3a22d610dd5836a09c98e944b405624f932f20c7e72ae78abc552311", ) def _buf_deps(): From 10e39c4d7c8284802eda7b4e1aad5d6f3818c8d3 Mon Sep 17 00:00:00 2001 From: edgelessci <71088502+edgelessci@users.noreply.github.com> Date: Fri, 28 Feb 2025 08:51:45 +0100 Subject: [PATCH 126/311] image: update measurements and image version (#3667) Co-authored-by: edgelessci --- .../measurements/measurements_enterprise.go | 16 ++++++++-------- internal/config/image_enterprise.go | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/internal/attestation/measurements/measurements_enterprise.go b/internal/attestation/measurements/measurements_enterprise.go index a0dcf3c09..55be86612 100644 --- a/internal/attestation/measurements/measurements_enterprise.go +++ b/internal/attestation/measurements/measurements_enterprise.go @@ -19,14 +19,14 @@ package measurements // revive:disable:var-naming var ( - aws_AWSNitroTPM = M{0: {Expected: []byte{0x73, 0x7f, 0x76, 0x7a, 0x12, 0xf5, 0x4e, 0x70, 0xee, 0xcb, 0xc8, 0x68, 0x40, 0x11, 0x32, 0x3a, 0xe2, 0xfe, 0x2d, 0xd9, 0xf9, 0x07, 0x85, 0x57, 0x79, 0x69, 0xd7, 0xa2, 0x01, 0x3e, 0x8c, 0x12}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xc7, 0xe7, 0x05, 0xbc, 0x19, 0x20, 0xc0, 0x4e, 0xd7, 0xda, 0x18, 0x45, 0x4c, 0x28, 0x6c, 0xa7, 0x32, 0x58, 0x37, 0x6a, 0x09, 0xf2, 0x4d, 0xa1, 0x4d, 0x01, 0xbf, 0xb8, 0x53, 0xfe, 0x14, 0xf1}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x08, 0x91, 0xb1, 0x6b, 0x69, 0x55, 0x40, 0xc9, 0x85, 0x64, 0x35, 0xc0, 0x58, 0x48, 0x38, 0x02, 0x8f, 0x39, 0x0e, 0xcd, 0xa9, 0xd6, 0xf3, 0x91, 0x65, 0x68, 0xbc, 0xce, 0xff, 0x0d, 0x86, 0xa3}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x8b, 0xc0, 0xa8, 0xce, 0x8f, 0xff, 0xde, 0x72, 0x49, 0x7a, 0x4d, 0x53, 0x3b, 0xf0, 0xa9, 0x6c, 0x66, 0xd9, 0x7b, 0x88, 0x5c, 0x87, 0xf8, 0x65, 0xad, 0x73, 0x11, 0x97, 0xec, 0x17, 0x08, 0x63}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - aws_AWSSEVSNP = M{0: {Expected: []byte{0xd6, 0xdf, 0x85, 0x53, 0x58, 0xf5, 0xb1, 0x0f, 0x06, 0xf0, 0xfa, 0xb3, 0xf4, 0x08, 0xad, 0x26, 0xcd, 0x16, 0x5a, 0x29, 0x49, 0xba, 0xd6, 0x9e, 0x2c, 0xc7, 0x56, 0x92, 0x52, 0x9e, 0x66, 0x2a}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x9a, 0xa5, 0x92, 0xeb, 0x9f, 0xb3, 0xd1, 0x7b, 0x73, 0x55, 0xef, 0x3d, 0x72, 0x50, 0xee, 0x20, 0xc4, 0xa7, 0x62, 0x33, 0x99, 0xee, 0x19, 0x8a, 0xec, 0x2b, 0x18, 0x54, 0xee, 0x26, 0x90, 0x66}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x9c, 0x35, 0x4c, 0x42, 0x58, 0xc8, 0xb2, 0xa1, 0x57, 0xc0, 0x93, 0x5b, 0xe1, 0xb1, 0xf6, 0xc6, 0x96, 0xb0, 0xe8, 0x1a, 0x1b, 0x60, 0xb0, 0x44, 0xe1, 0x09, 0xf4, 0x24, 0x99, 0x7b, 0xf9, 0xc5}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x43, 0xbf, 0xf5, 0x21, 0xdc, 0xd8, 0x3b, 0x86, 0x63, 0xde, 0x8a, 0x4c, 0xe6, 0x9d, 0x98, 0x77, 0x47, 0xb8, 0xae, 0x5f, 0x11, 0xb8, 0xc2, 0x3e, 0xd1, 0x17, 0x48, 0xad, 0xcc, 0x87, 0xfb, 0xa0}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - azure_AzureSEVSNP = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xec, 0xf4, 0xf6, 0xd6, 0xb7, 0x0b, 0x06, 0x22, 0x64, 0xce, 0x94, 0xcd, 0xd9, 0x7d, 0xb5, 0x00, 0x01, 0xe9, 0x3a, 0x2b, 0x0b, 0x37, 0x2b, 0x8c, 0x73, 0x51, 0x36, 0xe9, 0xaa, 0x0f, 0xaa, 0x8a}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x2f, 0x9f, 0x91, 0xb5, 0x42, 0x8f, 0xd3, 0x0a, 0x02, 0x51, 0x70, 0x65, 0xfe, 0x4e, 0x61, 0xbb, 0xb0, 0x7f, 0x77, 0x38, 0x80, 0xe6, 0xea, 0x73, 0x19, 0x3b, 0xa7, 0x54, 0x6b, 0x7e, 0x89, 0x7d}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x4a, 0x8c, 0x53, 0xc7, 0x76, 0xaa, 0x31, 0x54, 0x5f, 0xdb, 0xe1, 0xe1, 0x12, 0xf9, 0x84, 0xb6, 0x02, 0x7c, 0xf3, 0x00, 0x6d, 0x1e, 0xdf, 0x38, 0xb6, 0x82, 0x17, 0xd9, 0x72, 0x3e, 0x39, 0xc3}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - azure_AzureTDX = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x5a, 0x01, 0x5d, 0x2a, 0x28, 0xba, 0x3f, 0x7f, 0xcc, 0x12, 0x9d, 0x6e, 0xc4, 0x56, 0x67, 0x81, 0xc6, 0xc2, 0x03, 0x32, 0x46, 0x6d, 0x89, 0xa3, 0x91, 0x54, 0xe2, 0x72, 0x1b, 0xf2, 0x66, 0x16}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xbc, 0x60, 0x8d, 0x75, 0x5b, 0x77, 0xdf, 0xd1, 0xf0, 0xf4, 0x17, 0x98, 0xfc, 0x52, 0x61, 0x8a, 0x2b, 0x38, 0x14, 0xba, 0x40, 0x8a, 0x36, 0xa4, 0x70, 0x58, 0x59, 0xc2, 0x36, 0x98, 0x33, 0xa5}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x21, 0x58, 0xaa, 0x4f, 0x12, 0x71, 0xe1, 0xbf, 0x30, 0xd0, 0xd3, 0x83, 0x40, 0x3c, 0xb3, 0xf7, 0xa9, 0x61, 0xe4, 0x25, 0x4f, 0x50, 0xbd, 0x62, 0x74, 0x64, 0x22, 0x1c, 0x35, 0xe3, 0x44, 0x08}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + aws_AWSNitroTPM = M{0: {Expected: []byte{0x73, 0x7f, 0x76, 0x7a, 0x12, 0xf5, 0x4e, 0x70, 0xee, 0xcb, 0xc8, 0x68, 0x40, 0x11, 0x32, 0x3a, 0xe2, 0xfe, 0x2d, 0xd9, 0xf9, 0x07, 0x85, 0x57, 0x79, 0x69, 0xd7, 0xa2, 0x01, 0x3e, 0x8c, 0x12}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xe6, 0x57, 0xb5, 0xc4, 0x65, 0xdd, 0x47, 0xa3, 0x63, 0x9e, 0x66, 0xc4, 0xb4, 0xc4, 0xd5, 0xb7, 0x7d, 0xc3, 0xc5, 0x89, 0x14, 0x32, 0xf1, 0xac, 0xb5, 0xfb, 0xff, 0xd9, 0xa0, 0xa5, 0x07, 0xfd}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x7e, 0x98, 0x51, 0x72, 0xf1, 0xbc, 0x69, 0x77, 0x2a, 0x52, 0x85, 0xfc, 0x0b, 0x7c, 0x21, 0xed, 0x98, 0x76, 0x1e, 0x12, 0x63, 0x6f, 0xf0, 0x2c, 0x1d, 0x9e, 0xa7, 0x68, 0xf7, 0x5a, 0x2d, 0xbd}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x6e, 0x5b, 0x78, 0xb7, 0x55, 0x87, 0x31, 0x3a, 0x0e, 0x6d, 0x87, 0xef, 0x76, 0x37, 0x96, 0xf3, 0x13, 0xa3, 0x3a, 0xbb, 0xb1, 0xdb, 0x34, 0x6c, 0x80, 0x93, 0xd4, 0x79, 0xc6, 0x94, 0x8f, 0xdd}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + aws_AWSSEVSNP = M{0: {Expected: []byte{0xd6, 0xdf, 0x85, 0x53, 0x58, 0xf5, 0xb1, 0x0f, 0x06, 0xf0, 0xfa, 0xb3, 0xf4, 0x08, 0xad, 0x26, 0xcd, 0x16, 0x5a, 0x29, 0x49, 0xba, 0xd6, 0x9e, 0x2c, 0xc7, 0x56, 0x92, 0x52, 0x9e, 0x66, 0x2a}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xb7, 0x85, 0xa5, 0x66, 0xb6, 0x38, 0x02, 0xee, 0xd1, 0x5a, 0xe3, 0x8c, 0x44, 0x01, 0x05, 0x9e, 0xb8, 0xfe, 0xc2, 0xbd, 0xe3, 0xbe, 0xf8, 0xb3, 0x7a, 0x92, 0xe3, 0x16, 0xee, 0x95, 0x46, 0x4e}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xaa, 0xf8, 0x05, 0x8e, 0x8a, 0xfa, 0x7e, 0x02, 0x4a, 0x0e, 0x68, 0xa0, 0x4f, 0x83, 0x6c, 0xc4, 0xfa, 0x80, 0x7a, 0xc0, 0xcb, 0x3d, 0x59, 0x4c, 0xb8, 0xf0, 0x8a, 0x40, 0x45, 0xb7, 0xca, 0x79}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xe6, 0x6a, 0x2e, 0x6f, 0x47, 0x43, 0x15, 0x86, 0xd3, 0xa6, 0x31, 0xed, 0x43, 0x93, 0x11, 0xf8, 0xad, 0x83, 0x9b, 0x44, 0x27, 0xdb, 0xfa, 0x42, 0x11, 0xe0, 0x3f, 0xcd, 0xef, 0x08, 0xb8, 0x44}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + azure_AzureSEVSNP = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xd1, 0xba, 0xbb, 0x9e, 0x5d, 0x80, 0xa7, 0xf6, 0x8e, 0xf4, 0xa8, 0x3f, 0xd5, 0xf6, 0x26, 0xcb, 0x16, 0xc7, 0x7b, 0xa2, 0xc4, 0x23, 0x85, 0x4f, 0xe2, 0xca, 0xc5, 0xc6, 0x42, 0x01, 0x7d, 0x53}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xf7, 0x95, 0xe4, 0xe8, 0xad, 0x5a, 0xdb, 0x4d, 0x91, 0x39, 0x62, 0x9c, 0x81, 0x24, 0x8e, 0x08, 0xa9, 0xe0, 0x34, 0xa1, 0xb3, 0x5c, 0xe6, 0x08, 0x2a, 0x9a, 0x4a, 0xce, 0x65, 0xb5, 0xf5, 0xd3}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x5b, 0x3a, 0xca, 0x46, 0x7b, 0xb9, 0x39, 0xe6, 0x65, 0x2b, 0x9f, 0x1b, 0x61, 0xae, 0x1e, 0x60, 0x95, 0x20, 0x77, 0x75, 0xe6, 0x68, 0xfc, 0xba, 0xc2, 0xa1, 0x79, 0xdb, 0xb6, 0x01, 0x2e, 0x51}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + azure_AzureTDX = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xfc, 0x61, 0xe4, 0xb1, 0xb5, 0xb8, 0xa1, 0x10, 0x8f, 0xe9, 0xaa, 0xbe, 0xe6, 0xa6, 0xc7, 0x93, 0xbb, 0x81, 0x7e, 0x98, 0x33, 0x6a, 0x2a, 0xa9, 0x10, 0x40, 0x78, 0x2f, 0x74, 0xbe, 0x5e, 0x1c}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xc3, 0x9b, 0xb8, 0x99, 0x67, 0xb3, 0xb9, 0x80, 0x01, 0xef, 0xe4, 0x01, 0x83, 0x21, 0x4e, 0x98, 0x92, 0x7a, 0x75, 0x78, 0x67, 0xa7, 0x2f, 0x9f, 0x5e, 0x4f, 0x72, 0xfd, 0xcd, 0x95, 0xf0, 0x9f}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x33, 0xf1, 0x4a, 0xd9, 0xf1, 0x8c, 0x72, 0x0f, 0x32, 0x39, 0x12, 0xa3, 0x87, 0x40, 0x5f, 0x8e, 0xb1, 0xc3, 0x39, 0x38, 0x5d, 0xb4, 0x32, 0x55, 0x18, 0x8a, 0x46, 0xc6, 0xc3, 0xaa, 0x46, 0x31}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} azure_AzureTrustedLaunch M - gcp_GCPSEVES = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xda, 0xea, 0xe7, 0x2b, 0x9e, 0x7f, 0x02, 0xa8, 0x80, 0x5d, 0xea, 0x9f, 0xa6, 0xaf, 0x96, 0xfc, 0x71, 0x42, 0x1f, 0x27, 0xe8, 0x16, 0x61, 0x25, 0x58, 0xc3, 0xa0, 0x60, 0x7c, 0x91, 0xa0, 0x86}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x66, 0x74, 0x91, 0xf8, 0x78, 0x38, 0x95, 0xe7, 0x7a, 0xc9, 0xba, 0x8b, 0x21, 0x08, 0x66, 0xfc, 0x7c, 0x71, 0xab, 0xcc, 0xe6, 0xb8, 0xde, 0xbb, 0x20, 0x75, 0xff, 0x60, 0xd0, 0x4d, 0x15, 0x52}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x93, 0x8a, 0xc5, 0x5a, 0x4c, 0x0d, 0xd2, 0x56, 0xa9, 0x58, 0xe6, 0x2e, 0x74, 0x25, 0x84, 0xb1, 0x2e, 0xc0, 0x9f, 0x98, 0xfb, 0x7c, 0xa5, 0x5d, 0xa1, 0x61, 0x26, 0x8d, 0x8a, 0x72, 0x71, 0xf2}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - gcp_GCPSEVSNP = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xa0, 0xa9, 0xbd, 0x09, 0x88, 0xb8, 0x56, 0x9b, 0x69, 0xa3, 0xdc, 0xb0, 0x70, 0x65, 0xd5, 0x32, 0x0c, 0xfb, 0xdd, 0x68, 0x44, 0xce, 0xd5, 0x20, 0x62, 0xee, 0xea, 0xbb, 0xba, 0x76, 0x26, 0x20}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x83, 0x02, 0xdc, 0xe5, 0xb6, 0x4d, 0x30, 0x08, 0x6a, 0x30, 0x7c, 0xf3, 0x72, 0x85, 0xdb, 0xba, 0x47, 0xed, 0xa4, 0xce, 0x0d, 0x81, 0x3e, 0x47, 0x7c, 0xc1, 0x78, 0xd0, 0xfa, 0x51, 0xec, 0x8e}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x77, 0xbd, 0xf9, 0x6b, 0x29, 0xd8, 0x89, 0xbf, 0x8c, 0xcc, 0x43, 0x3e, 0x28, 0xb0, 0x39, 0xee, 0x71, 0x8f, 0x68, 0xc2, 0x99, 0x4f, 0xea, 0x32, 0xdf, 0x0b, 0x8c, 0xda, 0x94, 0x23, 0x75, 0xf3}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - openstack_QEMUVTPM = M{4: {Expected: []byte{0x7a, 0xd0, 0x30, 0x57, 0xd0, 0x04, 0xe2, 0xd1, 0x50, 0x5b, 0x32, 0x26, 0xa6, 0xaa, 0x26, 0x14, 0x9a, 0x21, 0x3c, 0x1e, 0x66, 0xe7, 0x68, 0xae, 0x41, 0x27, 0x25, 0x05, 0x9e, 0xf0, 0xca, 0xa6}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x05, 0x5b, 0xba, 0xf9, 0x11, 0x42, 0xeb, 0xa8, 0xf7, 0x96, 0x0c, 0xd7, 0x9a, 0xb4, 0x07, 0xcb, 0x3c, 0x84, 0x64, 0xa0, 0x3e, 0x3c, 0x94, 0xde, 0xc9, 0x9e, 0x6e, 0x64, 0x71, 0x9f, 0xf6, 0x37}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xfc, 0x5a, 0xb3, 0xaf, 0x06, 0xe4, 0xef, 0x61, 0x2c, 0xb5, 0x62, 0x8d, 0xde, 0x86, 0xde, 0x24, 0x1a, 0x33, 0x20, 0x8f, 0xab, 0x0b, 0xb6, 0x37, 0x5c, 0x20, 0xea, 0x96, 0xec, 0x12, 0x17, 0xe1}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + gcp_GCPSEVES = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x89, 0xed, 0x0b, 0x25, 0x6c, 0x4d, 0xab, 0x8a, 0xf7, 0x12, 0xd2, 0xc0, 0x23, 0x81, 0x20, 0x31, 0x11, 0x6b, 0x23, 0x45, 0x87, 0x73, 0x2e, 0xeb, 0xe8, 0x6a, 0x9e, 0x80, 0x0d, 0xb0, 0xd8, 0x07}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xef, 0x08, 0xf9, 0x76, 0xad, 0x64, 0xd0, 0x3b, 0x9d, 0x59, 0x91, 0xe0, 0xfd, 0x60, 0xfe, 0x8b, 0x18, 0xf6, 0x66, 0xc8, 0xfc, 0xe5, 0x31, 0x89, 0xee, 0x75, 0x9f, 0x8f, 0xb5, 0x03, 0x06, 0xbf}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x0b, 0x8c, 0x39, 0xc4, 0xa8, 0xcc, 0x4e, 0xa8, 0xdb, 0x27, 0xba, 0x30, 0x3d, 0xa2, 0x7d, 0x0d, 0x1e, 0xfc, 0xa0, 0xe4, 0xf3, 0xcb, 0x85, 0x33, 0x13, 0x5a, 0xba, 0xf6, 0x2b, 0x31, 0x38, 0x84}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + gcp_GCPSEVSNP = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x26, 0xdf, 0x9b, 0xb7, 0xaa, 0xb4, 0x59, 0xc0, 0x41, 0xe4, 0x89, 0x58, 0x6e, 0x6f, 0x19, 0x6e, 0xfe, 0x13, 0xa9, 0x49, 0xc0, 0xe9, 0xaa, 0x3d, 0x18, 0x95, 0x03, 0x36, 0xad, 0xe1, 0xb5, 0x74}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xae, 0x61, 0x14, 0x8a, 0xee, 0x9b, 0x36, 0x29, 0xe2, 0x67, 0xcf, 0x7d, 0xcc, 0x56, 0x4f, 0x3b, 0x8a, 0x1b, 0x17, 0xc6, 0x48, 0xc5, 0x99, 0x7c, 0x53, 0x06, 0x92, 0xc2, 0x4a, 0xf2, 0x4c, 0x45}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xf5, 0xf4, 0x63, 0x93, 0xab, 0x90, 0x9f, 0x92, 0x34, 0x79, 0x47, 0x2a, 0x0d, 0x44, 0xe3, 0xb9, 0xeb, 0xa1, 0xb2, 0x6f, 0x0e, 0x4c, 0xef, 0xf5, 0xee, 0xa2, 0x60, 0x34, 0x7f, 0xbc, 0xe9, 0x31}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + openstack_QEMUVTPM = M{4: {Expected: []byte{0x7b, 0x26, 0xa1, 0x59, 0xbb, 0x03, 0x08, 0x24, 0x2f, 0x11, 0x9c, 0x0d, 0x72, 0x1c, 0x74, 0x3a, 0x90, 0x1f, 0x9b, 0x27, 0x40, 0x3c, 0xf5, 0x05, 0x02, 0x9c, 0x1d, 0xae, 0xf7, 0x63, 0x3f, 0x2b}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x21, 0x19, 0x7f, 0x49, 0x09, 0xcf, 0x24, 0x0a, 0xae, 0x88, 0xc2, 0x9c, 0xdc, 0x00, 0x8d, 0xc1, 0xcf, 0x14, 0xa4, 0x4d, 0x3a, 0x62, 0x8d, 0x12, 0x58, 0xd3, 0x59, 0x56, 0x06, 0x6d, 0xb1, 0xa9}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xaf, 0xe6, 0x91, 0x4f, 0x30, 0xaf, 0x82, 0x04, 0x4d, 0xcb, 0x8b, 0x86, 0x57, 0x77, 0xce, 0x06, 0xe9, 0x65, 0x62, 0x4d, 0xe0, 0x68, 0xbf, 0x6f, 0x07, 0xe9, 0x35, 0x2c, 0x6b, 0xd5, 0x2a, 0x87}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} qemu_QEMUTDX M - qemu_QEMUVTPM = M{4: {Expected: []byte{0xaa, 0x94, 0xf1, 0x82, 0xa9, 0xe4, 0x9a, 0xde, 0x8c, 0x77, 0xb6, 0xfd, 0x06, 0x5d, 0xa9, 0x5e, 0xab, 0xbb, 0x2a, 0xe7, 0xb5, 0xac, 0x93, 0xd4, 0x37, 0x71, 0xf0, 0x56, 0x67, 0xf9, 0x5e, 0x74}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xb5, 0x0e, 0x14, 0x35, 0xdc, 0xcc, 0x3d, 0xa3, 0x34, 0x53, 0x9d, 0x9d, 0x16, 0xcc, 0x8e, 0x0f, 0x92, 0x04, 0x14, 0xe6, 0x48, 0x57, 0xe5, 0xcf, 0x39, 0x5d, 0x13, 0xf7, 0xf5, 0xc3, 0x1d, 0xdb}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xed, 0x03, 0x8b, 0x9e, 0x2b, 0x5c, 0x16, 0xdd, 0xef, 0x77, 0x43, 0x79, 0xa4, 0xf8, 0xc5, 0x33, 0x8f, 0x23, 0xcc, 0x46, 0xa0, 0xbd, 0x83, 0x1b, 0x31, 0x03, 0xa5, 0x36, 0xa3, 0x7c, 0xd3, 0x6f}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + qemu_QEMUVTPM = M{4: {Expected: []byte{0x19, 0x2e, 0xaf, 0x37, 0xed, 0xd0, 0x9e, 0x93, 0x58, 0x0b, 0x3c, 0x89, 0x9c, 0x35, 0xc2, 0xd0, 0x04, 0xc3, 0x98, 0x33, 0x94, 0x33, 0x86, 0x42, 0x50, 0x6b, 0x1d, 0xd4, 0x60, 0xb6, 0xcc, 0xfe}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xb4, 0x76, 0x8b, 0x47, 0x27, 0x61, 0x7c, 0xd6, 0x10, 0x72, 0x99, 0x5d, 0x43, 0xac, 0xf8, 0x43, 0xf1, 0xec, 0x80, 0x50, 0x31, 0xdb, 0xd8, 0xea, 0xdb, 0xc9, 0xc4, 0xb4, 0xb8, 0x93, 0xf9, 0xbe}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x9b, 0x21, 0xc9, 0x91, 0x9b, 0x6b, 0x03, 0xdf, 0xb7, 0x03, 0x84, 0xbb, 0x2d, 0x7b, 0x24, 0x48, 0x63, 0x19, 0x29, 0xcc, 0xa0, 0x9f, 0x29, 0xe4, 0x6e, 0x7e, 0xda, 0x05, 0x0b, 0x6a, 0x14, 0x68}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} ) diff --git a/internal/config/image_enterprise.go b/internal/config/image_enterprise.go index 25fe5a092..ecd962851 100644 --- a/internal/config/image_enterprise.go +++ b/internal/config/image_enterprise.go @@ -10,5 +10,5 @@ package config const ( // defaultImage is the default image to use. - defaultImage = "ref/main/stream/nightly/v2.21.0-pre.0.20250224085857-d97e60fea501" + defaultImage = "ref/main/stream/nightly/v2.21.0-pre.0.20250226153823-9e1578aca174" ) From e95c60c3fc0444d5e4121ad5bb5c91d2e908ee3e Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 28 Feb 2025 09:38:00 +0100 Subject: [PATCH 127/311] deps: update Kubernetes versions (#3660) * deps: update Kubernetes versions * deps: tidy all modules --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: edgelessci --- docs/docs/architecture/versions.md | 6 +- internal/versions/versions.go | 66 +++++++++---------- .../docs/resources/cluster.md | 2 +- 3 files changed, 37 insertions(+), 37 deletions(-) diff --git a/docs/docs/architecture/versions.md b/docs/docs/architecture/versions.md index efb97b932..9acc866ed 100644 --- a/docs/docs/architecture/versions.md +++ b/docs/docs/architecture/versions.md @@ -16,6 +16,6 @@ Subsequent Constellation releases drop support for the oldest (and deprecated) K The following Kubernetes versions are currently supported: -* v1.29.13 -* v1.30.9 -* v1.31.1 +* v1.29.14 +* v1.30.10 +* v1.31.6 diff --git a/internal/versions/versions.go b/internal/versions/versions.go index 725004e9a..931fb6f65 100644 --- a/internal/versions/versions.go +++ b/internal/versions/versions.go @@ -181,11 +181,11 @@ const ( // currently supported versions. //nolint:revive - V1_29 ValidK8sVersion = "v1.29.13" // renovate:kubernetes-release + V1_29 ValidK8sVersion = "v1.29.14" // renovate:kubernetes-release //nolint:revive - V1_30 ValidK8sVersion = "v1.30.9" // renovate:kubernetes-release + V1_30 ValidK8sVersion = "v1.30.10" // renovate:kubernetes-release //nolint:revive - V1_31 ValidK8sVersion = "v1.31.1" // renovate:kubernetes-release + V1_31 ValidK8sVersion = "v1.31.6" // renovate:kubernetes-release // Default k8s version deployed by Constellation. Default ValidK8sVersion = V1_30 @@ -198,7 +198,7 @@ const ( // VersionConfigs holds download URLs for all required kubernetes components for every supported version. var VersionConfigs = map[ValidK8sVersion]KubernetesVersion{ V1_29: { - ClusterVersion: "v1.29.13", // renovate:kubernetes-release + ClusterVersion: "v1.29.14", // renovate:kubernetes-release KubernetesComponents: components.Components{ { Url: "https://github.com/containernetworking/plugins/releases/download/v1.6.2/cni-plugins-linux-amd64-v1.6.2.tgz", // renovate:cni-plugins-release @@ -213,33 +213,33 @@ var VersionConfigs = map[ValidK8sVersion]KubernetesVersion{ Extract: true, }, { - Url: "https://dl.k8s.io/v1.29.13/bin/linux/amd64/kubelet", // renovate:kubernetes-release - Hash: "sha256:ed89d8cdf60b14aae2aa665f8c1e3fc3e868ccc511c8ef5916f55c8cbd5ec772", + Url: "https://dl.k8s.io/v1.29.14/bin/linux/amd64/kubelet", // renovate:kubernetes-release + Hash: "sha256:b165ecf4e9a5f4f396d8a8a3563257d552946285d45dac0ccbe8b73435554dc5", InstallPath: constants.KubeletPath, Extract: false, }, { - Url: "https://dl.k8s.io/v1.29.13/bin/linux/amd64/kubeadm", // renovate:kubernetes-release - Hash: "sha256:584d4ded69ea6e660d7b205c9c924f37cdfca24ad858cf05aeca626048e25f46", + Url: "https://dl.k8s.io/v1.29.14/bin/linux/amd64/kubeadm", // renovate:kubernetes-release + Hash: "sha256:4f72a1148b786a766cf695ead7cffa41859661286cd4e6e6a49da0838feae840", InstallPath: constants.KubeadmPath, Extract: false, }, { - Url: "https://dl.k8s.io/v1.29.13/bin/linux/amd64/kubectl", // renovate:kubernetes-release - Hash: "sha256:9f4cba9b3e12a3fd7fa99dee651d7293281333469852a8e755a1210d5b128b8d", + Url: "https://dl.k8s.io/v1.29.14/bin/linux/amd64/kubectl", // renovate:kubernetes-release + Hash: "sha256:a4902c8a454a3678d589b51d95d810ec84791c03ed6b5779969df559c9c0357e", InstallPath: constants.KubectlPath, Extract: false, }, { - Url: "data:application/json;base64,W3sib3AiOiJyZXBsYWNlIiwicGF0aCI6Ii9zcGVjL2NvbnRhaW5lcnMvMC9pbWFnZSIsInZhbHVlIjoicmVnaXN0cnkuazhzLmlvL2t1YmUtYXBpc2VydmVyOnYxLjI5LjEzQHNoYTI1NjplNWM0Mjg2MTA0NWQwNjE1NzY5ZmFkOGE0ZTMyZTQ3NmZjNWU1OTAyMDE1N2I2MGNlZDFiYjdhNjlkNGE1Y2U5In1d", + Url: "data:application/json;base64,W3sib3AiOiJyZXBsYWNlIiwicGF0aCI6Ii9zcGVjL2NvbnRhaW5lcnMvMC9pbWFnZSIsInZhbHVlIjoicmVnaXN0cnkuazhzLmlvL2t1YmUtYXBpc2VydmVyOnYxLjI5LjE0QHNoYTI1NjoxNDMyYjQ1NmIyMTAxNWM5OTc4M2QyYjNhMjAxMDg3M2ZiNjdiZjk0NmM4OWQ0NWU2ZDM1NjQ0OWUwODNkY2ZiIn1d", InstallPath: patchFilePath("kube-apiserver"), }, { - Url: "data:application/json;base64,W3sib3AiOiJyZXBsYWNlIiwicGF0aCI6Ii9zcGVjL2NvbnRhaW5lcnMvMC9pbWFnZSIsInZhbHVlIjoicmVnaXN0cnkuazhzLmlvL2t1YmUtY29udHJvbGxlci1tYW5hZ2VyOnYxLjI5LjEzQHNoYTI1NjpmYzI4MzgzOTk3NTI3NDBiZGQzNmM3ZTkyODdkNDQwNmZlZmY2YmVmMmJhZmYzOTMxNzRiMzRjY2Q0NDdiNzgwIn1d", + Url: "data:application/json;base64,W3sib3AiOiJyZXBsYWNlIiwicGF0aCI6Ii9zcGVjL2NvbnRhaW5lcnMvMC9pbWFnZSIsInZhbHVlIjoicmVnaXN0cnkuazhzLmlvL2t1YmUtY29udHJvbGxlci1tYW5hZ2VyOnYxLjI5LjE0QHNoYTI1NjoyM2NjZGI1ZTdlMmMzMTdmNTcyNzY1MmVmN2U2NGVmOTFlYWQzNGEzYzczZGZhOWMzYWIyM2IzYTUwMjhlMjgwIn1d", InstallPath: patchFilePath("kube-controller-manager"), }, { - Url: "data:application/json;base64,W3sib3AiOiJyZXBsYWNlIiwicGF0aCI6Ii9zcGVjL2NvbnRhaW5lcnMvMC9pbWFnZSIsInZhbHVlIjoicmVnaXN0cnkuazhzLmlvL2t1YmUtc2NoZWR1bGVyOnYxLjI5LjEzQHNoYTI1NjphNGYxNjQ5YTUyNDljMDc4NDk2M2Q4NTY0NGIxZTYxNDU0OGYwMzJkYTliNGZiMDBhNzYwYmFjMDI4MThjZTRmIn1d", + Url: "data:application/json;base64,W3sib3AiOiJyZXBsYWNlIiwicGF0aCI6Ii9zcGVjL2NvbnRhaW5lcnMvMC9pbWFnZSIsInZhbHVlIjoicmVnaXN0cnkuazhzLmlvL2t1YmUtc2NoZWR1bGVyOnYxLjI5LjE0QHNoYTI1NjpjZjAwNDZiZTNlYjZjNDgzMWI2YjJhMWIzZTI0ZjE4ZTI3Nzc4NjYzODkwMTQ0NDc4ZjExYTgyNjIyYjQ4YzQ4In1d", InstallPath: patchFilePath("kube-scheduler"), }, { @@ -265,7 +265,7 @@ var VersionConfigs = map[ValidK8sVersion]KubernetesVersion{ ClusterAutoscalerImage: "registry.k8s.io/autoscaling/cluster-autoscaler:v1.29.5@sha256:76865740be7c965b35ee1524931bb4abfe4c27b5bfad280e84068cd6653ee7bb", // renovate:container }, V1_30: { - ClusterVersion: "v1.30.9", // renovate:kubernetes-release + ClusterVersion: "v1.30.10", // renovate:kubernetes-release KubernetesComponents: components.Components{ { Url: "https://github.com/containernetworking/plugins/releases/download/v1.6.2/cni-plugins-linux-amd64-v1.6.2.tgz", // renovate:cni-plugins-release @@ -280,33 +280,33 @@ var VersionConfigs = map[ValidK8sVersion]KubernetesVersion{ Extract: true, }, { - Url: "https://dl.k8s.io/v1.30.9/bin/linux/amd64/kubelet", // renovate:kubernetes-release - Hash: "sha256:59c61c8018686bb58be96481f8aa3abe42bba9f791c6dd3c9d4a2ed697187e5b", + Url: "https://dl.k8s.io/v1.30.10/bin/linux/amd64/kubelet", // renovate:kubernetes-release + Hash: "sha256:0c7aa1db3fa339aa13af0f825d25a76b3c74f785d4fcd49d6a0bc5a96f0971f0", InstallPath: constants.KubeletPath, Extract: false, }, { - Url: "https://dl.k8s.io/v1.30.9/bin/linux/amd64/kubeadm", // renovate:kubernetes-release - Hash: "sha256:f763a8f5616cf1da80d88555b3654ab6aacd62dc62e6ba7dd2d540c34eea24c0", + Url: "https://dl.k8s.io/v1.30.10/bin/linux/amd64/kubeadm", // renovate:kubernetes-release + Hash: "sha256:177254194194975df68fd69a3647c86260a6c635bee42f516d3cecc047c4bc7c", InstallPath: constants.KubeadmPath, Extract: false, }, { - Url: "https://dl.k8s.io/v1.30.9/bin/linux/amd64/kubectl", // renovate:kubernetes-release - Hash: "sha256:d77041f285d9237c4aa451370c3ec6e5c042007dbb55c894f0a179b1d149bf32", + Url: "https://dl.k8s.io/v1.30.10/bin/linux/amd64/kubectl", // renovate:kubernetes-release + Hash: "sha256:bc74dbeefd4b9d53f03016f6778f3ffc9a72ef4ca7b7c80fd5dc1a41d52dcab7", InstallPath: constants.KubectlPath, Extract: false, }, { - Url: "data:application/json;base64,W3sib3AiOiJyZXBsYWNlIiwicGF0aCI6Ii9zcGVjL2NvbnRhaW5lcnMvMC9pbWFnZSIsInZhbHVlIjoicmVnaXN0cnkuazhzLmlvL2t1YmUtYXBpc2VydmVyOnYxLjMwLjlAc2hhMjU2OjU0MGRlOGY4MTBhYzk2M2I4ZWQ5M2Y3MzkzYTg3NDZkNjhlN2U4YTJjNzllYTU4ZmY0MDlhYzViOWNhNmE5ZmMifV0=", + Url: "data:application/json;base64,W3sib3AiOiJyZXBsYWNlIiwicGF0aCI6Ii9zcGVjL2NvbnRhaW5lcnMvMC9pbWFnZSIsInZhbHVlIjoicmVnaXN0cnkuazhzLmlvL2t1YmUtYXBpc2VydmVyOnYxLjMwLjEwQHNoYTI1Njo2M2IyYjRiNGU5YjVkY2I1YjFiNmNlYzlkNWY1ZjUzODc5MWE0MGNkOGNiMjczZWY1MzBlNmQ2NTM1YWEwYjQzIn1d", InstallPath: patchFilePath("kube-apiserver"), }, { - Url: "data:application/json;base64,W3sib3AiOiJyZXBsYWNlIiwicGF0aCI6Ii9zcGVjL2NvbnRhaW5lcnMvMC9pbWFnZSIsInZhbHVlIjoicmVnaXN0cnkuazhzLmlvL2t1YmUtY29udHJvbGxlci1tYW5hZ2VyOnYxLjMwLjlAc2hhMjU2OjYzNTA2OTNjMDQ5NTZiMTNkYjI1MTllMDFjYTEyYTBiYmU1ODQ2NmU5ZjEyZWY4NjE3ZjE0MjlkYTYwODFmNDMifV0=", + Url: "data:application/json;base64,W3sib3AiOiJyZXBsYWNlIiwicGF0aCI6Ii9zcGVjL2NvbnRhaW5lcnMvMC9pbWFnZSIsInZhbHVlIjoicmVnaXN0cnkuazhzLmlvL2t1YmUtY29udHJvbGxlci1tYW5hZ2VyOnYxLjMwLjEwQHNoYTI1Njo5OWIzMzM2MzQzZWE0OGJlMjRmMWU2NDc3NDgyNWU5ZjhkNTE3MGJkMmVkNDgyZmYzMzY1NDhlYjgyNGY1ZjU4In1d", InstallPath: patchFilePath("kube-controller-manager"), }, { - Url: "data:application/json;base64,W3sib3AiOiJyZXBsYWNlIiwicGF0aCI6Ii9zcGVjL2NvbnRhaW5lcnMvMC9pbWFnZSIsInZhbHVlIjoicmVnaXN0cnkuazhzLmlvL2t1YmUtc2NoZWR1bGVyOnYxLjMwLjlAc2hhMjU2OjE1M2VmZDZkYzg5ZTYxYTM4ZWYyNzNjZjRjNGNlYmQyYmZlZTY4MDgyYzJlZTNkNGZhYjVkYTk0ZTRhZTEzZDMifV0=", + Url: "data:application/json;base64,W3sib3AiOiJyZXBsYWNlIiwicGF0aCI6Ii9zcGVjL2NvbnRhaW5lcnMvMC9pbWFnZSIsInZhbHVlIjoicmVnaXN0cnkuazhzLmlvL2t1YmUtc2NoZWR1bGVyOnYxLjMwLjEwQHNoYTI1NjpjZjdlYjI1NjE5MmYxZjUxMDkzZmUyNzhjMjA5YTkzNjhmMDY3NWViNjFlZDAxYjE0OGFmNDdkMmYyMWMwMDJkIn1d", InstallPath: patchFilePath("kube-scheduler"), }, { @@ -332,7 +332,7 @@ var VersionConfigs = map[ValidK8sVersion]KubernetesVersion{ ClusterAutoscalerImage: "registry.k8s.io/autoscaling/cluster-autoscaler:v1.30.3@sha256:08fd86ee093760849ac4fd579eb90185b669fc20aa56c156aa34ea7b73dd5e34", // renovate:container }, V1_31: { - ClusterVersion: "v1.31.1", // renovate:kubernetes-release + ClusterVersion: "v1.31.6", // renovate:kubernetes-release KubernetesComponents: components.Components{ { Url: "https://github.com/containernetworking/plugins/releases/download/v1.6.2/cni-plugins-linux-amd64-v1.6.2.tgz", // renovate:cni-plugins-release @@ -347,33 +347,33 @@ var VersionConfigs = map[ValidK8sVersion]KubernetesVersion{ Extract: true, }, { - Url: "https://dl.k8s.io/v1.31.1/bin/linux/amd64/kubelet", // renovate:kubernetes-release - Hash: "sha256:50619fff95bdd7e690c049cc083f495ae0e7c66d0cdf6a8bcad298af5fe28438", + Url: "https://dl.k8s.io/v1.31.6/bin/linux/amd64/kubelet", // renovate:kubernetes-release + Hash: "sha256:ea50176095dd4650f6b270c79cf6d30deaaeb96ffa7d1eaac6924428cc9d2486", InstallPath: constants.KubeletPath, Extract: false, }, { - Url: "https://dl.k8s.io/v1.31.1/bin/linux/amd64/kubeadm", // renovate:kubernetes-release - Hash: "sha256:b3f92d19d482359116dd9ee9c0a10cb86e32a2a2aef79b853d5f07d6a093b0df", + Url: "https://dl.k8s.io/v1.31.6/bin/linux/amd64/kubeadm", // renovate:kubernetes-release + Hash: "sha256:c9d9add6c8cdbeb29d5e1743f23060fc06219b23f561eb9f959b5502fb055611", InstallPath: constants.KubeadmPath, Extract: false, }, { - Url: "https://dl.k8s.io/v1.31.1/bin/linux/amd64/kubectl", // renovate:kubernetes-release - Hash: "sha256:57b514a7facce4ee62c93b8dc21fda8cf62ef3fed22e44ffc9d167eab843b2ae", + Url: "https://dl.k8s.io/v1.31.6/bin/linux/amd64/kubectl", // renovate:kubernetes-release + Hash: "sha256:c46b2f5b0027e919299d1eca073ebf13a4c5c0528dd854fc71a5b93396c9fa9d", InstallPath: constants.KubectlPath, Extract: false, }, { - Url: "data:application/json;base64,W3sib3AiOiJyZXBsYWNlIiwicGF0aCI6Ii9zcGVjL2NvbnRhaW5lcnMvMC9pbWFnZSIsInZhbHVlIjoicmVnaXN0cnkuazhzLmlvL2t1YmUtYXBpc2VydmVyOnYxLjMxLjFAc2hhMjU2OjI0MDljMjNkYmI1YTJiN2E4MWFkYmIxODRkM2VhYzQzYWM2NTNlOWI5N2E3YzBlZTEyMWI4OWJiM2VmNjFmZGIifV0=", + Url: "data:application/json;base64,W3sib3AiOiJyZXBsYWNlIiwicGF0aCI6Ii9zcGVjL2NvbnRhaW5lcnMvMC9pbWFnZSIsInZhbHVlIjoicmVnaXN0cnkuazhzLmlvL2t1YmUtYXBpc2VydmVyOnYxLjMxLjZAc2hhMjU2OmJlMGEyZDgxNTc5M2IwNDA4ZDkyMWE1MGI4Mjc1OWU2NTRjZjFiYmE3MThjYWM0ODA0OTgzOTE5MjY5MDI5MDUifV0=", InstallPath: patchFilePath("kube-apiserver"), }, { - Url: "data:application/json;base64,W3sib3AiOiJyZXBsYWNlIiwicGF0aCI6Ii9zcGVjL2NvbnRhaW5lcnMvMC9pbWFnZSIsInZhbHVlIjoicmVnaXN0cnkuazhzLmlvL2t1YmUtY29udHJvbGxlci1tYW5hZ2VyOnYxLjMxLjFAc2hhMjU2OjlmOWRhNWIyN2UwM2Y4OTU5OWNjNDBiYTg5MTUwYWViZjNiNGNmZjAwMWU2ZGI2ZDk5ODY3NGIzNDE4MWUxYTEifV0=", + Url: "data:application/json;base64,W3sib3AiOiJyZXBsYWNlIiwicGF0aCI6Ii9zcGVjL2NvbnRhaW5lcnMvMC9pbWFnZSIsInZhbHVlIjoicmVnaXN0cnkuazhzLmlvL2t1YmUtY29udHJvbGxlci1tYW5hZ2VyOnYxLjMxLjZAc2hhMjU2OjYzMTY2ZTUzN2E4Mjg1NWFjOWI1NGZmYThiNTEwNDI5ZmU3OTllZDliMDYyYmY2Yjc4OGI3NGUxZDU5OTVkMTIifV0=", InstallPath: patchFilePath("kube-controller-manager"), }, { - Url: "data:application/json;base64,W3sib3AiOiJyZXBsYWNlIiwicGF0aCI6Ii9zcGVjL2NvbnRhaW5lcnMvMC9pbWFnZSIsInZhbHVlIjoicmVnaXN0cnkuazhzLmlvL2t1YmUtc2NoZWR1bGVyOnYxLjMxLjFAc2hhMjU2Ojk2OWE3ZTk2MzQwZjNhOTI3YjNkNjUyNTgyZWRlYzJkNmQ4MmEwODM4NzFkODFlZjUwNjRiN2VkYWFiNDMwZDAifV0=", + Url: "data:application/json;base64,W3sib3AiOiJyZXBsYWNlIiwicGF0aCI6Ii9zcGVjL2NvbnRhaW5lcnMvMC9pbWFnZSIsInZhbHVlIjoicmVnaXN0cnkuazhzLmlvL2t1YmUtc2NoZWR1bGVyOnYxLjMxLjZAc2hhMjU2OjhhNjRhZjMzYzU3MzQ2MzU1ZGMzY2M2ZjkyMjVkYmU3NzFkYTMwZTJmNDI3ZTgwMmNlMjM0MGVjM2I1ZGQ5YjUifV0=", InstallPath: patchFilePath("kube-scheduler"), }, { diff --git a/terraform-provider-constellation/docs/resources/cluster.md b/terraform-provider-constellation/docs/resources/cluster.md index b2ba67286..3d81aa1ec 100644 --- a/terraform-provider-constellation/docs/resources/cluster.md +++ b/terraform-provider-constellation/docs/resources/cluster.md @@ -69,7 +69,7 @@ resource "constellation_cluster" "azure_example" { See the [full list of CSPs](https://docs.edgeless.systems/constellation/overview/clouds) that Constellation supports. - `image` (Attributes) Constellation OS Image to use on the nodes. (see [below for nested schema](#nestedatt--image)) - `init_secret` (String) Secret used for initialization of the cluster. -- `kubernetes_version` (String) The Kubernetes version to use for the cluster. The supported versions are [v1.29.13 v1.30.9 v1.31.1]. +- `kubernetes_version` (String) The Kubernetes version to use for the cluster. The supported versions are [v1.29.14 v1.30.10 v1.31.6]. - `master_secret` (String) Hex-encoded 32-byte master secret for the cluster. - `master_secret_salt` (String) Hex-encoded 32-byte master secret salt for the cluster. - `measurement_salt` (String) Hex-encoded 32-byte measurement salt for the cluster. From 60604fdc5e01998ac0e600bf312808db9cda8829 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 28 Feb 2025 09:38:28 +0100 Subject: [PATCH 128/311] deps: update Terraform dependencies (#3665) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/actions/terraform_apply/action.yml | 2 +- .../vpn/on-prem-terraform/.terraform.lock.hcl | 96 ++++++------ dev-docs/howto/vpn/on-prem-terraform/main.tf | 4 +- .../azure-terraform/.terraform.lock.hcl | 144 +++++++++--------- .../miniconstellation/azure-terraform/main.tf | 6 +- e2e/miniconstellation/.terraform.lock.hcl | 96 ++++++------ e2e/miniconstellation/main.tf | 4 +- .../examples/full/aws/main.tf | 2 +- .../examples/full/azure/main.tf | 2 +- .../examples/full/gcp/main.tf | 2 +- .../examples/full/stackit/main.tf | 2 +- .../infrastructure/aws/.terraform.lock.hcl | 87 +++++------ terraform/infrastructure/aws/main.tf | 4 +- .../aws/modules/instance_group/main.tf | 4 +- .../aws/modules/jump_host/main.tf | 2 +- .../aws/modules/load_balancer_target/main.tf | 2 +- .../aws/modules/public_private_subnet/main.tf | 2 +- .../infrastructure/azure/.terraform.lock.hcl | 96 ++++++------ terraform/infrastructure/azure/main.tf | 4 +- .../modules/load_balancer_backend/main.tf | 2 +- .../azure/modules/scale_set/main.tf | 4 +- .../infrastructure/gcp/.terraform.lock.hcl | 78 +++++----- terraform/infrastructure/gcp/main.tf | 4 +- .../gcp/modules/instance_group/main.tf | 4 +- .../modules/internal_load_balancer/main.tf | 2 +- .../gcp/modules/jump_host/main.tf | 2 +- .../gcp/modules/loadbalancer/main.tf | 2 +- .../iam/aws/.terraform.lock.hcl | 102 +++++++------ terraform/infrastructure/iam/aws/main.tf | 4 +- .../iam/azure/.terraform.lock.hcl | 48 +++--- terraform/infrastructure/iam/azure/main.tf | 2 +- .../iam/gcp/.terraform.lock.hcl | 48 +++--- terraform/infrastructure/iam/gcp/main.tf | 2 +- .../openstack/.terraform.lock.hcl | 96 +++++------- terraform/infrastructure/openstack/main.tf | 4 +- .../modules/stackit_loadbalancer/main.tf | 2 +- .../infrastructure/qemu/.terraform.lock.hcl | 48 +++--- terraform/infrastructure/qemu/main.tf | 2 +- .../qemu/modules/instance_group/main.tf | 2 +- 39 files changed, 496 insertions(+), 523 deletions(-) diff --git a/.github/actions/terraform_apply/action.yml b/.github/actions/terraform_apply/action.yml index cf106b41a..5bca12f60 100644 --- a/.github/actions/terraform_apply/action.yml +++ b/.github/actions/terraform_apply/action.yml @@ -47,7 +47,7 @@ runs: } random = { source = "hashicorp/random" - version = "3.6.3" + version = "3.7.1" } } } diff --git a/dev-docs/howto/vpn/on-prem-terraform/.terraform.lock.hcl b/dev-docs/howto/vpn/on-prem-terraform/.terraform.lock.hcl index 8294746f1..43bb74a62 100644 --- a/dev-docs/howto/vpn/on-prem-terraform/.terraform.lock.hcl +++ b/dev-docs/howto/vpn/on-prem-terraform/.terraform.lock.hcl @@ -2,62 +2,62 @@ # Manual edits may be lost in future updates. provider "registry.terraform.io/hashicorp/azurerm" { - version = "4.20.0" - constraints = "4.20.0" + version = "4.21.0" + constraints = "4.21.0" hashes = [ - "h1:/zBU/N0BTzGRlCUTnFvYg8UiD7Bh4HryW3y3AVDROjc=", - "h1:8TynqZl/QvhZiutnNk9uJZliWb20c9G+G8bGtTiliXI=", - "h1:BZDq7lDdLTYgIeAsLaiXLn8qycoR9D+NFs/OaC6LqNs=", - "h1:ELnu4gb15QAtc1RurC1H6A5OmV3zILizqbuL8kwUEmo=", - "h1:EMP1r+hGjE4zwj31RnVYEu0CLh3x7QSZ+4Z1ysVeqyM=", - "h1:O7hZA85M9/G5LZt+m0bppCinoyp8C346JpI+QnMjYVo=", - "h1:RAigruLqw4uLPyHtFnrgEsYNoZZG/sN+N1waujuiE6w=", - "h1:iWgZaQbV+/YXmO1+47R82zKF6ozCN8nnwLchYRiBtMo=", - "h1:m0gw9qg+hu43PlWDZuTKCFGp0SvBJIv338lIHOqLZmU=", - "h1:qMMFID97Se3U3dxypUF6edxz6TJG/WQfwO1mwOd3ze4=", - "h1:xyhSZmLLirjEN7lmrh4pdM6fOhaA0yWpHUgXdx69vV4=", - "zh:0d29f06abed90da7b943690244420fe1de3e28d4c6de0db441f1af2aa91ea6b8", - "zh:2345e07e91dfec9af3df25fd5119d3a09f91e37ca10af30a344f7b3c297e9ad8", - "zh:42d77650df0238333bcce5da91b4f3d62e54b1ed456f58a9c913270d80a70262", - "zh:43ce137f2644769ceada99a2c815c9c30807e42f61f2f6ce60869411217375f9", - "zh:5e4d8f6a5212f6b7ba29846a2ff328214c7f983ce772196f8e6721edcefd4c59", - "zh:69613d671884fc568a075359e2920d7c19e6d588717b4532b90fb4a4ca8aabd0", - "zh:827ca4fcc25958c731677cb1d87cb09764e3a24ae4117fd9776429341fcdeabe", - "zh:8fad25f949dff7c6f40ea22b13a8b4de6ea0de3c5a975c4a3281529e4797e897", - "zh:b3d175e2725fe38f2a71d5fb346a9d4ff70d449a9d229c95c24f88e764dd2d47", - "zh:c53f3fef67aa64664c85bb8603b0a9730a267a76d7d84ceae16416de7ccb2437", + "h1:6Zce/bfJTubd9VZP+SduO6yD8B51yoeeUe5XyP+n8Tg=", + "h1:8VVtYcBaHWoyQw5DszL36a5Tbx7zGg8jsMPWDjNtkds=", + "h1:J1EF/O3HfSOSwhPEyXfXq1D1eOFySXSjQoElYWsUi9w=", + "h1:MkHYR2jMC/9CJQT9uZwHb3Lr2UTR+GSB1NVzSBd70MI=", + "h1:N2uMJqzYnR+aq7i75T6JX1pAI7Zg6zjpUIiaR2u36V4=", + "h1:SrzAtKrwc16XfEn7XLO8naHMr/q33SpHOEsnWN/L0HI=", + "h1:VaLnj0MaKBjPbAMwCyuJMYmKftnCU8q0XXQDaaAWQns=", + "h1:e1SrjIeLOMHizlsDugvd1qjRpeD1TFzLmU6k+yfztlA=", + "h1:fTq06csKOkoAqtkJn4FXn37wyRlJ0EJJgpe3CWMhIpU=", + "h1:gMu4FGlBedcPsbmKgqHRbT6HYanAqlpcozFAsnbrwhI=", + "h1:mo9aGGJoAiFRf5bBMPlsG6AsDaLqbvPgwkASgdHbiY8=", + "zh:166573ccd95258c761c5ee17ba53b1bf38aac59839fb67303489ca76a4fe39cf", + "zh:17ad468923b68620e0c976a51c512fedd640758f29647650fcdeff5fdfafb731", + "zh:4bb4c6674c3f4776da7fc193a78f929e872144e90821e9e834f02898a0a5b64d", + "zh:5be6d97f17709829fdac01067c5a793a3e3a01d5253107a43b8b94d6837a684b", + "zh:5d9a332a4854ec3e3c5fd185fade10c1b4b71ab8b1ee5d18e26fc29bb5648d83", + "zh:6bfb004b4eb8e041190f8ded8facd2530482eb83af0dead8cd1634abc831510b", + "zh:8b0c42fcd58370e3e4531ab721a09931af857043ee0b3f45404020fd1fdf7382", + "zh:9271775dffaea0d902e41acee737e95e1016a28f168792d06679cfc93e843ed5", + "zh:9cf0b0c48d9a3b21e74eda4f6198c117f52348768e9d0fcf8af933a2a15b6f83", + "zh:a0454a9f08b9de55382715d915be5f56e060e1c11dbd4304e5452518f402d9c1", + "zh:d9b4ea1a8ac558c09484d70f94a16deed35902e06943edb0b1f4ea5bca81feff", "zh:f569b65999264a9416862bca5cd2a6177d94ccb0424f3a4ef424428912b9cb3c", - "zh:f7d9ff06344547232e6c84bc3f6bf9c29cf978ba7cd585c10f4c3361a4b81f22", ] } provider "registry.terraform.io/hashicorp/random" { - version = "3.6.3" - constraints = "3.6.3" + version = "3.7.1" + constraints = "3.7.1" hashes = [ - "h1:+UItZOLue/moJfnI3tqZBQbXUYR4ZnqPYfJDJPgLZy0=", - "h1:4LlZaEeRPQNeQVS/qkH33e0fw92dZV8bS855mhDZ5GU=", - "h1:Fnaec9vA8sZ8BXVlN3Xn9Jz3zghSETIKg7ch8oXhxno=", - "h1:In4XBRMdhY89yUoTUyar3wDF28RJlDpQzdjahp59FAk=", - "h1:LFe/7Z6YZvnrBcYhSEQY50DfS3uoDKBakwdqVXcEQkc=", - "h1:N2IQabOiZC5eCEGrfgVS6ChVmRDh1ENtfHgGjnV4QQQ=", - "h1:aP69UhBhTPIVy1laxOTwOVRPB5Gv3WP9wKPyAnYd8DI=", - "h1:f6jXn4MCv67kgcofx9D49qx1ZEBv8oyvwKDMPBr0A24=", - "h1:ph2J8mV6yYVsaN6FIsxhpWv//QuloQESo4tAZU732Uk=", - "h1:swbWBC5hf9ijj1BQcCpwLOI1m1tXH2KNGp8TEqnMiAY=", - "h1:zG9uFP8l9u+yGZZvi5Te7PV62j50azpgwPunq2vTm1E=", - "zh:04ceb65210251339f07cd4611885d242cd4d0c7306e86dda9785396807c00451", - "zh:448f56199f3e99ff75d5c0afacae867ee795e4dfda6cb5f8e3b2a72ec3583dd8", - "zh:4b4c11ccfba7319e901df2dac836b1ae8f12185e37249e8d870ee10bb87a13fe", - "zh:4fa45c44c0de582c2edb8a2e054f55124520c16a39b2dfc0355929063b6395b1", - "zh:588508280501a06259e023b0695f6a18149a3816d259655c424d068982cbdd36", - "zh:737c4d99a87d2a4d1ac0a54a73d2cb62974ccb2edbd234f333abd079a32ebc9e", + "h1:/qtweZW2sk0kBNiQM02RvBXmlVdI9oYqRMCyBZ8XA98=", + "h1:0XCd0Y9HVdDcEbwxF18e49HB+YRO+QQ24H3jDgmFPEE=", + "h1:2tp72AGbuQyxyDYaaoxJk1el0AQ81Gjy2RWlVxS4BKw=", + "h1:4zid4G8d3tiQThQGwOcFk+EAyvpSkq2bFKSQ1vzfmKU=", + "h1:FMjX0VzHGDmqmz1TNQsq1W2Cfn/H/IR81YmIotHh5uY=", + "h1:Jvr+8mqBJlxSOF8R862ZtezBlCb9pVwNMNc1sYsDeYg=", + "h1:aNMs1vK7xE3QjsSDTTWTwNeNsbSCgOW2valnbyc9TIw=", + "h1:g+mDU6wEJJOSI7/tPh0Tc4i2XjrXAfqKXuiVM9Di194=", + "h1:ji/JgTChmJj8a9PaXja2PiYJhR4iZBX34FDfxnqeZIA=", + "h1:t+sEwSvzYaq0d3FNuzdn7snQPZqmbn3q5uwF7TSDNXQ=", + "h1:t152MY0tQH4a8fLzTtEWx70ITd3azVOrFDn/pQblbto=", + "zh:3193b89b43bf5805493e290374cdda5132578de6535f8009547c8b5d7a351585", + "zh:3218320de4be943e5812ed3de995946056db86eb8d03aa3f074e0c7316599bef", + "zh:419861805a37fa443e7d63b69fb3279926ccf98a79d256c422d5d82f0f387d1d", + "zh:4df9bd9d839b8fc11a3b8098a604b9b46e2235eb65ef15f4432bde0e175f9ca6", + "zh:5814be3f9c9cc39d2955d6f083bae793050d75c572e70ca11ccceb5517ced6b1", + "zh:63c6548a06de1231c8ee5570e42ca09c4b3db336578ded39b938f2156f06dd2e", + "zh:697e434c6bdee0502cc3deb098263b8dcd63948e8a96d61722811628dce2eba1", "zh:78d5eefdd9e494defcb3c68d282b8f96630502cac21d1ea161f53cfe9bb483b3", - "zh:a357ab512e5ebc6d1fda1382503109766e21bbfdfaa9ccda43d313c122069b30", - "zh:c51bfb15e7d52cc1a2eaec2a903ac2aff15d162c172b1b4c17675190e8147615", - "zh:e0951ee6fa9df90433728b96381fb867e3db98f66f735e0c3e24f8f16903f0ad", - "zh:e3cdcb4e73740621dabd82ee6a37d6cfce7fee2a03d8074df65086760f5cf556", - "zh:eff58323099f1bd9a0bec7cb04f717e7f1b2774c7d612bf7581797e1622613a0", + "zh:a0b8e44927e6327852bbfdc9d408d802569367f1e22a95bcdd7181b1c3b07601", + "zh:b7d3af018683ef22794eea9c218bc72d7c35a2b3ede9233b69653b3c782ee436", + "zh:d63b911d618a6fe446c65bfc21e793a7663e934b2fef833d42d3ccd38dd8d68d", + "zh:fa985cd0b11e6d651f47cff3055f0a9fd085ec190b6dbe99bf5448174434cdea", ] } diff --git a/dev-docs/howto/vpn/on-prem-terraform/main.tf b/dev-docs/howto/vpn/on-prem-terraform/main.tf index 3a2b402e2..65ccf1a79 100644 --- a/dev-docs/howto/vpn/on-prem-terraform/main.tf +++ b/dev-docs/howto/vpn/on-prem-terraform/main.tf @@ -2,11 +2,11 @@ terraform { required_providers { azurerm = { source = "hashicorp/azurerm" - version = "4.20.0" + version = "4.21.0" } random = { source = "hashicorp/random" - version = "3.6.3" + version = "3.7.1" } } } diff --git a/dev-docs/miniconstellation/azure-terraform/.terraform.lock.hcl b/dev-docs/miniconstellation/azure-terraform/.terraform.lock.hcl index 636f19c06..eb2c26afd 100644 --- a/dev-docs/miniconstellation/azure-terraform/.terraform.lock.hcl +++ b/dev-docs/miniconstellation/azure-terraform/.terraform.lock.hcl @@ -2,92 +2,92 @@ # Manual edits may be lost in future updates. provider "registry.terraform.io/hashicorp/azurerm" { - version = "4.20.0" - constraints = "4.20.0" + version = "4.21.0" + constraints = "4.21.0" hashes = [ - "h1:/zBU/N0BTzGRlCUTnFvYg8UiD7Bh4HryW3y3AVDROjc=", - "h1:8TynqZl/QvhZiutnNk9uJZliWb20c9G+G8bGtTiliXI=", - "h1:BZDq7lDdLTYgIeAsLaiXLn8qycoR9D+NFs/OaC6LqNs=", - "h1:ELnu4gb15QAtc1RurC1H6A5OmV3zILizqbuL8kwUEmo=", - "h1:EMP1r+hGjE4zwj31RnVYEu0CLh3x7QSZ+4Z1ysVeqyM=", - "h1:O7hZA85M9/G5LZt+m0bppCinoyp8C346JpI+QnMjYVo=", - "h1:RAigruLqw4uLPyHtFnrgEsYNoZZG/sN+N1waujuiE6w=", - "h1:iWgZaQbV+/YXmO1+47R82zKF6ozCN8nnwLchYRiBtMo=", - "h1:m0gw9qg+hu43PlWDZuTKCFGp0SvBJIv338lIHOqLZmU=", - "h1:qMMFID97Se3U3dxypUF6edxz6TJG/WQfwO1mwOd3ze4=", - "h1:xyhSZmLLirjEN7lmrh4pdM6fOhaA0yWpHUgXdx69vV4=", - "zh:0d29f06abed90da7b943690244420fe1de3e28d4c6de0db441f1af2aa91ea6b8", - "zh:2345e07e91dfec9af3df25fd5119d3a09f91e37ca10af30a344f7b3c297e9ad8", - "zh:42d77650df0238333bcce5da91b4f3d62e54b1ed456f58a9c913270d80a70262", - "zh:43ce137f2644769ceada99a2c815c9c30807e42f61f2f6ce60869411217375f9", - "zh:5e4d8f6a5212f6b7ba29846a2ff328214c7f983ce772196f8e6721edcefd4c59", - "zh:69613d671884fc568a075359e2920d7c19e6d588717b4532b90fb4a4ca8aabd0", - "zh:827ca4fcc25958c731677cb1d87cb09764e3a24ae4117fd9776429341fcdeabe", - "zh:8fad25f949dff7c6f40ea22b13a8b4de6ea0de3c5a975c4a3281529e4797e897", - "zh:b3d175e2725fe38f2a71d5fb346a9d4ff70d449a9d229c95c24f88e764dd2d47", - "zh:c53f3fef67aa64664c85bb8603b0a9730a267a76d7d84ceae16416de7ccb2437", + "h1:6Zce/bfJTubd9VZP+SduO6yD8B51yoeeUe5XyP+n8Tg=", + "h1:8VVtYcBaHWoyQw5DszL36a5Tbx7zGg8jsMPWDjNtkds=", + "h1:J1EF/O3HfSOSwhPEyXfXq1D1eOFySXSjQoElYWsUi9w=", + "h1:MkHYR2jMC/9CJQT9uZwHb3Lr2UTR+GSB1NVzSBd70MI=", + "h1:N2uMJqzYnR+aq7i75T6JX1pAI7Zg6zjpUIiaR2u36V4=", + "h1:SrzAtKrwc16XfEn7XLO8naHMr/q33SpHOEsnWN/L0HI=", + "h1:VaLnj0MaKBjPbAMwCyuJMYmKftnCU8q0XXQDaaAWQns=", + "h1:e1SrjIeLOMHizlsDugvd1qjRpeD1TFzLmU6k+yfztlA=", + "h1:fTq06csKOkoAqtkJn4FXn37wyRlJ0EJJgpe3CWMhIpU=", + "h1:gMu4FGlBedcPsbmKgqHRbT6HYanAqlpcozFAsnbrwhI=", + "h1:mo9aGGJoAiFRf5bBMPlsG6AsDaLqbvPgwkASgdHbiY8=", + "zh:166573ccd95258c761c5ee17ba53b1bf38aac59839fb67303489ca76a4fe39cf", + "zh:17ad468923b68620e0c976a51c512fedd640758f29647650fcdeff5fdfafb731", + "zh:4bb4c6674c3f4776da7fc193a78f929e872144e90821e9e834f02898a0a5b64d", + "zh:5be6d97f17709829fdac01067c5a793a3e3a01d5253107a43b8b94d6837a684b", + "zh:5d9a332a4854ec3e3c5fd185fade10c1b4b71ab8b1ee5d18e26fc29bb5648d83", + "zh:6bfb004b4eb8e041190f8ded8facd2530482eb83af0dead8cd1634abc831510b", + "zh:8b0c42fcd58370e3e4531ab721a09931af857043ee0b3f45404020fd1fdf7382", + "zh:9271775dffaea0d902e41acee737e95e1016a28f168792d06679cfc93e843ed5", + "zh:9cf0b0c48d9a3b21e74eda4f6198c117f52348768e9d0fcf8af933a2a15b6f83", + "zh:a0454a9f08b9de55382715d915be5f56e060e1c11dbd4304e5452518f402d9c1", + "zh:d9b4ea1a8ac558c09484d70f94a16deed35902e06943edb0b1f4ea5bca81feff", "zh:f569b65999264a9416862bca5cd2a6177d94ccb0424f3a4ef424428912b9cb3c", - "zh:f7d9ff06344547232e6c84bc3f6bf9c29cf978ba7cd585c10f4c3361a4b81f22", ] } provider "registry.terraform.io/hashicorp/cloudinit" { - version = "2.3.5" - constraints = "2.3.5" + version = "2.3.6" + constraints = "2.3.6" hashes = [ - "h1:C//ncldNugV8TpMQaj9ygoPXRVYOqltIxNB8LKrpzgU=", - "h1:HCoabXm6NQwCivl1q24+l9VUufc2mFqNeulsQBA9iFg=", - "h1:NCYXIt7zhG0pRLV9UAlBrKi4Rty/jRhRRHIZFEigUm8=", - "h1:Sf1Lt21oTADbzsnlU38ylpkl8YXP0Beznjcy5F/Yx64=", - "h1:TUljFfEUFn6szDfglwv150tNRUKPgqa5YiCTdF9Tc6c=", - "h1:W+6XNutLOfQxlm8XWg4wKAYvyDt/eoE1roSeFkn/KA4=", - "h1:cKe6NmJzRHiK0n73R5Dzkw8nK5i0nC4SedZhanMbQD0=", - "h1:jPzwR4Um4NU8EE6o5AIx2SoeGZG5bW9aAeFpcbodjHQ=", - "h1:sfaNIqomGVkYy6gGHbaFS2ehzh5CqoeBwR4QYae+cBY=", - "h1:wbw64JlCobcQCAdlzHpxksQ1GabewTW1yxnACBVZh4A=", - "h1:y0qqdBKvRt2MMcga7AVMkUb/vmJSKVBaimHaIHKLucs=", - "zh:17c20574de8eb925b0091c9b6a4d859e9d6e399cd890b44cfbc028f4f312ac7a", - "zh:348664d9a900f7baf7b091cf94d657e4c968b240d31d9e162086724e6afc19d5", - "zh:5a876a468ffabff0299f8348e719cb704daf81a4867f8c6892f3c3c4add2c755", - "zh:6ef97ee4c8c6a69a3d36746ba5c857cf4f4d78f32aa3d0e1ce68f2ece6a5dba5", + "h1:AGxDD7sJme9Adr3ThgBSkbbQLDLkEDLAH1bsmS6T/m0=", + "h1:ET4K0kdtPzOEr2M4hmA26jkAHbqN8YTSpcKtPDJxgyU=", + "h1:NlviM1ykkj49VzgN1Vw8THQIjwKbtiJik6axXfsfQNQ=", + "h1:OSlOCrwRWkNpWlfG7u+ZBSIskEELqHEqzfb5aXUo/fM=", + "h1:PTPDNobmkvWZu6U7k/s5yFXOSktFK5iwu67HAkPJ4t8=", + "h1:VK29UjlU8sEa8jaETUVsAXx1+R9Hgkb46IBBoYwzB1c=", + "h1:WvwTnAb57u948QLW0tvDyIb8Llv1udEChTtNH/A2whQ=", + "h1:YIF4q13C/LX4y4M2gpZxcAKMLiLPJmC1NLYNKw0HX2s=", + "h1:afnqn3XPnO40laFt+SVHPPKsg1j3HXT0VAO0xBVvmrY=", + "h1:sFAf8Tov1SGOrhv7g8J3w+LGhMgGtMN16FkIjfazudY=", + "h1:x5ospIpvJh5jr1gLQi0rkNGdHqfEbvPDimdmKjnngzU=", + "zh:1321b5ddede56be3f9b35bf75d7cda79adcb357fad62eb8677b6595e0baaa6cd", + "zh:265d66e61b9cd16ca1182ebf094cc0a08fb3687e8193a1dbac6899b16c237151", + "zh:3875c3a20e082ac55d5ff24bcaf7133ebc90c7f999fd0fb37cf0f0003474c94c", + "zh:68ce41ccd07757c451682703840cae1ec270ed5275cd491bbf8279782dfcbb73", "zh:78d5eefdd9e494defcb3c68d282b8f96630502cac21d1ea161f53cfe9bb483b3", - "zh:8283e5a785e3c518a440f6ac6e7cc4fc07fe266bf34974246f4e2ef05762feda", - "zh:a44eb5077950168b571b7eb65491246c00f45409110f0f172cc3a7605f19dba9", - "zh:aa0806cbff72b49c1b389c0b8e6904586e5259c08dabb7cb5040418568146530", - "zh:bec4613c3beaad9a7be7ca99cdb2852073f782355b272892e6ee97a22856aec1", - "zh:d7fe368577b6c8d1ae44c751ed42246754c10305c7f001cc0109833e95aa107d", - "zh:df2409fc6a364b1f0a0f8a9cd8a86e61e80307996979ce3790243c4ce88f2915", - "zh:ed3c263396ff1f4d29639cc43339b655235acf4d06296a7c120a80e4e0fd6409", + "zh:8dca3bb3f85ff8ac4d1b3f93975dcb751ed788396c56ebf0c3737ce1a4c60492", + "zh:9339bdaa99939291cedf543861353c8e7171ec5231c0dfacaa9bdb3338978dab", + "zh:a8510c2256e9a78697910bb5542aeca457c81225ea88130335f6d14a36a36c74", + "zh:af7ed71b8fceb60a5e3b7fa663be171e0bd41bb0af30e0e1f06a004c7b584e4a", + "zh:bc9de0f921b69d07f5fc1ea65f8af71d8d1a7053aafb500788b30bfce64b8fbe", + "zh:bccd0a49f161a91660d7d30dd6b389e6820f29752ccf351f10a3297c96973823", + "zh:c69321caca20009abead617f888a67aca990276cb7388b738b19157b88749190", ] } provider "registry.terraform.io/hashicorp/random" { - version = "3.6.3" - constraints = "3.6.3" + version = "3.7.1" + constraints = "3.7.1" hashes = [ - "h1:+UItZOLue/moJfnI3tqZBQbXUYR4ZnqPYfJDJPgLZy0=", - "h1:4LlZaEeRPQNeQVS/qkH33e0fw92dZV8bS855mhDZ5GU=", - "h1:Fnaec9vA8sZ8BXVlN3Xn9Jz3zghSETIKg7ch8oXhxno=", - "h1:In4XBRMdhY89yUoTUyar3wDF28RJlDpQzdjahp59FAk=", - "h1:LFe/7Z6YZvnrBcYhSEQY50DfS3uoDKBakwdqVXcEQkc=", - "h1:N2IQabOiZC5eCEGrfgVS6ChVmRDh1ENtfHgGjnV4QQQ=", - "h1:aP69UhBhTPIVy1laxOTwOVRPB5Gv3WP9wKPyAnYd8DI=", - "h1:f6jXn4MCv67kgcofx9D49qx1ZEBv8oyvwKDMPBr0A24=", - "h1:ph2J8mV6yYVsaN6FIsxhpWv//QuloQESo4tAZU732Uk=", - "h1:swbWBC5hf9ijj1BQcCpwLOI1m1tXH2KNGp8TEqnMiAY=", - "h1:zG9uFP8l9u+yGZZvi5Te7PV62j50azpgwPunq2vTm1E=", - "zh:04ceb65210251339f07cd4611885d242cd4d0c7306e86dda9785396807c00451", - "zh:448f56199f3e99ff75d5c0afacae867ee795e4dfda6cb5f8e3b2a72ec3583dd8", - "zh:4b4c11ccfba7319e901df2dac836b1ae8f12185e37249e8d870ee10bb87a13fe", - "zh:4fa45c44c0de582c2edb8a2e054f55124520c16a39b2dfc0355929063b6395b1", - "zh:588508280501a06259e023b0695f6a18149a3816d259655c424d068982cbdd36", - "zh:737c4d99a87d2a4d1ac0a54a73d2cb62974ccb2edbd234f333abd079a32ebc9e", + "h1:/qtweZW2sk0kBNiQM02RvBXmlVdI9oYqRMCyBZ8XA98=", + "h1:0XCd0Y9HVdDcEbwxF18e49HB+YRO+QQ24H3jDgmFPEE=", + "h1:2tp72AGbuQyxyDYaaoxJk1el0AQ81Gjy2RWlVxS4BKw=", + "h1:4zid4G8d3tiQThQGwOcFk+EAyvpSkq2bFKSQ1vzfmKU=", + "h1:FMjX0VzHGDmqmz1TNQsq1W2Cfn/H/IR81YmIotHh5uY=", + "h1:Jvr+8mqBJlxSOF8R862ZtezBlCb9pVwNMNc1sYsDeYg=", + "h1:aNMs1vK7xE3QjsSDTTWTwNeNsbSCgOW2valnbyc9TIw=", + "h1:g+mDU6wEJJOSI7/tPh0Tc4i2XjrXAfqKXuiVM9Di194=", + "h1:ji/JgTChmJj8a9PaXja2PiYJhR4iZBX34FDfxnqeZIA=", + "h1:t+sEwSvzYaq0d3FNuzdn7snQPZqmbn3q5uwF7TSDNXQ=", + "h1:t152MY0tQH4a8fLzTtEWx70ITd3azVOrFDn/pQblbto=", + "zh:3193b89b43bf5805493e290374cdda5132578de6535f8009547c8b5d7a351585", + "zh:3218320de4be943e5812ed3de995946056db86eb8d03aa3f074e0c7316599bef", + "zh:419861805a37fa443e7d63b69fb3279926ccf98a79d256c422d5d82f0f387d1d", + "zh:4df9bd9d839b8fc11a3b8098a604b9b46e2235eb65ef15f4432bde0e175f9ca6", + "zh:5814be3f9c9cc39d2955d6f083bae793050d75c572e70ca11ccceb5517ced6b1", + "zh:63c6548a06de1231c8ee5570e42ca09c4b3db336578ded39b938f2156f06dd2e", + "zh:697e434c6bdee0502cc3deb098263b8dcd63948e8a96d61722811628dce2eba1", "zh:78d5eefdd9e494defcb3c68d282b8f96630502cac21d1ea161f53cfe9bb483b3", - "zh:a357ab512e5ebc6d1fda1382503109766e21bbfdfaa9ccda43d313c122069b30", - "zh:c51bfb15e7d52cc1a2eaec2a903ac2aff15d162c172b1b4c17675190e8147615", - "zh:e0951ee6fa9df90433728b96381fb867e3db98f66f735e0c3e24f8f16903f0ad", - "zh:e3cdcb4e73740621dabd82ee6a37d6cfce7fee2a03d8074df65086760f5cf556", - "zh:eff58323099f1bd9a0bec7cb04f717e7f1b2774c7d612bf7581797e1622613a0", + "zh:a0b8e44927e6327852bbfdc9d408d802569367f1e22a95bcdd7181b1c3b07601", + "zh:b7d3af018683ef22794eea9c218bc72d7c35a2b3ede9233b69653b3c782ee436", + "zh:d63b911d618a6fe446c65bfc21e793a7663e934b2fef833d42d3ccd38dd8d68d", + "zh:fa985cd0b11e6d651f47cff3055f0a9fd085ec190b6dbe99bf5448174434cdea", ] } diff --git a/dev-docs/miniconstellation/azure-terraform/main.tf b/dev-docs/miniconstellation/azure-terraform/main.tf index 412371f65..50b9f323c 100644 --- a/dev-docs/miniconstellation/azure-terraform/main.tf +++ b/dev-docs/miniconstellation/azure-terraform/main.tf @@ -2,11 +2,11 @@ terraform { required_providers { azurerm = { source = "hashicorp/azurerm" - version = "4.20.0" + version = "4.21.0" } random = { source = "hashicorp/random" - version = "3.6.3" + version = "3.7.1" } tls = { source = "hashicorp/tls" @@ -14,7 +14,7 @@ terraform { } cloudinit = { source = "hashicorp/cloudinit" - version = "2.3.5" + version = "2.3.6" } } } diff --git a/e2e/miniconstellation/.terraform.lock.hcl b/e2e/miniconstellation/.terraform.lock.hcl index 3ab652036..dc962e9bf 100644 --- a/e2e/miniconstellation/.terraform.lock.hcl +++ b/e2e/miniconstellation/.terraform.lock.hcl @@ -2,62 +2,62 @@ # Manual edits may be lost in future updates. provider "registry.terraform.io/hashicorp/azurerm" { - version = "4.20.0" - constraints = "4.20.0" + version = "4.21.0" + constraints = "4.21.0" hashes = [ - "h1:/zBU/N0BTzGRlCUTnFvYg8UiD7Bh4HryW3y3AVDROjc=", - "h1:8TynqZl/QvhZiutnNk9uJZliWb20c9G+G8bGtTiliXI=", - "h1:BZDq7lDdLTYgIeAsLaiXLn8qycoR9D+NFs/OaC6LqNs=", - "h1:ELnu4gb15QAtc1RurC1H6A5OmV3zILizqbuL8kwUEmo=", - "h1:EMP1r+hGjE4zwj31RnVYEu0CLh3x7QSZ+4Z1ysVeqyM=", - "h1:O7hZA85M9/G5LZt+m0bppCinoyp8C346JpI+QnMjYVo=", - "h1:RAigruLqw4uLPyHtFnrgEsYNoZZG/sN+N1waujuiE6w=", - "h1:iWgZaQbV+/YXmO1+47R82zKF6ozCN8nnwLchYRiBtMo=", - "h1:m0gw9qg+hu43PlWDZuTKCFGp0SvBJIv338lIHOqLZmU=", - "h1:qMMFID97Se3U3dxypUF6edxz6TJG/WQfwO1mwOd3ze4=", - "h1:xyhSZmLLirjEN7lmrh4pdM6fOhaA0yWpHUgXdx69vV4=", - "zh:0d29f06abed90da7b943690244420fe1de3e28d4c6de0db441f1af2aa91ea6b8", - "zh:2345e07e91dfec9af3df25fd5119d3a09f91e37ca10af30a344f7b3c297e9ad8", - "zh:42d77650df0238333bcce5da91b4f3d62e54b1ed456f58a9c913270d80a70262", - "zh:43ce137f2644769ceada99a2c815c9c30807e42f61f2f6ce60869411217375f9", - "zh:5e4d8f6a5212f6b7ba29846a2ff328214c7f983ce772196f8e6721edcefd4c59", - "zh:69613d671884fc568a075359e2920d7c19e6d588717b4532b90fb4a4ca8aabd0", - "zh:827ca4fcc25958c731677cb1d87cb09764e3a24ae4117fd9776429341fcdeabe", - "zh:8fad25f949dff7c6f40ea22b13a8b4de6ea0de3c5a975c4a3281529e4797e897", - "zh:b3d175e2725fe38f2a71d5fb346a9d4ff70d449a9d229c95c24f88e764dd2d47", - "zh:c53f3fef67aa64664c85bb8603b0a9730a267a76d7d84ceae16416de7ccb2437", + "h1:6Zce/bfJTubd9VZP+SduO6yD8B51yoeeUe5XyP+n8Tg=", + "h1:8VVtYcBaHWoyQw5DszL36a5Tbx7zGg8jsMPWDjNtkds=", + "h1:J1EF/O3HfSOSwhPEyXfXq1D1eOFySXSjQoElYWsUi9w=", + "h1:MkHYR2jMC/9CJQT9uZwHb3Lr2UTR+GSB1NVzSBd70MI=", + "h1:N2uMJqzYnR+aq7i75T6JX1pAI7Zg6zjpUIiaR2u36V4=", + "h1:SrzAtKrwc16XfEn7XLO8naHMr/q33SpHOEsnWN/L0HI=", + "h1:VaLnj0MaKBjPbAMwCyuJMYmKftnCU8q0XXQDaaAWQns=", + "h1:e1SrjIeLOMHizlsDugvd1qjRpeD1TFzLmU6k+yfztlA=", + "h1:fTq06csKOkoAqtkJn4FXn37wyRlJ0EJJgpe3CWMhIpU=", + "h1:gMu4FGlBedcPsbmKgqHRbT6HYanAqlpcozFAsnbrwhI=", + "h1:mo9aGGJoAiFRf5bBMPlsG6AsDaLqbvPgwkASgdHbiY8=", + "zh:166573ccd95258c761c5ee17ba53b1bf38aac59839fb67303489ca76a4fe39cf", + "zh:17ad468923b68620e0c976a51c512fedd640758f29647650fcdeff5fdfafb731", + "zh:4bb4c6674c3f4776da7fc193a78f929e872144e90821e9e834f02898a0a5b64d", + "zh:5be6d97f17709829fdac01067c5a793a3e3a01d5253107a43b8b94d6837a684b", + "zh:5d9a332a4854ec3e3c5fd185fade10c1b4b71ab8b1ee5d18e26fc29bb5648d83", + "zh:6bfb004b4eb8e041190f8ded8facd2530482eb83af0dead8cd1634abc831510b", + "zh:8b0c42fcd58370e3e4531ab721a09931af857043ee0b3f45404020fd1fdf7382", + "zh:9271775dffaea0d902e41acee737e95e1016a28f168792d06679cfc93e843ed5", + "zh:9cf0b0c48d9a3b21e74eda4f6198c117f52348768e9d0fcf8af933a2a15b6f83", + "zh:a0454a9f08b9de55382715d915be5f56e060e1c11dbd4304e5452518f402d9c1", + "zh:d9b4ea1a8ac558c09484d70f94a16deed35902e06943edb0b1f4ea5bca81feff", "zh:f569b65999264a9416862bca5cd2a6177d94ccb0424f3a4ef424428912b9cb3c", - "zh:f7d9ff06344547232e6c84bc3f6bf9c29cf978ba7cd585c10f4c3361a4b81f22", ] } provider "registry.terraform.io/hashicorp/cloudinit" { - version = "2.3.5" - constraints = "2.3.5" + version = "2.3.6" + constraints = "2.3.6" hashes = [ - "h1:C//ncldNugV8TpMQaj9ygoPXRVYOqltIxNB8LKrpzgU=", - "h1:HCoabXm6NQwCivl1q24+l9VUufc2mFqNeulsQBA9iFg=", - "h1:NCYXIt7zhG0pRLV9UAlBrKi4Rty/jRhRRHIZFEigUm8=", - "h1:Sf1Lt21oTADbzsnlU38ylpkl8YXP0Beznjcy5F/Yx64=", - "h1:TUljFfEUFn6szDfglwv150tNRUKPgqa5YiCTdF9Tc6c=", - "h1:W+6XNutLOfQxlm8XWg4wKAYvyDt/eoE1roSeFkn/KA4=", - "h1:cKe6NmJzRHiK0n73R5Dzkw8nK5i0nC4SedZhanMbQD0=", - "h1:jPzwR4Um4NU8EE6o5AIx2SoeGZG5bW9aAeFpcbodjHQ=", - "h1:sfaNIqomGVkYy6gGHbaFS2ehzh5CqoeBwR4QYae+cBY=", - "h1:wbw64JlCobcQCAdlzHpxksQ1GabewTW1yxnACBVZh4A=", - "h1:y0qqdBKvRt2MMcga7AVMkUb/vmJSKVBaimHaIHKLucs=", - "zh:17c20574de8eb925b0091c9b6a4d859e9d6e399cd890b44cfbc028f4f312ac7a", - "zh:348664d9a900f7baf7b091cf94d657e4c968b240d31d9e162086724e6afc19d5", - "zh:5a876a468ffabff0299f8348e719cb704daf81a4867f8c6892f3c3c4add2c755", - "zh:6ef97ee4c8c6a69a3d36746ba5c857cf4f4d78f32aa3d0e1ce68f2ece6a5dba5", + "h1:AGxDD7sJme9Adr3ThgBSkbbQLDLkEDLAH1bsmS6T/m0=", + "h1:ET4K0kdtPzOEr2M4hmA26jkAHbqN8YTSpcKtPDJxgyU=", + "h1:NlviM1ykkj49VzgN1Vw8THQIjwKbtiJik6axXfsfQNQ=", + "h1:OSlOCrwRWkNpWlfG7u+ZBSIskEELqHEqzfb5aXUo/fM=", + "h1:PTPDNobmkvWZu6U7k/s5yFXOSktFK5iwu67HAkPJ4t8=", + "h1:VK29UjlU8sEa8jaETUVsAXx1+R9Hgkb46IBBoYwzB1c=", + "h1:WvwTnAb57u948QLW0tvDyIb8Llv1udEChTtNH/A2whQ=", + "h1:YIF4q13C/LX4y4M2gpZxcAKMLiLPJmC1NLYNKw0HX2s=", + "h1:afnqn3XPnO40laFt+SVHPPKsg1j3HXT0VAO0xBVvmrY=", + "h1:sFAf8Tov1SGOrhv7g8J3w+LGhMgGtMN16FkIjfazudY=", + "h1:x5ospIpvJh5jr1gLQi0rkNGdHqfEbvPDimdmKjnngzU=", + "zh:1321b5ddede56be3f9b35bf75d7cda79adcb357fad62eb8677b6595e0baaa6cd", + "zh:265d66e61b9cd16ca1182ebf094cc0a08fb3687e8193a1dbac6899b16c237151", + "zh:3875c3a20e082ac55d5ff24bcaf7133ebc90c7f999fd0fb37cf0f0003474c94c", + "zh:68ce41ccd07757c451682703840cae1ec270ed5275cd491bbf8279782dfcbb73", "zh:78d5eefdd9e494defcb3c68d282b8f96630502cac21d1ea161f53cfe9bb483b3", - "zh:8283e5a785e3c518a440f6ac6e7cc4fc07fe266bf34974246f4e2ef05762feda", - "zh:a44eb5077950168b571b7eb65491246c00f45409110f0f172cc3a7605f19dba9", - "zh:aa0806cbff72b49c1b389c0b8e6904586e5259c08dabb7cb5040418568146530", - "zh:bec4613c3beaad9a7be7ca99cdb2852073f782355b272892e6ee97a22856aec1", - "zh:d7fe368577b6c8d1ae44c751ed42246754c10305c7f001cc0109833e95aa107d", - "zh:df2409fc6a364b1f0a0f8a9cd8a86e61e80307996979ce3790243c4ce88f2915", - "zh:ed3c263396ff1f4d29639cc43339b655235acf4d06296a7c120a80e4e0fd6409", + "zh:8dca3bb3f85ff8ac4d1b3f93975dcb751ed788396c56ebf0c3737ce1a4c60492", + "zh:9339bdaa99939291cedf543861353c8e7171ec5231c0dfacaa9bdb3338978dab", + "zh:a8510c2256e9a78697910bb5542aeca457c81225ea88130335f6d14a36a36c74", + "zh:af7ed71b8fceb60a5e3b7fa663be171e0bd41bb0af30e0e1f06a004c7b584e4a", + "zh:bc9de0f921b69d07f5fc1ea65f8af71d8d1a7053aafb500788b30bfce64b8fbe", + "zh:bccd0a49f161a91660d7d30dd6b389e6820f29752ccf351f10a3297c96973823", + "zh:c69321caca20009abead617f888a67aca990276cb7388b738b19157b88749190", ] } diff --git a/e2e/miniconstellation/main.tf b/e2e/miniconstellation/main.tf index 8889c844d..041b4b8fe 100644 --- a/e2e/miniconstellation/main.tf +++ b/e2e/miniconstellation/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { azurerm = { source = "hashicorp/azurerm" - version = "4.20.0" + version = "4.21.0" } tls = { source = "hashicorp/tls" @@ -10,7 +10,7 @@ terraform { } cloudinit = { source = "hashicorp/cloudinit" - version = "2.3.5" + version = "2.3.6" } } } diff --git a/terraform-provider-constellation/examples/full/aws/main.tf b/terraform-provider-constellation/examples/full/aws/main.tf index dcde86b6e..612ca6c55 100644 --- a/terraform-provider-constellation/examples/full/aws/main.tf +++ b/terraform-provider-constellation/examples/full/aws/main.tf @@ -6,7 +6,7 @@ terraform { } random = { source = "hashicorp/random" - version = "3.6.3" + version = "3.7.1" } } } diff --git a/terraform-provider-constellation/examples/full/azure/main.tf b/terraform-provider-constellation/examples/full/azure/main.tf index 034356138..77d330bb5 100644 --- a/terraform-provider-constellation/examples/full/azure/main.tf +++ b/terraform-provider-constellation/examples/full/azure/main.tf @@ -6,7 +6,7 @@ terraform { } random = { source = "hashicorp/random" - version = "3.6.3" + version = "3.7.1" } } } diff --git a/terraform-provider-constellation/examples/full/gcp/main.tf b/terraform-provider-constellation/examples/full/gcp/main.tf index bf573410b..d685785b0 100644 --- a/terraform-provider-constellation/examples/full/gcp/main.tf +++ b/terraform-provider-constellation/examples/full/gcp/main.tf @@ -6,7 +6,7 @@ terraform { } random = { source = "hashicorp/random" - version = "3.6.3" + version = "3.7.1" } } } diff --git a/terraform-provider-constellation/examples/full/stackit/main.tf b/terraform-provider-constellation/examples/full/stackit/main.tf index a145be5f4..f7b97ea91 100644 --- a/terraform-provider-constellation/examples/full/stackit/main.tf +++ b/terraform-provider-constellation/examples/full/stackit/main.tf @@ -6,7 +6,7 @@ terraform { } random = { source = "hashicorp/random" - version = "3.6.3" + version = "3.7.1" } } } diff --git a/terraform/infrastructure/aws/.terraform.lock.hcl b/terraform/infrastructure/aws/.terraform.lock.hcl index f39a26eb9..dc7fd3be1 100644 --- a/terraform/infrastructure/aws/.terraform.lock.hcl +++ b/terraform/infrastructure/aws/.terraform.lock.hcl @@ -2,61 +2,52 @@ # Manual edits may be lost in future updates. provider "registry.terraform.io/hashicorp/aws" { - version = "5.88.0" - constraints = "5.88.0" + version = "5.89.0" + constraints = "5.89.0" hashes = [ - "h1:8So0IR8jwKx8WhVuD1LDsbeMTe78/SF5g4d7z5C6+C4=", - "h1:CtUi38/zeD7FmxC327T/r1RGze7GNrC8QFaSSBy7u9M=", - "h1:Gsl/jrA6UmJI6iJg5HtQuZWERwWFyl8361jicsGEOj4=", - "h1:H9Ur5AHP1XwvGS7tJvPMo7JNFxHYwxsYtXBML0gas9A=", - "h1:Lox8X0csC/88j8PokcK1rTRDLBYpSASQyurE27e6C+Y=", - "h1:NpZJqGhTv3LsjL0Jg8OBpIto5cbyahoyn6bNlQ0XbVI=", - "h1:PXaP+z5Z9pcUUcJqS6ea09wR/cscBq1F9jRsNqe39rM=", - "h1:Uqmvemsy5d+fqf21wwnqQOx/RQg0mJ3gXdWRWQs7cKc=", - "h1:YwZyjmqgCzgSq5YzfPmb8Iqy5u/7SiJECeUyQK8kma0=", - "h1:aXxdTbDqZ7sIv0eKcpB1iNGH+gjwYjYZuJAAtXKSkTU=", - "h1:nks+LOLQf0gfh7EZCqpWErw9/03yqYDEaGxYqUfEc78=", - "h1:u8hinU3pUne1S4oijYQHzx4ynQDRzJ8gpwgxtDu8KlA=", - "h1:vZVMI4zaLpESWoN79JGDBTqTxM+bt5PoIx/bt0NC2+A=", - "h1:wZQjYp5BEHgwnX2sb7OTiiXxueVJOVFtkb4K1GVAtL4=", - "zh:24f852b1cca276d91f950cb7fb575cacc385f55edccf4beec1f611cdd7626cf5", - "zh:2a3b3f5ac513f8d6448a31d9619f8a96e0597dd354459de3a4698e684c909f96", - "zh:3700499885a8e0e532eccba3cb068340e411cf9e616bf8a59e815d3b62ca3e46", - "zh:4aab3605468244a74cbde66784ea1d30dc0fc6caf26d1b099427ecd5790f7c4d", - "zh:74eca9314d6dd80b215d7bc1c4be37d81e1045d625d5b512995f3a352d7a43bc", - "zh:77d9a06c63a4ad615bc97f67f948250397267f15698ebb2547fbdd20f734983c", - "zh:82d6aaef1eb0caf9ca451887fdbdcff10ab09318b1d60faa883a013283ab2b15", - "zh:8dbcfb121b887ce8572f5ab8174d592a729390ca32dc5fdacac4c7c1c508411a", - "zh:95d51e80b55ff9064f5c1bc61d78f992e2f89c986ba2b10546ea4461d35c24f9", + "h1:3hTpe3sckeeiq6DK9hnFnGf4fe55ZkOlEFbSlRtho5c=", + "h1:LEGcR6yAdoJdJQR8zQskkmwu8zxElUNNQb7DCnutC3Y=", + "h1:rFvk42jJEKiSUhK1cbERfNgYm4mD+8tq0ZcxCwpXSJs=", + "h1:xknpTAuujOZwmfL4HvbAA7HXt5NtZcKEJQHPmncBxw0=", + "h1:yK0t+VEztYYyDVU8x2JddCH9WaOhOXOrB+dK8PpJAoU=", + "zh:0e55784d6effc33b9098ffab7fb77a242e0223a59cdcf964caa0be94d14684af", + "zh:23c64f3eaeffcafb007c89db3dfca94c8adf06b120af55abddaca55a6c6c924c", + "zh:338f620133cb607ce980f1725a0a78f61cbd42f4c601808ec1ee01a6c16c9811", + "zh:6ab0499172f17484d7b39924cf06782789df1473d31ebae0c7f3294f6e7a1227", + "zh:6dcde3e29e538cdf80971cbdce3b285056fd0e31dd64b02d2dcdf4c02f21d0a9", + "zh:75c9b594d77c9125bfb1aaf3fbd77a49e392841d53029b5726eb71d64de1233e", + "zh:7b334c23091e7b4c142e378416586292197c40a31a5bdb3b29c4f9afddd286f0", + "zh:991bbba72e5eb6eb351f466d68080992f5b0495f862a6723f386d1b4c965aa7d", "zh:9b12af85486a96aedd8d7984b0ff811a4b42e3d88dad1a3fb4c0b580d04fa425", - "zh:9ead5de0e123020926a0edaf88d9eed5cb86afe438a875528f6d11d0d27eed73", - "zh:ab7c940cbb2081314f4af3cdd61ed2c1d59fd7a60fa3db27770887d63072fbdd", - "zh:d52cd68006fd6fa8d028cdf569a6620fbc31726019beb7c75affa8764622d398", - "zh:f179ca86ad5d5fb88dfd8e8e7c448f2c0ad550d22152f939b8465baeaf9289e9", - "zh:f54dda271fa6dfee06537066278669a3f92c872e7dfa5a0184cd9117f7e47b8c", + "zh:9bd2f12eef4a5dceafc211ab3b9a63f0e3e224007a60c1bbb842f76e0377033d", + "zh:b1ac1eb3b3e1a79fa5e5ad3364615f23b9ee0b093ceeb809fd386a4d40e7abb4", + "zh:cea91f43151b30c428c441b97c3b98bf1e5fb72ef72f6971308e3895e23437f4", + "zh:d3f000a1696a43d8186a516aace7d476d1fd76443627980504133477e19c8ecb", + "zh:d6f526fbbb3e51b3acc3b9640a158f7acc4a089632fca8ec6db430b450673f25", + "zh:e0c542950f96c93e761d50602e449fef8447f1389a6d5242a0a7dc9b06826d0b", ] } provider "registry.terraform.io/hashicorp/random" { - version = "3.6.3" - constraints = "3.6.3" + version = "3.7.1" + constraints = "3.7.1" hashes = [ - "h1:+UItZOLue/moJfnI3tqZBQbXUYR4ZnqPYfJDJPgLZy0=", - "h1:Fnaec9vA8sZ8BXVlN3Xn9Jz3zghSETIKg7ch8oXhxno=", - "h1:In4XBRMdhY89yUoTUyar3wDF28RJlDpQzdjahp59FAk=", - "h1:f6jXn4MCv67kgcofx9D49qx1ZEBv8oyvwKDMPBr0A24=", - "h1:zG9uFP8l9u+yGZZvi5Te7PV62j50azpgwPunq2vTm1E=", - "zh:04ceb65210251339f07cd4611885d242cd4d0c7306e86dda9785396807c00451", - "zh:448f56199f3e99ff75d5c0afacae867ee795e4dfda6cb5f8e3b2a72ec3583dd8", - "zh:4b4c11ccfba7319e901df2dac836b1ae8f12185e37249e8d870ee10bb87a13fe", - "zh:4fa45c44c0de582c2edb8a2e054f55124520c16a39b2dfc0355929063b6395b1", - "zh:588508280501a06259e023b0695f6a18149a3816d259655c424d068982cbdd36", - "zh:737c4d99a87d2a4d1ac0a54a73d2cb62974ccb2edbd234f333abd079a32ebc9e", + "h1:/qtweZW2sk0kBNiQM02RvBXmlVdI9oYqRMCyBZ8XA98=", + "h1:0XCd0Y9HVdDcEbwxF18e49HB+YRO+QQ24H3jDgmFPEE=", + "h1:Jvr+8mqBJlxSOF8R862ZtezBlCb9pVwNMNc1sYsDeYg=", + "h1:ji/JgTChmJj8a9PaXja2PiYJhR4iZBX34FDfxnqeZIA=", + "h1:t152MY0tQH4a8fLzTtEWx70ITd3azVOrFDn/pQblbto=", + "zh:3193b89b43bf5805493e290374cdda5132578de6535f8009547c8b5d7a351585", + "zh:3218320de4be943e5812ed3de995946056db86eb8d03aa3f074e0c7316599bef", + "zh:419861805a37fa443e7d63b69fb3279926ccf98a79d256c422d5d82f0f387d1d", + "zh:4df9bd9d839b8fc11a3b8098a604b9b46e2235eb65ef15f4432bde0e175f9ca6", + "zh:5814be3f9c9cc39d2955d6f083bae793050d75c572e70ca11ccceb5517ced6b1", + "zh:63c6548a06de1231c8ee5570e42ca09c4b3db336578ded39b938f2156f06dd2e", + "zh:697e434c6bdee0502cc3deb098263b8dcd63948e8a96d61722811628dce2eba1", "zh:78d5eefdd9e494defcb3c68d282b8f96630502cac21d1ea161f53cfe9bb483b3", - "zh:a357ab512e5ebc6d1fda1382503109766e21bbfdfaa9ccda43d313c122069b30", - "zh:c51bfb15e7d52cc1a2eaec2a903ac2aff15d162c172b1b4c17675190e8147615", - "zh:e0951ee6fa9df90433728b96381fb867e3db98f66f735e0c3e24f8f16903f0ad", - "zh:e3cdcb4e73740621dabd82ee6a37d6cfce7fee2a03d8074df65086760f5cf556", - "zh:eff58323099f1bd9a0bec7cb04f717e7f1b2774c7d612bf7581797e1622613a0", + "zh:a0b8e44927e6327852bbfdc9d408d802569367f1e22a95bcdd7181b1c3b07601", + "zh:b7d3af018683ef22794eea9c218bc72d7c35a2b3ede9233b69653b3c782ee436", + "zh:d63b911d618a6fe446c65bfc21e793a7663e934b2fef833d42d3ccd38dd8d68d", + "zh:fa985cd0b11e6d651f47cff3055f0a9fd085ec190b6dbe99bf5448174434cdea", ] } diff --git a/terraform/infrastructure/aws/main.tf b/terraform/infrastructure/aws/main.tf index fa86bee7f..37d63896b 100644 --- a/terraform/infrastructure/aws/main.tf +++ b/terraform/infrastructure/aws/main.tf @@ -2,11 +2,11 @@ terraform { required_providers { aws = { source = "hashicorp/aws" - version = "5.88.0" + version = "5.89.0" } random = { source = "hashicorp/random" - version = "3.6.3" + version = "3.7.1" } } } diff --git a/terraform/infrastructure/aws/modules/instance_group/main.tf b/terraform/infrastructure/aws/modules/instance_group/main.tf index d7140cfd4..e4a87f5d8 100644 --- a/terraform/infrastructure/aws/modules/instance_group/main.tf +++ b/terraform/infrastructure/aws/modules/instance_group/main.tf @@ -2,11 +2,11 @@ terraform { required_providers { aws = { source = "hashicorp/aws" - version = "5.88.0" + version = "5.89.0" } random = { source = "hashicorp/random" - version = "3.6.3" + version = "3.7.1" } } } diff --git a/terraform/infrastructure/aws/modules/jump_host/main.tf b/terraform/infrastructure/aws/modules/jump_host/main.tf index 6dd0503c5..e37632fe6 100644 --- a/terraform/infrastructure/aws/modules/jump_host/main.tf +++ b/terraform/infrastructure/aws/modules/jump_host/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { aws = { source = "hashicorp/aws" - version = "5.88.0" + version = "5.89.0" } } } diff --git a/terraform/infrastructure/aws/modules/load_balancer_target/main.tf b/terraform/infrastructure/aws/modules/load_balancer_target/main.tf index a7b70a480..e16de138f 100644 --- a/terraform/infrastructure/aws/modules/load_balancer_target/main.tf +++ b/terraform/infrastructure/aws/modules/load_balancer_target/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { aws = { source = "hashicorp/aws" - version = "5.88.0" + version = "5.89.0" } } } diff --git a/terraform/infrastructure/aws/modules/public_private_subnet/main.tf b/terraform/infrastructure/aws/modules/public_private_subnet/main.tf index 83a59d58e..50981afda 100644 --- a/terraform/infrastructure/aws/modules/public_private_subnet/main.tf +++ b/terraform/infrastructure/aws/modules/public_private_subnet/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { aws = { source = "hashicorp/aws" - version = "5.88.0" + version = "5.89.0" } } } diff --git a/terraform/infrastructure/azure/.terraform.lock.hcl b/terraform/infrastructure/azure/.terraform.lock.hcl index 8294746f1..43bb74a62 100644 --- a/terraform/infrastructure/azure/.terraform.lock.hcl +++ b/terraform/infrastructure/azure/.terraform.lock.hcl @@ -2,62 +2,62 @@ # Manual edits may be lost in future updates. provider "registry.terraform.io/hashicorp/azurerm" { - version = "4.20.0" - constraints = "4.20.0" + version = "4.21.0" + constraints = "4.21.0" hashes = [ - "h1:/zBU/N0BTzGRlCUTnFvYg8UiD7Bh4HryW3y3AVDROjc=", - "h1:8TynqZl/QvhZiutnNk9uJZliWb20c9G+G8bGtTiliXI=", - "h1:BZDq7lDdLTYgIeAsLaiXLn8qycoR9D+NFs/OaC6LqNs=", - "h1:ELnu4gb15QAtc1RurC1H6A5OmV3zILizqbuL8kwUEmo=", - "h1:EMP1r+hGjE4zwj31RnVYEu0CLh3x7QSZ+4Z1ysVeqyM=", - "h1:O7hZA85M9/G5LZt+m0bppCinoyp8C346JpI+QnMjYVo=", - "h1:RAigruLqw4uLPyHtFnrgEsYNoZZG/sN+N1waujuiE6w=", - "h1:iWgZaQbV+/YXmO1+47R82zKF6ozCN8nnwLchYRiBtMo=", - "h1:m0gw9qg+hu43PlWDZuTKCFGp0SvBJIv338lIHOqLZmU=", - "h1:qMMFID97Se3U3dxypUF6edxz6TJG/WQfwO1mwOd3ze4=", - "h1:xyhSZmLLirjEN7lmrh4pdM6fOhaA0yWpHUgXdx69vV4=", - "zh:0d29f06abed90da7b943690244420fe1de3e28d4c6de0db441f1af2aa91ea6b8", - "zh:2345e07e91dfec9af3df25fd5119d3a09f91e37ca10af30a344f7b3c297e9ad8", - "zh:42d77650df0238333bcce5da91b4f3d62e54b1ed456f58a9c913270d80a70262", - "zh:43ce137f2644769ceada99a2c815c9c30807e42f61f2f6ce60869411217375f9", - "zh:5e4d8f6a5212f6b7ba29846a2ff328214c7f983ce772196f8e6721edcefd4c59", - "zh:69613d671884fc568a075359e2920d7c19e6d588717b4532b90fb4a4ca8aabd0", - "zh:827ca4fcc25958c731677cb1d87cb09764e3a24ae4117fd9776429341fcdeabe", - "zh:8fad25f949dff7c6f40ea22b13a8b4de6ea0de3c5a975c4a3281529e4797e897", - "zh:b3d175e2725fe38f2a71d5fb346a9d4ff70d449a9d229c95c24f88e764dd2d47", - "zh:c53f3fef67aa64664c85bb8603b0a9730a267a76d7d84ceae16416de7ccb2437", + "h1:6Zce/bfJTubd9VZP+SduO6yD8B51yoeeUe5XyP+n8Tg=", + "h1:8VVtYcBaHWoyQw5DszL36a5Tbx7zGg8jsMPWDjNtkds=", + "h1:J1EF/O3HfSOSwhPEyXfXq1D1eOFySXSjQoElYWsUi9w=", + "h1:MkHYR2jMC/9CJQT9uZwHb3Lr2UTR+GSB1NVzSBd70MI=", + "h1:N2uMJqzYnR+aq7i75T6JX1pAI7Zg6zjpUIiaR2u36V4=", + "h1:SrzAtKrwc16XfEn7XLO8naHMr/q33SpHOEsnWN/L0HI=", + "h1:VaLnj0MaKBjPbAMwCyuJMYmKftnCU8q0XXQDaaAWQns=", + "h1:e1SrjIeLOMHizlsDugvd1qjRpeD1TFzLmU6k+yfztlA=", + "h1:fTq06csKOkoAqtkJn4FXn37wyRlJ0EJJgpe3CWMhIpU=", + "h1:gMu4FGlBedcPsbmKgqHRbT6HYanAqlpcozFAsnbrwhI=", + "h1:mo9aGGJoAiFRf5bBMPlsG6AsDaLqbvPgwkASgdHbiY8=", + "zh:166573ccd95258c761c5ee17ba53b1bf38aac59839fb67303489ca76a4fe39cf", + "zh:17ad468923b68620e0c976a51c512fedd640758f29647650fcdeff5fdfafb731", + "zh:4bb4c6674c3f4776da7fc193a78f929e872144e90821e9e834f02898a0a5b64d", + "zh:5be6d97f17709829fdac01067c5a793a3e3a01d5253107a43b8b94d6837a684b", + "zh:5d9a332a4854ec3e3c5fd185fade10c1b4b71ab8b1ee5d18e26fc29bb5648d83", + "zh:6bfb004b4eb8e041190f8ded8facd2530482eb83af0dead8cd1634abc831510b", + "zh:8b0c42fcd58370e3e4531ab721a09931af857043ee0b3f45404020fd1fdf7382", + "zh:9271775dffaea0d902e41acee737e95e1016a28f168792d06679cfc93e843ed5", + "zh:9cf0b0c48d9a3b21e74eda4f6198c117f52348768e9d0fcf8af933a2a15b6f83", + "zh:a0454a9f08b9de55382715d915be5f56e060e1c11dbd4304e5452518f402d9c1", + "zh:d9b4ea1a8ac558c09484d70f94a16deed35902e06943edb0b1f4ea5bca81feff", "zh:f569b65999264a9416862bca5cd2a6177d94ccb0424f3a4ef424428912b9cb3c", - "zh:f7d9ff06344547232e6c84bc3f6bf9c29cf978ba7cd585c10f4c3361a4b81f22", ] } provider "registry.terraform.io/hashicorp/random" { - version = "3.6.3" - constraints = "3.6.3" + version = "3.7.1" + constraints = "3.7.1" hashes = [ - "h1:+UItZOLue/moJfnI3tqZBQbXUYR4ZnqPYfJDJPgLZy0=", - "h1:4LlZaEeRPQNeQVS/qkH33e0fw92dZV8bS855mhDZ5GU=", - "h1:Fnaec9vA8sZ8BXVlN3Xn9Jz3zghSETIKg7ch8oXhxno=", - "h1:In4XBRMdhY89yUoTUyar3wDF28RJlDpQzdjahp59FAk=", - "h1:LFe/7Z6YZvnrBcYhSEQY50DfS3uoDKBakwdqVXcEQkc=", - "h1:N2IQabOiZC5eCEGrfgVS6ChVmRDh1ENtfHgGjnV4QQQ=", - "h1:aP69UhBhTPIVy1laxOTwOVRPB5Gv3WP9wKPyAnYd8DI=", - "h1:f6jXn4MCv67kgcofx9D49qx1ZEBv8oyvwKDMPBr0A24=", - "h1:ph2J8mV6yYVsaN6FIsxhpWv//QuloQESo4tAZU732Uk=", - "h1:swbWBC5hf9ijj1BQcCpwLOI1m1tXH2KNGp8TEqnMiAY=", - "h1:zG9uFP8l9u+yGZZvi5Te7PV62j50azpgwPunq2vTm1E=", - "zh:04ceb65210251339f07cd4611885d242cd4d0c7306e86dda9785396807c00451", - "zh:448f56199f3e99ff75d5c0afacae867ee795e4dfda6cb5f8e3b2a72ec3583dd8", - "zh:4b4c11ccfba7319e901df2dac836b1ae8f12185e37249e8d870ee10bb87a13fe", - "zh:4fa45c44c0de582c2edb8a2e054f55124520c16a39b2dfc0355929063b6395b1", - "zh:588508280501a06259e023b0695f6a18149a3816d259655c424d068982cbdd36", - "zh:737c4d99a87d2a4d1ac0a54a73d2cb62974ccb2edbd234f333abd079a32ebc9e", + "h1:/qtweZW2sk0kBNiQM02RvBXmlVdI9oYqRMCyBZ8XA98=", + "h1:0XCd0Y9HVdDcEbwxF18e49HB+YRO+QQ24H3jDgmFPEE=", + "h1:2tp72AGbuQyxyDYaaoxJk1el0AQ81Gjy2RWlVxS4BKw=", + "h1:4zid4G8d3tiQThQGwOcFk+EAyvpSkq2bFKSQ1vzfmKU=", + "h1:FMjX0VzHGDmqmz1TNQsq1W2Cfn/H/IR81YmIotHh5uY=", + "h1:Jvr+8mqBJlxSOF8R862ZtezBlCb9pVwNMNc1sYsDeYg=", + "h1:aNMs1vK7xE3QjsSDTTWTwNeNsbSCgOW2valnbyc9TIw=", + "h1:g+mDU6wEJJOSI7/tPh0Tc4i2XjrXAfqKXuiVM9Di194=", + "h1:ji/JgTChmJj8a9PaXja2PiYJhR4iZBX34FDfxnqeZIA=", + "h1:t+sEwSvzYaq0d3FNuzdn7snQPZqmbn3q5uwF7TSDNXQ=", + "h1:t152MY0tQH4a8fLzTtEWx70ITd3azVOrFDn/pQblbto=", + "zh:3193b89b43bf5805493e290374cdda5132578de6535f8009547c8b5d7a351585", + "zh:3218320de4be943e5812ed3de995946056db86eb8d03aa3f074e0c7316599bef", + "zh:419861805a37fa443e7d63b69fb3279926ccf98a79d256c422d5d82f0f387d1d", + "zh:4df9bd9d839b8fc11a3b8098a604b9b46e2235eb65ef15f4432bde0e175f9ca6", + "zh:5814be3f9c9cc39d2955d6f083bae793050d75c572e70ca11ccceb5517ced6b1", + "zh:63c6548a06de1231c8ee5570e42ca09c4b3db336578ded39b938f2156f06dd2e", + "zh:697e434c6bdee0502cc3deb098263b8dcd63948e8a96d61722811628dce2eba1", "zh:78d5eefdd9e494defcb3c68d282b8f96630502cac21d1ea161f53cfe9bb483b3", - "zh:a357ab512e5ebc6d1fda1382503109766e21bbfdfaa9ccda43d313c122069b30", - "zh:c51bfb15e7d52cc1a2eaec2a903ac2aff15d162c172b1b4c17675190e8147615", - "zh:e0951ee6fa9df90433728b96381fb867e3db98f66f735e0c3e24f8f16903f0ad", - "zh:e3cdcb4e73740621dabd82ee6a37d6cfce7fee2a03d8074df65086760f5cf556", - "zh:eff58323099f1bd9a0bec7cb04f717e7f1b2774c7d612bf7581797e1622613a0", + "zh:a0b8e44927e6327852bbfdc9d408d802569367f1e22a95bcdd7181b1c3b07601", + "zh:b7d3af018683ef22794eea9c218bc72d7c35a2b3ede9233b69653b3c782ee436", + "zh:d63b911d618a6fe446c65bfc21e793a7663e934b2fef833d42d3ccd38dd8d68d", + "zh:fa985cd0b11e6d651f47cff3055f0a9fd085ec190b6dbe99bf5448174434cdea", ] } diff --git a/terraform/infrastructure/azure/main.tf b/terraform/infrastructure/azure/main.tf index e115a1971..40ff289b3 100644 --- a/terraform/infrastructure/azure/main.tf +++ b/terraform/infrastructure/azure/main.tf @@ -2,11 +2,11 @@ terraform { required_providers { azurerm = { source = "hashicorp/azurerm" - version = "4.20.0" + version = "4.21.0" } random = { source = "hashicorp/random" - version = "3.6.3" + version = "3.7.1" } } } diff --git a/terraform/infrastructure/azure/modules/load_balancer_backend/main.tf b/terraform/infrastructure/azure/modules/load_balancer_backend/main.tf index 4ad3b2f38..573a05821 100644 --- a/terraform/infrastructure/azure/modules/load_balancer_backend/main.tf +++ b/terraform/infrastructure/azure/modules/load_balancer_backend/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { azurerm = { source = "hashicorp/azurerm" - version = "4.20.0" + version = "4.21.0" } } } diff --git a/terraform/infrastructure/azure/modules/scale_set/main.tf b/terraform/infrastructure/azure/modules/scale_set/main.tf index a8e205cd0..a149799ea 100644 --- a/terraform/infrastructure/azure/modules/scale_set/main.tf +++ b/terraform/infrastructure/azure/modules/scale_set/main.tf @@ -2,11 +2,11 @@ terraform { required_providers { azurerm = { source = "hashicorp/azurerm" - version = "4.20.0" + version = "4.21.0" } random = { source = "hashicorp/random" - version = "3.6.3" + version = "3.7.1" } } } diff --git a/terraform/infrastructure/gcp/.terraform.lock.hcl b/terraform/infrastructure/gcp/.terraform.lock.hcl index d5c3ad220..c8404f671 100644 --- a/terraform/infrastructure/gcp/.terraform.lock.hcl +++ b/terraform/infrastructure/gcp/.terraform.lock.hcl @@ -2,55 +2,49 @@ # Manual edits may be lost in future updates. provider "registry.terraform.io/hashicorp/google" { - version = "6.21.0" - constraints = "6.21.0" + version = "6.23.0" + constraints = "6.23.0" hashes = [ - "h1:/2ryBD3VQ/z8JXb5eyHvSdTCeLFNakInr/L7Dxbty+0=", - "h1:3H1lP+5rZ0tgYR1KdXW685CdfZwPIMXZZwfV8Sxk9uY=", - "h1:8gVYYyXvXKolFLbLS7i7A4l+3Yn8daf0frtgtzGHCm4=", - "h1:FAlxafbm3jeUgH4l+NdOuqbdu2yGnq68cTMTq9aBYmE=", - "h1:M4X6/r6w8QrkzoOu/8+61+fkYy4+kqNt1fbHE7Igvgg=", - "h1:TS3CkZ8djIu+v9NJ8PxreYD3hywG8sbeTbtpQQcD5tg=", - "h1:Uhpn0W3JpwQr9WlzDZwOdTtWPlv1buGljc0096etzjM=", - "h1:dcklD/rIK/ES/o8AybEMCqkqMJcYCDy90su7umQHHnY=", - "h1:ia0GGmKDt45bBjld4tapN3fFrrg4yVziFTaWWDM6sxc=", - "h1:pZhpGdzOtzGkX38PIYbXWilwA/LtWXQ22dkt6Fh2DAQ=", - "h1:uiKyMwXmBBeXZv471jVUZBuRXUgIGwwheKW3mcVHq8Q=", - "zh:1c2462367d92f6f8f6c527115905f7cca78e48cf5d5bc7448d3beeb7c9e895eb", - "zh:3644dbd09c3740e6d843e035de34a74ed41ffc32e7ed04a19aecddc4c57334cc", - "zh:3a586bbb9a9c6463c975a94ddd4671f2a84992a2c169bfb2f5053c2cea55849c", - "zh:4ae96672e6a52a077760a11c95946ec9d3f84f7ab84c0ba3c0cb66c3d3580d59", - "zh:9c26b3dbc1f9a594d1d07b6a25ce089f8463e8331324f4ecde73829e9d1d5ee5", - "zh:b99a602111d6ca5842c852ac1eff5c009f1d75492e355ea25f3dbd6e008e4d9a", - "zh:d45100c41c940c35c07fae2876f6cc654328d405077f01d268e8bd5a25b56c30", - "zh:de6e14e85a9ea2322a4fd971fde3b71071e7b6435a12dbcd3b8c5f42765e8b3c", - "zh:e22f6b54cfebb0c1a0991d83adc83b3d454ba6d9b5c21574af135799b488ed66", + "h1:AQqvilOF4FnbXO/c84HsNkJ+TyZEs+N12iHYFnwvNOM=", + "h1:Gr39ABNw+A6lwP2gPG+yCzGmU5T97iI5qT0XLCd3Dh4=", + "h1:TLMWskwzbDsyfi6LaqTD0ckSTT4rtpGLF/QCojaDiec=", + "h1:oAaJhkB2s1y4fSESXi73zJxdHhC7NdB7rdFN6KH2uY8=", + "h1:uBPMb39cwdZE6XAPkTynWdIdChkj1IPrhqPHd+BffE4=", + "zh:032dd78eff887a673a1067008a8e47a69983bbcea9f41832320470247a76863a", + "zh:1af89f75142cf9c54499a466c8dc7055e2bbf02771a6b8c8cd57eb13dce9a800", + "zh:3696a8e72c6cef80fec3c3574fc8519f0410f23f6dc3e3540d2f03345c140d38", + "zh:58a15c71ae128ff64117c1c6b9ccf8ab2ac3e8f9c2c52957d8327f93495f62b1", + "zh:70ba2909611e8d1cc8009567e50e195c4269e6582d6a6fa0bce0d4e6313ab8d5", + "zh:8f8489d1eb8c189d59dc85e519e51ab4c4b1940e4d72450ae130ba752028fa01", + "zh:99c8c4e8dc67a7ab597d46ed566f64c4409761276f34bd863457a37254620fa6", + "zh:9b24d53440e8d7e06020e7b3aeca0dde4f1a3ef997d7da05ff3acb918896fcc2", + "zh:b3667fd6057997dbf0bd0179ddf686c272d4ab4fc7da6a03fdf2fad31ad4ecb5", + "zh:cc6df6d2291a337a5f434b7335c693164c6987604b9690d6b953b796d8eaa08a", + "zh:d871f39c3c5b63995793c9a70f107e52ca699d211c770a6e7ebc398ba59bcdc7", "zh:f569b65999264a9416862bca5cd2a6177d94ccb0424f3a4ef424428912b9cb3c", - "zh:f6964268874a15788dfed47a26cb880718f47c94cba7c8a0284b70921fec807b", - "zh:ff51b3e83149798ce6c7545688fe3b9703b04d5c0376cd55215a93767144f40e", ] } provider "registry.terraform.io/hashicorp/random" { - version = "3.6.3" - constraints = "3.6.3" + version = "3.7.1" + constraints = "3.7.1" hashes = [ - "h1:+UItZOLue/moJfnI3tqZBQbXUYR4ZnqPYfJDJPgLZy0=", - "h1:Fnaec9vA8sZ8BXVlN3Xn9Jz3zghSETIKg7ch8oXhxno=", - "h1:In4XBRMdhY89yUoTUyar3wDF28RJlDpQzdjahp59FAk=", - "h1:f6jXn4MCv67kgcofx9D49qx1ZEBv8oyvwKDMPBr0A24=", - "h1:zG9uFP8l9u+yGZZvi5Te7PV62j50azpgwPunq2vTm1E=", - "zh:04ceb65210251339f07cd4611885d242cd4d0c7306e86dda9785396807c00451", - "zh:448f56199f3e99ff75d5c0afacae867ee795e4dfda6cb5f8e3b2a72ec3583dd8", - "zh:4b4c11ccfba7319e901df2dac836b1ae8f12185e37249e8d870ee10bb87a13fe", - "zh:4fa45c44c0de582c2edb8a2e054f55124520c16a39b2dfc0355929063b6395b1", - "zh:588508280501a06259e023b0695f6a18149a3816d259655c424d068982cbdd36", - "zh:737c4d99a87d2a4d1ac0a54a73d2cb62974ccb2edbd234f333abd079a32ebc9e", + "h1:/qtweZW2sk0kBNiQM02RvBXmlVdI9oYqRMCyBZ8XA98=", + "h1:0XCd0Y9HVdDcEbwxF18e49HB+YRO+QQ24H3jDgmFPEE=", + "h1:Jvr+8mqBJlxSOF8R862ZtezBlCb9pVwNMNc1sYsDeYg=", + "h1:ji/JgTChmJj8a9PaXja2PiYJhR4iZBX34FDfxnqeZIA=", + "h1:t152MY0tQH4a8fLzTtEWx70ITd3azVOrFDn/pQblbto=", + "zh:3193b89b43bf5805493e290374cdda5132578de6535f8009547c8b5d7a351585", + "zh:3218320de4be943e5812ed3de995946056db86eb8d03aa3f074e0c7316599bef", + "zh:419861805a37fa443e7d63b69fb3279926ccf98a79d256c422d5d82f0f387d1d", + "zh:4df9bd9d839b8fc11a3b8098a604b9b46e2235eb65ef15f4432bde0e175f9ca6", + "zh:5814be3f9c9cc39d2955d6f083bae793050d75c572e70ca11ccceb5517ced6b1", + "zh:63c6548a06de1231c8ee5570e42ca09c4b3db336578ded39b938f2156f06dd2e", + "zh:697e434c6bdee0502cc3deb098263b8dcd63948e8a96d61722811628dce2eba1", "zh:78d5eefdd9e494defcb3c68d282b8f96630502cac21d1ea161f53cfe9bb483b3", - "zh:a357ab512e5ebc6d1fda1382503109766e21bbfdfaa9ccda43d313c122069b30", - "zh:c51bfb15e7d52cc1a2eaec2a903ac2aff15d162c172b1b4c17675190e8147615", - "zh:e0951ee6fa9df90433728b96381fb867e3db98f66f735e0c3e24f8f16903f0ad", - "zh:e3cdcb4e73740621dabd82ee6a37d6cfce7fee2a03d8074df65086760f5cf556", - "zh:eff58323099f1bd9a0bec7cb04f717e7f1b2774c7d612bf7581797e1622613a0", + "zh:a0b8e44927e6327852bbfdc9d408d802569367f1e22a95bcdd7181b1c3b07601", + "zh:b7d3af018683ef22794eea9c218bc72d7c35a2b3ede9233b69653b3c782ee436", + "zh:d63b911d618a6fe446c65bfc21e793a7663e934b2fef833d42d3ccd38dd8d68d", + "zh:fa985cd0b11e6d651f47cff3055f0a9fd085ec190b6dbe99bf5448174434cdea", ] } diff --git a/terraform/infrastructure/gcp/main.tf b/terraform/infrastructure/gcp/main.tf index 5be9a8f17..cd66002d9 100644 --- a/terraform/infrastructure/gcp/main.tf +++ b/terraform/infrastructure/gcp/main.tf @@ -2,12 +2,12 @@ terraform { required_providers { google = { source = "hashicorp/google" - version = "6.21.0" + version = "6.23.0" } random = { source = "hashicorp/random" - version = "3.6.3" + version = "3.7.1" } } } diff --git a/terraform/infrastructure/gcp/modules/instance_group/main.tf b/terraform/infrastructure/gcp/modules/instance_group/main.tf index 910721a71..1726435e6 100644 --- a/terraform/infrastructure/gcp/modules/instance_group/main.tf +++ b/terraform/infrastructure/gcp/modules/instance_group/main.tf @@ -2,12 +2,12 @@ terraform { required_providers { google = { source = "hashicorp/google" - version = "6.21.0" + version = "6.23.0" } random = { source = "hashicorp/random" - version = "3.6.3" + version = "3.7.1" } } } diff --git a/terraform/infrastructure/gcp/modules/internal_load_balancer/main.tf b/terraform/infrastructure/gcp/modules/internal_load_balancer/main.tf index 66fc745aa..0a6b325e8 100644 --- a/terraform/infrastructure/gcp/modules/internal_load_balancer/main.tf +++ b/terraform/infrastructure/gcp/modules/internal_load_balancer/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { google = { source = "hashicorp/google" - version = "6.21.0" + version = "6.23.0" } } } diff --git a/terraform/infrastructure/gcp/modules/jump_host/main.tf b/terraform/infrastructure/gcp/modules/jump_host/main.tf index 112d0db5f..4417b4efb 100644 --- a/terraform/infrastructure/gcp/modules/jump_host/main.tf +++ b/terraform/infrastructure/gcp/modules/jump_host/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { google = { source = "hashicorp/google" - version = "6.21.0" + version = "6.23.0" } } } diff --git a/terraform/infrastructure/gcp/modules/loadbalancer/main.tf b/terraform/infrastructure/gcp/modules/loadbalancer/main.tf index 567093b97..c0cdf5327 100644 --- a/terraform/infrastructure/gcp/modules/loadbalancer/main.tf +++ b/terraform/infrastructure/gcp/modules/loadbalancer/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { google = { source = "hashicorp/google" - version = "6.21.0" + version = "6.23.0" } } } diff --git a/terraform/infrastructure/iam/aws/.terraform.lock.hcl b/terraform/infrastructure/iam/aws/.terraform.lock.hcl index f39a26eb9..7ef614685 100644 --- a/terraform/infrastructure/iam/aws/.terraform.lock.hcl +++ b/terraform/infrastructure/iam/aws/.terraform.lock.hcl @@ -2,61 +2,67 @@ # Manual edits may be lost in future updates. provider "registry.terraform.io/hashicorp/aws" { - version = "5.88.0" - constraints = "5.88.0" + version = "5.89.0" + constraints = "5.89.0" hashes = [ - "h1:8So0IR8jwKx8WhVuD1LDsbeMTe78/SF5g4d7z5C6+C4=", - "h1:CtUi38/zeD7FmxC327T/r1RGze7GNrC8QFaSSBy7u9M=", - "h1:Gsl/jrA6UmJI6iJg5HtQuZWERwWFyl8361jicsGEOj4=", - "h1:H9Ur5AHP1XwvGS7tJvPMo7JNFxHYwxsYtXBML0gas9A=", - "h1:Lox8X0csC/88j8PokcK1rTRDLBYpSASQyurE27e6C+Y=", - "h1:NpZJqGhTv3LsjL0Jg8OBpIto5cbyahoyn6bNlQ0XbVI=", - "h1:PXaP+z5Z9pcUUcJqS6ea09wR/cscBq1F9jRsNqe39rM=", - "h1:Uqmvemsy5d+fqf21wwnqQOx/RQg0mJ3gXdWRWQs7cKc=", - "h1:YwZyjmqgCzgSq5YzfPmb8Iqy5u/7SiJECeUyQK8kma0=", - "h1:aXxdTbDqZ7sIv0eKcpB1iNGH+gjwYjYZuJAAtXKSkTU=", - "h1:nks+LOLQf0gfh7EZCqpWErw9/03yqYDEaGxYqUfEc78=", - "h1:u8hinU3pUne1S4oijYQHzx4ynQDRzJ8gpwgxtDu8KlA=", - "h1:vZVMI4zaLpESWoN79JGDBTqTxM+bt5PoIx/bt0NC2+A=", - "h1:wZQjYp5BEHgwnX2sb7OTiiXxueVJOVFtkb4K1GVAtL4=", - "zh:24f852b1cca276d91f950cb7fb575cacc385f55edccf4beec1f611cdd7626cf5", - "zh:2a3b3f5ac513f8d6448a31d9619f8a96e0597dd354459de3a4698e684c909f96", - "zh:3700499885a8e0e532eccba3cb068340e411cf9e616bf8a59e815d3b62ca3e46", - "zh:4aab3605468244a74cbde66784ea1d30dc0fc6caf26d1b099427ecd5790f7c4d", - "zh:74eca9314d6dd80b215d7bc1c4be37d81e1045d625d5b512995f3a352d7a43bc", - "zh:77d9a06c63a4ad615bc97f67f948250397267f15698ebb2547fbdd20f734983c", - "zh:82d6aaef1eb0caf9ca451887fdbdcff10ab09318b1d60faa883a013283ab2b15", - "zh:8dbcfb121b887ce8572f5ab8174d592a729390ca32dc5fdacac4c7c1c508411a", - "zh:95d51e80b55ff9064f5c1bc61d78f992e2f89c986ba2b10546ea4461d35c24f9", + "h1:3hTpe3sckeeiq6DK9hnFnGf4fe55ZkOlEFbSlRtho5c=", + "h1:8SF2vIssFnD3R0aKIf678ZNka7dLdFqrJR5jO6q59zo=", + "h1:GU9sbCWMHvuDpMNh64sdN5nAThRjm5pHk8di8CEtZ60=", + "h1:LEGcR6yAdoJdJQR8zQskkmwu8zxElUNNQb7DCnutC3Y=", + "h1:NaNxQqZLsXZVXKKch3RwCjNJj2kPS6KBEd7AOZaJb54=", + "h1:gQxdrzAyG5IUN1w6fKRwEkBuD/F8x2lylkbRFdMS/Sw=", + "h1:o1gdfEioSuFXM47mlSNm4oW8MCNAGpqqCOCNgWmCc3M=", + "h1:qaRawpN4LV74lCwQCou9oUhY23kKVLxIj000NN3E9EA=", + "h1:rFvk42jJEKiSUhK1cbERfNgYm4mD+8tq0ZcxCwpXSJs=", + "h1:rzJKGweH0c8kaSC1xWkpc9VG2fIGUFs6AB2rN6ZavgA=", + "h1:xknpTAuujOZwmfL4HvbAA7HXt5NtZcKEJQHPmncBxw0=", + "h1:xwlkBwTfdL+H/tcI/HlAxQYDsO7+tuAZPuB1JilJsvE=", + "h1:xzXmecbF02pjS9yF+k1g2ESdkPzbuHc9SmvUvn1EXVQ=", + "h1:yK0t+VEztYYyDVU8x2JddCH9WaOhOXOrB+dK8PpJAoU=", + "zh:0e55784d6effc33b9098ffab7fb77a242e0223a59cdcf964caa0be94d14684af", + "zh:23c64f3eaeffcafb007c89db3dfca94c8adf06b120af55abddaca55a6c6c924c", + "zh:338f620133cb607ce980f1725a0a78f61cbd42f4c601808ec1ee01a6c16c9811", + "zh:6ab0499172f17484d7b39924cf06782789df1473d31ebae0c7f3294f6e7a1227", + "zh:6dcde3e29e538cdf80971cbdce3b285056fd0e31dd64b02d2dcdf4c02f21d0a9", + "zh:75c9b594d77c9125bfb1aaf3fbd77a49e392841d53029b5726eb71d64de1233e", + "zh:7b334c23091e7b4c142e378416586292197c40a31a5bdb3b29c4f9afddd286f0", + "zh:991bbba72e5eb6eb351f466d68080992f5b0495f862a6723f386d1b4c965aa7d", "zh:9b12af85486a96aedd8d7984b0ff811a4b42e3d88dad1a3fb4c0b580d04fa425", - "zh:9ead5de0e123020926a0edaf88d9eed5cb86afe438a875528f6d11d0d27eed73", - "zh:ab7c940cbb2081314f4af3cdd61ed2c1d59fd7a60fa3db27770887d63072fbdd", - "zh:d52cd68006fd6fa8d028cdf569a6620fbc31726019beb7c75affa8764622d398", - "zh:f179ca86ad5d5fb88dfd8e8e7c448f2c0ad550d22152f939b8465baeaf9289e9", - "zh:f54dda271fa6dfee06537066278669a3f92c872e7dfa5a0184cd9117f7e47b8c", + "zh:9bd2f12eef4a5dceafc211ab3b9a63f0e3e224007a60c1bbb842f76e0377033d", + "zh:b1ac1eb3b3e1a79fa5e5ad3364615f23b9ee0b093ceeb809fd386a4d40e7abb4", + "zh:cea91f43151b30c428c441b97c3b98bf1e5fb72ef72f6971308e3895e23437f4", + "zh:d3f000a1696a43d8186a516aace7d476d1fd76443627980504133477e19c8ecb", + "zh:d6f526fbbb3e51b3acc3b9640a158f7acc4a089632fca8ec6db430b450673f25", + "zh:e0c542950f96c93e761d50602e449fef8447f1389a6d5242a0a7dc9b06826d0b", ] } provider "registry.terraform.io/hashicorp/random" { - version = "3.6.3" - constraints = "3.6.3" + version = "3.7.1" + constraints = "3.7.1" hashes = [ - "h1:+UItZOLue/moJfnI3tqZBQbXUYR4ZnqPYfJDJPgLZy0=", - "h1:Fnaec9vA8sZ8BXVlN3Xn9Jz3zghSETIKg7ch8oXhxno=", - "h1:In4XBRMdhY89yUoTUyar3wDF28RJlDpQzdjahp59FAk=", - "h1:f6jXn4MCv67kgcofx9D49qx1ZEBv8oyvwKDMPBr0A24=", - "h1:zG9uFP8l9u+yGZZvi5Te7PV62j50azpgwPunq2vTm1E=", - "zh:04ceb65210251339f07cd4611885d242cd4d0c7306e86dda9785396807c00451", - "zh:448f56199f3e99ff75d5c0afacae867ee795e4dfda6cb5f8e3b2a72ec3583dd8", - "zh:4b4c11ccfba7319e901df2dac836b1ae8f12185e37249e8d870ee10bb87a13fe", - "zh:4fa45c44c0de582c2edb8a2e054f55124520c16a39b2dfc0355929063b6395b1", - "zh:588508280501a06259e023b0695f6a18149a3816d259655c424d068982cbdd36", - "zh:737c4d99a87d2a4d1ac0a54a73d2cb62974ccb2edbd234f333abd079a32ebc9e", + "h1:/qtweZW2sk0kBNiQM02RvBXmlVdI9oYqRMCyBZ8XA98=", + "h1:0XCd0Y9HVdDcEbwxF18e49HB+YRO+QQ24H3jDgmFPEE=", + "h1:2tp72AGbuQyxyDYaaoxJk1el0AQ81Gjy2RWlVxS4BKw=", + "h1:4zid4G8d3tiQThQGwOcFk+EAyvpSkq2bFKSQ1vzfmKU=", + "h1:FMjX0VzHGDmqmz1TNQsq1W2Cfn/H/IR81YmIotHh5uY=", + "h1:Jvr+8mqBJlxSOF8R862ZtezBlCb9pVwNMNc1sYsDeYg=", + "h1:aNMs1vK7xE3QjsSDTTWTwNeNsbSCgOW2valnbyc9TIw=", + "h1:g+mDU6wEJJOSI7/tPh0Tc4i2XjrXAfqKXuiVM9Di194=", + "h1:ji/JgTChmJj8a9PaXja2PiYJhR4iZBX34FDfxnqeZIA=", + "h1:t+sEwSvzYaq0d3FNuzdn7snQPZqmbn3q5uwF7TSDNXQ=", + "h1:t152MY0tQH4a8fLzTtEWx70ITd3azVOrFDn/pQblbto=", + "zh:3193b89b43bf5805493e290374cdda5132578de6535f8009547c8b5d7a351585", + "zh:3218320de4be943e5812ed3de995946056db86eb8d03aa3f074e0c7316599bef", + "zh:419861805a37fa443e7d63b69fb3279926ccf98a79d256c422d5d82f0f387d1d", + "zh:4df9bd9d839b8fc11a3b8098a604b9b46e2235eb65ef15f4432bde0e175f9ca6", + "zh:5814be3f9c9cc39d2955d6f083bae793050d75c572e70ca11ccceb5517ced6b1", + "zh:63c6548a06de1231c8ee5570e42ca09c4b3db336578ded39b938f2156f06dd2e", + "zh:697e434c6bdee0502cc3deb098263b8dcd63948e8a96d61722811628dce2eba1", "zh:78d5eefdd9e494defcb3c68d282b8f96630502cac21d1ea161f53cfe9bb483b3", - "zh:a357ab512e5ebc6d1fda1382503109766e21bbfdfaa9ccda43d313c122069b30", - "zh:c51bfb15e7d52cc1a2eaec2a903ac2aff15d162c172b1b4c17675190e8147615", - "zh:e0951ee6fa9df90433728b96381fb867e3db98f66f735e0c3e24f8f16903f0ad", - "zh:e3cdcb4e73740621dabd82ee6a37d6cfce7fee2a03d8074df65086760f5cf556", - "zh:eff58323099f1bd9a0bec7cb04f717e7f1b2774c7d612bf7581797e1622613a0", + "zh:a0b8e44927e6327852bbfdc9d408d802569367f1e22a95bcdd7181b1c3b07601", + "zh:b7d3af018683ef22794eea9c218bc72d7c35a2b3ede9233b69653b3c782ee436", + "zh:d63b911d618a6fe446c65bfc21e793a7663e934b2fef833d42d3ccd38dd8d68d", + "zh:fa985cd0b11e6d651f47cff3055f0a9fd085ec190b6dbe99bf5448174434cdea", ] } diff --git a/terraform/infrastructure/iam/aws/main.tf b/terraform/infrastructure/iam/aws/main.tf index aec15be35..cc090b363 100644 --- a/terraform/infrastructure/iam/aws/main.tf +++ b/terraform/infrastructure/iam/aws/main.tf @@ -2,11 +2,11 @@ terraform { required_providers { aws = { source = "hashicorp/aws" - version = "5.88.0" + version = "5.89.0" } random = { source = "hashicorp/random" - version = "3.6.3" + version = "3.7.1" } } } diff --git a/terraform/infrastructure/iam/azure/.terraform.lock.hcl b/terraform/infrastructure/iam/azure/.terraform.lock.hcl index ad98b498a..2db142b2e 100644 --- a/terraform/infrastructure/iam/azure/.terraform.lock.hcl +++ b/terraform/infrastructure/iam/azure/.terraform.lock.hcl @@ -32,31 +32,31 @@ provider "registry.terraform.io/hashicorp/azuread" { } provider "registry.terraform.io/hashicorp/azurerm" { - version = "4.20.0" - constraints = "4.20.0" + version = "4.21.0" + constraints = "4.21.0" hashes = [ - "h1:/zBU/N0BTzGRlCUTnFvYg8UiD7Bh4HryW3y3AVDROjc=", - "h1:8TynqZl/QvhZiutnNk9uJZliWb20c9G+G8bGtTiliXI=", - "h1:BZDq7lDdLTYgIeAsLaiXLn8qycoR9D+NFs/OaC6LqNs=", - "h1:ELnu4gb15QAtc1RurC1H6A5OmV3zILizqbuL8kwUEmo=", - "h1:EMP1r+hGjE4zwj31RnVYEu0CLh3x7QSZ+4Z1ysVeqyM=", - "h1:O7hZA85M9/G5LZt+m0bppCinoyp8C346JpI+QnMjYVo=", - "h1:RAigruLqw4uLPyHtFnrgEsYNoZZG/sN+N1waujuiE6w=", - "h1:iWgZaQbV+/YXmO1+47R82zKF6ozCN8nnwLchYRiBtMo=", - "h1:m0gw9qg+hu43PlWDZuTKCFGp0SvBJIv338lIHOqLZmU=", - "h1:qMMFID97Se3U3dxypUF6edxz6TJG/WQfwO1mwOd3ze4=", - "h1:xyhSZmLLirjEN7lmrh4pdM6fOhaA0yWpHUgXdx69vV4=", - "zh:0d29f06abed90da7b943690244420fe1de3e28d4c6de0db441f1af2aa91ea6b8", - "zh:2345e07e91dfec9af3df25fd5119d3a09f91e37ca10af30a344f7b3c297e9ad8", - "zh:42d77650df0238333bcce5da91b4f3d62e54b1ed456f58a9c913270d80a70262", - "zh:43ce137f2644769ceada99a2c815c9c30807e42f61f2f6ce60869411217375f9", - "zh:5e4d8f6a5212f6b7ba29846a2ff328214c7f983ce772196f8e6721edcefd4c59", - "zh:69613d671884fc568a075359e2920d7c19e6d588717b4532b90fb4a4ca8aabd0", - "zh:827ca4fcc25958c731677cb1d87cb09764e3a24ae4117fd9776429341fcdeabe", - "zh:8fad25f949dff7c6f40ea22b13a8b4de6ea0de3c5a975c4a3281529e4797e897", - "zh:b3d175e2725fe38f2a71d5fb346a9d4ff70d449a9d229c95c24f88e764dd2d47", - "zh:c53f3fef67aa64664c85bb8603b0a9730a267a76d7d84ceae16416de7ccb2437", + "h1:6Zce/bfJTubd9VZP+SduO6yD8B51yoeeUe5XyP+n8Tg=", + "h1:8VVtYcBaHWoyQw5DszL36a5Tbx7zGg8jsMPWDjNtkds=", + "h1:J1EF/O3HfSOSwhPEyXfXq1D1eOFySXSjQoElYWsUi9w=", + "h1:MkHYR2jMC/9CJQT9uZwHb3Lr2UTR+GSB1NVzSBd70MI=", + "h1:N2uMJqzYnR+aq7i75T6JX1pAI7Zg6zjpUIiaR2u36V4=", + "h1:SrzAtKrwc16XfEn7XLO8naHMr/q33SpHOEsnWN/L0HI=", + "h1:VaLnj0MaKBjPbAMwCyuJMYmKftnCU8q0XXQDaaAWQns=", + "h1:e1SrjIeLOMHizlsDugvd1qjRpeD1TFzLmU6k+yfztlA=", + "h1:fTq06csKOkoAqtkJn4FXn37wyRlJ0EJJgpe3CWMhIpU=", + "h1:gMu4FGlBedcPsbmKgqHRbT6HYanAqlpcozFAsnbrwhI=", + "h1:mo9aGGJoAiFRf5bBMPlsG6AsDaLqbvPgwkASgdHbiY8=", + "zh:166573ccd95258c761c5ee17ba53b1bf38aac59839fb67303489ca76a4fe39cf", + "zh:17ad468923b68620e0c976a51c512fedd640758f29647650fcdeff5fdfafb731", + "zh:4bb4c6674c3f4776da7fc193a78f929e872144e90821e9e834f02898a0a5b64d", + "zh:5be6d97f17709829fdac01067c5a793a3e3a01d5253107a43b8b94d6837a684b", + "zh:5d9a332a4854ec3e3c5fd185fade10c1b4b71ab8b1ee5d18e26fc29bb5648d83", + "zh:6bfb004b4eb8e041190f8ded8facd2530482eb83af0dead8cd1634abc831510b", + "zh:8b0c42fcd58370e3e4531ab721a09931af857043ee0b3f45404020fd1fdf7382", + "zh:9271775dffaea0d902e41acee737e95e1016a28f168792d06679cfc93e843ed5", + "zh:9cf0b0c48d9a3b21e74eda4f6198c117f52348768e9d0fcf8af933a2a15b6f83", + "zh:a0454a9f08b9de55382715d915be5f56e060e1c11dbd4304e5452518f402d9c1", + "zh:d9b4ea1a8ac558c09484d70f94a16deed35902e06943edb0b1f4ea5bca81feff", "zh:f569b65999264a9416862bca5cd2a6177d94ccb0424f3a4ef424428912b9cb3c", - "zh:f7d9ff06344547232e6c84bc3f6bf9c29cf978ba7cd585c10f4c3361a4b81f22", ] } diff --git a/terraform/infrastructure/iam/azure/main.tf b/terraform/infrastructure/iam/azure/main.tf index 42782941d..18f88aeec 100644 --- a/terraform/infrastructure/iam/azure/main.tf +++ b/terraform/infrastructure/iam/azure/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { azurerm = { source = "hashicorp/azurerm" - version = "4.20.0" + version = "4.21.0" } azuread = { source = "hashicorp/azuread" diff --git a/terraform/infrastructure/iam/gcp/.terraform.lock.hcl b/terraform/infrastructure/iam/gcp/.terraform.lock.hcl index 22b3c1b19..5053a8aa4 100644 --- a/terraform/infrastructure/iam/gcp/.terraform.lock.hcl +++ b/terraform/infrastructure/iam/gcp/.terraform.lock.hcl @@ -2,32 +2,32 @@ # Manual edits may be lost in future updates. provider "registry.terraform.io/hashicorp/google" { - version = "6.21.0" - constraints = "6.21.0" + version = "6.23.0" + constraints = "6.23.0" hashes = [ - "h1:/2ryBD3VQ/z8JXb5eyHvSdTCeLFNakInr/L7Dxbty+0=", - "h1:3H1lP+5rZ0tgYR1KdXW685CdfZwPIMXZZwfV8Sxk9uY=", - "h1:8gVYYyXvXKolFLbLS7i7A4l+3Yn8daf0frtgtzGHCm4=", - "h1:FAlxafbm3jeUgH4l+NdOuqbdu2yGnq68cTMTq9aBYmE=", - "h1:M4X6/r6w8QrkzoOu/8+61+fkYy4+kqNt1fbHE7Igvgg=", - "h1:TS3CkZ8djIu+v9NJ8PxreYD3hywG8sbeTbtpQQcD5tg=", - "h1:Uhpn0W3JpwQr9WlzDZwOdTtWPlv1buGljc0096etzjM=", - "h1:dcklD/rIK/ES/o8AybEMCqkqMJcYCDy90su7umQHHnY=", - "h1:ia0GGmKDt45bBjld4tapN3fFrrg4yVziFTaWWDM6sxc=", - "h1:pZhpGdzOtzGkX38PIYbXWilwA/LtWXQ22dkt6Fh2DAQ=", - "h1:uiKyMwXmBBeXZv471jVUZBuRXUgIGwwheKW3mcVHq8Q=", - "zh:1c2462367d92f6f8f6c527115905f7cca78e48cf5d5bc7448d3beeb7c9e895eb", - "zh:3644dbd09c3740e6d843e035de34a74ed41ffc32e7ed04a19aecddc4c57334cc", - "zh:3a586bbb9a9c6463c975a94ddd4671f2a84992a2c169bfb2f5053c2cea55849c", - "zh:4ae96672e6a52a077760a11c95946ec9d3f84f7ab84c0ba3c0cb66c3d3580d59", - "zh:9c26b3dbc1f9a594d1d07b6a25ce089f8463e8331324f4ecde73829e9d1d5ee5", - "zh:b99a602111d6ca5842c852ac1eff5c009f1d75492e355ea25f3dbd6e008e4d9a", - "zh:d45100c41c940c35c07fae2876f6cc654328d405077f01d268e8bd5a25b56c30", - "zh:de6e14e85a9ea2322a4fd971fde3b71071e7b6435a12dbcd3b8c5f42765e8b3c", - "zh:e22f6b54cfebb0c1a0991d83adc83b3d454ba6d9b5c21574af135799b488ed66", + "h1:AQqvilOF4FnbXO/c84HsNkJ+TyZEs+N12iHYFnwvNOM=", + "h1:Gr39ABNw+A6lwP2gPG+yCzGmU5T97iI5qT0XLCd3Dh4=", + "h1:H9bo7LCZafcq9OmqJomfxrcc6B3jKmIc3wpdHodfpYk=", + "h1:NTdicRL7Atqk8fM3B0PQguImzHdZWQwOZwPW0AzkQm0=", + "h1:TLMWskwzbDsyfi6LaqTD0ckSTT4rtpGLF/QCojaDiec=", + "h1:biGOmqtXxJKQl2BRp23Ars11UpSmZenahVIsm4ppFfk=", + "h1:mdB2KHl+8oFUWBWGnfbOaqX2y8H+Ptm0Fdub4feX99U=", + "h1:oAaJhkB2s1y4fSESXi73zJxdHhC7NdB7rdFN6KH2uY8=", + "h1:rENW0F5QJbBPmGBwoD+pzZw65D7W3LAfBZMFr9ncE80=", + "h1:uBPMb39cwdZE6XAPkTynWdIdChkj1IPrhqPHd+BffE4=", + "h1:wp55nTaA9gz0Imll8+4PYeOONzQYKKDWIcoB6qUoJaE=", + "zh:032dd78eff887a673a1067008a8e47a69983bbcea9f41832320470247a76863a", + "zh:1af89f75142cf9c54499a466c8dc7055e2bbf02771a6b8c8cd57eb13dce9a800", + "zh:3696a8e72c6cef80fec3c3574fc8519f0410f23f6dc3e3540d2f03345c140d38", + "zh:58a15c71ae128ff64117c1c6b9ccf8ab2ac3e8f9c2c52957d8327f93495f62b1", + "zh:70ba2909611e8d1cc8009567e50e195c4269e6582d6a6fa0bce0d4e6313ab8d5", + "zh:8f8489d1eb8c189d59dc85e519e51ab4c4b1940e4d72450ae130ba752028fa01", + "zh:99c8c4e8dc67a7ab597d46ed566f64c4409761276f34bd863457a37254620fa6", + "zh:9b24d53440e8d7e06020e7b3aeca0dde4f1a3ef997d7da05ff3acb918896fcc2", + "zh:b3667fd6057997dbf0bd0179ddf686c272d4ab4fc7da6a03fdf2fad31ad4ecb5", + "zh:cc6df6d2291a337a5f434b7335c693164c6987604b9690d6b953b796d8eaa08a", + "zh:d871f39c3c5b63995793c9a70f107e52ca699d211c770a6e7ebc398ba59bcdc7", "zh:f569b65999264a9416862bca5cd2a6177d94ccb0424f3a4ef424428912b9cb3c", - "zh:f6964268874a15788dfed47a26cb880718f47c94cba7c8a0284b70921fec807b", - "zh:ff51b3e83149798ce6c7545688fe3b9703b04d5c0376cd55215a93767144f40e", ] } diff --git a/terraform/infrastructure/iam/gcp/main.tf b/terraform/infrastructure/iam/gcp/main.tf index 2c11f1bdd..dc27c5f6c 100644 --- a/terraform/infrastructure/iam/gcp/main.tf +++ b/terraform/infrastructure/iam/gcp/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { google = { source = "hashicorp/google" - version = "6.21.0" + version = "6.23.0" } } } diff --git a/terraform/infrastructure/openstack/.terraform.lock.hcl b/terraform/infrastructure/openstack/.terraform.lock.hcl index 3754fd184..b534cc033 100644 --- a/terraform/infrastructure/openstack/.terraform.lock.hcl +++ b/terraform/infrastructure/openstack/.terraform.lock.hcl @@ -2,62 +2,53 @@ # Manual edits may be lost in future updates. provider "registry.terraform.io/hashicorp/random" { - version = "3.6.3" - constraints = "3.6.3" + version = "3.7.1" + constraints = "3.7.1" hashes = [ - "h1:+UItZOLue/moJfnI3tqZBQbXUYR4ZnqPYfJDJPgLZy0=", - "h1:Fnaec9vA8sZ8BXVlN3Xn9Jz3zghSETIKg7ch8oXhxno=", - "h1:In4XBRMdhY89yUoTUyar3wDF28RJlDpQzdjahp59FAk=", - "h1:f6jXn4MCv67kgcofx9D49qx1ZEBv8oyvwKDMPBr0A24=", - "h1:zG9uFP8l9u+yGZZvi5Te7PV62j50azpgwPunq2vTm1E=", - "zh:04ceb65210251339f07cd4611885d242cd4d0c7306e86dda9785396807c00451", - "zh:448f56199f3e99ff75d5c0afacae867ee795e4dfda6cb5f8e3b2a72ec3583dd8", - "zh:4b4c11ccfba7319e901df2dac836b1ae8f12185e37249e8d870ee10bb87a13fe", - "zh:4fa45c44c0de582c2edb8a2e054f55124520c16a39b2dfc0355929063b6395b1", - "zh:588508280501a06259e023b0695f6a18149a3816d259655c424d068982cbdd36", - "zh:737c4d99a87d2a4d1ac0a54a73d2cb62974ccb2edbd234f333abd079a32ebc9e", + "h1:/qtweZW2sk0kBNiQM02RvBXmlVdI9oYqRMCyBZ8XA98=", + "h1:0XCd0Y9HVdDcEbwxF18e49HB+YRO+QQ24H3jDgmFPEE=", + "h1:Jvr+8mqBJlxSOF8R862ZtezBlCb9pVwNMNc1sYsDeYg=", + "h1:ji/JgTChmJj8a9PaXja2PiYJhR4iZBX34FDfxnqeZIA=", + "h1:t152MY0tQH4a8fLzTtEWx70ITd3azVOrFDn/pQblbto=", + "zh:3193b89b43bf5805493e290374cdda5132578de6535f8009547c8b5d7a351585", + "zh:3218320de4be943e5812ed3de995946056db86eb8d03aa3f074e0c7316599bef", + "zh:419861805a37fa443e7d63b69fb3279926ccf98a79d256c422d5d82f0f387d1d", + "zh:4df9bd9d839b8fc11a3b8098a604b9b46e2235eb65ef15f4432bde0e175f9ca6", + "zh:5814be3f9c9cc39d2955d6f083bae793050d75c572e70ca11ccceb5517ced6b1", + "zh:63c6548a06de1231c8ee5570e42ca09c4b3db336578ded39b938f2156f06dd2e", + "zh:697e434c6bdee0502cc3deb098263b8dcd63948e8a96d61722811628dce2eba1", "zh:78d5eefdd9e494defcb3c68d282b8f96630502cac21d1ea161f53cfe9bb483b3", - "zh:a357ab512e5ebc6d1fda1382503109766e21bbfdfaa9ccda43d313c122069b30", - "zh:c51bfb15e7d52cc1a2eaec2a903ac2aff15d162c172b1b4c17675190e8147615", - "zh:e0951ee6fa9df90433728b96381fb867e3db98f66f735e0c3e24f8f16903f0ad", - "zh:e3cdcb4e73740621dabd82ee6a37d6cfce7fee2a03d8074df65086760f5cf556", - "zh:eff58323099f1bd9a0bec7cb04f717e7f1b2774c7d612bf7581797e1622613a0", + "zh:a0b8e44927e6327852bbfdc9d408d802569367f1e22a95bcdd7181b1c3b07601", + "zh:b7d3af018683ef22794eea9c218bc72d7c35a2b3ede9233b69653b3c782ee436", + "zh:d63b911d618a6fe446c65bfc21e793a7663e934b2fef833d42d3ccd38dd8d68d", + "zh:fa985cd0b11e6d651f47cff3055f0a9fd085ec190b6dbe99bf5448174434cdea", ] } provider "registry.terraform.io/stackitcloud/stackit" { - version = "0.43.0" - constraints = "0.43.0" + version = "0.43.2" + constraints = "0.43.2" hashes = [ - "h1:39MzRvF21cIRoUGA7UbAhw0xucgcv9yjVEs+ndy82Ng=", - "h1:4b8A9ooj1/klabO2q/dcHeo4zcphac1gAm2gJ9ja6gM=", - "h1:8uU5OCaJ1IMBgTIwbbADbDv/8LuawaA3TcMbYR4uT7o=", - "h1:EqUnbh2nRivUjbXf6hpsbM3FB3eDVlpLZ8apWUMoo5k=", - "h1:I81D3nCh+2EHBJTCbTOgplYImZDR62TuRKikvHsOvaM=", - "h1:JyJvn8oFkmNkRrXUJAlBt94wK50Nk6TJbw3xNrzZdJU=", - "h1:OctY7rNYy4iBODgJDdvzza0Wry6lvJ1nshY/GS3lYhI=", - "h1:R8K1ZF2CvRln5D3L5429BgMp/4sxDLhxdziJmNk8BWM=", - "h1:RHCfqNAEgLoH8kEnKLjwfs301LpOnJpudd/ZHt4s9HI=", - "h1:Ui02h0uPk1NkxlDcS5c7qX3UQGW0i6fYdcbdG5zGSUc=", - "h1:WNHcKDx5NovyhTKxTGwjUoXx/QAiWwoqd82z8SObN28=", - "h1:fOyilk4619RGgXY/DSaU2IpIOBhqQs3fPDzLUuw2N5M=", - "h1:npfPqFK+A8k5rlAF1OHyYUEquGRp6g0waro87lwyJvs=", - "h1:v1yk+DKyV45Mz+YmF0oG7r5Ok3iGPeO/oFPpVAbA7ZI=", - "zh:038c1871e9b609159573619800cf160a77d6d41670a9adfec4aabdcdfa463226", + "h1:5UWqMPouvybJng4sPiOYV+axRHQutUu+b1PtGfqCzTU=", + "h1:FJFyUtokCwauMxhn6Ifg/omB/XApyUcTxhhl++Ki2B0=", + "h1:Pw9XZRsdsp6P/Ct4m1Q4yD4WQ3qja0t1wWiYPZZWl2c=", + "h1:jsf1yTdRltLsAvSw+/orxMhHApQYc15UZETWvUTJVs4=", + "h1:qzl7A95YEzExYL+g/Io2jTXf0PQy/xOnLewnxm83UPQ=", + "zh:0d6bca5ec365db934841dad5f03fbc92ec8f458850673184bddaeab79b0de2e1", "zh:0dde99e7b343fa01f8eefc378171fb8621bedb20f59157d6cc8e3d46c738105f", - "zh:0f594d08f6ba2e2800176619f956e9ab4524fad29c54a1f8ea8bfc9920dc7b1b", - "zh:19e9eda25184eb6e83ce85485a39a1d78e24a8bf8579b35bb4005d5f7522573b", - "zh:1b421734f1c694907de15dcea8302f42aed4cc7b617584f03daccc71b3f272f9", - "zh:204deb43fb3c85184ea96f212cc07f81a10eaac9f515621c9cec88d00d2ff9a7", - "zh:22ffa5022ab2c919ef0b0869d3d2465057c5434d8812fb67c7330b0d29377576", - "zh:35d17f2d9dbe0847707bd63aa8c1d0442ac3cc294f56e686a8e8afa13f981b58", - "zh:43580d52aa392ff05141a7992e352445ec3032bcfb649c3d890802bc5afaa3fa", - "zh:6765f21f1f0817d0a5753e47b2b3e30d627b58e6d6505d6fb4a303c3cb7dd14a", - "zh:6ba8b4f08bc47c98d7ad3c51fc112452101a97daa855ff7ecf1138d8abdd3e46", - "zh:8f9502f576ad3ba975da834474bdf9faf1f9b4891f6129b258b162d896b21402", - "zh:a1863d7d48916d6cf20cff7ad5f827e68b870eeea005f9f1a1c22b3d0289592b", - "zh:ec44380407b313c67d43e839f8389717a145ec02a659cb482d37b5dd8f7093bd", - "zh:f7d68470b7b04996ec7b371d9600aaaf4b537b54e6ec6a814b81e931c78070e6", + "zh:0ff1358c5c3242db939c48e8ce32fd31224254f8b417f39e633d69710b4666cf", + "zh:2436e4119f9bf4ccbe4cf100341ac05b886244dbdfe5f32ee0e0588e964ad4fa", + "zh:55e14ffbcfad35fca51667ed9e242bffb9cef057698d54af870b2efc53c222ff", + "zh:56956bb13ba08711cf7720cd21f5be208e21a9c8cf27c5b4bacf9ca1178031f0", + "zh:668289e778b5cec41861a72cb191d06e84c604463eed3102e66886e9866db2e5", + "zh:9c6d3bf11a88eb462b291dce3868d369c175beee8ef3a9642df14f30d6ab88bc", + "zh:a57c3b8d1dcab18a4c0ea97962891587531c0d94dfdd96fd49cb1fb39b35bc4c", + "zh:a5a1e0d7adc62776674b898912df4a3c9031dc8c6acd812022880bce5d8cda6f", + "zh:b36d078faa2500aa36b01a20f7f0e64e8f545a3c260a2c4dee7929151e3542ce", + "zh:b373b283ba43fc48253f816d033efa5406287f3877a6c0810b3471e767761eaa", + "zh:bd7019093eb8fc5d0b2bc4c0273e31f06cd2bc8ddb07ed4b9e8a5dfa15ecc1e9", + "zh:f16f2dfa67edc13da968b7081df199c38272fc18374119d8ac0382dadc01ea18", + "zh:f3ce30f35db3c6648f561a0b468d608f4c36b5bf4aa65256673e05816854ec08", ] } @@ -65,20 +56,11 @@ provider "registry.terraform.io/terraform-provider-openstack/openstack" { version = "3.0.0" constraints = "3.0.0" hashes = [ - "h1:/54cfw6MvK0twKdzLZiFetMGGrNH/hrQpl+6J43DLdg=", "h1:5LLYtkab+Vdg8CE9pI1O8ufh3sTXqWlY3uKxko/y3X8=", "h1:9/pRGncPl05UJquv3mXwSMU0NVa3ilwPtilcZcNgdys=", - "h1:GSkmvmVDHw1gBFYNyK66DSX9ZeKf7/hBdT3pVwffLgo=", "h1:K/LldMyf/FKaGOWUPAdpkMvKqE7tH+cmxLLhHKHjseQ=", - "h1:We2BP3lS3D+pYgxcG0CBGdHynBcp+A9FlC4vqu9wPys=", - "h1:globq38P3+sh2sIh6K4paJ+H61xARF2YpNSqAP+D8IQ=", - "h1:hpyEkn7ekR2pDVBo4L1sHn3HL6sXN7uPOTRfenJzC8g=", "h1:i7sj9flNOPDNraNq3QztV+cQ1JeqSQF30xQrY6Vi2Yk=", - "h1:lZJNaYCotfOoutyyDZCsv2gWZA2D2exwRsOJhgXz8Tk=", - "h1:rgeaQHDbsJGcofHhEniUSAKTTP5ZmvAa0tkholXJQZE=", "h1:sxq+0vFl4SfV9dlut5liwaH4FejyNIf4ClAjRgowxv8=", - "h1:wUE5Zr2alVpKwcvgvAccpmM5Kz3qdq6Ey912A86WXRc=", - "h1:z0rIpZ4r6ubmh2seqARZyHVYamLfqV1wYEDVPu+eX8E=", "zh:01718f229597b34ed430236a230a407dacd6289543556d33910e151462e8cb8a", "zh:2424c5347d35fe0de778d1c40dbe8d9b1278309c4d65cce31709e6fcbec139df", "zh:2a785f9efd6d8c979031803dd78411a583bc0d9a572ddf5fb9e539cbbfc1ce43", diff --git a/terraform/infrastructure/openstack/main.tf b/terraform/infrastructure/openstack/main.tf index 3667b99ce..9a56bfdda 100644 --- a/terraform/infrastructure/openstack/main.tf +++ b/terraform/infrastructure/openstack/main.tf @@ -7,12 +7,12 @@ terraform { stackit = { source = "stackitcloud/stackit" - version = "0.43.0" + version = "0.43.2" } random = { source = "hashicorp/random" - version = "3.6.3" + version = "3.7.1" } } } diff --git a/terraform/infrastructure/openstack/modules/stackit_loadbalancer/main.tf b/terraform/infrastructure/openstack/modules/stackit_loadbalancer/main.tf index 17ca10d08..42103b7e8 100644 --- a/terraform/infrastructure/openstack/modules/stackit_loadbalancer/main.tf +++ b/terraform/infrastructure/openstack/modules/stackit_loadbalancer/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { stackit = { source = "stackitcloud/stackit" - version = "0.43.0" + version = "0.43.2" } } } diff --git a/terraform/infrastructure/qemu/.terraform.lock.hcl b/terraform/infrastructure/qemu/.terraform.lock.hcl index f5ecba7ec..e4f46d1a6 100644 --- a/terraform/infrastructure/qemu/.terraform.lock.hcl +++ b/terraform/infrastructure/qemu/.terraform.lock.hcl @@ -37,32 +37,32 @@ provider "registry.terraform.io/dmacvicar/libvirt" { } provider "registry.terraform.io/hashicorp/random" { - version = "3.6.3" - constraints = "3.6.3" + version = "3.7.1" + constraints = "3.7.1" hashes = [ - "h1:+UItZOLue/moJfnI3tqZBQbXUYR4ZnqPYfJDJPgLZy0=", - "h1:4LlZaEeRPQNeQVS/qkH33e0fw92dZV8bS855mhDZ5GU=", - "h1:Fnaec9vA8sZ8BXVlN3Xn9Jz3zghSETIKg7ch8oXhxno=", - "h1:In4XBRMdhY89yUoTUyar3wDF28RJlDpQzdjahp59FAk=", - "h1:LFe/7Z6YZvnrBcYhSEQY50DfS3uoDKBakwdqVXcEQkc=", - "h1:N2IQabOiZC5eCEGrfgVS6ChVmRDh1ENtfHgGjnV4QQQ=", - "h1:aP69UhBhTPIVy1laxOTwOVRPB5Gv3WP9wKPyAnYd8DI=", - "h1:f6jXn4MCv67kgcofx9D49qx1ZEBv8oyvwKDMPBr0A24=", - "h1:ph2J8mV6yYVsaN6FIsxhpWv//QuloQESo4tAZU732Uk=", - "h1:swbWBC5hf9ijj1BQcCpwLOI1m1tXH2KNGp8TEqnMiAY=", - "h1:zG9uFP8l9u+yGZZvi5Te7PV62j50azpgwPunq2vTm1E=", - "zh:04ceb65210251339f07cd4611885d242cd4d0c7306e86dda9785396807c00451", - "zh:448f56199f3e99ff75d5c0afacae867ee795e4dfda6cb5f8e3b2a72ec3583dd8", - "zh:4b4c11ccfba7319e901df2dac836b1ae8f12185e37249e8d870ee10bb87a13fe", - "zh:4fa45c44c0de582c2edb8a2e054f55124520c16a39b2dfc0355929063b6395b1", - "zh:588508280501a06259e023b0695f6a18149a3816d259655c424d068982cbdd36", - "zh:737c4d99a87d2a4d1ac0a54a73d2cb62974ccb2edbd234f333abd079a32ebc9e", + "h1:/qtweZW2sk0kBNiQM02RvBXmlVdI9oYqRMCyBZ8XA98=", + "h1:0XCd0Y9HVdDcEbwxF18e49HB+YRO+QQ24H3jDgmFPEE=", + "h1:2tp72AGbuQyxyDYaaoxJk1el0AQ81Gjy2RWlVxS4BKw=", + "h1:4zid4G8d3tiQThQGwOcFk+EAyvpSkq2bFKSQ1vzfmKU=", + "h1:FMjX0VzHGDmqmz1TNQsq1W2Cfn/H/IR81YmIotHh5uY=", + "h1:Jvr+8mqBJlxSOF8R862ZtezBlCb9pVwNMNc1sYsDeYg=", + "h1:aNMs1vK7xE3QjsSDTTWTwNeNsbSCgOW2valnbyc9TIw=", + "h1:g+mDU6wEJJOSI7/tPh0Tc4i2XjrXAfqKXuiVM9Di194=", + "h1:ji/JgTChmJj8a9PaXja2PiYJhR4iZBX34FDfxnqeZIA=", + "h1:t+sEwSvzYaq0d3FNuzdn7snQPZqmbn3q5uwF7TSDNXQ=", + "h1:t152MY0tQH4a8fLzTtEWx70ITd3azVOrFDn/pQblbto=", + "zh:3193b89b43bf5805493e290374cdda5132578de6535f8009547c8b5d7a351585", + "zh:3218320de4be943e5812ed3de995946056db86eb8d03aa3f074e0c7316599bef", + "zh:419861805a37fa443e7d63b69fb3279926ccf98a79d256c422d5d82f0f387d1d", + "zh:4df9bd9d839b8fc11a3b8098a604b9b46e2235eb65ef15f4432bde0e175f9ca6", + "zh:5814be3f9c9cc39d2955d6f083bae793050d75c572e70ca11ccceb5517ced6b1", + "zh:63c6548a06de1231c8ee5570e42ca09c4b3db336578ded39b938f2156f06dd2e", + "zh:697e434c6bdee0502cc3deb098263b8dcd63948e8a96d61722811628dce2eba1", "zh:78d5eefdd9e494defcb3c68d282b8f96630502cac21d1ea161f53cfe9bb483b3", - "zh:a357ab512e5ebc6d1fda1382503109766e21bbfdfaa9ccda43d313c122069b30", - "zh:c51bfb15e7d52cc1a2eaec2a903ac2aff15d162c172b1b4c17675190e8147615", - "zh:e0951ee6fa9df90433728b96381fb867e3db98f66f735e0c3e24f8f16903f0ad", - "zh:e3cdcb4e73740621dabd82ee6a37d6cfce7fee2a03d8074df65086760f5cf556", - "zh:eff58323099f1bd9a0bec7cb04f717e7f1b2774c7d612bf7581797e1622613a0", + "zh:a0b8e44927e6327852bbfdc9d408d802569367f1e22a95bcdd7181b1c3b07601", + "zh:b7d3af018683ef22794eea9c218bc72d7c35a2b3ede9233b69653b3c782ee436", + "zh:d63b911d618a6fe446c65bfc21e793a7663e934b2fef833d42d3ccd38dd8d68d", + "zh:fa985cd0b11e6d651f47cff3055f0a9fd085ec190b6dbe99bf5448174434cdea", ] } diff --git a/terraform/infrastructure/qemu/main.tf b/terraform/infrastructure/qemu/main.tf index 62c283183..b520587f3 100644 --- a/terraform/infrastructure/qemu/main.tf +++ b/terraform/infrastructure/qemu/main.tf @@ -10,7 +10,7 @@ terraform { } random = { source = "hashicorp/random" - version = "3.6.3" + version = "3.7.1" } } } diff --git a/terraform/infrastructure/qemu/modules/instance_group/main.tf b/terraform/infrastructure/qemu/modules/instance_group/main.tf index cd4f43b7d..1aa841277 100644 --- a/terraform/infrastructure/qemu/modules/instance_group/main.tf +++ b/terraform/infrastructure/qemu/modules/instance_group/main.tf @@ -6,7 +6,7 @@ terraform { } random = { source = "hashicorp/random" - version = "3.6.3" + version = "3.7.1" } } } From 60663ebe75f3b150601bfcee3ebf142607d038aa Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 4 Mar 2025 08:47:19 +0100 Subject: [PATCH 129/311] deps: update K8s constrained AWS versions (#3659) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- internal/versions/versions.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/internal/versions/versions.go b/internal/versions/versions.go index 931fb6f65..7aaa26bab 100644 --- a/internal/versions/versions.go +++ b/internal/versions/versions.go @@ -249,7 +249,7 @@ var VersionConfigs = map[ValidK8sVersion]KubernetesVersion{ }, // CloudControllerManagerImageAWS is the CCM image used on AWS. // Check for newer versions at https://github.com/kubernetes/cloud-provider-aws/releases. - CloudControllerManagerImageAWS: "registry.k8s.io/provider-aws/cloud-controller-manager:v1.29.7@sha256:5dfb0bf6bbfa99e0f572bb8b65fbb36576c4f256499e63371b550353702c0483", // renovate:container + CloudControllerManagerImageAWS: "registry.k8s.io/provider-aws/cloud-controller-manager:v1.29.8@sha256:3f8e7be967f76b328123d53846c21dcd930b60094f9f4abd8bf5ab0fe108e6e4", // renovate:container // CloudControllerManagerImageAzure is the CCM image used on Azure. // Check for newer versions at https://github.com/kubernetes-sigs/cloud-provider-azure/blob/master/README.md. CloudControllerManagerImageAzure: "mcr.microsoft.com/oss/kubernetes/azure-cloud-controller-manager:v1.29.12@sha256:9d232f2faa9d7e9f98ca13be09e787b015fa39856eceedd1ac987204342dbafd", // renovate:container @@ -316,7 +316,7 @@ var VersionConfigs = map[ValidK8sVersion]KubernetesVersion{ }, // CloudControllerManagerImageAWS is the CCM image used on AWS. // Check for newer versions at https://github.com/kubernetes/cloud-provider-aws/releases. - CloudControllerManagerImageAWS: "registry.k8s.io/provider-aws/cloud-controller-manager:v1.30.6@sha256:cfdfa9e436f27fccfd3f0961e9607088482b17e43e2e1990e02e925a833f0ef3", // renovate:container + CloudControllerManagerImageAWS: "registry.k8s.io/provider-aws/cloud-controller-manager:v1.30.8@sha256:f4e82b924e967656d8df9f467c9c1915509e94e228b53840a7f9f2367e1ba9f5", // renovate:container // CloudControllerManagerImageAzure is the CCM image used on Azure. // Check for newer versions at https://github.com/kubernetes-sigs/cloud-provider-azure/blob/master/README.md. CloudControllerManagerImageAzure: "mcr.microsoft.com/oss/kubernetes/azure-cloud-controller-manager:v1.30.8@sha256:8956b68b9914fe2d5d3b360406bb0db8e4b222d75e231786f3695879c605b8df", // renovate:container @@ -383,7 +383,7 @@ var VersionConfigs = map[ValidK8sVersion]KubernetesVersion{ }, // CloudControllerManagerImageAWS is the CCM image used on AWS. // Check for newer versions at https://github.com/kubernetes/cloud-provider-aws/releases. - CloudControllerManagerImageAWS: "registry.k8s.io/provider-aws/cloud-controller-manager:v1.31.4@sha256:47f861081efbc04bda32b6212ca2c74b5b2ce190e595a285e1b712ca0afec0c7", // renovate:container + CloudControllerManagerImageAWS: "registry.k8s.io/provider-aws/cloud-controller-manager:v1.31.5@sha256:6f94a695828de888c8efc57e3243db9e788709767f687a6a8cb07c2e42158862", // renovate:container // CloudControllerManagerImageAzure is the CCM image used on Azure. // Check for newer versions at https://github.com/kubernetes-sigs/cloud-provider-azure/blob/master/README.md. CloudControllerManagerImageAzure: "mcr.microsoft.com/oss/kubernetes/azure-cloud-controller-manager:v1.31.1@sha256:b5aa55a7e9d38137f7fcd0adc9335b06e7c96061764addd7e6bb9f86403f0110", // renovate:container From ca6cc22bebd6e12b7946752826a4b6c12617f4ab Mon Sep 17 00:00:00 2001 From: edgelessci <71088502+edgelessci@users.noreply.github.com> Date: Tue, 4 Mar 2025 08:47:58 +0100 Subject: [PATCH 130/311] image: update locked rpms (#3672) Co-authored-by: edgelessci --- image/mirror/SHA256SUMS | 64 ++++++++++++++++++++--------------------- 1 file changed, 32 insertions(+), 32 deletions(-) diff --git a/image/mirror/SHA256SUMS b/image/mirror/SHA256SUMS index 09dfbfc07..470ae49fd 100644 --- a/image/mirror/SHA256SUMS +++ b/image/mirror/SHA256SUMS @@ -1,5 +1,5 @@ 37abef83e8927b4b48f69fcbdcc249d349c6029cc669401676d01f0ea326999e WALinuxAgent-udev-2.10.0.8-2.fc40.noarch.rpm -8f9c8c8be1df166f4285824580c9f6588864c167c8a2d51a6c4621d1ea3f8fde aardvark-dns-1.13.1-1.fc40.x86_64.rpm +03b5889fecc19101fe5c5eb6105bded5705e16a7af957f92b6cc6a7a96e829a8 aardvark-dns-1.14.0-1.fc40.x86_64.rpm ac860c52abbc65af5835d1bd97400c531a5635d39bc1d68e36a1fe54863385ea alternatives-1.27-1.fc40.x86_64.rpm b28e7d90ed3aeb6ca10ecb235b70534665011af35bd3677fb836b1e3cfa602a7 audit-libs-4.0.3-1.fc40.i686.rpm accc1c623cc5345f983990416ad0f8d6028d63bc9f00bcb808688b2a3bb7caf9 audit-libs-4.0.3-1.fc40.x86_64.rpm @@ -10,7 +10,7 @@ db18a583ebde21d8b0b67f0306e25908b273bef9c532469ac0b7ab92578438f4 authselect-lib 208ddebcd5edbff3dca54020a8a180f5410ea9b2d82c733e106992a729b4b84e bzip2-libs-1.0.8-18.fc40.i686.rpm 68a43532d10187888788625d0b6c2224ba95804280eddf2636e5ef700607e7d0 bzip2-libs-1.0.8-18.fc40.x86_64.rpm 1afcf80d5e7b22ee512ec9f24b4f2b148888ef95af3486cf48f2204c3406b12d ca-certificates-2024.2.69_v8.0.401-1.0.fc40.noarch.rpm -99d4976979c8b9d18c9d2d686de77882dc6a4e72ebfe358fb9a37a83f0ecdc90 catatonit-0.1.7-22.fc40.x86_64.rpm +a9af8b72483b4ad6489e6d2492161120809453373edaf24722cffb394bd1cd15 catatonit-0.2.1-1.fc40.x86_64.rpm 588a2ab4dd93d58ca8b8d2c2d0b5e2c52007548c3fdd06f5ca1ab415ee236d86 composefs-1.0.6-1.fc40.x86_64.rpm 5935816e8d377d0385e5287ca12e4d3b43e3c3cdc9cc4deafa653a6dba78611a composefs-libs-1.0.6-1.fc40.x86_64.rpm db246f6445469b5a71e965a081685471768393cf04181e7250ce0ddcb8a9c3d4 conmon-2.1.12-2.fc40.x86_64.rpm @@ -18,8 +18,8 @@ adf4b75cdd9fae9d2d37fb71d9f0bf625a6705c0f0a7784569ab21463fe22152 conntrack-tool 621302b0ea9cdd73d5eea4d30935cb415143df1649cd8e92424e967ea98fc34d container-selinux-2.234.2-1.fc40.noarch.rpm bbe29e0c7b4ca076d50b4ac3954eb383459230d96b13f353ee71ebd5de33b6d1 containerd-1.6.23-5.fc40.x86_64.rpm 0705251ea64b1558098016b2120f202c5aba77470093cb8f89ce6adb2a0b46b6 containernetworking-plugins-1.5.1-1.fc40.x86_64.rpm -3e35525e9224d3427f10343c98036b251fac34bf67c9007335561d846736d0d5 containers-common-0.61.0-1.fc40.noarch.rpm -b0740195d12d356e5637b83ece8650fc3f764f37e734678a07cb637fb14faf7d containers-common-extra-0.61.0-1.fc40.noarch.rpm +fd81f5d57a5feba4658d3ab1c6ab0a1a9551cff5c73263acf960bd7d41acaf25 containers-common-0.62.0-1.fc40.noarch.rpm +1472f71479fed6eb2103bd9653845609c7523523d06c36565a37d818fc144284 containers-common-extra-0.62.0-1.fc40.noarch.rpm 299d3e7e1cbc110d9ae8a47f6ca95142c3e3783cb1464bfbd6bc550c414b97ec coreutils-single-9.4-9.fc40.x86_64.rpm d941a78ffb6e2e0b4c24d0097d0351ced8796edde90208b4bddee459bce0a949 cpio-2.15-1.fc40.x86_64.rpm faa23cb6a7a612c0a6e874c788c5add967c5e193bd38c2e6093b82b38a162f81 cracklib-2.9.11-5.fc40.i686.rpm @@ -27,7 +27,7 @@ ea1f43ef9a4b02a9c66726ee386f090145696fb93dff80d593ac82126f8037ec cracklib-2.9.1 fe24641e69545c428890a4b094f015c03f65a6c30c3db7bb0de7672bab66bfd6 cracklib-dicts-2.9.11-5.fc40.x86_64.rpm f3f3e5f6a1c1bee67c0c6598a48143c36827f90a095897d649580a174468cdbc criu-4.0-1.fc40.x86_64.rpm bbdb6014e2bd87db1bb2d4795a57cbb08bfdb03777c2b9730a3f45f7977fc4c9 criu-libs-4.0-1.fc40.x86_64.rpm -99e18641538356e84e4898dd6b05c6637ef8eff46df8ec837f0fb78f87ad6f27 crun-1.19.1-1.fc40.x86_64.rpm +0a8ee60884b6739bc0fffed6c47a94eae524e73cbd9c942420f6ffdfcd39086b crun-1.20-2.fc40.x86_64.rpm d7a62ff0193375607d28d8fe7eedf3ff5b6ddac154e1474d79787b9f32ae298d crypto-policies-20241011-1.git5930b9a.fc40.noarch.rpm 0f1d436f879fa30f18adca576a1f91bb1a8d1ac42cff5f35c1d15e6dffc506fa crypto-policies-scripts-20241011-1.git5930b9a.fc40.noarch.rpm 26aadc06a9f98c58ca6250d811e749ee5fa76059b37445ec28b50ee73d548174 cryptsetup-2.7.5-1.fc40.x86_64.rpm @@ -50,13 +50,13 @@ ac4f1b2eaf5d452512e7b6172c93880c2b501946b71a228adc02d50bb3fb56e0 e2fsprogs-1.47 2e2bf662f060ddd75195e9d3d5f08cdd5d9cc857df3a9bcc45608337ba314a25 ec2-utils-1.2-48.amzn2.noarch.rpm e6231ec4268b3efa928250eb4106311e0f33396422245b938bfed4ba2d79c573 efitools-1.9.2-9.fc38.x86_64.rpm 6ac676d78c2df896f9794a8dffb75ea69c58d202c68f4bcf084f0d264154a666 efivar-libs-39-2.fc40.x86_64.rpm -02bdd06f90ed52f14ed650277fb311bfa75321496a54f08bcf4f3de3bcf738b3 elfutils-debuginfod-client-0.192-7.fc40.i686.rpm -7aea9182c4f0f8818616a3c9ad22e135b2c0213cd20b4876eed4ed50662923ce elfutils-debuginfod-client-0.192-7.fc40.x86_64.rpm -0df162d8f4bddb1b8f9e8f4b94777f06c31024fa1db83a956817e6e1f7b6b6f1 elfutils-default-yama-scope-0.192-7.fc40.noarch.rpm -990ffcb2b37a2a5ff9de49ab55bf48f028baed95bd0be506c1cd87abc9f5cba9 elfutils-libelf-0.192-7.fc40.i686.rpm -afebefb578c9ac9ed6a4575e7d00f3938e0adcf50f60c8fca3365b41be77833e elfutils-libelf-0.192-7.fc40.x86_64.rpm -d52142d916af296e889906eb45997ab24357055a4c5e09c1015b0a4a222ef706 elfutils-libs-0.192-7.fc40.i686.rpm -c120bc4d029536ffa77aab0aab8058df196de83548c24a147f0ab5951412b2a7 elfutils-libs-0.192-7.fc40.x86_64.rpm +75a77fa962df4aabee266a1a48aeb4bf3a164dba31a597af23ab33c693a1c068 elfutils-debuginfod-client-0.192-9.fc40.i686.rpm +4b4b9b5c7e4ceaf65cb473089f87eef07cbdb7254425f60219c5b6412ea7da94 elfutils-debuginfod-client-0.192-9.fc40.x86_64.rpm +633b68d0b697c585727d07f4a3c5e4ba536841a8717eaadc552fc10e61d3b86a elfutils-default-yama-scope-0.192-9.fc40.noarch.rpm +fde3769dc677f0a76ce96058c3032f6553809f4809509842b9523a13e90913e2 elfutils-libelf-0.192-9.fc40.i686.rpm +f7778242b3242fab35a5e0c4f0919ca9823a47c7b296f274ff312cc2c49ba6e7 elfutils-libelf-0.192-9.fc40.x86_64.rpm +a322c6f44f82bc21558f3bb7afc694dbdc28a41340280d3a2c5da2656a339d2f elfutils-libs-0.192-9.fc40.i686.rpm +184235133a6873a42b72d2d88657f12dd4b4b603fd5058fbd02daa0a7308f69c elfutils-libs-0.192-9.fc40.x86_64.rpm 95cf8ee199b2e1b3471f920ebad57d3d8178f5e68d37ee35a8a94727473ec8d3 ethtool-6.11-1.fc40.x86_64.rpm 6df53940c5e0575c6b6be4d4f1f48f5504a94b04bfb63ed2c80acc64412591b4 expat-2.6.4-1.fc40.x86_64.rpm 849feb04544096f9bbe16bc78c2198708fe658bdafa08575c911e538a7d31c18 fedora-gpg-keys-40-2.noarch.rpm @@ -90,8 +90,8 @@ d94ce03982cc4137789225c1cc2db730b265ebae0f2afde55dc8d9b9850fd9f1 glibc-gconv-ex b054d6a9ee3477e935686b327aa47379bd1909eac4ce06c4c45dff1a201ecb49 gmp-6.2.1-8.fc40.x86_64.rpm 0a8b1b3fb625e4d1864ad6726f583e2db5db7f10d9f3564b5916ca7fed1b71cb gnupg2-2.4.4-1.fc40.x86_64.rpm 4425dbd35ab65f25b092d12ac56c4b565371a1c52ac882c8896dbeae7d52bbb1 gnupg2-smime-2.4.4-1.fc40.x86_64.rpm -4289ccbb44e4a764ef6f58593a56f2598c6821feebac52be6fa04c771eebf029 gnutls-3.8.6-1.fc40.x86_64.rpm -0e5c3c13d4c34d83453667a8011eab1859d0db5ff7409fba0dce3fbd68604226 gnutls-dane-3.8.6-1.fc40.x86_64.rpm +74f185a772b22db0d41b69d63d1fa4a78840bc32359ce47729dbd54d297ffa77 gnutls-3.8.9-1.fc40.x86_64.rpm +9a463e49371c05bce6713fd4956ff3784db265485260e6151d3eba444ad41f42 gnutls-dane-3.8.9-1.fc40.x86_64.rpm f8510eeec17b9258de9a68ce15af21f3ea135b5e767f3bc9047f851d81dbac6e google-compute-engine-guest-configs-udev-20240830.00-1.fc40.noarch.rpm 94e443590221fb17e0330f076ebac32baab17b8d9c22566db372899ae750ca64 gpgme-1.23.2-3.fc40.x86_64.rpm 6d54af0fc5ae216eb97720415acda4245ebc6c021420a2892b58620b5b25ca38 gpm-libs-1.20.7-46.fc40.x86_64.rpm @@ -202,7 +202,7 @@ e9c3e9e3458af7a2f9b5cd6bc45020bb7f2c6cfbd0429b0b1853928bd3e02004 libsmartcols-2 45d032fb4d59ee0f6a921dd1f0addfcdd38fc46917243fdd6248194ffddb9067 libsodium-1.0.20-1.fc40.x86_64.rpm c8bbfa2762cc601f8a97d8d5a39a658f0e91ba477ebebd798b30f7fc8ffdd457 libss-1.47.0-5.fc40.x86_64.rpm 89e7282e0a94d641871dfed423ba2ce6f8b088eaf9aabdea1805708bcafa6a01 libstdc++-14.2.1-3.fc40.x86_64.rpm -d92173d6fbfb7e2af3b35a8554229e247666e15dc5b36cba43b7bbfc4144b781 libtasn1-4.19.0-6.fc40.x86_64.rpm +3d6ff1e90b4b19de401ab45df9c5bb6e171c34a5b415a7e10e3282332a4cda95 libtasn1-4.20.0-1.fc40.x86_64.rpm 9ca680998686ee852fa8e1667cd6e7c436bfd5fe7da898bd314d808303d447f8 libtextstyle-0.22.5-4.fc40.x86_64.rpm 189e8f25a80a67db1722cb42f2800235df3eadd9cb93d3bcd13853bf09122d5f libtirpc-1.3.6-1.rc3.fc40.x86_64.rpm e5d150d23f95e4a23288b84145af442607a88bf457c0e04b325b1d1e8e708c2b libtool-ltdl-2.4.7-10.fc40.x86_64.rpm @@ -217,14 +217,14 @@ e541a1c8397dccf159b3602eb6bbb381ba21c544db337a3b3bfc49ccc2ef5c21 libunistring-1 b6db3e72ae6575127216145c1f65414ea94acd9db26d08c5081cb5d786101c1f libuuid-2.40.2-1.fc40.x86_64.rpm bea578631618692ba5e302beadfdf6d5894e23e5bddaea4b4fca2f377dd1aaac libverto-0.3.2-8.fc40.i686.rpm fadf7dd93c5eee57ba78e0628bf041dbd2ea037ace52f0a5cbac55b363234d27 libverto-0.3.2-8.fc40.x86_64.rpm -734de953d19ae8a9937799eced437393e99da6c541adeda46b8603b8c8a7cc92 libxcrypt-4.4.38-3.fc40.i686.rpm -ccea0e99b182f382fe9ca5cb77e3279345b25696a72e5480d65c3724884413ef libxcrypt-4.4.38-3.fc40.x86_64.rpm +3b9287a2eebaaa4993a86c441888a7f0f7d4f35f01e0aeb071cfd918fa6e06b3 libxcrypt-4.4.38-6.fc40.i686.rpm +103da3ce282f675c8bae6ddce0f42dd826b44058204bf76a2c21581c9a22da08 libxcrypt-4.4.38-6.fc40.x86_64.rpm a17f9a8894a00ee97a42219b3b21d64bfb850d74059d89ae299210bc477e8967 libxkbcommon-1.6.0-2.fc40.i686.rpm 1f1d0c1e1132016735acc6fc3390102b35f9eb257244547c7b61c32a9c2314cc libxkbcommon-1.6.0-2.fc40.x86_64.rpm db2c5422aeef81940a186b597df582b75a0f156e481262bef262f1b69ea1b799 libxml2-2.12.9-1.fc40.i686.rpm 1d33dae8642a772dc8fae5c8e2e81010d0536e8158f8fafb27e51fa1ee645df0 libxml2-2.12.9-1.fc40.x86_64.rpm -cd866911efd52e3a70655df3da9d71ad2f4a326463aeaa381493a7547e14871d libzstd-1.5.6-1.fc40.i686.rpm -bed3075b9ff919eded25cb45e9e03b8a7c63bcc8e893ec28c999aecaa68c51d3 libzstd-1.5.6-1.fc40.x86_64.rpm +9007aa6bc776262992172e3f24ea2528cd4f65fb82f2c2d01e27f53f79c5c6f7 libzstd-1.5.7-1.fc40.i686.rpm +ec5650e3822d102bfe6bbebc7468a711128ef695f4bd06748ce242b8378d8b7b libzstd-1.5.7-1.fc40.x86_64.rpm 81409455da42a5ffdcf5b8cc711632ce037fec25d5ae00cbfda5010c9db04157 lua-libs-5.4.6-5.fc40.x86_64.rpm 2d1da8faf26c647a7299f840cfa199f20415ceb99a4f694ac3cd07f645f02cf5 lz4-libs-1.9.4-6.fc40.i686.rpm f5f022440c4340b5e7fb1c1dbc382e6b0fd57030b3ff056940f2bb3d254408ec lz4-libs-1.9.4-6.fc40.x86_64.rpm @@ -233,20 +233,20 @@ f5f022440c4340b5e7fb1c1dbc382e6b0fd57030b3ff056940f2bb3d254408ec lz4-libs-1.9.4 03fbefea8c8d8465cf1caf66870fb935292ee18b4ca341853b5576ca9c7801eb mokutil-0.7.1-1.fc40.x86_64.rpm 0a3a3fc2471d2d64cbc85f4b23c93620df6eeee814851a2b69fc5ddf75406b56 mpdecimal-2.5.1-9.fc40.x86_64.rpm bc873693a8b8423d7f82e329abe207c9160a4c746fea9a32ef2a6ae8c912f227 mpfr-4.2.1-4.fc40.x86_64.rpm -421e3595b85884390549e1698aa38ebf453f8929ce58b932ddc39f7fe2bffa4e mtools-4.0.47-1.fc40.x86_64.rpm +8a7312e49b3ddec619dee7d1067b72f9105f34d9ff988be0e8b8a76091a8b8fa mtools-4.0.48-1.fc40.x86_64.rpm 7dfae7d898dfc40f3fe1fc66104cf31e434e866fec4d4944b55952d7f2f16657 nano-7.2-7.fc40.x86_64.rpm b404c27af03bb1e43fb0dc472d5a1fa152e0563fa2e4eefa29199c47578a829b nano-default-editor-7.2-7.fc40.noarch.rpm 8a93376ce7423bd1a649a13f4b5105f270b4603f5cf3b3e230bdbda7f25dd788 ncurses-base-6.4-12.20240127.fc40.noarch.rpm 39bba59320e6276a3b7b07bc94d319511bdd7d32ba098fd49723f4d542794d41 ncurses-libs-6.4-12.20240127.fc40.i686.rpm a18edf32e89aefd453998d5d0ec3aa1ea193dac43f80b99db195abd7e8cf1a04 ncurses-libs-6.4-12.20240127.fc40.x86_64.rpm -c425cdd1d0889edb688809ccc2a35a96e67a7dedc119ad540ddd05f8a8997b5e netavark-1.13.1-1.fc40.x86_64.rpm +7ef5aebdfb3a51f6ed7ba6b9d428417a0cb5b8ad1c53515df459bc700b85da6e netavark-1.14.0-1.fc40.x86_64.rpm 16172412cfd45453292e18f84fc57e42a3ce92aca72b47ef7e15b44554049cfe nettle-3.9.1-6.fc40.x86_64.rpm 188ce5004e6ed764b4a619b64a4a0f36f1cc4fa919fe0a300599ff1171844144 nftables-1.0.9-3.fc40.x86_64.rpm 784e0fbc9ccb7087c10f4c41edbed13904f94244ff658f308614abe48cdf0d42 npth-1.7-1.fc40.x86_64.rpm f814bc09b50daaab468715088ec056373dbc209a5075306e4ce76f5c55eb2b42 nvme-cli-2.8-1.fc40.x86_64.rpm ecc7bc53e45b304272ed047ef681aec637eddae7a7ff0bc851665f3ac164f8ac openldap-2.6.8-2.fc40.x86_64.rpm -5df04d37e492e5f107cc21e547240f9f98b0b7613320467bc0b08f6aa1b0fb88 openssl-libs-3.2.2-3.fc40.i686.rpm -e9fca52d76eb6277b9fec3238226faafc0938806318fad1143a527fdd28a16cf openssl-libs-3.2.2-3.fc40.x86_64.rpm +bffa85f8feadf0bf5f7a8cea9ff9f5e49266959df6ae4d61cf929054c09ec2f8 openssl-libs-3.2.4-1.fc40.i686.rpm +a1b67803e7afb5e16d977e49b8e63c50537bbaa6b261ab10348d55a54b1562dd openssl-libs-3.2.4-1.fc40.x86_64.rpm 9f0336deb6f1b1524ec48d837622e7e2291995369b0356d7ad1e1d427f3b659a os-prober-1.81-6.fc40.x86_64.rpm 70fba929aab38a9d69a457cef1b01962161a1df2b78dc5a4e86ff4b994b51079 p11-kit-0.25.5-1.fc40.x86_64.rpm c728dbd90872b7597a8ace70a70555bff576231bb6dbde14b75626d601706af8 p11-kit-trust-0.25.5-1.fc40.x86_64.rpm @@ -265,7 +265,7 @@ f796a31cad58f4ebea8787020868581d9a721297ee0ef6a7c63a7f8444f60c17 pcsc-lite-libs 5443db8875acc0c1c436dbe1ed62b776543e049b8d9c7e33198379d367814093 pigz-2.8-4.fc40.x86_64.rpm cb7c5036f1d25c696de23a6670cb64caec9945116fb0c9a93555414746ecf253 pinentry-1.3.0-2.fc40.x86_64.rpm bbb4abafa9f7664e21350b56d49af2c928288e6d4dd68c304c4ab5d45b2c8ad7 pkcs11-provider-0.3-2.fc40.x86_64.rpm -f2401414fa396e3b86471c311008383bcf51755aa30697c72147892a50de8894 podman-5.3.1-1.fc40.x86_64.rpm +2c13ac126020af45d70894275935320d6d786995d3b8056f6b95c05162fc207f podman-5.4.0-1.fc40.x86_64.rpm f6291fc1fd3ececcd23c9e693ae0d309d66d57cc2de5d3d389235604804c1c2a policycoreutils-3.7-7.fc40.x86_64.rpm 30a4f9d3631aaa1280c93ce4305847a9773973aa312e1802d1cd676cb2421689 polkit-124-2.fc40.x86_64.rpm f47bc65177a8b160916c00df9c84442afa1dd353880b3c0503d5a0b052d4956c polkit-libs-124-2.fc40.x86_64.rpm @@ -339,17 +339,17 @@ e1d443f7dcaec55eedc34bb66dd798ba9901dba69a169cff46f6c45671a3b3fa unbound-anchor 945aa536bc30050abc1870cef167cb944cf78d6628923476db43201a0054574b util-linux-2.40.2-1.fc40.x86_64.rpm 7ec1b5df780c5a30f8e901179480125a6ea87f1f7bad3b69da7f4b351b88c3dd util-linux-core-2.40-0.9.rc1.fc40.x86_64.rpm b1aa4e816c01c08c18924865640f214f717cdfc66837e53a24b8edfb80a86f9d util-linux-core-2.40.2-1.fc40.x86_64.rpm -c1ca72605589eb4116c8c339b4df2334dd270fe827e9bad347468a7b6580b595 vim-common-9.1.1081-1.fc40.x86_64.rpm -28c56e09bdcb307dfaaa144811680e28926b9976f03be5032b37b3048779584e vim-data-9.1.1081-1.fc40.noarch.rpm -468596456cb9b4d269d5878972c7ff27052a5e6c0e1dcffc91702a442b69df68 vim-enhanced-9.1.1081-1.fc40.x86_64.rpm -dbc8d88c0f3c05bb49f59bc774a5560a1ba2e49e1c3b774c76fced79b8f71661 vim-filesystem-9.1.1081-1.fc40.noarch.rpm -5f4aef6a6f19712c142b3e592ff05bba03dee877a0a098df294d876063918805 wget2-2.2.0-1.fc40.x86_64.rpm -a4119091a85b4aa4262a26f6ed2d6653de9b7c4def3636a2b0ad066436f29acd wget2-libs-2.2.0-1.fc40.x86_64.rpm -4948040a53814b1b4b76f6ec9d64ec21f3f2d1196a0a1c5b117f91fa58a267b1 wget2-wget-2.2.0-1.fc40.x86_64.rpm +fe04c806d2f7e4363448d7c7c6cc87429a347892975b20bf595f6ab7cea65c70 vim-common-9.1.1122-1.fc40.x86_64.rpm +3f0b8e880789439f16ed640255f95632e5212f3715c00105bc93084a623d1fa6 vim-data-9.1.1122-1.fc40.noarch.rpm +7eaec992f0f993ce747a024929f2faa96ce71812a910c78f35df5c44ce9585c9 vim-enhanced-9.1.1122-1.fc40.x86_64.rpm +7d899b071ed135f40e9929db6e5fb6a0bb0e1d257fcc263654ea0e713d262690 vim-filesystem-9.1.1122-1.fc40.noarch.rpm +69fd53fe41a8811e904b5429b1934a413d88978ec54d5c9e64370be32cbfc2ef wget2-2.2.0-2.fc40.x86_64.rpm +a00cc0a87c60ffbf5495a9796ac7074e6a47e0bebbb8c137d902014cd7ff5a30 wget2-libs-2.2.0-2.fc40.x86_64.rpm +09822d8d386dc81619639415a211b34592b0c5d43f7be288691cc4d933a0542c wget2-wget-2.2.0-2.fc40.x86_64.rpm cf0306ceed1c6b3be39060d85f16b1953b464d3a625488b170d3b7aadf600645 which-2.21-41.fc40.x86_64.rpm 4ede95a2fa3bc0ae617c8bf3a375b800163d58733b4829b15d9f038505d79fee whois-nls-5.5.20-3.fc40.noarch.rpm e2195010e857f56b19246f8b821f9391922880b7691b3728a413f540edc890a6 xkeyboard-config-2.41-1.fc40.noarch.rpm -c9dbcdedc3047f49ab85ef0e427207b6ee1d221a447557de2174e5b0d8960136 xxd-9.1.1081-1.fc40.x86_64.rpm +7dddad4c4829da61623f8716a237005d9de2e04b926f73f926083d371178b42b xxd-9.1.1122-1.fc40.x86_64.rpm ee599a1c4d7ee635e54ec137af4dded83f433b9c8a5976f75ecdcd000b5246e3 xz-5.4.6-3.fc40.x86_64.rpm b92ef78d8ab424c22130e457d0ef691d8197bff61c3b8852205d1b02baba3819 xz-libs-5.4.6-3.fc40.i686.rpm b6ee44b3d7e494b0364f26b7d0b169a8092180af787423cd5e8a47dc0f738a66 xz-libs-5.4.6-3.fc40.x86_64.rpm From c5b92084725d19a9c17cec9f5caa41eb0f245385 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 4 Mar 2025 12:45:24 +0100 Subject: [PATCH 131/311] deps: update ghcr.io/edgelesssys/cloud-provider-gcp Docker tag to v30.1.4 (#3671) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- internal/versions/versions.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/versions/versions.go b/internal/versions/versions.go index 7aaa26bab..d1b4db2ef 100644 --- a/internal/versions/versions.go +++ b/internal/versions/versions.go @@ -391,7 +391,7 @@ var VersionConfigs = map[ValidK8sVersion]KubernetesVersion{ // Check for newer versions at https://github.com/kubernetes-sigs/cloud-provider-azure/blob/master/README.md. CloudNodeManagerImageAzure: "mcr.microsoft.com/oss/kubernetes/azure-cloud-node-manager:v1.31.1@sha256:e9b522399e4ec6bc4ce90c173e59db135d742de7b16f0f5454b4d88ba78a98c7", // renovate:container // CloudControllerManagerImageGCP is the CCM image used on GCP. - CloudControllerManagerImageGCP: "ghcr.io/edgelesssys/cloud-provider-gcp:v30.1.0@sha256:64d2d5d4d2b5fb426c307c64ada9a61b64e797b56d9768363f145f2bd957998f", // renovate:container + CloudControllerManagerImageGCP: "ghcr.io/edgelesssys/cloud-provider-gcp:v30.1.4@sha256:0c3695a18d3825492196facb092e5fe56e466fa8517cde5a206fe21630c1da13", // renovate:container // CloudControllerManagerImageOpenStack is the CCM image used on OpenStack. CloudControllerManagerImageOpenStack: "registry.k8s.io/provider-os/openstack-cloud-controller-manager:v1.31.1@sha256:72cc0d22b83c613df809d8134e50404171513d92287e63e2313d9ad7e1ed630e", // renovate:container // External service image. Depends on k8s version. From 44d20385d242d4333c7eefe2ec924daac4e54d9f Mon Sep 17 00:00:00 2001 From: Moritz Sanft <58110325+msanft@users.noreply.github.com> Date: Tue, 4 Mar 2025 12:45:36 +0100 Subject: [PATCH 132/311] ci: replace tenv linter with usetesting (#3674) --- .golangci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.golangci.yml b/.golangci.yml index 9a03b837e..c3a46a296 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -31,7 +31,7 @@ linters: - misspell - noctx - revive - - tenv + - usetesting - unconvert - unparam From 6225d910deac8c02dff62f3abccaaa0ebae72383 Mon Sep 17 00:00:00 2001 From: edgelessci <71088502+edgelessci@users.noreply.github.com> Date: Tue, 4 Mar 2025 12:45:58 +0100 Subject: [PATCH 133/311] Post v2.21.0 release updates to main (#3670) * docs: release 2.21 * chore: update version.txt to v2.22.0-pre * chore: update CI for v2.21.0 --------- Co-authored-by: edgelessci --- .github/workflows/e2e-test-release.yml | 2 +- .github/workflows/e2e-test-weekly.yml | 2 +- .../_media/SLSA-Badge-full-level3.svg | 47 + .../_media/benchmark_fio_azure_bw.png | Bin 0 -> 30975 bytes .../_media/benchmark_fio_azure_iops.png | Bin 0 -> 29702 bytes .../_media/benchmark_fio_gcp_bw.png | Bin 0 -> 30401 bytes .../_media/benchmark_fio_gcp_iops.png | Bin 0 -> 30221 bytes .../_media/benchmark_net_p2p_azure.png | Bin 0 -> 36902 bytes .../_media/benchmark_net_p2p_gcp.png | Bin 0 -> 36961 bytes .../_media/benchmark_net_p2svc_azure.png | Bin 0 -> 38309 bytes .../_media/benchmark_net_p2svc_gcp.png | Bin 0 -> 38395 bytes .../benchmark_vault/5replicas/max_latency.png | Bin 0 -> 21327 bytes .../5replicas/mean_latency.png | Bin 0 -> 18809 bytes .../benchmark_vault/5replicas/min_latency.png | Bin 0 -> 21414 bytes .../benchmark_vault/5replicas/p99_latency.png | Bin 0 -> 24062 bytes .../_media/concept-constellation.svg | 460 +++++++++ .../version-2.21/_media/concept-managed.svg | 591 ++++++++++++ .../_media/constellation_oneline.svg | 52 ++ .../version-2.21/_media/example-emojivoto.jpg | Bin 0 -> 141236 bytes .../_media/example-online-boutique.jpg | Bin 0 -> 263458 bytes .../recovery-gcp-serial-console-link.png | Bin 0 -> 46134 bytes .../version-2.21/_media/tcb.svg | 535 +++++++++++ .../version-2.21/architecture/attestation.md | 409 ++++++++ .../architecture/encrypted-storage.md | 62 ++ .../version-2.21/architecture/images.md | 49 + .../version-2.21/architecture/keys.md | 130 +++ .../architecture/microservices.md | 73 ++ .../version-2.21/architecture/networking.md | 22 + .../architecture/observability.md | 74 ++ .../architecture/orchestration.md | 83 ++ .../version-2.21/architecture/overview.md | 30 + .../version-2.21/architecture/versions.md | 21 + .../version-2.21/getting-started/examples.md | 6 + .../getting-started/examples/emojivoto.md | 22 + .../examples/filestash-s3proxy.md | 107 +++ .../examples/horizontal-scaling.md | 98 ++ .../examples/online-boutique.md | 29 + .../getting-started/first-steps-local.md | 277 ++++++ .../getting-started/first-steps.md | 235 +++++ .../version-2.21/getting-started/install.md | 439 +++++++++ .../getting-started/marketplaces.md | 56 ++ docs/versioned_docs/version-2.21/intro.md | 34 + .../version-2.21/overview/clouds.md | 66 ++ .../overview/confidential-kubernetes.md | 42 + .../version-2.21/overview/license.md | 33 + .../overview/performance/application.md | 102 ++ .../overview/performance/compute.md | 11 + .../version-2.21/overview/performance/io.md | 204 ++++ .../overview/performance/performance.md | 17 + .../version-2.21/overview/product.md | 12 + .../overview/security-benefits.md | 22 + .../version-2.21/reference/cli.md | 873 ++++++++++++++++++ .../version-2.21/reference/migration.md | 128 +++ .../version-2.21/reference/slsa.md | 73 ++ .../version-2.21/reference/terraform.md | 37 + .../version-2.21/workflows/cert-manager.md | 13 + .../version-2.21/workflows/config.md | 353 +++++++ .../version-2.21/workflows/create.md | 93 ++ .../version-2.21/workflows/lb.md | 28 + .../version-2.21/workflows/recovery.md | 179 ++++ .../workflows/reproducible-builds.md | 63 ++ .../version-2.21/workflows/s3proxy.md | 58 ++ .../version-2.21/workflows/sbom.md | 93 ++ .../version-2.21/workflows/scale.md | 122 +++ .../version-2.21/workflows/storage.md | 281 ++++++ .../version-2.21/workflows/terminate.md | 60 ++ .../workflows/terraform-provider.md | 140 +++ .../version-2.21/workflows/troubleshooting.md | 151 +++ .../version-2.21/workflows/trusted-launch.md | 54 ++ .../version-2.21/workflows/upgrade.md | 110 +++ .../version-2.21/workflows/verify-cli.md | 129 +++ .../version-2.21/workflows/verify-cluster.md | 97 ++ .../version-2.21-sidebars.json | 304 ++++++ docs/versions.json | 1 + version.txt | 2 +- 75 files changed, 7893 insertions(+), 3 deletions(-) create mode 100644 docs/versioned_docs/version-2.21/_media/SLSA-Badge-full-level3.svg create mode 100644 docs/versioned_docs/version-2.21/_media/benchmark_fio_azure_bw.png create mode 100644 docs/versioned_docs/version-2.21/_media/benchmark_fio_azure_iops.png create mode 100644 docs/versioned_docs/version-2.21/_media/benchmark_fio_gcp_bw.png create mode 100644 docs/versioned_docs/version-2.21/_media/benchmark_fio_gcp_iops.png create mode 100644 docs/versioned_docs/version-2.21/_media/benchmark_net_p2p_azure.png create mode 100644 docs/versioned_docs/version-2.21/_media/benchmark_net_p2p_gcp.png create mode 100644 docs/versioned_docs/version-2.21/_media/benchmark_net_p2svc_azure.png create mode 100644 docs/versioned_docs/version-2.21/_media/benchmark_net_p2svc_gcp.png create mode 100644 docs/versioned_docs/version-2.21/_media/benchmark_vault/5replicas/max_latency.png create mode 100644 docs/versioned_docs/version-2.21/_media/benchmark_vault/5replicas/mean_latency.png create mode 100644 docs/versioned_docs/version-2.21/_media/benchmark_vault/5replicas/min_latency.png create mode 100644 docs/versioned_docs/version-2.21/_media/benchmark_vault/5replicas/p99_latency.png create mode 100644 docs/versioned_docs/version-2.21/_media/concept-constellation.svg create mode 100644 docs/versioned_docs/version-2.21/_media/concept-managed.svg create mode 100644 docs/versioned_docs/version-2.21/_media/constellation_oneline.svg create mode 100644 docs/versioned_docs/version-2.21/_media/example-emojivoto.jpg create mode 100644 docs/versioned_docs/version-2.21/_media/example-online-boutique.jpg create mode 100644 docs/versioned_docs/version-2.21/_media/recovery-gcp-serial-console-link.png create mode 100644 docs/versioned_docs/version-2.21/_media/tcb.svg create mode 100644 docs/versioned_docs/version-2.21/architecture/attestation.md create mode 100644 docs/versioned_docs/version-2.21/architecture/encrypted-storage.md create mode 100644 docs/versioned_docs/version-2.21/architecture/images.md create mode 100644 docs/versioned_docs/version-2.21/architecture/keys.md create mode 100644 docs/versioned_docs/version-2.21/architecture/microservices.md create mode 100644 docs/versioned_docs/version-2.21/architecture/networking.md create mode 100644 docs/versioned_docs/version-2.21/architecture/observability.md create mode 100644 docs/versioned_docs/version-2.21/architecture/orchestration.md create mode 100644 docs/versioned_docs/version-2.21/architecture/overview.md create mode 100644 docs/versioned_docs/version-2.21/architecture/versions.md create mode 100644 docs/versioned_docs/version-2.21/getting-started/examples.md create mode 100644 docs/versioned_docs/version-2.21/getting-started/examples/emojivoto.md create mode 100644 docs/versioned_docs/version-2.21/getting-started/examples/filestash-s3proxy.md create mode 100644 docs/versioned_docs/version-2.21/getting-started/examples/horizontal-scaling.md create mode 100644 docs/versioned_docs/version-2.21/getting-started/examples/online-boutique.md create mode 100644 docs/versioned_docs/version-2.21/getting-started/first-steps-local.md create mode 100644 docs/versioned_docs/version-2.21/getting-started/first-steps.md create mode 100644 docs/versioned_docs/version-2.21/getting-started/install.md create mode 100644 docs/versioned_docs/version-2.21/getting-started/marketplaces.md create mode 100644 docs/versioned_docs/version-2.21/intro.md create mode 100644 docs/versioned_docs/version-2.21/overview/clouds.md create mode 100644 docs/versioned_docs/version-2.21/overview/confidential-kubernetes.md create mode 100644 docs/versioned_docs/version-2.21/overview/license.md create mode 100644 docs/versioned_docs/version-2.21/overview/performance/application.md create mode 100644 docs/versioned_docs/version-2.21/overview/performance/compute.md create mode 100644 docs/versioned_docs/version-2.21/overview/performance/io.md create mode 100644 docs/versioned_docs/version-2.21/overview/performance/performance.md create mode 100644 docs/versioned_docs/version-2.21/overview/product.md create mode 100644 docs/versioned_docs/version-2.21/overview/security-benefits.md create mode 100644 docs/versioned_docs/version-2.21/reference/cli.md create mode 100644 docs/versioned_docs/version-2.21/reference/migration.md create mode 100644 docs/versioned_docs/version-2.21/reference/slsa.md create mode 100644 docs/versioned_docs/version-2.21/reference/terraform.md create mode 100644 docs/versioned_docs/version-2.21/workflows/cert-manager.md create mode 100644 docs/versioned_docs/version-2.21/workflows/config.md create mode 100644 docs/versioned_docs/version-2.21/workflows/create.md create mode 100644 docs/versioned_docs/version-2.21/workflows/lb.md create mode 100644 docs/versioned_docs/version-2.21/workflows/recovery.md create mode 100644 docs/versioned_docs/version-2.21/workflows/reproducible-builds.md create mode 100644 docs/versioned_docs/version-2.21/workflows/s3proxy.md create mode 100644 docs/versioned_docs/version-2.21/workflows/sbom.md create mode 100644 docs/versioned_docs/version-2.21/workflows/scale.md create mode 100644 docs/versioned_docs/version-2.21/workflows/storage.md create mode 100644 docs/versioned_docs/version-2.21/workflows/terminate.md create mode 100644 docs/versioned_docs/version-2.21/workflows/terraform-provider.md create mode 100644 docs/versioned_docs/version-2.21/workflows/troubleshooting.md create mode 100644 docs/versioned_docs/version-2.21/workflows/trusted-launch.md create mode 100644 docs/versioned_docs/version-2.21/workflows/upgrade.md create mode 100644 docs/versioned_docs/version-2.21/workflows/verify-cli.md create mode 100644 docs/versioned_docs/version-2.21/workflows/verify-cluster.md create mode 100644 docs/versioned_sidebars/version-2.21-sidebars.json diff --git a/.github/workflows/e2e-test-release.yml b/.github/workflows/e2e-test-release.yml index 47d077bc0..1fbc1c174 100644 --- a/.github/workflows/e2e-test-release.yml +++ b/.github/workflows/e2e-test-release.yml @@ -409,7 +409,7 @@ jobs: fail-fast: false max-parallel: 1 matrix: - fromVersion: ["v2.20.1"] + fromVersion: ["v2.21.0"] attestationVariant: ["gcp-sev-snp", "azure-sev-snp", "azure-tdx", "aws-sev-snp"] name: Run upgrade tests secrets: inherit diff --git a/.github/workflows/e2e-test-weekly.yml b/.github/workflows/e2e-test-weekly.yml index 067390eeb..04cf0b04c 100644 --- a/.github/workflows/e2e-test-weekly.yml +++ b/.github/workflows/e2e-test-weekly.yml @@ -420,7 +420,7 @@ jobs: fail-fast: false max-parallel: 1 matrix: - fromVersion: ["v2.20.1"] + fromVersion: ["v2.21.0"] attestationVariant: ["gcp-sev-snp", "azure-sev-snp", "azure-tdx", "aws-sev-snp"] name: Run upgrade tests secrets: inherit diff --git a/docs/versioned_docs/version-2.21/_media/SLSA-Badge-full-level3.svg b/docs/versioned_docs/version-2.21/_media/SLSA-Badge-full-level3.svg new file mode 100644 index 000000000..7154d4a13 --- /dev/null +++ b/docs/versioned_docs/version-2.21/_media/SLSA-Badge-full-level3.svg @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/versioned_docs/version-2.21/_media/benchmark_fio_azure_bw.png b/docs/versioned_docs/version-2.21/_media/benchmark_fio_azure_bw.png new file mode 100644 index 0000000000000000000000000000000000000000..a82ebe2d0511dc0a54f663e23c25dc275edaa15c GIT binary patch literal 30975 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�awQ>N&Uf?MYaB0>911Z$XQDz2h_WnZ`HC#RNE z!^--ER8y`idG#DJ^S*`AQZ)A?B2TZ|+U9cym9>-1W^uOW7)R$)K(^14rJp}O1A@Q{ zrD^>B&i3~9ZwxdFrH58lL-w19_n8aC@{_8<#c;ask%ydW%RddczL*aLqkmYN)lE0BH1lmwgU=85$AaQkE| z$SA!pvu{qynrTubh)%=0x;k&Y^)UO=M~e#%SZ((lWO%{q7xTG2qf>|%t@mm~3CN3^ zB;*8ARS=rkK2EE0e&mQyn6ScOm$F^=^?VT&0`)6)?tZ`SpR&h}CF@FdK|>%7xxfiU zx5%czMh3VW2Z$hyW>-x#Aym}S^GjXH)v>N=xpAZIluKVZBI9qG{dRv4lav6lq#;*& zJE5OSoklEO$qBIcmXjfQ;lZ_;sps*hk_p!0mCbP>Q7K(j3Qx&-mLWjRC1eVu8h+zk zgZHp3-edegsM#yW8p;yYBy5|tp7!>c4w~&DSGKS1X}gxuCpY@tcH^hx3qCUN!^4So z?GFP~x3WJzytc*eJMau)MpDwF(lonTEnJuREW26S`p$-zQk+tF9zF6OpItsBhB{*z z?QPYRo+D@ClT1tMUhQXPzZFTzns2`zK69c;0XYg0(_9V(H_;M$4~?EsytW(_KoWp# z@t^?#7qfr*G#4*qBsS`-B}M%=gOG4FRcVtKr&Q)3PRV9QL2RtaK{s<=!FKN7Z=;9l zX->H9b`ZpGFaCGo?JMr35xAw5R&ULgGSc1Y(e68OOQCn2#utg za)wNd_o&;{JHoSw33ThbI|FvL-R)PN;W5NKg{r|22tSQPGc>+a*51m$t+;1T;iL2z zq^+9MCO}T9&0Mpbbq*8n*5=I5xXC)GO0Y8qU!hWnAK)8%KXQT!%Cf|(fs68<&3e|# z^ZAZ@*aDUsvn_?2_M<*w{91**85E)G@70ePN7BSCmMOQGabyl|9@%dJV=my!%^~JS zmRX18${kV#puUvvWjLO|^X0nv0VMXc(1Q8Z$ie@dotLr`j8no=EmIAwyLI|n|IjZ^ zzKRH*%eHNF?-Nglh{%W;-s*IpYp3x#M>B3EZ-SY=g&=9A%^!YYKQ--4?Nz(joabN9 z&n_bS400Dfz{t&$k%?V+QoJZLVDy!YPx0mnEs3o5*AYWn&FeII`v5mBz<&x38|JOx|aQ$U5bqOUiL;=5ol9X+z3G8-vhVV*gk&# z1U?59UF0}`A61SBVG4&ZJa}-I(`iL;3cKJk^a@48$xyK3+BbLW`V@eoy|u8Qw&}&- z&o7ZL5L|a+wsPvFgkAP8^8-z@)NKMC9A2t%obtcO8>`RH=M@&Z0X4?}1)X!x(tz9G|N6yzoOpFvTL73im?9OqLZVg3 z@6NqZ_ZuafRZ`(tXnC0gHwn3t(!~!uRBX)(Z}LaB0gV%|~fZl?QN@Yvb!b6~j$m8;wv(vZV&0mlS7;Zx- zm*TA1E_9!Yej>Wc=K4A%5K2Ib@qEkVN`#-F(U1IsFuS0dScV zKA@LX(bFloizcx~b@r&M1GP|A4;{4vRy|JyT5VV|@xK~ooxJ+*|3@YNZ$h`er&n&p Wd&#xuzHQJ)b^FlcgN%ubHvR|v6RGR~ literal 0 HcmV?d00001 diff --git a/docs/versioned_docs/version-2.21/_media/benchmark_fio_azure_iops.png b/docs/versioned_docs/version-2.21/_media/benchmark_fio_azure_iops.png new file mode 100644 index 0000000000000000000000000000000000000000..1723257a812a773fea286d512d38ed9186a9a46e GIT binary patch literal 29702 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 literal 0 HcmV?d00001 diff --git a/docs/versioned_docs/version-2.21/_media/benchmark_fio_gcp_bw.png b/docs/versioned_docs/version-2.21/_media/benchmark_fio_gcp_bw.png new file mode 100644 index 0000000000000000000000000000000000000000..4f0ecc94bb43d5f9534300605a74aca374da4c3c GIT binary patch literal 30401 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 literal 0 HcmV?d00001 diff --git a/docs/versioned_docs/version-2.21/_media/benchmark_net_p2p_azure.png b/docs/versioned_docs/version-2.21/_media/benchmark_net_p2p_azure.png new file mode 100644 index 0000000000000000000000000000000000000000..9130349c764286e66108a54ffa77a2079807a57b GIT binary patch literal 36902 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 RMnD*58gDV~*w6Df{tphRb0+`* literal 0 HcmV?d00001 diff --git a/docs/versioned_docs/version-2.21/_media/benchmark_net_p2p_gcp.png b/docs/versioned_docs/version-2.21/_media/benchmark_net_p2p_gcp.png new file mode 100644 index 0000000000000000000000000000000000000000..a41557e96c15e5407beadc5011a3f3fa6aaaa71d GIT binary patch literal 36961 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 w{l|Gl!_|L&u}A+)itsPO`I2 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 Z{Ipv;Zm&N^7q&v795sIAG0R!&{{`ycGXVeq literal 0 HcmV?d00001 diff --git a/docs/versioned_docs/version-2.21/_media/benchmark_net_p2svc_gcp.png b/docs/versioned_docs/version-2.21/_media/benchmark_net_p2svc_gcp.png new file mode 100644 index 0000000000000000000000000000000000000000..55916a1de91094b18b3d47c50fc5f5900adfe9a3 GIT binary patch literal 38395 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
      xlH_*x9qK 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 VZqJAB#@`TUPAZ?sk~8rCe*osmgx literal 0 HcmV?d00001 diff --git a/docs/versioned_docs/version-2.21/_media/benchmark_vault/5replicas/p99_latency.png b/docs/versioned_docs/version-2.21/_media/benchmark_vault/5replicas/p99_latency.png new file mode 100644 index 0000000000000000000000000000000000000000..0190118b22f8ea7dbfc862067b06a47bd6ce0d42 GIT binary patch literal 24062 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 + diff --git a/docs/versioned_docs/version-2.21/_media/concept-managed.svg b/docs/versioned_docs/version-2.21/_media/concept-managed.svg new file mode 100644 index 000000000..5645a608f --- /dev/null +++ b/docs/versioned_docs/version-2.21/_media/concept-managed.svg @@ -0,0 +1,591 @@ + + diff --git a/docs/versioned_docs/version-2.21/_media/constellation_oneline.svg b/docs/versioned_docs/version-2.21/_media/constellation_oneline.svg new file mode 100644 index 000000000..4e354958a --- /dev/null +++ b/docs/versioned_docs/version-2.21/_media/constellation_oneline.svg @@ -0,0 +1,52 @@ + + + + + + + + diff --git a/docs/versioned_docs/version-2.21/_media/example-emojivoto.jpg b/docs/versioned_docs/version-2.21/_media/example-emojivoto.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4be0d5b26dc70a6fb99a5105c234e6d7ab51a213 GIT binary patch literal 141236 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 K-*lqjT literal 0 HcmV?d00001 diff --git a/docs/versioned_docs/version-2.21/_media/recovery-gcp-serial-console-link.png b/docs/versioned_docs/version-2.21/_media/recovery-gcp-serial-console-link.png new file mode 100644 index 0000000000000000000000000000000000000000..eb67f0e99985804d9f258a4bc74d42dfabf0d4a0 GIT binary patch literal 46134 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 fzhzeZch178eTiYWYbMif0YhC`N2%(mP2~Rqh literal 0 HcmV?d00001 diff --git a/docs/versioned_docs/version-2.21/_media/tcb.svg b/docs/versioned_docs/version-2.21/_media/tcb.svg new file mode 100644 index 000000000..e5bcb5b95 --- /dev/null +++ b/docs/versioned_docs/version-2.21/_media/tcb.svg @@ -0,0 +1,535 @@ + + diff --git a/docs/versioned_docs/version-2.21/architecture/attestation.md b/docs/versioned_docs/version-2.21/architecture/attestation.md new file mode 100644 index 000000000..9bd157460 --- /dev/null +++ b/docs/versioned_docs/version-2.21/architecture/attestation.md @@ -0,0 +1,409 @@ +# Attestation + +This page explains Constellation's attestation process and highlights the cornerstones of its trust model. + +## Terms + +The following lists terms and concepts that help to understand the attestation concept of Constellation. + +### Trusted Platform Module (TPM) + +A TPM chip is a dedicated tamper-resistant crypto-processor. +It can securely store artifacts such as passwords, certificates, encryption keys, or *runtime measurements* (more on this below). +When a TPM is implemented in software, it's typically called a *virtual* TPM (vTPM). + +### Runtime measurement + +A runtime measurement is a cryptographic hash of the memory pages of a so called *runtime component*. Runtime components of interest typically include a system's bootloader or OS kernel. + +### Platform Configuration Register (PCR) + +A Platform Configuration Register (PCR) is a memory location in the TPM that has some unique properties. +To store a new value in a PCR, the existing value is extended with a new value as follows: + +``` +PCR[N] = HASHalg( PCR[N] || ArgumentOfExtend ) +``` + +The PCRs are typically used to store runtime measurements. +The new value of a PCR is always an extension of the existing value. +Thus, storing the measurements of multiple components into the same PCR irreversibly links them together. + +### Measured boot + +Measured boot builds on the concept of chained runtime measurements. +Each component in the boot chain loads and measures the next component into the PCR before executing it. +By comparing the resulting PCR values against trusted reference values, the integrity of the entire boot chain and thereby the running system can be ensured. + +### Remote attestation (RA) + +Remote attestation is the process of verifying certain properties of an application or platform, such as integrity and confidentiality, from a remote location. +In the case of a measured boot, the goal is to obtain a signed attestation statement on the PCR values of the boot measurements. +The statement can then be verified and compared to a set of trusted reference values. +This way, the integrity of the platform can be ensured before sharing secrets with it. + +### Confidential virtual machine (CVM) + +Confidential computing (CC) is the protection of data in-use with hardware-based trusted execution environments (TEEs). +With CVMs, TEEs encapsulate entire virtual machines and isolate them against the hypervisor, other VMs, and direct memory access. +After loading the initial VM image into encrypted memory, the hypervisor calls for a secure processor to measure these initial memory pages. +The secure processor locks these pages and generates an attestation report on the initial page measurements. +CVM memory pages are encrypted with a key that resides inside the secure processor, which makes sure only the guest VM can access them. +The attestation report is signed by the secure processor and can be verified using remote attestation via the certificate authority of the hardware vendor. +Such an attestation statement guarantees the confidentiality and integrity of a CVM. + +### Attested TLS (aTLS) + +In a CC environment, attested TLS (aTLS) can be used to establish secure connections between two parties using the remote attestation features of the CC components. + +aTLS modifies the TLS handshake by embedding an attestation statement into the TLS certificate. +Instead of relying on a certificate authority, aTLS uses this attestation statement to establish trust in the certificate. + +The protocol can be used by clients to verify a server certificate, by a server to verify a client certificate, or for mutual verification (mutual aTLS). + +## Overview + +The challenge for Constellation is to lift a CVM's attestation statement to the Kubernetes software layer and make it end-to-end verifiable. +From there, Constellation needs to expand the attestation from a single CVM to the entire cluster. + +The [*JoinService*](microservices.md#joinservice) and [*VerificationService*](microservices.md#verificationservice) are where all runs together. +Internally, the *JoinService* uses remote attestation to securely join CVM nodes to the cluster. +Externally, the *VerificationService* provides an attestation statement for the cluster's CVMs and configuration. + +The following explains the details of both steps. + +## Node attestation + +The idea is that Constellation nodes should have verifiable integrity from the CVM hardware measurement up to the Kubernetes software layer. +The solution is a verifiable boot chain and an integrity-protected runtime environment. + +Constellation uses measured boot within CVMs, measuring each component in the boot process before executing it. +Outside of CC, this is usually implemented via TPMs. +CVM technologies differ in how they implement runtime measurements, but the general concepts are similar to those of a TPM. +For simplicity, TPM terminology like *PCR* is used in the following. + +When a Constellation node image boots inside a CVM, measured boot is used for all stages and components of the boot chain. +This process goes up to the root filesystem. +The root filesystem is mounted read-only with integrity protection. +For the details on the image and boot stages see the [image architecture](../architecture/images.md) documentation. +Any changes to the image will inevitably also change the corresponding PCR values. +To create a node attestation statement, the Constellation image obtains a CVM attestation statement from the hardware. +This includes the runtime measurements and thereby binds the measured boot results to the CVM hardware measurement. + +In addition to the image measurements, Constellation extends a PCR during the [initialization phase](../workflows/create.md) that irrevocably marks the node as initialized. +The measurement is created using the [*clusterID*](../architecture/keys.md#cluster-identity), tying all future attestation statements to this ID. +Thereby, an attestation statement is unique for every cluster and a node can be identified unambiguously as being initialized. + +To verify an attestation, the hardware's signature and a statement are verified first to establish trust in the contained runtime measurements. +If successful, the measurements are verified against the trusted values of the particular Constellation release version. +Finally, the measurement of the *clusterID* can be compared by calculating it with the [master secret](keys.md#master-secret). + +### Runtime measurements + +Constellation uses runtime measurements to implement the measured boot approach. +As stated above, the underlying hardware technology and guest firmware differ in their implementations of runtime measurements. +The following gives a detailed description of the available measurements in the different cloud environments. + +The runtime measurements consist of two types of values: + +* **Measurements produced by the cloud infrastructure and firmware of the CVM**: +These are measurements of closed-source firmware and other values controlled by the cloud provider. +While not being reproducible for the user, some of them can be compared against previously observed values. +Others may change frequently and aren't suitable for verification. +The [signed image measurements](#chain-of-trust) include measurements that are known, previously observed values. + +* **Measurements produced by the Constellation bootloader and boot chain**: +The Constellation Bootloader takes over from the CVM firmware and [measures the rest of the boot chain](images.md). +The Constellation [Bootstrapper](microservices.md#bootstrapper) is the first user mode component that runs in a Constellation image. +It extends PCR registers with the [IDs](keys.md#cluster-identity) of the cluster marking a node as initialized. + +Constellation allows to specify in the config which measurements should be enforced during the attestation process. +Enforcing non-reproducible measurements controlled by the cloud provider means that changes in these values require manual updates to the cluster's config. +By default, Constellation only enforces measurements that are stable values produced by the infrastructure or by Constellation directly. + + + + +Constellation uses the [vTPM](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/nitrotpm.html) (NitroTPM) feature of the [AWS Nitro System](http://aws.amazon.com/ec2/nitro/) on AWS for runtime measurements. + +The vTPM adheres to the [TPM 2.0](https://trustedcomputinggroup.org/resource/tpm-library-specification/) specification. +The VMs are attested by obtaining signed PCR values over the VM's boot configuration from the TPM and comparing them to a known, good state (measured boot). + +The following table lists all PCR values of the vTPM and the measured components. +It also lists what components of the boot chain did the measurements and if the value is reproducible and verifiable. +The latter means that the value can be generated offline and compared to the one in the vTPM. + +| PCR | Components | Measured by | Reproducible and verifiable | +| ----------- | ---------------------------------------------------------------- | -------------------------------------- | --------------------------- | +| 0 | Firmware | AWS | No | +| 1 | Firmware | AWS | No | +| 2 | Firmware | AWS | No | +| 3 | Firmware | AWS | No | +| 4 | Constellation Bootloader, Kernel, initramfs, Kernel command line | AWS, Constellation Bootloader | Yes | +| 5 | Firmware | AWS | No | +| 6 | Firmware | AWS | No | +| 7 | Secure Boot Policy | AWS, Constellation Bootloader | No | +| 8 | - | - | - | +| 9 | initramfs, Kernel command line | Linux Kernel | Yes | +| 10 | User space | Linux IMA | No[^1] | +| 11 | Unified Kernel Image components | Constellation Bootloader | Yes | +| 12 | Reserved | (User space, Constellation Bootloader) | Yes | +| 13 | Reserved | (Constellation Bootloader) | Yes | +| 14 | Secure Boot State | Constellation Bootloader | No | +| 15 | ClusterID | Constellation Bootstrapper | Yes | +| 16–23 | Unused | - | - | + + + + +Constellation uses the [vTPM](https://docs.microsoft.com/en-us/azure/virtual-machines/trusted-launch#vtpm) feature of Azure CVMs for runtime measurements. +This vTPM adheres to the [TPM 2.0](https://trustedcomputinggroup.org/resource/tpm-library-specification/) specification. +It provides a [measured boot](https://docs.microsoft.com/en-us/azure/security/fundamentals/measured-boot-host-attestation#measured-boot) verification that's based on the trusted launch feature of [Trusted Launch VMs](https://docs.microsoft.com/en-us/azure/virtual-machines/trusted-launch). + +The following table lists all PCR values of the vTPM and the measured components. +It also lists what components of the boot chain did the measurements and if the value is reproducible and verifiable. +The latter means that the value can be generated offline and compared to the one in the vTPM. + +| PCR | Components | Measured by | Reproducible and verifiable | +| ----------- | ---------------------------------------------------------------- | -------------------------------------- | --------------------------- | +| 0 | Firmware | Azure | No | +| 1 | Firmware | Azure | No | +| 2 | Firmware | Azure | No | +| 3 | Firmware | Azure | No | +| 4 | Constellation Bootloader, Kernel, initramfs, Kernel command line | Azure, Constellation Bootloader | Yes | +| 5 | Reserved | Azure | No | +| 6 | VM Unique ID | Azure | No | +| 7 | Secure Boot State | Azure, Constellation Bootloader | No | +| 8 | - | - | - | +| 9 | initramfs, Kernel command line | Linux Kernel | Yes | +| 10 | User space | Linux IMA | No[^1] | +| 11 | Unified Kernel Image components | Constellation Bootloader | Yes | +| 12 | Reserved | (User space, Constellation Bootloader) | Yes | +| 13 | Reserved | (Constellation Bootloader) | Yes | +| 14 | Secure Boot State | Constellation Bootloader | No | +| 15 | ClusterID | Constellation Bootstrapper | Yes | +| 16–23 | Unused | - | - | + + + + +Constellation uses the [vTPM](https://cloud.google.com/compute/confidential-vm/docs/about-cvm) feature of CVMs on GCP for runtime measurements. +Note that this vTPM doesn't run inside the hardware-protected CVM context, but is emulated by the hypervisor. + +The vTPM adheres to the [TPM 2.0](https://trustedcomputinggroup.org/resource/tpm-library-specification/) specification. +It provides a [launch attestation report](https://cloud.google.com/compute/confidential-vm/docs/monitoring#about_launch_attestation_report_events) that's based on the measured boot feature of [Shielded VMs](https://cloud.google.com/compute/shielded-vm/docs/shielded-vm#measured-boot). + +The following table lists all PCR values of the vTPM and the measured components. +It also lists what components of the boot chain did the measurements and if the value is reproducible and verifiable. +The latter means that the value can be generated offline and compared to the one in the vTPM. + +| PCR | Components | Measured by | Reproducible and verifiable | +| ----------- | ---------------------------------------------------------------- | -------------------------------------- | --------------------------- | +| 0 | CVM version and technology | GCP | No | +| 1 | Firmware | GCP | No | +| 2 | Firmware | GCP | No | +| 3 | Firmware | GCP | No | +| 4 | Constellation Bootloader, Kernel, initramfs, Kernel command line | GCP, Constellation Bootloader | Yes | +| 5 | Disk GUID partition table | GCP | No | +| 6 | Disk GUID partition table | GCP | No | +| 7 | GCP Secure Boot Policy | GCP, Constellation Bootloader | No | +| 8 | - | - | - | +| 9 | initramfs, Kernel command line | Linux Kernel | Yes | +| 10 | User space | Linux IMA | No[^1] | +| 11 | Unified Kernel Image components | Constellation Bootloader | Yes | +| 12 | Reserved | (User space, Constellation Bootloader) | Yes | +| 13 | Reserved | (Constellation Bootloader) | Yes | +| 14 | Secure Boot State | Constellation Bootloader | No | +| 15 | ClusterID | Constellation Bootstrapper | Yes | +| 16–23 | Unused | - | - | + + + + +Constellation uses a hypervisor-based vTPM for runtime measurements. + +The vTPM adheres to the [TPM 2.0](https://trustedcomputinggroup.org/resource/tpm-library-specification/) specification. +The VMs are attested by obtaining signed PCR values over the VM's boot configuration from the TPM and comparing them to a known, good state (measured boot). + +The following table lists all PCR values of the vTPM and the measured components. +It also lists what components of the boot chain did the measurements and if the value is reproducible and verifiable. +The latter means that the value can be generated offline and compared to the one in the vTPM. + +| PCR | Components | Measured by | Reproducible and verifiable | +| ----------- | ---------------------------------------------------------------- | -------------------------------------- | --------------------------- | +| 0 | Firmware | STACKIT | No | +| 1 | Firmware | STACKIT | No | +| 2 | Firmware | STACKIT | No | +| 3 | Firmware | STACKIT | No | +| 4 | Constellation Bootloader, Kernel, initramfs, Kernel command line | STACKIT, Constellation Bootloader | Yes | +| 5 | Firmware | STACKIT | No | +| 6 | Firmware | STACKIT | No | +| 7 | Secure Boot Policy | STACKIT, Constellation Bootloader | No | +| 8 | - | - | - | +| 9 | initramfs, Kernel command line | Linux Kernel | Yes | +| 10 | User space | Linux IMA | No[^1] | +| 11 | Unified Kernel Image components | Constellation Bootloader | Yes | +| 12 | Reserved | (User space, Constellation Bootloader) | Yes | +| 13 | Reserved | (Constellation Bootloader) | Yes | +| 14 | Secure Boot State | Constellation Bootloader | No | +| 15 | ClusterID | Constellation Bootstrapper | Yes | +| 16–23 | Unused | - | - | + + + + +### CVM verification + +To verify the integrity of the received attestation statement, a chain of trust from the CVM technology to the interface providing the statement has to be established. +For verification of the CVM technology, Constellation may expose additional options in its config file. + + + + +On AWS, AMD SEV-SNP is used to provide runtime encryption to the VMs. +An SEV-SNP attestation report is used to establish trust in the VM. +You may customize certain parameters for verification of the attestation statement using the Constellation config file. + +* TCB versions + + You can set the minimum version numbers of components in the SEV-SNP TCB. + Use the latest versions to enforce that only machines with the most recent firmware updates are allowed to join the cluster. + Alternatively, you can set a lower minimum version to allow slightly out-of-date machines to still be able to join the cluster. + +* AMD Root Key Certificate + + This certificate is the root of trust for verifying the SEV-SNP certificate chain. + +* AMD Signing Key Certificate + + This is the intermediate certificate for verifying the SEV-SNP report's signature. + If it's not specified, the CLI fetches it from the AMD key distribution server. + + + + +On Azure, AMD SEV-SNP is used to provide runtime encryption to the VMs. +An SEV-SNP attestation report is used to establish trust in the vTPM running inside the VM. +You may customize certain parameters for verification of the attestation statement using the Constellation config file. + +* TCB versions + + You can set the minimum version numbers of components in the SEV-SNP TCB. + Use the latest versions to enforce that only machines with the most recent firmware updates are allowed to join the cluster. + Alternatively, you can set a lower minimum version to allow slightly out-of-date machines to still be able to join the cluster. + +* AMD Root Key Certificate + + This certificate is the root of trust for verifying the SEV-SNP certificate chain. + +* Firmware Signer + + This config option allows you to specify how the firmware signer should be verified. + More explicitly, it controls the verification of the `IDKeyDigest` value in the SEV-SNP attestation report. + You can provide a list of accepted key digests and specify a policy on how this list is compared against the reported `IDKeyDigest`. + + + + +On GCP, AMD SEV-SNP is used to provide runtime encryption to the VMs. +An SEV-SNP attestation report is used to establish trust in the VM. +You may customize certain parameters for verification of the attestation statement using the Constellation config file. + +* TCB versions + + You can set the minimum version numbers of components in the SEV-SNP TCB. + Use the latest versions to enforce that only machines with the most recent firmware updates are allowed to join the cluster. + Alternatively, you can set a lower minimum version to allow slightly out-of-date machines to still be able to join the cluster. + +* AMD Root Key Certificate + + This certificate is the root of trust for verifying the SEV-SNP certificate chain. + +* AMD Signing Key Certificate + + This is the intermediate certificate for verifying the SEV-SNP report's signature. + If it's not specified, the CLI fetches it from the AMD key distribution server. + + + + +On STACKIT, AMD SEV-ES is used to provide runtime encryption to the VMs. +The hypervisor-based vTPM is used to establish trust in the VM via [runtime measurements](#runtime-measurements). +There is no additional configuration available for STACKIT. + + + + +## Cluster attestation + +Cluster-facing, Constellation's [*JoinService*](microservices.md#joinservice) verifies each node joining the cluster given the configured ground truth runtime measurements. +User-facing, the [*VerificationService*](microservices.md#verificationservice) provides an interface to verify a node using remote attestation. +By verifying the first node during the [initialization](microservices.md#bootstrapper) and configuring the ground truth measurements that are subsequently enforced by the *JoinService*, the whole cluster is verified in a transitive way. + +### Cluster-facing attestation + +The *JoinService* is provided with the runtime measurements of the whitelisted Constellation image version as the ground truth. +During the initialization and the cluster bootstrapping, each node connects to the *JoinService* using [aTLS](#attested-tls-atls). +During the handshake, the node transmits an attestation statement including its runtime measurements. +The *JoinService* verifies that statement and compares the measurements against the ground truth. +For details of the initialization process check the [microservice descriptions](microservices.md). + +After the initialization, every node updates its runtime measurements with the *clusterID* value, marking it irreversibly as initialized. +When an initialized node tries to join another cluster, its measurements inevitably mismatch the measurements of an uninitialized node and it will be declined. + +### User-facing attestation + +The [*VerificationService*](microservices.md#verificationservice) provides an endpoint for obtaining its hardware-based remote attestation statement, which includes the runtime measurements. +A user can [verify](../workflows/verify-cluster.md) this statement and compare the measurements against the configured ground truth and, thus, verify the identity and integrity of all Constellation components and the cluster configuration. Subsequently, the user knows that the entire cluster is in the expected state and is trustworthy. + +## Putting it all together + +This section puts the aforementioned concepts together and illustrate how trust into a Constellation cluster is established and maintained. + +### CLI and node images + +It all starts with the CLI executable. The CLI is signed by Edgeless Systems. To ensure non-repudiability for CLI releases, Edgeless Systems publishes corresponding signatures to the public ledger of the [sigstore project](https://www.sigstore.dev/). There's a [step-by-step guide](../workflows/verify-cli.md) on how to verify CLI signatures based on sigstore. + +The CLI contains the latest runtime measurements of the Constellation node image for all supported cloud platforms. In case a different version of the node image is to be used, the corresponding runtime measurements can be fetched using the CLI's [fetch-measurements command](../reference/cli.md#constellation-config-fetch-measurements). This command downloads the runtime measurements and the corresponding signature from cdn.confidential.cloud. See for example the following files corresponding to node image v2.16.3: + +* [Measurements](https://cdn.confidential.cloud/constellation/v2/ref/-/stream/stable/v2.16.3/image/measurements.json) +* [Signature](https://cdn.confidential.cloud/constellation/v2/ref/-/stream/stable/v2.16.3/image/measurements.json.sig) + +The CLI contains the long-term public key of Edgeless Systems to verify the signature of downloaded runtime measurements. + +### Cluster creation + +When a cluster is [created](../workflows/create.md), the CLI automatically verifies the runtime measurements of the *first node* using remote attestation. Based on this, the CLI and the first node set up a temporary TLS connection. This [aTLS](#attested-tls-atls) connection is used for two things: + +1. The CLI sends the [master secret](../architecture/keys.md#master-secret) of the to-be-created cluster to the CLI. The master secret is generated by the first node. +2. The first node sends a [kubeconfig file](https://www.redhat.com/sysadmin/kubeconfig) with Kubernetes credentials to the CLI. + +After this, the aTLS connection is closed and the first node bootstraps the Kubernetes cluster. All subsequent interactions between the CLI and the cluster go via the [Kubernetes API](https://kubernetes.io/docs/concepts/overview/kubernetes-api/) server running inside the cluster. The CLI (and other tools like kubectl) use the credentials referenced by the kubeconfig file to authenticate themselves towards the Kubernetes API server and to establish a mTLS connection. + +The CLI connects to the Kubernetes API to write the runtime measurements for the applicable node image to etcd. The JoinService uses these runtime measurements to verify all nodes that join the cluster subsequently. + +### Chain of trust + +In summary, there's a chain of trust based on cryptographic signatures that goes from the user to the cluster via the CLI. This is illustrated in the following diagram. + +```mermaid +flowchart LR + A[User]-- "verifies" -->B[CLI] + B[CLI]-- "verifies" -->C([Runtime measurements]) + D[Edgeless Systems]-- "signs" -->B[CLI] + D[Edgeless Systems]-- "signs" -->C([Runtime measurements]) + B[CLI]-- "verifies (remote attestation)" -->E[First node] + E[First node]-- "verifies (remote attestation)" -->F[Other nodes] + C([Runtime measurements]) -.-> E[First node] + C([Runtime measurements]) -.-> F[Other nodes] +``` + +### Upgrades + +Whenever a cluster is [upgraded](../workflows/upgrade.md) to a new version of the node image, the CLI sends the corresponding runtime measurements via the Kubernetes API server. The new runtime measurements are stored in etcd within the cluster and replace any previous runtime measurements. The new runtime measurements are then used automatically by the JoinService for the verification of new nodes. + +## References + +[^1]: Linux IMA produces runtime measurements of user-space binaries. +However, these measurements aren't deterministic and thus, PCR\[10] can't be compared to a constant value. +Instead, a policy engine must be used to verify the TPM event log against a policy. diff --git a/docs/versioned_docs/version-2.21/architecture/encrypted-storage.md b/docs/versioned_docs/version-2.21/architecture/encrypted-storage.md new file mode 100644 index 000000000..f047fa4a9 --- /dev/null +++ b/docs/versioned_docs/version-2.21/architecture/encrypted-storage.md @@ -0,0 +1,62 @@ +# Encrypted persistent storage + +Confidential VMs provide runtime memory encryption to protect data in use. +In the context of Kubernetes, this is sufficient for the confidentiality and integrity of stateless services. +Consider a front-end web server, for example, that keeps all connection information cached in main memory. +No sensitive data is ever written to an insecure medium. +However, many real-world applications need some form of state or data-lake service that's connected to a persistent storage device and requires encryption at rest. +As described in [Use persistent storage](../workflows/storage.md), cloud service providers (CSPs) use the container storage interface (CSI) to make their storage solutions available to Kubernetes workloads. +These CSI storage solutions often support some sort of encryption. +For example, Google Cloud [encrypts data at rest by default](https://cloud.google.com/security/encryption/default-encryption), without any action required by the customer. + +## Cloud provider-managed encryption + +CSP-managed storage solutions encrypt the data in the cloud backend before writing it physically to disk. +In the context of confidential computing and Constellation, the CSP and its managed services aren't trusted. +Hence, cloud provider-managed encryption protects your data from offline hardware access to physical storage devices. +It doesn't protect it from anyone with infrastructure-level access to the storage backend or a malicious insider in the cloud platform. +Even with "bring your own key" or similar concepts, the CSP performs the encryption process with access to the keys and plaintext data. + +In the security model of Constellation, securing persistent storage and thereby data at rest requires that all cryptographic operations are performed inside a trusted execution environment. +Consequently, using CSP-managed encryption of persistent storage usually isn't an option. + +## Constellation-managed encryption + +Constellation provides CSI drivers for storage solutions in all major clouds with built-in encryption support. +Block storage provisioned by the CSP is [mapped](https://guix.gnu.org/manual/en/html_node/Mapped-Devices.html) using the [dm-crypt](https://www.kernel.org/doc/html/latest/admin-guide/device-mapper/dm-crypt.html), and optionally the [dm-integrity](https://www.kernel.org/doc/html/latest/admin-guide/device-mapper/dm-integrity.html), kernel modules, before it's formatted and accessed by the Kubernetes workloads. +All cryptographic operations happen inside the trusted environment of the confidential Constellation node. + +Note that for integrity-protected disks, [volume expansion](https://kubernetes.io/blog/2018/07/12/resizing-persistent-volumes-using-kubernetes/) isn't supported. + +By default the driver uses data encryption keys (DEKs) issued by the Constellation [*KeyService*](microservices.md#keyservice). +The DEKs are in turn derived from the Constellation's key encryption key (KEK), which is directly derived from the [master secret](keys.md#master-secret). +This is the recommended mode of operation, and also requires the least amount of setup by the cluster administrator. + +Alternatively, the driver can be configured to use a key management system to store and access KEKs and DEKs. + +Refer to [keys and cryptography](keys.md) for more details on key management in Constellation. + +Once deployed and configured, the CSI driver ensures transparent encryption and integrity of all persistent volumes provisioned via its storage class. +Data at rest is secured without any additional actions required by the developer. + +## Cryptographic algorithms + +This section gives an overview of the libraries, cryptographic algorithms, and their configurations, used in Constellation's CSI drivers. + +### dm-crypt + +To interact with the dm-crypt kernel module, Constellation uses [libcryptsetup](https://gitlab.com/cryptsetup/cryptsetup/). +New devices are formatted as [LUKS2](https://gitlab.com/cryptsetup/LUKS2-docs/-/tree/master) partitions with a sector size of 4096 bytes. +The used key derivation function is [Argon2id](https://datatracker.ietf.org/doc/html/rfc9106) with the [recommended parameters for memory-constrained environments](https://datatracker.ietf.org/doc/html/rfc9106#section-7.4) of 3 iterations and 64 MiB of memory, utilizing 4 parallel threads. +For encryption Constellation uses AES in XTS-Plain64. The key size is 512 bit. + +### dm-integrity + +To interact with the dm-integrity kernel module, Constellation uses [libcryptsetup](https://gitlab.com/cryptsetup/cryptsetup/). +When enabled, the used data integrity algorithm is [HMAC](https://datatracker.ietf.org/doc/html/rfc2104) with SHA256 as the hash function. +The tag size is 32 Bytes. + +## Encrypted S3 object storage + +Constellation comes with a service that you can use to transparently retrofit client-side encryption to existing applications that use S3 (AWS or compatible) for storage. +To learn more, check out the [s3proxy documentation](../workflows/s3proxy.md). diff --git a/docs/versioned_docs/version-2.21/architecture/images.md b/docs/versioned_docs/version-2.21/architecture/images.md new file mode 100644 index 000000000..8a9c51d36 --- /dev/null +++ b/docs/versioned_docs/version-2.21/architecture/images.md @@ -0,0 +1,49 @@ +# Constellation images + +Constellation uses a minimal version of Fedora as the operating system running inside confidential VMs. This Linux distribution is optimized for containers and designed to be stateless. +The Constellation images provide measured boot and an immutable filesystem. + +## Measured boot + +```mermaid +flowchart LR + Firmware --> Bootloader + Bootloader --> uki + subgraph uki[Unified Kernel Image] + Kernel[Kernel] + initramfs[Initramfs] + cmdline[Kernel Command Line] + end + uki --> rootfs[Root Filesystem] +``` + +Measured boot uses a Trusted Platform Module (TPM) to measure every part of the boot process. This allows for verification of the integrity of a running system at any point in time. To ensure correct measurements of every stage, each stage is responsible to measure the next stage before transitioning. + +### Firmware + +With confidential VMs, the firmware is the root of trust and is measured automatically at boot. After initialization, the firmware will load and measure the bootloader before executing it. + +### Bootloader + +The bootloader is the first modifiable part of the boot chain. The bootloader is tasked with loading the kernel, initramfs and setting the kernel command line. The Constellation bootloader measures these components before starting the kernel. + +### initramfs + +The initramfs is a small filesystem loaded to prepare the actual root filesystem. The Constellation initramfs maps the block device containing the root filesystem with [dm-verity](https://www.kernel.org/doc/html/latest/admin-guide/device-mapper/verity.html). The initramfs then mounts the root filesystem from the mapped block device. + +dm-verity provides integrity checking using a cryptographic hash tree. When a block is read, its integrity is checked by verifying the tree against a trusted root hash. The initramfs reads this root hash from the previously measured kernel command line. Thus, if any block of the root filesystem's device is modified on disk, trying to read the modified block will result in a kernel panic at runtime. + +After mounting the root filesystem, the initramfs will switch over and start the `init` process of the integrity-protected root filesystem. + +## State disk + +In addition to the read-only root filesystem, each Constellation node has a disk for storing state data. +This disk is mounted readable and writable by the initramfs and contains data that should persist across reboots. +Such data can contain sensitive information and, therefore, must be stored securely. +To that end, the state disk is protected by authenticated encryption. +See the section on [keys and encryption](keys.md#storage-encryption) for more information on the cryptographic primitives in use. + +## Kubernetes components + +During initialization, the [*Bootstrapper*](microservices.md#bootstrapper) downloads and verifies the [Kubernetes components](https://kubernetes.io/docs/concepts/overview/components/) as configured by the user. +They're stored on the state partition and can be updated once new releases need to be installed. diff --git a/docs/versioned_docs/version-2.21/architecture/keys.md b/docs/versioned_docs/version-2.21/architecture/keys.md new file mode 100644 index 000000000..49821cd0b --- /dev/null +++ b/docs/versioned_docs/version-2.21/architecture/keys.md @@ -0,0 +1,130 @@ +# Key management and cryptographic primitives + +Constellation protects and isolates your cluster and workloads. +To that end, cryptography is the foundation that ensures the confidentiality and integrity of all components. +Evaluating the security and compliance of Constellation requires a precise understanding of the cryptographic primitives and keys used. +The following gives an overview of the architecture and explains the technical details. + +## Confidential VMs + +Confidential VM (CVM) technology comes with hardware and software components for memory encryption, isolation, and remote attestation. +For details on the implementations and cryptographic soundness, refer to the hardware vendors' documentation and advisories. + +## Master secret + +The master secret is the cryptographic material used for deriving the [*clusterID*](#cluster-identity) and the *key encryption key (KEK)* for [storage encryption](#storage-encryption). +It's generated during the bootstrapping of a Constellation cluster. +It can either be managed by [Constellation](#constellation-managed-key-management) or an [external key management system](#user-managed-key-management). +In case of [recovery](#recovery-and-migration), the master secret allows to decrypt the state and recover a Constellation cluster. + +## Cluster identity + +The identity of a Constellation cluster is represented by cryptographic [measurements](attestation.md#runtime-measurements): + +The **base measurements** represent the identity of a valid, uninitialized Constellation node. +They depend on the node image, but are otherwise the same for every Constellation cluster. +On node boot, they're determined using the CVM's attestation mechanism and [measured boot up to the read-only root filesystem](images.md). + +The **clusterID** represents the identity of a single initialized Constellation cluster. +It's derived from the master secret and a cryptographically random salt and unique for every Constellation cluster. +The [Bootstrapper](microservices.md#bootstrapper) measures the *clusterID* into its own PCR before executing any code not measured as part of the *base measurements*. +See [Node attestation](attestation.md#node-attestation) for details. + +The remote attestation statement of a Constellation cluster combines the *base measurements* and the *clusterID* for a verifiable, unspoofable, unique identity. + +## Network encryption + +Constellation encrypts all cluster network communication using the [container network interface (CNI)](https://github.com/containernetworking/cni). +See [network encryption](networking.md) for more details. + +The Cilium agent running on each node establishes a secure [WireGuard](https://www.wireguard.com/) tunnel between it and all other known nodes in the cluster. +Each node creates its own [Curve25519](http://cr.yp.to/ecdh.html) encryption key pair and distributes its public key via Kubernetes. +A node uses another node's public key to decrypt and encrypt traffic from and to Cilium-managed endpoints running on that node. +Connections are always encrypted peer-to-peer using [ChaCha20](http://cr.yp.to/chacha.html) with [Poly1305](http://cr.yp.to/mac.html). +WireGuard implements [forward secrecy with key rotation every 2 minutes](https://lists.zx2c4.com/pipermail/wireguard/2017-December/002141.html). + +## Storage encryption + +Constellation supports transparent encryption of persistent storage. +The Linux kernel's device mapper-based encryption features are used to encrypt the data on the block storage level. +Currently, the following primitives are used for block storage encryption: + +* [dm-crypt](https://www.kernel.org/doc/html/latest/admin-guide/device-mapper/dm-crypt.html) +* [dm-integrity](https://www.kernel.org/doc/html/latest/admin-guide/device-mapper/dm-integrity.html) + +Adding primitives for integrity protection in the CVM attacker model are under active development and will be available in a future version of Constellation. +See [encrypted storage](encrypted-storage.md) for more details. + +As a cluster administrator, when creating a cluster, you can use the Constellation [installation program](orchestration.md) to select one of the following methods for key management: + +* Constellation-managed key management +* User-managed key management + +### Constellation-managed key management + +#### Key material and key derivation + +During the creation of a Constellation cluster, the cluster's master secret is used to derive a KEK. +This means creating two clusters with the same master secret will yield the same KEK. +Any data encryption key (DEK) is derived from the KEK via HKDF. +Note that the master secret is recommended to be unique for every cluster and shouldn't be reused (except in case of [recovering](../workflows/recovery.md) a cluster). + +#### State and storage + +The KEK is derived from the master secret during the initialization. +Subsequently, all other key material is derived from the KEK. +Given the same KEK, any DEK can be derived deterministically from a given identifier. +Hence, there is no need to store DEKs. They can be derived on demand. +After the KEK was derived, it's stored in memory only and never leaves the CVM context. + +#### Availability + +Constellation-managed key management has the same availability as the underlying Kubernetes cluster. +Therefore, the KEK is stored in the [distributed Kubernetes etcd storage](https://kubernetes.io/docs/tasks/administer-cluster/configure-upgrade-etcd/) to allow for unexpected but non-fatal (control-plane) node failure. +The etcd storage is backed by the encrypted and integrity protected [state disk](images.md#state-disk) of the nodes. + +#### Recovery + +Constellation clusters can be recovered in the event of a disaster, even when all node machines have been stopped and need to be rebooted. +For details on the process see the [recovery workflow](../workflows/recovery.md). + +### User-managed key management + +User-managed key management is under active development and will be available soon. +In scenarios where constellation-managed key management isn't an option, this mode allows you to keep full control of your keys. +For example, compliance requirements may force you to keep your KEKs in an on-prem key management system (KMS). + +During the creation of a Constellation cluster, you specify a KEK present in a remote KMS. +This follows the common scheme of "bring your own key" (BYOK). +Constellation will support several KMSs for managing the storage and access of your KEK. +Initially, it will support the following KMSs: + +* [AWS KMS](https://aws.amazon.com/kms/) +* [GCP KMS](https://cloud.google.com/security-key-management) +* [Azure Key Vault](https://azure.microsoft.com/en-us/services/key-vault/#product-overview) +* [KMIP-compatible KMS](https://www.oasis-open.org/committees/tc_home.php?wg_abbrev=kmip) + +Storing the keys in Cloud KMS of AWS, Azure, or GCP binds the key usage to the particular cloud identity access management (IAM). +In the future, Constellation will support remote attestation-based access policies for Cloud KMS once available. +Note that using a Cloud KMS limits the isolation and protection to the guarantees of the particular offering. + +KMIP support allows you to use your KMIP-compatible on-prem KMS and keep full control over your keys. +This follows the common scheme of "hold your own key" (HYOK). + +The KEK is used to encrypt per-data "data encryption keys" (DEKs). +DEKs are generated to encrypt your data before storing it on persistent storage. +After being encrypted by the KEK, the DEKs are stored on dedicated cloud storage for persistence. +Currently, Constellation supports the following cloud storage options: + +* [AWS S3](https://aws.amazon.com/s3/) +* [GCP Cloud Storage](https://cloud.google.com/storage) +* [Azure Blob Storage](https://azure.microsoft.com/en-us/services/storage/blobs/#overview) + +The DEKs are only present in plaintext form in the encrypted main memory of the CVMs. +Similarly, the cryptographic operations for encrypting data before writing it to persistent storage are performed in the context of the CVMs. + +#### Recovery and migration + +In the case of a disaster, the KEK can be used to decrypt the DEKs locally and subsequently use them to decrypt and retrieve the data. +In case of migration, configuring the same KEK will provide seamless migration of data. +Thus, only the DEK storage needs to be transferred to the new cluster alongside the encrypted data for seamless migration. diff --git a/docs/versioned_docs/version-2.21/architecture/microservices.md b/docs/versioned_docs/version-2.21/architecture/microservices.md new file mode 100644 index 000000000..90bae783b --- /dev/null +++ b/docs/versioned_docs/version-2.21/architecture/microservices.md @@ -0,0 +1,73 @@ +# Microservices + +Constellation takes care of bootstrapping and initializing a Confidential Kubernetes cluster. +During the lifetime of the cluster, it handles day 2 operations such as key management, remote attestation, and updates. +These features are provided by several microservices: + +* The [Bootstrapper](microservices.md#bootstrapper) initializes a Constellation node and bootstraps the cluster +* The [JoinService](microservices.md#joinservice) joins new nodes to an existing cluster +* The [VerificationService](microservices.md#verificationservice) provides remote attestation functionality +* The [KeyService](microservices.md#keyservice) manages Constellation-internal keys + +The relations between microservices are shown in the following diagram: + +```mermaid +flowchart LR + subgraph admin [Admin's machine] + A[Constellation CLI] + end + subgraph img [Constellation OS image] + B[Constellation OS] + C[Bootstrapper] + end + subgraph Kubernetes + D[JoinService] + E[KeyService] + F[VerificationService] + end + A -- deploys --> + B -- starts --> C + C -- deploys --> D + C -- deploys --> E + C -- deploys --> F +``` + +## Bootstrapper + +The *Bootstrapper* is the first microservice launched after booting a Constellation node image. +It sets up that machine as a Kubernetes node and integrates that node into the Kubernetes cluster. +To this end, the *Bootstrapper* first downloads and verifies the [Kubernetes components](https://kubernetes.io/docs/concepts/overview/components/) at the configured versions. +The *Bootstrapper* tries to find an existing cluster and if successful, communicates with the [JoinService](microservices.md#joinservice) to join the node. +Otherwise, it waits for an initialization request to create a new Kubernetes cluster. + +## JoinService + +The *JoinService* runs as [DaemonSet](https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/) on each control-plane node. +New nodes (at cluster start, or later through autoscaling) send a request to the service over [attested TLS (aTLS)](attestation.md#attested-tls-atls). +The *JoinService* verifies the new node's certificate and attestation statement. +If attestation is successful, the new node is supplied with an encryption key from the [*KeyService*](microservices.md#keyservice) for its state disk, and a Kubernetes bootstrap token. + + +```mermaid +sequenceDiagram + participant New node + participant JoinService + New node->>JoinService: aTLS handshake (server side verification) + JoinService-->>New node: # + New node->>+JoinService: IssueJoinTicket(DiskUUID, NodeName, IsControlPlane) + JoinService->>+KeyService: GetDataKey(DiskUUID) + KeyService-->>-JoinService: DiskEncryptionKey + JoinService-->>-New node: DiskEncryptionKey, KubernetesJoinToken, ... +``` + +## VerificationService + +The *VerificationService* runs as DaemonSet on each node. +It provides user-facing functionality for remote attestation during the cluster's lifetime via an endpoint for [verifying the cluster](attestation.md#cluster-attestation). +Read more about the hardware-based [attestation feature](attestation.md) of Constellation and how to [verify](../workflows/verify-cluster.md) a cluster on the client side. + +## KeyService + +The *KeyService* runs as DaemonSet on each control-plane node. +It implements the key management for the [storage encryption keys](keys.md#storage-encryption) in Constellation. These keys are used for the [state disk](images.md#state-disk) of each node and the [transparently encrypted storage](encrypted-storage.md) for Kubernetes. +Depending on wether the [constellation-managed](keys.md#constellation-managed-key-management) or [user-managed](keys.md#user-managed-key-management) mode is used, the *KeyService* holds the key encryption key (KEK) directly or calls an external key management service (KMS) for key derivation respectively. diff --git a/docs/versioned_docs/version-2.21/architecture/networking.md b/docs/versioned_docs/version-2.21/architecture/networking.md new file mode 100644 index 000000000..e9cbdf029 --- /dev/null +++ b/docs/versioned_docs/version-2.21/architecture/networking.md @@ -0,0 +1,22 @@ +# Network encryption + +Constellation encrypts all pod communication using the [container network interface (CNI)](https://github.com/containernetworking/cni). +To that end, Constellation deploys, configures, and operates the [Cilium](https://cilium.io/) CNI plugin. +Cilium provides [transparent encryption](https://docs.cilium.io/en/stable/security/network/encryption) for all cluster traffic using either IPSec or [WireGuard](https://www.wireguard.com/). +Currently, Constellation only supports WireGuard as the encryption engine. +You can read more about the cryptographic soundness of WireGuard [in their white paper](https://www.wireguard.com/papers/wireguard.pdf). + +Cilium is actively working on implementing a feature called [`host-to-host`](https://github.com/cilium/cilium/pull/19401) encryption mode for WireGuard. +With `host-to-host`, all traffic between nodes will be tunneled via WireGuard (host-to-host, host-to-pod, pod-to-host, pod-to-pod). +Until the `host-to-host` feature is released, Constellation enables `pod-to-pod` encryption. +This mode encrypts all traffic between Kubernetes pods using WireGuard tunnels. + +When using Cilium in the default setup but with encryption enabled, there is a [known issue](https://docs.cilium.io/en/v1.12/gettingstarted/encryption/#egress-traffic-to-not-yet-discovered-remote-endpoints-may-be-unencrypted) +that can cause pod-to-pod traffic to be unencrypted. +To mitigate this issue, Constellation adds a *strict* mode to Cilium's `pod-to-pod` encryption. +This mode changes the default behavior of traffic that's destined for an unknown endpoint to not be send out in plaintext, but instead being dropped. +The strict mode distinguishes between traffic that's send to a pod from traffic that's destined for a cluster-external endpoint by considering the pod's CIDR range. + +Traffic originating from hosts isn't encrypted yet. +This mainly includes health checks from Kubernetes API server. +Also, traffic proxied over the API server via e.g. `kubectl port-forward` isn't encrypted. diff --git a/docs/versioned_docs/version-2.21/architecture/observability.md b/docs/versioned_docs/version-2.21/architecture/observability.md new file mode 100644 index 000000000..0f4daffd4 --- /dev/null +++ b/docs/versioned_docs/version-2.21/architecture/observability.md @@ -0,0 +1,74 @@ +# Observability + +In Kubernetes, observability is the ability to gain insight into the behavior and performance of applications. +It helps identify and resolve issues more effectively, ensuring stability and performance of Kubernetes workloads, reducing downtime and outages, and improving efficiency. +The "three pillars of observability" are logs, metrics, and traces. + +In the context of Confidential Computing, observability is a delicate subject and needs to be applied such that it doesn't leak any sensitive information. +The following gives an overview of where and how you can apply standard observability tools in Constellation. + +## Cloud resource monitoring + +While inaccessible, Constellation's nodes are still visible as black box VMs to the hypervisor. +Resource consumption, such as memory and CPU utilization, can be monitored from the outside and observed via the cloud platforms directly. +Similarly, other resources, such as storage and network and their respective metrics, are visible via the cloud platform. + +## Metrics + +Metrics are numeric representations of data measured over intervals of time. They're essential for understanding system health and gaining insights using telemetry signals. + +By default, Constellation exposes the [metrics for Kubernetes system components](https://kubernetes.io/docs/concepts/cluster-administration/system-metrics/) inside the cluster. +Similarly, the [etcd metrics](https://etcd.io/docs/v3.5/metrics/) endpoints are exposed inside the cluster. +These [metrics endpoints can be disabled](https://kubernetes.io/docs/concepts/cluster-administration/system-metrics/#disabling-metrics). + +You can collect these cluster-internal metrics via tools such as [Prometheus](https://prometheus.io/) or the [Elastic Stack](https://www.elastic.co/de/elastic-stack/). + +Constellation's CNI Cilium also supports [metrics via Prometheus endpoints](https://docs.cilium.io/en/latest/observability/metrics/). +However, in Constellation, they're disabled by default and must be enabled first. + +## Logs + +Logs represent discrete events that usually describe what's happening with your service. +The payload is an actual message emitted from your system along with a metadata section containing a timestamp, labels, and tracking identifiers. + +### System logs + +Detailed system-level logs are accessible via `/var/log` and [journald](https://www.freedesktop.org/software/systemd/man/systemd-journald.service.html) on the nodes directly. +They can be collected from there, for example, via [Filebeat and Logstash](https://www.elastic.co/guide/en/beats/filebeat/current/logstash-output.html), which are tools of the [Elastic Stack](https://www.elastic.co/de/elastic-stack/). + +In case of an error during the initialization, the CLI automatically collects the [Bootstrapper](./microservices.md#bootstrapper) logs and returns these as a file for [troubleshooting](../workflows/troubleshooting.md). Here is an example of such an event: + +```shell-session +Cluster initialization failed. This error is not recoverable. +Terminate your cluster and try again. +Fetched bootstrapper logs are stored in "constellation-cluster.log" +``` + +### Kubernetes logs + +Constellation supports the [Kubernetes logging architecture](https://kubernetes.io/docs/concepts/cluster-administration/logging/). +By default, logs are written to the nodes' encrypted state disks. +These include the Pod and container logs and the [system component logs](https://kubernetes.io/docs/concepts/cluster-administration/logging/#system-component-logs). + +[Constellation services](microservices.md) run as Pods inside the `kube-system` namespace and use the standard container logging mechanism. +The same applies for the [Cilium Pods](https://docs.cilium.io/en/latest/operations/troubleshooting/#logs). + +You can collect logs from within the cluster via tools such as [Fluentd](https://github.com/fluent/fluentd), [Loki](https://github.com/grafana/loki), or the [Elastic Stack](https://www.elastic.co/de/elastic-stack/). + +## Traces + +Modern systems are implemented as interconnected complex and distributed microservices. Understanding request flows and system communications is challenging, mainly because all systems in a chain need to be modified to propagate tracing information. Distributed tracing is a new approach to increasing observability and understanding performance bottlenecks. A trace represents consecutive events that reflect an end-to-end request path in a distributed system. + +Constellation supports [traces for Kubernetes system components](https://kubernetes.io/docs/concepts/cluster-administration/system-traces/). +By default, they're disabled and need to be enabled first. + +Similarly, Cilium can be enabled to [export traces](https://cilium.io/use-cases/metrics-export/). + +You can collect these traces via tools such as [Jaeger](https://www.jaegertracing.io/) or [Zipkin](https://zipkin.io/). + +## Integrations + +Platforms and SaaS solutions such as Datadog, logz.io, Dynatrace, or New Relic facilitate the observability challenge for Kubernetes and provide all-in-one SaaS solutions. +They install agents into the cluster that collect metrics, logs, and tracing information and upload them into the data lake of the platform. +Technically, the agent-based approach is compatible with Constellation, and attaching these platforms is straightforward. +However, you need to evaluate if the exported data might violate Constellation's compliance and privacy guarantees by uploading them to a third-party platform. diff --git a/docs/versioned_docs/version-2.21/architecture/orchestration.md b/docs/versioned_docs/version-2.21/architecture/orchestration.md new file mode 100644 index 000000000..3c8d529e7 --- /dev/null +++ b/docs/versioned_docs/version-2.21/architecture/orchestration.md @@ -0,0 +1,83 @@ +# Orchestrating Constellation clusters + +You can use the CLI to create a cluster on the supported cloud platforms. +The CLI provisions the resources in your cloud environment and initiates the initialization of your cluster. +It uses a set of parameters and an optional configuration file to manage your cluster installation. +The CLI is also used for updating your cluster. + +## Workspaces + +Each Constellation cluster has an associated *workspace*. +The workspace is where data such as the Constellation state and config files are stored. +Each workspace is associated with a single cluster and configuration. +The CLI stores state in the local filesystem making the current directory the active workspace. +Multiple clusters require multiple workspaces, hence, multiple directories. +Note that every operation on a cluster always has to be performed from the directory associated with its workspace. + +You may copy files from the workspace to other locations, +but you shouldn't move or delete them while the cluster is still being used. +The Constellation CLI takes care of managing the workspace. +Only when a cluster was terminated, and you are sure the files aren't needed anymore, should you remove a workspace. + +## Cluster creation process + +To allow for fine-grained configuration of your cluster and cloud environment, Constellation supports an extensive configuration file with strong defaults. [Generating the configuration file](../workflows/config.md) is typically the first thing you do in the workspace. + +Altogether, the following files are generated during the creation of a Constellation cluster and stored in the current workspace: + +* a configuration file +* a state file +* a Base64-encoded master secret +* [Terraform artifacts](../reference/terraform.md), stored in subdirectories +* a Kubernetes `kubeconfig` file. + +After the initialization of your cluster, the CLI will provide you with a Kubernetes `kubeconfig` file. +This file grants you access to your Kubernetes cluster and configures the [kubectl](https://kubernetes.io/docs/concepts/configuration/organize-cluster-access-kubeconfig/) tool. +In addition, the cluster's [identifier](orchestration.md#post-installation-configuration) is returned and stored in the state file. + +### Creation process details + +1. The CLI `apply` command first creates the confidential VM (CVM) resources in your cloud environment and configures the network +2. Each CVM boots the Constellation node image and measures every component in the boot chain +3. The first microservice launched in each node is the [*Bootstrapper*](microservices.md#bootstrapper) +4. The *Bootstrapper* waits until it either receives an initialization request or discovers an initialized cluster +5. The CLI then connects to the *Bootstrapper* of a selected node, sends the configuration, and initiates the initialization of the cluster +6. The *Bootstrapper* of **that** node [initializes the Kubernetes cluster](microservices.md#bootstrapper) and deploys the other Constellation [microservices](microservices.md) including the [*JoinService*](microservices.md#joinservice) +7. Subsequently, the *Bootstrappers* of the other nodes discover the initialized cluster and send join requests to the *JoinService* +8. As part of the join request each node includes an attestation statement of its boot measurements as authentication +9. The *JoinService* verifies the attestation statements and joins the nodes to the Kubernetes cluster +10. This process is repeated for every node joining the cluster later (e.g., through autoscaling) + +## Post-installation configuration + +Post-installation the CLI provides a configuration for [accessing the cluster using the Kubernetes API](https://kubernetes.io/docs/tasks/administer-cluster/access-cluster-api/). +The `kubeconfig` file provides the credentials and configuration for connecting and authenticating to the API server. +Once configured, orchestrate the Kubernetes cluster via `kubectl`. + +After the initialization, the CLI will present you with a couple of tokens: + +* The [*master secret*](keys.md#master-secret) (stored in the `constellation-mastersecret.json` file by default) +* The [*clusterID*](keys.md#cluster-identity) of your cluster in Base64 encoding + +You can read more about these values and their meaning in the guide on [cluster identity](keys.md#cluster-identity). + +The *master secret* must be kept secret and can be used to [recover your cluster](../workflows/recovery.md). +Instead of managing this secret manually, you can [use your key management solution of choice](keys.md#user-managed-key-management) with Constellation. + +The *clusterID* uniquely identifies a cluster and can be used to [verify your cluster](../workflows/verify-cluster.md). + +## Upgrades + +Constellation images and microservices may need to be upgraded to new versions during the lifetime of a cluster. +Constellation implements a rolling update mechanism ensuring no downtime of the control or data plane. +You can upgrade a Constellation cluster with a single operation by using the CLI. +For step-by-step instructions on how to do this, refer to [Upgrade your cluster](../workflows/upgrade.md). + +### Attestation of upgrades + +With every new image, corresponding measurements are released. +During an update procedure, the CLI provides new measurements to the [JoinService](microservices.md#joinservice) securely. +New measurements for an updated image are automatically pulled and verified by the CLI following the [supply chain security concept](attestation.md#chain-of-trust) of Constellation. +The [attestation section](attestation.md#cluster-facing-attestation) describes in detail how these measurements are then used by the JoinService for the attestation of nodes. + + diff --git a/docs/versioned_docs/version-2.21/architecture/overview.md b/docs/versioned_docs/version-2.21/architecture/overview.md new file mode 100644 index 000000000..386f93b2f --- /dev/null +++ b/docs/versioned_docs/version-2.21/architecture/overview.md @@ -0,0 +1,30 @@ +# Overview + +Constellation is a cloud-based confidential orchestration platform. +The foundation of Constellation is Kubernetes and therefore shares the same technology stack and architecture principles. +To learn more about Constellation and Kubernetes, see [product overview](../overview/product.md). + +## About orchestration and updates + +As a cluster administrator, you can use the [Constellation CLI](orchestration.md) to install and deploy a cluster. +Updates are provided in accordance with the [support policy](versions.md). + +## About microservices and attestation + +Constellation manages the nodes and network in your cluster. All nodes are bootstrapped by the [*Bootstrapper*](microservices.md#bootstrapper). They're verified and authenticated by the [*JoinService*](microservices.md#joinservice) before being added to the cluster and the network. Finally, the entire cluster can be verified via the [*VerificationService*](microservices.md#verificationservice) using [remote attestation](attestation.md). + +## About node images and verified boot + +Constellation comes with operating system images for Kubernetes control-plane and worker nodes. +They're highly optimized for running containerized workloads and specifically prepared for running inside confidential VMs. +You can learn more about [the images](images.md) and how verified boot ensures their integrity during boot and beyond. + +## About key management and cryptographic primitives + +Encryption of data at-rest, in-transit, and in-use is the fundamental building block for confidential computing and Constellation. Learn more about the [keys and cryptographic primitives](keys.md) used in Constellation, [encrypted persistent storage](encrypted-storage.md), and [network encryption](networking.md). + +## About observability + +Observability in Kubernetes refers to the capability to troubleshoot issues using telemetry signals such as logs, metrics, and traces. +In the realm of Confidential Computing, it's crucial that observability aligns with confidentiality, necessitating careful implementation. +Learn more about the [observability capabilities in Constellation](./observability.md). diff --git a/docs/versioned_docs/version-2.21/architecture/versions.md b/docs/versioned_docs/version-2.21/architecture/versions.md new file mode 100644 index 000000000..9acc866ed --- /dev/null +++ b/docs/versioned_docs/version-2.21/architecture/versions.md @@ -0,0 +1,21 @@ +# Versions and support policy + +All components of Constellation use a three-digit version number of the form `v..`. +The components are released in lock step, usually on the first Tuesday of every month. This release primarily introduces new features, but may also include security or performance improvements. The `MINOR` version will be incremented as part of this release. + +Additional `PATCH` releases may be created on demand, to fix security issues or bugs before the next `MINOR` release window. + +New releases are published on [GitHub](https://github.com/edgelesssys/constellation/releases). + +## Kubernetes support policy + +Constellation is aligned to the [version support policy of Kubernetes](https://kubernetes.io/releases/version-skew-policy/#supported-versions), and therefore usually supports the most recent three minor versions. +When a new minor version of Kubernetes is released, support is added to the next Constellation release, and that version then supports four Kubernetes versions. +Subsequent Constellation releases drop support for the oldest (and deprecated) Kubernetes version. + +The following Kubernetes versions are currently supported: + + +* v1.29.14 +* v1.30.10 +* v1.31.6 diff --git a/docs/versioned_docs/version-2.21/getting-started/examples.md b/docs/versioned_docs/version-2.21/getting-started/examples.md new file mode 100644 index 000000000..fded84980 --- /dev/null +++ b/docs/versioned_docs/version-2.21/getting-started/examples.md @@ -0,0 +1,6 @@ +# Examples + +After you [installed the CLI](install.md) and [created your first cluster](first-steps.md), you're ready to deploy applications. Why not start with one of the following examples? +* [Emojivoto](examples/emojivoto.md): a simple but fun web application +* [Online Boutique](examples/online-boutique.md): an e-commerce demo application by Google consisting of 11 separate microservices +* [Horizontal Pod Autoscaling](examples/horizontal-scaling.md): an example demonstrating Constellation's autoscaling capabilities diff --git a/docs/versioned_docs/version-2.21/getting-started/examples/emojivoto.md b/docs/versioned_docs/version-2.21/getting-started/examples/emojivoto.md new file mode 100644 index 000000000..2bbe27917 --- /dev/null +++ b/docs/versioned_docs/version-2.21/getting-started/examples/emojivoto.md @@ -0,0 +1,22 @@ +# Emojivoto +[Emojivoto](https://github.com/BuoyantIO/emojivoto) is a simple and fun application that's well suited to test the basic functionality of your cluster. + + + +emojivoto - Web UI + + + +1. Deploy the application: + ```bash + kubectl apply -k github.com/BuoyantIO/emojivoto/kustomize/deployment + ``` +2. Wait until it becomes available: + ```bash + kubectl wait --for=condition=available --timeout=60s -n emojivoto --all deployments + ``` +3. Forward the web service to your machine: + ```bash + kubectl -n emojivoto port-forward svc/web-svc 8080:80 + ``` +4. Visit [http://localhost:8080](http://localhost:8080) diff --git a/docs/versioned_docs/version-2.21/getting-started/examples/filestash-s3proxy.md b/docs/versioned_docs/version-2.21/getting-started/examples/filestash-s3proxy.md new file mode 100644 index 000000000..b9a394256 --- /dev/null +++ b/docs/versioned_docs/version-2.21/getting-started/examples/filestash-s3proxy.md @@ -0,0 +1,107 @@ + +# Deploying Filestash + +Filestash is a web frontend for different storage backends, including S3. +It's a useful application to showcase s3proxy in action. + +1. Deploy s3proxy as described in [Deployment](../../workflows/s3proxy.md#deployment). +2. Create a deployment file for Filestash with one pod: + +```sh +cat << EOF > "deployment-filestash.yaml" +apiVersion: apps/v1 +kind: Deployment +metadata: + name: filestash +spec: + replicas: 1 + selector: + matchLabels: + app: filestash + template: + metadata: + labels: + app: filestash + spec: + hostAliases: + - ip: $(kubectl get svc s3proxy-service -o=jsonpath='{.spec.clusterIP}') + hostnames: + - "s3.us-east-1.amazonaws.com" + - "s3.us-east-2.amazonaws.com" + - "s3.us-west-1.amazonaws.com" + - "s3.us-west-2.amazonaws.com" + - "s3.eu-north-1.amazonaws.com" + - "s3.eu-south-1.amazonaws.com" + - "s3.eu-south-2.amazonaws.com" + - "s3.eu-west-1.amazonaws.com" + - "s3.eu-west-2.amazonaws.com" + - "s3.eu-west-3.amazonaws.com" + - "s3.eu-central-1.amazonaws.com" + - "s3.eu-central-2.amazonaws.com" + - "s3.ap-northeast-1.amazonaws.com" + - "s3.ap-northeast-2.amazonaws.com" + - "s3.ap-northeast-3.amazonaws.com" + - "s3.ap-east-1.amazonaws.com" + - "s3.ap-southeast-1.amazonaws.com" + - "s3.ap-southeast-2.amazonaws.com" + - "s3.ap-southeast-3.amazonaws.com" + - "s3.ap-southeast-4.amazonaws.com" + - "s3.ap-south-1.amazonaws.com" + - "s3.ap-south-2.amazonaws.com" + - "s3.me-south-1.amazonaws.com" + - "s3.me-central-1.amazonaws.com" + - "s3.il-central-1.amazonaws.com" + - "s3.af-south-1.amazonaws.com" + - "s3.ca-central-1.amazonaws.com" + - "s3.sa-east-1.amazonaws.com" + containers: + - name: filestash + image: machines/filestash:latest + ports: + - containerPort: 8334 + volumeMounts: + - name: ca-cert + mountPath: /etc/ssl/certs/kube-ca.crt + subPath: kube-ca.crt + volumes: + - name: ca-cert + secret: + secretName: s3proxy-tls + items: + - key: ca.crt + path: kube-ca.crt +EOF +``` + +The pod spec includes the `hostAliases` key, which adds an entry to the pod's `/etc/hosts`. +The entry forwards all requests for any of the currently defined AWS regions to the Kubernetes service `s3proxy-service`. +If you followed the s3proxy [Deployment](../../workflows/s3proxy.md#deployment) guide, this service points to a s3proxy pod. + +The deployment specifies all regions explicitly to prevent accidental data leaks. +If one of your buckets were located in a region that's not part of the `hostAliases` key, traffic towards those buckets would not be redirected to s3proxy. +Similarly, if you want to exclude data for specific regions from going through s3proxy you can remove those regions from the deployment. + +The spec also includes a volume mount for the TLS certificate and adds it to the pod's certificate trust store. +The volume is called `ca-cert`. +The key `ca.crt` of that volume is mounted to `/etc/ssl/certs/kube-ca.crt`, which is the default certificate trust store location for that container's OpenSSL library. +Not adding the CA certificate will result in TLS authentication errors. + +3. Apply the file: `kubectl apply -f deployment-filestash.yaml` + +Afterward, you can use a port forward to access the Filestash pod: +`kubectl port-forward pod/$(kubectl get pod --selector='app=filestash' -o=jsonpath='{.items[*].metadata.name}') 8334:8334` + +4. After browsing to `localhost:8443`, Filestash will ask you to set an administrator password. +After setting it, you can directly leave the admin area by clicking the blue cloud symbol in the top left corner. +Subsequently, you can select S3 as storage backend and enter your credentials. +This will bring you to an overview of your buckets. +If you want to deploy Filestash in production, take a look at its [documentation](https://www.filestash.app/docs/). + +5. To see the logs of s3proxy intercepting requests made to S3, run: `kubectl logs -f pod/$(kubectl get pod --selector='app=s3proxy' -o=jsonpath='{.items[*].metadata.name}')` +Look out for log messages labeled `intercepting`. +There is one such log message for each message that's encrypted, decrypted, or blocked. + +6. Once you have uploaded a file with Filestash, you should be able to view the file in Filestash. +However, if you go to the AWS S3 [Web UI](https://s3.console.aws.amazon.com/s3/home) and download the file you just uploaded in Filestash, you won't be able to read it. +Another way to spot encrypted files without downloading them is to click on a file, scroll to the Metadata section, and look for the header named `x-amz-meta-constellation-encryption`. +This header holds the encrypted data encryption key of the object and is only present on objects that are encrypted by s3proxy. diff --git a/docs/versioned_docs/version-2.21/getting-started/examples/horizontal-scaling.md b/docs/versioned_docs/version-2.21/getting-started/examples/horizontal-scaling.md new file mode 100644 index 000000000..dfaf9e742 --- /dev/null +++ b/docs/versioned_docs/version-2.21/getting-started/examples/horizontal-scaling.md @@ -0,0 +1,98 @@ +# Horizontal Pod Autoscaling +This example demonstrates Constellation's autoscaling capabilities. It's based on the Kubernetes [HorizontalPodAutoscaler Walkthrough](https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough/). During the following steps, Constellation will spawn new VMs on demand, verify them, add them to the cluster, and delete them again when the load has settled down. + +## Requirements +The cluster needs to be initialized with Kubernetes 1.23 or later. In addition, [autoscaling must be enabled](../../workflows/scale.md) to enable Constellation to assign new nodes dynamically. + +Just for this example specifically, the cluster should have as few worker nodes in the beginning as possible. Start with a small cluster with only *one* low-powered node for the control-plane node and *one* low-powered worker node. + +:::info +We tested the example using instances of types `Standard_DC4as_v5` on Azure and `n2d-standard-4` on GCP. +::: + +## Setup + +1. Install the Kubernetes Metrics Server: + ```bash + kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml + ``` + +2. Deploy the HPA example server that's supposed to be scaled under load. + + This manifest is similar to the one from the Kubernetes HPA walkthrough, but with increased CPU limits and requests to facilitate the triggering of node scaling events. + ```bash + cat < + +Online Boutique - Web UI + + + +1. Create a namespace: + ```bash + kubectl create ns boutique + ``` +2. Deploy the application: + ```bash + kubectl apply -n boutique -f https://github.com/GoogleCloudPlatform/microservices-demo/raw/main/release/kubernetes-manifests.yaml + ``` +3. Wait for all services to become available: + ```bash + kubectl wait --for=condition=available --timeout=300s -n boutique --all deployments + ``` +4. Get the frontend's external IP address: + ```shell-session + $ kubectl get service frontend-external -n boutique | awk '{print $4}' + EXTERNAL-IP + + ``` + (`` is a placeholder for the IP assigned by your CSP.) +5. Enter the IP from the result in your browser to browse the online shop. diff --git a/docs/versioned_docs/version-2.21/getting-started/first-steps-local.md b/docs/versioned_docs/version-2.21/getting-started/first-steps-local.md new file mode 100644 index 000000000..98f0302de --- /dev/null +++ b/docs/versioned_docs/version-2.21/getting-started/first-steps-local.md @@ -0,0 +1,277 @@ +# First steps with a local cluster + +A local cluster lets you deploy and test Constellation without a cloud subscription. +You have two options: + +* Use MiniConstellation to automatically deploy a two-node cluster. +* For more fine-grained control, create the cluster using the QEMU provider. + +Both options use virtualization to create a local cluster with control-plane nodes and worker nodes. They **don't** require hardware with Confidential VM (CVM) support. For attestation, they currently use a software-based vTPM provided by KVM/QEMU. + +You need an x64 machine with a Linux OS. +You can use a VM, but it needs nested virtualization. + +## Prerequisites + +* Machine requirements: + * An x86-64 CPU with at least 4 cores (6 cores are recommended) + * At least 4 GB RAM (6 GB are recommended) + * 20 GB of free disk space + * Hardware virtualization enabled in the BIOS/UEFI (often referred to as Intel VT-x or AMD-V/SVM) / nested-virtualization support when using a VM +* Software requirements: + * Linux OS with [KVM kernel module](https://www.linux-kvm.org/page/Main_Page) + * Recommended: Ubuntu 22.04 LTS + * [Docker](https://docs.docker.com/engine/install/) + * [xsltproc](https://gitlab.gnome.org/GNOME/libxslt/-/wikis/home) + * (Optional) [virsh](https://www.libvirt.org/manpages/virsh.html) to observe and access your nodes + +### Software installation on Ubuntu + +```bash +# install Docker +curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg +echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null +sudo apt update +sudo apt install docker-ce +# install other dependencies +sudo apt install xsltproc +sudo snap install kubectl --classic +# install Constellation CLI +curl -LO https://github.com/edgelesssys/constellation/releases/latest/download/constellation-linux-amd64 +sudo install constellation-linux-amd64 /usr/local/bin/constellation +# do not drop forwarded packages +sudo iptables -P FORWARD ACCEPT +``` + +## Create a cluster + + + + + +With the `constellation mini` command, you can deploy and test Constellation locally. This mode is called MiniConstellation. Conceptually, MiniConstellation is similar to [MicroK8s](https://microk8s.io/), [K3s](https://k3s.io/), and [minikube](https://minikube.sigs.k8s.io/docs/). + + +:::caution + +MiniConstellation has specific soft- and hardware requirements such as a Linux OS running on an x86-64 CPU. Pay attention to all [prerequisites](#prerequisites) when setting up. + +::: + +:::note + +Since MiniConstellation runs on your local system, cloud features such as load balancing, +attaching persistent storage, or autoscaling aren't available. + +::: + +The following creates your MiniConstellation cluster (may take up to 10 minutes to complete): + +```bash +constellation mini up +``` + +This will configure your current directory as the [workspace](../architecture/orchestration.md#workspaces) for this cluster. +All `constellation` commands concerning this cluster need to be issued from this directory. + + + + +With the QEMU provider, you can create a local Constellation cluster as if it were in the cloud. The provider uses [QEMU](https://www.qemu.org/) to create multiple VMs for the cluster nodes, which interact with each other. + +:::caution + +Constellation on QEMU has specific soft- and hardware requirements such as a Linux OS running on an x86-64 CPU. Pay attention to all [prerequisites](#prerequisites) when setting up. + +::: + +:::note + +Since Constellation on QEMU runs on your local system, cloud features such as load balancing, +attaching persistent storage, or autoscaling aren't available. + +::: + +1. To set up your local cluster, you need to create a configuration file for Constellation first. + + ```bash + constellation config generate qemu + ``` + + This creates a [configuration file](../workflows/config.md) for QEMU called `constellation-conf.yaml`. After that, your current folder also becomes your [workspace](../architecture/orchestration.md#workspaces). All `constellation` commands for your cluster need to be executed from this directory. + +2. Now you can create your cluster and its nodes. `constellation apply` uses the options set in `constellation-conf.yaml`. + + ```bash + constellation apply -y + ``` + + The Output should look like the following: + + ```shell-session + $ constellation apply -y + Checking for infrastructure changes + The following Constellation cluster will be created: + 3 control-plane nodes of type 2-vCPUs will be created. + 1 worker node of type 2-vCPUs will be created. + Creating + Cloud infrastructure created successfully. + Your Constellation master secret was successfully written to ./constellation-mastersecret.json + Connecting + Initializing cluster + Installing Kubernetes components + Your Constellation cluster was successfully initialized. + + Constellation cluster identifier g6iMP5wRU1b7mpOz2WEISlIYSfdAhB0oNaOg6XEwKFY= + Kubernetes configuration constellation-admin.conf + + You can now connect to your cluster by executing: + export KUBECONFIG="$PWD/constellation-admin.conf" + ``` + + The cluster's identifier will be different in your output. + Keep `constellation-mastersecret.json` somewhere safe. + This will allow you to [recover your cluster](../workflows/recovery.md) in case of a disaster. + + :::info + + Depending on your setup, `constellation apply` may take 10+ minutes to complete. + + ::: + +3. Configure kubectl + + ```bash + export KUBECONFIG="$PWD/constellation-admin.conf" + ``` + + + + +## Connect to the cluster + +Your cluster initially consists of a single control-plane node: + +```shell-session +$ kubectl get nodes +NAME STATUS ROLES AGE VERSION +control-plane-0 Ready control-plane 66s v1.24.6 +``` + +Additional nodes will request to join the cluster shortly. Before each additional node is allowed to join the cluster, its state is verified using remote attestation by the [JoinService](../architecture/microservices.md#joinservice). +If verification passes successfully, the new node receives keys and certificates to join the cluster. + +You can follow this process by viewing the logs of the JoinService: + +```shell-session +$ kubectl logs -n kube-system daemonsets/join-service -f +{"level":"INFO","ts":"2022-10-14T09:32:20Z","caller":"cmd/main.go:48","msg":"Constellation Node Join Service","version":"2.1.0","cloudProvider":"qemu"} +{"level":"INFO","ts":"2022-10-14T09:32:20Z","logger":"validator","caller":"watcher/validator.go:96","msg":"Updating expected measurements"} +... +``` + +Once all nodes have joined your cluster, it may take a couple of minutes for all resources to become available. +You can check on the state of your cluster by running the following: + +```shell-session +$ kubectl get nodes +NAME STATUS ROLES AGE VERSION +control-plane-0 Ready control-plane 2m59s v1.24.6 +worker-0 Ready 32s v1.24.6 +``` + +## Deploy a sample application + +1. Deploy the [emojivoto app](https://github.com/BuoyantIO/emojivoto) + + ```bash + kubectl apply -k github.com/BuoyantIO/emojivoto/kustomize/deployment + ``` + +2. Expose the frontend service locally + + ```bash + kubectl wait --for=condition=available --timeout=60s -n emojivoto --all deployments + kubectl -n emojivoto port-forward svc/web-svc 8080:80 & + curl http://localhost:8080 + kill %1 + ``` + +## Terminate your cluster + + + + +Once you are done, you can clean up the created resources using the following command: + +```bash +constellation mini down +``` + +This will destroy your cluster and clean up your workspace. +The VM image and cluster configuration file (`constellation-conf.yaml`) will be kept and may be reused to create new clusters. + + + + +Once you are done, you can clean up the created resources using the following command: + +```bash +constellation terminate +``` + +This should give the following output: + +```shell-session +$ constellation terminate +You are about to terminate a Constellation cluster. +All of its associated resources will be DESTROYED. +This action is irreversible and ALL DATA WILL BE LOST. +Do you want to continue? [y/n]: +``` + +Confirm with `y` to terminate the cluster: + +```shell-session +Terminating ... +Your Constellation cluster was terminated successfully. +``` + +This will destroy your cluster and clean up your workspace. +The VM image and cluster configuration file (`constellation-conf.yaml`) will be kept and may be reused to create new clusters. + + + + +## Troubleshooting + +Make sure to use the [latest release](https://github.com/edgelesssys/constellation/releases/latest) and check out the [known issues](https://github.com/edgelesssys/constellation/issues?q=is%3Aopen+is%3Aissue+label%3A%22known+issue%22). + +### VMs have no internet access / CLI remains in "Initializing cluster" state + +`iptables` rules may prevent your VMs from accessing the internet. +Make sure your rules aren't dropping forwarded packages. + +List your rules: + +```bash +sudo iptables -S +``` + +The output may look similar to the following: + +```shell-session +-P INPUT ACCEPT +-P FORWARD DROP +-P OUTPUT ACCEPT +-N DOCKER +-N DOCKER-ISOLATION-STAGE-1 +-N DOCKER-ISOLATION-STAGE-2 +-N DOCKER-USER +``` + +If your `FORWARD` chain is set to `DROP`, you need to update your rules: + +```bash +sudo iptables -P FORWARD ACCEPT +``` diff --git a/docs/versioned_docs/version-2.21/getting-started/first-steps.md b/docs/versioned_docs/version-2.21/getting-started/first-steps.md new file mode 100644 index 000000000..b197f659d --- /dev/null +++ b/docs/versioned_docs/version-2.21/getting-started/first-steps.md @@ -0,0 +1,235 @@ +# First steps with Constellation + +The following steps guide you through the process of creating a cluster and deploying a sample app. This example assumes that you have successfully [installed and set up Constellation](install.md), +and have access to a cloud subscription. + +:::tip +If you don't have a cloud subscription, you can also set up a [local Constellation cluster using virtualization](../getting-started/first-steps-local.md) for testing. +::: + +:::note +If you encounter any problem with the following steps, make sure to use the [latest release](https://github.com/edgelesssys/constellation/releases/latest) and check out the [known issues](https://github.com/edgelesssys/constellation/issues?q=is%3Aopen+is%3Aissue+label%3A%22known+issue%22). +::: + +## Create a cluster + +1. Create the [configuration file](../workflows/config.md) and state file for your cloud provider. If you are following the steps of this guide, there is no need to edit the file. + + + + + ```bash + constellation config generate aws + ``` + + + + + ```bash + constellation config generate azure + ``` + + + + + ```bash + constellation config generate gcp + ``` + + + + + ```bash + constellation config generate stackit + ``` + + + + +2. Create your [IAM configuration](../workflows/config.md#creating-an-iam-configuration). + + + + + ```bash + constellation iam create aws --zone=us-east-2a --prefix=constellTest --update-config + ``` + + This command creates IAM configuration for the AWS zone `us-east-2a` using the prefix `constellTest` for all named resources being created. It also updates the configuration file `constellation-conf.yaml` in your current directory with the IAM values filled in. + + Depending on the attestation variant selected on config generation, different regions are available. + AMD SEV-SNP machines (requires the default attestation variant `awsSEVSNP`) are currently available in the following regions: + * `eu-west-1` + * `us-east-2` + + You can find a list of regions that support AMD SEV-SNP in [AWS's documentation](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/snp-requirements.html). + + NitroTPM machines (requires the attestation variant `awsNitroTPM`) are available in all regions. + Constellation OS images are currently replicated to the following regions: + * `eu-central-1` + * `eu-west-1` + * `eu-west-3` + * `us-east-2` + * `ap-south-1` + + If you require the OS image to be available in another region, [let us know](https://github.com/edgelesssys/constellation/issues/new?assignees=&labels=&template=feature_request.md&title=Support+new+AWS+image+region:+xx-xxxx-x). + + You can find a list of all [regions in AWS's documentation](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-regions-availability-zones.html#concepts-available-regions). + + + + + ```bash + constellation iam create azure --subscriptionID 00000000-0000-0000-0000-000000000000 --region=westus --resourceGroup=constellTest --servicePrincipal=spTest --update-config + ``` + + This command creates IAM configuration on the Azure region `westus` creating a new resource group `constellTest` and a new service principal `spTest`. It also updates the configuration file `constellation-conf.yaml` in your current directory with the IAM values filled in. + + CVMs are available in several Azure regions. Constellation OS images are currently replicated to the following: + + * `germanywestcentral` + * `westus` + * `eastus` + * `northeurope` + * `westeurope` + * `southeastasia` + + If you require the OS image to be available in another region, [let us know](https://github.com/edgelesssys/constellation/issues/new?assignees=&labels=&template=feature_request.md&title=Support+new+Azure+image+region:+xx-xxxx-x). + + You can find a list of all [regions in Azure's documentation](https://azure.microsoft.com/en-us/global-infrastructure/services/?products=virtual-machines®ions=all). + + + + + ```bash + constellation iam create gcp --projectID=yourproject-12345 --zone=europe-west2-a --serviceAccountID=constell-test --update-config + ``` + + This command creates IAM configuration in the GCP project `yourproject-12345` on the GCP zone `europe-west2-a` creating a new service account `constell-test`. It also updates the configuration file `constellation-conf.yaml` in your current directory with the IAM values filled in. + + Note that only regions offering CVMs of the `C2D` or `N2D` series are supported. You can find a [list of all regions in Google's documentation](https://cloud.google.com/compute/docs/regions-zones#available), which you can filter by machine type `C2D` or `N2D`. + + + + + To use Constellation on STACKIT, the cluster will use the User Access Token (UAT) that's generated [during the install step](./install.md). + After creating the accounts, fill in the STACKIT details in `constellation-conf.yaml` under `provider.openstack`: + + * `stackitProjectID`: STACKIT project id (can be found after login on the [STACKIT portal](https://portal.stackit.cloud)) + + :::caution + + `stackitProjectID` refers to the ID of your STACKIT project. The STACKIT portal also shows the OpenStack ID that's associated with your project in some places. Make sure you insert the STACKIT project ID in the `constellation-conf.yaml` file. It's of the format `XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX`. + + ::: + + + + + :::tip + To learn about all options you have for managing IAM resources and Constellation configuration, see the [Configuration workflow](../workflows/config.md). + ::: + + + +3. Create the cluster. `constellation apply` uses options set in `constellation-conf.yaml`. + If you want to manually manage your cloud resources, for example by using [Terraform](../reference/terraform.md), follow the corresponding instructions in the [Create workflow](../workflows/create.md). + + :::tip + + On Azure, you may need to wait 15+ minutes at this point for role assignments to propagate. + + ::: + + ```bash + constellation apply -y + ``` + + This should look similar to the following: + + ```shell-session + $ constellation apply -y + Checking for infrastructure changes + The following Constellation cluster will be created: + 3 control-plane nodes of type n2d-standard-4 will be created. + 1 worker node of type n2d-standard-4 will be created. + Creating + Cloud infrastructure created successfully + Your Constellation master secret was successfully written to ./constellation-mastersecret.json + Connecting + Initializing cluster + Installing Kubernetes components + Your Constellation cluster was successfully initialized. + + Constellation cluster identifier g6iMP5wRU1b7mpOz2WEISlIYSfdAhB0oNaOg6XEwKFY= + Kubernetes configuration constellation-admin.conf + + You can now connect to your cluster by executing: + export KUBECONFIG="$PWD/constellation-admin.conf" + ``` + + The cluster's identifier will be different in your output. + Keep `constellation-mastersecret.json` somewhere safe. + This will allow you to [recover your cluster](../workflows/recovery.md) in case of a disaster. + + :::info + + Depending on your CSP and region, `constellation apply` may take 10+ minutes to complete. + + ::: + +4. Configure kubectl. + + ```bash + export KUBECONFIG="$PWD/constellation-admin.conf" + ``` + +## Deploy a sample application + +1. Deploy the [emojivoto app](https://github.com/BuoyantIO/emojivoto) + + ```bash + kubectl apply -k github.com/BuoyantIO/emojivoto/kustomize/deployment + ``` + +2. Expose the frontend service locally + + ```bash + kubectl wait --for=condition=available --timeout=60s -n emojivoto --all deployments + kubectl -n emojivoto port-forward svc/web-svc 8080:80 & + curl http://localhost:8080 + kill %1 + ``` + +## Terminate your cluster + +Use the CLI to terminate your cluster. If you manually used [Terraform](../reference/terraform.md) to manage your cloud resources, follow the corresponding instructions in the [Terminate workflow](../workflows/terminate.md). + +```bash +constellation terminate +``` + +This should give the following output: + +```shell-session +$ constellation terminate +You are about to terminate a Constellation cluster. +All of its associated resources will be DESTROYED. +This action is irreversible and ALL DATA WILL BE LOST. +Do you want to continue? [y/n]: +``` + +Confirm with `y` to terminate the cluster: + +```shell-session +Terminating ... +Your Constellation cluster was terminated successfully. +``` + +Optionally, you can also [delete your IAM resources](../workflows/config.md#deleting-an-iam-configuration). diff --git a/docs/versioned_docs/version-2.21/getting-started/install.md b/docs/versioned_docs/version-2.21/getting-started/install.md new file mode 100644 index 000000000..f7b36770a --- /dev/null +++ b/docs/versioned_docs/version-2.21/getting-started/install.md @@ -0,0 +1,439 @@ +# Installation and setup + +Constellation runs entirely in your cloud environment and can be controlled via a dedicated [command-line interface (CLI)](../reference/cli.md) or a [Terraform provider](../workflows/terraform-provider.md). + +## Prerequisites + +Make sure the following requirements are met: + +* Your machine is running Linux, macOS, or Windows +* You have admin rights on your machine +* [kubectl](https://kubernetes.io/docs/tasks/tools/) is installed +* Your CSP is Amazon Web Services (AWS), Microsoft Azure, Google Cloud Platform (GCP), or STACKIT + +## Install the Constellation CLI + +:::tip + +If you prefer to use Terraform, you can alternatively use the [Terraform provider](../workflows/terraform-provider.md) to manage the cluster's lifecycle. + +::: + +The CLI executable is available at [GitHub](https://github.com/edgelesssys/constellation/releases). +Install it with the following commands: + + + + +1. Download the CLI: + +```bash +curl -LO https://github.com/edgelesssys/constellation/releases/latest/download/constellation-linux-amd64 +``` + +2. [Verify the signature](../workflows/verify-cli.md) (optional) + +3. Install the CLI to your PATH: + +```bash +sudo install constellation-linux-amd64 /usr/local/bin/constellation +``` + + + + +1. Download the CLI: + +```bash +curl -LO https://github.com/edgelesssys/constellation/releases/latest/download/constellation-linux-arm64 +``` + +2. [Verify the signature](../workflows/verify-cli.md) (optional) + +3. Install the CLI to your PATH: + +```bash +sudo install constellation-linux-arm64 /usr/local/bin/constellation +``` + + + + + +1. Download the CLI: + +```bash +curl -LO https://github.com/edgelesssys/constellation/releases/latest/download/constellation-darwin-arm64 +``` + +2. [Verify the signature](../workflows/verify-cli.md) (optional) + +3. Install the CLI to your PATH: + +```bash +sudo install constellation-darwin-arm64 /usr/local/bin/constellation +``` + + + + + +1. Download the CLI: + +```bash +curl -LO https://github.com/edgelesssys/constellation/releases/latest/download/constellation-darwin-amd64 +``` + +2. [Verify the signature](../workflows/verify-cli.md) (optional) + +3. Install the CLI to your PATH: + +```bash +sudo install constellation-darwin-amd64 /usr/local/bin/constellation +``` + + + + + +1. Download the CLI: + +```bash +Invoke-WebRequest -OutFile ./constellation.exe -Uri 'https://github.com/edgelesssys/constellation/releases/latest/download/constellation-windows-amd64.exe' +``` + +2. [Verify the signature](../workflows/verify-cli.md) (optional) + +3. Install the CLI under `C:\Program Files\Constellation\bin\constellation.exe` + +3. Add the CLI to your PATH: + + 1. Open `Advanced system settings` by searching for the App in the Windows search + 2. Go to the `Advanced` tab + 3. Click `Environment Variables…` + 4. Click variable called `Path` and click `Edit…` + 5. Click `New` + 6. Enter the path to the folder containing the binary you want on your PATH: `C:\Program Files\Constellation\bin` + + + + +:::tip +The CLI supports autocompletion for various shells. To set it up, run `constellation completion` and follow the given steps. +::: + +## Set up cloud credentials + +Constellation makes authenticated calls to the CSP API. Therefore, you need to set up Constellation with the credentials for your CSP. + +:::tip +If you don't have a cloud subscription, you can also set up a [local Constellation cluster using virtualization](../getting-started/first-steps-local.md) for testing. +::: + +### Required permissions + + + + +To set up a Constellation cluster, you need to perform two tasks that require permissions: create the infrastructure and create roles for cluster nodes. Both of these actions can be performed by different users, e.g., an administrator to create roles and a DevOps engineer to create the infrastructure. + +To [create the IAM configuration](../workflows/config.md#creating-an-iam-configuration) for Constellation, you need the following permissions: + +```json +{ + "Version": "2012-10-17", + "Statement": [ + { + "Effect": "Allow", + "Action": [ + "ec2:DescribeAccountAttributes", + "iam:AddRoleToInstanceProfile", + "iam:AttachRolePolicy", + "iam:CreateInstanceProfile", + "iam:CreatePolicy", + "iam:CreateRole", + "iam:DeleteInstanceProfile", + "iam:DeletePolicy", + "iam:DeletePolicyVersion", + "iam:DeleteRole", + "iam:DetachRolePolicy", + "iam:GetInstanceProfile", + "iam:GetPolicy", + "iam:GetPolicyVersion", + "iam:GetRole", + "iam:ListAttachedRolePolicies", + "iam:ListInstanceProfilesForRole", + "iam:ListPolicyVersions", + "iam:ListRolePolicies", + "iam:PassRole", + "iam:RemoveRoleFromInstanceProfile", + "sts:GetCallerIdentity" + ], + "Resource": "*" + } + ] +} +``` + +The built-in `AdministratorAccess` policy is a superset of these permissions. + +To [create a Constellation cluster](../workflows/create.md), see the permissions of [main.tf](https://github.com/edgelesssys/constellation/blob/main/terraform/infrastructure/iam/aws/main.tf). + +The built-in `PowerUserAccess` policy is a superset of these permissions. + +Follow Amazon's guide on [understanding](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html) and [managing policies](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html). + + + + +The following [resource providers need to be registered](https://learn.microsoft.com/en-us/azure/azure-resource-manager/management/resource-providers-and-types#register-resource-provider) in your subscription: + +* `Microsoft.Attestation` +* `Microsoft.Compute` +* `Microsoft.Insights` +* `Microsoft.ManagedIdentity` +* `Microsoft.Network` + +By default, Constellation tries to register these automatically if they haven't been registered before. + +To [create the IAM configuration](../workflows/config.md#creating-an-iam-configuration) for Constellation, you need the following permissions: + +* `*/register/action` \[1] +* `Microsoft.Authorization/roleAssignments/*` +* `Microsoft.Authorization/roleDefinitions/*` +* `Microsoft.ManagedIdentity/userAssignedIdentities/*` +* `Microsoft.Resources/subscriptions/resourcegroups/*` + +The built-in `Owner` role is a superset of these permissions. + +To [create a Constellation cluster](../workflows/create.md), you need the following permissions: + +* `Microsoft.Attestation/attestationProviders/*` +* `Microsoft.Compute/virtualMachineScaleSets/*` +* `Microsoft.Insights/components/*` +* `Microsoft.ManagedIdentity/userAssignedIdentities/*` +* `Microsoft.Network/loadBalancers/*` +* `Microsoft.Network/loadBalancers/backendAddressPools/*` +* `Microsoft.Network/networkSecurityGroups/*` +* `Microsoft.Network/publicIPAddresses/*` +* `Microsoft.Network/virtualNetworks/*` +* `Microsoft.Network/virtualNetworks/subnets/*` +* `Microsoft.Network/natGateways/*` + +The built-in `Contributor` role is a superset of these permissions. + +Follow Microsoft's guide on [understanding](https://learn.microsoft.com/en-us/azure/role-based-access-control/role-definitions) and [assigning roles](https://learn.microsoft.com/en-us/azure/role-based-access-control/role-assignments). + +1: You can omit `*/register/Action` if the resource providers mentioned above are already registered and the `ARM_SKIP_PROVIDER_REGISTRATION` environment variable is set to `true` when creating the IAM configuration. + + + + +Create a new project for Constellation or use an existing one. +Enable the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com) on it. + +To [create the IAM configuration](../workflows/config.md#creating-an-iam-configuration) for Constellation, you need the following permissions: + +* `iam.serviceAccountKeys.create` +* `iam.serviceAccountKeys.delete` +* `iam.serviceAccountKeys.get` +* `iam.serviceAccounts.create` +* `iam.serviceAccounts.delete` +* `iam.serviceAccounts.get` +* `resourcemanager.projects.getIamPolicy` +* `resourcemanager.projects.setIamPolicy` + +Together, the built-in roles `roles/editor` and `roles/resourcemanager.projectIamAdmin` form a superset of these permissions. + +To [create a Constellation cluster](../workflows/create.md), you need the following permissions: + +* `compute.addresses.createInternal` +* `compute.addresses.deleteInternal` +* `compute.addresses.get` +* `compute.addresses.useInternal` +* `compute.backendServices.create` +* `compute.backendServices.delete` +* `compute.backendServices.get` +* `compute.backendServices.use` +* `compute.disks.create` +* `compute.firewalls.create` +* `compute.firewalls.delete` +* `compute.firewalls.get` +* `compute.firewalls.update` +* `compute.globalAddresses.create` +* `compute.globalAddresses.delete` +* `compute.globalAddresses.get` +* `compute.globalAddresses.use` +* `compute.globalForwardingRules.create` +* `compute.globalForwardingRules.delete` +* `compute.globalForwardingRules.get` +* `compute.globalForwardingRules.setLabels` +* `compute.globalOperations.get` +* `compute.healthChecks.create` +* `compute.healthChecks.delete` +* `compute.healthChecks.get` +* `compute.healthChecks.useReadOnly` +* `compute.instanceGroupManagers.create` +* `compute.instanceGroupManagers.delete` +* `compute.instanceGroupManagers.get` +* `compute.instanceGroupManagers.update` +* `compute.instanceGroups.create` +* `compute.instanceGroups.delete` +* `compute.instanceGroups.get` +* `compute.instanceGroups.update` +* `compute.instanceGroups.use` +* `compute.instances.create` +* `compute.instances.setLabels` +* `compute.instances.setMetadata` +* `compute.instances.setTags` +* `compute.instanceTemplates.create` +* `compute.instanceTemplates.delete` +* `compute.instanceTemplates.get` +* `compute.instanceTemplates.useReadOnly` +* `compute.networks.create` +* `compute.networks.delete` +* `compute.networks.get` +* `compute.networks.updatePolicy` +* `compute.routers.create` +* `compute.routers.delete` +* `compute.routers.get` +* `compute.routers.update` +* `compute.subnetworks.create` +* `compute.subnetworks.delete` +* `compute.subnetworks.get` +* `compute.subnetworks.use` +* `compute.targetTcpProxies.create` +* `compute.targetTcpProxies.delete` +* `compute.targetTcpProxies.get` +* `compute.targetTcpProxies.use` +* `iam.serviceAccounts.actAs` + +Together, the built-in roles `roles/editor`, `roles/compute.instanceAdmin` and `roles/resourcemanager.projectIamAdmin` form a superset of these permissions. + +Follow Google's guide on [understanding](https://cloud.google.com/iam/docs/understanding-roles) and [assigning roles](https://cloud.google.com/iam/docs/granting-changing-revoking-access). + + + + +Constellation on STACKIT requires a User Access Token (UAT) for the OpenStack API and a STACKIT service account. +The UAT already has all required permissions by default. +The STACKIT service account needs the `editor` role to create STACKIT LoadBalancers. +Look at the [STACKIT documentation](https://docs.stackit.cloud/stackit/en/getting-started-in-service-accounts-134415831.html) on how to create the service account and assign the role. + + + + +### Authentication + +You need to authenticate with your CSP. The following lists the required steps for *testing* and *production* environments. + +:::note +The steps for a *testing* environment are simpler. However, they may expose secrets to the CSP. If in doubt, follow the *production* steps. +::: + + + + +**Testing** + +You can use the [AWS CloudShell](https://console.aws.amazon.com/cloudshell/home). Make sure you are [authorized to use it](https://docs.aws.amazon.com/cloudshell/latest/userguide/sec-auth-with-identities.html). + +**Production** + +Use the latest version of the [AWS CLI](https://aws.amazon.com/cli/) on a trusted machine: + +```bash +aws configure +``` + +Options and first steps are described in the [AWS CLI documentation](https://docs.aws.amazon.com/cli/index.html). + + + + +**Testing** + +Simply open the [Azure Cloud Shell](https://docs.microsoft.com/en-us/azure/cloud-shell/overview). + +**Production** + +Use the latest version of the [Azure CLI](https://docs.microsoft.com/en-us/cli/azure/) on a trusted machine: + +```bash +az login +``` + +Other options are described in Azure's [authentication guide](https://docs.microsoft.com/en-us/cli/azure/authenticate-azure-cli). + + + + +**Testing** + +You can use the [Google Cloud Shell](https://cloud.google.com/shell). Make sure your [session is authorized](https://cloud.google.com/shell/docs/auth). For example, execute `gsutil` and accept the authorization prompt. + +**Production** + +Use one of the following options on a trusted machine: + +* Use the [`gcloud` CLI](https://cloud.google.com/sdk/gcloud) + + ```bash + gcloud auth application-default login + ``` + + This will ask you to log-in to your Google account and create your credentials. + The Constellation CLI will automatically load these credentials when needed. + +* Set up a service account and pass the credentials manually + + Follow [Google's guide](https://cloud.google.com/docs/authentication/production#manually) for setting up your credentials. + + + + +You need to authenticate with the infrastructure API (OpenStack) and create a service account (STACKIT API). + +1. [Follow the STACKIT documentation](https://docs.stackit.cloud/stackit/en/step-1-generating-of-user-access-token-11763726.html) for obtaining a User Access Token (UAT) to use the infrastructure API +2. Create a configuration file with the credentials from the User Access Token under: + * Linux: `~/.config/openstack/clouds.yaml` + * macOS: `/Users//Library/Application Support/openstack/clouds.yaml` or `/etc/openstack/clouds.yaml` + * Windows: `%AppData%\openstack\clouds.yaml` + + + ```yaml + clouds: + stackit: + auth: + auth_url: https://keystone.api.iaas.eu01.stackit.cloud/v3 + username: REPLACE_WITH_UAT_USERNAME + password: REPLACE_WITH_UAT_PASSWORD + project_id: REPLACE_WITH_OPENSTACK_PROJECT_ID + project_name: REPLACE_WITH_STACKIT_PROJECT_NAME + user_domain_name: portal_mvp + project_domain_name: portal_mvp + region_name: RegionOne + identity_api_version: 3 + ``` + +:::caution + +`project_id` refers to the ID of your OpenStack project. The STACKIT portal also shows the STACKIT ID that's associated with your project in some places. Make sure you insert the OpenStack project ID in the `clouds.yaml` file. + +::: + +3. [Follow the STACKIT documentation](https://docs.stackit.cloud/stackit/en/getting-started-in-service-accounts-134415831.html) for creating a service account and an access token +4. Assign the `editor` role to the service account by [following the documentation](https://docs.stackit.cloud/stackit/en/getting-started-in-service-accounts-134415831.html) +5. Create a configuration file under `~/.stackit/credentials.json` (`%USERPROFILE%\.stackit\credentials.json` on Windows) + + ```json + {"STACKIT_SERVICE_ACCOUNT_TOKEN":"REPLACE_WITH_TOKEN"} + ``` + + + + + +## Next steps + +You are now ready to [deploy your first confidential Kubernetes cluster and application](first-steps.md). diff --git a/docs/versioned_docs/version-2.21/getting-started/marketplaces.md b/docs/versioned_docs/version-2.21/getting-started/marketplaces.md new file mode 100644 index 000000000..a6763a42a --- /dev/null +++ b/docs/versioned_docs/version-2.21/getting-started/marketplaces.md @@ -0,0 +1,56 @@ +# Using Constellation via Cloud Marketplaces + +Constellation is available through the Marketplaces of AWS, Azure, GCP, and STACKIT. This allows you to create self-managed Constellation clusters that are billed on a pay-per-use basis (hourly, per vCPU) with your CSP account. You can still get direct support by Edgeless Systems. For more information, please [contact us](https://www.edgeless.systems/enterprise-support/). + +This document explains how to run Constellation with the dynamically billed cloud marketplace images. + + + + +To use Constellation's marketplace images, ensure that you are subscribed to the [marketplace offering](https://aws.amazon.com/marketplace/pp/prodview-2mbn65nv57oys) through the web portal. + +Then, enable the use of marketplace images in your Constellation `constellation-conf.yaml` [config file](../workflows/config.md): + +```bash +yq eval -i ".provider.aws.useMarketplaceImage = true" constellation-conf.yaml +``` + + + + +Constellation has a private marketplace plan. Please [contact us](https://www.edgeless.systems/enterprise-support/) to gain access. + +To use a marketplace image, you need to accept the marketplace image's terms once for your subscription with the [Azure CLI](https://learn.microsoft.com/en-us/cli/azure/vm/image/terms?view=azure-cli-latest): + +```bash +az vm image terms accept --publisher edgelesssystems --offer constellation --plan constellation +``` + +Then, enable the use of marketplace images in your Constellation `constellation-conf.yaml` [config file](../workflows/config.md): + +```bash +yq eval -i ".provider.azure.useMarketplaceImage = true" constellation-conf.yaml +``` + + + + +To use a marketplace image, ensure that the account is entitled to use marketplace images by Edgeless Systems by accepting the terms through the [web portal](https://console.cloud.google.com/marketplace/vm/config/edgeless-systems-public/constellation). + +Then, enable the use of marketplace images in your Constellation `constellation-conf.yaml` [config file](../workflows/config.md): + +```bash +yq eval -i ".provider.gcp.useMarketplaceImage = true" constellation-conf.yaml +``` + + + + +On STACKIT, the selected Constellation image is always a marketplace image. You can find more information on the STACKIT portal. + + + + +Ensure that the cluster uses an official release image version (i.e., `.image=vX.Y.Z` in the `constellation-conf.yaml` file). + +From there, you can proceed with the [cluster creation](../workflows/create.md) as usual. diff --git a/docs/versioned_docs/version-2.21/intro.md b/docs/versioned_docs/version-2.21/intro.md new file mode 100644 index 000000000..0bfe86da9 --- /dev/null +++ b/docs/versioned_docs/version-2.21/intro.md @@ -0,0 +1,34 @@ +--- +slug: / +id: intro +--- +# Introduction + +Welcome to the documentation of Constellation! Constellation is a Kubernetes engine that aims to provide the best possible data security. + +![Constellation concept](/img/concept.svg) + + Constellation shields your entire Kubernetes cluster from the underlying cloud infrastructure. Everything inside is always encrypted, including at runtime in memory. For this, Constellation leverages a technology called *confidential computing* and more specifically Confidential VMs. + +:::tip +See the 📄[whitepaper](https://content.edgeless.systems/hubfs/Confidential%20Computing%20Whitepaper.pdf) for more information on confidential computing. +::: + +## Goals + +From a security perspective, Constellation is designed to keep all data always encrypted and to prevent any access from the underlying (cloud) infrastructure. This includes access from datacenter employees, privileged cloud admins, and attackers coming through the infrastructure. Such attackers could be malicious co-tenants escalating their privileges or hackers who managed to compromise a cloud server. + +From a DevOps perspective, Constellation is designed to work just like what you would expect from a modern Kubernetes engine. + +## Use cases + +Constellation provides unique security [features](overview/confidential-kubernetes.md) and [benefits](overview/security-benefits.md). The core use cases are: + +* Increasing the overall security of your clusters +* Increasing the trustworthiness of your SaaS offerings +* Moving sensitive workloads from on-prem to the cloud +* Meeting regulatory requirements + +## Next steps + +You can learn more about the concept of Confidential Kubernetes, features, security benefits, and performance of Constellation in the *Basics* section. To jump right into the action head to *Getting started*. diff --git a/docs/versioned_docs/version-2.21/overview/clouds.md b/docs/versioned_docs/version-2.21/overview/clouds.md new file mode 100644 index 000000000..b2695d28e --- /dev/null +++ b/docs/versioned_docs/version-2.21/overview/clouds.md @@ -0,0 +1,66 @@ +# Feature status of clouds + +What works on which cloud? Currently, Confidential VMs (CVMs) are available in varying quality on the different clouds and software stacks. + +For Constellation, the ideal environment provides the following: + +1. Ability to run arbitrary software and images inside CVMs +2. CVMs based on AMD SEV-SNP (available in EPYC CPUs since the Milan generation) or Intel TDX (available in Xeon CPUs since the Sapphire Rapids generation) +3. Ability for CVM guests to obtain raw hardware attestation statements +4. Reviewable, open-source firmware inside CVMs +5. Capability of the firmware to attest the integrity of the code it passes control to, e.g., with an embedded virtual TPM (vTPM) + +(1) is a functional must-have. (2)--(5) are required for remote attestation that fully keeps the infrastructure/cloud out. Constellation can work without them or with approximations, but won't protect against certain privileged attackers anymore. + +The following table summarizes the state of features for different infrastructures. + +| **Feature** | **AWS** | **Azure** | **GCP** | **STACKIT** | **OpenStack (Yoga)** | +|-----------------------------------|---------|-----------|---------|--------------|----------------------| +| **1. Custom images** | Yes | Yes | Yes | Yes | Yes | +| **2. SEV-SNP or TDX** | Yes | Yes | Yes | No | Depends on kernel/HV | +| **3. Raw guest attestation** | Yes | Yes | Yes | No | Depends on kernel/HV | +| **4. Reviewable firmware** | Yes | No* | No | No | Depends on kernel/HV | +| **5. Confidential measured boot** | No | Yes | No | No | Depends on kernel/HV | + +## Amazon Web Services (AWS) + +Amazon EC2 [supports AMD SEV-SNP](https://aws.amazon.com/de/about-aws/whats-new/2023/04/amazon-ec2-amd-sev-snp/). +Regarding (3), AWS provides direct access to attestation statements. +However, regarding (5), attestation is partially based on the [NitroTPM](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/nitrotpm.html) for [measured boot](../architecture/attestation.md#measured-boot), which is a vTPM managed by the Nitro hypervisor. +Hence, the hypervisor is currently part of Constellation's TCB. +Regarding (4), the [firmware is open source](https://github.com/aws/uefi) and can be reproducibly built. + +## Microsoft Azure + +With its [CVM offering](https://docs.microsoft.com/en-us/azure/confidential-computing/confidential-vm-overview), Azure provides the best foundations for Constellation. +Regarding (3), Azure provides direct access to attestation statements. +The firmware runs in an isolated domain inside the CVM and exposes a vTPM (5), but it's closed source (4). +On SEV-SNP, Azure uses VM Privilege Level (VMPL) isolation for the separation of firmware and the rest of the VM; on TDX, they use TD partitioning. +This firmware is signed by Azure. +The signature is reflected in the attestation statements of CVMs. +Thus, the Azure closed-source firmware becomes part of Constellation's trusted computing base (TCB). + +\* Recently, [Azure announced the open source paravisor OpenHCL](https://techcommunity.microsoft.com/blog/windowsosplatform/openhcl-the-new-open-source-paravisor/4273172). It's the foundation for fully open source and verifiable CVM firmware. Once Azure provides their CVM firmware with reproducible builds based on OpenHCL, (4) switches from *No* to *Yes*. Constellation will support OpenHCL based firmware on Azure in the future. + +## Google Cloud Platform (GCP) + +The [CVMs Generally Available in GCP](https://cloud.google.com/confidential-computing/confidential-vm/docs/confidential-vm-overview#technologies) are based on AMD SEV-ES or SEV-SNP. +Regarding (3), with their SEV-SNP offering Google provides direct access to attestation statements. +However, regarding (5), attestation is partially based on the [Shielded VM vTPM](https://cloud.google.com/compute/shielded-vm/docs/shielded-vm#vtpm) for [measured boot](../architecture/attestation.md#measured-boot), which is a vTPM managed by Google's hypervisor. +Hence, the hypervisor is currently part of Constellation's TCB. +Regarding (4), the CVMs still include closed-source firmware. + +[TDX on Google](https://cloud.google.com/blog/products/identity-security/confidential-vms-on-intel-cpus-your-datas-new-intelligent-defense) is in public preview. +With it, Constellation would have a similar TCB and attestation flow as with the current SEV-SNP offering. + +## STACKIT + +[STACKIT Compute Engine](https://www.stackit.de/en/product/stackit-compute-engine/) supports AMD SEV-ES. A vTPM is used for measured boot, which is a vTPM managed by STACKIT's hypervisor. Hence, the hypervisor is currently part of Constellation's TCB. + +## OpenStack + +OpenStack is an open-source cloud and infrastructure management software. It's used by many smaller CSPs and datacenters. In the latest *Yoga* version, OpenStack has basic support for CVMs. However, much depends on the employed kernel and hypervisor. Features (2)--(4) are likely to be a *Yes* with Linux kernel version 6.2. Thus, going forward, OpenStack on corresponding AMD or Intel hardware will be a viable underpinning for Constellation. + +## Conclusion + +The different clouds and software like the Linux kernel and OpenStack are in the process of building out their support for state-of-the-art CVMs. Azure has already most features in place. For Constellation, the status quo means that the TCB has different shapes on different infrastructures. With broad SEV-SNP support coming to the Linux kernel, we soon expect a normalization of features across infrastructures. diff --git a/docs/versioned_docs/version-2.21/overview/confidential-kubernetes.md b/docs/versioned_docs/version-2.21/overview/confidential-kubernetes.md new file mode 100644 index 000000000..bff8c3322 --- /dev/null +++ b/docs/versioned_docs/version-2.21/overview/confidential-kubernetes.md @@ -0,0 +1,42 @@ +# Confidential Kubernetes + +We use the term *Confidential Kubernetes* to refer to the concept of using confidential-computing technology to shield entire Kubernetes clusters from the infrastructure. The three defining properties of this concept are: + +1. **Workload shielding**: the confidentiality and integrity of all workload-related data and code are enforced. +2. **Control plane shielding**: the confidentiality and integrity of the cluster's control plane, state, and workload configuration are enforced. +3. **Attestation and verifiability**: the two properties above can be verified remotely based on hardware-rooted cryptographic certificates. + +Each of the above properties is equally important. Only with all three in conjunction, an entire cluster can be shielded without gaps. + +## Constellation security features + +Constellation implements the Confidential Kubernetes concept with the following security features. + +* **Runtime encryption**: Constellation runs all Kubernetes nodes inside Confidential VMs (CVMs). This gives runtime encryption for the entire cluster. +* **Network and storage encryption**: Constellation augments this with transparent encryption of the [network](../architecture/networking.md), [persistent storage](../architecture/encrypted-storage.md), and other managed storage like [AWS S3](../architecture/encrypted-storage.md#encrypted-s3-object-storage). Thus, workloads and control plane are truly end-to-end encrypted: at rest, in transit, and at runtime. +* **Transparent key management**: Constellation manages the corresponding [cryptographic keys](../architecture/keys.md) inside CVMs. +* **Node attestation and verification**: Constellation verifies the integrity of each new CVM-based node using [remote attestation](../architecture/attestation.md). Only "good" nodes receive the cryptographic keys required to access the network and storage of a cluster. +* **Confidential computing-optimized images**: A node is "good" if it's running a signed Constellation [node image](../architecture/images.md) inside a CVM and is in the expected state. (Node images are hardware-measured during boot. The measurements are reflected in the attestation statements that are produced by nodes and verified by Constellation.) +* **"Whole cluster" attestation**: Towards the DevOps engineer, Constellation provides a single hardware-rooted certificate from which all of the above can be verified. + +With the above, Constellation wraps an entire cluster into one coherent and verifiable *confidential context*. The concept is depicted in the following. + +![Confidential Kubernetes](../_media/concept-constellation.svg) + +## Comparison: Managed Kubernetes with CVMs + +In comparison, managed Kubernetes with CVMs, as it's for example offered in [AKS](https://azure.microsoft.com/en-us/services/kubernetes-service/) and [GKE](https://cloud.google.com/kubernetes-engine), only provides runtime encryption for certain worker nodes. Here, each worker node is a separate (and typically unverified) confidential context. This only provides limited security benefits as it only prevents direct access to a worker node's memory. The large majority of potential attacks through the infrastructure remain unaffected. This includes attacks through the control plane, access to external key management, and the corruption of worker node images. This leaves many problems unsolved. For instance, *Node A* has no means to verify if *Node B* is "good" and if it's OK to share data with it. Consequently, this approach leaves a large attack surface, as is depicted in the following. + +![Concept: Managed Kubernetes plus CVMs](../_media/concept-managed.svg) + +The following table highlights the key differences in terms of features. + +| | Managed Kubernetes with CVMs | Confidential Kubernetes (Constellation✨) | +|-------------------------------------|------------------------------|--------------------------------------------| +| Runtime encryption | Partial (data plane only)| **Yes** | +| Node image verification | No | **Yes** | +| Full cluster attestation | No | **Yes** | +| Transparent network encryption | No | **Yes** | +| Transparent storage encryption | No | **Yes** | +| Confidential key management | No | **Yes** | +| Cloud agnostic / multi-cloud | No | **Yes** | diff --git a/docs/versioned_docs/version-2.21/overview/license.md b/docs/versioned_docs/version-2.21/overview/license.md new file mode 100644 index 000000000..34122c025 --- /dev/null +++ b/docs/versioned_docs/version-2.21/overview/license.md @@ -0,0 +1,33 @@ +# License + +## Source code + +Constellation's source code is available on [GitHub](https://github.com/edgelesssys/constellation) under the [GNU Affero General Public License v3.0](https://github.com/edgelesssys/constellation/blob/main/LICENSE). + +## Binaries + +Edgeless Systems provides ready-to-use and [signed](../architecture/attestation.md#chain-of-trust) binaries of Constellation. This includes the CLI and the [node images](../architecture/images.md). + +These binaries may be used free of charge within the bounds of Constellation's [**Community License**](#community-license). An [**Enterprise License**](#enterprise-license) can be purchased from Edgeless Systems. + +The Constellation CLI displays relevant license information when you initialize your cluster. You are responsible for staying within the bounds of your respective license. Constellation doesn't enforce any limits so as not to endanger your cluster's availability. + +## Terraform provider + +Edgeless Systems provides a [Terraform provider](https://github.com/edgelesssys/terraform-provider-constellation/releases), which may be used free of charge within the bounds of Constellation's [**Community License**](#community-license). An [**Enterprise License**](#enterprise-license) can be purchased from Edgeless Systems. + +You are responsible for staying within the bounds of your respective license. Constellation doesn't enforce any limits so as not to endanger your cluster's availability. + +## Community License + +You are free to use the Constellation binaries provided by Edgeless Systems to create services for internal consumption, evaluation purposes, or non-commercial use. You must not use the Constellation binaries to provide commercial hosted services to third parties. Edgeless Systems gives no warranties and offers no support. + +## Enterprise License + +Enterprise Licenses don't have the above limitations and come with support and additional features. Find out more at the [product website](https://www.edgeless.systems/products/constellation/). + +Once you have received your Enterprise License file, place it in your [Constellation workspace](../architecture/orchestration.md#workspaces) in a file named `constellation.license`. + +## CSP Marketplaces + +Constellation is available through the Marketplaces of AWS, Azure, GCP, and STACKIT. This allows you to create self-managed Constellation clusters that are billed on a pay-per-use basis (hourly, per vCPU) with your CSP account. You can still get direct support by Edgeless Systems. For more information, please [contact us](https://www.edgeless.systems/enterprise-support/). diff --git a/docs/versioned_docs/version-2.21/overview/performance/application.md b/docs/versioned_docs/version-2.21/overview/performance/application.md new file mode 100644 index 000000000..c67d59644 --- /dev/null +++ b/docs/versioned_docs/version-2.21/overview/performance/application.md @@ -0,0 +1,102 @@ +# Application benchmarks + +## HashiCorp Vault + +[HashiCorp Vault](https://www.vaultproject.io/) is a distributed secrets management software that can be deployed to Kubernetes. +HashiCorp maintains a benchmarking tool for vault, [vault-benchmark](https://github.com/hashicorp/vault-benchmark/). +Vault-benchmark generates load on a Vault deployment and measures response times. + +This article describes the results from running vault-benchmark on Constellation, AKS, and GKE. +You can find the setup for producing the data discussed in this article in the [vault-benchmarks](https://github.com/edgelesssys/vault-benchmarks) repository. + +The Vault API used during benchmarking is the [transits secret engine](https://developer.hashicorp.com/vault/docs/secrets/transit). +This allows services to send data to Vault for encryption, decryption, signing, and verification. + +## Results + +On each run, vault-benchmark sends requests and measures the latencies. +The measured latencies are aggregated through various statistical features. +After running the benchmark n times, the arithmetic mean over a subset of the reported statistics is calculated. +The selected features are arithmetic mean, 99th percentile, minimum, and maximum. + +Arithmetic mean gives a general sense of the latency on each target. +The 99th percentile shows performance in (most likely) erroneous states. +Minimum and maximum mark the range within which latency varies each run. + +The benchmark was configured with 1300 workers and 10 seconds per run. +Those numbers were chosen empirically. +The latency was stabilizing at 10 seconds runtime, not changing with further increase. +Increasing the number of workers beyond 1300 leads to request failures, marking the limit Vault was able to handle in this setup. +All results are based on 100 runs. + +The following data was generated while running five replicas, one primary, and four standby nodes. +All numbers are in seconds if not indicated otherwise. +``` +========== Results AKS ========== +Mean: mean: 1.632200, variance: 0.002057 +P99: mean: 5.480679, variance: 2.263700 +Max: mean: 6.651001, variance: 2.808401 +Min: mean: 0.011415, variance: 0.000133 +========== Results GKE ========== +Mean: mean: 1.656435, variance: 0.003615 +P99: mean: 6.030807, variance: 3.955051 +Max: mean: 7.164843, variance: 3.300004 +Min: mean: 0.010233, variance: 0.000111 +========== Results C11n ========== +Mean: mean: 1.651549, variance: 0.001610 +P99: mean: 5.780422, variance: 3.016106 +Max: mean: 6.942997, variance: 3.075796 +Min: mean: 0.013774, variance: 0.000228 +========== AKS vs C11n ========== +Mean: +1.171577 % (AKS is faster) +P99: +5.185495 % (AKS is faster) +Max: +4.205618 % (AKS is faster) +Min: +17.128781 % (AKS is faster) +========== GKE vs C11n ========== +Mean: -0.295851 % (GKE is slower) +P99: -4.331603 % (GKE is slower) +Max: -3.195248 % (GKE is slower) +Min: +25.710886 % (GKE is faster) +``` + +**Interpretation**: Latencies are all within ~5% of each other. +AKS performs slightly better than GKE and Constellation (C11n) in all cases except minimum latency. +Minimum latency is the lowest for GKE. +Compared to GKE, Constellation had slightly lower peak latencies (99th percentile and maximum), indicating that Constellation could have handled slightly more concurrent accesses than GKE. +Overall, performance is at comparable levels across all three distributions. +Based on these numbers, you can use a similarly sized Constellation cluster to run your existing Vault deployment. + +### Visualization + +The following plots visualize the data presented above as [box plots](https://en.wikipedia.org/wiki/Box_plot). +The whiskers denote the minimum and maximum. +The box stretches from the 25th to the 75th percentile, with the dividing bar marking the 50th percentile. +The circles outside the whiskers denote outliers. + +

      +Mean Latency + +![Mean Latency](../../_media/benchmark_vault/5replicas/mean_latency.png) + +
      + +
      +99th Percentile Latency + +![99th Percentile Latency](../../_media/benchmark_vault/5replicas/p99_latency.png) + +
      + +
      +Maximum Latency + +![Maximum Latency](../../_media/benchmark_vault/5replicas/max_latency.png) + +
      + +
      +Minimum Latency + +![Minimum Latency](../../_media/benchmark_vault/5replicas/min_latency.png) + +
      diff --git a/docs/versioned_docs/version-2.21/overview/performance/compute.md b/docs/versioned_docs/version-2.21/overview/performance/compute.md new file mode 100644 index 000000000..88dd4b1b2 --- /dev/null +++ b/docs/versioned_docs/version-2.21/overview/performance/compute.md @@ -0,0 +1,11 @@ +# Impact of runtime encryption on compute performance + +All nodes in a Constellation cluster are executed inside Confidential VMs (CVMs). Consequently, the performance of Constellation is inherently linked to the performance of these CVMs. + +## AMD and Azure benchmarking + +AMD and Azure have collectively released a [performance benchmark](https://community.amd.com/t5/business/microsoft-azure-confidential-computing-powered-by-3rd-gen-epyc/ba-p/497796) for CVMs that utilize 3rd Gen AMD EPYC processors (Milan) with SEV-SNP. This benchmark, which included a variety of mostly compute-intensive tests such as SPEC CPU 2017 and CoreMark, demonstrated that CVMs experience only minor performance degradation (ranging from 2% to 8%) when compared to standard VMs. Such results are indicative of the performance that can be expected from compute-intensive workloads running with Constellation on Azure. + +## AMD and Google benchmarking + +Similarly, AMD and Google have jointly released a [performance benchmark](https://www.amd.com/system/files/documents/3rd-gen-epyc-gcp-c2d-conf-compute-perf-brief.pdf) for CVMs employing 3rd Gen AMD EPYC processors (Milan) with SEV-SNP. With high-performance computing workloads such as WRF, NAMD, Ansys CFS, and Ansys LS_DYNA, they observed analogous findings, with only minor performance degradation (between 2% and 4%) compared to standard VMs. These outcomes are reflective of the performance that can be expected for compute-intensive workloads running with Constellation on GCP. diff --git a/docs/versioned_docs/version-2.21/overview/performance/io.md b/docs/versioned_docs/version-2.21/overview/performance/io.md new file mode 100644 index 000000000..3ae796f8a --- /dev/null +++ b/docs/versioned_docs/version-2.21/overview/performance/io.md @@ -0,0 +1,204 @@ +# I/O performance benchmarks + +To assess the overall performance of Constellation, this benchmark evaluates Constellation v2.6.0 in terms of storage I/O using [`fio`](https://fio.readthedocs.io/en/latest/fio_doc.html) and network performance using the [Kubernetes Network Benchmark](https://github.com/InfraBuilder/k8s-bench-suite#knb--kubernetes-network-be). + +This benchmark tested Constellation on Azure and GCP and compared the results against the managed Kubernetes offerings AKS and GKE. + +## Configurations + +### Constellation + +The benchmark was conducted with Constellation v2.6.0, Kubernetes v1.25.7, and Cilium v1.12. +It ran on the following infrastructure configurations. + +Constellation on Azure: + +- Nodes: 3 (1 Control-plane, 2 Worker) +- Machines: `DC4as_v5`: 3rd Generation AMD EPYC 7763v (Milan) processor with 4 Cores, 16 GiB memory +- CVM: `true` +- Region: `West US` +- Zone: `2` + +Constellation on GCP: + +- Nodes: 3 (1 Control-plane, 2 Worker) +- Machines: `n2d-standard-4`: 2nd Generation AMD EPYC (Rome) processor with 4 Cores, 16 GiB of memory +- CVM: `true` +- Zone: `europe-west3-b` + +### AKS + +On AKS, the benchmark used Kubernetes `v1.24.9` and nodes with version `AKSUbuntu-1804gen2containerd-2023.02.15`. +AKS ran with the [`kubenet`](https://learn.microsoft.com/en-us/azure/aks/concepts-network#kubenet-basic-networking) CNI and the [default CSI driver](https://learn.microsoft.com/en-us/azure/aks/azure-disk-csi) for Azure Disk. + +The following infrastructure configurations was used: + +- Nodes: 2 (2 Worker) +- Machines: `D4as_v5`: 3rd Generation AMD EPYC 7763v (Milan) processor with 4 Cores, 16 GiB memory +- CVM: `false` +- Region: `West US` +- Zone: `2` + +### GKE + +On GKE, the benchmark used Kubernetes `v1.24.9` and nodes with version `1.24.9-gke.3200`. +GKE ran with the [`kubenet`](https://cloud.google.com/kubernetes-engine/docs/concepts/network-overview) CNI and the [default CSI driver](https://cloud.google.com/kubernetes-engine/docs/how-to/persistent-volumes/gce-pd-csi-driver) for Compute Engine persistent disk. + +The following infrastructure configurations was used: + +- Nodes: 2 (2 Worker) +- Machines: `n2d-standard-4` 2nd Generation AMD EPYC (Rome) processor with 4 Cores, 16 GiB of memory +- CVM: `false` +- Zone: `europe-west3-b` + +## Results + +### Network + +This section gives a thorough analysis of the network performance of Constellation, specifically focusing on measuring TCP and UDP bandwidth. +The benchmark measured the bandwidth of pod-to-pod and pod-to-service connections between two different nodes using [`iperf`](https://iperf.fr/). + +GKE and Constellation on GCP had a maximum network bandwidth of [10 Gbps](https://cloud.google.com/compute/docs/general-purpose-machines#n2d_machines). +AKS with `Standard_D4as_v5` machines a maximum network bandwidth of [12.5 Gbps](https://learn.microsoft.com/en-us/azure/virtual-machines/dasv5-dadsv5-series#dasv5-series). +The Confidential VM equivalent `Standard_DC4as_v5` currently has a network bandwidth of [1.25 Gbps](https://learn.microsoft.com/en-us/azure/virtual-machines/dcasv5-dcadsv5-series#dcasv5-series-products). +Therefore, to make the test comparable, both AKS and Constellation on Azure were running with `Standard_DC4as_v5` machines and 1.25 Gbps bandwidth. + +Constellation on Azure and AKS used an MTU of 1500. +Constellation on GCP used an MTU of 8896. GKE used an MTU of 1450. + +The difference in network bandwidth can largely be attributed to two factors. + +- Constellation's [network encryption](../../architecture/networking.md) via Cilium and WireGuard, which protects data in-transit. +- [AMD SEV using SWIOTLB bounce buffers](https://lore.kernel.org/all/20200204193500.GA15564@ashkalra_ubuntu_server/T/) for all DMA including network I/O. + +#### Pod-to-Pod + +In this scenario, the client Pod connects directly to the server pod via its IP address. + +```mermaid +flowchart LR + subgraph Node A + Client[Client] + end + subgraph Node B + Server[Server] + end + Client ==>|traffic| Server +``` + +The results for "Pod-to-Pod" on Azure are as follows: + +![Network Pod2Pod Azure benchmark graph](../../_media/benchmark_net_p2p_azure.png) + +The results for "Pod-to-Pod" on GCP are as follows: + +![Network Pod2Pod GCP benchmark graph](../../_media/benchmark_net_p2p_gcp.png) + +#### Pod-to-Service + +In this scenario, the client Pod connects to the server Pod via a ClusterIP service. This is more relevant to real-world use cases. + +```mermaid +flowchart LR + subgraph Node A + Client[Client] ==>|traffic| Service[Service] + end + subgraph Node B + Server[Server] + end + Service ==>|traffic| Server +``` + +The results for "Pod-to-Pod" on Azure are as follows: + +![Network Pod2SVC Azure benchmark graph](../../_media/benchmark_net_p2svc_azure.png) + +The results for "Pod-to-Pod" on GCP are as follows: + +![Network Pod2SVC GCP benchmark graph](../../_media/benchmark_net_p2svc_gcp.png) + +In our recent comparison of Constellation on GCP with GKE, Constellation has 58% less TCP bandwidth. However, UDP bandwidth was slightly better with Constellation, thanks to its higher MTU. + +Similarly, when comparing Constellation on Azure with AKS using CVMs, Constellation achieved approximately 10% less TCP and 40% less UDP bandwidth. + +### Storage I/O + +Azure and GCP offer persistent storage for their Kubernetes services AKS and GKE via the Container Storage Interface (CSI). CSI storage in Kubernetes is available via `PersistentVolumes` (PV) and consumed via `PersistentVolumeClaims` (PVC). +Upon requesting persistent storage through a PVC, GKE and AKS will provision a PV as defined by a default [storage class](https://kubernetes.io/docs/concepts/storage/storage-classes/). +Constellation provides persistent storage on Azure and GCP [that's encrypted on the CSI layer](../../architecture/encrypted-storage.md). +Similarly, upon a PVC request, Constellation will provision a PV via a default storage class. + +For Constellation on Azure and AKS, the benchmark ran with Azure Disk storage [Standard SSD](https://learn.microsoft.com/en-us/azure/virtual-machines/disks-types#standard-ssds) of 400 GiB size. +The [DC4as machine type](https://learn.microsoft.com/en-us/azure/virtual-machines/dasv5-dadsv5-series#dasv5-series) with four cores provides the following maximum performance: + +- 6400 (20000 burst) IOPS +- 144 MB/s (600 MB/s burst) throughput + +However, the performance is bound by the capabilities of the [512 GiB Standard SSD size](https://learn.microsoft.com/en-us/azure/virtual-machines/disks-types#standard-ssds) (the size class of 400 GiB volumes): + +- 500 (600 burst) IOPS +- 60 MB/s (150 MB/s burst) throughput + +For Constellation on GCP and GKE, the benchmark ran with Compute Engine Persistent Disk Storage [pd-balanced](https://cloud.google.com/compute/docs/disks) of 400 GiB size. +The N2D machine type with four cores and pd-balanced provides the following [maximum performance](https://cloud.google.com/compute/docs/disks/performance#n2d_vms): + +- 3,000 read IOPS +- 15,000 write IOPS +- 240 MB/s read throughput +- 240 MB/s write throughput + +However, the performance is bound by the capabilities of a [`Zonal balanced PD`](https://cloud.google.com/compute/docs/disks/performance#zonal-persistent-disks) with 400 GiB size: + +- 2400 read IOPS +- 2400 write IOPS +- 112 MB/s read throughput +- 112 MB/s write throughput + +The [`fio`](https://fio.readthedocs.io/en/latest/fio_doc.html) benchmark consists of several tests. +The benchmark used [`Kubestr`](https://github.com/kastenhq/kubestr) to run `fio` in Kubernetes. +The default test performs randomized access patterns that accurately depict worst-case I/O scenarios for most applications. + +The following `fio` settings were used: + +- No Cloud caching +- No OS caching +- Single CPU +- 60 seconds runtime +- 10 seconds ramp-up time +- 10 GiB file +- IOPS: 4 KB blocks and 128 iodepth +- Bandwidth: 1024 KB blocks and 128 iodepth + +For more details, see the [`fio` test configuration](https://github.com/edgelesssys/constellation/blob/main/.github/actions/e2e_benchmark/fio.ini). + +The results for IOPS on Azure are as follows: + +![I/O IOPS Azure benchmark graph](../../_media/benchmark_fio_azure_iops.png) + +The results for IOPS on GCP are as follows: + +![I/O IOPS GCP benchmark graph](../../_media/benchmark_fio_gcp_iops.png) + +The results for bandwidth on Azure are as follows: + +![I/O bandwidth Azure benchmark graph](../../_media/benchmark_fio_azure_bw.png) + +The results for bandwidth on GCP are as follows: + +![I/O bandwidth GCP benchmark graph](../../_media/benchmark_fio_gcp_bw.png) + +On GCP, the results exceed the maximum performance guarantees of the chosen disk type. There are two possible explanations for this. The first is that there may be cloud caching in place that isn't configurable. Alternatively, the underlying provisioned disk size may be larger than what was requested, resulting in higher performance boundaries. + +When comparing Constellation on GCP with GKE, Constellation has similar bandwidth but about 10% less IOPS performance. On Azure, Constellation has similar IOPS performance compared to AKS, where both likely hit the maximum storage performance. However, Constellation has approximately 15% less read and write bandwidth. + +## Conclusion + +Despite the added [security benefits](../security-benefits.md) that Constellation provides, it only incurs a slight performance overhead when compared to managed Kubernetes offerings such as AKS and GKE. In most compute benchmarks, Constellation is on par with it's alternatives. +While it may be slightly slower in certain I/O scenarios due to network and storage encryption, there is ongoing work to reduce this overhead to single digits. + +For instance, storage encryption only adds between 10% to 15% overhead in terms of bandwidth and IOPS. +Meanwhile, the biggest performance impact that Constellation currently faces is network encryption, which can incur up to 58% overhead on a 10 Gbps network. +However, the Cilium team has conducted [benchmarks with Cilium using WireGuard encryption](https://docs.cilium.io/en/latest/operations/performance/benchmark/#encryption-wireguard-ipsec) on a 100 Gbps network that yielded over 15 Gbps. +We're confident that Constellation will provide a similar level of performance with an upcoming release. + +Overall, Constellation strikes a great balance between security and performance, and we're continuously working to improve its performance capabilities while maintaining its high level of security. diff --git a/docs/versioned_docs/version-2.21/overview/performance/performance.md b/docs/versioned_docs/version-2.21/overview/performance/performance.md new file mode 100644 index 000000000..59bf86602 --- /dev/null +++ b/docs/versioned_docs/version-2.21/overview/performance/performance.md @@ -0,0 +1,17 @@ +# Performance analysis of Constellation + +This section provides a comprehensive examination of the performance characteristics of Constellation. + +## Runtime encryption + +Runtime encryption affects compute performance. [Benchmarks by Azure and Google](compute.md) show that the performance degradation of Confidential VMs (CVMs) is small, ranging from 2% to 8% for compute-intensive workloads. + +## I/O performance benchmarks + +We evaluated the [I/O performance](io.md) of Constellation, utilizing a collection of synthetic benchmarks targeting networking and storage. +We further compared this performance to native managed Kubernetes offerings from various cloud providers, to better understand how Constellation stands in relation to standard practices. + +## Application benchmarking + +To gauge Constellation's applicability to well-known applications, we performed a [benchmark of HashiCorp Vault](application.md) running on Constellation. +The results were then compared to deployments on the managed Kubernetes offerings from different cloud providers, providing a tangible perspective on Constellation's performance in actual deployment scenarios. diff --git a/docs/versioned_docs/version-2.21/overview/product.md b/docs/versioned_docs/version-2.21/overview/product.md new file mode 100644 index 000000000..4b5d90706 --- /dev/null +++ b/docs/versioned_docs/version-2.21/overview/product.md @@ -0,0 +1,12 @@ +# Product features + +Constellation is a Kubernetes engine that aims to provide the best possible data security in combination with enterprise-grade scalability and reliability features---and a smooth user experience. + +From a security perspective, Constellation implements the [Confidential Kubernetes](confidential-kubernetes.md) concept and corresponding security features, which shield your entire cluster from the underlying infrastructure. + +From an operational perspective, Constellation provides the following key features: + +* **Native support for different clouds**: Constellation works on Amazon Web Services (AWS), Microsoft Azure, Google Cloud Platform (GCP), and STACKIT. Support for OpenStack-based environments is coming with a future release. Constellation securely interfaces with the cloud infrastructure to provide [cluster autoscaling](https://github.com/kubernetes/autoscaler/tree/master/cluster-autoscaler), [dynamic persistent volumes](https://kubernetes.io/docs/concepts/storage/dynamic-provisioning/), and [service load balancing](https://kubernetes.io/docs/concepts/services-networking/service/#loadbalancer). +* **High availability**: Constellation uses a [multi-master architecture](https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/high-availability/) with a [stacked etcd topology](https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/ha-topology/#stacked-etcd-topology) to ensure high availability. +* **Integrated Day-2 operations**: Constellation lets you securely [upgrade](../workflows/upgrade.md) your cluster to a new release. It also lets you securely [recover](../workflows/recovery.md) a failed cluster. Both with a single command. +* **Support for Terraform**: Constellation includes a [Terraform provider](../workflows/terraform-provider.md) that lets you manage the full lifecycle of your cluster via Terraform. diff --git a/docs/versioned_docs/version-2.21/overview/security-benefits.md b/docs/versioned_docs/version-2.21/overview/security-benefits.md new file mode 100644 index 000000000..51a8b64f5 --- /dev/null +++ b/docs/versioned_docs/version-2.21/overview/security-benefits.md @@ -0,0 +1,22 @@ +# Security benefits and threat model + +Constellation implements the [Confidential Kubernetes](confidential-kubernetes.md) concept and shields entire Kubernetes deployments from the infrastructure. More concretely, Constellation decreases the size of the trusted computing base (TCB) of a Kubernetes deployment. The TCB is the totality of elements in a computing environment that must be trusted not to be compromised. A smaller TCB results in a smaller attack surface. The following diagram shows how Constellation removes the *cloud & datacenter infrastructure* and the *physical hosts*, including the hypervisor, the host OS, and other components, from the TCB (red). Inside the confidential context (green), Kubernetes remains part of the TCB, but its integrity is attested and can be [verified](../workflows/verify-cluster.md). + +![TCB comparison](../_media/tcb.svg) + +Given this background, the following describes the concrete threat classes that Constellation addresses. + +## Insider access + +Employees and third-party contractors of cloud service providers (CSPs) have access to different layers of the cloud infrastructure. +This opens up a large attack surface where workloads and data can be read, copied, or manipulated. With Constellation, Kubernetes deployments are shielded from the infrastructure and thus such accesses are prevented. + +## Infrastructure-based attacks + +Malicious cloud users ("hackers") may break out of their tenancy and access other tenants' data. Advanced attackers may even be able to establish a permanent foothold within the infrastructure and access data over a longer period. Analogously to the *insider access* scenario, Constellation also prevents access to a deployment's data in this scenario. + +## Supply chain attacks + +Supply chain security is receiving lots of attention recently due to an [increasing number of recorded attacks](https://www.enisa.europa.eu/news/enisa-news/understanding-the-increase-in-supply-chain-security-attacks). For instance, a malicious actor could attempt to tamper Constellation node images (including Kubernetes and other software) before they're loaded in the confidential VMs of a cluster. Constellation uses [remote attestation](../architecture/attestation.md) in conjunction with public [transparency logs](../workflows/verify-cli.md) to prevent this. + +In the future, Constellation will extend this feature to customer workloads. This will enable cluster owners to create auditable policies that precisely define which containers can run in a given deployment. diff --git a/docs/versioned_docs/version-2.21/reference/cli.md b/docs/versioned_docs/version-2.21/reference/cli.md new file mode 100644 index 000000000..7bb4d5b40 --- /dev/null +++ b/docs/versioned_docs/version-2.21/reference/cli.md @@ -0,0 +1,873 @@ +# CLI reference + + + +Use the Constellation CLI to create and manage your clusters. + +Usage: + +``` +constellation [command] +``` +Commands: + +* [config](#constellation-config): Work with the Constellation configuration file + * [generate](#constellation-config-generate): Generate a default configuration and state file + * [fetch-measurements](#constellation-config-fetch-measurements): Fetch measurements for configured cloud provider and image + * [instance-types](#constellation-config-instance-types): Print the supported instance types for all cloud providers + * [kubernetes-versions](#constellation-config-kubernetes-versions): Print the Kubernetes versions supported by this CLI + * [migrate](#constellation-config-migrate): Migrate a configuration file to a new version +* [create](#constellation-create): Create instances on a cloud platform for your Constellation cluster +* [apply](#constellation-apply): Apply a configuration to a Constellation cluster +* [mini](#constellation-mini): Manage MiniConstellation clusters + * [up](#constellation-mini-up): Create and initialize a new MiniConstellation cluster + * [down](#constellation-mini-down): Destroy a MiniConstellation cluster +* [status](#constellation-status): Show status of a Constellation cluster +* [verify](#constellation-verify): Verify the confidential properties of a Constellation cluster +* [upgrade](#constellation-upgrade): Find and apply upgrades to your Constellation cluster + * [check](#constellation-upgrade-check): Check for possible upgrades + * [apply](#constellation-upgrade-apply): Apply an upgrade to a Constellation cluster +* [recover](#constellation-recover): Recover a completely stopped Constellation cluster +* [terminate](#constellation-terminate): Terminate a Constellation cluster +* [iam](#constellation-iam): Work with the IAM configuration on your cloud provider + * [create](#constellation-iam-create): Create IAM configuration on a cloud platform for your Constellation cluster + * [aws](#constellation-iam-create-aws): Create IAM configuration on AWS for your Constellation cluster + * [azure](#constellation-iam-create-azure): Create IAM configuration on Microsoft Azure for your Constellation cluster + * [gcp](#constellation-iam-create-gcp): Create IAM configuration on GCP for your Constellation cluster + * [destroy](#constellation-iam-destroy): Destroy an IAM configuration and delete local Terraform files + * [upgrade](#constellation-iam-upgrade): Find and apply upgrades to your IAM profile + * [apply](#constellation-iam-upgrade-apply): Apply an upgrade to an IAM profile +* [version](#constellation-version): Display version of this CLI +* [init](#constellation-init): Initialize the Constellation cluster +* [ssh](#constellation-ssh): Prepare your cluster for emergency ssh access + +## constellation config + +Work with the Constellation configuration file + +### Synopsis + +Work with the Constellation configuration file. + +### Options + +``` + -h, --help help for config +``` + +### Options inherited from parent commands + +``` + --debug enable debug logging + --force disable version compatibility checks - might result in corrupted clusters + --tf-log string Terraform log level (default "NONE") + -C, --workspace string path to the Constellation workspace +``` + +## constellation config generate + +Generate a default configuration and state file + +### Synopsis + +Generate a default configuration and state file for your selected cloud provider. + +``` +constellation config generate {aws|azure|gcp|openstack|qemu|stackit} [flags] +``` + +### Options + +``` + -a, --attestation string attestation variant to use {aws-sev-snp|aws-nitro-tpm|azure-sev-snp|azure-tdx|azure-trustedlaunch|gcp-sev-snp|gcp-sev-es|qemu-vtpm}. If not specified, the default for the cloud provider is used + -h, --help help for generate + -k, --kubernetes string Kubernetes version to use in format MAJOR.MINOR (default "v1.30") + -t, --tags strings additional tags for created resources given a list of key=value +``` + +### Options inherited from parent commands + +``` + --debug enable debug logging + --force disable version compatibility checks - might result in corrupted clusters + --tf-log string Terraform log level (default "NONE") + -C, --workspace string path to the Constellation workspace +``` + +## constellation config fetch-measurements + +Fetch measurements for configured cloud provider and image + +### Synopsis + +Fetch measurements for configured cloud provider and image. + +A config needs to be generated first. + +``` +constellation config fetch-measurements [flags] +``` + +### Options + +``` + -h, --help help for fetch-measurements + -s, --signature-url string alternative URL to fetch measurements' signature from + -u, --url string alternative URL to fetch measurements from +``` + +### Options inherited from parent commands + +``` + --debug enable debug logging + --force disable version compatibility checks - might result in corrupted clusters + --tf-log string Terraform log level (default "NONE") + -C, --workspace string path to the Constellation workspace +``` + +## constellation config instance-types + +Print the supported instance types for all cloud providers + +### Synopsis + +Print the supported instance types for all cloud providers. + +``` +constellation config instance-types [flags] +``` + +### Options + +``` + -h, --help help for instance-types +``` + +### Options inherited from parent commands + +``` + --debug enable debug logging + --force disable version compatibility checks - might result in corrupted clusters + --tf-log string Terraform log level (default "NONE") + -C, --workspace string path to the Constellation workspace +``` + +## constellation config kubernetes-versions + +Print the Kubernetes versions supported by this CLI + +### Synopsis + +Print the Kubernetes versions supported by this CLI. + +``` +constellation config kubernetes-versions [flags] +``` + +### Options + +``` + -h, --help help for kubernetes-versions +``` + +### Options inherited from parent commands + +``` + --debug enable debug logging + --force disable version compatibility checks - might result in corrupted clusters + --tf-log string Terraform log level (default "NONE") + -C, --workspace string path to the Constellation workspace +``` + +## constellation config migrate + +Migrate a configuration file to a new version + +### Synopsis + +Migrate a configuration file to a new version. + +``` +constellation config migrate [flags] +``` + +### Options + +``` + -h, --help help for migrate +``` + +### Options inherited from parent commands + +``` + --debug enable debug logging + --force disable version compatibility checks - might result in corrupted clusters + --tf-log string Terraform log level (default "NONE") + -C, --workspace string path to the Constellation workspace +``` + +## constellation create + +Create instances on a cloud platform for your Constellation cluster + +### Synopsis + +Create instances on a cloud platform for your Constellation cluster. + +``` +constellation create [flags] +``` + +### Options + +``` + -h, --help help for create + -y, --yes create the cluster without further confirmation +``` + +### Options inherited from parent commands + +``` + --debug enable debug logging + --force disable version compatibility checks - might result in corrupted clusters + --tf-log string Terraform log level (default "NONE") + -C, --workspace string path to the Constellation workspace +``` + +## constellation apply + +Apply a configuration to a Constellation cluster + +### Synopsis + +Apply a configuration to a Constellation cluster to initialize or upgrade the cluster. + +``` +constellation apply [flags] +``` + +### Options + +``` + --conformance enable conformance mode + -h, --help help for apply + --merge-kubeconfig merge Constellation kubeconfig file with default kubeconfig file in $HOME/.kube/config + --skip-helm-wait install helm charts without waiting for deployments to be ready + --skip-phases strings comma-separated list of upgrade phases to skip + one or multiple of { infrastructure | init | attestationconfig | certsans | helm | image | k8s } + -y, --yes run command without further confirmation + WARNING: the command might delete or update existing resources without additional checks. Please read the docs. + +``` + +### Options inherited from parent commands + +``` + --debug enable debug logging + --force disable version compatibility checks - might result in corrupted clusters + --tf-log string Terraform log level (default "NONE") + -C, --workspace string path to the Constellation workspace +``` + +## constellation mini + +Manage MiniConstellation clusters + +### Synopsis + +Manage MiniConstellation clusters. + +### Options + +``` + -h, --help help for mini +``` + +### Options inherited from parent commands + +``` + --debug enable debug logging + --force disable version compatibility checks - might result in corrupted clusters + --tf-log string Terraform log level (default "NONE") + -C, --workspace string path to the Constellation workspace +``` + +## constellation mini up + +Create and initialize a new MiniConstellation cluster + +### Synopsis + +Create and initialize a new MiniConstellation cluster. + +A mini cluster consists of a single control-plane and worker node, hosted using QEMU/KVM. + +``` +constellation mini up [flags] +``` + +### Options + +``` + -h, --help help for up + --merge-kubeconfig merge Constellation kubeconfig file with default kubeconfig file in $HOME/.kube/config (default true) +``` + +### Options inherited from parent commands + +``` + --debug enable debug logging + --force disable version compatibility checks - might result in corrupted clusters + --tf-log string Terraform log level (default "NONE") + -C, --workspace string path to the Constellation workspace +``` + +## constellation mini down + +Destroy a MiniConstellation cluster + +### Synopsis + +Destroy a MiniConstellation cluster. + +``` +constellation mini down [flags] +``` + +### Options + +``` + -h, --help help for down + -y, --yes terminate the cluster without further confirmation +``` + +### Options inherited from parent commands + +``` + --debug enable debug logging + --force disable version compatibility checks - might result in corrupted clusters + --tf-log string Terraform log level (default "NONE") + -C, --workspace string path to the Constellation workspace +``` + +## constellation status + +Show status of a Constellation cluster + +### Synopsis + +Show the status of a constellation cluster. + +Shows microservice, image, and Kubernetes versions installed in the cluster. Also shows status of current version upgrades. + +``` +constellation status [flags] +``` + +### Options + +``` + -h, --help help for status +``` + +### Options inherited from parent commands + +``` + --debug enable debug logging + --force disable version compatibility checks - might result in corrupted clusters + --tf-log string Terraform log level (default "NONE") + -C, --workspace string path to the Constellation workspace +``` + +## constellation verify + +Verify the confidential properties of a Constellation cluster + +### Synopsis + +Verify the confidential properties of a Constellation cluster. +If arguments aren't specified, values are read from `constellation-state.yaml`. + +``` +constellation verify [flags] +``` + +### Options + +``` + --cluster-id string expected cluster identifier + -h, --help help for verify + -e, --node-endpoint string endpoint of the node to verify, passed as HOST[:PORT] + -o, --output string print the attestation document in the output format {json|raw} +``` + +### Options inherited from parent commands + +``` + --debug enable debug logging + --force disable version compatibility checks - might result in corrupted clusters + --tf-log string Terraform log level (default "NONE") + -C, --workspace string path to the Constellation workspace +``` + +## constellation upgrade + +Find and apply upgrades to your Constellation cluster + +### Synopsis + +Find and apply upgrades to your Constellation cluster. + +### Options + +``` + -h, --help help for upgrade +``` + +### Options inherited from parent commands + +``` + --debug enable debug logging + --force disable version compatibility checks - might result in corrupted clusters + --tf-log string Terraform log level (default "NONE") + -C, --workspace string path to the Constellation workspace +``` + +## constellation upgrade check + +Check for possible upgrades + +### Synopsis + +Check which upgrades can be applied to your Constellation Cluster. + +``` +constellation upgrade check [flags] +``` + +### Options + +``` + -h, --help help for check + --ref string the reference to use for querying new versions (default "-") + --stream string the stream to use for querying new versions (default "stable") + -u, --update-config update the specified config file with the suggested versions +``` + +### Options inherited from parent commands + +``` + --debug enable debug logging + --force disable version compatibility checks - might result in corrupted clusters + --tf-log string Terraform log level (default "NONE") + -C, --workspace string path to the Constellation workspace +``` + +## constellation upgrade apply + +Apply an upgrade to a Constellation cluster + +### Synopsis + +Apply an upgrade to a Constellation cluster by applying the chosen configuration. + +``` +constellation upgrade apply [flags] +``` + +### Options + +``` + --conformance enable conformance mode + -h, --help help for apply + --skip-helm-wait install helm charts without waiting for deployments to be ready + --skip-phases strings comma-separated list of upgrade phases to skip + one or multiple of { infrastructure | helm | image | k8s } + -y, --yes run upgrades without further confirmation + WARNING: might delete your resources in case you are using cert-manager in your cluster. Please read the docs. + WARNING: might unintentionally overwrite measurements in the running cluster. +``` + +### Options inherited from parent commands + +``` + --debug enable debug logging + --force disable version compatibility checks - might result in corrupted clusters + --tf-log string Terraform log level (default "NONE") + -C, --workspace string path to the Constellation workspace +``` + +## constellation recover + +Recover a completely stopped Constellation cluster + +### Synopsis + +Recover a Constellation cluster by sending a recovery key to an instance in the boot stage. + +This is only required if instances restart without other instances available for bootstrapping. + +``` +constellation recover [flags] +``` + +### Options + +``` + -e, --endpoint string endpoint of the instance, passed as HOST[:PORT] + -h, --help help for recover +``` + +### Options inherited from parent commands + +``` + --debug enable debug logging + --force disable version compatibility checks - might result in corrupted clusters + --tf-log string Terraform log level (default "NONE") + -C, --workspace string path to the Constellation workspace +``` + +## constellation terminate + +Terminate a Constellation cluster + +### Synopsis + +Terminate a Constellation cluster. + +The cluster can't be started again, and all persistent storage will be lost. + +``` +constellation terminate [flags] +``` + +### Options + +``` + -h, --help help for terminate + -y, --yes terminate the cluster without further confirmation +``` + +### Options inherited from parent commands + +``` + --debug enable debug logging + --force disable version compatibility checks - might result in corrupted clusters + --tf-log string Terraform log level (default "NONE") + -C, --workspace string path to the Constellation workspace +``` + +## constellation iam + +Work with the IAM configuration on your cloud provider + +### Synopsis + +Work with the IAM configuration on your cloud provider. + +### Options + +``` + -h, --help help for iam +``` + +### Options inherited from parent commands + +``` + --debug enable debug logging + --force disable version compatibility checks - might result in corrupted clusters + --tf-log string Terraform log level (default "NONE") + -C, --workspace string path to the Constellation workspace +``` + +## constellation iam create + +Create IAM configuration on a cloud platform for your Constellation cluster + +### Synopsis + +Create IAM configuration on a cloud platform for your Constellation cluster. + +### Options + +``` + -h, --help help for create + --update-config update the config file with the specific IAM information + -y, --yes create the IAM configuration without further confirmation +``` + +### Options inherited from parent commands + +``` + --debug enable debug logging + --force disable version compatibility checks - might result in corrupted clusters + --tf-log string Terraform log level (default "NONE") + -C, --workspace string path to the Constellation workspace +``` + +## constellation iam create aws + +Create IAM configuration on AWS for your Constellation cluster + +### Synopsis + +Create IAM configuration on AWS for your Constellation cluster. + +``` +constellation iam create aws [flags] +``` + +### Options + +``` + -h, --help help for aws + --prefix string name prefix for all resources (required) + --zone string AWS availability zone the resources will be created in, e.g., us-east-2a (required) + See the Constellation docs for a list of currently supported regions. +``` + +### Options inherited from parent commands + +``` + --debug enable debug logging + --force disable version compatibility checks - might result in corrupted clusters + --tf-log string Terraform log level (default "NONE") + --update-config update the config file with the specific IAM information + -C, --workspace string path to the Constellation workspace + -y, --yes create the IAM configuration without further confirmation +``` + +## constellation iam create azure + +Create IAM configuration on Microsoft Azure for your Constellation cluster + +### Synopsis + +Create IAM configuration on Microsoft Azure for your Constellation cluster. + +``` +constellation iam create azure [flags] +``` + +### Options + +``` + -h, --help help for azure + --region string region the resources will be created in, e.g., westus (required) + --resourceGroup string name prefix of the two resource groups your cluster / IAM resources will be created in (required) + --servicePrincipal string name of the service principal that will be created (required) + --subscriptionID string subscription ID of the Azure account. Required if the 'ARM_SUBSCRIPTION_ID' environment variable is not set +``` + +### Options inherited from parent commands + +``` + --debug enable debug logging + --force disable version compatibility checks - might result in corrupted clusters + --tf-log string Terraform log level (default "NONE") + --update-config update the config file with the specific IAM information + -C, --workspace string path to the Constellation workspace + -y, --yes create the IAM configuration without further confirmation +``` + +## constellation iam create gcp + +Create IAM configuration on GCP for your Constellation cluster + +### Synopsis + +Create IAM configuration on GCP for your Constellation cluster. + +``` +constellation iam create gcp [flags] +``` + +### Options + +``` + -h, --help help for gcp + --projectID string ID of the GCP project the configuration will be created in (required) + Find it on the welcome screen of your project: https://console.cloud.google.com/welcome + --serviceAccountID string ID for the service account that will be created (required) + Must be 6 to 30 lowercase letters, digits, or hyphens. + --zone string GCP zone the cluster will be deployed in (required) + Find a list of available zones here: https://cloud.google.com/compute/docs/regions-zones#available +``` + +### Options inherited from parent commands + +``` + --debug enable debug logging + --force disable version compatibility checks - might result in corrupted clusters + --tf-log string Terraform log level (default "NONE") + --update-config update the config file with the specific IAM information + -C, --workspace string path to the Constellation workspace + -y, --yes create the IAM configuration without further confirmation +``` + +## constellation iam destroy + +Destroy an IAM configuration and delete local Terraform files + +### Synopsis + +Destroy an IAM configuration and delete local Terraform files. + +``` +constellation iam destroy [flags] +``` + +### Options + +``` + -h, --help help for destroy + -y, --yes destroy the IAM configuration without asking for confirmation +``` + +### Options inherited from parent commands + +``` + --debug enable debug logging + --force disable version compatibility checks - might result in corrupted clusters + --tf-log string Terraform log level (default "NONE") + -C, --workspace string path to the Constellation workspace +``` + +## constellation iam upgrade + +Find and apply upgrades to your IAM profile + +### Synopsis + +Find and apply upgrades to your IAM profile. + +### Options + +``` + -h, --help help for upgrade +``` + +### Options inherited from parent commands + +``` + --debug enable debug logging + --force disable version compatibility checks - might result in corrupted clusters + --tf-log string Terraform log level (default "NONE") + -C, --workspace string path to the Constellation workspace +``` + +## constellation iam upgrade apply + +Apply an upgrade to an IAM profile + +### Synopsis + +Apply an upgrade to an IAM profile. + +``` +constellation iam upgrade apply [flags] +``` + +### Options + +``` + -h, --help help for apply + -y, --yes run upgrades without further confirmation +``` + +### Options inherited from parent commands + +``` + --debug enable debug logging + --force disable version compatibility checks - might result in corrupted clusters + --tf-log string Terraform log level (default "NONE") + -C, --workspace string path to the Constellation workspace +``` + +## constellation version + +Display version of this CLI + +### Synopsis + +Display version of this CLI. + +``` +constellation version [flags] +``` + +### Options + +``` + -h, --help help for version +``` + +### Options inherited from parent commands + +``` + --debug enable debug logging + --force disable version compatibility checks - might result in corrupted clusters + --tf-log string Terraform log level (default "NONE") + -C, --workspace string path to the Constellation workspace +``` + +## constellation init + +Initialize the Constellation cluster + +### Synopsis + +Initialize the Constellation cluster. + +Start your confidential Kubernetes. + +``` +constellation init [flags] +``` + +### Options + +``` + --conformance enable conformance mode + -h, --help help for init + --merge-kubeconfig merge Constellation kubeconfig file with default kubeconfig file in $HOME/.kube/config + --skip-helm-wait install helm charts without waiting for deployments to be ready +``` + +### Options inherited from parent commands + +``` + --debug enable debug logging + --force disable version compatibility checks - might result in corrupted clusters + --tf-log string Terraform log level (default "NONE") + -C, --workspace string path to the Constellation workspace +``` + +## constellation ssh + +Prepare your cluster for emergency ssh access + +### Synopsis + +Prepare your cluster for emergency ssh access and sign a given key pair for authorization. + +``` +constellation ssh [flags] +``` + +### Options + +``` + -h, --help help for ssh + --key string the path to an existing ssh public key +``` + +### Options inherited from parent commands + +``` + --debug enable debug logging + --force disable version compatibility checks - might result in corrupted clusters + --tf-log string Terraform log level (default "NONE") + -C, --workspace string path to the Constellation workspace +``` + diff --git a/docs/versioned_docs/version-2.21/reference/migration.md b/docs/versioned_docs/version-2.21/reference/migration.md new file mode 100644 index 000000000..0252c409f --- /dev/null +++ b/docs/versioned_docs/version-2.21/reference/migration.md @@ -0,0 +1,128 @@ +# Migrations + +This document describes breaking changes and migrations between Constellation releases. +Use [`constellation config migrate`](./cli.md#constellation-config-migrate) to automatically update an old config file to a new format. + +## Migrations to v2.19.1 + +### Azure + +* During the upgrade, security rules are migrated and the old ones need to be cleaned up manually by the user. The below script shows how to delete them through the Azure CLI: + +```bash +#!/usr/bin/env bash +name="" # the name provided in the config +uid="" # the cluster id can be retrieved via `yq '.infrastructure.uid' constellation-state.yaml` +resource_group="" # the RG can be retrieved via `yq '.provider.azure.resourceGroup' constellation-conf.yaml` + +rules=( + "kubernetes" + "bootstrapper" + "verify" + "recovery" + "join" + "debugd" + "konnectivity" +) + +for rule in "${rules[@]}"; do + echo "Deleting rule: ${rule}" + az network nsg rule delete \ + --resource-group "${resource_group}" \ + --nsg-name "${name}-${uid}" \ + --name "${rule}" +done + +echo "All specified rules have been deleted." +``` + +## Migrations to v2.19.0 + +### Azure + +* To allow seamless upgrades on Azure when Kubernetes services of type `LoadBalancer` are deployed, the target + load balancer in which the `cloud-controller-manager` creates load balancing rules was changed. Instead of using the load balancer + created and maintained by the CLI's Terraform code, the `cloud-controller-manager` now creates its own load balancer in Azure. + If your Constellation has services of type `LoadBalancer`, please remove them before the upgrade and re-apply them + afterward. + +## Migrating from Azure's service principal authentication to managed identity authentication (during the upgrade to Constellation v2.8.0) + +* The `provider.azure.appClientID` and `provider.azure.appClientSecret` fields are no longer supported and should be removed. +* To keep using an existing UAMI, add the `Owner` permission with the scope of your `resourceGroup`. +* Otherwise, simply [create new Constellation IAM credentials](../workflows/config.md#creating-an-iam-configuration) and use the created UAMI. +* To migrate the authentication for an existing cluster on Azure to an UAMI with the necessary permissions: + 1. Remove the `aadClientId` and `aadClientSecret` from the azureconfig secret. + 2. Set `useManagedIdentityExtension` to `true` and use the `userAssignedIdentity` from the Constellation config for the value of `userAssignedIdentityID`. + 3. Restart the CSI driver, cloud controller manager, cluster autoscaler, and Constellation operator pods. + +## Migrating from CLI versions before 2.10 + +* AWS cluster upgrades require additional IAM permissions for the newly introduced `aws-load-balancer-controller`. Please upgrade your IAM roles using `iam upgrade apply`. This will show necessary changes and apply them, if desired. +* The global `nodeGroups` field was added. +* The fields `instanceType`, `stateDiskSizeGB`, and `stateDiskType` for each cloud provider are now part of the configuration of individual node groups. +* The `constellation create` command no longer uses the flags `--control-plane-count` and `--worker-count`. Instead, the initial node count is configured per node group in the `nodeGroups` field. + +## Migrating from CLI versions before 2.9 + +* The `provider.azure.appClientID` and `provider.azure.clientSecretValue` fields were removed to enforce migration to managed identity authentication + +## Migrating from CLI versions before 2.8 + +* The `measurements` field for each cloud service provider was replaced with a global `attestation` field. +* The `confidentialVM`, `idKeyDigest`, and `enforceIdKeyDigest` fields for the Azure cloud service provider were removed in favor of using the global `attestation` field. +* The optional global field `attestationVariant` was replaced by the now required `attestation` field. + +## Migrating from CLI versions before 2.3 + +* The `sshUsers` field was deprecated in v2.2 and has been removed from the configuration in v2.3. + As an alternative for SSH, check the workflow section [Connect to nodes](../workflows/troubleshooting.md#node-shell-access). +* The `image` field for each cloud service provider has been replaced with a global `image` field. Use the following mapping to migrate your configuration: +
      + Show all + + | CSP | old image | new image | + | ----- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------- | + | AWS | `ami-06b8cbf4837a0a57c` | `v2.2.2` | + | AWS | `ami-02e96dc04a9e438cd` | `v2.2.2` | + | AWS | `ami-028ead928a9034b2f` | `v2.2.2` | + | AWS | `ami-032ac10dd8d8266e3` | `v2.2.1` | + | AWS | `ami-032e0d57cc4395088` | `v2.2.1` | + | AWS | `ami-053c3e49e19b96bdd` | `v2.2.1` | + | AWS | `ami-0e27ebcefc38f648b` | `v2.2.0` | + | AWS | `ami-098cd37f66523b7c3` | `v2.2.0` | + | AWS | `ami-04a87d302e2509aad` | `v2.2.0` | + | Azure | `/subscriptions/0d202bbb-4fa7-4af8-8125-58c269a05435/resourceGroups/constellation-images/providers/Microsoft.Compute/galleries/Constellation/images/constellation/versions/2.2.2` | `v2.2.2` | + | Azure | `/subscriptions/0d202bbb-4fa7-4af8-8125-58c269a05435/resourceGroups/constellation-images/providers/Microsoft.Compute/galleries/Constellation_CVM/images/constellation/versions/2.2.2` | `v2.2.2` | + | Azure | `/subscriptions/0d202bbb-4fa7-4af8-8125-58c269a05435/resourceGroups/constellation-images/providers/Microsoft.Compute/galleries/Constellation/images/constellation/versions/2.2.1` | `v2.2.1` | + | Azure | `/subscriptions/0d202bbb-4fa7-4af8-8125-58c269a05435/resourceGroups/constellation-images/providers/Microsoft.Compute/galleries/Constellation_CVM/images/constellation/versions/2.2.1` | `v2.2.1` | + | Azure | `/subscriptions/0d202bbb-4fa7-4af8-8125-58c269a05435/resourceGroups/constellation-images/providers/Microsoft.Compute/galleries/Constellation/images/constellation/versions/2.2.0` | `v2.2.0` | + | Azure | `/subscriptions/0d202bbb-4fa7-4af8-8125-58c269a05435/resourceGroups/constellation-images/providers/Microsoft.Compute/galleries/Constellation_CVM/images/constellation/versions/2.2.0` | `v2.2.0` | + | Azure | `/subscriptions/0d202bbb-4fa7-4af8-8125-58c269a05435/resourceGroups/constellation-images/providers/Microsoft.Compute/galleries/Constellation/images/constellation/versions/2.1.0` | `v2.1.0` | + | Azure | `/subscriptions/0d202bbb-4fa7-4af8-8125-58c269a05435/resourceGroups/constellation-images/providers/Microsoft.Compute/galleries/Constellation_CVM/images/constellation/versions/2.1.0` | `v2.1.0` | + | Azure | `/subscriptions/0d202bbb-4fa7-4af8-8125-58c269a05435/resourceGroups/constellation-images/providers/Microsoft.Compute/galleries/Constellation/images/constellation/versions/2.0.0` | `v2.0.0` | + | Azure | `/subscriptions/0d202bbb-4fa7-4af8-8125-58c269a05435/resourceGroups/constellation-images/providers/Microsoft.Compute/galleries/Constellation_CVM/images/constellation/versions/2.0.0` | `v2.0.0` | + | GCP | `projects/constellation-images/global/images/constellation-v2-2-2` | `v2.2.2` | + | GCP | `projects/constellation-images/global/images/constellation-v2-2-1` | `v2.2.1` | + | GCP | `projects/constellation-images/global/images/constellation-v2-2-0` | `v2.2.0` | + | GCP | `projects/constellation-images/global/images/constellation-v2-1-0` | `v2.1.0` | + | GCP | `projects/constellation-images/global/images/constellation-v2-0-0` | `v2.0.0` | + +
      +* The `enforcedMeasurements` field has been removed and merged with the `measurements` field. + * To migrate your config containing a new image (`v2.3` or greater), remove the old `measurements` and `enforcedMeasurements` entries from your config and run `constellation fetch-measurements` + * To migrate your config containing an image older than `v2.3`, remove the `enforcedMeasurements` entry and replace the entries in `measurements` as shown in the example below: + + ```diff + measurements: + - 0: DzXCFGCNk8em5ornNZtKi+Wg6Z7qkQfs5CfE3qTkOc8= + + 0: + + expected: DzXCFGCNk8em5ornNZtKi+Wg6Z7qkQfs5CfE3qTkOc8= + + warnOnly: true + - 8: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= + + 8: + + expected: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= + + warnOnly: false + -enforcedMeasurements: + - - 8 + ``` diff --git a/docs/versioned_docs/version-2.21/reference/slsa.md b/docs/versioned_docs/version-2.21/reference/slsa.md new file mode 100644 index 000000000..21f4e713c --- /dev/null +++ b/docs/versioned_docs/version-2.21/reference/slsa.md @@ -0,0 +1,73 @@ +# Supply chain levels for software artifacts (SLSA) adoption + +[Supply chain Levels for Software Artifacts, or SLSA (salsa)](https://slsa.dev/) is a framework for improving and grading a project's build system and engineering processes. SLSA focuses on security improvements for source code storage as well as build system definition, execution, and observation. SLSA is structured in [four levels](https://slsa.dev/spec/v0.1/levels). This page describes the adoption of SLSA for Constellation. + +:::info +SLSA is still in alpha status. The presented levels and their requirements might change in the future. We will adopt any changes into our engineering processes, as they get defined. +::: + +## Level 1 - Adopted + +**[Build - Scripted](https://slsa.dev/spec/v0.1/requirements#scripted-build)** + +All build steps are automated via [Bazel](https://github.com/edgelesssys/constellation/tree/main/bazel/ci) and [GitHub Actions](https://github.com/edgelesssys/constellation/tree/main/.github). + +**[Provenance - Available](https://slsa.dev/spec/v0.1/requirements#available)** + +Provenance for the CLI is generated using the [slsa-github-generator](https://github.com/slsa-framework/slsa-github-generator). + +## Level 2 - Adopted + +**[Source - Version Controlled](https://slsa.dev/spec/v0.1/requirements#version-controlled)** + +Constellation is hosted on GitHub using git. + +**[Build - Build Service](https://slsa.dev/spec/v0.1/requirements#build-service)** + +All builds are carried out by [GitHub Actions](https://github.com/edgelesssys/constellation/tree/main/.github). + +**[Provenance - Authenticated](https://slsa.dev/spec/v0.1/requirements#authenticated)** + +Provenance for the CLI is signed using the [slsa-github-generator](https://github.com/slsa-framework/slsa-github-generator). Learn [how to verify the CLI](../workflows/verify-cli.md) using the signed provenance, before using it for the first time. + +**[Provenance - Service Generated](https://slsa.dev/spec/v0.1/requirements#service-generated)** + +Provenance for the CLI is generated using the [slsa-github-generator](https://github.com/slsa-framework/slsa-github-generator) in GitHub Actions. + +## Level 3 - Adopted + +**[Source - Verified History](https://slsa.dev/spec/v0.1/requirements#verified-history)** + +The [Edgeless Systems](https://github.com/edgelesssys) GitHub organization [requires two-factor authentication](https://docs.github.com/en/organizations/keeping-your-organization-secure/managing-two-factor-authentication-for-your-organization/requiring-two-factor-authentication-in-your-organization) for all members. + +**[Source - Retained Indefinitely](https://slsa.dev/spec/v0.1/requirements#retained-indefinitely)** + +Since we use GitHub to host the repository, an external person can't modify or delete the history. Before a pull request can be merged, an explicit approval from an [Edgeless Systems](https://github.com/edgelesssys) team member is required. + +The same holds true for changes proposed by team members. Each change to `main` needs to be proposed via a pull request and requires at least one approval. + +The [Edgeless Systems](https://github.com/edgelesssys) GitHub organization admins control these settings and are able to make changes to the repository's history should legal requirements necessitate it. These changes require two-party approval following the obliterate policy. + +**[Build - Build as Code](https://slsa.dev/spec/v0.1/requirements#build-as-code)** + +All build files for Constellation are stored in [the same repository](https://github.com/edgelesssys/constellation/tree/main/.github). + +**[Build - Ephemeral Environment](https://slsa.dev/spec/v0.1/requirements#ephemeral-environment)** + +All GitHub Action workflows are executed on [GitHub-hosted runners](https://docs.github.com/en/actions/using-github-hosted-runners/about-github-hosted-runners). These runners are only available during workflow. + +We currently don't use [self-hosted runners](https://docs.github.com/en/actions/hosting-your-own-runners/about-self-hosted-runners). + +**[Build - Isolated](https://slsa.dev/spec/v0.1/requirements#isolated)** + +As outlined in the previous section, we use GitHub-hosted runners, which provide a new, isolated and ephemeral environment for each build. + +Additionally, the [SLSA GitHub generator](https://github.com/slsa-framework/slsa-github-generator#generation-of-provenance) itself is run in an isolated workflow with the artifact hash as defined inputs. + +**[Provenance - Non-falsifiable](https://slsa.dev/spec/v0.1/requirements#non-falsifiable)** + +As outlined by [SLSA GitHub generator](https://github.com/slsa-framework/slsa-github-generator) it already fulfills the non-falsifiable requirements for SLSA Level 3. The generated provenance is signed using [sigstore](https://sigstore.dev/) with an OIDC based proof of identity. + +## Level 4 - In Progress + +We strive to adopt certain aspect of SLSA Level 4 that support our engineering process. At the same time, SLSA is still in alpha status and the biggest changes to SLSA are expected to be around Level 4. diff --git a/docs/versioned_docs/version-2.21/reference/terraform.md b/docs/versioned_docs/version-2.21/reference/terraform.md new file mode 100644 index 000000000..9825a8bb8 --- /dev/null +++ b/docs/versioned_docs/version-2.21/reference/terraform.md @@ -0,0 +1,37 @@ +# Terraform usage + +[Terraform](https://www.terraform.io/) is an Infrastructure as Code (IaC) framework to manage cloud resources. This page explains how Constellation uses it internally and how advanced users may manually use it to have more control over the resource creation. + +:::info +Information on this page is intended for users who are familiar with Terraform. +It's not required for common usage of Constellation. +See the [Terraform documentation](https://developer.hashicorp.com/terraform/docs) if you want to learn more about it. +::: + +## Terraform state files + +Constellation keeps Terraform state files in subdirectories of the workspace together with the corresponding Terraform configuration files and metadata. +The subdirectories are created on the first Constellation CLI action that uses Terraform internally. + +Currently, these subdirectories are: + +* `constellation-terraform` - Terraform state files for the resources of the Constellation cluster +* `constellation-iam-terraform` - Terraform state files for IAM configuration + +As with all commands, commands that work with these files (e.g., `apply`, `terminate`, `iam`) have to be executed from the root of the cluster's [workspace directory](../architecture/orchestration.md#workspaces). You usually don't need and shouldn't manipulate or delete the subdirectories manually. + +## Interacting with Terraform manually + +Manual interaction with Terraform state created by Constellation (i.e., via the Terraform CLI) should only be performed by experienced users. It may lead to unrecoverable loss of cloud resources. For the majority of users and use cases, the interaction done by the [Constellation CLI](cli.md) is sufficient. + +## Terraform debugging + +To debug Terraform issues, the Constellation CLI offers the `tf-log` flag. You can set it to any of [Terraform's log levels](https://developer.hashicorp.com/terraform/internals/debugging): +* `JSON` (JSON-formatted logs at `TRACE` level) +* `TRACE` +* `DEBUG` +* `INFO` +* `WARN` +* `ERROR` + +The log output is written to the `terraform.log` file in the workspace directory. The output is appended to the file on each run. diff --git a/docs/versioned_docs/version-2.21/workflows/cert-manager.md b/docs/versioned_docs/version-2.21/workflows/cert-manager.md new file mode 100644 index 000000000..1d847e8bf --- /dev/null +++ b/docs/versioned_docs/version-2.21/workflows/cert-manager.md @@ -0,0 +1,13 @@ +# Install cert-manager + +:::caution +If you want to use cert-manager with Constellation, pay attention to the following to avoid potential pitfalls. +::: + +Constellation ships with cert-manager preinstalled. +The default installation is part of the `kube-system` namespace, as all other Constellation-managed microservices. +You are free to install more instances of cert-manager into other namespaces. +However, be aware that any new installation needs to use the same version as the one installed with Constellation or rely on the same CRD versions. +Also remember to set the `installCRDs` value to `false` when installing new cert-manager instances. +It will create problems if you have two installations of cert-manager depending on different versions of the installed CRDs. +CRDs are cluster-wide resources and cert-manager depends on specific versions of those CRDs for each release. diff --git a/docs/versioned_docs/version-2.21/workflows/config.md b/docs/versioned_docs/version-2.21/workflows/config.md new file mode 100644 index 000000000..95f791acd --- /dev/null +++ b/docs/versioned_docs/version-2.21/workflows/config.md @@ -0,0 +1,353 @@ +# Configure your cluster + +:::info +This recording presents the essence of this page. It's recommended to read it in full for the motivation and all details. +::: + + + +--- + +Before you can create your cluster, you need to configure the identity and access management (IAM) for your cloud service provider (CSP) and choose machine types for the nodes. + +## Creating the configuration file + +You can generate a configuration file for your CSP by using the following CLI command: + + + + +```bash +constellation config generate aws +``` + + + + +```bash +constellation config generate azure +``` + + + + +```bash +constellation config generate gcp +``` + + + + +```bash +constellation config generate stackit +``` + + + + +This creates the file `constellation-conf.yaml` in the current directory. + +## Choosing a VM type + +Constellation supports the following VM types: + + + +By default, Constellation uses `m6a.xlarge` VMs (4 vCPUs, 16 GB RAM) to create your cluster. +Optionally, you can switch to a different VM type by modifying `instanceType` in the configuration file. +If you are using the default attestation variant `awsSEVSNP`, you can use the instance types described in [AWS's AMD SEV-SNP docs](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/snp-requirements.html). +Please mind the region restrictions mentioned in the [Getting started](../getting-started/first-steps.md#create-a-cluster) section. + +If you are using the attestation variant `awsNitroTPM`, you can choose any of the [nitroTPM-enabled instance types](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/enable-nitrotpm-prerequisites.html). + +The Constellation CLI can also print the supported instance types with: `constellation config instance-types`. + + + + +By default, Constellation uses `Standard_DC4as_v5` CVMs (4 vCPUs, 16 GB RAM) to create your cluster. Optionally, you can switch to a different VM type by modifying `instanceType` in the configuration file. For CVMs, any VM type with a minimum of 4 vCPUs from the [DCasv5 & DCadsv5](https://docs.microsoft.com/en-us/azure/virtual-machines/dcasv5-dcadsv5-series) or [ECasv5 & ECadsv5](https://docs.microsoft.com/en-us/azure/virtual-machines/ecasv5-ecadsv5-series) families is supported. + +You can also run `constellation config instance-types` to get the list of all supported options. + + + + +By default, Constellation uses `n2d-standard-4` VMs (4 vCPUs, 16 GB RAM) to create your cluster. Optionally, you can switch to a different VM type by modifying `instanceType` in the configuration file. Supported are all machines with a minimum of 4 vCPUs from the [C2D](https://cloud.google.com/compute/docs/compute-optimized-machines#c2d_machine_types) or [N2D](https://cloud.google.com/compute/docs/general-purpose-machines#n2d_machines) family. You can run `constellation config instance-types` to get the list of all supported options. + + + + +By default, Constellation uses `m1a.4cd` VMs (4 vCPUs, 30 GB RAM) to create your cluster. +Optionally, you can switch to a different VM type by modifying `instanceType` in the configuration file. + +The following instance types are known to be supported: + +| name | vCPUs | GB RAM | +|----------|-------|--------| +| m1a.4cd | 4 | 30 | +| m1a.8cd | 8 | 60 | +| m1a.16cd | 16 | 120 | +| m1a.30cd | 30 | 230 | + +You can choose any of the SEV-enabled instance types. You can find a list of all supported instance types in the [STACKIT documentation](https://docs.stackit.cloud/stackit/en/virtual-machine-flavors-75137231.html). + +The Constellation CLI can also print the supported instance types with: `constellation config instance-types`. + + + + +Fill the desired VM type into the `instanceType` fields in the `constellation-conf.yml` file. + +## Creating additional node groups + +By default, Constellation creates the node groups `control_plane_default` and `worker_default` for control-plane nodes and workers, respectively. +If you require additional control-plane or worker groups with different instance types, zone placements, or disk sizes, you can add additional node groups to the `constellation-conf.yml` file. +Each node group can be scaled individually. + +Consider the following example for AWS: + +```yaml +nodeGroups: + control_plane_default: + role: control-plane + instanceType: c6a.xlarge + stateDiskSizeGB: 30 + stateDiskType: gp3 + zone: eu-west-1c + initialCount: 3 + worker_default: + role: worker + instanceType: c6a.xlarge + stateDiskSizeGB: 30 + stateDiskType: gp3 + zone: eu-west-1c + initialCount: 2 + high_cpu: + role: worker + instanceType: c6a.24xlarge + stateDiskSizeGB: 128 + stateDiskType: gp3 + zone: eu-west-1c + initialCount: 1 +``` + +This configuration creates an additional node group `high_cpu` with a larger instance type and disk. + +You can use the field `zone` to specify what availability zone nodes of the group are placed in. +On Azure, this field is empty by default and nodes are automatically spread across availability zones. +STACKIT currently offers SEV-enabled CPUs in the `eu01-1`, `eu01-2`, and `eu01-3` zones. +Consult the documentation of your cloud provider for more information: + +* [AWS](https://aws.amazon.com/about-aws/global-infrastructure/regions_az/) +* [Azure](https://azure.microsoft.com/en-us/explore/global-infrastructure/availability-zones) +* [GCP](https://cloud.google.com/compute/docs/regions-zones) +* [STACKIT](https://docs.stackit.cloud/stackit/en/regions-and-availability-zones-75137212.html) + +## Choosing a Kubernetes version + +To learn which Kubernetes versions can be installed with your current CLI, you can run `constellation config kubernetes-versions`. +See also Constellation's [Kubernetes support policy](../architecture/versions.md#kubernetes-support-policy). + +## Creating an IAM configuration + +You can create an IAM configuration for your cluster automatically using the `constellation iam create` command. +If you already have a Constellation configuration file, you can add the `--update-config` flag to the command. This writes the needed IAM fields into your configuration. Furthermore, the flag updates the zone/region of the configuration if it hasn't been set yet. + + + + +You must be authenticated with the [AWS CLI](https://aws.amazon.com/en/cli/) in the shell session with a user that has the [required permissions for IAM creation](../getting-started/install.md#set-up-cloud-credentials). + +```bash +constellation iam create aws --zone=us-east-2a --prefix=constellTest +``` + +This command creates IAM configuration for the AWS zone `us-east-2a` using the prefix `constellTest` for all named resources being created. + +Constellation OS images are currently replicated to the following regions: + +* `eu-central-1` +* `eu-west-1` +* `eu-west-3` +* `us-east-2` +* `ap-south-1` + +If you require the OS image to be available in another region, [let us know](https://github.com/edgelesssys/constellation/issues/new?assignees=&labels=&template=feature_request.md&title=Support+new+AWS+image+region:+xx-xxxx-x). + +You can find a list of all [regions in AWS's documentation](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-regions-availability-zones.html#concepts-available-regions). + +Paste the output into the corresponding fields of the `constellation-conf.yaml` file. + + + + +You must be authenticated with the [Azure CLI](https://learn.microsoft.com/en-us/cli/azure/install-azure-cli) in the shell session with a user that has the [required permissions for IAM creation](../getting-started/install.md#set-up-cloud-credentials). + +```bash +constellation iam create azure --subscriptionID 00000000-0000-0000-0000-000000000000 --region=westus --resourceGroup=constellTest --servicePrincipal=spTest +``` + +This command creates IAM configuration on the Azure region `westus` creating a new resource group `constellTest` and a new service principal `spTest`. + +CVMs are available in several Azure regions. Constellation OS images are currently replicated to the following: + +* `germanywestcentral` +* `westus` +* `eastus` +* `northeurope` +* `westeurope` +* `southeastasia` + +If you require the OS image to be available in another region, [let us know](https://github.com/edgelesssys/constellation/issues/new?assignees=&labels=&template=feature_request.md&title=Support+new+Azure+image+region:+xx-xxxx-x). + +You can find a list of all [regions in Azure's documentation](https://azure.microsoft.com/en-us/global-infrastructure/services/?products=virtual-machines®ions=all). + +Paste the output into the corresponding fields of the `constellation-conf.yaml` file. + + + + +You must be authenticated with the [GCP CLI](https://cloud.google.com/sdk/gcloud) in the shell session with a user that has the [required permissions for IAM creation](../getting-started/install.md#set-up-cloud-credentials). + +```bash +constellation iam create gcp --projectID=yourproject-12345 --zone=europe-west2-a --serviceAccountID=constell-test +``` + +This command creates IAM configuration in the GCP project `yourproject-12345` on the GCP zone `europe-west2-a` creating a new service account `constell-test`. + +Note that only regions offering CVMs of the `C2D` or `N2D` series are supported. You can find a [list of all regions in Google's documentation](https://cloud.google.com/compute/docs/regions-zones#available), which you can filter by machine type `N2D`. + +Paste the output into the corresponding fields of the `constellation-conf.yaml` file. + + + + +STACKIT requires manual creation and configuration of service accounts. Look at the [first steps](../getting-started/first-steps.md) for more information. + + + + +
      +Alternatively, you can manually create the IAM configuration on your CSP. + +The following describes the configuration fields and how you obtain the required information or create the required resources. + + + + +* **region**: The name of your chosen AWS data center region, e.g., `us-east-2`. + + Constellation OS images are currently replicated to the following regions: + * `eu-central-1` + * `eu-west-1` + * `eu-west-3` + * `us-east-2` + * `ap-south-1` + + If you require the OS image to be available in another region, [let us know](https://github.com/edgelesssys/constellation/issues/new?assignees=&labels=&template=feature_request.md&title=Support+new+AWS+image+region:+xx-xxxx-x). + + You can find a list of all [regions in AWS's documentation](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-regions-availability-zones.html#concepts-available-regions). + +* **zone**: The name of your chosen AWS data center availability zone, e.g., `us-east-2a`. + + Learn more about [availability zones in AWS's documentation](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-regions-availability-zones.html#concepts-availability-zones). + +* **iamProfileControlPlane**: The name of an IAM instance profile attached to all control-plane nodes. + + You can create the resource with [Terraform](https://www.terraform.io/). For that, use the [provided Terraform script](https://github.com/edgelesssys/constellation/tree/release/v2.2/hack/terraform/aws/iam) to generate the necessary profile. The profile name will be provided as Terraform output value: `control_plane_instance_profile_name`. + + Alternatively, you can create the AWS profile with a tool of your choice. Use the JSON policy in [main.tf](https://github.com/edgelesssys/constellation/tree/release/v2.2/hack/terraform/aws/iam/main.tf) in the resource `aws_iam_policy.control_plane_policy`. + +* **iamProfileWorkerNodes**: The name of an IAM instance profile attached to all worker nodes. + + You can create the resource with [Terraform](https://www.terraform.io/). For that, use the [provided Terraform script](https://github.com/edgelesssys/constellation/tree/release/v2.2/hack/terraform/aws/iam) to generate the necessary profile. The profile name will be provided as Terraform output value: `worker_nodes_instance_profile_name`. + + Alternatively, you can create the AWS profile with a tool of your choice. Use the JSON policy in [main.tf](https://github.com/edgelesssys/constellation/tree/release/v2.2/hack/terraform/aws/iam/main.tf) in the resource `aws_iam_policy.worker_node_policy`. + + + + +* **subscription**: The UUID of your Azure subscription, e.g., `8b8bd01f-efd9-4113-9bd1-c82137c32da7`. + + You can view your subscription UUID via `az account show` and read the `id` field. For more information refer to [Azure's documentation](https://docs.microsoft.com/en-us/azure/azure-portal/get-subscription-tenant-id#find-your-azure-subscription). + +* **tenant**: The UUID of your Azure tenant, e.g., `3400e5a2-8fe2-492a-886c-38cb66170f25`. + + You can view your tenant UUID via `az account show` and read the `tenant` field. For more information refer to [Azure's documentation](https://docs.microsoft.com/en-us/azure/azure-portal/get-subscription-tenant-id#find-your-azure-ad-tenant). + +* **location**: The Azure datacenter location you want to deploy your cluster in, e.g., `westus`. + + CVMs are available in several Azure regions. Constellation OS images are currently replicated to the following: + + * `germanywestcentral` + * `westus` + * `eastus` + * `northeurope` + * `westeurope` + * `southeastasia` + + If you require the OS image to be available in another region, [let us know](https://github.com/edgelesssys/constellation/issues/new?assignees=&labels=&template=feature_request.md&title=Support+new+Azure+image+region:+xx-xxxx-x). + + You can find a list of all [regions in Azure's documentation](https://azure.microsoft.com/en-us/global-infrastructure/services/?products=virtual-machines®ions=all). + +* **resourceGroup**: [Create a new resource group in Azure](https://learn.microsoft.com/azure/azure-resource-manager/management/manage-resource-groups-portal) for your Constellation cluster. Set this configuration field to the name of the created resource group. + +* **userAssignedIdentity**: [Create a new managed identity in Azure](https://learn.microsoft.com/azure/active-directory/managed-identities-azure-resources/how-manage-user-assigned-managed-identities). You should create the identity in a different resource group as all resources within the cluster resource group will be deleted on cluster termination. + + Add three role assignments to the identity: `Owner`, `Virtual Machine Contributor`, and `Application Insights Component Contributor`. The `scope` of all three should refer to the previously created cluster resource group. + + Set the configuration value to the full ID of the created identity, e.g., `/subscriptions/8b8bd01f-efd9-4113-9bd1-c82137c32da7/resourcegroups/constellation-identity/providers/Microsoft.ManagedIdentity/userAssignedIdentities/constellation-identity`. You can get it by opening the `JSON View` from the `Overview` section of the identity. + + The user-assigned identity is used by instances of the cluster to access other cloud resources. + For more information about managed identities refer to [Azure's documentation](https://docs.microsoft.com/en-us/azure/active-directory/managed-identities-azure-resources/how-manage-user-assigned-managed-identities). + + + + +* **project**: The ID of your GCP project, e.g., `constellation-129857`. + + You can find it on the [welcome screen of your GCP project](https://console.cloud.google.com/welcome). For more information refer to [Google's documentation](https://support.google.com/googleapi/answer/7014113). + +* **region**: The GCP region you want to deploy your cluster in, e.g., `us-west1`. + + You can find a [list of all regions in Google's documentation](https://cloud.google.com/compute/docs/regions-zones#available). + +* **zone**: The GCP zone you want to deploy your cluster in, e.g., `us-west1-a`. + + You can find a [list of all zones in Google's documentation](https://cloud.google.com/compute/docs/regions-zones#available). + +* **serviceAccountKeyPath**: To configure this, you need to create a GCP [service account](https://cloud.google.com/iam/docs/service-accounts) with the following permissions: + + * `Compute Instance Admin (v1) (roles/compute.instanceAdmin.v1)` + * `Compute Network Admin (roles/compute.networkAdmin)` + * `Compute Security Admin (roles/compute.securityAdmin)` + * `Compute Storage Admin (roles/compute.storageAdmin)` + * `Service Account User (roles/iam.serviceAccountUser)` + + Afterward, create and download a new JSON key for this service account. Place the downloaded file in your Constellation workspace, and set the config parameter to the filename, e.g., `constellation-129857-15343dba46cb.json`. + + + + +STACKIT requires manual creation and configuration of service accounts. Look at the [first steps](../getting-started/first-steps.md) for more information. + + + +
      + +Now that you've configured your CSP, you can [create your cluster](./create.md). + +## Deleting an IAM configuration + +You can keep a created IAM configuration and reuse it for new clusters. Alternatively, you can also delete it if you don't want to use it anymore. + +Delete the IAM configuration by executing the following command in the same directory where you executed `constellation iam create` (the directory that contains [`constellation-iam-terraform`](../reference/terraform.md) as a subdirectory): + +```bash +constellation iam destroy +``` + +:::caution +For Azure, deleting the IAM configuration by executing `constellation iam destroy` will delete the whole resource group created by `constellation iam create`. +This also includes any additional resources in the resource group that weren't created by Constellation. +::: diff --git a/docs/versioned_docs/version-2.21/workflows/create.md b/docs/versioned_docs/version-2.21/workflows/create.md new file mode 100644 index 000000000..6074ebb16 --- /dev/null +++ b/docs/versioned_docs/version-2.21/workflows/create.md @@ -0,0 +1,93 @@ +# Create your cluster + +:::info +This recording presents the essence of this page. It's recommended to read it in full for the motivation and all details. +::: + + + +--- + +Creating your cluster happens through multiple phases. +The most significant ones are: + +1. Creating the necessary resources in your cloud environment +2. Bootstrapping the Constellation cluster and setting up a connection +3. Installing the necessary Kubernetes components + +`constellation apply` handles all this in a single command. +You can use the `--skip-phases` flag to skip specific phases of the process. +For example, if you created the infrastructure manually, you can skip the cloud resource creation phase. + +See the [architecture](../architecture/orchestration.md) section for details on the inner workings of this process. + +:::tip +If you don't have a cloud subscription, you can also set up a [local Constellation cluster using virtualization](../getting-started/first-steps-local.md) for testing. +::: + +Before you create the cluster, make sure to have a [valid configuration file](./config.md). + + + + +```bash +constellation apply +``` + +`apply` stores the state of your cluster's cloud resources in a [`constellation-terraform`](../architecture/orchestration.md#cluster-creation-process) directory in your workspace. + + + + +Self-managed infrastructure allows for more flexibility in the setup, by separating the infrastructure setup from the Constellation cluster management. +This provides flexibility in DevOps and can meet potential regulatory requirements. +It's recommended to use Terraform for infrastructure management, but you can use any tool of your choice. + +:::info + + When using Terraform, you can use the [Constellation Terraform provider](./terraform-provider.md) to manage the entire Constellation cluster lifecycle. + +::: + +You can refer to the Terraform files for the selected CSP from the [Constellation GitHub repository](https://github.com/edgelesssys/constellation/tree/main/terraform/infrastructure) for a minimum Constellation cluster configuration. From this base, you can now add, edit, or substitute resources per your own requirements with the infrastructure +management tooling of your choice. You need to keep the essential functionality of the base configuration in order for your cluster to function correctly. + + + +:::info + + On Azure, a manual update to the MAA provider's policy is necessary. + You can apply the update with the following command after creating the infrastructure, with `` being the URL of the MAA provider (i.e., `$(terraform output attestation_url | jq -r)`, when using the minimal Terraform configuration). + + ```bash + constellation maa-patch + ``` + +::: + + + +Make sure all necessary resources are created, e.g., through checking your CSP's portal and retrieve the necessary values, aligned with the outputs (specified in `outputs.tf`) of the base configuration. + +Fill these outputs into the corresponding fields of the `Infrastructure` block inside the `constellation-state.yaml` file. For example, fill the IP or DNS name your cluster can be reached at into the `.Infrastructure.ClusterEndpoint` field. + +With the required cloud resources set up, continue with initializing your cluster. + +```bash +constellation apply --skip-phases=infrastructure +``` + + + + +Finally, configure `kubectl` for your cluster: + +```bash +export KUBECONFIG="$PWD/constellation-admin.conf" +``` + +🏁 That's it. You've successfully created a Constellation cluster. + +### Troubleshooting + +In case `apply` fails, the CLI collects logs from the bootstrapping instance and stores them inside `constellation-cluster.log`. diff --git a/docs/versioned_docs/version-2.21/workflows/lb.md b/docs/versioned_docs/version-2.21/workflows/lb.md new file mode 100644 index 000000000..868e61076 --- /dev/null +++ b/docs/versioned_docs/version-2.21/workflows/lb.md @@ -0,0 +1,28 @@ +# Expose a service + +Constellation integrates the native load balancers of each CSP. Therefore, to expose a service simply [create a service of type `LoadBalancer`](https://kubernetes.io/docs/concepts/services-networking/service/#loadbalancer). + +## Internet-facing LB service on AWS + +To expose your application service externally you might want to use a Kubernetes Service of type `LoadBalancer`. On AWS, load-balancing is achieved through the [AWS Load Balancer Controller](https://kubernetes-sigs.github.io/aws-load-balancer-controller) as in the managed EKS. + +Since recent versions, the controller deploy an internal LB by default requiring to set an annotation `service.beta.kubernetes.io/aws-load-balancer-scheme: internet-facing` to have an internet-facing LB. For more details, see the [official docs](https://kubernetes-sigs.github.io/aws-load-balancer-controller/v2.7/guide/service/nlb/). + +For general information on LB with AWS see [Network load balancing on Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/network-load-balancing.html). + +:::caution +Before terminating the cluster, all LB backed services should be deleted, so that the controller can cleanup the related resources. +::: + +## Ingress on AWS + +The AWS Load Balancer Controller also provisions `Ingress` resources of class `alb`. +AWS Application Load Balancers (ALBs) can be configured with a [`target-type`](https://kubernetes-sigs.github.io/aws-load-balancer-controller/v2.7/guide/ingress/annotations/#target-type). +The target type `ip` requires using the EKS container network solution, which makes it incompatible with Constellation. +If a service can be exposed on a `NodePort`, the target type `instance` can be used. + +See [Application load balancing on Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/alb-ingress.html) for more information. + +:::caution +Ingress handlers backed by AWS ALBs reside outside the Constellation cluster, so they shouldn't be handling sensitive traffic! +::: diff --git a/docs/versioned_docs/version-2.21/workflows/recovery.md b/docs/versioned_docs/version-2.21/workflows/recovery.md new file mode 100644 index 000000000..592ae247b --- /dev/null +++ b/docs/versioned_docs/version-2.21/workflows/recovery.md @@ -0,0 +1,179 @@ +# Recover your cluster + +Recovery of a Constellation cluster means getting it back into a healthy state after too many concurrent node failures in the control plane. +Reasons for an unhealthy cluster can vary from a power outage, or planned reboot, to migration of nodes and regions. +Recovery events are rare, because Constellation is built for high availability and automatically and securely replaces failed nodes. When a node is replaced, Constellation's control plane first verifies the new node before it sends the node the cryptographic keys required to decrypt its [state disk](../architecture/images.md#state-disk). + +Constellation provides a recovery mechanism for cases where the control plane has failed and is unable to replace nodes. +The `constellation recover` command securely connects to all nodes in need of recovery using [attested TLS](../architecture/attestation.md#attested-tls-atls) and provides them with the keys to decrypt their state disks and continue booting. + +## Identify unhealthy clusters + +The first step to recovery is identifying when a cluster becomes unhealthy. +Usually, this can be first observed when the Kubernetes API server becomes unresponsive. + +You can check the health status of the nodes via the cloud service provider (CSP). +Constellation provides logging information on the boot process and status via serial console output. +In the following, you'll find detailed descriptions for identifying clusters stuck in recovery for each CSP. + + + + +First, open the AWS console to view all Auto Scaling Groups (ASGs) in the region of your cluster. Select the ASG of the control plane `--control-plane` and check that enough members are in a *Running* state. + +Second, check the boot logs of these *Instances*. In the ASG's *Instance management* view, select each desired instance. In the upper right corner, select **Action > Monitor and troubleshoot > Get system log**. + +In the serial console output, search for `Waiting for decryption key`. +Similar output to the following means your node was restarted and needs to decrypt the [state disk](../architecture/images.md#state-disk): + +```json +{"level":"INFO","ts":"2022-09-08T10:21:53Z","caller":"cmd/main.go:55","msg":"Starting disk-mapper","version":"2.0.0","cloudProvider":"gcp"} +{"level":"INFO","ts":"2022-09-08T10:21:53Z","logger":"setupManager","caller":"setup/setup.go:72","msg":"Preparing existing state disk"} +{"level":"INFO","ts":"2022-09-08T10:21:53Z","logger":"rejoinClient","caller":"rejoinclient/client.go:65","msg":"Starting RejoinClient"} +{"level":"INFO","ts":"2022-09-08T10:21:53Z","logger":"recoveryServer","caller":"recoveryserver/server.go:59","msg":"Starting RecoveryServer"} +``` + +The node will then try to connect to the [*JoinService*](../architecture/microservices.md#joinservice) and obtain the decryption key. +If this fails due to an unhealthy control plane, you will see log messages similar to the following: + +```json +{"level":"INFO","ts":"2022-09-08T10:21:53Z","logger":"rejoinClient","caller":"rejoinclient/client.go:77","msg":"Received list with JoinService endpoints","endpoints":["192.168.178.4:30090","192.168.178.2:30090"]} +{"level":"INFO","ts":"2022-09-08T10:21:53Z","logger":"rejoinClient","caller":"rejoinclient/client.go:96","msg":"Requesting rejoin ticket","endpoint":"192.168.178.4:30090"} +{"level":"WARN","ts":"2022-09-08T10:21:53Z","logger":"rejoinClient","caller":"rejoinclient/client.go:101","msg":"Failed to rejoin on endpoint","error":"rpc error: code = Unavailable desc = connection error: desc = \"transport: Error while dialing dial tcp 192.168.178.4:30090: connect: connection refused\"","endpoint":"192.168.178.4:30090"} +{"level":"INFO","ts":"2022-09-08T10:21:53Z","logger":"rejoinClient","caller":"rejoinclient/client.go:96","msg":"Requesting rejoin ticket","endpoint":"192.168.178.2:30090"} +{"level":"WARN","ts":"2022-09-08T10:22:13Z","logger":"rejoinClient","caller":"rejoinclient/client.go:101","msg":"Failed to rejoin on endpoint","error":"rpc error: code = Unavailable desc = connection error: desc = \"transport: Error while dialing dial tcp 192.168.178.2:30090: i/o timeout\"","endpoint":"192.168.178.2:30090"} +{"level":"ERROR","ts":"2022-09-08T10:22:13Z","logger":"rejoinClient","caller":"rejoinclient/client.go:110","msg":"Failed to rejoin on all endpoints"} +``` + +This means that you have to recover the node manually. + + + + +In the Azure portal, find the cluster's resource group. +Inside the resource group, open the control plane *Virtual machine scale set* `constellation-scale-set-controlplanes-`. +On the left, go to **Settings** > **Instances** and check that enough members are in a *Running* state. + +Second, check the boot logs of these *Instances*. +In the scale set's *Instances* view, open the details page of the desired instance. +On the left, go to **Support + troubleshooting** > **Serial console**. + +In the serial console output, search for `Waiting for decryption key`. +Similar output to the following means your node was restarted and needs to decrypt the [state disk](../architecture/images.md#state-disk): + +```json +{"level":"INFO","ts":"2022-09-08T09:56:41Z","caller":"cmd/main.go:55","msg":"Starting disk-mapper","version":"2.0.0","cloudProvider":"azure"} +{"level":"INFO","ts":"2022-09-08T09:56:43Z","logger":"setupManager","caller":"setup/setup.go:72","msg":"Preparing existing state disk"} +{"level":"INFO","ts":"2022-09-08T09:56:43Z","logger":"recoveryServer","caller":"recoveryserver/server.go:59","msg":"Starting RecoveryServer"} +{"level":"INFO","ts":"2022-09-08T09:56:43Z","logger":"rejoinClient","caller":"rejoinclient/client.go:65","msg":"Starting RejoinClient"} +``` + +The node will then try to connect to the [*JoinService*](../architecture/microservices.md#joinservice) and obtain the decryption key. +If this fails due to an unhealthy control plane, you will see log messages similar to the following: + +```json +{"level":"INFO","ts":"2022-09-08T09:56:43Z","logger":"rejoinClient","caller":"rejoinclient/client.go:77","msg":"Received list with JoinService endpoints","endpoints":["10.9.0.5:30090","10.9.0.6:30090"]} +{"level":"INFO","ts":"2022-09-08T09:56:43Z","logger":"rejoinClient","caller":"rejoinclient/client.go:96","msg":"Requesting rejoin ticket","endpoint":"10.9.0.5:30090"} +{"level":"WARN","ts":"2022-09-08T09:57:03Z","logger":"rejoinClient","caller":"rejoinclient/client.go:101","msg":"Failed to rejoin on endpoint","error":"rpc error: code = Unavailable desc = connection error: desc = \"transport: Error while dialing dial tcp 10.9.0.5:30090: i/o timeout\"","endpoint":"10.9.0.5:30090"} +{"level":"INFO","ts":"2022-09-08T09:57:03Z","logger":"rejoinClient","caller":"rejoinclient/client.go:96","msg":"Requesting rejoin ticket","endpoint":"10.9.0.6:30090"} +{"level":"WARN","ts":"2022-09-08T09:57:23Z","logger":"rejoinClient","caller":"rejoinclient/client.go:101","msg":"Failed to rejoin on endpoint","error":"rpc error: code = Unavailable desc = connection error: desc = \"transport: Error while dialing dial tcp 10.9.0.6:30090: i/o timeout\"","endpoint":"10.9.0.6:30090"} +{"level":"ERROR","ts":"2022-09-08T09:57:23Z","logger":"rejoinClient","caller":"rejoinclient/client.go:110","msg":"Failed to rejoin on all endpoints"} +``` + +This means that you have to recover the node manually. + + + + +First, check that the control plane *Instance Group* has enough members in a *Ready* state. +In the GCP Console, go to **Instance Groups** and check the group for the cluster's control plane `-control-plane-`. + +Second, check the status of the *VM Instances*. +Go to **VM Instances** and open the details of the desired instance. +Check the serial console output of that instance by opening the **Logs** > **Serial port 1 (console)** page: + +![GCP portal serial console link](../_media/recovery-gcp-serial-console-link.png) + +In the serial console output, search for `Waiting for decryption key`. +Similar output to the following means your node was restarted and needs to decrypt the [state disk](../architecture/images.md#state-disk): + +```json +{"level":"INFO","ts":"2022-09-08T10:21:53Z","caller":"cmd/main.go:55","msg":"Starting disk-mapper","version":"2.0.0","cloudProvider":"gcp"} +{"level":"INFO","ts":"2022-09-08T10:21:53Z","logger":"setupManager","caller":"setup/setup.go:72","msg":"Preparing existing state disk"} +{"level":"INFO","ts":"2022-09-08T10:21:53Z","logger":"rejoinClient","caller":"rejoinclient/client.go:65","msg":"Starting RejoinClient"} +{"level":"INFO","ts":"2022-09-08T10:21:53Z","logger":"recoveryServer","caller":"recoveryserver/server.go:59","msg":"Starting RecoveryServer"} +``` + +The node will then try to connect to the [*JoinService*](../architecture/microservices.md#joinservice) and obtain the decryption key. +If this fails due to an unhealthy control plane, you will see log messages similar to the following: + +```json +{"level":"INFO","ts":"2022-09-08T10:21:53Z","logger":"rejoinClient","caller":"rejoinclient/client.go:77","msg":"Received list with JoinService endpoints","endpoints":["192.168.178.4:30090","192.168.178.2:30090"]} +{"level":"INFO","ts":"2022-09-08T10:21:53Z","logger":"rejoinClient","caller":"rejoinclient/client.go:96","msg":"Requesting rejoin ticket","endpoint":"192.168.178.4:30090"} +{"level":"WARN","ts":"2022-09-08T10:21:53Z","logger":"rejoinClient","caller":"rejoinclient/client.go:101","msg":"Failed to rejoin on endpoint","error":"rpc error: code = Unavailable desc = connection error: desc = \"transport: Error while dialing dial tcp 192.168.178.4:30090: connect: connection refused\"","endpoint":"192.168.178.4:30090"} +{"level":"INFO","ts":"2022-09-08T10:21:53Z","logger":"rejoinClient","caller":"rejoinclient/client.go:96","msg":"Requesting rejoin ticket","endpoint":"192.168.178.2:30090"} +{"level":"WARN","ts":"2022-09-08T10:22:13Z","logger":"rejoinClient","caller":"rejoinclient/client.go:101","msg":"Failed to rejoin on endpoint","error":"rpc error: code = Unavailable desc = connection error: desc = \"transport: Error while dialing dial tcp 192.168.178.2:30090: i/o timeout\"","endpoint":"192.168.178.2:30090"} +{"level":"ERROR","ts":"2022-09-08T10:22:13Z","logger":"rejoinClient","caller":"rejoinclient/client.go:110","msg":"Failed to rejoin on all endpoints"} +``` + +This means that you have to recover the node manually. + + + + +First, open the STACKIT portal to view all servers in your project. Select individual control plane nodes `--control-plane--` and check that enough members are in a *Running* state. + +Second, check the boot logs of these servers. Click on a server name and select **Overview**. Find the **Machine Setup** section and click on **Web console** > **Open console**. + +In the serial console output, search for `Waiting for decryption key`. +Similar output to the following means your node was restarted and needs to decrypt the [state disk](../architecture/images.md#state-disk): + +```json +{"level":"INFO","ts":"2022-09-08T10:21:53Z","caller":"cmd/main.go:55","msg":"Starting disk-mapper","version":"2.0.0","cloudProvider":"gcp"} +{"level":"INFO","ts":"2022-09-08T10:21:53Z","logger":"setupManager","caller":"setup/setup.go:72","msg":"Preparing existing state disk"} +{"level":"INFO","ts":"2022-09-08T10:21:53Z","logger":"rejoinClient","caller":"rejoinclient/client.go:65","msg":"Starting RejoinClient"} +{"level":"INFO","ts":"2022-09-08T10:21:53Z","logger":"recoveryServer","caller":"recoveryserver/server.go:59","msg":"Starting RecoveryServer"} +``` + +The node will then try to connect to the [*JoinService*](../architecture/microservices.md#joinservice) and obtain the decryption key. +If this fails due to an unhealthy control plane, you will see log messages similar to the following: + +```json +{"level":"INFO","ts":"2022-09-08T10:21:53Z","logger":"rejoinClient","caller":"rejoinclient/client.go:77","msg":"Received list with JoinService endpoints","endpoints":["192.168.178.4:30090","192.168.178.2:30090"]} +{"level":"INFO","ts":"2022-09-08T10:21:53Z","logger":"rejoinClient","caller":"rejoinclient/client.go:96","msg":"Requesting rejoin ticket","endpoint":"192.168.178.4:30090"} +{"level":"WARN","ts":"2022-09-08T10:21:53Z","logger":"rejoinClient","caller":"rejoinclient/client.go:101","msg":"Failed to rejoin on endpoint","error":"rpc error: code = Unavailable desc = connection error: desc = \"transport: Error while dialing dial tcp 192.168.178.4:30090: connect: connection refused\"","endpoint":"192.168.178.4:30090"} +{"level":"INFO","ts":"2022-09-08T10:21:53Z","logger":"rejoinClient","caller":"rejoinclient/client.go:96","msg":"Requesting rejoin ticket","endpoint":"192.168.178.2:30090"} +{"level":"WARN","ts":"2022-09-08T10:22:13Z","logger":"rejoinClient","caller":"rejoinclient/client.go:101","msg":"Failed to rejoin on endpoint","error":"rpc error: code = Unavailable desc = connection error: desc = \"transport: Error while dialing dial tcp 192.168.178.2:30090: i/o timeout\"","endpoint":"192.168.178.2:30090"} +{"level":"ERROR","ts":"2022-09-08T10:22:13Z","logger":"rejoinClient","caller":"rejoinclient/client.go:110","msg":"Failed to rejoin on all endpoints"} +``` + +This means that you have to recover the node manually. + + + + +## Recover a cluster + +Recovering a cluster requires the following parameters: + +* The `constellation-state.yaml` file in your working directory or the cluster's endpoint +* The master secret of the cluster + +A cluster can be recovered like this: + +```bash +$ constellation recover +Pushed recovery key. +Pushed recovery key. +Pushed recovery key. +Recovered 3 control-plane nodes. +``` + +In the serial console output of the node you'll see a similar output to the following: + +```json +{"level":"INFO","ts":"2022-09-08T10:26:59Z","logger":"recoveryServer","caller":"recoveryserver/server.go:93","msg":"Received recover call"} +{"level":"INFO","ts":"2022-09-08T10:26:59Z","logger":"recoveryServer","caller":"recoveryserver/server.go:125","msg":"Received state disk key and measurement secret, shutting down server"} +{"level":"INFO","ts":"2022-09-08T10:26:59Z","logger":"recoveryServer.gRPC","caller":"zap/server_interceptors.go:61","msg":"finished streaming call with code OK","grpc.start_time":"2022-09-08T10:26:59Z","system":"grpc","span.kind":"server","grpc.service":"recoverproto.API","grpc.method":"Recover","peer.address":"192.0.2.3:41752","grpc.code":"OK","grpc.time_ms":15.701} +{"level":"INFO","ts":"2022-09-08T10:27:13Z","logger":"rejoinClient","caller":"rejoinclient/client.go:87","msg":"RejoinClient stopped"} +``` diff --git a/docs/versioned_docs/version-2.21/workflows/reproducible-builds.md b/docs/versioned_docs/version-2.21/workflows/reproducible-builds.md new file mode 100644 index 000000000..e3bc46095 --- /dev/null +++ b/docs/versioned_docs/version-2.21/workflows/reproducible-builds.md @@ -0,0 +1,63 @@ +# Reproduce released artifacts + +Constellation has first-class support for [reproducible builds](https://reproducible-builds.org). +Reproducing the released artifacts is an alternative to [signature verification](verify-cli.md) that doesn't require trusting Edgeless Systems' release process. +The following sections describe how to rebuild an artifact and how Constellation ensures that the rebuild reproduces the artifacts bit-by-bit. + +## Build environment prerequisites + +The build systems used by Constellation - [Bazel](https://bazel.build/) and [Nix](https://nixos.org) - are designed for deterministic, reproducible builds. +These two dependencies should be the only prerequisites for a successful build. +However, it can't be ruled out completely that peculiarities of the host affect the build result. +Thus, we recommend the following host setup for best results: + +1. A Linux operating system not older than v5.4. +2. The GNU C library not older than v2.31 (avoid `musl`). +3. GNU `coreutils` not older than v8.30 (avoid `busybox`). +4. An `ext4` filesystem for building. +5. AppArmor turned off. + +This is given, for example, on an Ubuntu 22.04 system, which is also used for reproducibility tests. + +:::note + +To avoid any backwards-compatibility issues, the host software versions should also not be much newer than the Constellation release. + +::: + +## Run the build + +The following instructions outline qualitatively how to reproduce a build. +Constellation implements these instructions in the [Reproducible Builds workflow](https://github.com/edgelesssys/constellation/actions/workflows/reproducible-builds.yml), which continuously tests for reproducibility. +The workflow is a good place to look up specific version numbers and build steps. + +1. Check out the Constellation repository at the tag corresponding to the release. + + ```bash + git clone https://github.com/edgelesssys/constellation.git + cd constellation + git checkout v2.20.0 + ``` + +2. [Install the Bazel release](https://bazel.build/install) specified in `.bazelversion`. +3. [Install Nix](https://nixos.org/download/) (any recent version should do). +4. Run the build with `bazel build $target` for one of the following targets of interest: + + ```data + //cli:cli_enterprise_darwin_amd64 + //cli:cli_enterprise_darwin_arm64 + //cli:cli_enterprise_linux_amd64 + //cli:cli_enterprise_linux_arm64 + //cli:cli_enterprise_windows_amd64 + ``` + +5. Compare the build result with the downloaded release artifact. + + + +## Feedback + +Reproduction failures often indicate a bug in the build system or in the build definitions. +Therefore, we're interested in any reproducibility issues you might encounter. +[Start a bug report](https://github.com/edgelesssys/constellation/issues/new/choose) and describe the details of your build environment. +Make sure to include your result binary or a [`diffoscope`](https://diffoscope.org/) report, if possible. diff --git a/docs/versioned_docs/version-2.21/workflows/s3proxy.md b/docs/versioned_docs/version-2.21/workflows/s3proxy.md new file mode 100644 index 000000000..121e8a461 --- /dev/null +++ b/docs/versioned_docs/version-2.21/workflows/s3proxy.md @@ -0,0 +1,58 @@ +# Install s3proxy + +Constellation includes a transparent client-side encryption proxy for [AWS S3](https://aws.amazon.com/de/s3/) and compatible stores. +s3proxy encrypts objects before sending them to S3 and automatically decrypts them on retrieval, without requiring changes to your application. +With s3proxy, you can use S3 for storage in a confidential way without having to trust the storage provider. + +## Limitations + +Currently, s3proxy has the following limitations: +- Only `PutObject` and `GetObject` requests are encrypted/decrypted by s3proxy. +By default, s3proxy will block requests that may expose unencrypted data to S3 (e.g. UploadPart). +The `allow-multipart` flag disables request blocking for evaluation purposes. +- Using the [Range](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html#API_GetObject_RequestSyntax) header on `GetObject` is currently not supported and will result in an error. + +These limitations will be removed with future iterations of s3proxy. +If you want to use s3proxy but these limitations stop you from doing so, consider [opening an issue](https://github.com/edgelesssys/constellation/issues/new?assignees=&labels=&projects=&template=feature_request.yml). + +## Deployment + +You can add the s3proxy to your Constellation cluster as follows: +1. Add the Edgeless Systems chart repository: + ```bash + helm repo add edgeless https://helm.edgeless.systems/stable + helm repo update + ``` +2. Set ACCESS_KEY and ACCESS_SECRET to valid credentials you want s3proxy to use to interact with S3. +3. Deploy s3proxy: + ```bash + helm install s3proxy edgeless/s3proxy --set awsAccessKeyID="$ACCESS_KEY" --set awsSecretAccessKey="$ACCESS_SECRET" + ``` + +If you want to run a demo application, check out the [Filestash with s3proxy](../getting-started/examples/filestash-s3proxy.md) example. + + +## Technical details + +### Encryption + +s3proxy relies on Google's [Tink Cryptographic Library](https://developers.google.com/tink) to implement cryptographic operations securely. +The used cryptographic primitives are [NIST SP 800 38f](https://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-38F.pdf) for key wrapping and [AES](https://en.wikipedia.org/wiki/Advanced_Encryption_Standard)-[GCM](https://en.wikipedia.org/wiki/Block_cipher_mode_of_operation#Galois/counter_(GCM)) with 256 bit keys for data encryption. + +s3proxy uses [envelope encryption](https://cloud.google.com/kms/docs/envelope-encryption) to encrypt objects. +This means s3proxy uses a key encryption key (KEK) issued by the [KeyService](../architecture/microservices.md#keyservice) to encrypt data encryption keys (DEKs). +Each S3 object is encrypted with its own DEK. +The encrypted DEK is then saved as metadata of the encrypted object. +This enables key rotation of the KEK without re-encrypting the data in S3. +The approach also allows access to objects from different locations, as long as each location has access to the KEK. + +### Traffic interception + +To use s3proxy, you have to redirect your outbound S3 traffic to s3proxy. +This can either be done by modifying your client application or by changing the deployment of your application. + +The necessary deployment modifications are to add DNS redirection and a trusted TLS certificate to the client's trust store. +DNS redirection can be defined for each pod, allowing you to use s3proxy for one application without changing other applications in the same cluster. +Adding a trusted TLS certificate is necessary as clients communicate with s3proxy via HTTPS. +To have your client application trust s3proxy's TLS certificate, the certificate has to be added to the client's certificate trust store. +The [Filestash with s3proxy](../getting-started/examples/filestash-s3proxy.md) example shows how to do this. diff --git a/docs/versioned_docs/version-2.21/workflows/sbom.md b/docs/versioned_docs/version-2.21/workflows/sbom.md new file mode 100644 index 000000000..6c1702dee --- /dev/null +++ b/docs/versioned_docs/version-2.21/workflows/sbom.md @@ -0,0 +1,93 @@ +# Consume software bill of materials (SBOMs) + + + +--- + +Constellation builds produce a [software bill of materials (SBOM)](https://www.ntia.gov/SBOM) for each generated [artifact](../architecture/microservices.md). +You can use SBOMs to make informed decisions about dependencies and vulnerabilities in a given application. Enterprises rely on SBOMs to maintain an inventory of used applications, which allows them to take data-driven approaches to managing risks related to vulnerabilities. + +SBOMs for Constellation are generated using [Syft](https://github.com/anchore/syft), signed using [Cosign](https://github.com/sigstore/cosign), and stored with the produced artifact. + +:::note +The public key for Edgeless Systems' long-term code-signing key is: + +``` +-----BEGIN PUBLIC KEY----- +MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEf8F1hpmwE+YCFXzjGtaQcrL6XZVT +JmEe5iSLvG1SyQSAew7WdMKF6o9t8e2TFuCkzlOhhlws2OHWbiFZnFWCFw== +-----END PUBLIC KEY----- +``` + +The public key is also available for download at [https://edgeless.systems/es.pub](https://edgeless.systems/es.pub) and in the Twitter profile [@EdgelessSystems](https://twitter.com/EdgelessSystems). + +Make sure the key is available in a file named `cosign.pub` to execute the following examples. +::: + +## Verify and download SBOMs + +The following sections detail how to work with each type of artifact to verify and extract the SBOM. + +### Constellation CLI + +The SBOM for Constellation CLI is made available on the [GitHub release page](https://github.com/edgelesssys/constellation/releases). The SBOM (`constellation.spdx.sbom`) and corresponding signature (`constellation.spdx.sbom.sig`) are valid for each Constellation CLI for a given version, regardless of architecture and operating system. + +```bash +curl -LO https://github.com/edgelesssys/constellation/releases/download/v2.2.0/constellation.spdx.sbom +curl -LO https://github.com/edgelesssys/constellation/releases/download/v2.2.0/constellation.spdx.sbom.sig +cosign verify-blob --key cosign.pub --signature constellation.spdx.sbom.sig constellation.spdx.sbom +``` + +### Container Images + +SBOMs for container images are [attached to the image using Cosign](https://docs.sigstore.dev/cosign/signing/other_types/#sboms-software-bill-of-materials) and uploaded to the same registry. + +As a consumer, use cosign to download and verify the SBOM: + +```bash +# Verify and download the attestation statement +cosign verify-attestation ghcr.io/edgelesssys/constellation/verification-service@v2.2.0 --type 'https://cyclonedx.org/bom' --key cosign.pub --output-file verification-service.att.json +# Extract SBOM from attestation statement +jq -r .payload verification-service.att.json | base64 -d > verification-service.cyclonedx.sbom +``` + +A successful verification should result in similar output: + +```shell-session +$ cosign verify-attestation ghcr.io/edgelesssys/constellation/verification-service@v2.2.0 --type 'https://cyclonedx.org/bom' --key cosign.pub --output-file verification-service.sbom + +Verification for ghcr.io/edgelesssys/constellation/verification-service@v2.2.0 -- +The following checks were performed on each of these signatures: + - The cosign claims were validated + - The signatures were verified against the specified public key +$ jq -r .payload verification-service.sbom | base64 -d > verification-service.cyclonedx.sbom +``` + +:::note + +This example considers only the `verification-service`. The same approach works for all containers in the [Constellation container registry](https://github.com/orgs/edgelesssys/packages?repo_name=constellation). + +::: + + + +## Vulnerability scanning + +You can use a plethora of tools to consume SBOMs. This section provides suggestions for tools that are popular and known to produce reliable results, but any tool that consumes [SPDX](https://spdx.dev/) or [CycloneDX](https://cyclonedx.org/) files should work. + +Syft is able to [convert between the two formats](https://github.com/anchore/syft#format-conversion-experimental) in case you require a specific type. + +### Grype + +[Grype](https://github.com/anchore/grype) is a CLI tool that lends itself well for integration into CI/CD systems or local developer machines. It's also able to consume the signed attestation statement directly and does the verification in one go. + +```bash +grype att:verification-service.sbom --key cosign.pub --add-cpes-if-none -q +``` + +### Dependency Track + +[Dependency Track](https://dependencytrack.org/) is one of the oldest and most mature solutions when it comes to managing software inventory and vulnerabilities. Once imported, it continuously scans SBOMs for new vulnerabilities. It supports the CycloneDX format and provides direct guidance on how to comply with [U.S. Executive Order 14028](https://docs.dependencytrack.org/usage/executive-order-14028/). diff --git a/docs/versioned_docs/version-2.21/workflows/scale.md b/docs/versioned_docs/version-2.21/workflows/scale.md new file mode 100644 index 000000000..28f19e3f1 --- /dev/null +++ b/docs/versioned_docs/version-2.21/workflows/scale.md @@ -0,0 +1,122 @@ +# Scale your cluster + +Constellation provides all features of a Kubernetes cluster including scaling and autoscaling. + +## Worker node scaling + +### Autoscaling + +Constellation comes with autoscaling disabled by default. To enable autoscaling, find the scaling group of +worker nodes: + +```bash +kubectl get scalinggroups -o json | yq '.items | .[] | select(.spec.role == "Worker") | [{"name": .metadata.name, "nodeGoupName": .spec.nodeGroupName}]' +``` + +This will output a list of scaling groups with the corresponding cloud provider name (`name`) and the cloud provider agnostic name of the node group (`nodeGroupName`). + +Then, patch the `autoscaling` field of the scaling group resource with the desired `name` to `true`: + +```bash +# Replace with the name of the scaling group you want to enable autoscaling for +worker_group= +kubectl patch scalinggroups $worker_group --patch '{"spec":{"autoscaling": true}}' --type='merge' +kubectl get scalinggroup $worker_group -o jsonpath='{.spec}' | yq -P +``` + +The cluster autoscaler now automatically provisions additional worker nodes so that all pods have a place to run. +You can configure the minimum and maximum number of worker nodes in the scaling group by patching the `min` or +`max` fields of the scaling group resource: + +```bash +kubectl patch scalinggroups $worker_group --patch '{"spec":{"max": 5}}' --type='merge' +kubectl get scalinggroup $worker_group -o jsonpath='{.spec}' | yq -P +``` + +The cluster autoscaler will now never provision more than 5 worker nodes. + +If you want to see the autoscaling in action, try to add a deployment with a lot of replicas, like the +following Nginx deployment. The number of replicas needed to trigger the autoscaling depends on the size of +and count of your worker nodes. Wait for the rollout of the deployment to finish and compare the number of +worker nodes before and after the deployment: + +```bash +kubectl create deployment nginx --image=nginx --replicas 150 +kubectl -n kube-system get nodes +kubectl rollout status deployment nginx +kubectl -n kube-system get nodes +``` + +### Manual scaling + +Alternatively, you can manually scale your cluster up or down: + + + + +1. Go to Auto Scaling Groups and select the worker ASG to scale up. +2. Click **Edit** +3. Set the new (increased) **Desired capacity** and **Update**. + + + + +1. Find your Constellation resource group. +2. Select the `scale-set-workers`. +3. Go to **settings** and **scaling**. +4. Set the new **instance count** and **save**. + + + + +1. In Compute Engine go to [Instance Groups](https://console.cloud.google.com/compute/instanceGroups/). +2. **Edit** the **worker** instance group. +3. Set the new **number of instances** and **save**. + + + + +Dynamic cluster scaling isn't yet supported for STACKIT. +Support will be introduced in one of the upcoming releases. + + + + +## Control-plane node scaling + +Control-plane nodes can **only be scaled manually and only scaled up**! + +To increase the number of control-plane nodes, follow these steps: + + + + +1. Go to Auto Scaling Groups and select the control-plane ASG to scale up. +2. Click **Edit** +3. Set the new (increased) **Desired capacity** and **Update**. + + + + +1. Find your Constellation resource group. +2. Select the `scale-set-controlplanes`. +3. Go to **settings** and **scaling**. +4. Set the new (increased) **instance count** and **save**. + + + + +1. In Compute Engine go to [Instance Groups](https://console.cloud.google.com/compute/instanceGroups/). +2. **Edit** the **control-plane** instance group. +3. Set the new (increased) **number of instances** and **save**. + + + + +Dynamic cluster scaling isn't yet supported for STACKIT. +Support will be introduced in one of the upcoming releases. + + + + +If you scale down the number of control-planes nodes, the removed nodes won't be able to exit the `etcd` cluster correctly. This will endanger the quorum that's required to run a stable Kubernetes control plane. diff --git a/docs/versioned_docs/version-2.21/workflows/storage.md b/docs/versioned_docs/version-2.21/workflows/storage.md new file mode 100644 index 000000000..a5c52be90 --- /dev/null +++ b/docs/versioned_docs/version-2.21/workflows/storage.md @@ -0,0 +1,281 @@ +# Use persistent storage + +Persistent storage in Kubernetes requires cloud-specific configuration. +For abstraction of container storage, Kubernetes offers [volumes](https://kubernetes.io/docs/concepts/storage/volumes/), +allowing users to mount storage solutions directly into containers. +The [Container Storage Interface (CSI)](https://kubernetes-csi.github.io/docs/) is the standard interface for exposing arbitrary block and file storage systems into containers in Kubernetes. +Cloud service providers (CSPs) offer their own CSI-based solutions for cloud storage. + +## Confidential storage + +Most cloud storage solutions support encryption, such as [GCE Persistent Disks (PD)](https://cloud.google.com/kubernetes-engine/docs/how-to/using-cmek). +Constellation supports the available CSI-based storage options for Kubernetes engines in AWS, Azure, GCP, and STACKIT. +However, their encryption takes place in the storage backend and is managed by the CSP. +Thus, using the default CSI drivers for these storage types means trusting the CSP with your persistent data. + +To address this, Constellation provides CSI drivers for AWS EBS, Azure Disk, GCE PD, and OpenStack Cinder, offering [encryption on the node level](../architecture/keys.md#storage-encryption). They enable transparent encryption for persistent volumes without needing to trust the cloud backend. Plaintext data never leaves the confidential VM context, offering you confidential storage. + +For more details see [encrypted persistent storage](../architecture/encrypted-storage.md). + +## CSI drivers + +Constellation supports the following drivers, which offer node-level encryption and optional integrity protection. + + + + +**Constellation CSI driver for AWS Elastic Block Store** +Mount [Elastic Block Store](https://aws.amazon.com/ebs/) storage volumes into your Constellation cluster. +Follow the instructions on how to [install the Constellation CSI driver](#installation) or check out the [repository](https://github.com/edgelesssys/constellation-aws-ebs-csi-driver) for more information. + + + + +**Constellation CSI driver for Azure Disk**: +Mount Azure [Disk Storage](https://azure.microsoft.com/en-us/services/storage/disks/#overview) into your Constellation cluster. +See the instructions on how to [install the Constellation CSI driver](#installation) or check out the [repository](https://github.com/edgelesssys/constellation-azuredisk-csi-driver) for more information. +Since Azure Disks are mounted as `ReadWriteOnce`, they're only available to a single pod. + + + + +**Constellation CSI driver for GCP Persistent Disk**: +Mount [Persistent Disk](https://cloud.google.com/persistent-disk) block storage into your Constellation cluster. +Follow the instructions on how to [install the Constellation CSI driver](#installation) or check out the [repository](https://github.com/edgelesssys/constellation-gcp-compute-persistent-disk-csi-driver) for more information. + + + + +**Constellation CSI driver for STACKIT / OpenStack Cinder** +Mount [Cinder](https://docs.openstack.org/cinder/latest/) block storage volumes into your Constellation cluster. +Follow the instructions on how to [install the Constellation CSI driver](#installation) or check out the [repository](https://github.com/edgelesssys/constellation-cloud-provider-openstack) for more information. + + + + +Note that in case the options above aren't a suitable solution for you, Constellation is compatible with all other CSI-based storage options. For example, you can use [AWS EFS](https://docs.aws.amazon.com/en_en/eks/latest/userguide/efs-csi.html), [Azure Files](https://docs.microsoft.com/en-us/azure/storage/files/storage-files-introduction), or [GCP Filestore](https://cloud.google.com/filestore) with Constellation out of the box. Constellation is just not providing transparent encryption on the node level for these storage types yet. + +## Installation + +The Constellation CLI automatically installs Constellation's CSI driver for the selected CSP in your cluster. +If you don't need a CSI driver or wish to deploy your own, you can disable the automatic installation by setting `deployCSIDriver` to `false` in your Constellation config file. + + + + +AWS comes with two storage classes by default. + +* `encrypted-rwo` + * Uses [SSDs of `gp3` type](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-volume-types.html) + * ext-4 filesystem + * Encryption of all data written to disk +* `integrity-encrypted-rwo` + * Uses [SSDs of `gp3` type](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-volume-types.html) + * ext-4 filesystem + * Encryption of all data written to disk + * Integrity protection of data written to disk + +For more information on encryption algorithms and key sizes, refer to [cryptographic algorithms](../architecture/encrypted-storage.md#cryptographic-algorithms). + +:::info + +The default storage class is set to `encrypted-rwo` for performance reasons. +If you want integrity-protected storage, set the `storageClassName` parameter of your persistent volume claim to `integrity-encrypted-rwo`. + +Alternatively, you can create your own storage class with integrity protection enabled by adding `csi.storage.k8s.io/fstype: ext4-integrity` to the class `parameters`. +Or use another filesystem by specifying another file system type with the suffix `-integrity`, e.g., `csi.storage.k8s.io/fstype: xfs-integrity`. + +Note that volume expansion isn't supported for integrity-protected disks. + +::: + + + + +Azure comes with two storage classes by default. + +* `encrypted-rwo` + * Uses [Standard SSDs](https://learn.microsoft.com/en-us/azure/virtual-machines/disks-types#standard-ssds) + * ext-4 filesystem + * Encryption of all data written to disk +* `integrity-encrypted-rwo` + * Uses [Premium SSDs](https://learn.microsoft.com/en-us/azure/virtual-machines/disks-types#premium-ssds) + * ext-4 filesystem + * Encryption of all data written to disk + * Integrity protection of data written to disk + +For more information on encryption algorithms and key sizes, refer to [cryptographic algorithms](../architecture/encrypted-storage.md#cryptographic-algorithms). + +:::info + +The default storage class is set to `encrypted-rwo` for performance reasons. +If you want integrity-protected storage, set the `storageClassName` parameter of your persistent volume claim to `integrity-encrypted-rwo`. + +Alternatively, you can create your own storage class with integrity protection enabled by adding `csi.storage.k8s.io/fstype: ext4-integrity` to the class `parameters`. +Or use another filesystem by specifying another file system type with the suffix `-integrity`, e.g., `csi.storage.k8s.io/fstype: xfs-integrity`. + +Note that volume expansion isn't supported for integrity-protected disks. + +::: + + + + +GCP comes with two storage classes by default. + +* `encrypted-rwo` + * Uses [standard persistent disks](https://cloud.google.com/compute/docs/disks#pdspecs) + * ext-4 filesystem + * Encryption of all data written to disk +* `integrity-encrypted-rwo` + * Uses [performance (SSD) persistent disks](https://cloud.google.com/compute/docs/disks#pdspecs) + * ext-4 filesystem + * Encryption of all data written to disk + * Integrity protection of data written to disk + +For more information on encryption algorithms and key sizes, refer to [cryptographic algorithms](../architecture/encrypted-storage.md#cryptographic-algorithms). + +:::info + +The default storage class is set to `encrypted-rwo` for performance reasons. +If you want integrity-protected storage, set the `storageClassName` parameter of your persistent volume claim to `integrity-encrypted-rwo`. + +Alternatively, you can create your own storage class with integrity protection enabled by adding `csi.storage.k8s.io/fstype: ext4-integrity` to the class `parameters`. +Or use another filesystem by specifying another file system type with the suffix `-integrity`, e.g., `csi.storage.k8s.io/fstype: xfs-integrity`. + +Note that volume expansion isn't supported for integrity-protected disks. + +::: + + + + +STACKIT comes with two storage classes by default. + +* `encrypted-rwo` + * Uses [disks of `storage_premium_perf1` type](https://docs.stackit.cloud/stackit/en/service-plans-blockstorage-75137974.html) + * ext-4 filesystem + * Encryption of all data written to disk +* `integrity-encrypted-rwo` + * Uses [disks of `storage_premium_perf1` type](https://docs.stackit.cloud/stackit/en/service-plans-blockstorage-75137974.html) + * ext-4 filesystem + * Encryption of all data written to disk + * Integrity protection of data written to disk + +For more information on encryption algorithms and key sizes, refer to [cryptographic algorithms](../architecture/encrypted-storage.md#cryptographic-algorithms). + +:::info + +The default storage class is set to `encrypted-rwo` for performance reasons. +If you want integrity-protected storage, set the `storageClassName` parameter of your persistent volume claim to `integrity-encrypted-rwo`. + +Alternatively, you can create your own storage class with integrity protection enabled by adding `csi.storage.k8s.io/fstype: ext4-integrity` to the class `parameters`. +Or use another filesystem by specifying another file system type with the suffix `-integrity`, e.g., `csi.storage.k8s.io/fstype: xfs-integrity`. + +Note that volume expansion isn't supported for integrity-protected disks. + +::: + + + + +1. Create a [persistent volume](https://kubernetes.io/docs/concepts/storage/persistent-volumes/) + + A [persistent volume claim](https://kubernetes.io/docs/concepts/storage/persistent-volumes/#persistentvolumeclaims) is a request for storage with certain properties. + It can refer to a storage class. + The following creates a persistent volume claim, requesting 20 GB of storage via the `encrypted-rwo` storage class: + + ```bash + cat < + +--- + +You can terminate your cluster using the CLI. For this, you need the Terraform state directory named [`constellation-terraform`](../reference/terraform.md) in the current directory. + +:::danger + +All ephemeral storage and state of your cluster will be lost. Make sure any data is safely stored in persistent storage. Constellation can recreate your cluster and the associated encryption keys, but won't backup your application data automatically. + +::: + + + +Terminate the cluster by running: + +```bash +constellation terminate +``` + +Or without confirmation (e.g., for automation purposes): + +```bash +constellation terminate --yes +``` + +This deletes all resources created by Constellation in your cloud environment. +All local files created by the `apply` command are deleted as well, except for `constellation-mastersecret.json` and the configuration file. + +:::caution + +Termination can fail if additional resources have been created that depend on the ones managed by Constellation. In this case, you need to delete these additional +resources manually. Just run the `terminate` command again afterward to continue the termination process of the cluster. + +::: + + + +Terminate the cluster by running: + +```bash +terraform destroy +``` + +Delete all files that are no longer needed: + +```bash +rm constellation-state.yaml constellation-admin.conf +``` + +Only the `constellation-mastersecret.json` and the configuration file remain. + + + diff --git a/docs/versioned_docs/version-2.21/workflows/terraform-provider.md b/docs/versioned_docs/version-2.21/workflows/terraform-provider.md new file mode 100644 index 000000000..c7a795d3f --- /dev/null +++ b/docs/versioned_docs/version-2.21/workflows/terraform-provider.md @@ -0,0 +1,140 @@ +# Use the Terraform provider + +The Constellation Terraform provider allows to manage the full lifecycle of a Constellation cluster (namely creation, upgrades, and deletion) via Terraform. +The provider is available through the [Terraform registry](https://registry.terraform.io/providers/edgelesssys/constellation/latest) and is released in lock-step with Constellation releases. + +## Prerequisites + +- a Linux / Mac operating system (ARM64/AMD64) +- a Terraform installation of version `v1.4.4` or above + +## Quick setup + +This example shows how to set up a Constellation cluster with the reference IAM and infrastructure setup. This setup is also used when creating a Constellation cluster through the Constellation CLI. You can either consume the IAM / infrastructure modules through a remote source (recommended) or local files. The latter requires downloading the infrastructure and IAM modules for the corresponding CSP from `terraform-modules.zip` on the [Constellation release page](https://github.com/edgelesssys/constellation/releases/latest) and placing them in the Terraform workspace directory. + +1. Create a directory (workspace) for your Constellation cluster. + + ```bash + mkdir constellation-workspace + cd constellation-workspace + ``` + +2. Use one of the [example configurations for using the Constellation Terraform provider](https://github.com/edgelesssys/constellation/tree/main/terraform-provider-constellation/examples/full) or create a `main.tf` file and fill it with the resources you want to create. The [Constellation Terraform provider documentation](https://registry.terraform.io/providers/edgelesssys/constellation/latest) offers thorough documentation on the resources and their attributes. +3. Initialize and apply the Terraform configuration. + + + + Initialize the providers and apply the configuration. + + ```bash + terraform init + terraform apply + ``` + + Optionally, you can prefix the `terraform apply` command with `TF_LOG=INFO` to collect [Terraform logs](https://developer.hashicorp.com/terraform/internals/debugging) while applying the configuration. This may provide helpful output in debugging scenarios. + + + +:::info +On SEV-SNP, you need to manually patch the policy of the MAA provider before creating the Constellation cluster, as this feature isn't available in Azure's Terraform provider yet. The Constellation CLI provides a utility for patching, but you can also do it manually. + + ```bash + terraform init + terraform apply -target module.azure_iam # adjust resource path if not using the example configuration + terraform apply -target module.azure_infrastructure # adjust resource path if not using the example configuration + constellation maa-patch $(terraform output -raw maa_url) # adjust output path / input if not using the example configuration or manually patch the resource + terraform apply -target constellation_cluster.azure_example # adjust resource path if not using the example configuration + ``` + + Use the following policy if manually performing the patch. + + ``` + version= 1.0; + authorizationrules + { + [type=="x-ms-azurevm-default-securebootkeysvalidated", value==false] => deny(); + [type=="x-ms-azurevm-debuggersdisabled", value==false] => deny(); + // The line below was edited to use the MAA provider within Constellation. Do not edit manually. + //[type=="secureboot", value==false] => deny(); + [type=="x-ms-azurevm-signingdisabled", value==false] => deny(); + [type=="x-ms-azurevm-dbvalidated", value==false] => deny(); + [type=="x-ms-azurevm-dbxvalidated", value==false] => deny(); + => permit(); + }; + issuancerules + { + }; + ``` + +::: + + Initialize the providers and apply the configuration. + + ```bash + terraform init + terraform apply + ``` + + Optionally, you can prefix the `terraform apply` command with `TF_LOG=INFO` to collect [Terraform logs](https://developer.hashicorp.com/terraform/internals/debugging) while applying the configuration. This may provide helpful output in debugging scenarios. + + + + + Initialize the providers and apply the configuration. + + ```bash + terraform init + terraform apply + ``` + + Optionally, you can prefix the `terraform apply` command with `TF_LOG=INFO` to collect [Terraform logs](https://developer.hashicorp.com/terraform/internals/debugging) while applying the configuration. This may provide helpful output in debugging scenarios. + + + Initialize the providers and apply the configuration. + + ```bash + terraform init + terraform apply + ``` + + Optionally, you can prefix the `terraform apply` command with `TF_LOG=INFO` to collect [Terraform logs](https://developer.hashicorp.com/terraform/internals/debugging) while applying the configuration. This may provide helpful output in debugging scenarios. + + + +4. Connect to the cluster. + + ```bash + terraform output -raw kubeconfig > constellation-admin.conf + export KUBECONFIG=$(realpath constellation-admin.conf) + ``` + +## Bringing your own infrastructure + +Instead of using the example infrastructure used in the [quick setup](#quick-setup), you can also provide your own infrastructure. +If you need a starting point for a custom infrastructure setup, you can download the infrastructure / IAM Terraform modules for the respective CSP from the Constellation [GitHub releases](https://github.com/edgelesssys/constellation/releases). You can modify and extend the modules per your requirements, while keeping the basic functionality intact. +The module contains: + +- `{csp}`: cloud resources the cluster runs on +- `iam/{csp}`: IAM resources used within the cluster + +When upgrading your cluster, make sure to check the Constellation release notes for potential breaking changes in the reference infrastructure / IAM modules that need to be considered. + +## Cluster upgrades + +:::tip +Also see the [general documentation on cluster upgrades](./upgrade.md). +::: + +The steps for applying the upgrade are as follows: + +1. Update the version constraint of the Constellation Terraform provider in the `required_providers` block in your Terraform configuration. +2. If you explicitly set any of the version attributes of the provider's resources and data sources (e.g. `image_version` or `constellation_microservice_version`), make sure to update them too. Refer to Constellation's [version support policy](https://github.com/edgelesssys/constellation/blob/main/dev-docs/workflows/versions-support.md) for more information on how each Constellation version and its dependencies are supported. +3. Update the IAM / infrastructure configuration. + - For [remote addresses as module sources](https://developer.hashicorp.com/terraform/language/modules/sources#fetching-archives-over-http), update the version number inside the address of the `source` field of the infrastructure / IAM module to the target version. + - For [local paths as module sources](https://developer.hashicorp.com/terraform/language/modules/sources#local-paths) or when [providing your own infrastructure](#bringing-your-own-infrastructure), see the changes made in the reference modules since the upgrade's origin version and adjust your infrastructure / IAM configuration accordingly. +4. Upgrade the Terraform module and provider dependencies and apply the targeted configuration. + +```bash + terraform init -upgrade + terraform apply +``` diff --git a/docs/versioned_docs/version-2.21/workflows/troubleshooting.md b/docs/versioned_docs/version-2.21/workflows/troubleshooting.md new file mode 100644 index 000000000..195bce1cc --- /dev/null +++ b/docs/versioned_docs/version-2.21/workflows/troubleshooting.md @@ -0,0 +1,151 @@ +# Troubleshooting + +This section aids you in finding problems when working with Constellation. + +## Common issues + +### Issues with creating new clusters + +When you create a new cluster, you should always use the [latest release](https://github.com/edgelesssys/constellation/releases/latest). +If something doesn't work, check out the [known issues](https://github.com/edgelesssys/constellation/issues?q=is%3Aopen+is%3Aissue+label%3A%22known+issue%22). + +### Azure: Resource Providers can't be registered + +On Azure, you may receive the following error when running `apply` or `terminate` with limited IAM permissions: + +```shell-session +Error: Error ensuring Resource Providers are registered. + +Terraform automatically attempts to register the Resource Providers it supports to +ensure it's able to provision resources. + +If you don't have permission to register Resource Providers you may wish to use the +"skip_provider_registration" flag in the Provider block to disable this functionality. + +[...] +``` + +To continue, please ensure that the [required resource providers](../getting-started/install.md#required-permissions) have been registered in your subscription by your administrator. + +Afterward, set `ARM_SKIP_PROVIDER_REGISTRATION=true` as an environment variable and either run `apply` or `terminate` again. +For example: + +```bash +ARM_SKIP_PROVIDER_REGISTRATION=true constellation apply +``` + +Or alternatively, for `terminate`: + +```bash +ARM_SKIP_PROVIDER_REGISTRATION=true constellation terminate +``` + +### Azure: Can't update attestation policy + +On Azure, you may receive the following error when running `apply` from within an Azure environment, e.g., an Azure VM: + +```shell-session +An error occurred: patching policies: updating attestation policy: unexpected status code: 403 Forbidden +``` + +The problem occurs because the Azure SDK we use internally attempts to [authenticate towards the Azure API with the managed identity of your current environment instead of the Azure CLI token](https://pkg.go.dev/github.com/Azure/azure-sdk-for-go/sdk/azidentity#DefaultAzureCredential). + +We decided not to deviate from this behavior and comply with the ordering of credentials. + +A solution is to add the [required permissions](../getting-started/install.md#required-permissions) to the managed identity of your environment. For example, the managed identity of your Azure VM, instead of the account that you've authenticated with in the Azure CLI. + +If your setup requires a change in the ordering of credentials, please open an issue and explain your desired behavior. + + + +### Nodes fail to join with error `untrusted measurement value` + +This error indicates that a node's [attestation statement](../architecture/attestation.md) contains measurements that don't match the trusted values expected by the [JoinService](../architecture/microservices.md#joinservice). +This may for example happen if the cloud provider updates the VM's firmware such that it influences the [runtime measurements](../architecture/attestation.md#runtime-measurements) in an unforeseen way. +A failed upgrade due to an erroneous attestation config can also cause this error. +You can change the expected measurements to resolve the failure. + +:::caution + +Attestation and trusted measurements are crucial for the security of your cluster. +Be extra careful when manually changing these settings. +When in doubt, check if the encountered [issue is known](https://github.com/edgelesssys/constellation/issues?q=is%3Aopen+is%3Aissue+label%3A%22known+issue%22) or [contact support](https://github.com/edgelesssys/constellation#support). + +::: + +:::tip + +During an upgrade with modified attestation config, a backup of the current configuration is stored in the `join-config` config map in the `kube-system` namespace under the `attestationConfig_backup` key. To restore the old attestation config after a failed upgrade, replace the value of `attestationConfig` with the value from `attestationConfig_backup`: + +```bash +kubectl patch configmaps -n kube-system join-config -p "{\"data\":{\"attestationConfig\":\"$(kubectl get configmaps -n kube-system join-config -o "jsonpath={.data.attestationConfig_backup}")\"}}" +``` + +::: + +You can use the `apply` command to change measurements of a running cluster: + +1. Modify the `measurements` key in your local `constellation-conf.yaml` to the expected values. +2. Run `constellation apply`. + +Keep in mind that running `apply` also applies any version changes from your config to the cluster. + +You can run these commands to learn about the versions currently configured in the cluster: + +- Kubernetes API server version: `kubectl get nodeversion constellation-version -o json -n kube-system | jq .spec.kubernetesClusterVersion` +- image version: `kubectl get nodeversion constellation-version -o json -n kube-system | jq .spec.imageVersion` +- microservices versions: `helm list --filter 'constellation-services' -n kube-system` + +### Upgrading Kubernetes resources fails + +Constellation manages its Kubernetes resources using Helm. +When applying an upgrade, the charts that are about to be installed, and a values override file `overrides.yaml`, +are saved to disk in your current workspace under `constellation-upgrade/upgrade-/helm-charts/`. +If upgrading the charts using the Constellation CLI fails, you can review these charts and try to manually apply the upgrade. + +:::caution + +Changing and manually applying the charts may destroy cluster resources and can lead to broken Constellation deployments. +Proceed with caution and when in doubt, +check if the encountered [issue is known](https://github.com/edgelesssys/constellation/issues?q=is%3Aopen+is%3Aissue+label%3A%22known+issue%22) or [contact support](https://github.com/edgelesssys/constellation#support). + +::: + +## Diagnosing issues + +### Logs + +To get started on diagnosing issues with Constellation, it's often helpful to collect logs from nodes, pods, or other resources in the cluster. Most logs are available through Kubernetes' standard +[logging interfaces](https://kubernetes.io/docs/concepts/cluster-administration/logging/). + +To debug issues occurring at boot time of the nodes, you can use the serial console interface of the CSP while the machine boots to get a read-only view of the boot logs. + +Apart from that, Constellation also offers further [observability integrations](../architecture/observability.md). + +### Node shell access + +Debugging via a shell on a node is [directly supported by Kubernetes](https://kubernetes.io/docs/tasks/debug/debug-application/debug-running-pod/#node-shell-session). + +1. Figure out which node to connect to: + + ```bash + kubectl get nodes + # or to see more information, such as IPs: + kubectl get nodes -o wide + ``` + +2. Connect to the node: + + ```bash + kubectl debug node/constell-worker-xksa0-000000 -it --image=busybox + ``` + + You will be presented with a prompt. + + The nodes file system is mounted at `/host`. + +3. Once finished, clean up the debug pod: + + ```bash + kubectl delete pod node-debugger-constell-worker-xksa0-000000-bjthj + ``` diff --git a/docs/versioned_docs/version-2.21/workflows/trusted-launch.md b/docs/versioned_docs/version-2.21/workflows/trusted-launch.md new file mode 100644 index 000000000..d6d01d8eb --- /dev/null +++ b/docs/versioned_docs/version-2.21/workflows/trusted-launch.md @@ -0,0 +1,54 @@ +# Use Azure trusted launch VMs + +Constellation also supports [trusted launch VMs](https://docs.microsoft.com/en-us/azure/virtual-machines/trusted-launch) on Microsoft Azure. Trusted launch VMs don't offer the same level of security as Confidential VMs, but are available in more regions and in larger quantities. The main difference between trusted launch VMs and normal VMs is that the former offer vTPM-based remote attestation. When used with trusted launch VMs, Constellation relies on vTPM-based remote attestation to verify nodes. + +:::caution + +Trusted launch VMs don't provide runtime encryption and don't keep the cloud service provider (CSP) out of your trusted computing base. + +::: + +Constellation supports trusted launch VMs with instance types `Standard_D*_v4` and `Standard_E*_v4`. Run `constellation config instance-types` for a list of all supported instance types. + +## VM images + +Azure currently doesn't support [community galleries for trusted launch VMs](https://docs.microsoft.com/en-us/azure/virtual-machines/share-gallery-community). Thus, you need to manually import the Constellation node image into your cloud subscription. + +The latest image is available at `https://cdn.confidential.cloud/constellation/images/azure/trusted-launch/v2.2.0/constellation.img`. Simply adjust the version number to download a newer version. + +After you've downloaded the image, create a resource group `constellation-images` in your Azure subscription and import the image. +You can use a script to do this: + +```bash +wget https://raw.githubusercontent.com/edgelesssys/constellation/main/hack/importAzure.sh +chmod +x importAzure.sh +AZURE_IMAGE_VERSION=2.2.0 AZURE_RESOURCE_GROUP_NAME=constellation-images AZURE_IMAGE_FILE=./constellation.img ./importAzure.sh +``` + +The script creates the following resources: + +1. A new image gallery with the default name `constellation-import` +2. A new image definition with the default name `constellation` +3. The actual image with the provided version. In this case `2.2.0` + +Once the import is completed, use the `ID` of the image version in your `constellation-conf.yaml` for the `image` field. Set `confidentialVM` to `false`. + +Fetch the image measurements: + +```bash +IMAGE_VERSION=2.2.0 +URL=https://public-edgeless-constellation.s3.us-east-2.amazonaws.com//communitygalleries/constellationcvm-b3782fa0-0df7-4f2f-963e-fc7fc42663df/images/constellation/versions/$IMAGE_VERSION/measurements.yaml +constellation config fetch-measurements -u$URL -s$URL.sig +``` + +:::info + +The [`constellation apply`](create.md) command will issue a warning because manually imported images aren't recognized as production grade images: + +```shell-session +Configured image doesn't look like a released production image. Double check image before deploying to production. +``` + +Please ignore this warning. + +::: diff --git a/docs/versioned_docs/version-2.21/workflows/upgrade.md b/docs/versioned_docs/version-2.21/workflows/upgrade.md new file mode 100644 index 000000000..3db2ecad6 --- /dev/null +++ b/docs/versioned_docs/version-2.21/workflows/upgrade.md @@ -0,0 +1,110 @@ +# Upgrade your cluster + +Constellation provides an easy way to upgrade all components of your cluster, without disrupting its availability. +Specifically, you can upgrade the Kubernetes version, the nodes' image, and the Constellation microservices. +You configure the desired versions in your local Constellation configuration and trigger upgrades with the `apply` command. +To learn about available versions you use the `upgrade check` command. +Which versions are available depends on the CLI version you are using. + +## Update the CLI + +Each CLI comes with a set of supported microservice and Kubernetes versions. +Most importantly, a given CLI version can only upgrade a cluster of the previous minor version, but not older ones. +This means that you have to upgrade your CLI and cluster one minor version at a time. + +For example, if you are currently on CLI version v2.6 and the latest version is v2.8, you should + +* upgrade the CLI to v2.7, +* upgrade the cluster to v2.7, +* and only then continue upgrading the CLI (and the cluster) to v2.8 after. + +Also note that if your current Kubernetes version isn't supported by the next CLI version, use your current CLI to upgrade to a newer Kubernetes version first. + +To learn which Kubernetes versions are supported by a particular CLI, run [constellation config kubernetes-versions](../reference/cli.md#constellation-config-kubernetes-versions). + +## Migrate the configuration + +The Constellation configuration file is located in the file `constellation-conf.yaml` in your workspace. +Refer to the [migration reference](../reference/migration.md) to check if you need to update fields in your configuration file. +Use [`constellation config migrate`](../reference/cli.md#constellation-config-migrate) to automatically update an old config file to a new format. + +## Check for upgrades + +To learn which versions the current CLI can upgrade to and what's installed in your cluster, run: + +```bash +# Show possible upgrades +constellation upgrade check + +# Show possible upgrades and write them to config file +constellation upgrade check --update-config +``` + +You can either enter the reported target versions into your config manually or run the above command with the `--update-config` flag. +When using this flag, the `kubernetesVersion`, `image`, `microserviceVersion`, and `attestation` fields are overwritten with the smallest available upgrade. + +## Apply the upgrade + +Once you updated your config with the desired versions, you can trigger the upgrade with this command: + +```bash +constellation apply +``` + +Microservice upgrades will be finished within a few minutes, depending on the cluster size. +If you are interested, you can monitor pods restarting in the `kube-system` namespace with your tool of choice. + +Image and Kubernetes upgrades take longer. +For each node in your cluster, a new node has to be created and joined. +The process usually takes up to ten minutes per node. + +When applying an upgrade, the Helm charts for the upgrade as well as backup files of Constellation-managed Custom Resource Definitions, Custom Resources, and Terraform state are created. +You can use the Terraform state backup to restore previous resources in case an upgrade misconfigured or erroneously deleted a resource. +You can use the Custom Resource (Definition) backup files to restore Custom Resources and Definitions manually (e.g., via `kubectl apply`) if the automatic migration of those resources fails. +You can use the Helm charts to manually apply upgrades to the Kubernetes resources, should an upgrade fail. + +:::note + +For advanced users: the upgrade consists of several phases that can be individually skipped through the `--skip-phases` flag. +The phases are `infrastracture` for the cloud resource management through Terraform, `helm` for the chart management of the microservices, `image` for OS image upgrades, and `k8s` for Kubernetes version upgrades. + +::: + +## Check the status + +Upgrades are asynchronous operations. +After you run `apply`, it will take a while until the upgrade has completed. +To understand if an upgrade is finished, you can run: + +```bash +constellation status +``` + +This command displays the following information: + +* The installed services and their versions +* The image and Kubernetes version the cluster is expecting on each node +* How many nodes are up to date + +Here's an example output: + +```shell-session +Target versions: + Image: v2.6.0 + Kubernetes: v1.25.8 +Service versions: + Cilium: v1.12.1 + cert-manager: v1.10.0 + constellation-operators: v2.6.0 + constellation-services: v2.6.0 +Cluster status: Some node versions are out of date + Image: 23/25 + Kubernetes: 25/25 +``` + +This output indicates that the cluster is running Kubernetes version `1.25.8`, and all nodes have the appropriate binaries installed. +23 out of 25 nodes have already upgraded to the targeted image version of `2.6.0`, while two are still in progress. + +## Apply further upgrades + +After the upgrade is finished, you can run `constellation upgrade check` again to see if there are more upgrades available. If so, repeat the process. diff --git a/docs/versioned_docs/version-2.21/workflows/verify-cli.md b/docs/versioned_docs/version-2.21/workflows/verify-cli.md new file mode 100644 index 000000000..e33569d37 --- /dev/null +++ b/docs/versioned_docs/version-2.21/workflows/verify-cli.md @@ -0,0 +1,129 @@ +# Verify the CLI + +:::info +This recording presents the essence of this page. It's recommended to read it in full for the motivation and all details. +::: + + + +--- + +Edgeless Systems uses [sigstore](https://www.sigstore.dev/) and [SLSA](https://slsa.dev) to ensure supply-chain security for the Constellation CLI and node images ("artifacts"). sigstore consists of three components: [Cosign](https://docs.sigstore.dev/cosign/signing/overview/), [Rekor](https://docs.sigstore.dev/logging/overview), and Fulcio. Edgeless Systems uses Cosign to sign artifacts. All signatures are uploaded to the public Rekor transparency log, which resides at `https://rekor.sigstore.dev`. + +:::note +The public key for Edgeless Systems' long-term code-signing key is: + +``` +-----BEGIN PUBLIC KEY----- +MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEf8F1hpmwE+YCFXzjGtaQcrL6XZVT +JmEe5iSLvG1SyQSAew7WdMKF6o9t8e2TFuCkzlOhhlws2OHWbiFZnFWCFw== +-----END PUBLIC KEY----- +``` + +The public key is also available for download at [https://edgeless.systems/es.pub](https://edgeless.systems/es.pub) and in the Twitter profile [@EdgelessSystems](https://twitter.com/EdgelessSystems). +::: + +The Rekor transparency log is a public append-only ledger that verifies and records signatures and associated metadata. The Rekor transparency log enables everyone to observe the sequence of (software) signatures issued by Edgeless Systems and many other parties. The transparency log allows for the public identification of dubious or malicious signatures. + +You should always ensure that (1) your CLI executable was signed with the private key corresponding to the above public key and that (2) there is a corresponding entry in the Rekor transparency log. Both can be done as described in the following. + +:::info +You don't need to verify the Constellation node images. This is done automatically by your CLI and the rest of Constellation. +::: + +## Verify the signature + +:::info +This guide assumes Linux on an amd64 processor. The exact steps for other platforms differ slightly. +::: + +First, [install the Cosign CLI](https://docs.sigstore.dev/cosign/system_config/installation/). Next, [download](https://github.com/edgelesssys/constellation/releases) and verify the signature that accompanies your CLI executable, for example: + +```shell-session +$ cosign verify-blob --key https://edgeless.systems/es.pub --signature constellation-linux-amd64.sig constellation-linux-amd64 + +Verified OK +``` + +The above performs an offline verification of the provided public key, signature, and executable. To also verify that a corresponding entry exists in the public Rekor transparency log, add the variable `COSIGN_EXPERIMENTAL=1`: + +```shell-session +$ COSIGN_EXPERIMENTAL=1 cosign verify-blob --key https://edgeless.systems/es.pub --signature constellation-linux-amd64.sig constellation-linux-amd64 + +tlog entry verified with uuid: afaba7f6635b3e058888692841848e5514357315be9528474b23f5dcccb82b13 index: 3477047 +Verified OK +``` + +🏁 You now know that your CLI executable was officially released and signed by Edgeless Systems. + +### Optional: Manually inspect the transparency log + +To further inspect the public Rekor transparency log, [install the Rekor CLI](https://docs.sigstore.dev/logging/installation). A search for the CLI executable should give a single UUID. (Note that this UUID contains the UUID from the previous `cosign` command.) + +```shell-session +$ rekor-cli search --artifact constellation-linux-amd64 + +Found matching entries (listed by UUID): +362f8ecba72f4326afaba7f6635b3e058888692841848e5514357315be9528474b23f5dcccb82b13 +``` + +With this UUID you can get the full entry from the transparency log: + +```shell-session +$ rekor-cli get --uuid=362f8ecba72f4326afaba7f6635b3e058888692841848e5514357315be9528474b23f5dcccb82b13 + +LogID: c0d23d6ad406973f9559f3ba2d1ca01f84147d8ffc5b8445c224f98b9591801d +Index: 3477047 +IntegratedTime: 2022-09-12T22:28:16Z +UUID: afaba7f6635b3e058888692841848e5514357315be9528474b23f5dcccb82b13 +Body: { + "HashedRekordObj": { + "data": { + "hash": { + "algorithm": "sha256", + "value": "40e137b9b9b8204d672642fd1e181c6d5ccb50cfc5cc7fcbb06a8c2c78f44aff" + } + }, + "signature": { + "content": "MEUCIQCSER3mGj+j5Pr2kOXTlCIHQC3gT30I7qkLr9Awt6eUUQIgcLUKRIlY50UN8JGwVeNgkBZyYD8HMxwC/LFRWoMn180=", + "publicKey": { + "content": "LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFZjhGMWhwbXdFK1lDRlh6akd0YVFjckw2WFpWVApKbUVlNWlTTHZHMVN5UVNBZXc3V2RNS0Y2bzl0OGUyVEZ1Q2t6bE9oaGx3czJPSFdiaUZabkZXQ0Z3PT0KLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tCg==" + } + } + } +} +``` + +The field `publicKey` should contain Edgeless Systems' public key in Base64 encoding. + +You can get an exhaustive list of artifact signatures issued by Edgeless Systems via the following command: + +```bash +rekor-cli search --public-key https://edgeless.systems/es.pub --pki-format x509 +``` + +Edgeless Systems monitors this list to detect potential unauthorized use of its private key. + +## Verify the provenance + +Provenance attests that a software artifact was produced by a specific repository and build system invocation. For more information on provenance visit [slsa.dev](https://slsa.dev/provenance/v0.2) and learn about the [adoption of SLSA for Constellation](../reference/slsa.md). + +Just as checking its signature proves that the CLI hasn't been manipulated, checking the provenance proves that the artifact was produced by the expected build process and hasn't been tampered with. + +To verify the provenance, first install the [slsa-verifier](https://github.com/slsa-framework/slsa-verifier). Then make sure you have the provenance file (`constellation.intoto.jsonl`) and Constellation CLI downloaded. Both are available on the [GitHub release page](https://github.com/edgelesssys/constellation/releases). + +:::info +The same provenance file is valid for all Constellation CLI executables of a given version independent of the target platform. +::: + +Use the verifier to perform the check: + +```shell-session +$ slsa-verifier verify-artifact constellation-linux-amd64 \ + --provenance-path constellation.intoto.jsonl \ + --source-uri github.com/edgelesssys/constellation + +Verified signature against tlog entry index 7771317 at URL: https://rekor.sigstore.dev/api/v1/log/entries/24296fb24b8ad77af2c04c8b4ae0d5bc5... +Verified build using builder https://github.com/slsa-framework/slsa-github-generator/.github/workflows/generator_generic_slsa3.yml@refs/tags/v1.2.2 at commit 18e9924b416323c37b9cdfd6cc728de8a947424a +PASSED: Verified SLSA provenance +``` diff --git a/docs/versioned_docs/version-2.21/workflows/verify-cluster.md b/docs/versioned_docs/version-2.21/workflows/verify-cluster.md new file mode 100644 index 000000000..b6595ebf2 --- /dev/null +++ b/docs/versioned_docs/version-2.21/workflows/verify-cluster.md @@ -0,0 +1,97 @@ +# Verify your cluster + +Constellation's [attestation feature](../architecture/attestation.md) allows you, or a third party, to verify the integrity and confidentiality of your Constellation cluster. + +## Fetch measurements + +To verify the integrity of Constellation you need trusted measurements to verify against. For each node image released by Edgeless Systems, there are signed measurements, which you can download using the CLI: + +```bash +constellation config fetch-measurements +``` + +This command performs the following steps: + +1. Download the signed measurements for the configured image. By default, this will use Edgeless Systems' public measurement registry. +2. Verify the signature of the measurements. This will use Edgeless Systems' [public key](https://edgeless.systems/es.pub). +3. Write measurements into configuration file. + +The configuration file then contains a list of `measurements` similar to the following: + +```yaml +# ... +measurements: + 0: + expected: "0f35c214608d93c7a6e68ae7359b4a8be5a0e99eea9107ece427c4dea4e439cf" + warnOnly: false + 4: + expected: "02c7a67c01ec70ffaf23d73a12f749ab150a8ac6dc529bda2fe1096a98bf42ea" + warnOnly: false + 5: + expected: "e6949026b72e5045706cd1318889b3874480f7a3f7c5c590912391a2d15e6975" + warnOnly: true + 8: + expected: "0000000000000000000000000000000000000000000000000000000000000000" + warnOnly: false + 9: + expected: "f0a6e8601b00e2fdc57195686cd4ef45eb43a556ac1209b8e25d993213d68384" + warnOnly: false + 11: + expected: "0000000000000000000000000000000000000000000000000000000000000000" + warnOnly: false + 12: + expected: "da99eb6cf7c7fbb692067c87fd5ca0b7117dc293578e4fea41f95d3d3d6af5e2" + warnOnly: false + 13: + expected: "0000000000000000000000000000000000000000000000000000000000000000" + warnOnly: false + 14: + expected: "d7c4cc7ff7933022f013e03bdee875b91720b5b86cf1753cad830f95e791926f" + warnOnly: true + 15: + expected: "0000000000000000000000000000000000000000000000000000000000000000" + warnOnly: false +# ... +``` + +Each entry specifies the expected value of the Constellation node, and whether the measurement should be enforced (`warnOnly: false`), or only a warning should be logged (`warnOnly: true`). +By default, the subset of the [available measurements](../architecture/attestation.md#runtime-measurements) that can be locally reproduced and verified is enforced. + +During attestation, the validating side (CLI or [join service](../architecture/microservices.md#joinservice)) compares each measurement reported by the issuing side (first node or joining node) individually. +For mismatching measurements that have set `warnOnly` to `true` only a warning is emitted. +For mismatching measurements that have set `warnOnly` to `false` an error is emitted and attestation fails. +If attestation fails for a new node, it isn't permitted to join the cluster. + +## The *verify* command + +:::note +The steps below are purely optional. They're automatically executed by `constellation apply` when you initialize your cluster. The `constellation verify` command mostly has an illustrative purpose. +::: + +The `verify` command obtains and verifies an attestation statement from a running Constellation cluster. + +```bash +constellation verify [--cluster-id ...] +``` + +From the attestation statement, the command verifies the following properties: + +* The cluster is using the correct Confidential VM (CVM) type. +* Inside the CVMs, the correct node images are running. The node images are identified through the measurements obtained in the previous step. +* The unique ID of the cluster matches the one from your `constellation-state.yaml` file or passed in via `--cluster-id`. + +Once the above properties are verified, you know that you are talking to the right Constellation cluster and it's in a good and trustworthy shape. + +### Custom arguments + +The `verify` command also allows you to verify any Constellation deployment that you have network access to. For this you need the following: + +* The IP address of a running Constellation cluster's [VerificationService](../architecture/microservices.md#verificationservice). The `VerificationService` is exposed via a `NodePort` service using the external IP address of your cluster. Run `kubectl get nodes -o wide` and look for `EXTERNAL-IP`. +* The cluster's *clusterID*. See [cluster identity](../architecture/keys.md#cluster-identity) for more details. +* A `constellation-conf.yaml` file with the expected measurements of the cluster in your working directory. + +For example: + +```shell-session +constellation verify -e 192.0.2.1 --cluster-id Q29uc3RlbGxhdGlvbkRvY3VtZW50YXRpb25TZWNyZXQ= +``` diff --git a/docs/versioned_sidebars/version-2.21-sidebars.json b/docs/versioned_sidebars/version-2.21-sidebars.json new file mode 100644 index 000000000..c9937ab4f --- /dev/null +++ b/docs/versioned_sidebars/version-2.21-sidebars.json @@ -0,0 +1,304 @@ +{ + "docs": [ + { + "type": "doc", + "label": "Introduction", + "id": "intro" + }, + { + "type": "category", + "label": "Basics", + "link": { + "type": "generated-index" + }, + "items": [ + { + "type": "doc", + "label": "Confidential Kubernetes", + "id": "overview/confidential-kubernetes" + }, + { + "type": "doc", + "label": "Security benefits", + "id": "overview/security-benefits" + }, + { + "type": "doc", + "label": "Product features", + "id": "overview/product" + }, + { + "type": "doc", + "label": "Feature status of clouds", + "id": "overview/clouds" + }, + { + "type": "category", + "label": "Performance", + "link": { + "type": "doc", + "id": "overview/performance/performance" + }, + "items": [ + { + "type": "doc", + "label": "Compute benchmarks", + "id": "overview/performance/compute" + }, + { + "type": "doc", + "label": "I/O benchmarks", + "id": "overview/performance/io" + }, + { + "type": "doc", + "label": "Application benchmarks", + "id": "overview/performance/application" + } + ] + }, + { + "type": "doc", + "label": "License", + "id": "overview/license" + } + ] + }, + { + "type": "category", + "label": "Getting started", + "link": { + "type": "generated-index" + }, + "items": [ + { + "type": "doc", + "label": "Installation", + "id": "getting-started/install" + }, + { + "type": "doc", + "label": "First steps (cloud)", + "id": "getting-started/first-steps" + }, + { + "type": "doc", + "label": "First steps (local)", + "id": "getting-started/first-steps-local" + }, + { + "type": "doc", + "label": "Cloud Marketplaces", + "id": "getting-started/marketplaces" + }, + { + "type": "category", + "label": "Examples", + "link": { + "type": "doc", + "id": "getting-started/examples" + }, + "items": [ + { + "type": "doc", + "label": "Emojivoto", + "id": "getting-started/examples/emojivoto" + }, + { + "type": "doc", + "label": "Online Boutique", + "id": "getting-started/examples/online-boutique" + }, + { + "type": "doc", + "label": "Horizontal Pod Autoscaling", + "id": "getting-started/examples/horizontal-scaling" + }, + { + "type": "doc", + "label": "Filestash with s3proxy", + "id": "getting-started/examples/filestash-s3proxy" + } + ] + } + ] + }, + { + "type": "category", + "label": "Workflows", + "link": { + "type": "generated-index" + }, + "items": [ + { + "type": "doc", + "label": "Verify the CLI", + "id": "workflows/verify-cli" + }, + { + "type": "doc", + "label": "Configure your cluster", + "id": "workflows/config" + }, + { + "type": "doc", + "label": "Create your cluster", + "id": "workflows/create" + }, + { + "type": "doc", + "label": "Scale your cluster", + "id": "workflows/scale" + }, + { + "type": "doc", + "label": "Upgrade your cluster", + "id": "workflows/upgrade" + }, + { + "type": "doc", + "label": "Expose a service", + "id": "workflows/lb" + }, + { + "type": "doc", + "label": "Install cert-manager", + "id": "workflows/cert-manager" + }, + { + "type": "doc", + "label": "Install s3proxy", + "id": "workflows/s3proxy" + }, + { + "type": "doc", + "label": "Terminate your cluster", + "id": "workflows/terminate" + }, + { + "type": "doc", + "label": "Recover your cluster", + "id": "workflows/recovery" + }, + { + "type": "doc", + "label": "Verify your cluster", + "id": "workflows/verify-cluster" + }, + { + "type": "doc", + "label": "Use persistent storage", + "id": "workflows/storage" + }, + { + "type": "doc", + "label": "Use the Terraform provider", + "id": "workflows/terraform-provider" + }, + { + "type": "doc", + "label": "Consume SBOMs", + "id": "workflows/sbom" + }, + { + "type": "doc", + "label": "Reproduce release artifacts", + "id": "workflows/reproducible-builds" + }, + { + "type": "doc", + "label": "Troubleshooting", + "id": "workflows/troubleshooting" + } + ] + }, + { + "type": "category", + "label": "Architecture", + "link": { + "type": "generated-index" + }, + "items": [ + { + "type": "doc", + "label": "Overview", + "id": "architecture/overview" + }, + { + "type": "doc", + "label": "Cluster orchestration", + "id": "architecture/orchestration" + }, + { + "type": "doc", + "label": "Versions and support", + "id": "architecture/versions" + }, + { + "type": "doc", + "label": "Microservices", + "id": "architecture/microservices" + }, + { + "type": "doc", + "label": "Attestation", + "id": "architecture/attestation" + }, + { + "type": "doc", + "label": "Images", + "id": "architecture/images" + }, + { + "type": "doc", + "label": "Keys and cryptographic primitives", + "id": "architecture/keys" + }, + { + "type": "doc", + "label": "Encrypted persistent storage", + "id": "architecture/encrypted-storage" + }, + { + "type": "doc", + "label": "Networking", + "id": "architecture/networking" + }, + { + "type": "doc", + "label": "Observability", + "id": "architecture/observability" + } + ] + }, + { + "type": "category", + "label": "Reference", + "link": { + "type": "generated-index" + }, + "items": [ + { + "type": "doc", + "label": "CLI", + "id": "reference/cli" + }, + { + "type": "doc", + "label": "Configuration migrations", + "id": "reference/migration" + }, + { + "type": "doc", + "label": "Terraform usage", + "id": "reference/terraform" + }, + { + "type": "doc", + "label": "SLSA adoption", + "id": "reference/slsa" + } + ] + } + ] +} diff --git a/docs/versions.json b/docs/versions.json index 0cdf61905..a78b65348 100644 --- a/docs/versions.json +++ b/docs/versions.json @@ -1,4 +1,5 @@ [ + "2.21", "2.20", "2.19", "2.18", diff --git a/version.txt b/version.txt index e34e2ae38..cf313fcea 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -v2.21.0-pre +v2.22.0-pre From 7fdece4d6c048a0d28af91fe20d26720159d30d2 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 4 Mar 2025 12:46:12 +0100 Subject: [PATCH 134/311] deps: update K8s constrained Azure versions (#3669) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- internal/versions/versions.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/internal/versions/versions.go b/internal/versions/versions.go index d1b4db2ef..b4063723c 100644 --- a/internal/versions/versions.go +++ b/internal/versions/versions.go @@ -319,10 +319,10 @@ var VersionConfigs = map[ValidK8sVersion]KubernetesVersion{ CloudControllerManagerImageAWS: "registry.k8s.io/provider-aws/cloud-controller-manager:v1.30.8@sha256:f4e82b924e967656d8df9f467c9c1915509e94e228b53840a7f9f2367e1ba9f5", // renovate:container // CloudControllerManagerImageAzure is the CCM image used on Azure. // Check for newer versions at https://github.com/kubernetes-sigs/cloud-provider-azure/blob/master/README.md. - CloudControllerManagerImageAzure: "mcr.microsoft.com/oss/kubernetes/azure-cloud-controller-manager:v1.30.8@sha256:8956b68b9914fe2d5d3b360406bb0db8e4b222d75e231786f3695879c605b8df", // renovate:container + CloudControllerManagerImageAzure: "mcr.microsoft.com/oss/kubernetes/azure-cloud-controller-manager:v1.30.9@sha256:7bf207a07de2c900b401bb4fb06fb8fa52d1c97491d204d357f232ea66f1883e", // renovate:container // CloudNodeManagerImageAzure is the cloud-node-manager image used on Azure. // Check for newer versions at https://github.com/kubernetes-sigs/cloud-provider-azure/blob/master/README.md. - CloudNodeManagerImageAzure: "mcr.microsoft.com/oss/kubernetes/azure-cloud-node-manager:v1.30.8@sha256:0ad7ecf741f30b35ea62072e3c552a2d6ef09b549ac8644b2f6482dddbfd79fd", // renovate:container + CloudNodeManagerImageAzure: "mcr.microsoft.com/oss/kubernetes/azure-cloud-node-manager:v1.30.9@sha256:68b45ebce86f9714e3cb89c6f86e7d1e727c3612e973471b969be8b007bbd6fe", // renovate:container // CloudControllerManagerImageGCP is the CCM image used on GCP. CloudControllerManagerImageGCP: "ghcr.io/edgelesssys/cloud-provider-gcp:v30.1.4@sha256:0c3695a18d3825492196facb092e5fe56e466fa8517cde5a206fe21630c1da13", // renovate:container // CloudControllerManagerImageOpenStack is the CCM image used on OpenStack. @@ -386,10 +386,10 @@ var VersionConfigs = map[ValidK8sVersion]KubernetesVersion{ CloudControllerManagerImageAWS: "registry.k8s.io/provider-aws/cloud-controller-manager:v1.31.5@sha256:6f94a695828de888c8efc57e3243db9e788709767f687a6a8cb07c2e42158862", // renovate:container // CloudControllerManagerImageAzure is the CCM image used on Azure. // Check for newer versions at https://github.com/kubernetes-sigs/cloud-provider-azure/blob/master/README.md. - CloudControllerManagerImageAzure: "mcr.microsoft.com/oss/kubernetes/azure-cloud-controller-manager:v1.31.1@sha256:b5aa55a7e9d38137f7fcd0adc9335b06e7c96061764addd7e6bb9f86403f0110", // renovate:container + CloudControllerManagerImageAzure: "mcr.microsoft.com/oss/kubernetes/azure-cloud-controller-manager:v1.31.3@sha256:d9575058b0292830ac77c9e5e4b4813c38de12a64b757d01dbbf7a3292c7ccb8", // renovate:container // CloudNodeManagerImageAzure is the cloud-node-manager image used on Azure. // Check for newer versions at https://github.com/kubernetes-sigs/cloud-provider-azure/blob/master/README.md. - CloudNodeManagerImageAzure: "mcr.microsoft.com/oss/kubernetes/azure-cloud-node-manager:v1.31.1@sha256:e9b522399e4ec6bc4ce90c173e59db135d742de7b16f0f5454b4d88ba78a98c7", // renovate:container + CloudNodeManagerImageAzure: "mcr.microsoft.com/oss/kubernetes/azure-cloud-node-manager:v1.31.3@sha256:51efddc331c88cccf19d369c9f8850d3b8c91e9dd833ef5bfb3a6411a0d22f86", // renovate:container // CloudControllerManagerImageGCP is the CCM image used on GCP. CloudControllerManagerImageGCP: "ghcr.io/edgelesssys/cloud-provider-gcp:v30.1.4@sha256:0c3695a18d3825492196facb092e5fe56e466fa8517cde5a206fe21630c1da13", // renovate:container // CloudControllerManagerImageOpenStack is the CCM image used on OpenStack. From 84075ca052a430f8241e232e56994e009aee8b38 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 5 Mar 2025 14:01:53 +0100 Subject: [PATCH 135/311] deps: update Go dependencies (#3676) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * deps: update Go dependencies * deps: keep google/go-tpm-tools at v0.4.4 * deps: upgrade rules_go to v0.53.0 * deps: re-generate files * deps: upgrade go-jose/v3 to v3.0.4 --------- Signed-off-by: Daniel Weiße Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- MODULE.bazel | 2 +- MODULE.bazel.lock | 4 +- bootstrapper/initproto/init.pb.go | 2 +- debugd/service/debugd.pb.go | 2 +- disk-mapper/recoverproto/recover.pb.go | 2 +- go.mod | 211 +++++----- go.sum | 379 +++++++++--------- hack/tools/go.mod | 16 +- hack/tools/go.sum | 32 +- internal/versions/components/components.pb.go | 2 +- joinservice/joinproto/join.pb.go | 2 +- keyservice/keyserviceproto/keyservice.pb.go | 2 +- upgrade-agent/upgradeproto/upgrade.pb.go | 2 +- verify/verifyproto/verify.pb.go | 2 +- 14 files changed, 331 insertions(+), 329 deletions(-) diff --git a/MODULE.bazel b/MODULE.bazel index 64728fcc5..da6b6454f 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -11,7 +11,7 @@ bazel_dep(name = "bazel_skylib", version = "1.7.1") bazel_dep(name = "gazelle", version = "0.42.0") bazel_dep(name = "hermetic_cc_toolchain", version = "3.1.1") bazel_dep(name = "rules_cc", version = "0.1.1") -bazel_dep(name = "rules_go", version = "0.52.0", repo_name = "io_bazel_rules_go") +bazel_dep(name = "rules_go", version = "0.53.0", repo_name = "io_bazel_rules_go") bazel_dep(name = "rules_pkg", version = "1.0.1") bazel_dep(name = "rules_proto", version = "7.1.0") bazel_dep(name = "rules_python", version = "1.1.0") diff --git a/MODULE.bazel.lock b/MODULE.bazel.lock index 821e2e9b3..8e172f60f 100644 --- a/MODULE.bazel.lock +++ b/MODULE.bazel.lock @@ -100,8 +100,8 @@ "https://bcr.bazel.build/modules/rules_go/0.42.0/MODULE.bazel": "8cfa875b9aa8c6fce2b2e5925e73c1388173ea3c32a0db4d2b4804b453c14270", "https://bcr.bazel.build/modules/rules_go/0.46.0/MODULE.bazel": "3477df8bdcc49e698b9d25f734c4f3a9f5931ff34ee48a2c662be168f5f2d3fd", "https://bcr.bazel.build/modules/rules_go/0.50.1/MODULE.bazel": "b91a308dc5782bb0a8021ad4330c81fea5bda77f96b9e4c117b9b9c8f6665ee0", - "https://bcr.bazel.build/modules/rules_go/0.52.0/MODULE.bazel": "0cf080a2706aa8fc9abf64286cee60fdf0238db37b7f1793b0f7d550d59ea3ae", - "https://bcr.bazel.build/modules/rules_go/0.52.0/source.json": "441bc7591044993dce9fb0377fcadf3086d6afac621b909d17d53858a4a1b8d4", + "https://bcr.bazel.build/modules/rules_go/0.53.0/MODULE.bazel": "a4ed760d3ac0dbc0d7b967631a9a3fd9100d28f7d9fcf214b4df87d4bfff5f9a", + "https://bcr.bazel.build/modules/rules_go/0.53.0/source.json": "c6dc34fb5bb8838652221a167d8f35ca3c8fdcbff8568f13cc75719802f95cff", "https://bcr.bazel.build/modules/rules_java/4.0.0/MODULE.bazel": "5a78a7ae82cd1a33cef56dc578c7d2a46ed0dca12643ee45edbb8417899e6f74", "https://bcr.bazel.build/modules/rules_java/5.3.5/MODULE.bazel": "a4ec4f2db570171e3e5eb753276ee4b389bae16b96207e9d3230895c99644b86", "https://bcr.bazel.build/modules/rules_java/6.3.0/MODULE.bazel": "a97c7678c19f236a956ad260d59c86e10a463badb7eb2eda787490f4c969b963", diff --git a/bootstrapper/initproto/init.pb.go b/bootstrapper/initproto/init.pb.go index e1fa9906d..c4d38f621 100644 --- a/bootstrapper/initproto/init.pb.go +++ b/bootstrapper/initproto/init.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.36.4 +// protoc-gen-go v1.36.5 // protoc v5.29.1 // source: bootstrapper/initproto/init.proto diff --git a/debugd/service/debugd.pb.go b/debugd/service/debugd.pb.go index 4b1e337c4..be0812d4b 100644 --- a/debugd/service/debugd.pb.go +++ b/debugd/service/debugd.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.36.4 +// protoc-gen-go v1.36.5 // protoc v5.29.1 // source: debugd/service/debugd.proto diff --git a/disk-mapper/recoverproto/recover.pb.go b/disk-mapper/recoverproto/recover.pb.go index f42a85121..09918724e 100644 --- a/disk-mapper/recoverproto/recover.pb.go +++ b/disk-mapper/recoverproto/recover.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.36.4 +// protoc-gen-go v1.36.5 // protoc v5.29.1 // source: disk-mapper/recoverproto/recover.proto diff --git a/go.mod b/go.mod index 42558ea75..dc4a1820b 100644 --- a/go.mod +++ b/go.mod @@ -11,83 +11,83 @@ replace github.com/martinjungblut/go-cryptsetup => github.com/daniel-weisse/go-c // See this issue: https://github.com/kubernetes/kubernetes/issues/79384 // And this README: https://github.com/kubernetes/kubernetes/blob/master/staging/README.md replace ( - k8s.io/cloud-provider => k8s.io/cloud-provider v0.32.1 - k8s.io/controller-manager => k8s.io/controller-manager v0.32.1 - k8s.io/cri-client => k8s.io/cri-client v0.32.1 - k8s.io/csi-translation-lib => k8s.io/csi-translation-lib v0.32.1 - k8s.io/dynamic-resource-allocation => k8s.io/dynamic-resource-allocation v0.32.1 - k8s.io/endpointslice => k8s.io/endpointslice v0.32.1 - k8s.io/externaljwt => k8s.io/externaljwt v0.32.1 - k8s.io/kube-aggregator => k8s.io/kube-aggregator v0.32.1 - k8s.io/kube-controller-manager => k8s.io/kube-controller-manager v0.32.1 - k8s.io/kube-proxy => k8s.io/kube-proxy v0.32.1 - k8s.io/kube-scheduler => k8s.io/kube-scheduler v0.32.1 - k8s.io/legacy-cloud-providers => k8s.io/legacy-cloud-providers v0.30.9 - k8s.io/pod-security-admission => k8s.io/pod-security-admission v0.32.1 - k8s.io/sample-apiserver => k8s.io/sample-apiserver v0.32.1 + k8s.io/cloud-provider => k8s.io/cloud-provider v0.32.2 + k8s.io/controller-manager => k8s.io/controller-manager v0.32.2 + k8s.io/cri-client => k8s.io/cri-client v0.32.2 + k8s.io/csi-translation-lib => k8s.io/csi-translation-lib v0.32.2 + k8s.io/dynamic-resource-allocation => k8s.io/dynamic-resource-allocation v0.32.2 + k8s.io/endpointslice => k8s.io/endpointslice v0.32.2 + k8s.io/externaljwt => k8s.io/externaljwt v0.32.2 + k8s.io/kube-aggregator => k8s.io/kube-aggregator v0.32.2 + k8s.io/kube-controller-manager => k8s.io/kube-controller-manager v0.32.2 + k8s.io/kube-proxy => k8s.io/kube-proxy v0.32.2 + k8s.io/kube-scheduler => k8s.io/kube-scheduler v0.32.2 + k8s.io/legacy-cloud-providers => k8s.io/legacy-cloud-providers v0.30.10 + k8s.io/pod-security-admission => k8s.io/pod-security-admission v0.32.2 + k8s.io/sample-apiserver => k8s.io/sample-apiserver v0.32.2 ) require ( - cloud.google.com/go/compute v1.33.0 + cloud.google.com/go/compute v1.34.0 cloud.google.com/go/compute/metadata v0.6.0 - cloud.google.com/go/kms v1.20.5 - cloud.google.com/go/secretmanager v1.14.4 + cloud.google.com/go/kms v1.21.0 + cloud.google.com/go/secretmanager v1.14.5 cloud.google.com/go/storage v1.50.0 dario.cat/mergo v1.0.1 github.com/Azure/azure-sdk-for-go v68.0.0+incompatible github.com/Azure/azure-sdk-for-go/sdk/azcore v1.17.0 - github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.8.1 + github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.8.2 github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v6 v6.3.0 github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/network/armnetwork/v6 v6.2.0 - github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/azsecrets v1.3.0 + github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/azsecrets v1.3.1 github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.6.0 github.com/BurntSushi/toml v1.4.0 github.com/aws/aws-sdk-go v1.55.6 - github.com/aws/aws-sdk-go-v2 v1.36.1 - github.com/aws/aws-sdk-go-v2/config v1.29.6 - github.com/aws/aws-sdk-go-v2/credentials v1.17.59 - github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.28 - github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.59 - github.com/aws/aws-sdk-go-v2/service/autoscaling v1.51.12 - github.com/aws/aws-sdk-go-v2/service/cloudfront v1.44.9 - github.com/aws/aws-sdk-go-v2/service/ec2 v1.202.4 - github.com/aws/aws-sdk-go-v2/service/elasticloadbalancingv2 v1.43.12 - github.com/aws/aws-sdk-go-v2/service/resourcegroupstaggingapi v1.25.18 - github.com/aws/aws-sdk-go-v2/service/s3 v1.75.4 - github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.34.18 - github.com/aws/smithy-go v1.22.2 + github.com/aws/aws-sdk-go-v2 v1.36.3 + github.com/aws/aws-sdk-go-v2/config v1.29.9 + github.com/aws/aws-sdk-go-v2/credentials v1.17.62 + github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.30 + github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.65 + github.com/aws/aws-sdk-go-v2/service/autoscaling v1.52.1 + github.com/aws/aws-sdk-go-v2/service/cloudfront v1.45.1 + github.com/aws/aws-sdk-go-v2/service/ec2 v1.207.1 + github.com/aws/aws-sdk-go-v2/service/elasticloadbalancingv2 v1.44.1 + github.com/aws/aws-sdk-go-v2/service/resourcegroupstaggingapi v1.26.1 + github.com/aws/aws-sdk-go-v2/service/s3 v1.78.1 + github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.35.1 + github.com/aws/smithy-go v1.22.3 github.com/bazelbuild/buildtools v0.0.0-20250204160707-ad48c76ab9b5 - github.com/bazelbuild/rules_go v0.52.0 + github.com/bazelbuild/rules_go v0.53.0 github.com/coreos/go-systemd/v22 v22.5.0 github.com/docker/docker v27.5.1+incompatible github.com/edgelesssys/go-azguestattestation v0.0.0-20250212085035-c38c01af80ba github.com/edgelesssys/go-tdx-qpl v0.0.0-20250129202750-607ac61e2377 - github.com/foxboron/go-uefi v0.0.0-20241219185318-19dc140271bf + github.com/foxboron/go-uefi v0.0.0-20250207204325-69fb7dba244f github.com/fsnotify/fsnotify v1.8.0 github.com/go-playground/locales v0.14.1 github.com/go-playground/universal-translator v0.18.1 - github.com/go-playground/validator/v10 v10.24.0 + github.com/go-playground/validator/v10 v10.25.0 github.com/golang-jwt/jwt/v5 v5.2.1 - github.com/google/go-sev-guest v0.12.2-0.20250205052930-65042ded71f9 - github.com/google/go-tdx-guest v0.3.1 + github.com/google/go-sev-guest v0.13.0 + github.com/google/go-tdx-guest v0.3.2-0.20241009005452-097ee70d0843 github.com/google/go-tpm v0.9.3 github.com/google/go-tpm-tools v0.4.4 github.com/google/uuid v1.6.0 github.com/googleapis/gax-go/v2 v2.14.1 - github.com/gophercloud/gophercloud/v2 v2.4.0 - github.com/gophercloud/utils/v2 v2.0.0-20250205065254-a1bff20237e7 - github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.2.0 + github.com/gophercloud/gophercloud/v2 v2.6.0 + github.com/gophercloud/utils/v2 v2.0.0-20250212084022-725b94822eeb + github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.3.0 github.com/hashicorp/go-kms-wrapping/v2 v2.0.18 github.com/hashicorp/go-kms-wrapping/wrappers/awskms/v2 v2.0.11 - github.com/hashicorp/go-kms-wrapping/wrappers/azurekeyvault/v2 v2.0.13 + github.com/hashicorp/go-kms-wrapping/wrappers/azurekeyvault/v2 v2.0.14 github.com/hashicorp/go-kms-wrapping/wrappers/gcpckms/v2 v2.0.13 github.com/hashicorp/go-version v1.7.0 github.com/hashicorp/hc-install v0.9.1 github.com/hashicorp/hcl/v2 v2.23.0 github.com/hashicorp/terraform-exec v0.22.0 github.com/hashicorp/terraform-json v0.24.0 - github.com/hashicorp/terraform-plugin-framework v1.13.0 - github.com/hashicorp/terraform-plugin-framework-validators v0.16.0 + github.com/hashicorp/terraform-plugin-framework v1.14.1 + github.com/hashicorp/terraform-plugin-framework-validators v0.17.0 github.com/hashicorp/terraform-plugin-go v0.26.0 github.com/hashicorp/terraform-plugin-log v0.9.0 github.com/hashicorp/terraform-plugin-testing v1.11.0 @@ -98,16 +98,16 @@ require ( github.com/onsi/ginkgo/v2 v2.22.2 github.com/onsi/gomega v1.36.2 github.com/pkg/errors v0.9.1 - github.com/regclient/regclient v0.8.0 - github.com/rogpeppe/go-internal v1.13.1 + github.com/regclient/regclient v0.8.2 + github.com/rogpeppe/go-internal v1.14.1 github.com/samber/slog-multi v1.4.0 github.com/schollz/progressbar/v3 v3.18.0 github.com/secure-systems-lab/go-securesystemslib v0.9.0 - github.com/siderolabs/talos/pkg/machinery v1.9.3 + github.com/siderolabs/talos/pkg/machinery v1.9.4 github.com/sigstore/rekor v1.3.9 - github.com/sigstore/sigstore v1.8.12 + github.com/sigstore/sigstore v1.9.0 github.com/spf13/afero v1.12.0 - github.com/spf13/cobra v1.8.1 + github.com/spf13/cobra v1.9.1 github.com/spf13/pflag v1.0.6 github.com/stretchr/testify v1.10.0 github.com/tink-crypto/tink-go/v2 v2.3.0 @@ -116,45 +116,45 @@ require ( go.etcd.io/etcd/client/pkg/v3 v3.5.18 go.etcd.io/etcd/client/v3 v3.5.18 go.uber.org/goleak v1.3.0 - golang.org/x/crypto v0.32.0 + golang.org/x/crypto v0.35.0 golang.org/x/exp v0.0.0-20250128182459-e0ece0dbea4c golang.org/x/mod v0.23.0 golang.org/x/sys v0.30.0 golang.org/x/text v0.22.0 - golang.org/x/tools v0.29.0 - google.golang.org/api v0.220.0 - google.golang.org/grpc v1.70.0 - google.golang.org/protobuf v1.36.4 + golang.org/x/tools v0.30.0 + google.golang.org/api v0.223.0 + google.golang.org/grpc v1.71.0 + google.golang.org/protobuf v1.36.5 gopkg.in/yaml.v3 v3.0.1 - helm.sh/helm/v3 v3.17.0 - k8s.io/api v0.32.1 - k8s.io/apiextensions-apiserver v0.32.1 - k8s.io/apimachinery v0.32.1 - k8s.io/apiserver v0.32.1 - k8s.io/client-go v0.32.1 - k8s.io/cluster-bootstrap v0.32.1 - k8s.io/kubelet v0.32.1 + helm.sh/helm/v3 v3.17.1 + k8s.io/api v0.32.2 + k8s.io/apiextensions-apiserver v0.32.2 + k8s.io/apimachinery v0.32.2 + k8s.io/apiserver v0.32.2 + k8s.io/client-go v0.32.2 + k8s.io/cluster-bootstrap v0.32.2 + k8s.io/kubelet v0.32.2 k8s.io/kubernetes v1.32.2 - k8s.io/mount-utils v0.32.1 + k8s.io/mount-utils v0.32.2 k8s.io/utils v0.0.0-20241210054802-24370beab758 libvirt.org/go/libvirt v1.11001.0 - sigs.k8s.io/controller-runtime v0.20.1 + sigs.k8s.io/controller-runtime v0.20.2 sigs.k8s.io/yaml v1.4.0 ) require ( - cel.dev/expr v0.19.0 // indirect - cloud.google.com/go v0.118.1 // indirect - cloud.google.com/go/auth v0.14.1 // indirect + cel.dev/expr v0.19.1 // indirect + cloud.google.com/go v0.118.2 // indirect + cloud.google.com/go/auth v0.15.0 // indirect cloud.google.com/go/auth/oauth2adapt v0.2.7 // indirect - cloud.google.com/go/iam v1.3.1 // indirect + cloud.google.com/go/iam v1.4.0 // indirect cloud.google.com/go/longrunning v0.6.4 // indirect cloud.google.com/go/monitoring v1.23.0 // indirect github.com/AdaLogics/go-fuzz-headers v0.0.0-20230811130428-ced1acdcaa24 // indirect github.com/Azure/azure-sdk-for-go/sdk/internal v1.10.0 // indirect github.com/Azure/azure-sdk-for-go/sdk/keyvault/azkeys v0.10.0 // indirect github.com/Azure/azure-sdk-for-go/sdk/keyvault/internal v0.7.1 // indirect - github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/internal v1.1.0 // indirect + github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/internal v1.1.1 // indirect github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161 // indirect github.com/Azure/go-autorest v14.2.0+incompatible // indirect github.com/Azure/go-autorest/autorest v0.11.29 // indirect @@ -178,25 +178,25 @@ require ( github.com/agext/levenshtein v1.2.2 // indirect github.com/apparentlymart/go-textseg/v15 v15.0.0 // indirect github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 // indirect - github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.8 // indirect - github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.32 // indirect - github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.32 // indirect - github.com/aws/aws-sdk-go-v2/internal/ini v1.8.2 // indirect - github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.32 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.2 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.5.6 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.13 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.13 // indirect - github.com/aws/aws-sdk-go-v2/service/sso v1.24.15 // indirect - github.com/aws/aws-sdk-go-v2/service/ssooidc v1.28.14 // indirect - github.com/aws/aws-sdk-go-v2/service/sts v1.33.14 // indirect + github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.10 // indirect + github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.34 // indirect + github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.34 // indirect + github.com/aws/aws-sdk-go-v2/internal/ini v1.8.3 // indirect + github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.34 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.3 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.6.2 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.15 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.15 // indirect + github.com/aws/aws-sdk-go-v2/service/sso v1.25.1 // indirect + github.com/aws/aws-sdk-go-v2/service/ssooidc v1.29.1 // indirect + github.com/aws/aws-sdk-go-v2/service/sts v1.33.17 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/blang/semver v3.5.1+incompatible // indirect github.com/blang/semver/v4 v4.0.0 // indirect github.com/cespare/xxhash/v2 v2.3.0 // indirect github.com/chai2010/gettext-go v1.0.2 // indirect github.com/cloudflare/circl v1.5.0 // indirect - github.com/cncf/xds/go v0.0.0-20240905190251-b4127c9b8d78 // indirect + github.com/cncf/xds/go v0.0.0-20241223141626-cff3c89139a3 // indirect github.com/containerd/containerd v1.7.24 // indirect github.com/containerd/errdefs v0.3.0 // indirect github.com/containerd/log v0.1.0 // indirect @@ -204,23 +204,23 @@ require ( github.com/coredns/caddy v1.1.1 // indirect github.com/coredns/corefile-migration v1.0.24 // indirect github.com/coreos/go-semver v0.3.1 // indirect - github.com/cpuguy83/go-md2man/v2 v2.0.4 // indirect + github.com/cpuguy83/go-md2man/v2 v2.0.6 // indirect github.com/cyberphone/json-canonicalization v0.0.0-20220623050100-57a0ce2678a7 // indirect github.com/cyphar/filepath-securejoin v0.3.6 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/distribution/reference v0.6.0 // indirect - github.com/docker/cli v27.1.1+incompatible // indirect + github.com/docker/cli v27.5.0+incompatible // indirect github.com/docker/distribution v2.8.3+incompatible // indirect - github.com/docker/docker-credential-helpers v0.7.0 // indirect + github.com/docker/docker-credential-helpers v0.8.2 // indirect github.com/docker/go-connections v0.5.0 // indirect github.com/docker/go-metrics v0.0.1 // indirect github.com/docker/go-units v0.5.0 // indirect github.com/docker/libtrust v0.0.0-20160708172513-aabc10ec26b7 // indirect github.com/emicklei/go-restful/v3 v3.11.0 // indirect - github.com/envoyproxy/go-control-plane/envoy v1.32.3 // indirect - github.com/envoyproxy/protoc-gen-validate v1.1.0 // indirect + github.com/envoyproxy/go-control-plane/envoy v1.32.4 // indirect + github.com/envoyproxy/protoc-gen-validate v1.2.1 // indirect github.com/evanphx/json-patch v5.9.0+incompatible // indirect - github.com/evanphx/json-patch/v5 v5.9.0 // indirect + github.com/evanphx/json-patch/v5 v5.9.11 // indirect github.com/exponent-io/jsonpath v0.0.0-20210407135951-1de76d718b3f // indirect github.com/fatih/color v1.18.0 // indirect github.com/felixge/httpsnoop v1.0.4 // indirect @@ -229,8 +229,8 @@ require ( github.com/go-chi/chi v4.1.2+incompatible // indirect github.com/go-errors/errors v1.4.2 // indirect github.com/go-gorp/gorp/v3 v3.1.0 // indirect - github.com/go-jose/go-jose/v3 v3.0.3 // indirect - github.com/go-jose/go-jose/v4 v4.0.2 // indirect + github.com/go-jose/go-jose/v3 v3.0.4 // indirect + github.com/go-jose/go-jose/v4 v4.0.5 // indirect github.com/go-logr/logr v1.4.2 // indirect github.com/go-logr/stdr v1.2.2 // indirect github.com/go-logr/zapr v1.3.0 // indirect @@ -255,9 +255,9 @@ require ( github.com/google/certificate-transparency-go v1.1.8 // indirect github.com/google/gnostic-models v0.6.8 // indirect github.com/google/go-attestation v0.5.1 // indirect - github.com/google/go-cmp v0.6.0 // indirect - github.com/google/go-configfs-tsm v0.2.2 // indirect - github.com/google/go-containerregistry v0.20.2 // indirect + github.com/google/go-cmp v0.7.0 // indirect + github.com/google/go-configfs-tsm v0.3.3-0.20240919001351-b4b5b84fdcbc // indirect + github.com/google/go-containerregistry v0.20.3 // indirect github.com/google/go-tspi v0.3.0 // indirect github.com/google/gofuzz v1.2.0 // indirect github.com/google/logger v1.1.1 // indirect @@ -343,6 +343,7 @@ require ( github.com/samber/lo v1.49.1 // indirect github.com/sassoftware/relic v7.2.1+incompatible // indirect github.com/shopspring/decimal v1.4.0 // indirect + github.com/sigstore/protobuf-specs v0.4.0 // indirect github.com/sirupsen/logrus v1.9.3 // indirect github.com/spf13/cast v1.7.0 // indirect github.com/stretchr/objx v0.5.2 // indirect @@ -362,33 +363,33 @@ require ( github.com/zclconf/go-cty v1.16.1 // indirect go.mongodb.org/mongo-driver v1.14.0 // indirect go.opentelemetry.io/auto/sdk v1.1.0 // indirect - go.opentelemetry.io/contrib/detectors/gcp v1.33.0 // indirect - go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.58.0 // indirect - go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.58.0 // indirect + go.opentelemetry.io/contrib/detectors/gcp v1.34.0 // indirect + go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.59.0 // indirect + go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.59.0 // indirect go.opentelemetry.io/otel v1.34.0 // indirect go.opentelemetry.io/otel/metric v1.34.0 // indirect go.opentelemetry.io/otel/sdk v1.34.0 // indirect - go.opentelemetry.io/otel/sdk/metric v1.32.0 // indirect + go.opentelemetry.io/otel/sdk/metric v1.34.0 // indirect go.opentelemetry.io/otel/trace v1.34.0 // indirect go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.27.0 // indirect - golang.org/x/net v0.34.0 // indirect - golang.org/x/oauth2 v0.25.0 // indirect + golang.org/x/net v0.35.0 // indirect + golang.org/x/oauth2 v0.27.0 // indirect golang.org/x/sync v0.11.0 // indirect - golang.org/x/term v0.28.0 // indirect - golang.org/x/time v0.9.0 // indirect + golang.org/x/term v0.29.0 // indirect + golang.org/x/time v0.10.0 // indirect gomodules.xyz/jsonpatch/v2 v2.4.0 // indirect google.golang.org/appengine v1.6.8 // indirect google.golang.org/genproto v0.0.0-20250122153221-138b5a5a4fd4 // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20250124145028-65684f501c47 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20250127172529-29210b9bc287 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20250219182151-9fdb1cabc7b2 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20250219182151-9fdb1cabc7b2 // indirect gopkg.in/evanphx/json-patch.v4 v4.12.0 // indirect gopkg.in/inf.v0 v0.9.1 // indirect - k8s.io/cli-runtime v0.32.0 // indirect - k8s.io/component-base v0.32.1 // indirect + k8s.io/cli-runtime v0.32.1 // indirect + k8s.io/component-base v0.32.2 // indirect k8s.io/klog/v2 v2.130.1 // indirect k8s.io/kube-openapi v0.0.0-20241105132330-32ad38e42d3f // indirect - k8s.io/kubectl v0.32.0 // indirect + k8s.io/kubectl v0.32.1 // indirect oras.land/oras-go v1.2.5 // indirect sigs.k8s.io/json v0.0.0-20241010143419-9aa6b5e7a4b3 // indirect sigs.k8s.io/kustomize/api v0.18.0 // indirect diff --git a/go.sum b/go.sum index fb16e7b13..39280df9a 100644 --- a/go.sum +++ b/go.sum @@ -1,27 +1,27 @@ -cel.dev/expr v0.19.0 h1:lXuo+nDhpyJSpWxpPVi5cPUwzKb+dsdOiw6IreM5yt0= -cel.dev/expr v0.19.0/go.mod h1:MrpN08Q+lEBs+bGYdLxxHkZoUSsCp0nSKTs0nTymJgw= -cloud.google.com/go v0.118.1 h1:b8RATMcrK9A4BH0rj8yQupPXp+aP+cJ0l6H7V9osV1E= -cloud.google.com/go v0.118.1/go.mod h1:CFO4UPEPi8oV21xoezZCrd3d81K4fFkDTEJu4R8K+9M= -cloud.google.com/go/auth v0.14.1 h1:AwoJbzUdxA/whv1qj3TLKwh3XX5sikny2fc40wUl+h0= -cloud.google.com/go/auth v0.14.1/go.mod h1:4JHUxlGXisL0AW8kXPtUF6ztuOksyfUQNFjfsOCXkPM= +cel.dev/expr v0.19.1 h1:NciYrtDRIR0lNCnH1LFJegdjspNx9fI59O7TWcua/W4= +cel.dev/expr v0.19.1/go.mod h1:MrpN08Q+lEBs+bGYdLxxHkZoUSsCp0nSKTs0nTymJgw= +cloud.google.com/go v0.118.2 h1:bKXO7RXMFDkniAAvvuMrAPtQ/VHrs9e7J5UT3yrGdTY= +cloud.google.com/go v0.118.2/go.mod h1:CFO4UPEPi8oV21xoezZCrd3d81K4fFkDTEJu4R8K+9M= +cloud.google.com/go/auth v0.15.0 h1:Ly0u4aA5vG/fsSsxu98qCQBemXtAtJf+95z9HK+cxps= +cloud.google.com/go/auth v0.15.0/go.mod h1:WJDGqZ1o9E9wKIL+IwStfyn/+s59zl4Bi+1KQNVXLZ8= cloud.google.com/go/auth/oauth2adapt v0.2.7 h1:/Lc7xODdqcEw8IrZ9SvwnlLX6j9FHQM74z6cBk9Rw6M= cloud.google.com/go/auth/oauth2adapt v0.2.7/go.mod h1:NTbTTzfvPl1Y3V1nPpOgl2w6d/FjO7NNUQaWSox6ZMc= -cloud.google.com/go/compute v1.33.0 h1:abGcwWokP7/bBpvRjUKlgchrZXYgRpwcKZIlNUHWf6Y= -cloud.google.com/go/compute v1.33.0/go.mod h1:Z8NErRhrWA3RmVWczlAPJjZcRTlqZB1pcpD0MaIc1ug= +cloud.google.com/go/compute v1.34.0 h1:+k/kmViu4TEi97NGaxAATYtpYBviOWJySPZ+ekA95kk= +cloud.google.com/go/compute v1.34.0/go.mod h1:zWZwtLwZQyonEvIQBuIa0WvraMYK69J5eDCOw9VZU4g= cloud.google.com/go/compute/metadata v0.6.0 h1:A6hENjEsCDtC1k8byVsgwvVcioamEHvZ4j01OwKxG9I= cloud.google.com/go/compute/metadata v0.6.0/go.mod h1:FjyFAW1MW0C203CEOMDTu3Dk1FlqW3Rga40jzHL4hfg= -cloud.google.com/go/iam v1.3.1 h1:KFf8SaT71yYq+sQtRISn90Gyhyf4X8RGgeAVC8XGf3E= -cloud.google.com/go/iam v1.3.1/go.mod h1:3wMtuyT4NcbnYNPLMBzYRFiEfjKfJlLVLrisE7bwm34= -cloud.google.com/go/kms v1.20.5 h1:aQQ8esAIVZ1atdJRxihhdxGQ64/zEbJoJnCz/ydSmKg= -cloud.google.com/go/kms v1.20.5/go.mod h1:C5A8M1sv2YWYy1AE6iSrnddSG9lRGdJq5XEdBy28Lmw= +cloud.google.com/go/iam v1.4.0 h1:ZNfy/TYfn2uh/ukvhp783WhnbVluqf/tzOaqVUPlIPA= +cloud.google.com/go/iam v1.4.0/go.mod h1:gMBgqPaERlriaOV0CUl//XUzDhSfXevn4OEUbg6VRs4= +cloud.google.com/go/kms v1.21.0 h1:x3EeWKuYwdlo2HLse/876ZrKjk2L5r7Uexfm8+p6mSI= +cloud.google.com/go/kms v1.21.0/go.mod h1:zoFXMhVVK7lQ3JC9xmhHMoQhnjEDZFoLAr5YMwzBLtk= cloud.google.com/go/logging v1.13.0 h1:7j0HgAp0B94o1YRDqiqm26w4q1rDMH7XNRU34lJXHYc= cloud.google.com/go/logging v1.13.0/go.mod h1:36CoKh6KA/M0PbhPKMq6/qety2DCAErbhXT62TuXALA= cloud.google.com/go/longrunning v0.6.4 h1:3tyw9rO3E2XVXzSApn1gyEEnH2K9SynNQjMlBi3uHLg= cloud.google.com/go/longrunning v0.6.4/go.mod h1:ttZpLCe6e7EXvn9OxpBRx7kZEB0efv8yBO6YnVMfhJs= cloud.google.com/go/monitoring v1.23.0 h1:M3nXww2gn9oZ/qWN2bZ35CjolnVHM3qnSbu6srCPgjk= cloud.google.com/go/monitoring v1.23.0/go.mod h1:034NnlQPDzrQ64G2Gavhl0LUHZs9H3rRmhtnp7jiJgg= -cloud.google.com/go/secretmanager v1.14.4 h1:SMWQMsUcACsdIuVhIBAw+QfKY4Xseiaa8qDnunjmhcM= -cloud.google.com/go/secretmanager v1.14.4/go.mod h1:pjwFw8+A6B4AcWrVXruLfz1QykkpMr8T/VT+zXB91iw= +cloud.google.com/go/secretmanager v1.14.5 h1:W++V0EL9iL6T2+ec24Dm++bIti0tI6Gx6sCosDBters= +cloud.google.com/go/secretmanager v1.14.5/go.mod h1:GXznZF3qqPZDGZQqETZwZqHw4R6KCaYVvcGiRBA+aqY= cloud.google.com/go/storage v1.50.0 h1:3TbVkzTooBvnZsk7WaAQfOsNrdoM8QHusXA1cpk6QJs= cloud.google.com/go/storage v1.50.0/go.mod h1:l7XeiD//vx5lfqE3RavfmU9yvk5Pp0Zhcv482poyafY= cloud.google.com/go/trace v1.11.3 h1:c+I4YFjxRQjvAhRmSsmjpASUKq88chOX854ied0K/pE= @@ -38,10 +38,10 @@ github.com/Azure/azure-sdk-for-go v68.0.0+incompatible h1:fcYLmCpyNYRnvJbPerq7U0 github.com/Azure/azure-sdk-for-go v68.0.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= github.com/Azure/azure-sdk-for-go/sdk/azcore v1.17.0 h1:g0EZJwz7xkXQiZAI5xi9f3WWFYBlX1CPTrR+NDToRkQ= github.com/Azure/azure-sdk-for-go/sdk/azcore v1.17.0/go.mod h1:XCW7KnZet0Opnr7HccfUw1PLc4CjHqpcaxW8DHklNkQ= -github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.8.1 h1:1mvYtZfWQAnwNah/C+Z+Jb9rQH95LPE2vlmMuWAHJk8= -github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.8.1/go.mod h1:75I/mXtme1JyWFtz8GocPHVFyH421IBoZErnO16dd0k= -github.com/Azure/azure-sdk-for-go/sdk/azidentity/cache v0.3.1 h1:Bk5uOhSAenHyR5P61D/NzeQCv+4fEVV8mOkJ82NqpWw= -github.com/Azure/azure-sdk-for-go/sdk/azidentity/cache v0.3.1/go.mod h1:QZ4pw3or1WPmRBxf0cHd1tknzrT54WPBOQoGutCPvSU= +github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.8.2 h1:F0gBpfdPLGsw+nsgk6aqqkZS1jiixa5WwFe3fk/T3Ys= +github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.8.2/go.mod h1:SqINnQ9lVVdRlyC8cd1lCI0SdX4n2paeABd2K8ggfnE= +github.com/Azure/azure-sdk-for-go/sdk/azidentity/cache v0.3.2 h1:yz1bePFlP5Vws5+8ez6T3HWXPmwOK7Yvq8QxDBD3SKY= +github.com/Azure/azure-sdk-for-go/sdk/azidentity/cache v0.3.2/go.mod h1:Pa9ZNPuoNu/GztvBSKk9J1cDJW6vk/n0zLtV4mgd8N8= github.com/Azure/azure-sdk-for-go/sdk/internal v1.10.0 h1:ywEEhmNahHBihViHepv3xPBn1663uRv2t2q/ESv9seY= github.com/Azure/azure-sdk-for-go/sdk/internal v1.10.0/go.mod h1:iZDifYGJTIgIIkYRNWPENUnqx6bJ2xnSDFI2tjwZNuY= github.com/Azure/azure-sdk-for-go/sdk/keyvault/azkeys v0.10.0 h1:m/sWOGCREuSBqg2htVQTBY8nOZpyajYztF0vUvSZTuM= @@ -58,10 +58,10 @@ github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armresources v1. github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armresources v1.2.0/go.mod h1:5kakwfW5CjC9KK+Q4wjXAg+ShuIm2mBMua0ZFj2C8PE= github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/storage/armstorage v1.6.0 h1:PiSrjRPpkQNjrM8H0WwKMnZUdu1RGMtd/LdGKUrOo+c= github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/storage/armstorage v1.6.0/go.mod h1:oDrbWx4ewMylP7xHivfgixbfGBT6APAwsSoHRKotnIc= -github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/azsecrets v1.3.0 h1:WLUIpeyv04H0RCcQHaA4TNoyrQ39Ox7V+re+iaqzTe0= -github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/azsecrets v1.3.0/go.mod h1:hd8hTTIY3VmUVPRHNH7GVCHO3SHgXkJKZHReby/bnUQ= -github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/internal v1.1.0 h1:eXnN9kaS8TiDwXjoie3hMRLuwdUBUMW9KRgOqB3mCaw= -github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/internal v1.1.0/go.mod h1:XIpam8wumeZ5rVMuhdDQLMfIPDf1WO3IzrCRO3e3e3o= +github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/azsecrets v1.3.1 h1:mrkDCdkMsD4l9wjFGhofFHFrV43Y3c53RSLKOCJ5+Ow= +github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/azsecrets v1.3.1/go.mod h1:hPv41DbqMmnxcGralanA/kVlfdH5jv3T4LxGku2E1BY= +github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/internal v1.1.1 h1:bFWuoEKg+gImo7pvkiQEFAc8ocibADgXeiLAxWhWmkI= +github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/internal v1.1.1/go.mod h1:Vih/3yc6yac2JzU4hzpaDupBJP0Flaia9rXXrU8xyww= github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.6.0 h1:UXT0o77lXQrikd1kgwIPQOUect7EoR/+sbP4wQKdzxM= github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.6.0/go.mod h1:cTvi54pg19DoT07ekoeMgE/taAwNtCShVeZqA+Iv2xI= github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161 h1:L/gRVlceqvL25UVaW/CKtUDjefjrs0SPonmDGUVOYP0= @@ -136,60 +136,60 @@ github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2/go.mod h1:W github.com/aws/aws-sdk-go v1.30.27/go.mod h1:5zCpMtNQVjRREroY7sYe8lOMRSxkhG6MZveU8YkpAk0= github.com/aws/aws-sdk-go v1.55.6 h1:cSg4pvZ3m8dgYcgqB97MrcdjUmZ1BeMYKUxMMB89IPk= github.com/aws/aws-sdk-go v1.55.6/go.mod h1:eRwEWoyTWFMVYVQzKMNHWP5/RV4xIUGMQfXQHfHkpNU= -github.com/aws/aws-sdk-go-v2 v1.36.1 h1:iTDl5U6oAhkNPba0e1t1hrwAo02ZMqbrGq4k5JBWM5E= -github.com/aws/aws-sdk-go-v2 v1.36.1/go.mod h1:5PMILGVKiW32oDzjj6RU52yrNrDPUHcbZQYr1sM7qmM= -github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.8 h1:zAxi9p3wsZMIaVCdoiQp2uZ9k1LsZvmAnoTBeZPXom0= -github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.8/go.mod h1:3XkePX5dSaxveLAYY7nsbsZZrKxCyEuE5pM4ziFxyGg= -github.com/aws/aws-sdk-go-v2/config v1.29.6 h1:fqgqEKK5HaZVWLQoLiC9Q+xDlSp+1LYidp6ybGE2OGg= -github.com/aws/aws-sdk-go-v2/config v1.29.6/go.mod h1:Ft+WLODzDQmCTHDvqAH1JfC2xxbZ0MxpZAcJqmE1LTQ= -github.com/aws/aws-sdk-go-v2/credentials v1.17.59 h1:9btwmrt//Q6JcSdgJOLI98sdr5p7tssS9yAsGe8aKP4= -github.com/aws/aws-sdk-go-v2/credentials v1.17.59/go.mod h1:NM8fM6ovI3zak23UISdWidyZuI1ghNe2xjzUZAyT+08= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.28 h1:KwsodFKVQTlI5EyhRSugALzsV6mG/SGrdjlMXSZSdso= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.28/go.mod h1:EY3APf9MzygVhKuPXAc5H+MkGb8k/DOSQjWS0LgkKqI= -github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.59 h1:5Vsrfdlf9KQP3leGX1dD7VwZq/3HAerEFoXAII4t6zo= -github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.59/go.mod h1:7XTNs3NYApJjkx6A2Fk9qq23qBuBnIU58k3fKC2Fr1I= -github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.32 h1:BjUcr3X3K0wZPGFg2bxOWW3VPN8rkE3/61zhP+IHviA= -github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.32/go.mod h1:80+OGC/bgzzFFTUmcuwD0lb4YutwQeKLFpmt6hoWapU= -github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.32 h1:m1GeXHVMJsRsUAqG6HjZWx9dj7F5TR+cF1bjyfYyBd4= -github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.32/go.mod h1:IitoQxGfaKdVLNg0hD8/DXmAqNy0H4K2H2Sf91ti8sI= -github.com/aws/aws-sdk-go-v2/internal/ini v1.8.2 h1:Pg9URiobXy85kgFev3og2CuOZ8JZUBENF+dcgWBaYNk= -github.com/aws/aws-sdk-go-v2/internal/ini v1.8.2/go.mod h1:FbtygfRFze9usAadmnGJNc8KsP346kEe+y2/oyhGAGc= -github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.32 h1:OIHj/nAhVzIXGzbAE+4XmZ8FPvro3THr6NlqErJc3wY= -github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.32/go.mod h1:LiBEsDo34OJXqdDlRGsilhlIiXR7DL+6Cx2f4p1EgzI= -github.com/aws/aws-sdk-go-v2/service/autoscaling v1.51.12 h1:Bfz5hDqAgm9NByWdA0zfof70CVkjb6SE3RwU75lj66Y= -github.com/aws/aws-sdk-go-v2/service/autoscaling v1.51.12/go.mod h1:+yg2Ygx7ParYfxoo1CLHzqD1zcmWuKNDfxuB8CrOx44= -github.com/aws/aws-sdk-go-v2/service/cloudfront v1.44.9 h1:4PpVlmo6btpGYqq+SRkxbDKvfFrn9Fq0IWkqww4o8Nc= -github.com/aws/aws-sdk-go-v2/service/cloudfront v1.44.9/go.mod h1:uBca+/1aH5v/RYWXqyymLrsbmx1vU9bBxeurlC627Gc= -github.com/aws/aws-sdk-go-v2/service/ec2 v1.202.4 h1:gdFRXlTMgV0+yrhQLAJKb+vX2K32Vw3n2TntDd+8AEM= -github.com/aws/aws-sdk-go-v2/service/ec2 v1.202.4/go.mod h1:nSbxgPGhyI9j/cMVSHUEEtNQzEYeNOkbHnHNeTuQqt0= -github.com/aws/aws-sdk-go-v2/service/elasticloadbalancingv2 v1.43.12 h1:PLoBTtHl376mmxe5NSMUx1UD8yiM+BgIi9yJ1SgibHk= -github.com/aws/aws-sdk-go-v2/service/elasticloadbalancingv2 v1.43.12/go.mod h1:h7JSZfD6QGeaAWpTk0+e1hQw2Venf5gh7UlUTEAiZL8= -github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.2 h1:D4oz8/CzT9bAEYtVhSBmFj2dNOtaHOtMKc2vHBwYizA= -github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.2/go.mod h1:Za3IHqTQ+yNcRHxu1OFucBh0ACZT4j4VQFF0BqpZcLY= -github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.5.6 h1:cCBJaT7EeEojpJ4s7wTDbhZlHVJOgNHN7iw6qVurGaw= -github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.5.6/go.mod h1:WYH1ABybY7JK9TITPnk6ZlP7gQB8psI4c9qDmMsnLSA= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.13 h1:SYVGSFQHlchIcy6e7x12bsrxClCXSP5et8cqVhL8cuw= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.13/go.mod h1:kizuDaLX37bG5WZaoxGPQR/LNFXpxp0vsUnqfkWXfNE= -github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.13 h1:OBsrtam3rk8NfBEq7OLOMm5HtQ9Yyw32X4UQMya/wjw= -github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.13/go.mod h1:3U4gFA5pmoCOja7aq4nSaIAGbaOHv2Yl2ug018cmC+Q= -github.com/aws/aws-sdk-go-v2/service/resourcegroupstaggingapi v1.25.18 h1:mr5lJ4N4nVUHpVXVYeNnqzW/xAvmLwVIX0EeIbMX+bU= -github.com/aws/aws-sdk-go-v2/service/resourcegroupstaggingapi v1.25.18/go.mod h1:9SEz0V+tRP4QVFx7kLqtoXMWRcp+n8quOj95wjOrZuQ= -github.com/aws/aws-sdk-go-v2/service/s3 v1.75.4 h1:DJYjOvNgC30JAcDCRmtQHoYK4trc7XetDXRTEAReGKA= -github.com/aws/aws-sdk-go-v2/service/s3 v1.75.4/go.mod h1:KuLNrwYJFaC2AVZ+CVVc12k9NyqwgWsoNNHjwqF6QNk= -github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.34.18 h1:U/gg5eOAPx9vzip9A6cQ2GkIAPBthHMaKDfZ/WWEuj0= -github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.34.18/go.mod h1:ul2OTb6zT/dpZX/2bxKVwa6eIDBBlPNuau9uZuIoRAI= -github.com/aws/aws-sdk-go-v2/service/sso v1.24.15 h1:/eE3DogBjYlvlbhd2ssWyeuovWunHLxfgw3s/OJa4GQ= -github.com/aws/aws-sdk-go-v2/service/sso v1.24.15/go.mod h1:2PCJYpi7EKeA5SkStAmZlF6fi0uUABuhtF8ILHjGc3Y= -github.com/aws/aws-sdk-go-v2/service/ssooidc v1.28.14 h1:M/zwXiL2iXUrHputuXgmO94TVNmcenPHxgLXLutodKE= -github.com/aws/aws-sdk-go-v2/service/ssooidc v1.28.14/go.mod h1:RVwIw3y/IqxC2YEXSIkAzRDdEU1iRabDPaYjpGCbCGQ= -github.com/aws/aws-sdk-go-v2/service/sts v1.33.14 h1:TzeR06UCMUq+KA3bDkujxK1GVGy+G8qQN/QVYzGLkQE= -github.com/aws/aws-sdk-go-v2/service/sts v1.33.14/go.mod h1:dspXf/oYWGWo6DEvj98wpaTeqt5+DMidZD0A9BYTizc= -github.com/aws/smithy-go v1.22.2 h1:6D9hW43xKFrRx/tXXfAlIZc4JI+yQe6snnWcQyxSyLQ= -github.com/aws/smithy-go v1.22.2/go.mod h1:irrKGvNn1InZwb2d7fkIRNucdfwR8R+Ts3wxYa/cJHg= +github.com/aws/aws-sdk-go-v2 v1.36.3 h1:mJoei2CxPutQVxaATCzDUjcZEjVRdpsiiXi2o38yqWM= +github.com/aws/aws-sdk-go-v2 v1.36.3/go.mod h1:LLXuLpgzEbD766Z5ECcRmi8AzSwfZItDtmABVkRLGzg= +github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.10 h1:zAybnyUQXIZ5mok5Jqwlf58/TFE7uvd3IAsa1aF9cXs= +github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.10/go.mod h1:qqvMj6gHLR/EXWZw4ZbqlPbQUyenf4h82UQUlKc+l14= +github.com/aws/aws-sdk-go-v2/config v1.29.9 h1:Kg+fAYNaJeGXp1vmjtidss8O2uXIsXwaRqsQJKXVr+0= +github.com/aws/aws-sdk-go-v2/config v1.29.9/go.mod h1:oU3jj2O53kgOU4TXq/yipt6ryiooYjlkqqVaZk7gY/U= +github.com/aws/aws-sdk-go-v2/credentials v1.17.62 h1:fvtQY3zFzYJ9CfixuAQ96IxDrBajbBWGqjNTCa79ocU= +github.com/aws/aws-sdk-go-v2/credentials v1.17.62/go.mod h1:ElETBxIQqcxej++Cs8GyPBbgMys5DgQPTwo7cUPDKt8= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.30 h1:x793wxmUWVDhshP8WW2mlnXuFrO4cOd3HLBroh1paFw= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.30/go.mod h1:Jpne2tDnYiFascUEs2AWHJL9Yp7A5ZVy3TNyxaAjD6M= +github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.65 h1:03zF9oWZyXvw08Say761JGpE9PbeGPd4FAmdpgDAm/I= +github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.65/go.mod h1:hBobvLKm46Igpcw6tkq9hFUmU14iAOrC5KL6EyYYckA= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.34 h1:ZK5jHhnrioRkUNOc+hOgQKlUL5JeC3S6JgLxtQ+Rm0Q= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.34/go.mod h1:p4VfIceZokChbA9FzMbRGz5OV+lekcVtHlPKEO0gSZY= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.34 h1:SZwFm17ZUNNg5Np0ioo/gq8Mn6u9w19Mri8DnJ15Jf0= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.34/go.mod h1:dFZsC0BLo346mvKQLWmoJxT+Sjp+qcVR1tRVHQGOH9Q= +github.com/aws/aws-sdk-go-v2/internal/ini v1.8.3 h1:bIqFDwgGXXN1Kpp99pDOdKMTTb5d2KyU5X/BZxjOkRo= +github.com/aws/aws-sdk-go-v2/internal/ini v1.8.3/go.mod h1:H5O/EsxDWyU+LP/V8i5sm8cxoZgc2fdNR9bxlOFrQTo= +github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.34 h1:ZNTqv4nIdE/DiBfUUfXcLZ/Spcuz+RjeziUtNJackkM= +github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.34/go.mod h1:zf7Vcd1ViW7cPqYWEHLHJkS50X0JS2IKz9Cgaj6ugrs= +github.com/aws/aws-sdk-go-v2/service/autoscaling v1.52.1 h1:wj4AION3NjQvjOiI8wm+TVU8y+8EsTl7fSgJAzk9cgc= +github.com/aws/aws-sdk-go-v2/service/autoscaling v1.52.1/go.mod h1:CDqMoc3KRdZJ8qziW96J35lKH01Wq3B2aihtHj2JbRs= +github.com/aws/aws-sdk-go-v2/service/cloudfront v1.45.1 h1:i5znMqubyVRwPT8MsBndfhtvjuSj4qRVAh9oVRXRPcI= +github.com/aws/aws-sdk-go-v2/service/cloudfront v1.45.1/go.mod h1:FIBJ48TS+qJb+Ne4qJ+0NeIhtPTVXItXooTeNeVI4Po= +github.com/aws/aws-sdk-go-v2/service/ec2 v1.207.1 h1:yIbrcRq0nKF75IlSiUlo4g/Qe3RzGBdDCR+WRZLf5IE= +github.com/aws/aws-sdk-go-v2/service/ec2 v1.207.1/go.mod h1:ouvGEfHbLaIlWwpDpOVWPWR+YwO0HDv3vm5tYLq8ImY= +github.com/aws/aws-sdk-go-v2/service/elasticloadbalancingv2 v1.44.1 h1:A1ddja1y637DPqZRAmVyd+rUj+m+63oQBWk0VJca2hs= +github.com/aws/aws-sdk-go-v2/service/elasticloadbalancingv2 v1.44.1/go.mod h1:xnCC3vFBfOKpU6PcsCKL2ktgBTZfOwTGxj6V8/X3IS4= +github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.3 h1:eAh2A4b5IzM/lum78bZ590jy36+d/aFLgKF/4Vd1xPE= +github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.3/go.mod h1:0yKJC/kb8sAnmlYa6Zs3QVYqaC8ug2AbnNChv5Ox3uA= +github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.6.2 h1:t/gZFyrijKuSU0elA5kRngP/oU3mc0I+Dvp8HwRE4c0= +github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.6.2/go.mod h1:iu6FSzgt+M2/x3Dk8zhycdIcHjEFb36IS8HVUVFoMg0= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.15 h1:dM9/92u2F1JbDaGooxTq18wmmFzbJRfXfVfy96/1CXM= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.15/go.mod h1:SwFBy2vjtA0vZbjjaFtfN045boopadnoVPhu4Fv66vY= +github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.15 h1:moLQUoVq91LiqT1nbvzDukyqAlCv89ZmwaHw/ZFlFZg= +github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.15/go.mod h1:ZH34PJUc8ApjBIfgQCFvkWcUDBtl/WTD+uiYHjd8igA= +github.com/aws/aws-sdk-go-v2/service/resourcegroupstaggingapi v1.26.1 h1:emvw6/2IQzFGPiAnFkRu10XwB4unT76YJnZNsUFmqDc= +github.com/aws/aws-sdk-go-v2/service/resourcegroupstaggingapi v1.26.1/go.mod h1:cgPfPTC/V3JqwCKed7Q6d0FrgarV7ltz4Bz6S4Q+Dqk= +github.com/aws/aws-sdk-go-v2/service/s3 v1.78.1 h1:1M0gSbyP6q06gl3384wpoKPaH9G16NPqZFieEhLboSU= +github.com/aws/aws-sdk-go-v2/service/s3 v1.78.1/go.mod h1:4qzsZSzB/KiX2EzDjs9D7A8rI/WGJxZceVJIHqtJjIU= +github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.35.1 h1:+FDQfaijddP+aeT1BcT4ic8nZZc4hYUQVDL51CeCvb8= +github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.35.1/go.mod h1:yGhDiLKguA3iFJYxbrQkQiNzuy+ddxesSZYWVeeEH5Q= +github.com/aws/aws-sdk-go-v2/service/sso v1.25.1 h1:8JdC7Gr9NROg1Rusk25IcZeTO59zLxsKgE0gkh5O6h0= +github.com/aws/aws-sdk-go-v2/service/sso v1.25.1/go.mod h1:qs4a9T5EMLl/Cajiw2TcbNt2UNo/Hqlyp+GiuG4CFDI= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.29.1 h1:KwuLovgQPcdjNMfFt9OhUd9a2OwcOKhxfvF4glTzLuA= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.29.1/go.mod h1:MlYRNmYu/fGPoxBQVvBYr9nyr948aY/WLUvwBMBJubs= +github.com/aws/aws-sdk-go-v2/service/sts v1.33.17 h1:PZV5W8yk4OtH1JAuhV2PXwwO9v5G5Aoj+eMCn4T+1Kc= +github.com/aws/aws-sdk-go-v2/service/sts v1.33.17/go.mod h1:cQnB8CUnxbMU82JvlqjKR2HBOm3fe9pWorWBza6MBJ4= +github.com/aws/smithy-go v1.22.3 h1:Z//5NuZCSW6R4PhQ93hShNbyBbn8BWCmCVCt+Q8Io5k= +github.com/aws/smithy-go v1.22.3/go.mod h1:t1ufH5HMublsJYulve2RKmHDC15xu1f26kHCp/HgceI= github.com/bazelbuild/buildtools v0.0.0-20250204160707-ad48c76ab9b5 h1:ls2GvHSkr+EXNZBBGVrPewx3nc54YBHCHd6v4BOlz9g= github.com/bazelbuild/buildtools v0.0.0-20250204160707-ad48c76ab9b5/go.mod h1:PLNUetjLa77TCCziPsz0EI8a6CUxgC+1jgmWv0H25tg= -github.com/bazelbuild/rules_go v0.52.0 h1:+ozpngVAW67pCAwfhepaXSSrG3yHcj8K9hNAxSYBno4= -github.com/bazelbuild/rules_go v0.52.0/go.mod h1:M+YrupNArA7OiTlv++rFUgQ6Sm+ZXbQ5HPUj0cGa0us= +github.com/bazelbuild/rules_go v0.53.0 h1:u160DT+RRb+Xb2aSO4piN8xhs4aZvWz2UDXCq48F4ao= +github.com/bazelbuild/rules_go v0.53.0/go.mod h1:xB1jfsYHWlnZyPPxzlOSst4q2ZAwS251Mp9Iw6TPuBc= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= @@ -218,8 +218,8 @@ github.com/chengxilo/virtualterm v1.0.4 h1:Z6IpERbRVlfB8WkOmtbHiDbBANU7cimRIof7m github.com/chengxilo/virtualterm v1.0.4/go.mod h1:DyxxBZz/x1iqJjFxTFcr6/x+jSpqN0iwWCOK1q10rlY= github.com/cloudflare/circl v1.5.0 h1:hxIWksrX6XN5a1L2TI/h53AGPhNHoUBo+TD1ms9+pys= github.com/cloudflare/circl v1.5.0/go.mod h1:uddAzsPgqdMAYatqJ0lsjX1oECcQLIlRpzZh3pJrofs= -github.com/cncf/xds/go v0.0.0-20240905190251-b4127c9b8d78 h1:QVw89YDxXxEe+l8gU8ETbOasdwEV+avkR75ZzsVV9WI= -github.com/cncf/xds/go v0.0.0-20240905190251-b4127c9b8d78/go.mod h1:W+zGtBO5Y1IgJhy4+A9GOqVhqLpfZi+vwmdNXUehLA8= +github.com/cncf/xds/go v0.0.0-20241223141626-cff3c89139a3 h1:boJj011Hh+874zpIySeApCX4GeOjPl9qhRF3QuIZq+Q= +github.com/cncf/xds/go v0.0.0-20241223141626-cff3c89139a3/go.mod h1:W+zGtBO5Y1IgJhy4+A9GOqVhqLpfZi+vwmdNXUehLA8= github.com/containerd/cgroups v1.1.0 h1:v8rEWFl6EoqHB+swVNjVoCJE8o3jX7e8nqBGPLaDFBM= github.com/containerd/cgroups v1.1.0/go.mod h1:6ppBcbh/NOOUU+dMKrykgaBnK9lCIBxHqJDGwsa1mIw= github.com/containerd/containerd v1.7.24 h1:zxszGrGjrra1yYJW/6rhm9cJ1ZQ8rkKBR48brqsa7nA= @@ -240,8 +240,8 @@ github.com/coreos/go-semver v0.3.1 h1:yi21YpKnrx1gt5R+la8n5WgS0kCrsPp33dmEyHReZr github.com/coreos/go-semver v0.3.1/go.mod h1:irMmmIw/7yzSRPWryHsK7EYSg09caPQL03VsM8rvUec= github.com/coreos/go-systemd/v22 v22.5.0 h1:RrqgGjYQKalulkV8NGVIfkXQf6YYmOyiJKk8iXXhfZs= github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= -github.com/cpuguy83/go-md2man/v2 v2.0.4 h1:wfIWP927BUkWJb2NmU/kNDYIBTh/ziUX91+lVfRxZq4= -github.com/cpuguy83/go-md2man/v2 v2.0.4/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= +github.com/cpuguy83/go-md2man/v2 v2.0.6 h1:XJtiaUW6dEEqVuZiMTn1ldk455QWwEIsMIJlo5vtkx0= +github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/creack/pty v1.1.21 h1:1/QdRyBaHHJP61QkWMXlOIBfsgdDeeKfK8SYVUWJKf0= github.com/creack/pty v1.1.21/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4= @@ -251,8 +251,8 @@ github.com/cyphar/filepath-securejoin v0.3.6 h1:4d9N5ykBnSp5Xn2JkhocYDkOpURL/18C github.com/cyphar/filepath-securejoin v0.3.6/go.mod h1:Sdj7gXlvMcPZsbhwhQ33GguGLDGQL7h7bg04C/+u9jI= github.com/daniel-weisse/go-cryptsetup v0.0.0-20230705150314-d8c07bd1723c h1:ToajP6trZoiqlZ3Z4uoG1P02/wtqSw1AcowOXOYjATk= github.com/daniel-weisse/go-cryptsetup v0.0.0-20230705150314-d8c07bd1723c/go.mod h1:gZoZ0+POlM1ge/VUxWpMmZVNPzzMJ7l436CgkQ5+qzU= -github.com/danieljoos/wincred v1.2.0 h1:ozqKHaLK0W/ii4KVbbvluM91W2H3Sh0BncbUNPS7jLE= -github.com/danieljoos/wincred v1.2.0/go.mod h1:FzQLLMKBFdvu+osBrnFODiv32YGwCfx0SkRa/eYHgec= +github.com/danieljoos/wincred v1.2.1 h1:dl9cBrupW8+r5250DYkYxocLeZ1Y4vB1kxgtjxw8GQs= +github.com/danieljoos/wincred v1.2.1/go.mod h1:uGaFL9fDn3OLTvzCGulzE+SzjEe5NGlh5FdCcyfPwps= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= @@ -263,14 +263,14 @@ github.com/distribution/distribution/v3 v3.0.0-20221208165359-362910506bc2 h1:aB github.com/distribution/distribution/v3 v3.0.0-20221208165359-362910506bc2/go.mod h1:WHNsWjnIn2V1LYOrME7e8KxSeKunYHsxEm4am0BUtcI= github.com/distribution/reference v0.6.0 h1:0IXCQ5g4/QMHHkarYzh5l+u8T3t73zM5QvfrDyIgxBk= github.com/distribution/reference v0.6.0/go.mod h1:BbU0aIcezP1/5jX/8MP0YiH4SdvB5Y4f/wlDRiLyi3E= -github.com/docker/cli v27.1.1+incompatible h1:goaZxOqs4QKxznZjjBWKONQci/MywhtRv2oNn0GkeZE= -github.com/docker/cli v27.1.1+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= +github.com/docker/cli v27.5.0+incompatible h1:aMphQkcGtpHixwwhAXJT1rrK/detk2JIvDaFkLctbGM= +github.com/docker/cli v27.5.0+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= github.com/docker/distribution v2.8.3+incompatible h1:AtKxIZ36LoNK51+Z6RpzLpddBirtxJnzDrHLEKxTAYk= github.com/docker/distribution v2.8.3+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= github.com/docker/docker v27.5.1+incompatible h1:4PYU5dnBYqRQi0294d1FBECqT9ECWeQAIfE8q4YnPY8= github.com/docker/docker v27.5.1+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= -github.com/docker/docker-credential-helpers v0.7.0 h1:xtCHsjxogADNZcdv1pKUHXryefjlVRqWqIhk/uXJp0A= -github.com/docker/docker-credential-helpers v0.7.0/go.mod h1:rETQfLdHNT3foU5kuNkFR1R1V12OJRRO5lzt2D1b5X0= +github.com/docker/docker-credential-helpers v0.8.2 h1:bX3YxiGzFP5sOXWc3bTPEXdEaZSeVMrFgOr3T+zrFAo= +github.com/docker/docker-credential-helpers v0.8.2/go.mod h1:P3ci7E3lwkZg6XiHdRKft1KckHiO9a2rNtyFbZ/ry9M= github.com/docker/go-connections v0.5.0 h1:USnMq7hx7gwdVZq1L49hLXaFtUdTADjXGp+uj1Br63c= github.com/docker/go-connections v0.5.0/go.mod h1:ov60Kzw0kKElRwhNs9UlUHAE/F9Fe6GLaXnqyDdmEXc= github.com/docker/go-events v0.0.0-20190806004212-e31b211e4f1c h1:+pKlWGMw7gf6bQ+oDZB4KHQFypsfjYlq/C4rfL7D3g8= @@ -291,16 +291,16 @@ github.com/emirpasic/gods v1.18.1 h1:FXtiHYKDGKCW2KzwZKx0iC0PQmdlorYgdFG9jPXJ1Bc github.com/emirpasic/gods v1.18.1/go.mod h1:8tpGGwCnJ5H4r6BWwaV6OrWmMoPhUl5jm/FMNAnJvWQ= github.com/envoyproxy/go-control-plane v0.13.4 h1:zEqyPVyku6IvWCFwux4x9RxkLOMUL+1vC9xUFv5l2/M= github.com/envoyproxy/go-control-plane v0.13.4/go.mod h1:kDfuBlDVsSj2MjrLEtRWtHlsWIFcGyB2RMO44Dc5GZA= -github.com/envoyproxy/go-control-plane/envoy v1.32.3 h1:hVEaommgvzTjTd4xCaFd+kEQ2iYBtGxP6luyLrx6uOk= -github.com/envoyproxy/go-control-plane/envoy v1.32.3/go.mod h1:F6hWupPfh75TBXGKA++MCT/CZHFq5r9/uwt/kQYkZfE= +github.com/envoyproxy/go-control-plane/envoy v1.32.4 h1:jb83lalDRZSpPWW2Z7Mck/8kXZ5CQAFYVjQcdVIr83A= +github.com/envoyproxy/go-control-plane/envoy v1.32.4/go.mod h1:Gzjc5k8JcJswLjAx1Zm+wSYE20UrLtt7JZMWiWQXQEw= github.com/envoyproxy/go-control-plane/ratelimit v0.1.0 h1:/G9QYbddjL25KvtKTv3an9lx6VBE2cnb8wp1vEGNYGI= github.com/envoyproxy/go-control-plane/ratelimit v0.1.0/go.mod h1:Wk+tMFAFbCXaJPzVVHnPgRKdUdwW/KdbRt94AzgRee4= -github.com/envoyproxy/protoc-gen-validate v1.1.0 h1:tntQDh69XqOCOZsDz0lVJQez/2L6Uu2PdjCQwWCJ3bM= -github.com/envoyproxy/protoc-gen-validate v1.1.0/go.mod h1:sXRDRVmzEbkM7CVcM06s9shE/m23dg3wzjl0UWqJ2q4= +github.com/envoyproxy/protoc-gen-validate v1.2.1 h1:DEo3O99U8j4hBFwbJfrz9VtgcDfUKS7KJ7spH3d86P8= +github.com/envoyproxy/protoc-gen-validate v1.2.1/go.mod h1:d/C80l/jxXLdfEIhX1W2TmLfsJ31lvEjwamM4DxlWXU= github.com/evanphx/json-patch v5.9.0+incompatible h1:fBXyNpNMuTTDdquAq/uisOr2lShz4oaXpDTX2bLe7ls= github.com/evanphx/json-patch v5.9.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= -github.com/evanphx/json-patch/v5 v5.9.0 h1:kcBlZQbplgElYIlo/n1hJbls2z/1awpXxpRi0/FOJfg= -github.com/evanphx/json-patch/v5 v5.9.0/go.mod h1:VNkHZ/282BpEyt/tObQO8s5CMPmYYq14uClGH4abBuQ= +github.com/evanphx/json-patch/v5 v5.9.11 h1:/8HVnzMq13/3x9TPvjG08wUGqBTmZBsCWzjTM0wiaDU= +github.com/evanphx/json-patch/v5 v5.9.11/go.mod h1:3j+LviiESTElxA4p3EMKAB9HXj3/XEtnUf6OZxqIQTM= github.com/exponent-io/jsonpath v0.0.0-20210407135951-1de76d718b3f h1:Wl78ApPPB2Wvf/TIe2xdyJxTlb6obmF18d8QdkxNDu4= github.com/exponent-io/jsonpath v0.0.0-20210407135951-1de76d718b3f/go.mod h1:OSYXu++VVOHnXeitef/D8n/6y4QV8uLHSFXX4NeXMGc= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= @@ -310,8 +310,8 @@ github.com/fatih/color v1.18.0/go.mod h1:4FelSpRwEGDpQ12mAdzqdOukCy4u8WUtOY6lkT/ github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= -github.com/foxboron/go-uefi v0.0.0-20241219185318-19dc140271bf h1:eKPYdh9Dq7P/Tc6GRt4HqqsVK8b2vt0IGP+xmZ8dMjo= -github.com/foxboron/go-uefi v0.0.0-20241219185318-19dc140271bf/go.mod h1:q85c4IRlhhwdRJgGIUWrisDjU8dgcMj8dnXZCXo3hus= +github.com/foxboron/go-uefi v0.0.0-20250207204325-69fb7dba244f h1:SGo7y1xmmGWiQzp7QU3ueehmdMVkjj9Yyo1IDEuHbYw= +github.com/foxboron/go-uefi v0.0.0-20250207204325-69fb7dba244f/go.mod h1:q85c4IRlhhwdRJgGIUWrisDjU8dgcMj8dnXZCXo3hus= github.com/foxcpp/go-mockdns v1.1.0 h1:jI0rD8M0wuYAxL7r/ynTrCQQq0BVqfB99Vgk7DlmewI= github.com/foxcpp/go-mockdns v1.1.0/go.mod h1:IhLeSFGed3mJIAXPH2aiRQB+kqz7oqu8ld2qVbOu7Wk= github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8= @@ -334,10 +334,10 @@ github.com/go-git/go-git/v5 v5.13.0 h1:vLn5wlGIh/X78El6r3Jr+30W16Blk0CTcxTYcYPWi github.com/go-git/go-git/v5 v5.13.0/go.mod h1:Wjo7/JyVKtQgUNdXYXIepzWfJQkUEIGvkvVkiXRR/zw= github.com/go-gorp/gorp/v3 v3.1.0 h1:ItKF/Vbuj31dmV4jxA1qblpSwkl9g1typ24xoe70IGs= github.com/go-gorp/gorp/v3 v3.1.0/go.mod h1:dLEjIyyRNiXvNZ8PSmzpt1GsWAUK8kjVhEpjH8TixEw= -github.com/go-jose/go-jose/v3 v3.0.3 h1:fFKWeig/irsp7XD2zBxvnmA/XaRWp5V3CBsZXJF7G7k= -github.com/go-jose/go-jose/v3 v3.0.3/go.mod h1:5b+7YgP7ZICgJDBdfjZaIt+H/9L9T/YQrVfLAMboGkQ= -github.com/go-jose/go-jose/v4 v4.0.2 h1:R3l3kkBds16bO7ZFAEEcofK0MkrAJt3jlJznWZG0nvk= -github.com/go-jose/go-jose/v4 v4.0.2/go.mod h1:WVf9LFMHh/QVrmqrOfqun0C45tMe3RoiKJMPvgWwLfY= +github.com/go-jose/go-jose/v3 v3.0.4 h1:Wp5HA7bLQcKnf6YYao/4kpRpVMp/yf6+pJKV8WFSaNY= +github.com/go-jose/go-jose/v3 v3.0.4/go.mod h1:5b+7YgP7ZICgJDBdfjZaIt+H/9L9T/YQrVfLAMboGkQ= +github.com/go-jose/go-jose/v4 v4.0.5 h1:M6T8+mKZl/+fNNuFHvGIzDz7BTLQPIounk/b9dw3AaE= +github.com/go-jose/go-jose/v4 v4.0.5/go.mod h1:s3P1lRrkT8igV8D9OjyL4WRyHvjB6a4JSllnOrmmBOA= github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= @@ -374,8 +374,8 @@ github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/o github.com/go-playground/locales v0.14.1/go.mod h1:hxrqLVvrK65+Rwrd5Fc6F2O76J/NuW9t0sjnWqG1slY= github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY= github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY= -github.com/go-playground/validator/v10 v10.24.0 h1:KHQckvo8G6hlWnrPX4NJJ+aBfWNAE/HH+qdL2cBpCmg= -github.com/go-playground/validator/v10 v10.24.0/go.mod h1:GGzBIJMuE98Ic/kJsBXbz1x/7cByt++cQ+YOuDM5wus= +github.com/go-playground/validator/v10 v10.25.0 h1:5Dh7cjvzR7BRZadnsVOzPhWsrwUr0nmsZJxEAnFLNO8= +github.com/go-playground/validator/v10 v10.25.0/go.mod h1:GGzBIJMuE98Ic/kJsBXbz1x/7cByt++cQ+YOuDM5wus= github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= github.com/go-sql-driver/mysql v1.8.1 h1:LedoTUt/eveggdHS9qUFC1EFSa8bU2+1pZjSRpvNJ1Y= github.com/go-sql-driver/mysql v1.8.1/go.mod h1:wEBSXgmK//2ZFJyE+qWnIsVGmvmEKlqwuVSjsCm7DZg= @@ -425,16 +425,16 @@ github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMyw github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= -github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/google/go-configfs-tsm v0.2.2 h1:YnJ9rXIOj5BYD7/0DNnzs8AOp7UcvjfTvt215EWcs98= -github.com/google/go-configfs-tsm v0.2.2/go.mod h1:EL1GTDFMb5PZQWDviGfZV9n87WeGTR/JUg13RfwkgRo= -github.com/google/go-containerregistry v0.20.2 h1:B1wPJ1SN/S7pB+ZAimcciVD+r+yV/l/DSArMxlbwseo= -github.com/google/go-containerregistry v0.20.2/go.mod h1:z38EKdKh4h7IP2gSfUUqEvalZBqs6AoLeWfUy34nQC8= -github.com/google/go-sev-guest v0.12.2-0.20250205052930-65042ded71f9 h1:QEzwhdv1S+QD5K8GJnkQKGPng5ftJuwIHAKirFVcbDk= -github.com/google/go-sev-guest v0.12.2-0.20250205052930-65042ded71f9/go.mod h1:SK9vW+uyfuzYdVN0m8BShL3OQCtXZe/JPF7ZkpD3760= -github.com/google/go-tdx-guest v0.3.1 h1:gl0KvjdsD4RrJzyLefDOvFOUH3NAJri/3qvaL5m83Iw= -github.com/google/go-tdx-guest v0.3.1/go.mod h1:/rc3d7rnPykOPuY8U9saMyEps0PZDThLk/RygXm04nE= +github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= +github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= +github.com/google/go-configfs-tsm v0.3.3-0.20240919001351-b4b5b84fdcbc h1:SG12DWUUM5igxm+//YX5Yq4vhdoRnOG9HkCodkOn+YU= +github.com/google/go-configfs-tsm v0.3.3-0.20240919001351-b4b5b84fdcbc/go.mod h1:EL1GTDFMb5PZQWDviGfZV9n87WeGTR/JUg13RfwkgRo= +github.com/google/go-containerregistry v0.20.3 h1:oNx7IdTI936V8CQRveCjaxOiegWwvM7kqkbXTpyiovI= +github.com/google/go-containerregistry v0.20.3/go.mod h1:w00pIgBRDVUDFM6bq+Qx8lwNWK+cxgCuX1vd3PIBDNI= +github.com/google/go-sev-guest v0.13.0 h1:DJB6ACdykyweMU0HGOp/TQ7cjsnbV2ecbYunu2E0qy0= +github.com/google/go-sev-guest v0.13.0/go.mod h1:SK9vW+uyfuzYdVN0m8BShL3OQCtXZe/JPF7ZkpD3760= +github.com/google/go-tdx-guest v0.3.2-0.20241009005452-097ee70d0843 h1:+MoPobRN9HrDhGyn6HnF5NYo4uMBKaiFqAtf/D/OB4A= +github.com/google/go-tdx-guest v0.3.2-0.20241009005452-097ee70d0843/go.mod h1:g/n8sKITIT9xRivBUbizo34DTsUm2nN2uU3A662h09g= github.com/google/go-tpm v0.9.3 h1:+yx0/anQuGzi+ssRqeD6WpXjW2L/V0dItUayO0i9sRc= github.com/google/go-tpm v0.9.3/go.mod h1:h9jEsEECg7gtLis0upRBQU+GhYVH6jMjrFxI8u6bVUY= github.com/google/go-tpm-tools v0.4.4 h1:oiQfAIkc6xTy9Fl5NKTeTJkBTlXdHsxAofmQyxBKY98= @@ -461,10 +461,10 @@ github.com/googleapis/enterprise-certificate-proxy v0.3.4 h1:XYIDZApgAnrN1c855gT github.com/googleapis/enterprise-certificate-proxy v0.3.4/go.mod h1:YKe7cfqYXjKGpGvmSg28/fFvhNzinZQm8DGnaburhGA= github.com/googleapis/gax-go/v2 v2.14.1 h1:hb0FFeiPaQskmvakKu5EbCbpntQn48jyHuvrkurSS/Q= github.com/googleapis/gax-go/v2 v2.14.1/go.mod h1:Hb/NubMaVM88SrNkvl8X/o8XWwDJEPqouaLeN2IUxoA= -github.com/gophercloud/gophercloud/v2 v2.4.0 h1:XhP5tVEH3ni66NSNK1+0iSO6kaGPH/6srtx6Cr+8eCg= -github.com/gophercloud/gophercloud/v2 v2.4.0/go.mod h1:uJWNpTgJPSl2gyzJqcU/pIAhFUWvIkp8eE8M15n9rs4= -github.com/gophercloud/utils/v2 v2.0.0-20250205065254-a1bff20237e7 h1:GdOOPrlENsJQ2CrTNGezlIaGc+ErjDGA+5eSTojH2FM= -github.com/gophercloud/utils/v2 v2.0.0-20250205065254-a1bff20237e7/go.mod h1:U1WE9Dd6+RhpQY72JdtvRNRd6QeUhCedSBhijvFOn34= +github.com/gophercloud/gophercloud/v2 v2.6.0 h1:XJKQ0in3iHOZHVAFMXq/OhjCuvvG+BKR0unOqRfG1EI= +github.com/gophercloud/gophercloud/v2 v2.6.0/go.mod h1:Ki/ILhYZr/5EPebrPL9Ej+tUg4lqx71/YH2JWVeU+Qk= +github.com/gophercloud/utils/v2 v2.0.0-20250212084022-725b94822eeb h1:TQTXVYXL3d0zRAybRUKKboO0z/XAsXEfU6Oax8n00kc= +github.com/gophercloud/utils/v2 v2.0.0-20250212084022-725b94822eeb/go.mod h1:tIUw/gFHOB6lFV9LhzNZg5jfCLYMxI2lC1dZUa7NlHM= github.com/gorilla/handlers v1.5.1 h1:9lRY6j8DEeeBT10CvO9hGW0gmky0BprnvDI5vfhUHH4= github.com/gorilla/handlers v1.5.1/go.mod h1:t8XrUpc4KVXb7HGyJ4/cEnwQiaxrX/hz1Zv/4g96P1Q= github.com/gorilla/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY= @@ -475,8 +475,8 @@ github.com/gosuri/uitable v0.0.4 h1:IG2xLKRvErL3uhY6e1BylFzG+aJiwQviDDTfOKeKTpY= github.com/gosuri/uitable v0.0.4/go.mod h1:tKR86bXuXPZazfOTG1FIzvjIdXzd0mo4Vtn16vt0PJo= github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79 h1:+ngKgrYPPJrOjhax5N+uePQ0Fh1Z7PheYoUI/0nzkPA= github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= -github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.2.0 h1:kQ0NI7W1B3HwiN5gAYtY+XFItDPbLBwYRxAqbFTyDes= -github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.2.0/go.mod h1:zrT2dxOAjNFPRGjTUe2Xmb4q4YdUwVvQFV6xiCSf+z0= +github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.3.0 h1:FbSCl+KggFl+Ocym490i/EyXF4lPgLoUtcSWquBM0Rs= +github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.3.0/go.mod h1:qOchhhIlmRcqk/O9uCo/puJlyo07YINaIqdZfZG3Jkc= github.com/grpc-ecosystem/grpc-gateway v1.16.0 h1:gmcG1KaJ57LophUzW0Hy8NmPhnMZb4M0+kPpLofRdBo= github.com/grpc-ecosystem/grpc-gateway/v2 v2.24.0 h1:TmHmbvxPmaegwhDubVz0lICL0J5Ka2vwTzhoePEXsGE= github.com/grpc-ecosystem/grpc-gateway/v2 v2.24.0/go.mod h1:qztMSjm835F2bXf+5HKAPIS5qsmQDqZna/PgVt4rWtI= @@ -497,8 +497,8 @@ github.com/hashicorp/go-kms-wrapping/v2 v2.0.18 h1:DLfC677GfKEpSAFpEWvl1vXsGpEcS github.com/hashicorp/go-kms-wrapping/v2 v2.0.18/go.mod h1:t/eaR/mi2mw3klfl1WEAuiLKrlZ/Q8cosmsT+RIPLu0= github.com/hashicorp/go-kms-wrapping/wrappers/awskms/v2 v2.0.11 h1:J9zGa9SlcOHT3SQTj0Vv3shHo0anWbs58weURGCgChI= github.com/hashicorp/go-kms-wrapping/wrappers/awskms/v2 v2.0.11/go.mod h1:iAOCu7/lG5eugg8+k7NVvQt0IpWT8s2Q9wnMtC/guM4= -github.com/hashicorp/go-kms-wrapping/wrappers/azurekeyvault/v2 v2.0.13 h1:Vh/i9Q0/2dpbK5FUPnpZJSIE6iPLe471Yvmi+CPnpS0= -github.com/hashicorp/go-kms-wrapping/wrappers/azurekeyvault/v2 v2.0.13/go.mod h1:fWxrv9YkAMqtsISde5mcutoMvuiH4kyg1AlDzzmqRh8= +github.com/hashicorp/go-kms-wrapping/wrappers/azurekeyvault/v2 v2.0.14 h1:oK4OQ5EPbx/66dAvitksV+OdrQ86SZEj3B6VSZrbdEY= +github.com/hashicorp/go-kms-wrapping/wrappers/azurekeyvault/v2 v2.0.14/go.mod h1:fWxrv9YkAMqtsISde5mcutoMvuiH4kyg1AlDzzmqRh8= github.com/hashicorp/go-kms-wrapping/wrappers/gcpckms/v2 v2.0.13 h1:NGBZnF+yPRZ3gjFl69Y2m58/U0iyB2oH9HaznL9tekA= github.com/hashicorp/go-kms-wrapping/wrappers/gcpckms/v2 v2.0.13/go.mod h1:4Xb+6d8VPeDcUNuh4toPqJlDpkajeJyIQeg36TtWhKw= github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= @@ -532,10 +532,10 @@ github.com/hashicorp/terraform-exec v0.22.0 h1:G5+4Sz6jYZfRYUCg6eQgDsqTzkNXV+fP8 github.com/hashicorp/terraform-exec v0.22.0/go.mod h1:bjVbsncaeh8jVdhttWYZuBGj21FcYw6Ia/XfHcNO7lQ= github.com/hashicorp/terraform-json v0.24.0 h1:rUiyF+x1kYawXeRth6fKFm/MdfBS6+lW4NbeATsYz8Q= github.com/hashicorp/terraform-json v0.24.0/go.mod h1:Nfj5ubo9xbu9uiAoZVBsNOjvNKB66Oyrvtit74kC7ow= -github.com/hashicorp/terraform-plugin-framework v1.13.0 h1:8OTG4+oZUfKgnfTdPTJwZ532Bh2BobF4H+yBiYJ/scw= -github.com/hashicorp/terraform-plugin-framework v1.13.0/go.mod h1:j64rwMGpgM3NYXTKuxrCnyubQb/4VKldEKlcG8cvmjU= -github.com/hashicorp/terraform-plugin-framework-validators v0.16.0 h1:O9QqGoYDzQT7lwTXUsZEtgabeWW96zUBh47Smn2lkFA= -github.com/hashicorp/terraform-plugin-framework-validators v0.16.0/go.mod h1:Bh89/hNmqsEWug4/XWKYBwtnw3tbz5BAy1L1OgvbIaY= +github.com/hashicorp/terraform-plugin-framework v1.14.1 h1:jaT1yvU/kEKEsxnbrn4ZHlgcxyIfjvZ41BLdlLk52fY= +github.com/hashicorp/terraform-plugin-framework v1.14.1/go.mod h1:xNUKmvTs6ldbwTuId5euAtg37dTxuyj3LHS3uj7BHQ4= +github.com/hashicorp/terraform-plugin-framework-validators v0.17.0 h1:0uYQcqqgW3BMyyve07WJgpKorXST3zkpzvrOnf3mpbg= +github.com/hashicorp/terraform-plugin-framework-validators v0.17.0/go.mod h1:VwdfgE/5Zxm43flraNa0VjcvKQOGVrcO4X8peIri0T0= github.com/hashicorp/terraform-plugin-go v0.26.0 h1:cuIzCv4qwigug3OS7iKhpGAbZTiypAfFQmw8aE65O2M= github.com/hashicorp/terraform-plugin-go v0.26.0/go.mod h1:+CXjuLDiFgqR+GcrM5a2E2Kal5t5q2jb0E3D57tTdNY= github.com/hashicorp/terraform-plugin-log v0.9.0 h1:i7hOA+vdAItN1/7UrfBqBwvYPQ9TFvymaRGZED3FCV0= @@ -733,14 +733,14 @@ github.com/prometheus/procfs v0.15.1 h1:YagwOFzUgYfKKHX6Dr+sHT7km/hxC76UB0leargg github.com/prometheus/procfs v0.15.1/go.mod h1:fB45yRUv8NstnjriLhBQLuOUt+WW4BsoGhij/e3PBqk= github.com/redis/go-redis/v9 v9.7.0 h1:HhLSs+B6O021gwzl+locl0zEDnyNkxMtf/Z3NNBMa9E= github.com/redis/go-redis/v9 v9.7.0/go.mod h1:f6zhXITC7JUJIlPEiBOTXxJgPLdZcA93GewI7inzyWw= -github.com/regclient/regclient v0.8.0 h1:xNAMDlADcyMvFAlGXoqDOxlSUBG4mqWBFgjQqVTP8Og= -github.com/regclient/regclient v0.8.0/go.mod h1:h9+Y6dBvqBkdlrj6EIhbTOv0xUuIFl7CdI1bZvEB42g= +github.com/regclient/regclient v0.8.2 h1:23BQ3jWgKYHHIXUhp/S9laVJDHDoOQaQCzXMJ4undVE= +github.com/regclient/regclient v0.8.2/go.mod h1:uGyetv0o6VLyRDjtfeBqp/QBwRLJ3Hcn07/+8QbhNcM= github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ= github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= -github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII= -github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o= +github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ= +github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc= github.com/rubenv/sql-migrate v1.7.1 h1:f/o0WgfO/GqNuVg+6801K/KW3WdDSupzSjDYODmiUq4= github.com/rubenv/sql-migrate v1.7.1/go.mod h1:Ob2Psprc0/3ggbM6wCzyYVFFuc6FyZrb2AS+ezLDFb4= github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk= @@ -763,12 +763,14 @@ github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 h1:n661drycOFuPLCN github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3/go.mod h1:A0bzQcvG0E7Rwjx0REVgAGH58e96+X0MeOfepqsbeW4= github.com/shopspring/decimal v1.4.0 h1:bxl37RwXBklmTi0C79JfXCEBD1cqqHt0bbgBAGFp81k= github.com/shopspring/decimal v1.4.0/go.mod h1:gawqmDU56v4yIKSwfBSFip1HdCCXN8/+DMd9qYNcwME= -github.com/siderolabs/talos/pkg/machinery v1.9.3 h1:P3fb4UsmF3UEV2CDf100L7fVW+CBL5Yk6sEDis7uZr4= -github.com/siderolabs/talos/pkg/machinery v1.9.3/go.mod h1:G4swVKn4vK3455ssgcPUrikPTypx6n+uaqv7GyBWXy4= +github.com/siderolabs/talos/pkg/machinery v1.9.4 h1:ReKkU5gaf5h/cZde3ME45hREgOEWODTJYfBFeMhZGkA= +github.com/siderolabs/talos/pkg/machinery v1.9.4/go.mod h1:yLkJ5ZvIpshDRhUVWjuSyTN6YAQiusSJF4/zj2/XfpY= +github.com/sigstore/protobuf-specs v0.4.0 h1:yoZbdh0kZYKOSiVbYyA8J3f2wLh5aUk2SQB7LgAfIdU= +github.com/sigstore/protobuf-specs v0.4.0/go.mod h1:FKW5NYhnnFQ/Vb9RKtQk91iYd0MKJ9AxyqInEwU6+OI= github.com/sigstore/rekor v1.3.9 h1:sUjRpKVh/hhgqGMs0t+TubgYsksArZ6poLEC3MsGAzU= github.com/sigstore/rekor v1.3.9/go.mod h1:xThNUhm6eNEmkJ/SiU/FVU7pLY2f380fSDZFsdDWlcM= -github.com/sigstore/sigstore v1.8.12 h1:S8xMVZbE2z9ZBuQUEG737pxdLjnbOIcFi5v9UFfkJFc= -github.com/sigstore/sigstore v1.8.12/go.mod h1:+PYQAa8rfw0QdPpBcT+Gl3egKD9c+TUgAlF12H3Nmjo= +github.com/sigstore/sigstore v1.9.0 h1:zUfcKbp8RiJ4wEmA4nvcnEySQAqzF1NtV+v6rVzLwNY= +github.com/sigstore/sigstore v1.9.0/go.mod h1:zUoATYzR1J3rLNp3jmp4fzIJtWdhC3ZM6MnpcBtnsE4= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ= github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= @@ -778,9 +780,8 @@ github.com/spf13/afero v1.12.0 h1:UcOPyRBYczmFn6yvphxkn9ZEOY65cpwGKb5mL36mrqs= github.com/spf13/afero v1.12.0/go.mod h1:ZTlWwG4/ahT8W7T0WQ5uYmjI9duaLQGy3Q2OAl4sk/4= github.com/spf13/cast v1.7.0 h1:ntdiHjuueXFgm5nzDRdOS4yfT43P5Fnud6DH50rz/7w= github.com/spf13/cast v1.7.0/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo= -github.com/spf13/cobra v1.8.1 h1:e5/vxKd/rZsfSJMUX1agtjeTDf+qv1/JdBF8gg5k9ZM= -github.com/spf13/cobra v1.8.1/go.mod h1:wHxEcudfqmLYa8iTfL+OuZPbBZkmvliBWKIezN3kD9Y= -github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +github.com/spf13/cobra v1.9.1 h1:CXSaggrXdbHK9CF+8ywj8Amf7PBRmPCOJugH954Nnlo= +github.com/spf13/cobra v1.9.1/go.mod h1:nDyEzZ8ogv936Cinf6g1RU9MRY64Ir93oCnqb9wxYW0= github.com/spf13/pflag v1.0.6 h1:jFzHGLGAlb3ruxLB8MhbI6A8+AQX/2eW4qeyNZXNp2o= github.com/spf13/pflag v1.0.6/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= @@ -863,26 +864,26 @@ go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0= go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA= go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A= -go.opentelemetry.io/contrib/detectors/gcp v1.33.0 h1:FVPoXEoILwgbZUu4X7YSgsESsAmGRgoYcnXkzgQPhP4= -go.opentelemetry.io/contrib/detectors/gcp v1.33.0/go.mod h1:ZHrLmr4ikK2AwRj9QL+c9s2SOlgoSRyMpNVzUj2fZqI= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.58.0 h1:PS8wXpbyaDJQ2VDHHncMe9Vct0Zn1fEjpsjrLxGJoSc= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.58.0/go.mod h1:HDBUsEjOuRC0EzKZ1bSaRGZWUBAzo+MhAcUUORSr4D0= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.58.0 h1:yd02MEjBdJkG3uabWP9apV+OuWRIXGDuJEUJbOHmCFU= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.58.0/go.mod h1:umTcuxiv1n/s/S6/c2AT/g2CQ7u5C59sHDNmfSwgz7Q= +go.opentelemetry.io/contrib/detectors/gcp v1.34.0 h1:JRxssobiPg23otYU5SbWtQC//snGVIM3Tx6QRzlQBao= +go.opentelemetry.io/contrib/detectors/gcp v1.34.0/go.mod h1:cV4BMFcscUR/ckqLkbfQmF0PRsq8w/lMGzdbCSveBHo= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.59.0 h1:rgMkmiGfix9vFJDcDi1PK8WEQP4FLQwLDfhp5ZLpFeE= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.59.0/go.mod h1:ijPqXp5P6IRRByFVVg9DY8P5HkxkHE5ARIa+86aXPf4= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.59.0 h1:CV7UdSGJt/Ao6Gp4CXckLxVRRsRgDHoI8XjbL3PDl8s= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.59.0/go.mod h1:FRmFuRJfag1IZ2dPkHnEoSFVgTVPUd2qf5Vi69hLb8I= go.opentelemetry.io/otel v1.34.0 h1:zRLXxLCgL1WyKsPVrgbSdMN4c0FMkDAskSTQP+0hdUY= go.opentelemetry.io/otel v1.34.0/go.mod h1:OWFPOQ+h4G8xpyjgqo4SxJYdDQ/qmRH+wivy7zzx9oI= go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.28.0 h1:3Q/xZUyC1BBkualc9ROb4G8qkH90LXEIICcs5zv1OYY= go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.28.0/go.mod h1:s75jGIWA9OfCMzF0xr+ZgfrB5FEbbV7UuYo32ahUiFI= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.19.0 h1:IeMeyr1aBvBiPVYihXIaeIZba6b8E1bYp7lbdxK8CQg= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.19.0/go.mod h1:oVdCUtjq9MK9BlS7TtucsQwUcXcymNiEDjgDD2jMtZU= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.33.0 h1:wpMfgF8E1rkrT1Z6meFh1NDtownE9Ii3n3X2GJYjsaU= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.33.0/go.mod h1:wAy0T/dUbs468uOlkT31xjvqQgEVXv58BRFWEgn5v/0= go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.29.0 h1:WDdP9acbMYjbKIyJUhTvtzj601sVJOqgWdUxSdR/Ysc= go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.29.0/go.mod h1:BLbf7zbNIONBLPwvFnwNHGj4zge8uTCM/UPIVW1Mq2I= go.opentelemetry.io/otel/metric v1.34.0 h1:+eTR3U0MyfWjRDhmFMxe2SsW64QrZ84AOhvqS7Y+PoQ= go.opentelemetry.io/otel/metric v1.34.0/go.mod h1:CEDrp0fy2D0MvkXE+dPV7cMi8tWZwX3dmaIhwPOaqHE= go.opentelemetry.io/otel/sdk v1.34.0 h1:95zS4k/2GOy069d321O8jWgYsW3MzVV+KuSPKp7Wr1A= go.opentelemetry.io/otel/sdk v1.34.0/go.mod h1:0e/pNiaMAqaykJGKbi+tSjWfNNHMTxoC9qANsCzbyxU= -go.opentelemetry.io/otel/sdk/metric v1.32.0 h1:rZvFnvmvawYb0alrYkjraqJq0Z4ZUJAiyYCU9snn1CU= -go.opentelemetry.io/otel/sdk/metric v1.32.0/go.mod h1:PWeZlq0zt9YkYAp3gjKZ0eicRYvOh1Gd+X99x6GHpCQ= +go.opentelemetry.io/otel/sdk/metric v1.34.0 h1:5CeK9ujjbFVL5c1PhLuStg1wxA7vQv7ce1EK0Gyvahk= +go.opentelemetry.io/otel/sdk/metric v1.34.0/go.mod h1:jQ/r8Ze28zRKoNRdkjCZxfs6YvBTG1+YIqyFVFYec5w= go.opentelemetry.io/otel/trace v1.34.0 h1:+ouXS2V8Rd4hp4580a8q23bg0azF2nI8cqLYnC8mh/k= go.opentelemetry.io/otel/trace v1.34.0/go.mod h1:Svm7lSjQD7kG7KJ/MUHPVXSDGz2OX4h0M2jHBhmSfRE= go.opentelemetry.io/proto/otlp v1.3.1 h1:TrMUixzpM0yuc/znrFTP9MMRh8trP93mkCiDVeXrui0= @@ -901,8 +902,8 @@ golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5y golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.6.0/go.mod h1:OFC/31mSvZgRz0V1QTNCzfAI1aIRzbiufJtkMIlEp58= golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU= -golang.org/x/crypto v0.32.0 h1:euUpcYgM8WcP71gNpTqQCn6rC2t6ULUPiOzfWaXVVfc= -golang.org/x/crypto v0.32.0/go.mod h1:ZnnJkOaASj8g0AjIduWNlq2NRxL0PlBrbKVyZ6V/Ugc= +golang.org/x/crypto v0.35.0 h1:b15kiHdrGCHrP6LvwaQ3c03kgNhhiMgvlhxHQhmg2Xs= +golang.org/x/crypto v0.35.0/go.mod h1:dy7dXNW32cAb/6/PRuTNsix8T+vJAqvuIy5Bli/x0YQ= golang.org/x/exp v0.0.0-20250128182459-e0ece0dbea4c h1:KL/ZBHXgKGVmuZBZ01Lt57yE5ws8ZPSkkihmEyq7FXc= golang.org/x/exp v0.0.0-20250128182459-e0ece0dbea4c/go.mod h1:tujkw807nyEEAamNbDrEGzRav+ilXA7PCRAd6xsmwiU= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= @@ -923,10 +924,10 @@ golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qx golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= -golang.org/x/net v0.34.0 h1:Mb7Mrk043xzHgnRM88suvJFwzVrRfHEHJEl5/71CKw0= -golang.org/x/net v0.34.0/go.mod h1:di0qlW3YNM5oh6GqDGQr92MyTozJPmybPK4Ev/Gm31k= -golang.org/x/oauth2 v0.25.0 h1:CY4y7XT9v0cRI9oupztF8AgiIu99L/ksR/Xp/6jrZ70= -golang.org/x/oauth2 v0.25.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI= +golang.org/x/net v0.35.0 h1:T5GQRQb2y08kTAByq9L4/bz8cipCdA8FbRTXewonqY8= +golang.org/x/net v0.35.0/go.mod h1:EglIi67kWsHKlRzzVMUD93VMSWGFOMSZgxFjparz1Qk= +golang.org/x/oauth2 v0.27.0 h1:da9Vo7/tDv5RH/7nZDz1eMGS/q1Vv1N/7FCrBhI9I3M= +golang.org/x/oauth2 v0.27.0/go.mod h1:onh5ek6nERTohokkhCD/y2cV4Do3fxFHFuAejCkRWT8= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -972,8 +973,8 @@ golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuX golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk= -golang.org/x/term v0.28.0 h1:/Ts8HFuMR2E6IP/jlo7QVLZHggjKQbhu/7H0LJFr3Gg= -golang.org/x/term v0.28.0/go.mod h1:Sw/lC2IAUZ92udQNf3WodGtn4k/XoLyZoh8v/8uiwek= +golang.org/x/term v0.29.0 h1:L6pJp37ocefwRRtYPKSWOWzOtWSxVajvz2ldH/xi3iU= +golang.org/x/term v0.29.0/go.mod h1:6bl4lRlvVuDgSf3179VpIxBF0o10JUpXWOnI7nErv7s= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= @@ -985,39 +986,39 @@ golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= golang.org/x/text v0.22.0 h1:bofq7m3/HAFvbF51jz3Q9wLg3jkvSPuiZu/pD1XwgtM= golang.org/x/text v0.22.0/go.mod h1:YRoo4H8PVmsu+E3Ou7cqLVH8oXWIHVoX0jqUWALQhfY= -golang.org/x/time v0.9.0 h1:EsRrnYcQiGH+5FfbgvV4AP7qEZstoyrHB0DzarOQ4ZY= -golang.org/x/time v0.9.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= +golang.org/x/time v0.10.0 h1:3usCWA8tQn0L8+hFJQNgzpWbd89begxN66o1Ojdn5L4= +golang.org/x/time v0.10.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= -golang.org/x/tools v0.29.0 h1:Xx0h3TtM9rzQpQuR4dKLrdglAmCEN5Oi+P74JdhdzXE= -golang.org/x/tools v0.29.0/go.mod h1:KMQVMRsVxU6nHCFXrBPhDB8XncLNLM0lIy/F14RP588= +golang.org/x/tools v0.30.0 h1:BgcpHewrV5AUp2G9MebG4XPFI1E2W41zU1SaqVA9vJY= +golang.org/x/tools v0.30.0/go.mod h1:c347cR/OJfw5TI+GfX7RUPNMdDRRbjvYTS0jPyvsVtY= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= gomodules.xyz/jsonpatch/v2 v2.4.0 h1:Ci3iUJyx9UeRx7CeFN8ARgGbkESwJK+KB9lLcWxY/Zw= gomodules.xyz/jsonpatch/v2 v2.4.0/go.mod h1:AH3dM2RI6uoBZxn3LVrfvJ3E0/9dG4cSrbuBJT4moAY= -google.golang.org/api v0.220.0 h1:3oMI4gdBgB72WFVwE1nerDD8W3HUOS4kypK6rRLbGns= -google.golang.org/api v0.220.0/go.mod h1:26ZAlY6aN/8WgpCzjPNy18QpYaz7Zgg1h0qe1GkZEmY= +google.golang.org/api v0.223.0 h1:JUTaWEriXmEy5AhvdMgksGGPEFsYfUKaPEYXd4c3Wvc= +google.golang.org/api v0.223.0/go.mod h1:C+RS7Z+dDwds2b+zoAk5hN/eSfsiCn0UDrYof/M4d2M= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.6.8 h1:IhEN5q69dyKagZPYMSdIjS2HqprW324FRQZJcGqPAsM= google.golang.org/appengine v1.6.8/go.mod h1:1jJ3jBArFh5pcgW8gCtRJnepW8FzD1V44FJffLiz/Ds= google.golang.org/genproto v0.0.0-20250122153221-138b5a5a4fd4 h1:Pw6WnI9W/LIdRxqK7T6XGugGbHIRl5Q7q3BssH6xk4s= google.golang.org/genproto v0.0.0-20250122153221-138b5a5a4fd4/go.mod h1:qbZzneIOXSq+KFAFut9krLfRLZiFLzZL5u2t8SV83EE= -google.golang.org/genproto/googleapis/api v0.0.0-20250124145028-65684f501c47 h1:5iw9XJTD4thFidQmFVvx0wi4g5yOHk76rNRUxz1ZG5g= -google.golang.org/genproto/googleapis/api v0.0.0-20250124145028-65684f501c47/go.mod h1:AfA77qWLcidQWywD0YgqfpJzf50w2VjzBml3TybHeJU= -google.golang.org/genproto/googleapis/rpc v0.0.0-20250127172529-29210b9bc287 h1:J1H9f+LEdWAfHcez/4cvaVBox7cOYT+IU6rgqj5x++8= -google.golang.org/genproto/googleapis/rpc v0.0.0-20250127172529-29210b9bc287/go.mod h1:8BS3B93F/U1juMFq9+EDk+qOT5CO1R9IzXxG3PTqiRk= -google.golang.org/grpc v1.70.0 h1:pWFv03aZoHzlRKHWicjsZytKAiYCtNS0dHbXnIdq7jQ= -google.golang.org/grpc v1.70.0/go.mod h1:ofIJqVKDXx/JiXrwr2IG4/zwdH9txy3IlF40RmcJSQw= +google.golang.org/genproto/googleapis/api v0.0.0-20250219182151-9fdb1cabc7b2 h1:35ZFtrCgaAjF7AFAK0+lRSf+4AyYnWRbH7og13p7rZ4= +google.golang.org/genproto/googleapis/api v0.0.0-20250219182151-9fdb1cabc7b2/go.mod h1:W9ynFDP/shebLB1Hl/ESTOap2jHd6pmLXPNZC7SVDbA= +google.golang.org/genproto/googleapis/rpc v0.0.0-20250219182151-9fdb1cabc7b2 h1:DMTIbak9GhdaSxEjvVzAeNZvyc03I61duqNbnm3SU0M= +google.golang.org/genproto/googleapis/rpc v0.0.0-20250219182151-9fdb1cabc7b2/go.mod h1:LuRYeWDFV6WOn90g357N17oMCaxpgCnbi/44qJvDn2I= +google.golang.org/grpc v1.71.0 h1:kF77BGdPTQ4/JZWMlb9VpJ5pa25aqvVqogsxNHHdeBg= +google.golang.org/grpc v1.71.0/go.mod h1:H0GRtasmQOh9LkFoCPDu3ZrwUtD1YGE+b2vYBYd/8Ec= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.36.4 h1:6A3ZDJHn/eNqc1i+IdefRzy/9PokBTPvcqMySR7NNIM= -google.golang.org/protobuf v1.36.4/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= +google.golang.org/protobuf v1.36.5 h1:tPhr+woSbjfYvY6/GPufUoYizxw1cF/yFoxJ2fmpwlM= +google.golang.org/protobuf v1.36.5/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= @@ -1040,44 +1041,44 @@ gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gotest.tools/v3 v3.4.0 h1:ZazjZUfuVeZGLAmlKKuyv3IKP5orXcwtOwDQH6YVr6o= gotest.tools/v3 v3.4.0/go.mod h1:CtbdzLSsqVhDgMtKsx03ird5YTGB3ar27v0u/yKBW5g= -helm.sh/helm/v3 v3.17.0 h1:DUD4AGdNVn7PSTYfxe1gmQG7s18QeWv/4jI9TubnhT0= -helm.sh/helm/v3 v3.17.0/go.mod h1:Mo7eGyKPPHlS0Ml67W8z/lbkox/gD9Xt1XpD6bxvZZA= -k8s.io/api v0.32.1 h1:f562zw9cy+GvXzXf0CKlVQ7yHJVYzLfL6JAS4kOAaOc= -k8s.io/api v0.32.1/go.mod h1:/Yi/BqkuueW1BgpoePYBRdDYfjPF5sgTr5+YqDZra5k= -k8s.io/apiextensions-apiserver v0.32.1 h1:hjkALhRUeCariC8DiVmb5jj0VjIc1N0DREP32+6UXZw= -k8s.io/apiextensions-apiserver v0.32.1/go.mod h1:sxWIGuGiYov7Io1fAS2X06NjMIk5CbRHc2StSmbaQto= -k8s.io/apimachinery v0.32.1 h1:683ENpaCBjma4CYqsmZyhEzrGz6cjn1MY/X2jB2hkZs= -k8s.io/apimachinery v0.32.1/go.mod h1:GpHVgxoKlTxClKcteaeuF1Ul/lDVb74KpZcxcmLDElE= -k8s.io/apiserver v0.32.1 h1:oo0OozRos66WFq87Zc5tclUX2r0mymoVHRq8JmR7Aak= -k8s.io/apiserver v0.32.1/go.mod h1:UcB9tWjBY7aryeI5zAgzVJB/6k7E97bkr1RgqDz0jPw= -k8s.io/cli-runtime v0.32.0 h1:dP+OZqs7zHPpGQMCGAhectbHU2SNCuZtIimRKTv2T1c= -k8s.io/cli-runtime v0.32.0/go.mod h1:Mai8ht2+esoDRK5hr861KRy6z0zHsSTYttNVJXgP3YQ= -k8s.io/client-go v0.32.1 h1:otM0AxdhdBIaQh7l1Q0jQpmo7WOFIk5FFa4bg6YMdUU= -k8s.io/client-go v0.32.1/go.mod h1:aTTKZY7MdxUaJ/KiUs8D+GssR9zJZi77ZqtzcGXIiDg= -k8s.io/cluster-bootstrap v0.32.1 h1:sHOsbrfWn2EDZus/vwPX2IE1wCw2CuByrIFcaY3zDMo= -k8s.io/cluster-bootstrap v0.32.1/go.mod h1:AAoSp7mIY02P2QBRYoFglKobjD++rPzAdlQeUYObVkA= -k8s.io/component-base v0.32.1 h1:/5IfJ0dHIKBWysGV0yKTFfacZ5yNV1sulPh3ilJjRZk= -k8s.io/component-base v0.32.1/go.mod h1:j1iMMHi/sqAHeG5z+O9BFNCF698a1u0186zkjMZQ28w= +helm.sh/helm/v3 v3.17.1 h1:gzVoAD+qVuoJU6KDMSAeo0xRJ6N1znRxz3wyuXRmJDk= +helm.sh/helm/v3 v3.17.1/go.mod h1:nvreuhuR+j78NkQcLC3TYoprCKStLyw5P4T7E5itv2w= +k8s.io/api v0.32.2 h1:bZrMLEkgizC24G9eViHGOPbW+aRo9duEISRIJKfdJuw= +k8s.io/api v0.32.2/go.mod h1:hKlhk4x1sJyYnHENsrdCWw31FEmCijNGPJO5WzHiJ6Y= +k8s.io/apiextensions-apiserver v0.32.2 h1:2YMk285jWMk2188V2AERy5yDwBYrjgWYggscghPCvV4= +k8s.io/apiextensions-apiserver v0.32.2/go.mod h1:GPwf8sph7YlJT3H6aKUWtd0E+oyShk/YHWQHf/OOgCA= +k8s.io/apimachinery v0.32.2 h1:yoQBR9ZGkA6Rgmhbp/yuT9/g+4lxtsGYwW6dR6BDPLQ= +k8s.io/apimachinery v0.32.2/go.mod h1:GpHVgxoKlTxClKcteaeuF1Ul/lDVb74KpZcxcmLDElE= +k8s.io/apiserver v0.32.2 h1:WzyxAu4mvLkQxwD9hGa4ZfExo3yZZaYzoYvvVDlM6vw= +k8s.io/apiserver v0.32.2/go.mod h1:PEwREHiHNU2oFdte7BjzA1ZyjWjuckORLIK/wLV5goM= +k8s.io/cli-runtime v0.32.1 h1:19nwZPlYGJPUDbhAxDIS2/oydCikvKMHsxroKNGA2mM= +k8s.io/cli-runtime v0.32.1/go.mod h1:NJPbeadVFnV2E7B7vF+FvU09mpwYlZCu8PqjzfuOnkY= +k8s.io/client-go v0.32.2 h1:4dYCD4Nz+9RApM2b/3BtVvBHw54QjMFUl1OLcJG5yOA= +k8s.io/client-go v0.32.2/go.mod h1:fpZ4oJXclZ3r2nDOv+Ux3XcJutfrwjKTCHz2H3sww94= +k8s.io/cluster-bootstrap v0.32.2 h1:2M/VDIVeUuqdyUfZIMHl39Q6NDomLxny8s/yNQLs+18= +k8s.io/cluster-bootstrap v0.32.2/go.mod h1:jzzJvoOU5mjuNXLlORra1pANHtVLWKZWXc4XAjHjMPY= +k8s.io/component-base v0.32.2 h1:1aUL5Vdmu7qNo4ZsE+569PV5zFatM9hl+lb3dEea2zU= +k8s.io/component-base v0.32.2/go.mod h1:PXJ61Vx9Lg+P5mS8TLd7bCIr+eMJRQTyXe8KvkrvJq0= k8s.io/klog/v2 v2.130.1 h1:n9Xl7H1Xvksem4KFG4PYbdQCQxqc/tTUyrgXaOhHSzk= k8s.io/klog/v2 v2.130.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE= k8s.io/kube-openapi v0.0.0-20241105132330-32ad38e42d3f h1:GA7//TjRY9yWGy1poLzYYJJ4JRdzg3+O6e8I+e+8T5Y= k8s.io/kube-openapi v0.0.0-20241105132330-32ad38e42d3f/go.mod h1:R/HEjbvWI0qdfb8viZUeVZm0X6IZnxAydC7YU42CMw4= -k8s.io/kubectl v0.32.0 h1:rpxl+ng9qeG79YA4Em9tLSfX0G8W0vfaiPVrc/WR7Xw= -k8s.io/kubectl v0.32.0/go.mod h1:qIjSX+QgPQUgdy8ps6eKsYNF+YmFOAO3WygfucIqFiE= -k8s.io/kubelet v0.32.1 h1:bB91GvMsZb+LfzBxnjPEr1Fal/sdxZtYphlfwAaRJGw= -k8s.io/kubelet v0.32.1/go.mod h1:4sAEZ6PlewD0GroV3zscY7llym6kmNNTVmUI/Qshm6w= +k8s.io/kubectl v0.32.1 h1:/btLtXLQUU1rWx8AEvX9jrb9LaI6yeezt3sFALhB8M8= +k8s.io/kubectl v0.32.1/go.mod h1:sezNuyWi1STk4ZNPVRIFfgjqMI6XMf+oCVLjZen/pFQ= +k8s.io/kubelet v0.32.2 h1:WFTSYdt3BB1aTApDuKNI16x/4MYqqX8WBBBBh3KupDg= +k8s.io/kubelet v0.32.2/go.mod h1:cC1ms5RS+lu0ckVr6AviCQXHLSPKEBC3D5oaCBdTGkI= k8s.io/kubernetes v1.32.2 h1:mShetlA102UpjRVSGzB+5vjJwy8oPy8FMWrkTH5f37o= k8s.io/kubernetes v1.32.2/go.mod h1:tiIKO63GcdPRBHW2WiUFm3C0eoLczl3f7qi56Dm1W8I= -k8s.io/mount-utils v0.32.1 h1:RJOD6xXzEJT/OOJoG1KstfVa8ZXJJPlHb+t2MoulPHM= -k8s.io/mount-utils v0.32.1/go.mod h1:Kun5c2svjAPx0nnvJKYQWhfeNW+O0EpzHgRhDcYoSY0= +k8s.io/mount-utils v0.32.2 h1:aDwp+ucWiVnDr/LpRg88/dsXf/vm6gI1VZkYH3+3+Vw= +k8s.io/mount-utils v0.32.2/go.mod h1:Kun5c2svjAPx0nnvJKYQWhfeNW+O0EpzHgRhDcYoSY0= k8s.io/utils v0.0.0-20241210054802-24370beab758 h1:sdbE21q2nlQtFh65saZY+rRM6x6aJJI8IUa1AmH/qa0= k8s.io/utils v0.0.0-20241210054802-24370beab758/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= libvirt.org/go/libvirt v1.11001.0 h1:QJgpslxY7qkpXZIDxdMHpkDl7FfhgQJwqRTGBbg/S8E= libvirt.org/go/libvirt v1.11001.0/go.mod h1:1WiFE8EjZfq+FCVog+rvr1yatKbKZ9FaFMZgEqxEJqQ= oras.land/oras-go v1.2.5 h1:XpYuAwAb0DfQsunIyMfeET92emK8km3W4yEzZvUbsTo= oras.land/oras-go v1.2.5/go.mod h1:PuAwRShRZCsZb7g8Ar3jKKQR/2A/qN+pkYxIOd/FAoo= -sigs.k8s.io/controller-runtime v0.20.1 h1:JbGMAG/X94NeM3xvjenVUaBjy6Ui4Ogd/J5ZtjZnHaE= -sigs.k8s.io/controller-runtime v0.20.1/go.mod h1:BrP3w158MwvB3ZbNpaAcIKkHQ7YGpYnzpoSTZ8E14WU= +sigs.k8s.io/controller-runtime v0.20.2 h1:/439OZVxoEc02psi1h4QO3bHzTgu49bb347Xp4gW1pc= +sigs.k8s.io/controller-runtime v0.20.2/go.mod h1:xg2XB0K5ShQzAgsoujxuKN4LNXR2LfwwHsPj7Iaw+XY= sigs.k8s.io/json v0.0.0-20241010143419-9aa6b5e7a4b3 h1:/Rv+M11QRah1itp8VhT6HoVx1Ray9eB4DBr+K+/sCJ8= sigs.k8s.io/json v0.0.0-20241010143419-9aa6b5e7a4b3/go.mod h1:18nIHnGi6636UCz6m8i4DhaJ65T6EruyzmoQqI2BVDo= sigs.k8s.io/kustomize/api v0.18.0 h1:hTzp67k+3NEVInwz5BHyzc9rGxIauoXferXyjv5lWPo= diff --git a/hack/tools/go.mod b/hack/tools/go.mod index cefa8b004..2a0dd37ec 100644 --- a/hack/tools/go.mod +++ b/hack/tools/go.mod @@ -6,7 +6,7 @@ require ( github.com/google/go-licenses v1.6.0 github.com/google/keep-sorted v0.6.0 github.com/katexochen/sh/v3 v3.10.0 - golang.org/x/tools v0.29.0 + golang.org/x/tools v0.30.0 golang.org/x/vuln v1.1.4 ) @@ -35,14 +35,14 @@ require ( github.com/stretchr/testify v1.8.4 // indirect github.com/xanzy/ssh-agent v0.3.3 // indirect go.opencensus.io v0.24.0 // indirect - golang.org/x/crypto v0.32.0 // indirect - golang.org/x/mod v0.22.0 // indirect - golang.org/x/net v0.34.0 // indirect - golang.org/x/sync v0.10.0 // indirect - golang.org/x/sys v0.29.0 // indirect + golang.org/x/crypto v0.33.0 // indirect + golang.org/x/mod v0.23.0 // indirect + golang.org/x/net v0.35.0 // indirect + golang.org/x/sync v0.11.0 // indirect + golang.org/x/sys v0.30.0 // indirect golang.org/x/telemetry v0.0.0-20240522233618-39ace7a40ae7 // indirect - golang.org/x/term v0.28.0 // indirect - golang.org/x/text v0.21.0 // indirect + golang.org/x/term v0.29.0 // indirect + golang.org/x/text v0.22.0 // indirect gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect gopkg.in/src-d/go-billy.v4 v4.3.2 // indirect gopkg.in/src-d/go-git.v4 v4.13.1 // indirect diff --git a/hack/tools/go.sum b/hack/tools/go.sum index 718ea5387..23982d7b2 100644 --- a/hack/tools/go.sum +++ b/hack/tools/go.sum @@ -341,8 +341,8 @@ golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPh golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw= -golang.org/x/crypto v0.32.0 h1:euUpcYgM8WcP71gNpTqQCn6rC2t6ULUPiOzfWaXVVfc= -golang.org/x/crypto v0.32.0/go.mod h1:ZnnJkOaASj8g0AjIduWNlq2NRxL0PlBrbKVyZ6V/Ugc= +golang.org/x/crypto v0.33.0 h1:IOBPskki6Lysi0lo9qQvbxiQ+FvsCC/YWOecCHAixus= +golang.org/x/crypto v0.33.0/go.mod h1:bVdXmD7IV/4GdElGPozy6U7lWdRXA4qyRVGJV57uQ5M= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -380,8 +380,8 @@ golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/mod v0.7.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/mod v0.22.0 h1:D4nJWe9zXqHOmWqj4VMOJhvzj7bEZg4wEYa759z1pH4= -golang.org/x/mod v0.22.0/go.mod h1:6SkKJ3Xj0I0BrPOZoBy3bdMptDDU9oJrpohJ3eWZ1fY= +golang.org/x/mod v0.23.0 h1:Zb7khfcRGKk+kqfxFaP5tZqCnDZMjC5VtUBs87Hr6QM= +golang.org/x/mod v0.23.0/go.mod h1:6SkKJ3Xj0I0BrPOZoBy3bdMptDDU9oJrpohJ3eWZ1fY= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -428,8 +428,8 @@ golang.org/x/net v0.0.0-20220624214902-1bab6f366d9e/go.mod h1:XRhObCWvk6IyKnWLug golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= golang.org/x/net v0.5.0/go.mod h1:DivGGAXEgPSlEBzxGzZI+ZLohi+xUj054jfeKui00ws= -golang.org/x/net v0.34.0 h1:Mb7Mrk043xzHgnRM88suvJFwzVrRfHEHJEl5/71CKw0= -golang.org/x/net v0.34.0/go.mod h1:di0qlW3YNM5oh6GqDGQr92MyTozJPmybPK4Ev/Gm31k= +golang.org/x/net v0.35.0 h1:T5GQRQb2y08kTAByq9L4/bz8cipCdA8FbRTXewonqY8= +golang.org/x/net v0.35.0/go.mod h1:EglIi67kWsHKlRzzVMUD93VMSWGFOMSZgxFjparz1Qk= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -466,8 +466,8 @@ golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.10.0 h1:3NQrjDixjgGwUOCaF8w2+VYHv0Ve/vGYSbdkTa98gmQ= -golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.11.0 h1:GGz8+XQP4FvTTrjZPzNKTMFtSXH80RAzG+5ghFPgK9w= +golang.org/x/sync v0.11.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190221075227-b4e8571b14e0/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -538,16 +538,16 @@ golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.29.0 h1:TPYlXGxvx1MGTn2GiZDhnjPA9wZzZeGKHHmKhHYvgaU= -golang.org/x/sys v0.29.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.30.0 h1:QjkSwP/36a20jFYWkSue1YwXzLmsV5Gfq7Eiy72C1uc= +golang.org/x/sys v0.30.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/telemetry v0.0.0-20240522233618-39ace7a40ae7 h1:FemxDzfMUcK2f3YY4H+05K9CDzbSVr2+q/JKN45pey0= golang.org/x/telemetry v0.0.0-20240522233618-39ace7a40ae7/go.mod h1:pRgIJT+bRLFKnoM1ldnzKoxTIn14Yxz928LQRYYgIN0= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.4.0/go.mod h1:9P2UbLfCdcvo3p/nzKvsmas4TnlujnuoV9hGgYzW1lQ= -golang.org/x/term v0.28.0 h1:/Ts8HFuMR2E6IP/jlo7QVLZHggjKQbhu/7H0LJFr3Gg= -golang.org/x/term v0.28.0/go.mod h1:Sw/lC2IAUZ92udQNf3WodGtn4k/XoLyZoh8v/8uiwek= +golang.org/x/term v0.29.0 h1:L6pJp37ocefwRRtYPKSWOWzOtWSxVajvz2ldH/xi3iU= +golang.org/x/term v0.29.0/go.mod h1:6bl4lRlvVuDgSf3179VpIxBF0o10JUpXWOnI7nErv7s= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -559,8 +559,8 @@ golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.6.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo= -golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= +golang.org/x/text v0.22.0 h1:bofq7m3/HAFvbF51jz3Q9wLg3jkvSPuiZu/pD1XwgtM= +golang.org/x/text v0.22.0/go.mod h1:YRoo4H8PVmsu+E3Ou7cqLVH8oXWIHVoX0jqUWALQhfY= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -619,8 +619,8 @@ golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/tools v0.5.0/go.mod h1:N+Kgy78s5I24c24dU8OfWNEotWjutIs8SnJvn5IDq+k= -golang.org/x/tools v0.29.0 h1:Xx0h3TtM9rzQpQuR4dKLrdglAmCEN5Oi+P74JdhdzXE= -golang.org/x/tools v0.29.0/go.mod h1:KMQVMRsVxU6nHCFXrBPhDB8XncLNLM0lIy/F14RP588= +golang.org/x/tools v0.30.0 h1:BgcpHewrV5AUp2G9MebG4XPFI1E2W41zU1SaqVA9vJY= +golang.org/x/tools v0.30.0/go.mod h1:c347cR/OJfw5TI+GfX7RUPNMdDRRbjvYTS0jPyvsVtY= golang.org/x/vuln v1.1.4 h1:Ju8QsuyhX3Hk8ma3CesTbO8vfJD9EvUBgHvkxHBzj0I= golang.org/x/vuln v1.1.4/go.mod h1:F+45wmU18ym/ca5PLTPLsSzr2KppzswxPP603ldA67s= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= diff --git a/internal/versions/components/components.pb.go b/internal/versions/components/components.pb.go index 16a2479a9..59de22110 100644 --- a/internal/versions/components/components.pb.go +++ b/internal/versions/components/components.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.36.4 +// protoc-gen-go v1.36.5 // protoc v5.29.1 // source: internal/versions/components/components.proto diff --git a/joinservice/joinproto/join.pb.go b/joinservice/joinproto/join.pb.go index 8508a16b1..3e14cad75 100644 --- a/joinservice/joinproto/join.pb.go +++ b/joinservice/joinproto/join.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.36.4 +// protoc-gen-go v1.36.5 // protoc v5.29.1 // source: joinservice/joinproto/join.proto diff --git a/keyservice/keyserviceproto/keyservice.pb.go b/keyservice/keyserviceproto/keyservice.pb.go index 63287a6a8..56591b1b8 100644 --- a/keyservice/keyserviceproto/keyservice.pb.go +++ b/keyservice/keyserviceproto/keyservice.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.36.4 +// protoc-gen-go v1.36.5 // protoc v5.29.1 // source: keyservice/keyserviceproto/keyservice.proto diff --git a/upgrade-agent/upgradeproto/upgrade.pb.go b/upgrade-agent/upgradeproto/upgrade.pb.go index 5cb49fed5..5375ce64a 100644 --- a/upgrade-agent/upgradeproto/upgrade.pb.go +++ b/upgrade-agent/upgradeproto/upgrade.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.36.4 +// protoc-gen-go v1.36.5 // protoc v5.29.1 // source: upgrade-agent/upgradeproto/upgrade.proto diff --git a/verify/verifyproto/verify.pb.go b/verify/verifyproto/verify.pb.go index 77005c2a0..aaddd9395 100644 --- a/verify/verifyproto/verify.pb.go +++ b/verify/verifyproto/verify.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.36.4 +// protoc-gen-go v1.36.5 // protoc v5.29.1 // source: verify/verifyproto/verify.proto From 08f740d5db396901142ae2dbfdaa796b3509f88a Mon Sep 17 00:00:00 2001 From: edgelessci <71088502+edgelessci@users.noreply.github.com> Date: Wed, 5 Mar 2025 14:36:50 +0100 Subject: [PATCH 136/311] image: update measurements and image version (#3677) Co-authored-by: edgelessci --- .../measurements/measurements_enterprise.go | 16 ++++++++-------- internal/config/image_enterprise.go | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/internal/attestation/measurements/measurements_enterprise.go b/internal/attestation/measurements/measurements_enterprise.go index 55be86612..31f5b917f 100644 --- a/internal/attestation/measurements/measurements_enterprise.go +++ b/internal/attestation/measurements/measurements_enterprise.go @@ -19,14 +19,14 @@ package measurements // revive:disable:var-naming var ( - aws_AWSNitroTPM = M{0: {Expected: []byte{0x73, 0x7f, 0x76, 0x7a, 0x12, 0xf5, 0x4e, 0x70, 0xee, 0xcb, 0xc8, 0x68, 0x40, 0x11, 0x32, 0x3a, 0xe2, 0xfe, 0x2d, 0xd9, 0xf9, 0x07, 0x85, 0x57, 0x79, 0x69, 0xd7, 0xa2, 0x01, 0x3e, 0x8c, 0x12}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xe6, 0x57, 0xb5, 0xc4, 0x65, 0xdd, 0x47, 0xa3, 0x63, 0x9e, 0x66, 0xc4, 0xb4, 0xc4, 0xd5, 0xb7, 0x7d, 0xc3, 0xc5, 0x89, 0x14, 0x32, 0xf1, 0xac, 0xb5, 0xfb, 0xff, 0xd9, 0xa0, 0xa5, 0x07, 0xfd}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x7e, 0x98, 0x51, 0x72, 0xf1, 0xbc, 0x69, 0x77, 0x2a, 0x52, 0x85, 0xfc, 0x0b, 0x7c, 0x21, 0xed, 0x98, 0x76, 0x1e, 0x12, 0x63, 0x6f, 0xf0, 0x2c, 0x1d, 0x9e, 0xa7, 0x68, 0xf7, 0x5a, 0x2d, 0xbd}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x6e, 0x5b, 0x78, 0xb7, 0x55, 0x87, 0x31, 0x3a, 0x0e, 0x6d, 0x87, 0xef, 0x76, 0x37, 0x96, 0xf3, 0x13, 0xa3, 0x3a, 0xbb, 0xb1, 0xdb, 0x34, 0x6c, 0x80, 0x93, 0xd4, 0x79, 0xc6, 0x94, 0x8f, 0xdd}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - aws_AWSSEVSNP = M{0: {Expected: []byte{0xd6, 0xdf, 0x85, 0x53, 0x58, 0xf5, 0xb1, 0x0f, 0x06, 0xf0, 0xfa, 0xb3, 0xf4, 0x08, 0xad, 0x26, 0xcd, 0x16, 0x5a, 0x29, 0x49, 0xba, 0xd6, 0x9e, 0x2c, 0xc7, 0x56, 0x92, 0x52, 0x9e, 0x66, 0x2a}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xb7, 0x85, 0xa5, 0x66, 0xb6, 0x38, 0x02, 0xee, 0xd1, 0x5a, 0xe3, 0x8c, 0x44, 0x01, 0x05, 0x9e, 0xb8, 0xfe, 0xc2, 0xbd, 0xe3, 0xbe, 0xf8, 0xb3, 0x7a, 0x92, 0xe3, 0x16, 0xee, 0x95, 0x46, 0x4e}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xaa, 0xf8, 0x05, 0x8e, 0x8a, 0xfa, 0x7e, 0x02, 0x4a, 0x0e, 0x68, 0xa0, 0x4f, 0x83, 0x6c, 0xc4, 0xfa, 0x80, 0x7a, 0xc0, 0xcb, 0x3d, 0x59, 0x4c, 0xb8, 0xf0, 0x8a, 0x40, 0x45, 0xb7, 0xca, 0x79}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xe6, 0x6a, 0x2e, 0x6f, 0x47, 0x43, 0x15, 0x86, 0xd3, 0xa6, 0x31, 0xed, 0x43, 0x93, 0x11, 0xf8, 0xad, 0x83, 0x9b, 0x44, 0x27, 0xdb, 0xfa, 0x42, 0x11, 0xe0, 0x3f, 0xcd, 0xef, 0x08, 0xb8, 0x44}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - azure_AzureSEVSNP = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xd1, 0xba, 0xbb, 0x9e, 0x5d, 0x80, 0xa7, 0xf6, 0x8e, 0xf4, 0xa8, 0x3f, 0xd5, 0xf6, 0x26, 0xcb, 0x16, 0xc7, 0x7b, 0xa2, 0xc4, 0x23, 0x85, 0x4f, 0xe2, 0xca, 0xc5, 0xc6, 0x42, 0x01, 0x7d, 0x53}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xf7, 0x95, 0xe4, 0xe8, 0xad, 0x5a, 0xdb, 0x4d, 0x91, 0x39, 0x62, 0x9c, 0x81, 0x24, 0x8e, 0x08, 0xa9, 0xe0, 0x34, 0xa1, 0xb3, 0x5c, 0xe6, 0x08, 0x2a, 0x9a, 0x4a, 0xce, 0x65, 0xb5, 0xf5, 0xd3}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x5b, 0x3a, 0xca, 0x46, 0x7b, 0xb9, 0x39, 0xe6, 0x65, 0x2b, 0x9f, 0x1b, 0x61, 0xae, 0x1e, 0x60, 0x95, 0x20, 0x77, 0x75, 0xe6, 0x68, 0xfc, 0xba, 0xc2, 0xa1, 0x79, 0xdb, 0xb6, 0x01, 0x2e, 0x51}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - azure_AzureTDX = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xfc, 0x61, 0xe4, 0xb1, 0xb5, 0xb8, 0xa1, 0x10, 0x8f, 0xe9, 0xaa, 0xbe, 0xe6, 0xa6, 0xc7, 0x93, 0xbb, 0x81, 0x7e, 0x98, 0x33, 0x6a, 0x2a, 0xa9, 0x10, 0x40, 0x78, 0x2f, 0x74, 0xbe, 0x5e, 0x1c}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xc3, 0x9b, 0xb8, 0x99, 0x67, 0xb3, 0xb9, 0x80, 0x01, 0xef, 0xe4, 0x01, 0x83, 0x21, 0x4e, 0x98, 0x92, 0x7a, 0x75, 0x78, 0x67, 0xa7, 0x2f, 0x9f, 0x5e, 0x4f, 0x72, 0xfd, 0xcd, 0x95, 0xf0, 0x9f}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x33, 0xf1, 0x4a, 0xd9, 0xf1, 0x8c, 0x72, 0x0f, 0x32, 0x39, 0x12, 0xa3, 0x87, 0x40, 0x5f, 0x8e, 0xb1, 0xc3, 0x39, 0x38, 0x5d, 0xb4, 0x32, 0x55, 0x18, 0x8a, 0x46, 0xc6, 0xc3, 0xaa, 0x46, 0x31}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + aws_AWSNitroTPM = M{0: {Expected: []byte{0x73, 0x7f, 0x76, 0x7a, 0x12, 0xf5, 0x4e, 0x70, 0xee, 0xcb, 0xc8, 0x68, 0x40, 0x11, 0x32, 0x3a, 0xe2, 0xfe, 0x2d, 0xd9, 0xf9, 0x07, 0x85, 0x57, 0x79, 0x69, 0xd7, 0xa2, 0x01, 0x3e, 0x8c, 0x12}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xeb, 0x40, 0x9b, 0x98, 0xce, 0xe3, 0xad, 0x5c, 0x3e, 0xce, 0x07, 0x51, 0x7f, 0xbc, 0xb6, 0xf4, 0xce, 0x3b, 0xd5, 0xc2, 0xc0, 0xc5, 0x5d, 0x4e, 0x69, 0xaf, 0xa0, 0xb2, 0xbe, 0x85, 0xaa, 0x76}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x08, 0x84, 0x46, 0xb9, 0xf3, 0xc4, 0x48, 0xfa, 0x3c, 0x33, 0xd5, 0x75, 0x62, 0x63, 0x73, 0xac, 0x0b, 0xe1, 0x06, 0x7f, 0x76, 0x4f, 0x43, 0x30, 0xbe, 0x51, 0xf9, 0x7e, 0x53, 0xe0, 0x0f, 0x8c}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x69, 0x9a, 0xbe, 0x7c, 0xd1, 0xfa, 0x18, 0x55, 0x29, 0x17, 0xdc, 0x5d, 0x6d, 0x59, 0x16, 0x56, 0x63, 0x5b, 0xdb, 0x75, 0x6b, 0x18, 0x6c, 0x93, 0x32, 0x35, 0x84, 0xd4, 0x15, 0x3e, 0xab, 0x34}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + aws_AWSSEVSNP = M{0: {Expected: []byte{0xd6, 0xdf, 0x85, 0x53, 0x58, 0xf5, 0xb1, 0x0f, 0x06, 0xf0, 0xfa, 0xb3, 0xf4, 0x08, 0xad, 0x26, 0xcd, 0x16, 0x5a, 0x29, 0x49, 0xba, 0xd6, 0x9e, 0x2c, 0xc7, 0x56, 0x92, 0x52, 0x9e, 0x66, 0x2a}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x40, 0x6b, 0xac, 0x32, 0x2e, 0xf0, 0xee, 0xc7, 0x1b, 0xe7, 0xb3, 0x8c, 0xab, 0x03, 0x85, 0x2d, 0x30, 0xc5, 0x1e, 0x4b, 0x46, 0x6b, 0xec, 0xc7, 0x55, 0x2d, 0x85, 0xc2, 0x4c, 0x8e, 0x54, 0xdf}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xe1, 0xcf, 0x2a, 0xbc, 0xfb, 0x24, 0x1b, 0x60, 0xbe, 0xee, 0x65, 0x11, 0x94, 0xe1, 0xd1, 0x93, 0xbb, 0x07, 0x96, 0x7d, 0x90, 0xe9, 0x0b, 0xbc, 0x60, 0xaa, 0x10, 0xb9, 0xdf, 0xa5, 0x97, 0x76}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x8f, 0xa6, 0x39, 0x97, 0xfe, 0x60, 0x71, 0x58, 0xfd, 0x1b, 0x0d, 0x7e, 0xd6, 0x4b, 0x13, 0x09, 0x13, 0x29, 0x29, 0xf3, 0x8d, 0x1b, 0x36, 0x10, 0xb2, 0x30, 0xd8, 0x81, 0xb4, 0x62, 0x7f, 0xb0}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + azure_AzureSEVSNP = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x59, 0xae, 0x63, 0x55, 0x65, 0x3e, 0x1e, 0x06, 0x6a, 0x51, 0xa7, 0x89, 0x0b, 0x37, 0xc2, 0xbf, 0x57, 0x97, 0x10, 0x1c, 0x3d, 0x22, 0x43, 0xec, 0x25, 0x6f, 0x1a, 0xa8, 0xff, 0x0b, 0xd0, 0x55}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xf9, 0xed, 0x08, 0x5b, 0x17, 0x35, 0x73, 0xc0, 0x09, 0x99, 0xee, 0xe3, 0x58, 0x4c, 0xa9, 0xb2, 0x7c, 0x98, 0x86, 0x59, 0x37, 0x5f, 0xb2, 0xfe, 0x42, 0xa8, 0x7e, 0xf2, 0x6d, 0x0e, 0xee, 0x05}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x8c, 0x67, 0x4a, 0x96, 0xe1, 0xa2, 0x78, 0x1d, 0xae, 0x33, 0xd6, 0x10, 0x14, 0xd1, 0xd0, 0x23, 0xea, 0xa6, 0x5f, 0x59, 0x92, 0xf1, 0xcb, 0xe4, 0xe3, 0x0a, 0x18, 0xce, 0x37, 0x92, 0x09, 0x15}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + azure_AzureTDX = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x86, 0xb0, 0x7a, 0x51, 0x1a, 0xb3, 0xff, 0x0d, 0xfb, 0xcc, 0x45, 0x78, 0xa9, 0x35, 0xf7, 0xf9, 0xb8, 0x3e, 0x0e, 0x92, 0x18, 0xae, 0x3f, 0x62, 0x29, 0xcd, 0xec, 0xce, 0xfc, 0x27, 0x29, 0xa1}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x74, 0xbd, 0x54, 0x72, 0x8f, 0x9c, 0xe4, 0xee, 0x90, 0x71, 0x42, 0x14, 0xe3, 0x97, 0xb0, 0x65, 0x04, 0x98, 0x6c, 0x8a, 0x0e, 0xbc, 0xeb, 0xc5, 0xee, 0x99, 0x3f, 0x45, 0xe0, 0x8c, 0x64, 0x1b}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xa8, 0xcb, 0x84, 0xd4, 0xfe, 0xf1, 0x11, 0xe7, 0xbb, 0xe3, 0xa9, 0xb9, 0xfa, 0x94, 0xcb, 0x9b, 0xc5, 0x47, 0x72, 0x9a, 0xe5, 0x45, 0xf0, 0xcc, 0x9a, 0xa3, 0x06, 0x68, 0x14, 0x72, 0xa5, 0xcf}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} azure_AzureTrustedLaunch M - gcp_GCPSEVES = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x89, 0xed, 0x0b, 0x25, 0x6c, 0x4d, 0xab, 0x8a, 0xf7, 0x12, 0xd2, 0xc0, 0x23, 0x81, 0x20, 0x31, 0x11, 0x6b, 0x23, 0x45, 0x87, 0x73, 0x2e, 0xeb, 0xe8, 0x6a, 0x9e, 0x80, 0x0d, 0xb0, 0xd8, 0x07}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xef, 0x08, 0xf9, 0x76, 0xad, 0x64, 0xd0, 0x3b, 0x9d, 0x59, 0x91, 0xe0, 0xfd, 0x60, 0xfe, 0x8b, 0x18, 0xf6, 0x66, 0xc8, 0xfc, 0xe5, 0x31, 0x89, 0xee, 0x75, 0x9f, 0x8f, 0xb5, 0x03, 0x06, 0xbf}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x0b, 0x8c, 0x39, 0xc4, 0xa8, 0xcc, 0x4e, 0xa8, 0xdb, 0x27, 0xba, 0x30, 0x3d, 0xa2, 0x7d, 0x0d, 0x1e, 0xfc, 0xa0, 0xe4, 0xf3, 0xcb, 0x85, 0x33, 0x13, 0x5a, 0xba, 0xf6, 0x2b, 0x31, 0x38, 0x84}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - gcp_GCPSEVSNP = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x26, 0xdf, 0x9b, 0xb7, 0xaa, 0xb4, 0x59, 0xc0, 0x41, 0xe4, 0x89, 0x58, 0x6e, 0x6f, 0x19, 0x6e, 0xfe, 0x13, 0xa9, 0x49, 0xc0, 0xe9, 0xaa, 0x3d, 0x18, 0x95, 0x03, 0x36, 0xad, 0xe1, 0xb5, 0x74}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xae, 0x61, 0x14, 0x8a, 0xee, 0x9b, 0x36, 0x29, 0xe2, 0x67, 0xcf, 0x7d, 0xcc, 0x56, 0x4f, 0x3b, 0x8a, 0x1b, 0x17, 0xc6, 0x48, 0xc5, 0x99, 0x7c, 0x53, 0x06, 0x92, 0xc2, 0x4a, 0xf2, 0x4c, 0x45}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xf5, 0xf4, 0x63, 0x93, 0xab, 0x90, 0x9f, 0x92, 0x34, 0x79, 0x47, 0x2a, 0x0d, 0x44, 0xe3, 0xb9, 0xeb, 0xa1, 0xb2, 0x6f, 0x0e, 0x4c, 0xef, 0xf5, 0xee, 0xa2, 0x60, 0x34, 0x7f, 0xbc, 0xe9, 0x31}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - openstack_QEMUVTPM = M{4: {Expected: []byte{0x7b, 0x26, 0xa1, 0x59, 0xbb, 0x03, 0x08, 0x24, 0x2f, 0x11, 0x9c, 0x0d, 0x72, 0x1c, 0x74, 0x3a, 0x90, 0x1f, 0x9b, 0x27, 0x40, 0x3c, 0xf5, 0x05, 0x02, 0x9c, 0x1d, 0xae, 0xf7, 0x63, 0x3f, 0x2b}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x21, 0x19, 0x7f, 0x49, 0x09, 0xcf, 0x24, 0x0a, 0xae, 0x88, 0xc2, 0x9c, 0xdc, 0x00, 0x8d, 0xc1, 0xcf, 0x14, 0xa4, 0x4d, 0x3a, 0x62, 0x8d, 0x12, 0x58, 0xd3, 0x59, 0x56, 0x06, 0x6d, 0xb1, 0xa9}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xaf, 0xe6, 0x91, 0x4f, 0x30, 0xaf, 0x82, 0x04, 0x4d, 0xcb, 0x8b, 0x86, 0x57, 0x77, 0xce, 0x06, 0xe9, 0x65, 0x62, 0x4d, 0xe0, 0x68, 0xbf, 0x6f, 0x07, 0xe9, 0x35, 0x2c, 0x6b, 0xd5, 0x2a, 0x87}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + gcp_GCPSEVES = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x8b, 0xa0, 0xa6, 0xd4, 0xf5, 0x0e, 0xe6, 0x87, 0xdf, 0x6c, 0x62, 0x51, 0x1b, 0xbb, 0xd6, 0xeb, 0xe5, 0x0b, 0x35, 0xf4, 0x87, 0x7b, 0x9b, 0x90, 0x80, 0x43, 0x1a, 0x01, 0xd5, 0x5e, 0x99, 0x77}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x69, 0x5f, 0xb6, 0x3e, 0x76, 0xc0, 0x00, 0x91, 0x51, 0x4b, 0x6c, 0x9e, 0xc7, 0x5b, 0x8b, 0xc0, 0x27, 0x39, 0x0d, 0xd3, 0xb0, 0x0b, 0x9f, 0xf5, 0x78, 0x3e, 0x0e, 0xfd, 0xb6, 0x6b, 0x5f, 0x77}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x80, 0xc9, 0xee, 0x21, 0x41, 0xf9, 0x47, 0xff, 0x6d, 0xda, 0xc9, 0xe2, 0xb1, 0x35, 0xd3, 0xe5, 0x88, 0xa6, 0x7a, 0x58, 0x02, 0x05, 0x80, 0xa1, 0x0d, 0x07, 0x76, 0x5f, 0xf6, 0xee, 0x41, 0xaa}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + gcp_GCPSEVSNP = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x4c, 0x0a, 0x11, 0x50, 0xf1, 0xe9, 0x3d, 0x6a, 0xc6, 0x17, 0x35, 0xbd, 0xff, 0x7e, 0x7b, 0xb7, 0x38, 0xdd, 0x9b, 0xb1, 0x98, 0x76, 0x37, 0xcc, 0x8f, 0x59, 0xcb, 0x80, 0x7b, 0xbd, 0x13, 0x84}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x8d, 0xec, 0xe4, 0x35, 0x54, 0xbc, 0xc6, 0xef, 0x1f, 0x39, 0xd0, 0xcd, 0x1e, 0x1d, 0x15, 0x95, 0x38, 0x25, 0x81, 0x2b, 0xd2, 0xe1, 0x5d, 0x9c, 0xf1, 0x26, 0xcc, 0xfc, 0x38, 0x87, 0xa1, 0xfe}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x51, 0x57, 0x1d, 0x04, 0xf6, 0x8a, 0x4f, 0xfa, 0x0a, 0x34, 0xc1, 0xed, 0x3f, 0xb1, 0x43, 0x47, 0x4b, 0xcd, 0x72, 0x93, 0xc3, 0x85, 0xd9, 0x1d, 0xcf, 0x87, 0x2e, 0x30, 0xd4, 0x8a, 0xe5, 0x6d}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + openstack_QEMUVTPM = M{4: {Expected: []byte{0xe2, 0xad, 0x1c, 0xb8, 0x5c, 0x15, 0x2e, 0xbc, 0xfe, 0xd6, 0xe6, 0x51, 0x51, 0x02, 0x4a, 0x61, 0xf4, 0x86, 0xed, 0xff, 0xe4, 0x3a, 0x47, 0x8e, 0xbd, 0xf0, 0x63, 0x1f, 0x8c, 0x0f, 0x48, 0xef}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xf6, 0x0f, 0xc8, 0x0e, 0x52, 0xbc, 0xb5, 0xe9, 0x31, 0xd5, 0x5a, 0xf4, 0x4e, 0x7c, 0xe0, 0x8b, 0x63, 0xb3, 0xe3, 0x3d, 0x4f, 0x50, 0x49, 0x39, 0x68, 0x26, 0x61, 0x19, 0x98, 0x56, 0xa1, 0x96}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x3a, 0x42, 0x5a, 0xa6, 0xd1, 0x11, 0x91, 0xf0, 0x9b, 0x54, 0x3e, 0x15, 0xc3, 0x08, 0xbd, 0x2f, 0x57, 0xb2, 0xc8, 0x59, 0x57, 0xa8, 0x40, 0x7f, 0xf3, 0x73, 0x19, 0xfd, 0x5d, 0xb5, 0x14, 0x7e}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} qemu_QEMUTDX M - qemu_QEMUVTPM = M{4: {Expected: []byte{0x19, 0x2e, 0xaf, 0x37, 0xed, 0xd0, 0x9e, 0x93, 0x58, 0x0b, 0x3c, 0x89, 0x9c, 0x35, 0xc2, 0xd0, 0x04, 0xc3, 0x98, 0x33, 0x94, 0x33, 0x86, 0x42, 0x50, 0x6b, 0x1d, 0xd4, 0x60, 0xb6, 0xcc, 0xfe}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xb4, 0x76, 0x8b, 0x47, 0x27, 0x61, 0x7c, 0xd6, 0x10, 0x72, 0x99, 0x5d, 0x43, 0xac, 0xf8, 0x43, 0xf1, 0xec, 0x80, 0x50, 0x31, 0xdb, 0xd8, 0xea, 0xdb, 0xc9, 0xc4, 0xb4, 0xb8, 0x93, 0xf9, 0xbe}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x9b, 0x21, 0xc9, 0x91, 0x9b, 0x6b, 0x03, 0xdf, 0xb7, 0x03, 0x84, 0xbb, 0x2d, 0x7b, 0x24, 0x48, 0x63, 0x19, 0x29, 0xcc, 0xa0, 0x9f, 0x29, 0xe4, 0x6e, 0x7e, 0xda, 0x05, 0x0b, 0x6a, 0x14, 0x68}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + qemu_QEMUVTPM = M{4: {Expected: []byte{0x12, 0x41, 0xfb, 0x54, 0x7f, 0x23, 0xdd, 0x92, 0x3a, 0x91, 0x7c, 0xc5, 0x05, 0x3c, 0x68, 0xa7, 0xaa, 0x2c, 0xd1, 0x1b, 0x14, 0xf3, 0xde, 0xf6, 0x1c, 0x0c, 0xfe, 0x7f, 0x91, 0x50, 0x77, 0xb7}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xcd, 0xea, 0x19, 0x1a, 0x74, 0xd8, 0x76, 0xc8, 0x74, 0x69, 0xb9, 0x45, 0x26, 0xa2, 0x43, 0xdf, 0x96, 0xb8, 0x8a, 0xdf, 0x1a, 0x0d, 0x11, 0xb9, 0x33, 0xcc, 0xc0, 0xde, 0xc8, 0xea, 0x98, 0x61}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x59, 0x51, 0x35, 0x50, 0xc4, 0xa9, 0x6a, 0x0b, 0x50, 0x70, 0x1f, 0x34, 0xc3, 0xd2, 0x75, 0x8e, 0x13, 0x1c, 0x44, 0x93, 0x2f, 0x6b, 0xac, 0x0f, 0x42, 0x60, 0xda, 0xf9, 0x0c, 0x3f, 0x9c, 0x4f}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} ) diff --git a/internal/config/image_enterprise.go b/internal/config/image_enterprise.go index ecd962851..7ad453fd8 100644 --- a/internal/config/image_enterprise.go +++ b/internal/config/image_enterprise.go @@ -10,5 +10,5 @@ package config const ( // defaultImage is the default image to use. - defaultImage = "ref/main/stream/nightly/v2.21.0-pre.0.20250226153823-9e1578aca174" + defaultImage = "ref/main/stream/nightly/v2.22.0-pre.0.20250304124612-7fdece4d6c04" ) From 810a6ecac5b5628256f59c55a8063808f6aae58a Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 5 Mar 2025 15:51:14 +0100 Subject: [PATCH 137/311] deps: update golangci/golangci-lint to v1.64.6 (#3678) * deps: update golangci/golangci-lint to v1.64.6 * deps: tidy all modules --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: edgelessci --- bazel/toolchains/ci_deps.bzl | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/bazel/toolchains/ci_deps.bzl b/bazel/toolchains/ci_deps.bzl index cf4848ced..695590f65 100644 --- a/bazel/toolchains/ci_deps.bzl +++ b/bazel/toolchains/ci_deps.bzl @@ -223,45 +223,45 @@ def _golangci_lint_deps(): name = "com_github_golangci_golangci_lint_linux_amd64", build_file = "//bazel/toolchains:BUILD.golangci.bazel", urls = [ - "https://cdn.confidential.cloud/constellation/cas/sha256/e6bd399a0479c5fd846dcf9f3990d20448b4f0d1e5027d82348eab9f80f7ac71", - "https://github.com/golangci/golangci-lint/releases/download/v1.64.5/golangci-lint-1.64.5-linux-amd64.tar.gz", + "https://cdn.confidential.cloud/constellation/cas/sha256/71e290acbacb7b3ba4f68f0540fb74dc180c4336ac8a6f3bdcd7fcc48b15148d", + "https://github.com/golangci/golangci-lint/releases/download/v1.64.6/golangci-lint-1.64.6-linux-amd64.tar.gz", ], - strip_prefix = "golangci-lint-1.64.5-linux-amd64", + strip_prefix = "golangci-lint-1.64.6-linux-amd64", type = "tar.gz", - sha256 = "e6bd399a0479c5fd846dcf9f3990d20448b4f0d1e5027d82348eab9f80f7ac71", + sha256 = "71e290acbacb7b3ba4f68f0540fb74dc180c4336ac8a6f3bdcd7fcc48b15148d", ) http_archive( name = "com_github_golangci_golangci_lint_linux_arm64", build_file = "//bazel/toolchains:BUILD.golangci.bazel", urls = [ - "https://cdn.confidential.cloud/constellation/cas/sha256/59df27f9a82e461b00597c5f6d96c6a46bfdb4b7cddd9341502641d3d874a65a", - "https://github.com/golangci/golangci-lint/releases/download/v1.64.5/golangci-lint-1.64.5-linux-arm64.tar.gz", + "https://cdn.confidential.cloud/constellation/cas/sha256/99a7ff13dec7a8781a68408b6ecb8a1c5e82786cba3189eaa91d5cdcc24362ce", + "https://github.com/golangci/golangci-lint/releases/download/v1.64.6/golangci-lint-1.64.6-linux-arm64.tar.gz", ], - strip_prefix = "golangci-lint-1.64.5-linux-arm64", + strip_prefix = "golangci-lint-1.64.6-linux-arm64", type = "tar.gz", - sha256 = "59df27f9a82e461b00597c5f6d96c6a46bfdb4b7cddd9341502641d3d874a65a", + sha256 = "99a7ff13dec7a8781a68408b6ecb8a1c5e82786cba3189eaa91d5cdcc24362ce", ) http_archive( name = "com_github_golangci_golangci_lint_darwin_amd64", build_file = "//bazel/toolchains:BUILD.golangci.bazel", urls = [ - "https://cdn.confidential.cloud/constellation/cas/sha256/7681c3e919491030558ef39b6ccaf49be1b3d19de611d30c02aec828dad822c1", - "https://github.com/golangci/golangci-lint/releases/download/v1.64.5/golangci-lint-1.64.5-darwin-amd64.tar.gz", + "https://cdn.confidential.cloud/constellation/cas/sha256/08f9459e7125fed2612abd71596e04d172695921aff82120d1c1e5e9b6fff2a3", + "https://github.com/golangci/golangci-lint/releases/download/v1.64.6/golangci-lint-1.64.6-darwin-amd64.tar.gz", ], - strip_prefix = "golangci-lint-1.64.5-darwin-amd64", + strip_prefix = "golangci-lint-1.64.6-darwin-amd64", type = "tar.gz", - sha256 = "7681c3e919491030558ef39b6ccaf49be1b3d19de611d30c02aec828dad822c1", + sha256 = "08f9459e7125fed2612abd71596e04d172695921aff82120d1c1e5e9b6fff2a3", ) http_archive( name = "com_github_golangci_golangci_lint_darwin_arm64", build_file = "//bazel/toolchains:BUILD.golangci.bazel", urls = [ - "https://cdn.confidential.cloud/constellation/cas/sha256/8c4f11ef3a22d610dd5836a09c98e944b405624f932f20c7e72ae78abc552311", - "https://github.com/golangci/golangci-lint/releases/download/v1.64.5/golangci-lint-1.64.5-darwin-arm64.tar.gz", + "https://cdn.confidential.cloud/constellation/cas/sha256/8c10d0c7c3935b8c2269d628b6a06a8f48d8fb4cc31af02fe4ce0cd18b0704c1", + "https://github.com/golangci/golangci-lint/releases/download/v1.64.6/golangci-lint-1.64.6-darwin-arm64.tar.gz", ], - strip_prefix = "golangci-lint-1.64.5-darwin-arm64", + strip_prefix = "golangci-lint-1.64.6-darwin-arm64", type = "tar.gz", - sha256 = "8c4f11ef3a22d610dd5836a09c98e944b405624f932f20c7e72ae78abc552311", + sha256 = "8c10d0c7c3935b8c2269d628b6a06a8f48d8fb4cc31af02fe4ce0cd18b0704c1", ) def _buf_deps(): From 494eb265c654319a0f98b7b790fe047e4fddc1bb Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 6 Mar 2025 11:17:29 +0100 Subject: [PATCH 138/311] deps: update registry.k8s.io/sig-storage/snapshot-controller Docker tag to v8.2.1 (#3679) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .../charts/edgeless/csi/charts/snapshot-controller/values.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/constellation/helm/charts/edgeless/csi/charts/snapshot-controller/values.yaml b/internal/constellation/helm/charts/edgeless/csi/charts/snapshot-controller/values.yaml index 5cf53dca6..88e453caf 100644 --- a/internal/constellation/helm/charts/edgeless/csi/charts/snapshot-controller/values.yaml +++ b/internal/constellation/helm/charts/edgeless/csi/charts/snapshot-controller/values.yaml @@ -3,7 +3,7 @@ snapshotController: snapshotController: image: repository: registry.k8s.io/sig-storage/snapshot-controller - tag: v8.2.0@sha256:9dade8f2f3ab29e3919c41b343f8d77b12178ac51f25574d7ed2d45a3e3ef69d + tag: v8.2.1@sha256:472fa35a89dadb5a715454fad576ec11aa6f2e8378fc09ae26473d139b77c437 imagePullPolicy: IfNotPresent snapshotWebhook: replicas: 1 From fab1c8e149e65afc095459df5f690f67404ea0b8 Mon Sep 17 00:00:00 2001 From: 3u13r Date: Thu, 6 Mar 2025 11:33:42 +0100 Subject: [PATCH 139/311] cli: re-introduce iam upgrade check (#3657) --- cli/internal/cmd/apply.go | 2 +- cli/internal/cmd/applyterraform.go | 16 +++++++++++++++- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/cli/internal/cmd/apply.go b/cli/internal/cmd/apply.go index d4390db21..199cc1d3b 100644 --- a/cli/internal/cmd/apply.go +++ b/cli/internal/cmd/apply.go @@ -368,7 +368,7 @@ func (a *applyCmd) apply( // Check current Terraform state, if it exists and infrastructure upgrades are not skipped, // and apply migrations if necessary. if !a.flags.skipPhases.contains(skipInfrastructurePhase) { - if err := a.runTerraformApply(cmd, conf, stateFile, upgradeDir); err != nil { + if err := a.runTerraformApply(cmd, conf, stateFile, upgradeDir, a.flags.yes); err != nil { return fmt.Errorf("applying Terraform configuration: %w", err) } } diff --git a/cli/internal/cmd/applyterraform.go b/cli/internal/cmd/applyterraform.go index 668ad0eed..327936531 100644 --- a/cli/internal/cmd/applyterraform.go +++ b/cli/internal/cmd/applyterraform.go @@ -22,7 +22,7 @@ import ( ) // runTerraformApply checks if changes to Terraform are required and applies them. -func (a *applyCmd) runTerraformApply(cmd *cobra.Command, conf *config.Config, stateFile *state.State, upgradeDir string) error { +func (a *applyCmd) runTerraformApply(cmd *cobra.Command, conf *config.Config, stateFile *state.State, upgradeDir string, yesFlag bool) error { a.log.Debug("Checking if Terraform migrations are required") terraformClient, removeClient, err := a.newInfraApplier(cmd.Context()) if err != nil { @@ -36,6 +36,20 @@ func (a *applyCmd) runTerraformApply(cmd *cobra.Command, conf *config.Config, st return fmt.Errorf("checking if Terraform workspace is empty: %w", err) } + if !isNewCluster && cloudcmd.UpgradeRequiresIAMMigration(conf.GetProvider()) { + cmd.Println("WARNING: This upgrade requires an IAM migration. Please make sure you have applied the IAM migration using `iam upgrade apply` before continuing.") + if !yesFlag { + yes, err := askToConfirm(cmd, "Did you upgrade the IAM resources?") + if err != nil { + return fmt.Errorf("asking for confirmation: %w", err) + } + if !yes { + cmd.Println("Skipping upgrade.") + return nil + } + } + } + if changesRequired, err := a.planTerraformChanges(cmd, conf, terraformClient); err != nil { return fmt.Errorf("planning Terraform migrations: %w", err) } else if !changesRequired { From ddbcda848beaf87f0ebc771ea7a194c9b44203d0 Mon Sep 17 00:00:00 2001 From: miampf Date: Thu, 6 Mar 2025 10:50:43 +0000 Subject: [PATCH 140/311] e2e: measurements reproducibility test for images (#3654) --- .../action.yml | 58 +++++++++++++++++++ .../compare_measurements.sh | 31 ++++++++++ .../create_measurements.sh | 28 +++++++++ .../check-measurements-reproducibility.yml | 25 ++++++++ .github/workflows/release.yml | 11 ++++ 5 files changed, 153 insertions(+) create mode 100644 .github/actions/check_measurements_reproducibility/action.yml create mode 100755 .github/actions/check_measurements_reproducibility/compare_measurements.sh create mode 100755 .github/actions/check_measurements_reproducibility/create_measurements.sh create mode 100644 .github/workflows/check-measurements-reproducibility.yml diff --git a/.github/actions/check_measurements_reproducibility/action.yml b/.github/actions/check_measurements_reproducibility/action.yml new file mode 100644 index 000000000..ea2407115 --- /dev/null +++ b/.github/actions/check_measurements_reproducibility/action.yml @@ -0,0 +1,58 @@ +name: Check measurements reproducibility +description: Check if the measurements of a given release are reproducible. + +inputs: + version: + type: string + description: The version of the measurements that are downloaded from the CDN. + required: true + ref: + type: string + description: The git ref to check out. You probably want this to be the tag of the release you are testing. + required: true + +runs: + using: "composite" + steps: + - name: Checkout + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + ref: ${{ inputs.ref }} + path: ./release + + - name: Set up bazel + uses: ./.github/actions/setup_bazel_nix + with: + useCache: "false" + nixTools: | + systemdUkify + jq + jd-diff-patch + moreutils + + - name: Build images + id: build-images + shell: bash + run: | + set -euo pipefail + + # Build required binaries + pushd release + bazel build //image/system:stable + echo "buildPath=$PWD/bazel-bin/image" | tee -a "$GITHUB_OUTPUT" + popd + + - name: Download measurements + shell: bash + run: | + curl -fsLO https://cdn.confidential.cloud/constellation/v2/ref/-/stream/stable/${{ inputs.version }}/image/measurements.json + + - name: Cleanup release measurements and generate our own + shell: bash + run: | + ${{ github.action_path }}/create_measurements.sh "${{ steps.build-images.outputs.buildPath }}" + + - name: Compare measurements + shell: bash + run: | + ${{ github.action_path }}/compare_measurements.sh "${{ steps.build-images.outputs.buildPath }}" diff --git a/.github/actions/check_measurements_reproducibility/compare_measurements.sh b/.github/actions/check_measurements_reproducibility/compare_measurements.sh new file mode 100755 index 000000000..5077a05f2 --- /dev/null +++ b/.github/actions/check_measurements_reproducibility/compare_measurements.sh @@ -0,0 +1,31 @@ +#!/usr/bin/env bash +# no -e since we need to collect errors later +# no -u since it interferes with checking associative arrays +set -o pipefail +shopt -s extglob + +declare -A errors + +for directory in "$1"/system/!(mkosi_wrapper.sh); do + dirname="$(basename "$directory")" + attestationVariant="$(echo "$dirname" | cut -d_ -f2)" + + echo "Their measurements for $attestationVariant:" + ts " " < "$attestationVariant"_their-measurements.json + echo "Own measurements for $attestationVariant:" + ts " " < "$attestationVariant"_own-measurements.json + + diff="$(jd ./"$attestationVariant"_their-measurements.json ./"$attestationVariant"_own-measurements.json)" + if [[ -n $diff ]]; then + errors["$attestationVariant"]="$diff" + fi +done + +for attestationVariant in "${!errors[@]}"; do + echo "Failed to reproduce measurements for $attestationVariant:" + echo "${errors["$attestationVariant"]}" | ts " " +done + +if [[ ${#errors[@]} -ne 0 ]]; then + exit 1 +fi diff --git a/.github/actions/check_measurements_reproducibility/create_measurements.sh b/.github/actions/check_measurements_reproducibility/create_measurements.sh new file mode 100755 index 000000000..4cabd5df0 --- /dev/null +++ b/.github/actions/check_measurements_reproducibility/create_measurements.sh @@ -0,0 +1,28 @@ +#!/usr/bin/env bash +set -euo pipefail +shopt -s extglob + +for directory in "$1"/system/!(mkosi_wrapper.sh); do + dirname="$(basename "$directory")" + csp="$(echo "$dirname" | cut -d_ -f1)" + attestationVariant="$(echo "$dirname" | cut -d_ -f2)" + + # This jq filter selects the measurements for the correct CSP and attestation variant + # and then removes all `warnOnly: true` measurements. + jq --arg attestation_variant "$attestationVariant" --arg csp "$csp" \ + ' + .list.[] + | select( + .attestationVariant == $attestation_variant + and (.csp | ascii_downcase) == $csp + ) + | .measurements + | to_entries + | map(select(.value.warnOnly | not)) + | from_entries + | del(.[] .warnOnly) + ' \ + measurements.json > "$attestationVariant"_their-measurements.json + + bazel run --run_under "sudo --preserve-env" //image/measured-boot/cmd -- "$directory/constellation" /dev/stdout | jq '.measurements' > ./"$attestationVariant"_own-measurements.json +done diff --git a/.github/workflows/check-measurements-reproducibility.yml b/.github/workflows/check-measurements-reproducibility.yml new file mode 100644 index 000000000..dede0918a --- /dev/null +++ b/.github/workflows/check-measurements-reproducibility.yml @@ -0,0 +1,25 @@ +name: Check measurements reproducibility +on: + workflow_dispatch: + inputs: + version: + type: string + description: The version of the measurements that are downloaded from the CDN. + required: true + ref: + type: string + description: The git ref to check out. You probably want this to be the tag of the release you are testing. + required: true + +jobs: + check-reproducibility: + runs-on: ubuntu-22.04 + steps: + - name: Checkout + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + + - name: Check reproducibility + uses: ./.github/actions/check_measurements_reproducibility + with: + version: ${{ github.event.inputs.version }} + ref: ${{ github.event.inputs.ref }} diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index ed1f8260a..16749d413 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -239,6 +239,17 @@ jobs: stream: "stable" ref: ${{ needs.verify-inputs.outputs.WORKING_BRANCH }} + check-measurements-reproducibility: + name: Check measurements reproducibility + needs: [verify-inputs, os-image] + runs-on: ubuntu-24.04 + steps: + - name: Check reproducibility + uses: ./.github/actions/check_measurements_reproducibility + with: + version: ${{ inputs.version }} + ref: ${{ needs.verify-inputs.outputs.WORKING_BRANCH }} + update-hardcoded-measurements: name: Update hardcoded measurements (in the CLI) needs: [verify-inputs, os-image] From f66c03e0c8c63163794264a1d7b96ebf56f36cc9 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 6 Mar 2025 12:32:56 +0100 Subject: [PATCH 141/311] deps: update dependency DeterminateSystems/nix-installer to v0.38.1 (#3640) * deps: update dependency DeterminateSystems/nix-installer to v0.38.1 * ci: pin nix version --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Markus Rudy --- .github/actions/setup_bazel_nix/action.yml | 3 ++- .github/workflows/reproducible-builds.yml | 9 +++++---- .nixversion | 1 + 3 files changed, 8 insertions(+), 5 deletions(-) create mode 100644 .nixversion diff --git a/.github/actions/setup_bazel_nix/action.yml b/.github/actions/setup_bazel_nix/action.yml index 87a2d1802..7e6e6b5c0 100644 --- a/.github/actions/setup_bazel_nix/action.yml +++ b/.github/actions/setup_bazel_nix/action.yml @@ -75,6 +75,7 @@ runs: echo "$RUNNER_ARCH not supported" exit 1 fi + echo "nixVersion=$(cat "${{ github.workspace }}/.nixversion")" | tee -a "$GITHUB_OUTPUT" echo "::endgroup::" - name: Install current Bash on macOS @@ -115,7 +116,7 @@ runs: if: steps.check_inputs.outputs.nixPreinstalled == 'false' uses: cachix/install-nix-action@08dcb3a5e62fa31e2da3d490afc4176ef55ecd72 # v30 with: - install_url: "https://releases.nixos.org/nix/nix-2.25.2/install" + install_url: "https://releases.nixos.org/nix/nix-${{ steps.check_inputs.outputs.nixVersion }}/install" - name: Set $USER if not set shell: bash diff --git a/.github/workflows/reproducible-builds.yml b/.github/workflows/reproducible-builds.yml index bc02b37a5..d7aa5074d 100644 --- a/.github/workflows/reproducible-builds.yml +++ b/.github/workflows/reproducible-builds.yml @@ -51,15 +51,16 @@ jobs: - name: Setup dependencies (eccentric) if: matrix.deps == 'eccentric' run: | - version=$(cat .bazelversion) + bazelVersion=$(cat .bazelversion) mkdir -p "$HOME/.local/bin" - curl -fsSL -o "$HOME/.local/bin/bazel" "https://github.com/bazelbuild/bazel/releases/download/$version/bazel-$version-linux-x86_64" + curl -fsSL -o "$HOME/.local/bin/bazel" "https://github.com/bazelbuild/bazel/releases/download/$bazelVersion/bazel-$bazelVersion-linux-x86_64" chmod a+x "$HOME/.local/bin/bazel" echo "$HOME/.local/bin" >> "$GITHUB_PATH" - curl -fsSL -o "$HOME/.local/bin/nix-installer" https://github.com/DeterminateSystems/nix-installer/releases/download/v0.34.0/nix-installer-x86_64-linux # renovate:github-release + curl -fsSL -o "$HOME/.local/bin/nix-installer" https://github.com/DeterminateSystems/nix-installer/releases/download/v0.38.1/nix-installer-x86_64-linux # renovate:github-release + nixVersion=$(cat .nixversion) chmod a+x "$HOME/.local/bin/nix-installer" - "$HOME/.local/bin/nix-installer" install --no-confirm + "$HOME/.local/bin/nix-installer" install --no-confirm --nix-package-url "https://releases.nixos.org/nix/nix-$nixVersion/nix-$nixVersion-x86_64-linux.tar.xz" - name: Build shell: bash diff --git a/.nixversion b/.nixversion new file mode 100644 index 000000000..40a8d7f12 --- /dev/null +++ b/.nixversion @@ -0,0 +1 @@ +2.25.2 From f56693c139840d29d2339fae0d02c6b7f1594b96 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 6 Mar 2025 13:32:55 +0100 Subject: [PATCH 142/311] deps: update bazel (modules) (#3680) * deps: update bazel (modules) * deps: tidy all modules --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: edgelessci --- MODULE.bazel | 6 ++-- MODULE.bazel.lock | 70 +++++++---------------------------------------- 2 files changed, 13 insertions(+), 63 deletions(-) diff --git a/MODULE.bazel b/MODULE.bazel index da6b6454f..ba8df32e1 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -1,6 +1,6 @@ module(name = "constellation") -bazel_dep(name = "aspect_bazel_lib", version = "2.13.0") +bazel_dep(name = "aspect_bazel_lib", version = "2.14.0") bazel_lib = use_extension("@aspect_bazel_lib//lib:extensions.bzl", "toolchains") bazel_lib.yq() @@ -9,12 +9,12 @@ use_repo(bazel_lib, "yq_toolchains") bazel_dep(name = "bazel_skylib", version = "1.7.1") bazel_dep(name = "gazelle", version = "0.42.0") -bazel_dep(name = "hermetic_cc_toolchain", version = "3.1.1") +bazel_dep(name = "hermetic_cc_toolchain", version = "3.2.0") bazel_dep(name = "rules_cc", version = "0.1.1") bazel_dep(name = "rules_go", version = "0.53.0", repo_name = "io_bazel_rules_go") bazel_dep(name = "rules_pkg", version = "1.0.1") bazel_dep(name = "rules_proto", version = "7.1.0") -bazel_dep(name = "rules_python", version = "1.1.0") +bazel_dep(name = "rules_python", version = "1.2.0") bazel_dep(name = "buildifier_prebuilt", version = "8.0.1", dev_dependency = True) diff --git a/MODULE.bazel.lock b/MODULE.bazel.lock index 8e172f60f..4f64aec96 100644 --- a/MODULE.bazel.lock +++ b/MODULE.bazel.lock @@ -12,8 +12,8 @@ "https://bcr.bazel.build/modules/abseil-cpp/20240116.1/source.json": "9be551b8d4e3ef76875c0d744b5d6a504a27e3ae67bc6b28f46415fd2d2957da", "https://bcr.bazel.build/modules/apple_support/1.5.0/MODULE.bazel": "50341a62efbc483e8a2a6aec30994a58749bd7b885e18dd96aa8c33031e558ef", "https://bcr.bazel.build/modules/apple_support/1.5.0/source.json": "eb98a7627c0bc486b57f598ad8da50f6625d974c8f723e9ea71bd39f709c9862", - "https://bcr.bazel.build/modules/aspect_bazel_lib/2.13.0/MODULE.bazel": "af4a546cb88c618f2e241721d2d76b70b7ecfaa1d58fe27b9187d3edb9e418da", - "https://bcr.bazel.build/modules/aspect_bazel_lib/2.13.0/source.json": "5538ef77a1ecff41c119e040d4bc0148c83e9e79464a165ec86a1aa3171a5535", + "https://bcr.bazel.build/modules/aspect_bazel_lib/2.14.0/MODULE.bazel": "2b31ffcc9bdc8295b2167e07a757dbbc9ac8906e7028e5170a3708cecaac119f", + "https://bcr.bazel.build/modules/aspect_bazel_lib/2.14.0/source.json": "0cf1826853b0bef8b5cd19c0610d717500f5521aa2b38b72b2ec302ac5e7526c", "https://bcr.bazel.build/modules/bazel_features/1.1.0/MODULE.bazel": "cfd42ff3b815a5f39554d97182657f8c4b9719568eb7fded2b9135f084bf760b", "https://bcr.bazel.build/modules/bazel_features/1.1.1/MODULE.bazel": "27b8c79ef57efe08efccbd9dd6ef70d61b4798320b8d3c134fd571f78963dbcd", "https://bcr.bazel.build/modules/bazel_features/1.11.0/MODULE.bazel": "f9382337dd5a474c3b7d334c2f83e50b6eaedc284253334cf823044a26de03e8", @@ -21,6 +21,7 @@ "https://bcr.bazel.build/modules/bazel_features/1.17.0/MODULE.bazel": "039de32d21b816b47bd42c778e0454217e9c9caac4a3cf8e15c7231ee3ddee4d", "https://bcr.bazel.build/modules/bazel_features/1.18.0/MODULE.bazel": "1be0ae2557ab3a72a57aeb31b29be347bcdc5d2b1eb1e70f39e3851a7e97041a", "https://bcr.bazel.build/modules/bazel_features/1.19.0/MODULE.bazel": "59adcdf28230d220f0067b1f435b8537dd033bfff8db21335ef9217919c7fb58", + "https://bcr.bazel.build/modules/bazel_features/1.20.0/MODULE.bazel": "8b85300b9c8594752e0721a37210e34879d23adc219ed9dc8f4104a4a1750920", "https://bcr.bazel.build/modules/bazel_features/1.21.0/MODULE.bazel": "675642261665d8eea09989aa3b8afb5c37627f1be178382c320d1b46afba5e3b", "https://bcr.bazel.build/modules/bazel_features/1.21.0/source.json": "3e8379efaaef53ce35b7b8ba419df829315a880cb0a030e5bb45c96d6d5ecb5f", "https://bcr.bazel.build/modules/bazel_features/1.4.1/MODULE.bazel": "e45b6bb2350aff3e442ae1111c555e27eac1d915e77775f6fdc4b351b758b5d7", @@ -53,8 +54,8 @@ "https://bcr.bazel.build/modules/googletest/1.14.0.bcr.1/MODULE.bazel": "22c31a561553727960057361aa33bf20fb2e98584bc4fec007906e27053f80c6", "https://bcr.bazel.build/modules/googletest/1.14.0.bcr.1/source.json": "41e9e129f80d8c8bf103a7acc337b76e54fad1214ac0a7084bf24f4cd924b8b4", "https://bcr.bazel.build/modules/googletest/1.14.0/MODULE.bazel": "cfbcbf3e6eac06ef9d85900f64424708cc08687d1b527f0ef65aa7517af8118f", - "https://bcr.bazel.build/modules/hermetic_cc_toolchain/3.1.1/MODULE.bazel": "164331a6e73093376a19eaa1eae45a94aad3245e9e79d8f31237f4a8eb6c1c41", - "https://bcr.bazel.build/modules/hermetic_cc_toolchain/3.1.1/source.json": "a2f67694b91ae575e2715fa2c5745c8c9879e7132852ef45c05b4e25a0d3b423", + "https://bcr.bazel.build/modules/hermetic_cc_toolchain/3.2.0/MODULE.bazel": "8e7faec81c1f0fb65fe277ecfc75ea3636ce7bf848f88037fedd58e6eeacc28f", + "https://bcr.bazel.build/modules/hermetic_cc_toolchain/3.2.0/source.json": "67c2b76edff27c3ec449a935fc9468996d1a730b52a9a6f97c40c8a06d381630", "https://bcr.bazel.build/modules/jsoncpp/1.9.5/MODULE.bazel": "31271aedc59e815656f5736f282bb7509a97c7ecb43e927ac1a37966e0578075", "https://bcr.bazel.build/modules/jsoncpp/1.9.5/source.json": "4108ee5085dd2885a341c7fab149429db457b3169b86eb081fa245eadf69169d", "https://bcr.bazel.build/modules/libpfm/4.11.0/MODULE.bazel": "45061ff025b301940f1e30d2c16bea596c25b176c8b6b3087e92615adbd52902", @@ -68,7 +69,6 @@ "https://bcr.bazel.build/modules/platforms/0.0.9/MODULE.bazel": "4a87a60c927b56ddd67db50c89acaa62f4ce2a1d2149ccb63ffd871d5ce29ebc", "https://bcr.bazel.build/modules/protobuf/21.7/MODULE.bazel": "a5a29bb89544f9b97edce05642fac225a808b5b7be74038ea3640fae2f8e66a7", "https://bcr.bazel.build/modules/protobuf/27.0/MODULE.bazel": "7873b60be88844a0a1d8f80b9d5d20cfbd8495a689b8763e76c6372998d3f64c", - "https://bcr.bazel.build/modules/protobuf/27.1/MODULE.bazel": "703a7b614728bb06647f965264967a8ef1c39e09e8f167b3ca0bb1fd80449c0d", "https://bcr.bazel.build/modules/protobuf/29.0-rc2/MODULE.bazel": "6241d35983510143049943fc0d57937937122baf1b287862f9dc8590fc4c37df", "https://bcr.bazel.build/modules/protobuf/29.0-rc3/MODULE.bazel": "33c2dfa286578573afc55a7acaea3cada4122b9631007c594bf0729f41c8de92", "https://bcr.bazel.build/modules/protobuf/29.1/MODULE.bazel": "557c3457560ff49e122ed76c0bc3397a64af9574691cb8201b4e46d4ab2ecb95", @@ -132,7 +132,6 @@ "https://bcr.bazel.build/modules/rules_proto/5.3.0-21.7/MODULE.bazel": "e8dff86b0971688790ae75528fe1813f71809b5afd57facb44dad9e8eca631b7", "https://bcr.bazel.build/modules/rules_proto/6.0.0/MODULE.bazel": "b531d7f09f58dce456cd61b4579ce8c86b38544da75184eadaf0a7cb7966453f", "https://bcr.bazel.build/modules/rules_proto/6.0.2/MODULE.bazel": "ce916b775a62b90b61888052a416ccdda405212b6aaeb39522f7dc53431a5e73", - "https://bcr.bazel.build/modules/rules_proto/7.0.2/MODULE.bazel": "bf81793bd6d2ad89a37a40693e56c61b0ee30f7a7fdbaf3eabbf5f39de47dea2", "https://bcr.bazel.build/modules/rules_proto/7.1.0/MODULE.bazel": "002d62d9108f75bb807cd56245d45648f38275cb3a99dcd45dfb864c5d74cb96", "https://bcr.bazel.build/modules/rules_proto/7.1.0/source.json": "39f89066c12c24097854e8f57ab8558929f9c8d474d34b2c00ac04630ad8940e", "https://bcr.bazel.build/modules/rules_python/0.10.2/MODULE.bazel": "cc82bc96f2997baa545ab3ce73f196d040ffb8756fd2d66125a530031cd90e5f", @@ -142,8 +141,8 @@ "https://bcr.bazel.build/modules/rules_python/0.28.0/MODULE.bazel": "cba2573d870babc976664a912539b320cbaa7114cd3e8f053c720171cde331ed", "https://bcr.bazel.build/modules/rules_python/0.31.0/MODULE.bazel": "93a43dc47ee570e6ec9f5779b2e64c1476a6ce921c48cc9a1678a91dd5f8fd58", "https://bcr.bazel.build/modules/rules_python/0.4.0/MODULE.bazel": "9208ee05fd48bf09ac60ed269791cf17fb343db56c8226a720fbb1cdf467166c", - "https://bcr.bazel.build/modules/rules_python/1.1.0/MODULE.bazel": "57e01abae22956eb96d891572490d20e07d983e0c065de0b2170cafe5053e788", - "https://bcr.bazel.build/modules/rules_python/1.1.0/source.json": "29f1fdfd23a40808c622f813bc93e29c3aae277333f03293f667e76159750a0f", + "https://bcr.bazel.build/modules/rules_python/1.2.0/MODULE.bazel": "5aeeb48b2a6c19d668b48adf2b8a2b209a6310c230db0ce77450f148a89846e4", + "https://bcr.bazel.build/modules/rules_python/1.2.0/source.json": "5b7892685c9a843526fd5a31e7d7a93eb819c59fd7b7fc444b5b143558e1b073", "https://bcr.bazel.build/modules/rules_shell/0.2.0/MODULE.bazel": "fda8a652ab3c7d8fee214de05e7a9916d8b28082234e8d2c0094505c5268ed3c", "https://bcr.bazel.build/modules/rules_shell/0.3.0/MODULE.bazel": "de4402cd12f4cc8fda2354fce179fdb068c0b9ca1ec2d2b17b3e21b24c1a937b", "https://bcr.bazel.build/modules/rules_shell/0.3.0/source.json": "c55ed591aa5009401ddf80ded9762ac32c358d2517ee7820be981e2de9756cf3", @@ -340,59 +339,10 @@ ] } }, - "@@hermetic_cc_toolchain~//toolchain:ext.bzl%toolchains": { - "general": { - "bzlTransitiveDigest": "savfNVe5lHMf4Itncd4fhqgp41UPyKO5x7KBci6XiuM=", - "usagesDigest": "s8zOej8f/kCqZuhI0DSS+Y9oyZRfnXcEN6B/aAgjVHU=", - "recordedFileInputs": {}, - "recordedDirentsInputs": {}, - "envVariables": {}, - "generatedRepoSpecs": { - "zig_sdk": { - "bzlFile": "@@hermetic_cc_toolchain~//toolchain:defs.bzl", - "ruleClassName": "zig_repository", - "attributes": { - "version": "0.12.0", - "url_formats": [ - "https://mirror.bazel.build/ziglang.org/download/{version}/zig-{host_platform}-{version}.{_ext}", - "https://ziglang.org/download/{version}/zig-{host_platform}-{version}.{_ext}" - ], - "host_platform_sha256": { - "linux-aarch64": "754f1029484079b7e0ca3b913a0a2f2a6afd5a28990cb224fe8845e72f09de63", - "linux-x86_64": "c7ae866b8a76a568e2d5cfd31fe89cdb629bdd161fdd5018b29a4a0a17045cad", - "macos-aarch64": "294e224c14fd0822cfb15a35cf39aa14bd9967867999bf8bdfe3db7ddec2a27f", - "macos-x86_64": "4d411bf413e7667821324da248e8589278180dbc197f4f282b7dbb599a689311", - "windows-aarch64": "04c6b92689241ca7a8a59b5f12d2ca2820c09d5043c3c4808b7e93e41c7bf97b", - "windows-x86_64": "2199eb4c2000ddb1fba85ba78f1fcf9c1fb8b3e57658f6a627a8e513131893f5" - }, - "host_platform_ext": { - "linux-aarch64": "tar.xz", - "linux-x86_64": "tar.xz", - "macos-aarch64": "tar.xz", - "macos-x86_64": "tar.xz", - "windows-x86_64": "zip" - } - } - } - }, - "recordedRepoMappingEntries": [ - [ - "hermetic_cc_toolchain~", - "bazel_tools", - "bazel_tools" - ], - [ - "hermetic_cc_toolchain~", - "hermetic_cc_toolchain", - "hermetic_cc_toolchain~" - ] - ] - } - }, "@@platforms//host:extension.bzl%host_platform": { "general": { "bzlTransitiveDigest": "xelQcPZH8+tmuOHVjL9vDxMnnQNMlwj0SlvgoqBkm4U=", - "usagesDigest": "8WuNbURwZrBrCS7egNs6hACAs9lW3nbF8SS2yX7+v9Y=", + "usagesDigest": "eKQSPbCJCzwdqDfIyJ+cheVNlVKVHmts40y1P3np7Sw=", "recordedFileInputs": {}, "recordedDirentsInputs": {}, "envVariables": {}, @@ -627,8 +577,8 @@ }, "@@rules_python~//python/extensions:pip.bzl%pip": { "general": { - "bzlTransitiveDigest": "7isZ025eiUd/NnrGCxp8JXtjnxdOZNq/SglLxmU6ECo=", - "usagesDigest": "5gOu/rEipBiCefcMDC+RSD/hjMW+fRO2Sh6ij/fWupk=", + "bzlTransitiveDigest": "TMcTDxX1ukbhGz5AiHybGjPU8RVS+irg3YDEh4fIjEA=", + "usagesDigest": "hEwiPriSVVnfded102xomOZdaPdsmtoK0iJk69xb0go=", "recordedFileInputs": { "@@rules_python~//tools/publish/requirements_linux.txt": "d576e0d8542df61396a9b38deeaa183c24135ed5e8e73bb9622f298f2671811e", "@@rules_fuzzing~//fuzzing/requirements.txt": "ab04664be026b632a0d2a2446c4f65982b7654f5b6851d2f9d399a19b7242a5b", From b4b6df26766e04ce0b2cfb92b778d865cd8faeb2 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 6 Mar 2025 15:36:18 +0100 Subject: [PATCH 143/311] deps: update registry.k8s.io/provider-os/openstack-cloud-controller-manager Docker tag to v1.32.0 (#3683) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- internal/versions/versions.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/versions/versions.go b/internal/versions/versions.go index b4063723c..6d862579d 100644 --- a/internal/versions/versions.go +++ b/internal/versions/versions.go @@ -393,7 +393,7 @@ var VersionConfigs = map[ValidK8sVersion]KubernetesVersion{ // CloudControllerManagerImageGCP is the CCM image used on GCP. CloudControllerManagerImageGCP: "ghcr.io/edgelesssys/cloud-provider-gcp:v30.1.4@sha256:0c3695a18d3825492196facb092e5fe56e466fa8517cde5a206fe21630c1da13", // renovate:container // CloudControllerManagerImageOpenStack is the CCM image used on OpenStack. - CloudControllerManagerImageOpenStack: "registry.k8s.io/provider-os/openstack-cloud-controller-manager:v1.31.1@sha256:72cc0d22b83c613df809d8134e50404171513d92287e63e2313d9ad7e1ed630e", // renovate:container + CloudControllerManagerImageOpenStack: "registry.k8s.io/provider-os/openstack-cloud-controller-manager:v1.32.0@sha256:25e0539888590240483b60dec84c2387fd3cc48bd81dc10a3f6b01fef2585548", // renovate:container // External service image. Depends on k8s version. // Check for new versions at https://github.com/kubernetes/autoscaler/releases. ClusterAutoscalerImage: "registry.k8s.io/autoscaling/cluster-autoscaler:v1.31.0@sha256:6d4c51c35f344d230341d71bb6d35f2c2f0c0a6f205a7887ae44e6d852fb5b5f", // renovate:container From a1e24742a942118de5770d4449304d303b8aa029 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 6 Mar 2025 16:16:40 +0100 Subject: [PATCH 144/311] deps: update dependency DeterminateSystems/nix-installer to v3 (#3684) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/reproducible-builds.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/reproducible-builds.yml b/.github/workflows/reproducible-builds.yml index d7aa5074d..f2e3df0db 100644 --- a/.github/workflows/reproducible-builds.yml +++ b/.github/workflows/reproducible-builds.yml @@ -57,7 +57,7 @@ jobs: chmod a+x "$HOME/.local/bin/bazel" echo "$HOME/.local/bin" >> "$GITHUB_PATH" - curl -fsSL -o "$HOME/.local/bin/nix-installer" https://github.com/DeterminateSystems/nix-installer/releases/download/v0.38.1/nix-installer-x86_64-linux # renovate:github-release + curl -fsSL -o "$HOME/.local/bin/nix-installer" https://github.com/DeterminateSystems/nix-installer/releases/download/v3.0.0/nix-installer-x86_64-linux # renovate:github-release nixVersion=$(cat .nixversion) chmod a+x "$HOME/.local/bin/nix-installer" "$HOME/.local/bin/nix-installer" install --no-confirm --nix-package-url "https://releases.nixos.org/nix/nix-$nixVersion/nix-$nixVersion-x86_64-linux.tar.xz" From a491cac57a9b5a2342e063cd448a2aaa9edf3696 Mon Sep 17 00:00:00 2001 From: Moritz Sanft <58110325+msanft@users.noreply.github.com> Date: Thu, 6 Mar 2025 16:44:49 +0100 Subject: [PATCH 145/311] terraform: update AWS LB permissions (#3681) * bazel: add download rules for AWS LB policy * docs: add migration notice * terraform: re-download lb policy --- .../BUILD.bazel | 13 ++++++++++ .../pull_files.sh | 24 +++++++++++++++++++ .../source.bzl | 22 +++++++++++++++++ WORKSPACE.bzlmod | 4 ++++ bazel/ci/BUILD.bazel | 1 + docs/docs/reference/migration.md | 10 ++++++-- .../infrastructure/iam/aws/alb_policy.json | 9 +++++-- 7 files changed, 79 insertions(+), 4 deletions(-) create mode 100644 3rdparty/bazel/com_github_kubernetes_sigs_aws_load_balancer_controller/BUILD.bazel create mode 100644 3rdparty/bazel/com_github_kubernetes_sigs_aws_load_balancer_controller/pull_files.sh create mode 100644 3rdparty/bazel/com_github_kubernetes_sigs_aws_load_balancer_controller/source.bzl diff --git a/3rdparty/bazel/com_github_kubernetes_sigs_aws_load_balancer_controller/BUILD.bazel b/3rdparty/bazel/com_github_kubernetes_sigs_aws_load_balancer_controller/BUILD.bazel new file mode 100644 index 000000000..9aa7e3f64 --- /dev/null +++ b/3rdparty/bazel/com_github_kubernetes_sigs_aws_load_balancer_controller/BUILD.bazel @@ -0,0 +1,13 @@ +load("//bazel/sh:def.bzl", "sh_template") + +sh_template( + name = "pull_files", + data = [ + "@com_github_kubernetes_sigs_aws_load_balancer_controller//:lb_policy", + ], + substitutions = { + "@@POLICY_SRC@@": "$(rootpath @com_github_kubernetes_sigs_aws_load_balancer_controller//:lb_policy)", + }, + template = "pull_files.sh", + visibility = ["//visibility:public"], +) diff --git a/3rdparty/bazel/com_github_kubernetes_sigs_aws_load_balancer_controller/pull_files.sh b/3rdparty/bazel/com_github_kubernetes_sigs_aws_load_balancer_controller/pull_files.sh new file mode 100644 index 000000000..10a224890 --- /dev/null +++ b/3rdparty/bazel/com_github_kubernetes_sigs_aws_load_balancer_controller/pull_files.sh @@ -0,0 +1,24 @@ +#!/usr/bin/env bash + +###### script header ###### + +lib=$(realpath @@BASE_LIB@@) || exit 1 +stat "${lib}" >> /dev/null || exit 1 + +# shellcheck source=../../../bazel/sh/lib.bash +if ! source "${lib}"; then + echo "Error: could not find import" + exit 1 +fi + +controller_policy_source="@@POLICY_SRC@@" + +###### script body ###### + +controller_policy_real_source=$(realpath "${controller_policy_source}") + +cd "${BUILD_WORKSPACE_DIRECTORY}" # needs to be done after realpath + +targetDir="terraform/infrastructure/iam/aws/alb_policy.json" + +cp "${controller_policy_real_source}" "${targetDir}" diff --git a/3rdparty/bazel/com_github_kubernetes_sigs_aws_load_balancer_controller/source.bzl b/3rdparty/bazel/com_github_kubernetes_sigs_aws_load_balancer_controller/source.bzl new file mode 100644 index 000000000..7765fefc0 --- /dev/null +++ b/3rdparty/bazel/com_github_kubernetes_sigs_aws_load_balancer_controller/source.bzl @@ -0,0 +1,22 @@ +"""A module defining the source of the AWS load balancer controller.""" + +load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") + +def aws_load_balancer_controller_deps(): + http_archive( + name = "com_github_kubernetes_sigs_aws_load_balancer_controller", + urls = [ + "https://cdn.confidential.cloud/constellation/cas/sha256/0cb78cdff9742945c9968ac12c785164a052b52260d19d218bb28a8bec04a2fd", + "https://github.com/kubernetes-sigs/aws-load-balancer-controller/archive/refs/tags/v2.11.0.tar.gz", + ], + strip_prefix = "aws-load-balancer-controller-2.11.0", + build_file_content = """ +filegroup( + srcs = ["docs/install/iam_policy.json"], + name = "lb_policy", + visibility = ["//visibility:public"], +) + """, + type = "tar.gz", + sha256 = "0cb78cdff9742945c9968ac12c785164a052b52260d19d218bb28a8bec04a2fd", + ) diff --git a/WORKSPACE.bzlmod b/WORKSPACE.bzlmod index 5bf5f4fd9..273d85e75 100644 --- a/WORKSPACE.bzlmod +++ b/WORKSPACE.bzlmod @@ -234,6 +234,10 @@ load("//3rdparty/bazel/com_github_medik8s_node_maintainance_operator:source.bzl" node_maintainance_operator_deps() +load("//3rdparty/bazel/com_github_kubernetes_sigs_aws_load_balancer_controller:source.bzl", "aws_load_balancer_controller_deps") + +aws_load_balancer_controller_deps() + # CI deps load("//bazel/toolchains:ci_deps.bzl", "ci_deps") diff --git a/bazel/ci/BUILD.bazel b/bazel/ci/BUILD.bazel index e56bca608..3fdcdcc8b 100644 --- a/bazel/ci/BUILD.bazel +++ b/bazel/ci/BUILD.bazel @@ -558,6 +558,7 @@ multirun( commands = [ ":terraform_gen", "//3rdparty/bazel/com_github_medik8s_node_maintainance_operator:pull_files", + "//3rdparty/bazel/com_github_kubernetes_sigs_aws_load_balancer_controller:pull_files", ":go_generate", ":proto_generate", ], diff --git a/docs/docs/reference/migration.md b/docs/docs/reference/migration.md index 0252c409f..36bfb1462 100644 --- a/docs/docs/reference/migration.md +++ b/docs/docs/reference/migration.md @@ -36,7 +36,13 @@ done echo "All specified rules have been deleted." ``` -## Migrations to v2.19.0 +## Migrating from CLI versions before 2.21.1 + +### AWS + +* AWS clusters that use `LoadBalancer` resources require more IAM permissions. Please upgrade your IAM roles using `constellation iam upgrade apply`. This will show necessary changes and apply them, if desired. + +## Migrating from CLI versions before 2.19.0 ### Azure @@ -46,7 +52,7 @@ echo "All specified rules have been deleted." If your Constellation has services of type `LoadBalancer`, please remove them before the upgrade and re-apply them afterward. -## Migrating from Azure's service principal authentication to managed identity authentication (during the upgrade to Constellation v2.8.0) +## Migrating from CLI versions before 2.18.0 * The `provider.azure.appClientID` and `provider.azure.appClientSecret` fields are no longer supported and should be removed. * To keep using an existing UAMI, add the `Owner` permission with the scope of your `resourceGroup`. diff --git a/terraform/infrastructure/iam/aws/alb_policy.json b/terraform/infrastructure/iam/aws/alb_policy.json index e8a05f8e6..1a5b4d614 100644 --- a/terraform/infrastructure/iam/aws/alb_policy.json +++ b/terraform/infrastructure/iam/aws/alb_policy.json @@ -29,6 +29,7 @@ "ec2:DescribeTags", "ec2:GetCoipPoolUsage", "ec2:DescribeCoipPools", + "ec2:GetSecurityGroupsForVpc", "elasticloadbalancing:DescribeLoadBalancers", "elasticloadbalancing:DescribeLoadBalancerAttributes", "elasticloadbalancing:DescribeListeners", @@ -39,7 +40,9 @@ "elasticloadbalancing:DescribeTargetGroupAttributes", "elasticloadbalancing:DescribeTargetHealth", "elasticloadbalancing:DescribeTags", - "elasticloadbalancing:DescribeTrustStores" + "elasticloadbalancing:DescribeTrustStores", + "elasticloadbalancing:DescribeListenerAttributes", + "elasticloadbalancing:DescribeCapacityReservation" ], "Resource": "*" }, @@ -188,7 +191,9 @@ "elasticloadbalancing:DeleteLoadBalancer", "elasticloadbalancing:ModifyTargetGroup", "elasticloadbalancing:ModifyTargetGroupAttributes", - "elasticloadbalancing:DeleteTargetGroup" + "elasticloadbalancing:DeleteTargetGroup", + "elasticloadbalancing:ModifyListenerAttributes", + "elasticloadbalancing:ModifyCapacityReservation" ], "Resource": "*", "Condition": { From 4b9b10137869ca0e593644126516aa9eb2f50bcc Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 7 Mar 2025 08:25:27 +0100 Subject: [PATCH 146/311] deps: update module github.com/docker/docker to v28 (#3685) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index dc4a1820b..961553162 100644 --- a/go.mod +++ b/go.mod @@ -59,7 +59,7 @@ require ( github.com/bazelbuild/buildtools v0.0.0-20250204160707-ad48c76ab9b5 github.com/bazelbuild/rules_go v0.53.0 github.com/coreos/go-systemd/v22 v22.5.0 - github.com/docker/docker v27.5.1+incompatible + github.com/docker/docker v28.0.1+incompatible github.com/edgelesssys/go-azguestattestation v0.0.0-20250212085035-c38c01af80ba github.com/edgelesssys/go-tdx-qpl v0.0.0-20250129202750-607ac61e2377 github.com/foxboron/go-uefi v0.0.0-20250207204325-69fb7dba244f diff --git a/go.sum b/go.sum index 39280df9a..12dc7db65 100644 --- a/go.sum +++ b/go.sum @@ -267,8 +267,8 @@ github.com/docker/cli v27.5.0+incompatible h1:aMphQkcGtpHixwwhAXJT1rrK/detk2JIvD github.com/docker/cli v27.5.0+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= github.com/docker/distribution v2.8.3+incompatible h1:AtKxIZ36LoNK51+Z6RpzLpddBirtxJnzDrHLEKxTAYk= github.com/docker/distribution v2.8.3+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= -github.com/docker/docker v27.5.1+incompatible h1:4PYU5dnBYqRQi0294d1FBECqT9ECWeQAIfE8q4YnPY8= -github.com/docker/docker v27.5.1+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/docker v28.0.1+incompatible h1:FCHjSRdXhNRFjlHMTv4jUNlIBbTeRjrWfeFuJp7jpo0= +github.com/docker/docker v28.0.1+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= github.com/docker/docker-credential-helpers v0.8.2 h1:bX3YxiGzFP5sOXWc3bTPEXdEaZSeVMrFgOr3T+zrFAo= github.com/docker/docker-credential-helpers v0.8.2/go.mod h1:P3ci7E3lwkZg6XiHdRKft1KckHiO9a2rNtyFbZ/ry9M= github.com/docker/go-connections v0.5.0 h1:USnMq7hx7gwdVZq1L49hLXaFtUdTADjXGp+uj1Br63c= From 39bca12491b268f8c150368cc46d0428a6bfc785 Mon Sep 17 00:00:00 2001 From: edgelessci <71088502+edgelessci@users.noreply.github.com> Date: Fri, 7 Mar 2025 08:25:46 +0100 Subject: [PATCH 147/311] image: update measurements and image version (#3687) Co-authored-by: edgelessci --- .../measurements/measurements_enterprise.go | 16 ++++++++-------- internal/config/image_enterprise.go | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/internal/attestation/measurements/measurements_enterprise.go b/internal/attestation/measurements/measurements_enterprise.go index 31f5b917f..8c3f09038 100644 --- a/internal/attestation/measurements/measurements_enterprise.go +++ b/internal/attestation/measurements/measurements_enterprise.go @@ -19,14 +19,14 @@ package measurements // revive:disable:var-naming var ( - aws_AWSNitroTPM = M{0: {Expected: []byte{0x73, 0x7f, 0x76, 0x7a, 0x12, 0xf5, 0x4e, 0x70, 0xee, 0xcb, 0xc8, 0x68, 0x40, 0x11, 0x32, 0x3a, 0xe2, 0xfe, 0x2d, 0xd9, 0xf9, 0x07, 0x85, 0x57, 0x79, 0x69, 0xd7, 0xa2, 0x01, 0x3e, 0x8c, 0x12}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xeb, 0x40, 0x9b, 0x98, 0xce, 0xe3, 0xad, 0x5c, 0x3e, 0xce, 0x07, 0x51, 0x7f, 0xbc, 0xb6, 0xf4, 0xce, 0x3b, 0xd5, 0xc2, 0xc0, 0xc5, 0x5d, 0x4e, 0x69, 0xaf, 0xa0, 0xb2, 0xbe, 0x85, 0xaa, 0x76}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x08, 0x84, 0x46, 0xb9, 0xf3, 0xc4, 0x48, 0xfa, 0x3c, 0x33, 0xd5, 0x75, 0x62, 0x63, 0x73, 0xac, 0x0b, 0xe1, 0x06, 0x7f, 0x76, 0x4f, 0x43, 0x30, 0xbe, 0x51, 0xf9, 0x7e, 0x53, 0xe0, 0x0f, 0x8c}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x69, 0x9a, 0xbe, 0x7c, 0xd1, 0xfa, 0x18, 0x55, 0x29, 0x17, 0xdc, 0x5d, 0x6d, 0x59, 0x16, 0x56, 0x63, 0x5b, 0xdb, 0x75, 0x6b, 0x18, 0x6c, 0x93, 0x32, 0x35, 0x84, 0xd4, 0x15, 0x3e, 0xab, 0x34}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - aws_AWSSEVSNP = M{0: {Expected: []byte{0xd6, 0xdf, 0x85, 0x53, 0x58, 0xf5, 0xb1, 0x0f, 0x06, 0xf0, 0xfa, 0xb3, 0xf4, 0x08, 0xad, 0x26, 0xcd, 0x16, 0x5a, 0x29, 0x49, 0xba, 0xd6, 0x9e, 0x2c, 0xc7, 0x56, 0x92, 0x52, 0x9e, 0x66, 0x2a}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x40, 0x6b, 0xac, 0x32, 0x2e, 0xf0, 0xee, 0xc7, 0x1b, 0xe7, 0xb3, 0x8c, 0xab, 0x03, 0x85, 0x2d, 0x30, 0xc5, 0x1e, 0x4b, 0x46, 0x6b, 0xec, 0xc7, 0x55, 0x2d, 0x85, 0xc2, 0x4c, 0x8e, 0x54, 0xdf}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xe1, 0xcf, 0x2a, 0xbc, 0xfb, 0x24, 0x1b, 0x60, 0xbe, 0xee, 0x65, 0x11, 0x94, 0xe1, 0xd1, 0x93, 0xbb, 0x07, 0x96, 0x7d, 0x90, 0xe9, 0x0b, 0xbc, 0x60, 0xaa, 0x10, 0xb9, 0xdf, 0xa5, 0x97, 0x76}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x8f, 0xa6, 0x39, 0x97, 0xfe, 0x60, 0x71, 0x58, 0xfd, 0x1b, 0x0d, 0x7e, 0xd6, 0x4b, 0x13, 0x09, 0x13, 0x29, 0x29, 0xf3, 0x8d, 0x1b, 0x36, 0x10, 0xb2, 0x30, 0xd8, 0x81, 0xb4, 0x62, 0x7f, 0xb0}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - azure_AzureSEVSNP = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x59, 0xae, 0x63, 0x55, 0x65, 0x3e, 0x1e, 0x06, 0x6a, 0x51, 0xa7, 0x89, 0x0b, 0x37, 0xc2, 0xbf, 0x57, 0x97, 0x10, 0x1c, 0x3d, 0x22, 0x43, 0xec, 0x25, 0x6f, 0x1a, 0xa8, 0xff, 0x0b, 0xd0, 0x55}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xf9, 0xed, 0x08, 0x5b, 0x17, 0x35, 0x73, 0xc0, 0x09, 0x99, 0xee, 0xe3, 0x58, 0x4c, 0xa9, 0xb2, 0x7c, 0x98, 0x86, 0x59, 0x37, 0x5f, 0xb2, 0xfe, 0x42, 0xa8, 0x7e, 0xf2, 0x6d, 0x0e, 0xee, 0x05}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x8c, 0x67, 0x4a, 0x96, 0xe1, 0xa2, 0x78, 0x1d, 0xae, 0x33, 0xd6, 0x10, 0x14, 0xd1, 0xd0, 0x23, 0xea, 0xa6, 0x5f, 0x59, 0x92, 0xf1, 0xcb, 0xe4, 0xe3, 0x0a, 0x18, 0xce, 0x37, 0x92, 0x09, 0x15}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - azure_AzureTDX = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x86, 0xb0, 0x7a, 0x51, 0x1a, 0xb3, 0xff, 0x0d, 0xfb, 0xcc, 0x45, 0x78, 0xa9, 0x35, 0xf7, 0xf9, 0xb8, 0x3e, 0x0e, 0x92, 0x18, 0xae, 0x3f, 0x62, 0x29, 0xcd, 0xec, 0xce, 0xfc, 0x27, 0x29, 0xa1}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x74, 0xbd, 0x54, 0x72, 0x8f, 0x9c, 0xe4, 0xee, 0x90, 0x71, 0x42, 0x14, 0xe3, 0x97, 0xb0, 0x65, 0x04, 0x98, 0x6c, 0x8a, 0x0e, 0xbc, 0xeb, 0xc5, 0xee, 0x99, 0x3f, 0x45, 0xe0, 0x8c, 0x64, 0x1b}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xa8, 0xcb, 0x84, 0xd4, 0xfe, 0xf1, 0x11, 0xe7, 0xbb, 0xe3, 0xa9, 0xb9, 0xfa, 0x94, 0xcb, 0x9b, 0xc5, 0x47, 0x72, 0x9a, 0xe5, 0x45, 0xf0, 0xcc, 0x9a, 0xa3, 0x06, 0x68, 0x14, 0x72, 0xa5, 0xcf}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + aws_AWSNitroTPM = M{0: {Expected: []byte{0x73, 0x7f, 0x76, 0x7a, 0x12, 0xf5, 0x4e, 0x70, 0xee, 0xcb, 0xc8, 0x68, 0x40, 0x11, 0x32, 0x3a, 0xe2, 0xfe, 0x2d, 0xd9, 0xf9, 0x07, 0x85, 0x57, 0x79, 0x69, 0xd7, 0xa2, 0x01, 0x3e, 0x8c, 0x12}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x00, 0x45, 0xa8, 0x2c, 0x36, 0x6b, 0xa9, 0x92, 0x43, 0x1f, 0x01, 0x50, 0x5c, 0xbb, 0xcc, 0x6a, 0x99, 0xa8, 0x5e, 0x9e, 0x57, 0xf5, 0x2f, 0x62, 0xe0, 0xf3, 0xa5, 0xf7, 0xeb, 0x86, 0x94, 0xf4}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xf5, 0x36, 0x7a, 0xb0, 0xf3, 0x9e, 0xb4, 0x0e, 0x0f, 0xd2, 0x2f, 0x8b, 0x88, 0xfa, 0x26, 0xe2, 0x44, 0xd6, 0xa0, 0xf9, 0x0c, 0xf0, 0x1e, 0x25, 0x9a, 0x95, 0x47, 0x97, 0xa6, 0xa0, 0x07, 0x32}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x5d, 0xf2, 0x1e, 0xca, 0x2b, 0x3f, 0x87, 0x8d, 0xf4, 0x17, 0x71, 0xb4, 0x62, 0x63, 0xf5, 0x25, 0xbf, 0x82, 0xaf, 0x77, 0xb2, 0xf5, 0xd9, 0xfa, 0xca, 0x24, 0x42, 0xb2, 0xc3, 0x81, 0x6d, 0xc0}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + aws_AWSSEVSNP = M{0: {Expected: []byte{0xd6, 0xdf, 0x85, 0x53, 0x58, 0xf5, 0xb1, 0x0f, 0x06, 0xf0, 0xfa, 0xb3, 0xf4, 0x08, 0xad, 0x26, 0xcd, 0x16, 0x5a, 0x29, 0x49, 0xba, 0xd6, 0x9e, 0x2c, 0xc7, 0x56, 0x92, 0x52, 0x9e, 0x66, 0x2a}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xb2, 0xff, 0xfc, 0x9d, 0x49, 0x78, 0x31, 0xff, 0xc4, 0x01, 0x0a, 0x6c, 0x95, 0x24, 0xf8, 0x8b, 0x74, 0x69, 0xea, 0xef, 0x62, 0xab, 0x6b, 0x4e, 0x78, 0x23, 0x89, 0x4d, 0xa0, 0x49, 0xbc, 0x90}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xa3, 0xba, 0xa4, 0x70, 0xee, 0x58, 0xe3, 0x02, 0x06, 0x4f, 0x2b, 0x1f, 0x4f, 0xa4, 0x4f, 0x89, 0x0a, 0x2e, 0x31, 0x18, 0xfe, 0x3a, 0x35, 0x9b, 0xf5, 0x42, 0x13, 0xc5, 0x25, 0x8f, 0x6d, 0xc2}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x5b, 0x0e, 0x02, 0x14, 0xf8, 0xb4, 0xe2, 0x7e, 0x0f, 0xf6, 0x4e, 0xef, 0x15, 0x8c, 0xda, 0x43, 0x14, 0xe5, 0x9f, 0x80, 0x3b, 0x4d, 0x16, 0xce, 0xa6, 0xce, 0x3d, 0xed, 0x39, 0x57, 0x90, 0x91}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + azure_AzureSEVSNP = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x9a, 0x3a, 0x97, 0xef, 0xec, 0x72, 0x6a, 0x4d, 0xba, 0xbb, 0xa6, 0x08, 0xa5, 0x06, 0x9a, 0x4e, 0x63, 0x92, 0x5b, 0x54, 0xac, 0xfe, 0x38, 0xad, 0x89, 0x10, 0xbd, 0x08, 0x01, 0x9c, 0xb7, 0xb4}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xf4, 0xf0, 0x54, 0xfd, 0xe7, 0xbe, 0x26, 0xd6, 0x68, 0xa5, 0xf5, 0x91, 0x88, 0xa9, 0x0e, 0x92, 0x5c, 0x00, 0x54, 0xaa, 0x22, 0xdc, 0xaa, 0xb8, 0x4e, 0x02, 0x15, 0xe5, 0xda, 0x38, 0xd8, 0x51}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x88, 0x64, 0xf3, 0x21, 0x22, 0x55, 0xee, 0x41, 0xf4, 0x98, 0x56, 0x0f, 0x9f, 0xb2, 0x2a, 0xcb, 0x20, 0x29, 0x34, 0xa5, 0x4e, 0x52, 0xba, 0xb6, 0xc7, 0x67, 0x8d, 0x8b, 0xda, 0x04, 0xc7, 0x8e}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + azure_AzureTDX = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x79, 0xce, 0x5b, 0x9f, 0xec, 0x9b, 0xd3, 0x83, 0xc4, 0x38, 0xfb, 0x71, 0xbe, 0x30, 0x7f, 0x80, 0x1b, 0x47, 0x6c, 0x60, 0x6b, 0x4a, 0x46, 0xf7, 0x6e, 0x5a, 0x4f, 0x7b, 0x74, 0xb4, 0x2e, 0x08}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xc7, 0x6a, 0xa1, 0x45, 0xf3, 0x9f, 0xae, 0xae, 0xf4, 0x48, 0x08, 0xc0, 0x30, 0x68, 0x64, 0xf9, 0x58, 0x80, 0xc9, 0xa1, 0xbc, 0x0e, 0x71, 0x7d, 0xac, 0x2c, 0x21, 0xea, 0x3f, 0x55, 0x9f, 0x07}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x4c, 0x95, 0xa3, 0xcd, 0xb6, 0xc6, 0x62, 0x93, 0x0c, 0xb8, 0x34, 0x9c, 0xd7, 0x36, 0x85, 0x45, 0x96, 0xfd, 0x3e, 0xcd, 0x60, 0xdf, 0xa6, 0x3a, 0xba, 0x24, 0x6a, 0xf6, 0x3b, 0xea, 0xb2, 0x2a}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} azure_AzureTrustedLaunch M - gcp_GCPSEVES = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x8b, 0xa0, 0xa6, 0xd4, 0xf5, 0x0e, 0xe6, 0x87, 0xdf, 0x6c, 0x62, 0x51, 0x1b, 0xbb, 0xd6, 0xeb, 0xe5, 0x0b, 0x35, 0xf4, 0x87, 0x7b, 0x9b, 0x90, 0x80, 0x43, 0x1a, 0x01, 0xd5, 0x5e, 0x99, 0x77}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x69, 0x5f, 0xb6, 0x3e, 0x76, 0xc0, 0x00, 0x91, 0x51, 0x4b, 0x6c, 0x9e, 0xc7, 0x5b, 0x8b, 0xc0, 0x27, 0x39, 0x0d, 0xd3, 0xb0, 0x0b, 0x9f, 0xf5, 0x78, 0x3e, 0x0e, 0xfd, 0xb6, 0x6b, 0x5f, 0x77}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x80, 0xc9, 0xee, 0x21, 0x41, 0xf9, 0x47, 0xff, 0x6d, 0xda, 0xc9, 0xe2, 0xb1, 0x35, 0xd3, 0xe5, 0x88, 0xa6, 0x7a, 0x58, 0x02, 0x05, 0x80, 0xa1, 0x0d, 0x07, 0x76, 0x5f, 0xf6, 0xee, 0x41, 0xaa}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - gcp_GCPSEVSNP = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x4c, 0x0a, 0x11, 0x50, 0xf1, 0xe9, 0x3d, 0x6a, 0xc6, 0x17, 0x35, 0xbd, 0xff, 0x7e, 0x7b, 0xb7, 0x38, 0xdd, 0x9b, 0xb1, 0x98, 0x76, 0x37, 0xcc, 0x8f, 0x59, 0xcb, 0x80, 0x7b, 0xbd, 0x13, 0x84}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x8d, 0xec, 0xe4, 0x35, 0x54, 0xbc, 0xc6, 0xef, 0x1f, 0x39, 0xd0, 0xcd, 0x1e, 0x1d, 0x15, 0x95, 0x38, 0x25, 0x81, 0x2b, 0xd2, 0xe1, 0x5d, 0x9c, 0xf1, 0x26, 0xcc, 0xfc, 0x38, 0x87, 0xa1, 0xfe}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x51, 0x57, 0x1d, 0x04, 0xf6, 0x8a, 0x4f, 0xfa, 0x0a, 0x34, 0xc1, 0xed, 0x3f, 0xb1, 0x43, 0x47, 0x4b, 0xcd, 0x72, 0x93, 0xc3, 0x85, 0xd9, 0x1d, 0xcf, 0x87, 0x2e, 0x30, 0xd4, 0x8a, 0xe5, 0x6d}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - openstack_QEMUVTPM = M{4: {Expected: []byte{0xe2, 0xad, 0x1c, 0xb8, 0x5c, 0x15, 0x2e, 0xbc, 0xfe, 0xd6, 0xe6, 0x51, 0x51, 0x02, 0x4a, 0x61, 0xf4, 0x86, 0xed, 0xff, 0xe4, 0x3a, 0x47, 0x8e, 0xbd, 0xf0, 0x63, 0x1f, 0x8c, 0x0f, 0x48, 0xef}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xf6, 0x0f, 0xc8, 0x0e, 0x52, 0xbc, 0xb5, 0xe9, 0x31, 0xd5, 0x5a, 0xf4, 0x4e, 0x7c, 0xe0, 0x8b, 0x63, 0xb3, 0xe3, 0x3d, 0x4f, 0x50, 0x49, 0x39, 0x68, 0x26, 0x61, 0x19, 0x98, 0x56, 0xa1, 0x96}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x3a, 0x42, 0x5a, 0xa6, 0xd1, 0x11, 0x91, 0xf0, 0x9b, 0x54, 0x3e, 0x15, 0xc3, 0x08, 0xbd, 0x2f, 0x57, 0xb2, 0xc8, 0x59, 0x57, 0xa8, 0x40, 0x7f, 0xf3, 0x73, 0x19, 0xfd, 0x5d, 0xb5, 0x14, 0x7e}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + gcp_GCPSEVES = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xa6, 0x4e, 0x17, 0x08, 0x53, 0x3f, 0x19, 0x8b, 0x84, 0x6c, 0x89, 0xda, 0xf3, 0xf8, 0x15, 0x85, 0xac, 0x50, 0xcf, 0xa7, 0x0e, 0x48, 0x66, 0x81, 0x57, 0x0a, 0x76, 0x22, 0x35, 0xdf, 0x0e, 0xfb}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x86, 0x94, 0x69, 0xc7, 0x5a, 0x11, 0x30, 0x26, 0xa6, 0x64, 0xa7, 0xfd, 0x13, 0x98, 0xf5, 0xfe, 0xd6, 0x42, 0xd5, 0x72, 0x9d, 0x22, 0x97, 0x88, 0xb6, 0xe2, 0x99, 0xa0, 0x05, 0xcb, 0x09, 0xfc}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x6d, 0x98, 0x27, 0xee, 0xa5, 0xd1, 0x1d, 0x9f, 0x20, 0x65, 0xd4, 0x70, 0x7f, 0xaf, 0x1d, 0x98, 0x3c, 0xc6, 0x16, 0xb8, 0x7c, 0xf7, 0xcb, 0x4d, 0x49, 0xfb, 0x3c, 0x9b, 0x82, 0x6f, 0x0d, 0x42}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + gcp_GCPSEVSNP = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x53, 0xb6, 0x10, 0x2f, 0xa5, 0x01, 0x04, 0x43, 0x1f, 0x29, 0x6c, 0xda, 0x45, 0x67, 0xe7, 0x70, 0x3a, 0x14, 0xb9, 0xd1, 0x2e, 0x99, 0x65, 0xdc, 0xbe, 0x4c, 0x90, 0x7a, 0xf8, 0xe3, 0xcf, 0x4c}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x62, 0x57, 0x44, 0xb8, 0x04, 0x27, 0xa8, 0xc8, 0xdb, 0x2a, 0x19, 0x28, 0x2a, 0x5f, 0x6f, 0x67, 0xad, 0xcf, 0x18, 0x3e, 0x32, 0x93, 0x04, 0x04, 0x39, 0x72, 0x1e, 0x1a, 0x3a, 0xd1, 0x71, 0x3a}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xac, 0x59, 0x82, 0x1f, 0x62, 0x83, 0xcf, 0xf3, 0xea, 0x17, 0x40, 0x4d, 0x2b, 0xa1, 0x5a, 0x86, 0xc4, 0x54, 0xc3, 0xe6, 0x58, 0xe9, 0x01, 0xc1, 0x70, 0x96, 0x8e, 0xd9, 0xe7, 0x02, 0x6a, 0xa6}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + openstack_QEMUVTPM = M{4: {Expected: []byte{0x9b, 0x54, 0x52, 0x36, 0xe6, 0xed, 0x0c, 0xf0, 0x4d, 0xd9, 0x19, 0xef, 0xf3, 0xdc, 0x35, 0x1a, 0xcb, 0x2f, 0x1d, 0x2d, 0x46, 0xce, 0x8e, 0x0e, 0x98, 0xc8, 0xd2, 0x0b, 0xa3, 0x4c, 0xb7, 0x39}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x1c, 0xcf, 0x45, 0xc9, 0x49, 0x68, 0x89, 0xa1, 0x17, 0x87, 0x7d, 0x8d, 0x43, 0x77, 0x4f, 0x5f, 0xf3, 0xc7, 0x35, 0x90, 0x99, 0x3c, 0x1c, 0xfb, 0xb3, 0x5a, 0x2e, 0xbd, 0xa0, 0xfe, 0x17, 0x1a}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x5d, 0xa7, 0x89, 0xd7, 0x9e, 0xb3, 0xac, 0x3c, 0xf1, 0xdb, 0xfc, 0xe5, 0x15, 0xc3, 0x05, 0xd0, 0xac, 0x59, 0x1b, 0x4b, 0x2a, 0x35, 0x10, 0x03, 0xb1, 0x9b, 0x54, 0x04, 0x19, 0xc5, 0x27, 0x95}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} qemu_QEMUTDX M - qemu_QEMUVTPM = M{4: {Expected: []byte{0x12, 0x41, 0xfb, 0x54, 0x7f, 0x23, 0xdd, 0x92, 0x3a, 0x91, 0x7c, 0xc5, 0x05, 0x3c, 0x68, 0xa7, 0xaa, 0x2c, 0xd1, 0x1b, 0x14, 0xf3, 0xde, 0xf6, 0x1c, 0x0c, 0xfe, 0x7f, 0x91, 0x50, 0x77, 0xb7}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xcd, 0xea, 0x19, 0x1a, 0x74, 0xd8, 0x76, 0xc8, 0x74, 0x69, 0xb9, 0x45, 0x26, 0xa2, 0x43, 0xdf, 0x96, 0xb8, 0x8a, 0xdf, 0x1a, 0x0d, 0x11, 0xb9, 0x33, 0xcc, 0xc0, 0xde, 0xc8, 0xea, 0x98, 0x61}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x59, 0x51, 0x35, 0x50, 0xc4, 0xa9, 0x6a, 0x0b, 0x50, 0x70, 0x1f, 0x34, 0xc3, 0xd2, 0x75, 0x8e, 0x13, 0x1c, 0x44, 0x93, 0x2f, 0x6b, 0xac, 0x0f, 0x42, 0x60, 0xda, 0xf9, 0x0c, 0x3f, 0x9c, 0x4f}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + qemu_QEMUVTPM = M{4: {Expected: []byte{0x65, 0xb4, 0x3f, 0x26, 0x36, 0x59, 0x01, 0x48, 0x97, 0xd7, 0xb3, 0x6d, 0x59, 0xb9, 0x89, 0xfe, 0x50, 0xf9, 0x78, 0x63, 0xa2, 0x73, 0x17, 0x34, 0x9b, 0xc6, 0x45, 0x13, 0x83, 0x73, 0x6e, 0x13}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x66, 0xd4, 0x80, 0xe7, 0x77, 0xed, 0xc4, 0xd1, 0x2d, 0x62, 0x18, 0x7d, 0x18, 0x92, 0x38, 0xf3, 0xc4, 0x3a, 0xf5, 0x6e, 0x06, 0x69, 0x8a, 0x92, 0x2f, 0x24, 0x9d, 0x1a, 0x24, 0xa7, 0x9c, 0x58}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xc9, 0x37, 0x35, 0x8c, 0xa0, 0x14, 0x4a, 0xa3, 0x0c, 0x33, 0x90, 0x8d, 0x4b, 0x3d, 0x12, 0x96, 0xca, 0x6b, 0xd2, 0x69, 0x76, 0x9a, 0xa4, 0x60, 0x1d, 0x05, 0x46, 0xd1, 0x31, 0x7c, 0x63, 0x4f}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} ) diff --git a/internal/config/image_enterprise.go b/internal/config/image_enterprise.go index 7ad453fd8..3aa639bff 100644 --- a/internal/config/image_enterprise.go +++ b/internal/config/image_enterprise.go @@ -10,5 +10,5 @@ package config const ( // defaultImage is the default image to use. - defaultImage = "ref/main/stream/nightly/v2.22.0-pre.0.20250304124612-7fdece4d6c04" + defaultImage = "ref/main/stream/nightly/v2.22.0-pre.0.20250306164449-a491cac57a9b" ) From e5d1aab7d8a2767d149ba562c2e50aa2d471ea6a Mon Sep 17 00:00:00 2001 From: edgelessci <71088502+edgelessci@users.noreply.github.com> Date: Fri, 7 Mar 2025 09:34:08 +0100 Subject: [PATCH 148/311] chore: update CI for v2.21.1 (#3686) Co-authored-by: edgelessci --- .github/workflows/e2e-test-release.yml | 2 +- .github/workflows/e2e-test-weekly.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/e2e-test-release.yml b/.github/workflows/e2e-test-release.yml index 1fbc1c174..a3c9d25ab 100644 --- a/.github/workflows/e2e-test-release.yml +++ b/.github/workflows/e2e-test-release.yml @@ -409,7 +409,7 @@ jobs: fail-fast: false max-parallel: 1 matrix: - fromVersion: ["v2.21.0"] + fromVersion: ["v2.21.1"] attestationVariant: ["gcp-sev-snp", "azure-sev-snp", "azure-tdx", "aws-sev-snp"] name: Run upgrade tests secrets: inherit diff --git a/.github/workflows/e2e-test-weekly.yml b/.github/workflows/e2e-test-weekly.yml index 04cf0b04c..ab4a9f6ad 100644 --- a/.github/workflows/e2e-test-weekly.yml +++ b/.github/workflows/e2e-test-weekly.yml @@ -420,7 +420,7 @@ jobs: fail-fast: false max-parallel: 1 matrix: - fromVersion: ["v2.21.0"] + fromVersion: ["v2.21.1"] attestationVariant: ["gcp-sev-snp", "azure-sev-snp", "azure-tdx", "aws-sev-snp"] name: Run upgrade tests secrets: inherit From fa8b0bab798fb39b9a98ef542e0ddd2d25a0bcb8 Mon Sep 17 00:00:00 2001 From: edgelessci <71088502+edgelessci@users.noreply.github.com> Date: Mon, 10 Mar 2025 08:07:56 +0100 Subject: [PATCH 149/311] image: update locked rpms (#3690) Co-authored-by: edgelessci --- image/mirror/SHA256SUMS | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/image/mirror/SHA256SUMS b/image/mirror/SHA256SUMS index 470ae49fd..4006546e4 100644 --- a/image/mirror/SHA256SUMS +++ b/image/mirror/SHA256SUMS @@ -254,8 +254,8 @@ b3b261e448a25c6550f050ca1813509dd6edbb10f22c02a535548332435b6bc4 pam-1.6.1-5.fc 753d7b5a6531eec7689414dc1a4ce76ba4d327b8ad0363a9298ee67b565c1d95 pam-libs-1.6.1-5.fc40.i686.rpm 6ca8efd0b2a26cc51917c1c81260d919ef7760f0e0770dc872a78b1b829299cd pam-libs-1.6.1-5.fc40.x86_64.rpm 9bbce784622e02af0371ced8e9a7d26adba7eabd66ecfcb8bbe2d24cf616e3c1 parted-3.6-4.fc40.x86_64.rpm -4e5a6475fe4f0c5d4919b7bafa52cd1f54b21a26610c9f0582f9feb262b578d9 passt-0^20250121.g4f2c8e7-2.fc40.x86_64.rpm -23e04153376f97de74593687fe282fc76c5a7694d6b05fffabe81a35ef5cd05b passt-selinux-0^20250121.g4f2c8e7-2.fc40.noarch.rpm +21509d71e6314918d78b3175018be8ac6e59a4c4b5478ecdbe31aa424fb79e26 passt-0^20250217.ga1e48a0-2.fc40.x86_64.rpm +d372ba134749d84ffd97e538adb7468ba8b15a46df338a169328c69e0a2e9ad6 passt-selinux-0^20250217.ga1e48a0-2.fc40.noarch.rpm a0fb808d6b7ff8cd9cfdc1a60f213851cecdcace334d6e5aa1e0e54b81d79a25 pcre2-10.44-1.fc40.i686.rpm 73e50df09266fcffda9c24a3738f579dd365c2c187c294da054ef9915edc3851 pcre2-10.44-1.fc40.x86_64.rpm dbec699e88d42fc6fb1df0a8c0b9023941ed1b1b7625694253a612eaf9f2691d pcre2-syntax-10.44-1.fc40.noarch.rpm @@ -339,17 +339,17 @@ e1d443f7dcaec55eedc34bb66dd798ba9901dba69a169cff46f6c45671a3b3fa unbound-anchor 945aa536bc30050abc1870cef167cb944cf78d6628923476db43201a0054574b util-linux-2.40.2-1.fc40.x86_64.rpm 7ec1b5df780c5a30f8e901179480125a6ea87f1f7bad3b69da7f4b351b88c3dd util-linux-core-2.40-0.9.rc1.fc40.x86_64.rpm b1aa4e816c01c08c18924865640f214f717cdfc66837e53a24b8edfb80a86f9d util-linux-core-2.40.2-1.fc40.x86_64.rpm -fe04c806d2f7e4363448d7c7c6cc87429a347892975b20bf595f6ab7cea65c70 vim-common-9.1.1122-1.fc40.x86_64.rpm -3f0b8e880789439f16ed640255f95632e5212f3715c00105bc93084a623d1fa6 vim-data-9.1.1122-1.fc40.noarch.rpm -7eaec992f0f993ce747a024929f2faa96ce71812a910c78f35df5c44ce9585c9 vim-enhanced-9.1.1122-1.fc40.x86_64.rpm -7d899b071ed135f40e9929db6e5fb6a0bb0e1d257fcc263654ea0e713d262690 vim-filesystem-9.1.1122-1.fc40.noarch.rpm +c46fff2b0fd364c89c6e36abf1d6546bd209923c86312b774c3dd72bce610a4f vim-common-9.1.1169-1.fc40.x86_64.rpm +fa98d3d74921c9d8fe7bef96f3b283a05aaadba2b5b832f56dc72e9f97ee103e vim-data-9.1.1169-1.fc40.noarch.rpm +4499140a62b9982b3c09affb82688ba1fd62f2ab745ea3b5fe5fd86c39f87dc1 vim-enhanced-9.1.1169-1.fc40.x86_64.rpm +82690420e88fd44bf8b96ebcc1b45122ac53765e4f486f45b455f9fdfe9b9739 vim-filesystem-9.1.1169-1.fc40.noarch.rpm 69fd53fe41a8811e904b5429b1934a413d88978ec54d5c9e64370be32cbfc2ef wget2-2.2.0-2.fc40.x86_64.rpm a00cc0a87c60ffbf5495a9796ac7074e6a47e0bebbb8c137d902014cd7ff5a30 wget2-libs-2.2.0-2.fc40.x86_64.rpm 09822d8d386dc81619639415a211b34592b0c5d43f7be288691cc4d933a0542c wget2-wget-2.2.0-2.fc40.x86_64.rpm cf0306ceed1c6b3be39060d85f16b1953b464d3a625488b170d3b7aadf600645 which-2.21-41.fc40.x86_64.rpm 4ede95a2fa3bc0ae617c8bf3a375b800163d58733b4829b15d9f038505d79fee whois-nls-5.5.20-3.fc40.noarch.rpm e2195010e857f56b19246f8b821f9391922880b7691b3728a413f540edc890a6 xkeyboard-config-2.41-1.fc40.noarch.rpm -7dddad4c4829da61623f8716a237005d9de2e04b926f73f926083d371178b42b xxd-9.1.1122-1.fc40.x86_64.rpm +5eca369115d1e5a898157c269841e1056cbe79ad374ae00e32a10172477b1542 xxd-9.1.1169-1.fc40.x86_64.rpm ee599a1c4d7ee635e54ec137af4dded83f433b9c8a5976f75ecdcd000b5246e3 xz-5.4.6-3.fc40.x86_64.rpm b92ef78d8ab424c22130e457d0ef691d8197bff61c3b8852205d1b02baba3819 xz-libs-5.4.6-3.fc40.i686.rpm b6ee44b3d7e494b0364f26b7d0b169a8092180af787423cd5e8a47dc0f738a66 xz-libs-5.4.6-3.fc40.x86_64.rpm From b08bfd327dd71543ef197cda96d34aa321131e5e Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 10 Mar 2025 13:15:30 +0100 Subject: [PATCH 150/311] deps: update K8s constrained Azure versions (#3688) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- internal/versions/versions.go | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/internal/versions/versions.go b/internal/versions/versions.go index 6d862579d..1d10afd25 100644 --- a/internal/versions/versions.go +++ b/internal/versions/versions.go @@ -252,10 +252,10 @@ var VersionConfigs = map[ValidK8sVersion]KubernetesVersion{ CloudControllerManagerImageAWS: "registry.k8s.io/provider-aws/cloud-controller-manager:v1.29.8@sha256:3f8e7be967f76b328123d53846c21dcd930b60094f9f4abd8bf5ab0fe108e6e4", // renovate:container // CloudControllerManagerImageAzure is the CCM image used on Azure. // Check for newer versions at https://github.com/kubernetes-sigs/cloud-provider-azure/blob/master/README.md. - CloudControllerManagerImageAzure: "mcr.microsoft.com/oss/kubernetes/azure-cloud-controller-manager:v1.29.12@sha256:9d232f2faa9d7e9f98ca13be09e787b015fa39856eceedd1ac987204342dbafd", // renovate:container + CloudControllerManagerImageAzure: "mcr.microsoft.com/oss/kubernetes/azure-cloud-controller-manager:v1.29.13@sha256:aa3d83f3f1b8dc22a9b2d4e35d417292bffc6eac2c6a2e22a04ebbd6561148b2", // renovate:container // CloudNodeManagerImageAzure is the cloud-node-manager image used on Azure. // Check for newer versions at https://github.com/kubernetes-sigs/cloud-provider-azure/blob/master/README.md. - CloudNodeManagerImageAzure: "mcr.microsoft.com/oss/kubernetes/azure-cloud-node-manager:v1.29.12@sha256:4e90411ec084ec3800dad61cebf94feddc3617cb357ac133db9d151295c95220", // renovate:container + CloudNodeManagerImageAzure: "mcr.microsoft.com/oss/kubernetes/azure-cloud-node-manager:v1.29.13@sha256:fd8aa37ecaf8e8075555be84a98aff28527ffddbcd084f4e3b3cd31c80748253", // renovate:container // CloudControllerManagerImageGCP is the CCM image used on GCP. CloudControllerManagerImageGCP: "ghcr.io/edgelesssys/cloud-provider-gcp:v29.5.1@sha256:ebbc6f5755725b6c2c81ca1d1580e2feba83572c41608b739c50f85b2e5de936", // renovate:container // CloudControllerManagerImageOpenStack is the CCM image used on OpenStack. @@ -319,10 +319,10 @@ var VersionConfigs = map[ValidK8sVersion]KubernetesVersion{ CloudControllerManagerImageAWS: "registry.k8s.io/provider-aws/cloud-controller-manager:v1.30.8@sha256:f4e82b924e967656d8df9f467c9c1915509e94e228b53840a7f9f2367e1ba9f5", // renovate:container // CloudControllerManagerImageAzure is the CCM image used on Azure. // Check for newer versions at https://github.com/kubernetes-sigs/cloud-provider-azure/blob/master/README.md. - CloudControllerManagerImageAzure: "mcr.microsoft.com/oss/kubernetes/azure-cloud-controller-manager:v1.30.9@sha256:7bf207a07de2c900b401bb4fb06fb8fa52d1c97491d204d357f232ea66f1883e", // renovate:container + CloudControllerManagerImageAzure: "mcr.microsoft.com/oss/kubernetes/azure-cloud-controller-manager:v1.30.10@sha256:98912ffdf1264738fd07a19e41e88c74b77c81ab40e1383a588e7f2a6ec3469d", // renovate:container // CloudNodeManagerImageAzure is the cloud-node-manager image used on Azure. // Check for newer versions at https://github.com/kubernetes-sigs/cloud-provider-azure/blob/master/README.md. - CloudNodeManagerImageAzure: "mcr.microsoft.com/oss/kubernetes/azure-cloud-node-manager:v1.30.9@sha256:68b45ebce86f9714e3cb89c6f86e7d1e727c3612e973471b969be8b007bbd6fe", // renovate:container + CloudNodeManagerImageAzure: "mcr.microsoft.com/oss/kubernetes/azure-cloud-node-manager:v1.30.10@sha256:4cb8c3e4e79e166f0dbbb76bdd37c6dce931ac4cb63f32aea1327b22fb5317f1", // renovate:container // CloudControllerManagerImageGCP is the CCM image used on GCP. CloudControllerManagerImageGCP: "ghcr.io/edgelesssys/cloud-provider-gcp:v30.1.4@sha256:0c3695a18d3825492196facb092e5fe56e466fa8517cde5a206fe21630c1da13", // renovate:container // CloudControllerManagerImageOpenStack is the CCM image used on OpenStack. @@ -386,10 +386,10 @@ var VersionConfigs = map[ValidK8sVersion]KubernetesVersion{ CloudControllerManagerImageAWS: "registry.k8s.io/provider-aws/cloud-controller-manager:v1.31.5@sha256:6f94a695828de888c8efc57e3243db9e788709767f687a6a8cb07c2e42158862", // renovate:container // CloudControllerManagerImageAzure is the CCM image used on Azure. // Check for newer versions at https://github.com/kubernetes-sigs/cloud-provider-azure/blob/master/README.md. - CloudControllerManagerImageAzure: "mcr.microsoft.com/oss/kubernetes/azure-cloud-controller-manager:v1.31.3@sha256:d9575058b0292830ac77c9e5e4b4813c38de12a64b757d01dbbf7a3292c7ccb8", // renovate:container + CloudControllerManagerImageAzure: "mcr.microsoft.com/oss/kubernetes/azure-cloud-controller-manager:v1.31.4@sha256:839d5b203c3c48eeee1c30002dfae7e481ba650f103c970f2b4b734065bff1f6", // renovate:container // CloudNodeManagerImageAzure is the cloud-node-manager image used on Azure. // Check for newer versions at https://github.com/kubernetes-sigs/cloud-provider-azure/blob/master/README.md. - CloudNodeManagerImageAzure: "mcr.microsoft.com/oss/kubernetes/azure-cloud-node-manager:v1.31.3@sha256:51efddc331c88cccf19d369c9f8850d3b8c91e9dd833ef5bfb3a6411a0d22f86", // renovate:container + CloudNodeManagerImageAzure: "mcr.microsoft.com/oss/kubernetes/azure-cloud-node-manager:v1.31.4@sha256:8a1bd6d6eb559ecb814a8745e3fcdbc1ace360398d332caeac3f35fb1bf842dd", // renovate:container // CloudControllerManagerImageGCP is the CCM image used on GCP. CloudControllerManagerImageGCP: "ghcr.io/edgelesssys/cloud-provider-gcp:v30.1.4@sha256:0c3695a18d3825492196facb092e5fe56e466fa8517cde5a206fe21630c1da13", // renovate:container // CloudControllerManagerImageOpenStack is the CCM image used on OpenStack. From 368b52a4dd82437d0ba57d336b202730b9311c0d Mon Sep 17 00:00:00 2001 From: 3u13r Date: Mon, 10 Mar 2025 13:21:19 +0100 Subject: [PATCH 151/311] terraform: remove legacy infrastructure modules (#3691) --- bazel/ci/terraform.sh.in | 1 - terraform/legacy-module/README.md | 6 - .../legacy-module/aws-constellation/main.tf | 68 ------- .../aws-constellation/variables.tf | 77 ------- .../legacy-module/azure-constellation/main.tf | 68 ------- .../azure-constellation/variables.tf | 94 --------- .../legacy-module/common/fetch-image/main.tf | 38 ---- .../common/fetch-image/output.tf | 4 - .../common/fetch-image/variables.tf | 20 -- terraform/legacy-module/common/install-yq.sh | 43 ---- .../install-constellation.sh | 34 ---- .../constellation-cluster/main.tf | 191 ------------------ .../constellation-cluster/variables.tf | 133 ------------ .../legacy-module/gcp-constellation/main.tf | 71 ------- .../gcp-constellation/variables.tf | 86 -------- 15 files changed, 934 deletions(-) delete mode 100644 terraform/legacy-module/README.md delete mode 100644 terraform/legacy-module/aws-constellation/main.tf delete mode 100644 terraform/legacy-module/aws-constellation/variables.tf delete mode 100644 terraform/legacy-module/azure-constellation/main.tf delete mode 100644 terraform/legacy-module/azure-constellation/variables.tf delete mode 100644 terraform/legacy-module/common/fetch-image/main.tf delete mode 100644 terraform/legacy-module/common/fetch-image/output.tf delete mode 100644 terraform/legacy-module/common/fetch-image/variables.tf delete mode 100755 terraform/legacy-module/common/install-yq.sh delete mode 100755 terraform/legacy-module/constellation-cluster/install-constellation.sh delete mode 100644 terraform/legacy-module/constellation-cluster/main.tf delete mode 100644 terraform/legacy-module/constellation-cluster/variables.tf delete mode 100644 terraform/legacy-module/gcp-constellation/main.tf delete mode 100644 terraform/legacy-module/gcp-constellation/variables.tf diff --git a/bazel/ci/terraform.sh.in b/bazel/ci/terraform.sh.in index 456e312c4..777049106 100644 --- a/bazel/ci/terraform.sh.in +++ b/bazel/ci/terraform.sh.in @@ -46,7 +46,6 @@ excludeDirs=( excludeLockDirs=( "build" "terraform-provider-constellation" - "terraform/legacy-module" ) excludeCheckDirs=( diff --git a/terraform/legacy-module/README.md b/terraform/legacy-module/README.md deleted file mode 100644 index c755b0a54..000000000 --- a/terraform/legacy-module/README.md +++ /dev/null @@ -1,6 +0,0 @@ -## Constellation Terraform Modules - -> [!WARNING] -> The Constellation Terraform modules are deprecated, and support will be discontinued in v2.15.0. -> To continue managing Constellation clusters through Terraform, you can use the [Constellation Terraform provider](https://docs.edgeless.systems/constellation/workflows/terraform-provider). -> Clusters created through the Constellation Terraform modules can also be [imported](https://registry.terraform.io/providers/edgelesssys/constellation/latest/docs/resources/cluster#import) to the Constellation Terraform provider. diff --git a/terraform/legacy-module/aws-constellation/main.tf b/terraform/legacy-module/aws-constellation/main.tf deleted file mode 100644 index 83c92528a..000000000 --- a/terraform/legacy-module/aws-constellation/main.tf +++ /dev/null @@ -1,68 +0,0 @@ -locals { - region = substr(var.zone, 0, length(var.zone) - 1) -} - -module "aws_iam" { - source = "../../infrastructure/iam/aws" - name_prefix = var.name_prefix - region = local.region -} - -resource "null_resource" "ensure_yq" { - provisioner "local-exec" { - command = < "image.txt" - - if [ '${var.csp}' = 'azure' ]; then - sed -i 's/CommunityGalleries/communityGalleries/g' image.txt - sed -i 's/Images/images/g' image.txt - sed -i 's/Versions/versions/g' image.txt - fi - EOT -} - - -resource "null_resource" "fetch_image" { - provisioner "local-exec" { - command = local.fetch_image_command - - environment = { - attestation_variant = var.attestation_variant - } - } - provisioner "local-exec" { - when = destroy - command = "rm image.txt" - } - triggers = { - always_run = "${timestamp()}" - } -} - -data "local_file" "image" { - filename = "image.txt" - depends_on = [null_resource.fetch_image] -} diff --git a/terraform/legacy-module/common/fetch-image/output.tf b/terraform/legacy-module/common/fetch-image/output.tf deleted file mode 100644 index 8fcdc030f..000000000 --- a/terraform/legacy-module/common/fetch-image/output.tf +++ /dev/null @@ -1,4 +0,0 @@ -output "image" { - description = "The resolved image ID of the CSP." - value = data.local_file.image.content -} diff --git a/terraform/legacy-module/common/fetch-image/variables.tf b/terraform/legacy-module/common/fetch-image/variables.tf deleted file mode 100644 index 25b88bd1b..000000000 --- a/terraform/legacy-module/common/fetch-image/variables.tf +++ /dev/null @@ -1,20 +0,0 @@ -variable "csp" { - description = "The cloud service provider to fetch image data for." - type = string -} - -variable "attestation_variant" { - description = "The attestation variant to fetch image data for." - type = string -} - -variable "region" { - description = "The region to fetch image data for." - type = string - default = "" -} - -variable "image" { - description = "The image reference or semantical release version to fetch image data for." - type = string -} diff --git a/terraform/legacy-module/common/install-yq.sh b/terraform/legacy-module/common/install-yq.sh deleted file mode 100755 index 14c375fd9..000000000 --- a/terraform/legacy-module/common/install-yq.sh +++ /dev/null @@ -1,43 +0,0 @@ -#!/usr/bin/env bash -version="v4.35.2" -if [[ -f ./yq ]] && ./yq --version | grep -q "${version}"; then - echo "yq is already available and up to date." - exit 0 -fi -if [[ -f ./yq ]]; then - echo "yq is already available but not at the required version. Replacing with ${version}." - rm -f yq -fi - -echo "Fetching yq ${version}" -os=$(uname -s) -arch=$(uname -m) -url="" - -if [[ ${os} == "Darwin" ]]; then - if [[ ${arch} == "arm64" ]]; then - url="https://github.com/mikefarah/yq/releases/download/${version}/yq_darwin_arm64" - elif [[ ${arch} == "x86_64" ]]; then - url="https://github.com/mikefarah/yq/releases/download/${version}/yq_darwin_amd64" - fi -elif [[ ${os} == "Linux" ]]; then - if [[ ${arch} == "x86_64" ]]; then - url="https://github.com/mikefarah/yq/releases/download/${version}/yq_linux_amd64" - elif [[ ${arch} == "arm64" ]]; then - url="https://github.com/mikefarah/yq/releases/download/${version}/yq_linux_arm64" - fi -fi - -if [[ -z ${url} ]]; then - echo "os \"${os}\" and/or architecture \"${arch}\" is not supported." - exit 1 -else - echo "Downloading yq from ${url}" - curl -o yq -L "${url}" - chmod +x ./yq - ./yq --version - if ! ./yq --version | grep -q "${version}"; then # check that yq was installed correctly - echo "Version is incorrect" - exit 1 - fi -fi diff --git a/terraform/legacy-module/constellation-cluster/install-constellation.sh b/terraform/legacy-module/constellation-cluster/install-constellation.sh deleted file mode 100755 index b056db21a..000000000 --- a/terraform/legacy-module/constellation-cluster/install-constellation.sh +++ /dev/null @@ -1,34 +0,0 @@ -#!/usr/bin/env bash -if [[ -f ./constellation ]]; then - echo "constellation CLI is already available." - exit 0 -fi - -os=$(uname -s) -arch=$(uname -m) -version=$1 -url="" - -echo "Fetching constellation ${version}" - -if [[ ${os} == "Darwin" ]]; then - if [[ ${arch} == "arm64" ]]; then - url="https://github.com/edgelesssys/constellation/releases/${version}/download/constellation-darwin-arm64" - elif [[ ${arch} == "x86_64" ]]; then - url="https://github.com/edgelesssys/constellation/releases/${version}/download/constellation-darwin-amd64" - fi -elif [[ ${os} == "Linux" ]]; then - if [[ ${arch} == "x86_64" ]]; then - url="https://github.com/edgelesssys/constellation/releases/${version}/download/constellation-linux-amd64" - elif [[ ${arch} == "arm64" ]]; then - url="https://github.com/edgelesssys/constellation/releases/${version}/download/constellation-linux-arm64" - fi -fi - -if [[ -z ${url} ]]; then - echo "os \"${os}\" and/or architecture \"${arch}\" is not supported." - exit 1 -else - curl -o constellation -L "${url}" - chmod +x constellation -fi diff --git a/terraform/legacy-module/constellation-cluster/main.tf b/terraform/legacy-module/constellation-cluster/main.tf deleted file mode 100644 index f84406f16..000000000 --- a/terraform/legacy-module/constellation-cluster/main.tf +++ /dev/null @@ -1,191 +0,0 @@ -locals { - yq_node_groups = join("\n", flatten([ - for name, group in var.node_groups : [ - "./yq eval '.nodeGroups.${name}.role = \"${group.role}\"' -i constellation-conf.yaml", - "./yq eval '.nodeGroups.${name}.zone = \"${group.zone}\"' -i constellation-conf.yaml", - "./yq eval '.nodeGroups.${name}.instanceType = \"${group.instance_type}\"' -i constellation-conf.yaml", - "./yq eval '.nodeGroups.${name}.stateDiskSizeGB = ${group.disk_size}' -i constellation-conf.yaml", - "./yq eval '.nodeGroups.${name}.stateDiskType = \"${group.disk_type}\"' -i constellation-conf.yaml", - "./yq eval '.nodeGroups.${name}.initialCount = ${group.initial_count}' -i constellation-conf.yaml" - ] - ])) - gcp_sa_file_path = "service_account_file.json" -} - -resource "null_resource" "ensure_cli" { - provisioner "local-exec" { - command = < "${local.gcp_sa_file_path}" - EOT - } - provisioner "local-exec" { - when = destroy - command = "rm ${self.triggers.file_path}" - } - triggers = { - always_run = timestamp() - file_path = local.gcp_sa_file_path - } -} - -resource "null_resource" "gcp_config" { - count = var.gcp_config != null ? 1 : 0 - provisioner "local-exec" { - command = < Date: Wed, 12 Mar 2025 08:46:29 +0100 Subject: [PATCH 152/311] image: update measurements and image version (#3693) Co-authored-by: edgelessci --- .../measurements/measurements_enterprise.go | 16 ++++++++-------- internal/config/image_enterprise.go | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/internal/attestation/measurements/measurements_enterprise.go b/internal/attestation/measurements/measurements_enterprise.go index 8c3f09038..4fc55f43d 100644 --- a/internal/attestation/measurements/measurements_enterprise.go +++ b/internal/attestation/measurements/measurements_enterprise.go @@ -19,14 +19,14 @@ package measurements // revive:disable:var-naming var ( - aws_AWSNitroTPM = M{0: {Expected: []byte{0x73, 0x7f, 0x76, 0x7a, 0x12, 0xf5, 0x4e, 0x70, 0xee, 0xcb, 0xc8, 0x68, 0x40, 0x11, 0x32, 0x3a, 0xe2, 0xfe, 0x2d, 0xd9, 0xf9, 0x07, 0x85, 0x57, 0x79, 0x69, 0xd7, 0xa2, 0x01, 0x3e, 0x8c, 0x12}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x00, 0x45, 0xa8, 0x2c, 0x36, 0x6b, 0xa9, 0x92, 0x43, 0x1f, 0x01, 0x50, 0x5c, 0xbb, 0xcc, 0x6a, 0x99, 0xa8, 0x5e, 0x9e, 0x57, 0xf5, 0x2f, 0x62, 0xe0, 0xf3, 0xa5, 0xf7, 0xeb, 0x86, 0x94, 0xf4}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xf5, 0x36, 0x7a, 0xb0, 0xf3, 0x9e, 0xb4, 0x0e, 0x0f, 0xd2, 0x2f, 0x8b, 0x88, 0xfa, 0x26, 0xe2, 0x44, 0xd6, 0xa0, 0xf9, 0x0c, 0xf0, 0x1e, 0x25, 0x9a, 0x95, 0x47, 0x97, 0xa6, 0xa0, 0x07, 0x32}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x5d, 0xf2, 0x1e, 0xca, 0x2b, 0x3f, 0x87, 0x8d, 0xf4, 0x17, 0x71, 0xb4, 0x62, 0x63, 0xf5, 0x25, 0xbf, 0x82, 0xaf, 0x77, 0xb2, 0xf5, 0xd9, 0xfa, 0xca, 0x24, 0x42, 0xb2, 0xc3, 0x81, 0x6d, 0xc0}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - aws_AWSSEVSNP = M{0: {Expected: []byte{0xd6, 0xdf, 0x85, 0x53, 0x58, 0xf5, 0xb1, 0x0f, 0x06, 0xf0, 0xfa, 0xb3, 0xf4, 0x08, 0xad, 0x26, 0xcd, 0x16, 0x5a, 0x29, 0x49, 0xba, 0xd6, 0x9e, 0x2c, 0xc7, 0x56, 0x92, 0x52, 0x9e, 0x66, 0x2a}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xb2, 0xff, 0xfc, 0x9d, 0x49, 0x78, 0x31, 0xff, 0xc4, 0x01, 0x0a, 0x6c, 0x95, 0x24, 0xf8, 0x8b, 0x74, 0x69, 0xea, 0xef, 0x62, 0xab, 0x6b, 0x4e, 0x78, 0x23, 0x89, 0x4d, 0xa0, 0x49, 0xbc, 0x90}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xa3, 0xba, 0xa4, 0x70, 0xee, 0x58, 0xe3, 0x02, 0x06, 0x4f, 0x2b, 0x1f, 0x4f, 0xa4, 0x4f, 0x89, 0x0a, 0x2e, 0x31, 0x18, 0xfe, 0x3a, 0x35, 0x9b, 0xf5, 0x42, 0x13, 0xc5, 0x25, 0x8f, 0x6d, 0xc2}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x5b, 0x0e, 0x02, 0x14, 0xf8, 0xb4, 0xe2, 0x7e, 0x0f, 0xf6, 0x4e, 0xef, 0x15, 0x8c, 0xda, 0x43, 0x14, 0xe5, 0x9f, 0x80, 0x3b, 0x4d, 0x16, 0xce, 0xa6, 0xce, 0x3d, 0xed, 0x39, 0x57, 0x90, 0x91}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - azure_AzureSEVSNP = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x9a, 0x3a, 0x97, 0xef, 0xec, 0x72, 0x6a, 0x4d, 0xba, 0xbb, 0xa6, 0x08, 0xa5, 0x06, 0x9a, 0x4e, 0x63, 0x92, 0x5b, 0x54, 0xac, 0xfe, 0x38, 0xad, 0x89, 0x10, 0xbd, 0x08, 0x01, 0x9c, 0xb7, 0xb4}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xf4, 0xf0, 0x54, 0xfd, 0xe7, 0xbe, 0x26, 0xd6, 0x68, 0xa5, 0xf5, 0x91, 0x88, 0xa9, 0x0e, 0x92, 0x5c, 0x00, 0x54, 0xaa, 0x22, 0xdc, 0xaa, 0xb8, 0x4e, 0x02, 0x15, 0xe5, 0xda, 0x38, 0xd8, 0x51}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x88, 0x64, 0xf3, 0x21, 0x22, 0x55, 0xee, 0x41, 0xf4, 0x98, 0x56, 0x0f, 0x9f, 0xb2, 0x2a, 0xcb, 0x20, 0x29, 0x34, 0xa5, 0x4e, 0x52, 0xba, 0xb6, 0xc7, 0x67, 0x8d, 0x8b, 0xda, 0x04, 0xc7, 0x8e}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - azure_AzureTDX = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x79, 0xce, 0x5b, 0x9f, 0xec, 0x9b, 0xd3, 0x83, 0xc4, 0x38, 0xfb, 0x71, 0xbe, 0x30, 0x7f, 0x80, 0x1b, 0x47, 0x6c, 0x60, 0x6b, 0x4a, 0x46, 0xf7, 0x6e, 0x5a, 0x4f, 0x7b, 0x74, 0xb4, 0x2e, 0x08}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xc7, 0x6a, 0xa1, 0x45, 0xf3, 0x9f, 0xae, 0xae, 0xf4, 0x48, 0x08, 0xc0, 0x30, 0x68, 0x64, 0xf9, 0x58, 0x80, 0xc9, 0xa1, 0xbc, 0x0e, 0x71, 0x7d, 0xac, 0x2c, 0x21, 0xea, 0x3f, 0x55, 0x9f, 0x07}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x4c, 0x95, 0xa3, 0xcd, 0xb6, 0xc6, 0x62, 0x93, 0x0c, 0xb8, 0x34, 0x9c, 0xd7, 0x36, 0x85, 0x45, 0x96, 0xfd, 0x3e, 0xcd, 0x60, 0xdf, 0xa6, 0x3a, 0xba, 0x24, 0x6a, 0xf6, 0x3b, 0xea, 0xb2, 0x2a}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + aws_AWSNitroTPM = M{0: {Expected: []byte{0x73, 0x7f, 0x76, 0x7a, 0x12, 0xf5, 0x4e, 0x70, 0xee, 0xcb, 0xc8, 0x68, 0x40, 0x11, 0x32, 0x3a, 0xe2, 0xfe, 0x2d, 0xd9, 0xf9, 0x07, 0x85, 0x57, 0x79, 0x69, 0xd7, 0xa2, 0x01, 0x3e, 0x8c, 0x12}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xb2, 0x44, 0x16, 0x77, 0x24, 0x06, 0xa3, 0x6e, 0x86, 0xc1, 0x3b, 0xde, 0x32, 0xcc, 0x12, 0x0d, 0xbc, 0xb7, 0x76, 0x8d, 0x1a, 0x3a, 0xa2, 0x00, 0x6f, 0x73, 0x1a, 0x56, 0x3e, 0xe1, 0x0c, 0x4f}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x34, 0xcb, 0x07, 0x78, 0xe1, 0x97, 0xa9, 0x16, 0xc1, 0xf7, 0xa9, 0x92, 0x75, 0xff, 0xed, 0xe0, 0x6f, 0x73, 0xc9, 0xde, 0x6a, 0x02, 0x26, 0x24, 0x64, 0xd4, 0xd6, 0xa6, 0x57, 0xab, 0x98, 0x79}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x16, 0xae, 0xa8, 0xda, 0xe9, 0xe5, 0xd5, 0xed, 0x37, 0x21, 0xef, 0xb8, 0x1f, 0x0b, 0x46, 0xde, 0xcc, 0x37, 0xd6, 0x44, 0xdf, 0x38, 0x7d, 0x50, 0xad, 0x12, 0x56, 0xef, 0xff, 0xab, 0x4b, 0xe3}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + aws_AWSSEVSNP = M{0: {Expected: []byte{0xd6, 0xdf, 0x85, 0x53, 0x58, 0xf5, 0xb1, 0x0f, 0x06, 0xf0, 0xfa, 0xb3, 0xf4, 0x08, 0xad, 0x26, 0xcd, 0x16, 0x5a, 0x29, 0x49, 0xba, 0xd6, 0x9e, 0x2c, 0xc7, 0x56, 0x92, 0x52, 0x9e, 0x66, 0x2a}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xfd, 0x8a, 0x8c, 0x6d, 0x3c, 0x02, 0x4f, 0x74, 0x59, 0xf5, 0xd2, 0x14, 0xff, 0xdb, 0x42, 0x39, 0x9d, 0x16, 0x50, 0xab, 0xce, 0xdf, 0x7d, 0xd5, 0xf2, 0x3f, 0x45, 0x10, 0x16, 0x80, 0x5b, 0xa0}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xc1, 0x8b, 0x31, 0x86, 0xef, 0x4f, 0x29, 0xe3, 0x5f, 0x4e, 0x2d, 0xf5, 0x60, 0x40, 0xe4, 0x6d, 0x80, 0x6a, 0x6b, 0x18, 0x01, 0x2b, 0x46, 0x64, 0xac, 0x1e, 0x53, 0xdf, 0xee, 0xff, 0xca, 0xbe}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x5a, 0x6a, 0xa2, 0xd8, 0x46, 0x42, 0x8d, 0xd1, 0xd0, 0x05, 0x20, 0x9f, 0x9e, 0xcd, 0x83, 0xa4, 0x38, 0xfd, 0x50, 0x77, 0x3e, 0x56, 0x4a, 0x0d, 0x67, 0x3b, 0xfd, 0xb5, 0x99, 0xab, 0x6d, 0x25}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + azure_AzureSEVSNP = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xf6, 0x7c, 0xac, 0x3f, 0xc4, 0xe9, 0x03, 0x41, 0x07, 0x8f, 0x00, 0x30, 0x9b, 0x18, 0x35, 0x55, 0x17, 0x2e, 0x65, 0xfd, 0x1d, 0xf5, 0xd7, 0xe5, 0x95, 0xb3, 0xf6, 0x46, 0x10, 0x52, 0xc0, 0x8f}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xfc, 0xea, 0x8b, 0x86, 0xdd, 0x1a, 0xfa, 0x5e, 0xee, 0x50, 0xe5, 0x28, 0xe2, 0xb8, 0xdd, 0x5e, 0x77, 0x96, 0xc5, 0xfe, 0x6e, 0x93, 0xc0, 0x57, 0x2d, 0xbf, 0xd0, 0x18, 0x7a, 0x01, 0xbd, 0x95}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xdd, 0x19, 0xc4, 0xda, 0xc1, 0x13, 0x95, 0x6b, 0x62, 0x37, 0x81, 0x3a, 0xf8, 0x4e, 0x0d, 0xee, 0xdd, 0x73, 0xad, 0xea, 0x41, 0x34, 0xa2, 0x0f, 0x48, 0x52, 0x8a, 0x93, 0x10, 0xf0, 0x0c, 0xe6}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + azure_AzureTDX = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x0a, 0x17, 0x38, 0x86, 0x1b, 0xa9, 0xa7, 0xa0, 0x11, 0x06, 0xd5, 0x34, 0xe1, 0x7a, 0x3f, 0x1b, 0x3f, 0x29, 0xcf, 0x47, 0xe4, 0xf1, 0x39, 0x9d, 0x5b, 0x4b, 0xf8, 0x28, 0x80, 0xf8, 0x78, 0x5c}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x0a, 0xa7, 0x45, 0xab, 0xbe, 0x36, 0xcd, 0x89, 0x59, 0x06, 0x9b, 0x26, 0x9e, 0x2e, 0x9d, 0x44, 0x41, 0xb0, 0x74, 0x2f, 0xed, 0x9e, 0x35, 0xf5, 0x6c, 0xf6, 0xcf, 0x5f, 0xc6, 0x88, 0x57, 0x4d}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xb1, 0xa5, 0x05, 0xa3, 0xd5, 0x34, 0xb7, 0x74, 0x14, 0xec, 0xd7, 0x68, 0x78, 0xa1, 0x81, 0xd2, 0x43, 0xc6, 0x69, 0x08, 0xe4, 0x5e, 0x6f, 0xe6, 0x9d, 0x65, 0xdd, 0xd6, 0x22, 0xe6, 0xe0, 0x15}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} azure_AzureTrustedLaunch M - gcp_GCPSEVES = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xa6, 0x4e, 0x17, 0x08, 0x53, 0x3f, 0x19, 0x8b, 0x84, 0x6c, 0x89, 0xda, 0xf3, 0xf8, 0x15, 0x85, 0xac, 0x50, 0xcf, 0xa7, 0x0e, 0x48, 0x66, 0x81, 0x57, 0x0a, 0x76, 0x22, 0x35, 0xdf, 0x0e, 0xfb}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x86, 0x94, 0x69, 0xc7, 0x5a, 0x11, 0x30, 0x26, 0xa6, 0x64, 0xa7, 0xfd, 0x13, 0x98, 0xf5, 0xfe, 0xd6, 0x42, 0xd5, 0x72, 0x9d, 0x22, 0x97, 0x88, 0xb6, 0xe2, 0x99, 0xa0, 0x05, 0xcb, 0x09, 0xfc}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x6d, 0x98, 0x27, 0xee, 0xa5, 0xd1, 0x1d, 0x9f, 0x20, 0x65, 0xd4, 0x70, 0x7f, 0xaf, 0x1d, 0x98, 0x3c, 0xc6, 0x16, 0xb8, 0x7c, 0xf7, 0xcb, 0x4d, 0x49, 0xfb, 0x3c, 0x9b, 0x82, 0x6f, 0x0d, 0x42}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - gcp_GCPSEVSNP = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x53, 0xb6, 0x10, 0x2f, 0xa5, 0x01, 0x04, 0x43, 0x1f, 0x29, 0x6c, 0xda, 0x45, 0x67, 0xe7, 0x70, 0x3a, 0x14, 0xb9, 0xd1, 0x2e, 0x99, 0x65, 0xdc, 0xbe, 0x4c, 0x90, 0x7a, 0xf8, 0xe3, 0xcf, 0x4c}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x62, 0x57, 0x44, 0xb8, 0x04, 0x27, 0xa8, 0xc8, 0xdb, 0x2a, 0x19, 0x28, 0x2a, 0x5f, 0x6f, 0x67, 0xad, 0xcf, 0x18, 0x3e, 0x32, 0x93, 0x04, 0x04, 0x39, 0x72, 0x1e, 0x1a, 0x3a, 0xd1, 0x71, 0x3a}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xac, 0x59, 0x82, 0x1f, 0x62, 0x83, 0xcf, 0xf3, 0xea, 0x17, 0x40, 0x4d, 0x2b, 0xa1, 0x5a, 0x86, 0xc4, 0x54, 0xc3, 0xe6, 0x58, 0xe9, 0x01, 0xc1, 0x70, 0x96, 0x8e, 0xd9, 0xe7, 0x02, 0x6a, 0xa6}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - openstack_QEMUVTPM = M{4: {Expected: []byte{0x9b, 0x54, 0x52, 0x36, 0xe6, 0xed, 0x0c, 0xf0, 0x4d, 0xd9, 0x19, 0xef, 0xf3, 0xdc, 0x35, 0x1a, 0xcb, 0x2f, 0x1d, 0x2d, 0x46, 0xce, 0x8e, 0x0e, 0x98, 0xc8, 0xd2, 0x0b, 0xa3, 0x4c, 0xb7, 0x39}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x1c, 0xcf, 0x45, 0xc9, 0x49, 0x68, 0x89, 0xa1, 0x17, 0x87, 0x7d, 0x8d, 0x43, 0x77, 0x4f, 0x5f, 0xf3, 0xc7, 0x35, 0x90, 0x99, 0x3c, 0x1c, 0xfb, 0xb3, 0x5a, 0x2e, 0xbd, 0xa0, 0xfe, 0x17, 0x1a}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x5d, 0xa7, 0x89, 0xd7, 0x9e, 0xb3, 0xac, 0x3c, 0xf1, 0xdb, 0xfc, 0xe5, 0x15, 0xc3, 0x05, 0xd0, 0xac, 0x59, 0x1b, 0x4b, 0x2a, 0x35, 0x10, 0x03, 0xb1, 0x9b, 0x54, 0x04, 0x19, 0xc5, 0x27, 0x95}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + gcp_GCPSEVES = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x53, 0x31, 0x9c, 0xaf, 0x34, 0xdf, 0x00, 0x0a, 0x29, 0xb1, 0xfe, 0x42, 0x32, 0x12, 0x49, 0x68, 0x43, 0xe0, 0xb5, 0x07, 0x78, 0x7a, 0x58, 0x57, 0xa4, 0x5e, 0x19, 0x3c, 0x74, 0xbf, 0xe1, 0x8f}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xd6, 0x15, 0x25, 0xf3, 0xf0, 0x87, 0x2a, 0x65, 0xfd, 0xc3, 0x98, 0x74, 0x49, 0xe8, 0x8c, 0x40, 0xa7, 0x64, 0xad, 0xcc, 0x26, 0xb9, 0xab, 0xad, 0x3a, 0x19, 0xcc, 0x61, 0xbb, 0xb1, 0x8f, 0x13}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xa2, 0x5f, 0xfe, 0xab, 0x7e, 0x71, 0x39, 0x81, 0x5e, 0x26, 0xdb, 0xf4, 0x52, 0x07, 0x95, 0xfa, 0x3b, 0xbb, 0x86, 0xdd, 0xe6, 0x05, 0xc4, 0x0c, 0x90, 0x37, 0xdb, 0x21, 0x5c, 0xc5, 0x01, 0xd7}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + gcp_GCPSEVSNP = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x68, 0x1c, 0x25, 0x84, 0x87, 0x0a, 0x9b, 0x00, 0x34, 0xbc, 0x87, 0xbf, 0x32, 0xfa, 0x2c, 0x21, 0xa4, 0xa1, 0x93, 0x23, 0xba, 0x58, 0x39, 0x82, 0xab, 0x83, 0x3c, 0x4d, 0x8f, 0x4d, 0xb4, 0xa6}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x62, 0xea, 0x31, 0x3f, 0x4b, 0x19, 0x28, 0x27, 0xb5, 0x42, 0xae, 0xcc, 0xba, 0x26, 0x1d, 0x03, 0x5f, 0x29, 0x1e, 0x15, 0x2d, 0xf7, 0x78, 0xfc, 0x80, 0xdf, 0x69, 0x87, 0xb9, 0xf2, 0xb8, 0x3d}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xee, 0xb9, 0x38, 0x0a, 0x1c, 0x50, 0x68, 0x86, 0x9c, 0xf0, 0xef, 0xbf, 0xfe, 0x13, 0xd7, 0x17, 0xa2, 0x82, 0x97, 0xb5, 0xa5, 0x8e, 0x67, 0xc1, 0xfd, 0xfa, 0x81, 0x6c, 0xa5, 0x20, 0x4a, 0x7e}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + openstack_QEMUVTPM = M{4: {Expected: []byte{0x30, 0x43, 0x44, 0xb8, 0x7d, 0x3b, 0xf3, 0xf8, 0x11, 0xd2, 0x2a, 0xf3, 0xda, 0x49, 0xf4, 0x5b, 0x42, 0x1d, 0x6f, 0x9e, 0xfe, 0x8e, 0xae, 0x26, 0x6c, 0xce, 0x40, 0xf2, 0x03, 0xd0, 0xc7, 0xf6}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x65, 0xa7, 0xb9, 0x55, 0x5f, 0x23, 0x4e, 0x37, 0x92, 0x30, 0x1a, 0x50, 0x23, 0x3d, 0xed, 0xda, 0xb7, 0x2f, 0xc5, 0xe2, 0x62, 0x80, 0xa5, 0xa2, 0x0f, 0xcc, 0xae, 0x73, 0x08, 0x9b, 0xd0, 0x51}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x86, 0x78, 0xff, 0xc1, 0xb2, 0xdd, 0x76, 0x62, 0xe3, 0x60, 0xf1, 0xac, 0x0c, 0x9f, 0x0d, 0x3c, 0x0b, 0xda, 0xf7, 0x6d, 0x4a, 0x34, 0xe7, 0x24, 0x66, 0x42, 0xee, 0x68, 0xb9, 0xcf, 0xe3, 0x1c}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} qemu_QEMUTDX M - qemu_QEMUVTPM = M{4: {Expected: []byte{0x65, 0xb4, 0x3f, 0x26, 0x36, 0x59, 0x01, 0x48, 0x97, 0xd7, 0xb3, 0x6d, 0x59, 0xb9, 0x89, 0xfe, 0x50, 0xf9, 0x78, 0x63, 0xa2, 0x73, 0x17, 0x34, 0x9b, 0xc6, 0x45, 0x13, 0x83, 0x73, 0x6e, 0x13}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x66, 0xd4, 0x80, 0xe7, 0x77, 0xed, 0xc4, 0xd1, 0x2d, 0x62, 0x18, 0x7d, 0x18, 0x92, 0x38, 0xf3, 0xc4, 0x3a, 0xf5, 0x6e, 0x06, 0x69, 0x8a, 0x92, 0x2f, 0x24, 0x9d, 0x1a, 0x24, 0xa7, 0x9c, 0x58}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xc9, 0x37, 0x35, 0x8c, 0xa0, 0x14, 0x4a, 0xa3, 0x0c, 0x33, 0x90, 0x8d, 0x4b, 0x3d, 0x12, 0x96, 0xca, 0x6b, 0xd2, 0x69, 0x76, 0x9a, 0xa4, 0x60, 0x1d, 0x05, 0x46, 0xd1, 0x31, 0x7c, 0x63, 0x4f}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + qemu_QEMUVTPM = M{4: {Expected: []byte{0xd0, 0x59, 0xc0, 0x3b, 0x5e, 0xb4, 0x83, 0xf2, 0x2e, 0xd2, 0x33, 0x3e, 0xd6, 0x2e, 0x36, 0x11, 0x68, 0x87, 0x66, 0x88, 0xa9, 0xbf, 0x50, 0x79, 0x93, 0xe2, 0x2f, 0x3e, 0xa4, 0xdd, 0x30, 0x26}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xb6, 0xf5, 0xf3, 0xd7, 0xa7, 0x08, 0x9a, 0xfa, 0x23, 0xaf, 0x67, 0xaf, 0xbf, 0x93, 0x6c, 0xf2, 0x38, 0x90, 0x22, 0x6a, 0x0b, 0xb4, 0x57, 0x52, 0x33, 0x7c, 0x95, 0x83, 0x92, 0xdc, 0x94, 0x67}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xdc, 0x81, 0x74, 0x5b, 0x29, 0x50, 0x6f, 0x88, 0x6e, 0x79, 0x5f, 0x0c, 0x88, 0xbf, 0xcb, 0xcd, 0x90, 0x61, 0xd0, 0x54, 0x8d, 0xb7, 0x2c, 0x7a, 0x6c, 0xb4, 0xd6, 0x70, 0x47, 0x9a, 0x67, 0x4e}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} ) diff --git a/internal/config/image_enterprise.go b/internal/config/image_enterprise.go index 3aa639bff..3ca3ea2d0 100644 --- a/internal/config/image_enterprise.go +++ b/internal/config/image_enterprise.go @@ -10,5 +10,5 @@ package config const ( // defaultImage is the default image to use. - defaultImage = "ref/main/stream/nightly/v2.22.0-pre.0.20250306164449-a491cac57a9b" + defaultImage = "ref/main/stream/nightly/v2.22.0-pre.0.20250310132119-368b52a4dd82" ) From df06022e9ea01d0bc8999373fce123cd1e13a052 Mon Sep 17 00:00:00 2001 From: Felix Schuster <1911679+flxflx@users.noreply.github.com> Date: Wed, 12 Mar 2025 15:18:13 +0100 Subject: [PATCH 153/311] Make PCRs part of payload in Security Overview (#3480) * Make RTMRs part of "aux data" * Introduce Sig-TPM --- dev-docs/security-overview.md | 32 +++++++++++++++++++++++--------- 1 file changed, 23 insertions(+), 9 deletions(-) diff --git a/dev-docs/security-overview.md b/dev-docs/security-overview.md index a2b03ab0e..90393c182 100644 --- a/dev-docs/security-overview.md +++ b/dev-docs/security-overview.md @@ -79,12 +79,16 @@ Abstractly, a remote-attestation statement `R` from a CVM looks as follows: R = Sig-CPU(, , ) ``` -The `payload` is controlled by the software running inside the CVM. +The field `payload` is controlled by the software running inside the CVM. In the case of a Constellation node, the `payload` is always the public key of the respective Bootstrapper running inside the CVM. Thus, `R` can be seen as a certificate for that public key issued by the CPU. Based on this, nodes establish attested TLS (aTLS) connections. aTLS is used during [cluster creation](#cluster-creation) and when [growing a cluster](#cluster-growth). +The field `auxiliary data` is populated automatically by the CVM platform and, among others, includes information like CPU firmware versions. + +Note that this description of `R` is highly abstract. + ### Measurements In the ideal case, the underlying CVM platform does not inject any of its own software into a CVM. @@ -97,16 +101,26 @@ In this case, the launch digest is the only measurement that's required to verif However, currently, all supported CVM platforms (AWS, Azure, and GCP) inject custom firmware into CVMs. Thus, in practice, Constellation relies on conventional [measured boot](https://docs.edgeless.systems/constellation/architecture/images#measured-boot) to reflect the identity and integrity of nodes. -In measured boot, in general, the software components involved in the boot process of a system are "measured" into the 16 registers of a Trusted Platform Module (TPM). +In measured boot, in general, the software components involved in the boot process of a system are "measured" into the 16 platform configuration registers (PCRs) of a Trusted Platform Module (TPM). The values of these registers are also called "runtime measurements". -All supported CVM platforms provide TPMs to CVMs. -Constellation nodes use these to measure their boot process. -They include the 16 runtime measurements as `auxiliary data` in `R`. -On each CVM platform, runtime measurements are taken differently. -Details on this are given in the [Constellation documentation](https://docs.edgeless.systems/constellation/architecture/attestation#runtime-measurements). +All supported CVM platforms provide TPMs to CVMs. + +With measured boot, Constellation relies on TPM-based remote attestation for nodes. +TPM-based remote attestation is similar to confidential computing-based remote attestation. Instead of the value `R`, the value `R'` is used. + +``` +R' = Sig-TPM(, ) +``` + +The field `auxiliary data` is populated automatically by the TPM and most notably contains the 16 PCRs. +Constellation uses the field `payload` as usual and sets it to the public key of the respective CVM's Bootstrapper. +When verifying `R'`, Constellation compares the 16 PCRs to those given in the attestation config. + +#### Differences between CVM platforms + +Each supported CVM platform populates the 16 PCRs in different ways. Details can be found in the [Constellation documentation](https://docs.edgeless.systems/constellation/architecture/attestation#runtime-measurements). +Sig-TPM itself is also verified differently for each cloud. -With measured boot, Constellation only checks the 16 runtime measurements during the verification of a node's remote-attestation statement. -The launch digest is not considered, because it only covers the firmware injected by the CVM platform and may change whenever the CVM platform is updated. Currently, on AWS and GCP the TPM implementation resides outside the CVM. On Azure, the TPM implementation is part of the injected firmware and resides inside the CVM. More information can be found in the [Constellation documentation](https://docs.edgeless.systems/constellation/overview/clouds). From cf2e83c7234fb89bec85af9f6a259046a8969ddf Mon Sep 17 00:00:00 2001 From: edgelessci <71088502+edgelessci@users.noreply.github.com> Date: Fri, 14 Mar 2025 08:00:42 +0100 Subject: [PATCH 154/311] image: update measurements and image version (#3695) Co-authored-by: edgelessci --- .../measurements/measurements_enterprise.go | 16 ++++++++-------- internal/config/image_enterprise.go | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/internal/attestation/measurements/measurements_enterprise.go b/internal/attestation/measurements/measurements_enterprise.go index 4fc55f43d..d07de57ec 100644 --- a/internal/attestation/measurements/measurements_enterprise.go +++ b/internal/attestation/measurements/measurements_enterprise.go @@ -19,14 +19,14 @@ package measurements // revive:disable:var-naming var ( - aws_AWSNitroTPM = M{0: {Expected: []byte{0x73, 0x7f, 0x76, 0x7a, 0x12, 0xf5, 0x4e, 0x70, 0xee, 0xcb, 0xc8, 0x68, 0x40, 0x11, 0x32, 0x3a, 0xe2, 0xfe, 0x2d, 0xd9, 0xf9, 0x07, 0x85, 0x57, 0x79, 0x69, 0xd7, 0xa2, 0x01, 0x3e, 0x8c, 0x12}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xb2, 0x44, 0x16, 0x77, 0x24, 0x06, 0xa3, 0x6e, 0x86, 0xc1, 0x3b, 0xde, 0x32, 0xcc, 0x12, 0x0d, 0xbc, 0xb7, 0x76, 0x8d, 0x1a, 0x3a, 0xa2, 0x00, 0x6f, 0x73, 0x1a, 0x56, 0x3e, 0xe1, 0x0c, 0x4f}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x34, 0xcb, 0x07, 0x78, 0xe1, 0x97, 0xa9, 0x16, 0xc1, 0xf7, 0xa9, 0x92, 0x75, 0xff, 0xed, 0xe0, 0x6f, 0x73, 0xc9, 0xde, 0x6a, 0x02, 0x26, 0x24, 0x64, 0xd4, 0xd6, 0xa6, 0x57, 0xab, 0x98, 0x79}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x16, 0xae, 0xa8, 0xda, 0xe9, 0xe5, 0xd5, 0xed, 0x37, 0x21, 0xef, 0xb8, 0x1f, 0x0b, 0x46, 0xde, 0xcc, 0x37, 0xd6, 0x44, 0xdf, 0x38, 0x7d, 0x50, 0xad, 0x12, 0x56, 0xef, 0xff, 0xab, 0x4b, 0xe3}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - aws_AWSSEVSNP = M{0: {Expected: []byte{0xd6, 0xdf, 0x85, 0x53, 0x58, 0xf5, 0xb1, 0x0f, 0x06, 0xf0, 0xfa, 0xb3, 0xf4, 0x08, 0xad, 0x26, 0xcd, 0x16, 0x5a, 0x29, 0x49, 0xba, 0xd6, 0x9e, 0x2c, 0xc7, 0x56, 0x92, 0x52, 0x9e, 0x66, 0x2a}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xfd, 0x8a, 0x8c, 0x6d, 0x3c, 0x02, 0x4f, 0x74, 0x59, 0xf5, 0xd2, 0x14, 0xff, 0xdb, 0x42, 0x39, 0x9d, 0x16, 0x50, 0xab, 0xce, 0xdf, 0x7d, 0xd5, 0xf2, 0x3f, 0x45, 0x10, 0x16, 0x80, 0x5b, 0xa0}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xc1, 0x8b, 0x31, 0x86, 0xef, 0x4f, 0x29, 0xe3, 0x5f, 0x4e, 0x2d, 0xf5, 0x60, 0x40, 0xe4, 0x6d, 0x80, 0x6a, 0x6b, 0x18, 0x01, 0x2b, 0x46, 0x64, 0xac, 0x1e, 0x53, 0xdf, 0xee, 0xff, 0xca, 0xbe}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x5a, 0x6a, 0xa2, 0xd8, 0x46, 0x42, 0x8d, 0xd1, 0xd0, 0x05, 0x20, 0x9f, 0x9e, 0xcd, 0x83, 0xa4, 0x38, 0xfd, 0x50, 0x77, 0x3e, 0x56, 0x4a, 0x0d, 0x67, 0x3b, 0xfd, 0xb5, 0x99, 0xab, 0x6d, 0x25}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - azure_AzureSEVSNP = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xf6, 0x7c, 0xac, 0x3f, 0xc4, 0xe9, 0x03, 0x41, 0x07, 0x8f, 0x00, 0x30, 0x9b, 0x18, 0x35, 0x55, 0x17, 0x2e, 0x65, 0xfd, 0x1d, 0xf5, 0xd7, 0xe5, 0x95, 0xb3, 0xf6, 0x46, 0x10, 0x52, 0xc0, 0x8f}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xfc, 0xea, 0x8b, 0x86, 0xdd, 0x1a, 0xfa, 0x5e, 0xee, 0x50, 0xe5, 0x28, 0xe2, 0xb8, 0xdd, 0x5e, 0x77, 0x96, 0xc5, 0xfe, 0x6e, 0x93, 0xc0, 0x57, 0x2d, 0xbf, 0xd0, 0x18, 0x7a, 0x01, 0xbd, 0x95}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xdd, 0x19, 0xc4, 0xda, 0xc1, 0x13, 0x95, 0x6b, 0x62, 0x37, 0x81, 0x3a, 0xf8, 0x4e, 0x0d, 0xee, 0xdd, 0x73, 0xad, 0xea, 0x41, 0x34, 0xa2, 0x0f, 0x48, 0x52, 0x8a, 0x93, 0x10, 0xf0, 0x0c, 0xe6}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - azure_AzureTDX = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x0a, 0x17, 0x38, 0x86, 0x1b, 0xa9, 0xa7, 0xa0, 0x11, 0x06, 0xd5, 0x34, 0xe1, 0x7a, 0x3f, 0x1b, 0x3f, 0x29, 0xcf, 0x47, 0xe4, 0xf1, 0x39, 0x9d, 0x5b, 0x4b, 0xf8, 0x28, 0x80, 0xf8, 0x78, 0x5c}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x0a, 0xa7, 0x45, 0xab, 0xbe, 0x36, 0xcd, 0x89, 0x59, 0x06, 0x9b, 0x26, 0x9e, 0x2e, 0x9d, 0x44, 0x41, 0xb0, 0x74, 0x2f, 0xed, 0x9e, 0x35, 0xf5, 0x6c, 0xf6, 0xcf, 0x5f, 0xc6, 0x88, 0x57, 0x4d}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xb1, 0xa5, 0x05, 0xa3, 0xd5, 0x34, 0xb7, 0x74, 0x14, 0xec, 0xd7, 0x68, 0x78, 0xa1, 0x81, 0xd2, 0x43, 0xc6, 0x69, 0x08, 0xe4, 0x5e, 0x6f, 0xe6, 0x9d, 0x65, 0xdd, 0xd6, 0x22, 0xe6, 0xe0, 0x15}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + aws_AWSNitroTPM = M{0: {Expected: []byte{0x73, 0x7f, 0x76, 0x7a, 0x12, 0xf5, 0x4e, 0x70, 0xee, 0xcb, 0xc8, 0x68, 0x40, 0x11, 0x32, 0x3a, 0xe2, 0xfe, 0x2d, 0xd9, 0xf9, 0x07, 0x85, 0x57, 0x79, 0x69, 0xd7, 0xa2, 0x01, 0x3e, 0x8c, 0x12}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xd8, 0xed, 0x88, 0x2d, 0x9f, 0xbd, 0x13, 0x77, 0xfa, 0x67, 0xa3, 0x11, 0xd5, 0xf5, 0xf3, 0x5f, 0xd5, 0x44, 0xee, 0xe9, 0x9f, 0x60, 0x2c, 0xed, 0x6d, 0x72, 0xd7, 0xa1, 0x04, 0x7d, 0x2a, 0xd8}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x45, 0xe7, 0xd6, 0x7e, 0x7f, 0xb0, 0x18, 0xca, 0x76, 0xcc, 0x27, 0x8b, 0x7a, 0xd7, 0x15, 0x0e, 0xa8, 0x9d, 0x2a, 0xf0, 0x37, 0xc9, 0x9d, 0x43, 0x95, 0x9a, 0xaf, 0x46, 0xe2, 0x0f, 0x62, 0xec}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xdf, 0x18, 0x72, 0x7c, 0x1e, 0xb5, 0x2c, 0xf2, 0xb7, 0xc0, 0x30, 0x22, 0x3b, 0xe6, 0x5b, 0x6e, 0x2a, 0xb8, 0xb0, 0x6d, 0x20, 0x4f, 0xb9, 0xa6, 0xee, 0x12, 0xa2, 0x4d, 0xa7, 0x7b, 0x84, 0xc9}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + aws_AWSSEVSNP = M{0: {Expected: []byte{0xd6, 0xdf, 0x85, 0x53, 0x58, 0xf5, 0xb1, 0x0f, 0x06, 0xf0, 0xfa, 0xb3, 0xf4, 0x08, 0xad, 0x26, 0xcd, 0x16, 0x5a, 0x29, 0x49, 0xba, 0xd6, 0x9e, 0x2c, 0xc7, 0x56, 0x92, 0x52, 0x9e, 0x66, 0x2a}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xe7, 0x16, 0xc8, 0x9f, 0x32, 0xbe, 0x42, 0x40, 0x2c, 0x48, 0x64, 0x6d, 0xc0, 0xd0, 0x49, 0x6b, 0x06, 0x69, 0x5b, 0xfc, 0xb4, 0xda, 0x79, 0xbf, 0x23, 0xa7, 0xee, 0x5f, 0x32, 0x5f, 0x69, 0xec}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x3b, 0x48, 0xbf, 0x17, 0x24, 0x9b, 0xc6, 0x1a, 0x83, 0xe5, 0x99, 0x16, 0x9a, 0xbe, 0x95, 0xa8, 0x3f, 0xf5, 0x86, 0xd8, 0xf2, 0xc1, 0x98, 0x49, 0xba, 0xec, 0x63, 0x2d, 0x13, 0x83, 0xe5, 0xbf}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xf7, 0x0d, 0xc7, 0x5e, 0xd8, 0x9b, 0x88, 0x53, 0x40, 0x91, 0xd6, 0xa1, 0x91, 0xde, 0x16, 0x5c, 0x48, 0x54, 0xa8, 0x24, 0xd9, 0x6b, 0xb4, 0x66, 0xe8, 0xa4, 0x05, 0xba, 0x55, 0x46, 0xb7, 0x52}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + azure_AzureSEVSNP = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xe5, 0x23, 0x66, 0x0a, 0xc1, 0x81, 0x6c, 0x01, 0x04, 0x62, 0xd3, 0x57, 0x2d, 0xb3, 0x8b, 0xc0, 0xfa, 0x80, 0xb3, 0xb1, 0x06, 0x9b, 0x79, 0x65, 0x93, 0xc4, 0xd5, 0x7d, 0xe1, 0x14, 0x90, 0x68}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xe5, 0xa2, 0x2e, 0x1f, 0xe8, 0x16, 0x8e, 0xc6, 0xa7, 0xac, 0xee, 0xf3, 0x4a, 0x94, 0x97, 0x15, 0xdb, 0x94, 0xb4, 0xd7, 0x8e, 0xe7, 0xf6, 0xf6, 0x6c, 0xf5, 0x50, 0xf7, 0xfb, 0xa9, 0xb6, 0x46}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xae, 0xbf, 0x34, 0xc4, 0x10, 0xb4, 0xd9, 0xa4, 0x12, 0x94, 0x71, 0xa5, 0x7d, 0x3c, 0xc0, 0x7e, 0xb0, 0x01, 0x48, 0x9f, 0x7c, 0x7f, 0x44, 0xd6, 0xc2, 0x1a, 0x00, 0xd9, 0x2c, 0x1f, 0xbb, 0x9b}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + azure_AzureTDX = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x8a, 0x0d, 0x52, 0x7a, 0xf7, 0x1f, 0x31, 0x2a, 0x46, 0xab, 0x37, 0x06, 0xea, 0xa5, 0xd7, 0x41, 0xa8, 0x95, 0xdb, 0x4a, 0xbd, 0xba, 0x44, 0x7d, 0x1d, 0xa9, 0x44, 0xcd, 0x55, 0xdc, 0xb7, 0x6d}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x70, 0xbf, 0x3e, 0x57, 0x62, 0x2f, 0x36, 0xa1, 0xc6, 0xbc, 0xb7, 0x67, 0xdc, 0x2f, 0x72, 0x2d, 0x84, 0x4c, 0x63, 0x9d, 0xd1, 0xae, 0x30, 0xd9, 0xc1, 0x7f, 0xfa, 0xb8, 0xa2, 0xeb, 0x7b, 0x2b}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x9f, 0x77, 0x46, 0xa8, 0x09, 0x12, 0x4f, 0x90, 0xe7, 0xfa, 0x4b, 0x05, 0xce, 0x93, 0x17, 0x7f, 0xf7, 0x3a, 0x06, 0x86, 0x39, 0xfe, 0x45, 0xd1, 0x7d, 0xa0, 0x91, 0xbb, 0xd9, 0x7b, 0xa4, 0xc5}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} azure_AzureTrustedLaunch M - gcp_GCPSEVES = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x53, 0x31, 0x9c, 0xaf, 0x34, 0xdf, 0x00, 0x0a, 0x29, 0xb1, 0xfe, 0x42, 0x32, 0x12, 0x49, 0x68, 0x43, 0xe0, 0xb5, 0x07, 0x78, 0x7a, 0x58, 0x57, 0xa4, 0x5e, 0x19, 0x3c, 0x74, 0xbf, 0xe1, 0x8f}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xd6, 0x15, 0x25, 0xf3, 0xf0, 0x87, 0x2a, 0x65, 0xfd, 0xc3, 0x98, 0x74, 0x49, 0xe8, 0x8c, 0x40, 0xa7, 0x64, 0xad, 0xcc, 0x26, 0xb9, 0xab, 0xad, 0x3a, 0x19, 0xcc, 0x61, 0xbb, 0xb1, 0x8f, 0x13}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xa2, 0x5f, 0xfe, 0xab, 0x7e, 0x71, 0x39, 0x81, 0x5e, 0x26, 0xdb, 0xf4, 0x52, 0x07, 0x95, 0xfa, 0x3b, 0xbb, 0x86, 0xdd, 0xe6, 0x05, 0xc4, 0x0c, 0x90, 0x37, 0xdb, 0x21, 0x5c, 0xc5, 0x01, 0xd7}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - gcp_GCPSEVSNP = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x68, 0x1c, 0x25, 0x84, 0x87, 0x0a, 0x9b, 0x00, 0x34, 0xbc, 0x87, 0xbf, 0x32, 0xfa, 0x2c, 0x21, 0xa4, 0xa1, 0x93, 0x23, 0xba, 0x58, 0x39, 0x82, 0xab, 0x83, 0x3c, 0x4d, 0x8f, 0x4d, 0xb4, 0xa6}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x62, 0xea, 0x31, 0x3f, 0x4b, 0x19, 0x28, 0x27, 0xb5, 0x42, 0xae, 0xcc, 0xba, 0x26, 0x1d, 0x03, 0x5f, 0x29, 0x1e, 0x15, 0x2d, 0xf7, 0x78, 0xfc, 0x80, 0xdf, 0x69, 0x87, 0xb9, 0xf2, 0xb8, 0x3d}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xee, 0xb9, 0x38, 0x0a, 0x1c, 0x50, 0x68, 0x86, 0x9c, 0xf0, 0xef, 0xbf, 0xfe, 0x13, 0xd7, 0x17, 0xa2, 0x82, 0x97, 0xb5, 0xa5, 0x8e, 0x67, 0xc1, 0xfd, 0xfa, 0x81, 0x6c, 0xa5, 0x20, 0x4a, 0x7e}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - openstack_QEMUVTPM = M{4: {Expected: []byte{0x30, 0x43, 0x44, 0xb8, 0x7d, 0x3b, 0xf3, 0xf8, 0x11, 0xd2, 0x2a, 0xf3, 0xda, 0x49, 0xf4, 0x5b, 0x42, 0x1d, 0x6f, 0x9e, 0xfe, 0x8e, 0xae, 0x26, 0x6c, 0xce, 0x40, 0xf2, 0x03, 0xd0, 0xc7, 0xf6}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x65, 0xa7, 0xb9, 0x55, 0x5f, 0x23, 0x4e, 0x37, 0x92, 0x30, 0x1a, 0x50, 0x23, 0x3d, 0xed, 0xda, 0xb7, 0x2f, 0xc5, 0xe2, 0x62, 0x80, 0xa5, 0xa2, 0x0f, 0xcc, 0xae, 0x73, 0x08, 0x9b, 0xd0, 0x51}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x86, 0x78, 0xff, 0xc1, 0xb2, 0xdd, 0x76, 0x62, 0xe3, 0x60, 0xf1, 0xac, 0x0c, 0x9f, 0x0d, 0x3c, 0x0b, 0xda, 0xf7, 0x6d, 0x4a, 0x34, 0xe7, 0x24, 0x66, 0x42, 0xee, 0x68, 0xb9, 0xcf, 0xe3, 0x1c}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + gcp_GCPSEVES = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xc3, 0x9e, 0x72, 0x77, 0x9c, 0xa5, 0x90, 0x2b, 0x69, 0x87, 0xf6, 0xbc, 0x4b, 0x00, 0xd0, 0x0e, 0x30, 0x0a, 0x80, 0x18, 0xbd, 0x41, 0x0f, 0xe5, 0xd3, 0x34, 0x11, 0xfd, 0x79, 0x95, 0x05, 0x59}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xdf, 0x13, 0x61, 0x47, 0x14, 0xb6, 0x8e, 0x4f, 0xf2, 0x88, 0x91, 0x97, 0x98, 0xd9, 0xb1, 0xb0, 0xf3, 0x34, 0x67, 0xda, 0x14, 0x9a, 0x08, 0x06, 0x74, 0x52, 0x6c, 0xa9, 0x54, 0xd7, 0xdc, 0xd9}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x5b, 0xc5, 0xcd, 0xea, 0x8d, 0xd3, 0x23, 0x7e, 0x67, 0x47, 0x23, 0xb2, 0x41, 0xfb, 0x5b, 0x92, 0x65, 0x31, 0xc1, 0x1f, 0x73, 0x4e, 0x5e, 0xae, 0x83, 0x99, 0xbb, 0xc1, 0x5b, 0x3f, 0x49, 0xca}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + gcp_GCPSEVSNP = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x93, 0x79, 0x42, 0xd1, 0x21, 0xfc, 0x66, 0x5d, 0xb8, 0xa9, 0x9b, 0xfb, 0x56, 0x32, 0x74, 0x84, 0xf0, 0x0b, 0xff, 0x00, 0x53, 0xa5, 0x5c, 0x2f, 0xde, 0xa8, 0xa1, 0x95, 0x40, 0xf6, 0x9c, 0xba}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x74, 0xbf, 0xc4, 0x68, 0x27, 0x39, 0x52, 0xbe, 0xf7, 0x42, 0x30, 0x78, 0x33, 0x6b, 0x91, 0x51, 0x67, 0x0a, 0x0a, 0x70, 0x69, 0xac, 0xa9, 0xf1, 0xad, 0x3c, 0xc3, 0xbb, 0x69, 0xd2, 0x97, 0x51}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x95, 0x89, 0x21, 0x49, 0xf3, 0xf3, 0xf5, 0x9e, 0xb7, 0xf2, 0x80, 0x35, 0x1d, 0x86, 0xfb, 0x36, 0x63, 0x23, 0xae, 0xbf, 0x88, 0xd3, 0xf1, 0x48, 0xb5, 0x5f, 0xbe, 0x37, 0xc6, 0x5b, 0x55, 0x02}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + openstack_QEMUVTPM = M{4: {Expected: []byte{0x36, 0x41, 0x15, 0x9b, 0x85, 0xf7, 0x15, 0xd3, 0xe9, 0x00, 0x1b, 0x3f, 0x1d, 0x4d, 0x83, 0xcd, 0x11, 0xff, 0x87, 0xb6, 0xc3, 0x9d, 0xa7, 0x26, 0x91, 0x2c, 0xd4, 0xed, 0x39, 0x97, 0x73, 0xe9}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xc7, 0xac, 0x2b, 0x72, 0xb5, 0x68, 0x95, 0xc0, 0xa8, 0xcc, 0xae, 0xab, 0xce, 0x57, 0x10, 0xef, 0x38, 0x2e, 0x63, 0x0f, 0xdc, 0x55, 0x4c, 0x5c, 0xaa, 0x13, 0x9e, 0x4a, 0x1d, 0x87, 0x65, 0xd1}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x44, 0xda, 0xdc, 0xe6, 0x09, 0xf0, 0xd8, 0xb1, 0xf1, 0x16, 0xb5, 0x4a, 0x68, 0xf3, 0x7f, 0x40, 0x5e, 0xa4, 0x50, 0x00, 0x88, 0x27, 0x58, 0x1c, 0x54, 0x15, 0x0b, 0x39, 0x92, 0xf5, 0x03, 0x5e}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} qemu_QEMUTDX M - qemu_QEMUVTPM = M{4: {Expected: []byte{0xd0, 0x59, 0xc0, 0x3b, 0x5e, 0xb4, 0x83, 0xf2, 0x2e, 0xd2, 0x33, 0x3e, 0xd6, 0x2e, 0x36, 0x11, 0x68, 0x87, 0x66, 0x88, 0xa9, 0xbf, 0x50, 0x79, 0x93, 0xe2, 0x2f, 0x3e, 0xa4, 0xdd, 0x30, 0x26}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xb6, 0xf5, 0xf3, 0xd7, 0xa7, 0x08, 0x9a, 0xfa, 0x23, 0xaf, 0x67, 0xaf, 0xbf, 0x93, 0x6c, 0xf2, 0x38, 0x90, 0x22, 0x6a, 0x0b, 0xb4, 0x57, 0x52, 0x33, 0x7c, 0x95, 0x83, 0x92, 0xdc, 0x94, 0x67}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xdc, 0x81, 0x74, 0x5b, 0x29, 0x50, 0x6f, 0x88, 0x6e, 0x79, 0x5f, 0x0c, 0x88, 0xbf, 0xcb, 0xcd, 0x90, 0x61, 0xd0, 0x54, 0x8d, 0xb7, 0x2c, 0x7a, 0x6c, 0xb4, 0xd6, 0x70, 0x47, 0x9a, 0x67, 0x4e}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + qemu_QEMUVTPM = M{4: {Expected: []byte{0x53, 0x56, 0x19, 0x85, 0x3a, 0x2a, 0x7e, 0xb2, 0x95, 0xf1, 0xa5, 0x11, 0x9e, 0x0e, 0x62, 0xbd, 0xc3, 0xca, 0x16, 0xa4, 0xd0, 0x66, 0x7e, 0x3a, 0xc9, 0x2a, 0x7f, 0xb6, 0xd5, 0xd6, 0x13, 0x81}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x41, 0x4e, 0x74, 0xc2, 0x24, 0x41, 0x80, 0x22, 0xa1, 0xf1, 0xa9, 0xd3, 0x9f, 0x20, 0xc9, 0x36, 0x95, 0x26, 0xef, 0x94, 0x36, 0x2a, 0xff, 0xa9, 0x1d, 0xde, 0xdb, 0xe9, 0x97, 0xc3, 0x48, 0xd5}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x23, 0xba, 0xe8, 0xf2, 0xe1, 0x17, 0x34, 0xa5, 0x46, 0x99, 0xad, 0x35, 0xb1, 0x46, 0xa9, 0x45, 0x72, 0x6c, 0x92, 0x5b, 0x39, 0x74, 0xaf, 0x80, 0x33, 0xc5, 0x40, 0xb8, 0x0c, 0x33, 0xbb, 0xc3}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} ) diff --git a/internal/config/image_enterprise.go b/internal/config/image_enterprise.go index 3ca3ea2d0..b5ef5c59b 100644 --- a/internal/config/image_enterprise.go +++ b/internal/config/image_enterprise.go @@ -10,5 +10,5 @@ package config const ( // defaultImage is the default image to use. - defaultImage = "ref/main/stream/nightly/v2.22.0-pre.0.20250310132119-368b52a4dd82" + defaultImage = "ref/main/stream/nightly/v2.22.0-pre.0.20250312151813-df06022e9ea0" ) From dbb7c5b0fd506a9efb6a8fc4361872d393225c53 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 14 Mar 2025 10:02:56 +0100 Subject: [PATCH 155/311] deps: update Python dependencies (#3692) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/actions/e2e_benchmark/evaluate/requirements.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/actions/e2e_benchmark/evaluate/requirements.txt b/.github/actions/e2e_benchmark/evaluate/requirements.txt index eff9078c7..ee45b8fbd 100644 --- a/.github/actions/e2e_benchmark/evaluate/requirements.txt +++ b/.github/actions/e2e_benchmark/evaluate/requirements.txt @@ -1,3 +1,3 @@ -numpy ==2.2.2 -matplotlib ==3.10.0 +numpy ==2.2.3 +matplotlib ==3.10.1 Pillow ==11.1.0 \ No newline at end of file From 7f52752cbd1044727695cf73da34fc35b5bbb908 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 14 Mar 2025 10:49:34 +0100 Subject: [PATCH 156/311] deps: update bufbuild/buf to v1.50.1 (#3697) * deps: update bufbuild/buf to v1.50.1 * deps: tidy all modules --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: edgelessci --- bazel/toolchains/ci_deps.bzl | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/bazel/toolchains/ci_deps.bzl b/bazel/toolchains/ci_deps.bzl index 695590f65..5bb4fb235 100644 --- a/bazel/toolchains/ci_deps.bzl +++ b/bazel/toolchains/ci_deps.bzl @@ -270,44 +270,44 @@ def _buf_deps(): strip_prefix = "buf/bin", build_file_content = """exports_files(["buf"], visibility = ["//visibility:public"])""", urls = [ - "https://cdn.confidential.cloud/constellation/cas/sha256/80c1211dfc4844499c6ddad341bb21206579883fd33cea0a2c40c82befd70602", - "https://github.com/bufbuild/buf/releases/download/v1.50.0/buf-Linux-x86_64.tar.gz", + "https://cdn.confidential.cloud/constellation/cas/sha256/96f701c56484899c85dd0fe3895fad431226e20312f2bd5af2e33a87d260d4ce", + "https://github.com/bufbuild/buf/releases/download/v1.50.1/buf-Linux-x86_64.tar.gz", ], type = "tar.gz", - sha256 = "80c1211dfc4844499c6ddad341bb21206579883fd33cea0a2c40c82befd70602", + sha256 = "96f701c56484899c85dd0fe3895fad431226e20312f2bd5af2e33a87d260d4ce", ) http_archive( name = "com_github_bufbuild_buf_linux_arm64", strip_prefix = "buf/bin", build_file_content = """exports_files(["buf"], visibility = ["//visibility:public"])""", urls = [ - "https://cdn.confidential.cloud/constellation/cas/sha256/4c920c5f96eb99ad13eb6f25cf740fdb42963401faa267bee03fbd3e163730b2", - "https://github.com/bufbuild/buf/releases/download/v1.50.0/buf-Linux-aarch64.tar.gz", + "https://cdn.confidential.cloud/constellation/cas/sha256/92acc02c6d9126a8ed7e0d18793b6e11289c483a550d21e7b7a4271264925bca", + "https://github.com/bufbuild/buf/releases/download/v1.50.1/buf-Linux-aarch64.tar.gz", ], type = "tar.gz", - sha256 = "4c920c5f96eb99ad13eb6f25cf740fdb42963401faa267bee03fbd3e163730b2", + sha256 = "92acc02c6d9126a8ed7e0d18793b6e11289c483a550d21e7b7a4271264925bca", ) http_archive( name = "com_github_bufbuild_buf_darwin_amd64", strip_prefix = "buf/bin", build_file_content = """exports_files(["buf"], visibility = ["//visibility:public"])""", urls = [ - "https://cdn.confidential.cloud/constellation/cas/sha256/fc64b4a16964d7ec49fb2d245159d57dbfb3dac947e2a86413f9685cf8de2ac5", - "https://github.com/bufbuild/buf/releases/download/v1.50.0/buf-Darwin-x86_64.tar.gz", + "https://cdn.confidential.cloud/constellation/cas/sha256/28acc2c4c6b5698367f39d1de90b2259ce0d2d48ee4a17b636d69aa9498138d2", + "https://github.com/bufbuild/buf/releases/download/v1.50.1/buf-Darwin-x86_64.tar.gz", ], type = "tar.gz", - sha256 = "fc64b4a16964d7ec49fb2d245159d57dbfb3dac947e2a86413f9685cf8de2ac5", + sha256 = "28acc2c4c6b5698367f39d1de90b2259ce0d2d48ee4a17b636d69aa9498138d2", ) http_archive( name = "com_github_bufbuild_buf_darwin_arm64", strip_prefix = "buf/bin", build_file_content = """exports_files(["buf"], visibility = ["//visibility:public"])""", urls = [ - "https://cdn.confidential.cloud/constellation/cas/sha256/c80f7f8a1d8ffd36c5db31a360c7e0b65c8cf671d60bd3c34e1558e54f84f4cc", - "https://github.com/bufbuild/buf/releases/download/v1.50.0/buf-Darwin-arm64.tar.gz", + "https://cdn.confidential.cloud/constellation/cas/sha256/06df191fc2f0df70686a97370f2988a22a1d7cd69fb789d296bbd884b5280d29", + "https://github.com/bufbuild/buf/releases/download/v1.50.1/buf-Darwin-arm64.tar.gz", ], type = "tar.gz", - sha256 = "c80f7f8a1d8ffd36c5db31a360c7e0b65c8cf671d60bd3c34e1558e54f84f4cc", + sha256 = "06df191fc2f0df70686a97370f2988a22a1d7cd69fb789d296bbd884b5280d29", ) def _talos_docgen_deps(): From f64dc96e7acb03aee09c1b9e9d6f0084fbeaf9d6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Wei=C3=9Fe?= <66256922+daniel-weisse@users.noreply.github.com> Date: Mon, 17 Mar 2025 10:34:34 +0100 Subject: [PATCH 157/311] ci: add k8s v1.31 and remove v1.28 from stackit e2e test (#3699) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Daniel Weiße --- .github/workflows/e2e-test-stackit.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/e2e-test-stackit.yml b/.github/workflows/e2e-test-stackit.yml index 9763eec4a..1977d09cc 100644 --- a/.github/workflows/e2e-test-stackit.yml +++ b/.github/workflows/e2e-test-stackit.yml @@ -40,7 +40,7 @@ jobs: fail-fast: false max-parallel: 6 matrix: - kubernetesVersion: [ "1.28", "1.29", "1.30" ] + kubernetesVersion: [ "1.29", "1.30", "1.31" ] clusterCreation: [ "cli", "terraform" ] test: [ "sonobuoy quick" ] runs-on: ubuntu-24.04 From 0de14a2e60d207e3895e5e4267e41ab81aa2f708 Mon Sep 17 00:00:00 2001 From: edgelessci <71088502+edgelessci@users.noreply.github.com> Date: Sun, 23 Mar 2025 18:06:19 +0100 Subject: [PATCH 158/311] image: update measurements and image version (#3700) Co-authored-by: edgelessci --- .../measurements/measurements_enterprise.go | 16 ++++++++-------- internal/config/image_enterprise.go | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/internal/attestation/measurements/measurements_enterprise.go b/internal/attestation/measurements/measurements_enterprise.go index d07de57ec..90b50c9c7 100644 --- a/internal/attestation/measurements/measurements_enterprise.go +++ b/internal/attestation/measurements/measurements_enterprise.go @@ -19,14 +19,14 @@ package measurements // revive:disable:var-naming var ( - aws_AWSNitroTPM = M{0: {Expected: []byte{0x73, 0x7f, 0x76, 0x7a, 0x12, 0xf5, 0x4e, 0x70, 0xee, 0xcb, 0xc8, 0x68, 0x40, 0x11, 0x32, 0x3a, 0xe2, 0xfe, 0x2d, 0xd9, 0xf9, 0x07, 0x85, 0x57, 0x79, 0x69, 0xd7, 0xa2, 0x01, 0x3e, 0x8c, 0x12}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xd8, 0xed, 0x88, 0x2d, 0x9f, 0xbd, 0x13, 0x77, 0xfa, 0x67, 0xa3, 0x11, 0xd5, 0xf5, 0xf3, 0x5f, 0xd5, 0x44, 0xee, 0xe9, 0x9f, 0x60, 0x2c, 0xed, 0x6d, 0x72, 0xd7, 0xa1, 0x04, 0x7d, 0x2a, 0xd8}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x45, 0xe7, 0xd6, 0x7e, 0x7f, 0xb0, 0x18, 0xca, 0x76, 0xcc, 0x27, 0x8b, 0x7a, 0xd7, 0x15, 0x0e, 0xa8, 0x9d, 0x2a, 0xf0, 0x37, 0xc9, 0x9d, 0x43, 0x95, 0x9a, 0xaf, 0x46, 0xe2, 0x0f, 0x62, 0xec}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xdf, 0x18, 0x72, 0x7c, 0x1e, 0xb5, 0x2c, 0xf2, 0xb7, 0xc0, 0x30, 0x22, 0x3b, 0xe6, 0x5b, 0x6e, 0x2a, 0xb8, 0xb0, 0x6d, 0x20, 0x4f, 0xb9, 0xa6, 0xee, 0x12, 0xa2, 0x4d, 0xa7, 0x7b, 0x84, 0xc9}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - aws_AWSSEVSNP = M{0: {Expected: []byte{0xd6, 0xdf, 0x85, 0x53, 0x58, 0xf5, 0xb1, 0x0f, 0x06, 0xf0, 0xfa, 0xb3, 0xf4, 0x08, 0xad, 0x26, 0xcd, 0x16, 0x5a, 0x29, 0x49, 0xba, 0xd6, 0x9e, 0x2c, 0xc7, 0x56, 0x92, 0x52, 0x9e, 0x66, 0x2a}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xe7, 0x16, 0xc8, 0x9f, 0x32, 0xbe, 0x42, 0x40, 0x2c, 0x48, 0x64, 0x6d, 0xc0, 0xd0, 0x49, 0x6b, 0x06, 0x69, 0x5b, 0xfc, 0xb4, 0xda, 0x79, 0xbf, 0x23, 0xa7, 0xee, 0x5f, 0x32, 0x5f, 0x69, 0xec}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x3b, 0x48, 0xbf, 0x17, 0x24, 0x9b, 0xc6, 0x1a, 0x83, 0xe5, 0x99, 0x16, 0x9a, 0xbe, 0x95, 0xa8, 0x3f, 0xf5, 0x86, 0xd8, 0xf2, 0xc1, 0x98, 0x49, 0xba, 0xec, 0x63, 0x2d, 0x13, 0x83, 0xe5, 0xbf}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xf7, 0x0d, 0xc7, 0x5e, 0xd8, 0x9b, 0x88, 0x53, 0x40, 0x91, 0xd6, 0xa1, 0x91, 0xde, 0x16, 0x5c, 0x48, 0x54, 0xa8, 0x24, 0xd9, 0x6b, 0xb4, 0x66, 0xe8, 0xa4, 0x05, 0xba, 0x55, 0x46, 0xb7, 0x52}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - azure_AzureSEVSNP = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xe5, 0x23, 0x66, 0x0a, 0xc1, 0x81, 0x6c, 0x01, 0x04, 0x62, 0xd3, 0x57, 0x2d, 0xb3, 0x8b, 0xc0, 0xfa, 0x80, 0xb3, 0xb1, 0x06, 0x9b, 0x79, 0x65, 0x93, 0xc4, 0xd5, 0x7d, 0xe1, 0x14, 0x90, 0x68}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xe5, 0xa2, 0x2e, 0x1f, 0xe8, 0x16, 0x8e, 0xc6, 0xa7, 0xac, 0xee, 0xf3, 0x4a, 0x94, 0x97, 0x15, 0xdb, 0x94, 0xb4, 0xd7, 0x8e, 0xe7, 0xf6, 0xf6, 0x6c, 0xf5, 0x50, 0xf7, 0xfb, 0xa9, 0xb6, 0x46}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xae, 0xbf, 0x34, 0xc4, 0x10, 0xb4, 0xd9, 0xa4, 0x12, 0x94, 0x71, 0xa5, 0x7d, 0x3c, 0xc0, 0x7e, 0xb0, 0x01, 0x48, 0x9f, 0x7c, 0x7f, 0x44, 0xd6, 0xc2, 0x1a, 0x00, 0xd9, 0x2c, 0x1f, 0xbb, 0x9b}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - azure_AzureTDX = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x8a, 0x0d, 0x52, 0x7a, 0xf7, 0x1f, 0x31, 0x2a, 0x46, 0xab, 0x37, 0x06, 0xea, 0xa5, 0xd7, 0x41, 0xa8, 0x95, 0xdb, 0x4a, 0xbd, 0xba, 0x44, 0x7d, 0x1d, 0xa9, 0x44, 0xcd, 0x55, 0xdc, 0xb7, 0x6d}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x70, 0xbf, 0x3e, 0x57, 0x62, 0x2f, 0x36, 0xa1, 0xc6, 0xbc, 0xb7, 0x67, 0xdc, 0x2f, 0x72, 0x2d, 0x84, 0x4c, 0x63, 0x9d, 0xd1, 0xae, 0x30, 0xd9, 0xc1, 0x7f, 0xfa, 0xb8, 0xa2, 0xeb, 0x7b, 0x2b}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x9f, 0x77, 0x46, 0xa8, 0x09, 0x12, 0x4f, 0x90, 0xe7, 0xfa, 0x4b, 0x05, 0xce, 0x93, 0x17, 0x7f, 0xf7, 0x3a, 0x06, 0x86, 0x39, 0xfe, 0x45, 0xd1, 0x7d, 0xa0, 0x91, 0xbb, 0xd9, 0x7b, 0xa4, 0xc5}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + aws_AWSNitroTPM = M{0: {Expected: []byte{0x73, 0x7f, 0x76, 0x7a, 0x12, 0xf5, 0x4e, 0x70, 0xee, 0xcb, 0xc8, 0x68, 0x40, 0x11, 0x32, 0x3a, 0xe2, 0xfe, 0x2d, 0xd9, 0xf9, 0x07, 0x85, 0x57, 0x79, 0x69, 0xd7, 0xa2, 0x01, 0x3e, 0x8c, 0x12}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xb5, 0xc4, 0x99, 0x57, 0xcc, 0x7e, 0xf3, 0x82, 0xf6, 0xaa, 0xc1, 0x82, 0x1a, 0x0a, 0x0b, 0x30, 0x64, 0x26, 0x1d, 0x03, 0x6b, 0x14, 0x2b, 0xdf, 0x1c, 0xa8, 0xd9, 0xf0, 0x7c, 0x70, 0x63, 0x49}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x90, 0x7a, 0x0d, 0x14, 0xde, 0x7d, 0x74, 0xd0, 0x93, 0xd9, 0xd0, 0xca, 0x90, 0xe7, 0xde, 0x52, 0xd9, 0xd4, 0x09, 0xb8, 0xb8, 0x99, 0x96, 0xe4, 0x0d, 0xde, 0xc0, 0xb1, 0x3e, 0xc6, 0x52, 0xa3}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x03, 0xc4, 0xca, 0x1b, 0x51, 0x4a, 0xaf, 0xb2, 0xcd, 0xcb, 0x41, 0x7c, 0xd5, 0x38, 0x64, 0x37, 0x55, 0xaf, 0xad, 0x58, 0x44, 0x35, 0x5f, 0xe1, 0x0f, 0xe0, 0xfd, 0x79, 0xcc, 0x8c, 0x40, 0x4c}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + aws_AWSSEVSNP = M{0: {Expected: []byte{0xd6, 0xdf, 0x85, 0x53, 0x58, 0xf5, 0xb1, 0x0f, 0x06, 0xf0, 0xfa, 0xb3, 0xf4, 0x08, 0xad, 0x26, 0xcd, 0x16, 0x5a, 0x29, 0x49, 0xba, 0xd6, 0x9e, 0x2c, 0xc7, 0x56, 0x92, 0x52, 0x9e, 0x66, 0x2a}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xdc, 0x89, 0x83, 0x62, 0x79, 0xc5, 0xb2, 0xd2, 0xc0, 0xc9, 0x4f, 0x5e, 0x83, 0x7c, 0x2d, 0xd7, 0x23, 0x5c, 0x47, 0xff, 0xa6, 0x3a, 0x93, 0x85, 0xeb, 0x70, 0x1e, 0x2d, 0x8d, 0x83, 0x3b, 0xce}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x8b, 0x44, 0x82, 0x99, 0x3d, 0x2f, 0xaf, 0xc7, 0xee, 0xe3, 0x0e, 0x46, 0xf8, 0xac, 0xff, 0x62, 0x1f, 0xb1, 0xf1, 0x6c, 0xab, 0x3d, 0x4c, 0xd1, 0x89, 0x41, 0xaa, 0xc3, 0x91, 0x71, 0x0c, 0x97}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x26, 0x3f, 0xf8, 0xa3, 0xa0, 0x06, 0xf7, 0x47, 0xf1, 0x12, 0xc6, 0xac, 0x1c, 0x7a, 0x84, 0xa5, 0x79, 0x90, 0x45, 0xf3, 0xcd, 0x66, 0x1e, 0x78, 0xd0, 0xfc, 0x70, 0x53, 0x4f, 0x5b, 0x82, 0x18}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + azure_AzureSEVSNP = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x55, 0x9a, 0xd2, 0x03, 0x30, 0x5c, 0xff, 0xbe, 0xb7, 0x48, 0xac, 0x3e, 0xa3, 0x00, 0x2d, 0xe6, 0xb3, 0x02, 0x24, 0x44, 0x64, 0x19, 0x81, 0x3a, 0x70, 0xb1, 0xa4, 0x97, 0x60, 0x50, 0xc3, 0x6d}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x35, 0x4f, 0x33, 0xa2, 0x98, 0x35, 0x03, 0x73, 0xf7, 0x12, 0xde, 0x3a, 0xd3, 0x84, 0x89, 0x2a, 0xc3, 0xfb, 0x8a, 0xa1, 0xb5, 0xbf, 0x6a, 0x68, 0x3a, 0x17, 0x9b, 0x63, 0xec, 0xaf, 0xf3, 0xb5}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xfa, 0x10, 0x7c, 0xab, 0x12, 0xa9, 0xbb, 0x23, 0xca, 0x3f, 0x4f, 0xf9, 0x3d, 0xf9, 0xa8, 0xa5, 0x0e, 0x9f, 0x1d, 0xbf, 0x86, 0x18, 0x52, 0xea, 0x93, 0xdd, 0xfa, 0xa6, 0x84, 0xfb, 0xf5, 0xdf}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + azure_AzureTDX = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x1f, 0x75, 0x67, 0xce, 0xc8, 0x59, 0x25, 0x8f, 0xbd, 0xe5, 0xf7, 0x43, 0x16, 0x3a, 0x79, 0x04, 0x56, 0x8d, 0xaf, 0x01, 0x5f, 0xce, 0x62, 0xc6, 0x45, 0x01, 0x0b, 0x00, 0xce, 0x0c, 0x13, 0x71}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x1a, 0x04, 0xdc, 0xd3, 0x20, 0xef, 0x51, 0xac, 0x55, 0x32, 0x87, 0xd9, 0xe3, 0x13, 0xa9, 0xf2, 0x04, 0x61, 0x14, 0x7b, 0x5d, 0x79, 0xe3, 0x34, 0x7c, 0x11, 0x9d, 0xaa, 0x3c, 0x7f, 0x5b, 0xe7}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xf0, 0x81, 0xe1, 0xd4, 0xb0, 0x4d, 0x9a, 0x9c, 0xdd, 0x39, 0xb6, 0x58, 0x27, 0xdf, 0x12, 0xb1, 0x43, 0x48, 0x95, 0x1d, 0x8e, 0x86, 0x03, 0x85, 0x67, 0x43, 0x4c, 0x16, 0x5e, 0xa8, 0x2e, 0x58}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} azure_AzureTrustedLaunch M - gcp_GCPSEVES = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xc3, 0x9e, 0x72, 0x77, 0x9c, 0xa5, 0x90, 0x2b, 0x69, 0x87, 0xf6, 0xbc, 0x4b, 0x00, 0xd0, 0x0e, 0x30, 0x0a, 0x80, 0x18, 0xbd, 0x41, 0x0f, 0xe5, 0xd3, 0x34, 0x11, 0xfd, 0x79, 0x95, 0x05, 0x59}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xdf, 0x13, 0x61, 0x47, 0x14, 0xb6, 0x8e, 0x4f, 0xf2, 0x88, 0x91, 0x97, 0x98, 0xd9, 0xb1, 0xb0, 0xf3, 0x34, 0x67, 0xda, 0x14, 0x9a, 0x08, 0x06, 0x74, 0x52, 0x6c, 0xa9, 0x54, 0xd7, 0xdc, 0xd9}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x5b, 0xc5, 0xcd, 0xea, 0x8d, 0xd3, 0x23, 0x7e, 0x67, 0x47, 0x23, 0xb2, 0x41, 0xfb, 0x5b, 0x92, 0x65, 0x31, 0xc1, 0x1f, 0x73, 0x4e, 0x5e, 0xae, 0x83, 0x99, 0xbb, 0xc1, 0x5b, 0x3f, 0x49, 0xca}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - gcp_GCPSEVSNP = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x93, 0x79, 0x42, 0xd1, 0x21, 0xfc, 0x66, 0x5d, 0xb8, 0xa9, 0x9b, 0xfb, 0x56, 0x32, 0x74, 0x84, 0xf0, 0x0b, 0xff, 0x00, 0x53, 0xa5, 0x5c, 0x2f, 0xde, 0xa8, 0xa1, 0x95, 0x40, 0xf6, 0x9c, 0xba}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x74, 0xbf, 0xc4, 0x68, 0x27, 0x39, 0x52, 0xbe, 0xf7, 0x42, 0x30, 0x78, 0x33, 0x6b, 0x91, 0x51, 0x67, 0x0a, 0x0a, 0x70, 0x69, 0xac, 0xa9, 0xf1, 0xad, 0x3c, 0xc3, 0xbb, 0x69, 0xd2, 0x97, 0x51}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x95, 0x89, 0x21, 0x49, 0xf3, 0xf3, 0xf5, 0x9e, 0xb7, 0xf2, 0x80, 0x35, 0x1d, 0x86, 0xfb, 0x36, 0x63, 0x23, 0xae, 0xbf, 0x88, 0xd3, 0xf1, 0x48, 0xb5, 0x5f, 0xbe, 0x37, 0xc6, 0x5b, 0x55, 0x02}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - openstack_QEMUVTPM = M{4: {Expected: []byte{0x36, 0x41, 0x15, 0x9b, 0x85, 0xf7, 0x15, 0xd3, 0xe9, 0x00, 0x1b, 0x3f, 0x1d, 0x4d, 0x83, 0xcd, 0x11, 0xff, 0x87, 0xb6, 0xc3, 0x9d, 0xa7, 0x26, 0x91, 0x2c, 0xd4, 0xed, 0x39, 0x97, 0x73, 0xe9}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xc7, 0xac, 0x2b, 0x72, 0xb5, 0x68, 0x95, 0xc0, 0xa8, 0xcc, 0xae, 0xab, 0xce, 0x57, 0x10, 0xef, 0x38, 0x2e, 0x63, 0x0f, 0xdc, 0x55, 0x4c, 0x5c, 0xaa, 0x13, 0x9e, 0x4a, 0x1d, 0x87, 0x65, 0xd1}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x44, 0xda, 0xdc, 0xe6, 0x09, 0xf0, 0xd8, 0xb1, 0xf1, 0x16, 0xb5, 0x4a, 0x68, 0xf3, 0x7f, 0x40, 0x5e, 0xa4, 0x50, 0x00, 0x88, 0x27, 0x58, 0x1c, 0x54, 0x15, 0x0b, 0x39, 0x92, 0xf5, 0x03, 0x5e}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + gcp_GCPSEVES = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xaf, 0x56, 0x9c, 0x07, 0x20, 0xe1, 0xd9, 0xde, 0x9b, 0x07, 0x1a, 0xa2, 0xd6, 0x02, 0x8b, 0x1d, 0x91, 0xd6, 0xa8, 0xb4, 0x06, 0xe3, 0xd4, 0xbe, 0x69, 0xe0, 0xf3, 0xf5, 0xe4, 0x60, 0xa0, 0xa4}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xbe, 0xf7, 0x2e, 0x16, 0x4f, 0xe6, 0xa4, 0x80, 0xf3, 0x80, 0x7d, 0xaf, 0x98, 0x88, 0xe5, 0xa3, 0x67, 0x35, 0xba, 0x01, 0x41, 0x12, 0x5f, 0x23, 0x1b, 0x64, 0xe4, 0xbc, 0xbc, 0xee, 0x68, 0xe6}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x30, 0xc0, 0x45, 0x76, 0x4e, 0x38, 0xd6, 0xc3, 0xe0, 0xac, 0x19, 0x0e, 0x90, 0xe9, 0xf8, 0x4e, 0xa6, 0xc6, 0x3c, 0x8f, 0x77, 0x7a, 0x62, 0xc6, 0x3a, 0x2f, 0x46, 0x77, 0x8b, 0x77, 0x23, 0xb4}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + gcp_GCPSEVSNP = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x74, 0xfe, 0xc7, 0x47, 0x7f, 0xa0, 0xc9, 0x21, 0xe7, 0xf9, 0x6c, 0xc3, 0x88, 0x76, 0x3f, 0x84, 0xb9, 0x5e, 0xce, 0x2a, 0xce, 0xf5, 0x9d, 0xb1, 0x29, 0x2b, 0xa1, 0x97, 0x77, 0xde, 0x6a, 0x04}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xd7, 0xa2, 0x13, 0xa7, 0xd8, 0x3f, 0x03, 0xbb, 0xfc, 0x18, 0x02, 0x81, 0x88, 0x62, 0x3a, 0xa5, 0xf7, 0xdf, 0x92, 0xf5, 0xa9, 0xf9, 0x8f, 0x32, 0x50, 0x48, 0x0a, 0x6b, 0xda, 0x12, 0xe6, 0x28}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xe9, 0x5c, 0x3d, 0x76, 0x94, 0x08, 0xfe, 0xf3, 0xb8, 0x75, 0x68, 0x49, 0x7b, 0x72, 0x1c, 0x7d, 0xef, 0x81, 0xc7, 0x0e, 0x54, 0x01, 0x30, 0x9b, 0x41, 0x7f, 0x33, 0x5c, 0x76, 0x0d, 0x77, 0xc5}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + openstack_QEMUVTPM = M{4: {Expected: []byte{0xb3, 0x9e, 0x7f, 0x79, 0xa1, 0xa3, 0x52, 0x1f, 0xcb, 0x7f, 0xbc, 0x2f, 0x88, 0x63, 0x37, 0x35, 0x5f, 0xf8, 0xe3, 0xb8, 0xc1, 0x61, 0x79, 0x2f, 0xda, 0x4b, 0x86, 0x5e, 0xa6, 0x30, 0xa6, 0x35}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x1d, 0x19, 0x76, 0x78, 0x27, 0x8d, 0x22, 0xb2, 0x65, 0xd6, 0x6c, 0xc2, 0x91, 0x6d, 0x96, 0xc2, 0x3b, 0xf9, 0x91, 0x1b, 0x7e, 0x54, 0x85, 0xac, 0xc3, 0xc8, 0x58, 0x7c, 0xad, 0xc2, 0x38, 0xa7}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xa6, 0xe2, 0xcb, 0x6a, 0xb4, 0xac, 0x96, 0x64, 0x2c, 0x29, 0x6b, 0x13, 0xee, 0x9d, 0xf1, 0xe7, 0x60, 0xd7, 0xd8, 0xf3, 0xa6, 0x10, 0x6d, 0x12, 0x9e, 0xf5, 0x6f, 0xf3, 0xea, 0x66, 0x05, 0x2d}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} qemu_QEMUTDX M - qemu_QEMUVTPM = M{4: {Expected: []byte{0x53, 0x56, 0x19, 0x85, 0x3a, 0x2a, 0x7e, 0xb2, 0x95, 0xf1, 0xa5, 0x11, 0x9e, 0x0e, 0x62, 0xbd, 0xc3, 0xca, 0x16, 0xa4, 0xd0, 0x66, 0x7e, 0x3a, 0xc9, 0x2a, 0x7f, 0xb6, 0xd5, 0xd6, 0x13, 0x81}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x41, 0x4e, 0x74, 0xc2, 0x24, 0x41, 0x80, 0x22, 0xa1, 0xf1, 0xa9, 0xd3, 0x9f, 0x20, 0xc9, 0x36, 0x95, 0x26, 0xef, 0x94, 0x36, 0x2a, 0xff, 0xa9, 0x1d, 0xde, 0xdb, 0xe9, 0x97, 0xc3, 0x48, 0xd5}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x23, 0xba, 0xe8, 0xf2, 0xe1, 0x17, 0x34, 0xa5, 0x46, 0x99, 0xad, 0x35, 0xb1, 0x46, 0xa9, 0x45, 0x72, 0x6c, 0x92, 0x5b, 0x39, 0x74, 0xaf, 0x80, 0x33, 0xc5, 0x40, 0xb8, 0x0c, 0x33, 0xbb, 0xc3}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + qemu_QEMUVTPM = M{4: {Expected: []byte{0x89, 0x78, 0xe0, 0xec, 0x09, 0x67, 0x67, 0x5c, 0x45, 0xf5, 0x6c, 0x01, 0xa1, 0xff, 0xb5, 0xde, 0x68, 0x02, 0x51, 0x0a, 0x2c, 0x89, 0xad, 0x1d, 0x3a, 0x44, 0x62, 0xa1, 0xfc, 0x5c, 0xf2, 0x1a}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x61, 0x47, 0xb2, 0xb2, 0xa5, 0xfc, 0x5b, 0xc3, 0xc9, 0xa5, 0xdc, 0x4c, 0xa9, 0xf4, 0x33, 0x6e, 0xf1, 0x6d, 0x38, 0xb6, 0x49, 0xb7, 0xf3, 0x35, 0x0e, 0x05, 0xf3, 0xe4, 0x68, 0x32, 0x76, 0x63}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x9f, 0x51, 0xe1, 0x17, 0xa4, 0x91, 0xd4, 0x0c, 0xaa, 0x2b, 0x82, 0x6c, 0x37, 0xd0, 0x5c, 0x5f, 0x0b, 0x6e, 0x16, 0xd2, 0xcc, 0xaa, 0x0a, 0xcd, 0x76, 0xd0, 0xd7, 0x2f, 0x2c, 0xee, 0xda, 0xe3}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} ) diff --git a/internal/config/image_enterprise.go b/internal/config/image_enterprise.go index b5ef5c59b..30331c013 100644 --- a/internal/config/image_enterprise.go +++ b/internal/config/image_enterprise.go @@ -10,5 +10,5 @@ package config const ( // defaultImage is the default image to use. - defaultImage = "ref/main/stream/nightly/v2.22.0-pre.0.20250312151813-df06022e9ea0" + defaultImage = "ref/main/stream/nightly/v2.22.0-pre.0.20250317103434-f64dc96e7acb" ) From a67818f447ad11efb66ab2e2c90ec37f4c28575d Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 23 Mar 2025 18:06:34 +0100 Subject: [PATCH 159/311] deps: update Kubernetes versions (#3696) * deps: update Kubernetes versions * deps: tidy all modules --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: edgelessci --- docs/docs/architecture/versions.md | 6 +- internal/versions/versions.go | 66 +++++++++---------- .../docs/resources/cluster.md | 2 +- 3 files changed, 37 insertions(+), 37 deletions(-) diff --git a/docs/docs/architecture/versions.md b/docs/docs/architecture/versions.md index 9acc866ed..6f06c011b 100644 --- a/docs/docs/architecture/versions.md +++ b/docs/docs/architecture/versions.md @@ -16,6 +16,6 @@ Subsequent Constellation releases drop support for the oldest (and deprecated) K The following Kubernetes versions are currently supported: -* v1.29.14 -* v1.30.10 -* v1.31.6 +* v1.29.15 +* v1.30.11 +* v1.31.7 diff --git a/internal/versions/versions.go b/internal/versions/versions.go index 1d10afd25..0791ae3ba 100644 --- a/internal/versions/versions.go +++ b/internal/versions/versions.go @@ -181,11 +181,11 @@ const ( // currently supported versions. //nolint:revive - V1_29 ValidK8sVersion = "v1.29.14" // renovate:kubernetes-release + V1_29 ValidK8sVersion = "v1.29.15" // renovate:kubernetes-release //nolint:revive - V1_30 ValidK8sVersion = "v1.30.10" // renovate:kubernetes-release + V1_30 ValidK8sVersion = "v1.30.11" // renovate:kubernetes-release //nolint:revive - V1_31 ValidK8sVersion = "v1.31.6" // renovate:kubernetes-release + V1_31 ValidK8sVersion = "v1.31.7" // renovate:kubernetes-release // Default k8s version deployed by Constellation. Default ValidK8sVersion = V1_30 @@ -198,7 +198,7 @@ const ( // VersionConfigs holds download URLs for all required kubernetes components for every supported version. var VersionConfigs = map[ValidK8sVersion]KubernetesVersion{ V1_29: { - ClusterVersion: "v1.29.14", // renovate:kubernetes-release + ClusterVersion: "v1.29.15", // renovate:kubernetes-release KubernetesComponents: components.Components{ { Url: "https://github.com/containernetworking/plugins/releases/download/v1.6.2/cni-plugins-linux-amd64-v1.6.2.tgz", // renovate:cni-plugins-release @@ -213,33 +213,33 @@ var VersionConfigs = map[ValidK8sVersion]KubernetesVersion{ Extract: true, }, { - Url: "https://dl.k8s.io/v1.29.14/bin/linux/amd64/kubelet", // renovate:kubernetes-release - Hash: "sha256:b165ecf4e9a5f4f396d8a8a3563257d552946285d45dac0ccbe8b73435554dc5", + Url: "https://dl.k8s.io/v1.29.15/bin/linux/amd64/kubelet", // renovate:kubernetes-release + Hash: "sha256:cd0228a5820f98bbb6371344e5d6645f6486d767c30f927a1d0ec8d17eca4da5", InstallPath: constants.KubeletPath, Extract: false, }, { - Url: "https://dl.k8s.io/v1.29.14/bin/linux/amd64/kubeadm", // renovate:kubernetes-release - Hash: "sha256:4f72a1148b786a766cf695ead7cffa41859661286cd4e6e6a49da0838feae840", + Url: "https://dl.k8s.io/v1.29.15/bin/linux/amd64/kubeadm", // renovate:kubernetes-release + Hash: "sha256:d0744fbaa1e67fc65c4a3409f083e01a4ede58181c759b2feeb08b1ef10d6201", InstallPath: constants.KubeadmPath, Extract: false, }, { - Url: "https://dl.k8s.io/v1.29.14/bin/linux/amd64/kubectl", // renovate:kubernetes-release - Hash: "sha256:a4902c8a454a3678d589b51d95d810ec84791c03ed6b5779969df559c9c0357e", + Url: "https://dl.k8s.io/v1.29.15/bin/linux/amd64/kubectl", // renovate:kubernetes-release + Hash: "sha256:3473e14c7b024a6e5403c6401b273b3faff8e5b1fed022d633815eb3168e4516", InstallPath: constants.KubectlPath, Extract: false, }, { - Url: "data:application/json;base64,W3sib3AiOiJyZXBsYWNlIiwicGF0aCI6Ii9zcGVjL2NvbnRhaW5lcnMvMC9pbWFnZSIsInZhbHVlIjoicmVnaXN0cnkuazhzLmlvL2t1YmUtYXBpc2VydmVyOnYxLjI5LjE0QHNoYTI1NjoxNDMyYjQ1NmIyMTAxNWM5OTc4M2QyYjNhMjAxMDg3M2ZiNjdiZjk0NmM4OWQ0NWU2ZDM1NjQ0OWUwODNkY2ZiIn1d", + Url: "data:application/json;base64,W3sib3AiOiJyZXBsYWNlIiwicGF0aCI6Ii9zcGVjL2NvbnRhaW5lcnMvMC9pbWFnZSIsInZhbHVlIjoicmVnaXN0cnkuazhzLmlvL2t1YmUtYXBpc2VydmVyOnYxLjI5LjE1QHNoYTI1NjpmZDgyYzc0ZTA3NzNhMTAzOTYwNTU5MDQ3NTMxMjY0MTFiM2E5NTg0Y2M0NTNlMWM3MTUyYzgxMDE4YTkzM2I2In1d", InstallPath: patchFilePath("kube-apiserver"), }, { - Url: "data:application/json;base64,W3sib3AiOiJyZXBsYWNlIiwicGF0aCI6Ii9zcGVjL2NvbnRhaW5lcnMvMC9pbWFnZSIsInZhbHVlIjoicmVnaXN0cnkuazhzLmlvL2t1YmUtY29udHJvbGxlci1tYW5hZ2VyOnYxLjI5LjE0QHNoYTI1NjoyM2NjZGI1ZTdlMmMzMTdmNTcyNzY1MmVmN2U2NGVmOTFlYWQzNGEzYzczZGZhOWMzYWIyM2IzYTUwMjhlMjgwIn1d", + Url: "data:application/json;base64,W3sib3AiOiJyZXBsYWNlIiwicGF0aCI6Ii9zcGVjL2NvbnRhaW5lcnMvMC9pbWFnZSIsInZhbHVlIjoicmVnaXN0cnkuazhzLmlvL2t1YmUtY29udHJvbGxlci1tYW5hZ2VyOnYxLjI5LjE1QHNoYTI1Njo0ZjA1YmUyYzA2NjdkOWY0OTc1YmNjNDNkNWUxMzZiMjQzNjk0NmY4NGM4ZjdkYzJkMmRhMTQzOTJlNzYxYTcxIn1d", InstallPath: patchFilePath("kube-controller-manager"), }, { - Url: "data:application/json;base64,W3sib3AiOiJyZXBsYWNlIiwicGF0aCI6Ii9zcGVjL2NvbnRhaW5lcnMvMC9pbWFnZSIsInZhbHVlIjoicmVnaXN0cnkuazhzLmlvL2t1YmUtc2NoZWR1bGVyOnYxLjI5LjE0QHNoYTI1NjpjZjAwNDZiZTNlYjZjNDgzMWI2YjJhMWIzZTI0ZjE4ZTI3Nzc4NjYzODkwMTQ0NDc4ZjExYTgyNjIyYjQ4YzQ4In1d", + Url: "data:application/json;base64,W3sib3AiOiJyZXBsYWNlIiwicGF0aCI6Ii9zcGVjL2NvbnRhaW5lcnMvMC9pbWFnZSIsInZhbHVlIjoicmVnaXN0cnkuazhzLmlvL2t1YmUtc2NoZWR1bGVyOnYxLjI5LjE1QHNoYTI1NjoyNzYxMDhhNDU0MWE1MTg5NGEwMTA2MzMyMzBmN2I2ZDEwZTkyZTczMDI3NGYyNGJkMjFlODI3ZTY0MjQzZDY2In1d", InstallPath: patchFilePath("kube-scheduler"), }, { @@ -265,7 +265,7 @@ var VersionConfigs = map[ValidK8sVersion]KubernetesVersion{ ClusterAutoscalerImage: "registry.k8s.io/autoscaling/cluster-autoscaler:v1.29.5@sha256:76865740be7c965b35ee1524931bb4abfe4c27b5bfad280e84068cd6653ee7bb", // renovate:container }, V1_30: { - ClusterVersion: "v1.30.10", // renovate:kubernetes-release + ClusterVersion: "v1.30.11", // renovate:kubernetes-release KubernetesComponents: components.Components{ { Url: "https://github.com/containernetworking/plugins/releases/download/v1.6.2/cni-plugins-linux-amd64-v1.6.2.tgz", // renovate:cni-plugins-release @@ -280,33 +280,33 @@ var VersionConfigs = map[ValidK8sVersion]KubernetesVersion{ Extract: true, }, { - Url: "https://dl.k8s.io/v1.30.10/bin/linux/amd64/kubelet", // renovate:kubernetes-release - Hash: "sha256:0c7aa1db3fa339aa13af0f825d25a76b3c74f785d4fcd49d6a0bc5a96f0971f0", + Url: "https://dl.k8s.io/v1.30.11/bin/linux/amd64/kubelet", // renovate:kubernetes-release + Hash: "sha256:59177fc92e2b2bb988f7d8d39682ea9e3d9d883273c9c8b51b39502d9b965431", InstallPath: constants.KubeletPath, Extract: false, }, { - Url: "https://dl.k8s.io/v1.30.10/bin/linux/amd64/kubeadm", // renovate:kubernetes-release - Hash: "sha256:177254194194975df68fd69a3647c86260a6c635bee42f516d3cecc047c4bc7c", + Url: "https://dl.k8s.io/v1.30.11/bin/linux/amd64/kubeadm", // renovate:kubernetes-release + Hash: "sha256:06ff7ff15b7fa9af60189fdece5f7c56efa8b637c38b4a498715ca2f04ccfcb2", InstallPath: constants.KubeadmPath, Extract: false, }, { - Url: "https://dl.k8s.io/v1.30.10/bin/linux/amd64/kubectl", // renovate:kubernetes-release - Hash: "sha256:bc74dbeefd4b9d53f03016f6778f3ffc9a72ef4ca7b7c80fd5dc1a41d52dcab7", + Url: "https://dl.k8s.io/v1.30.11/bin/linux/amd64/kubectl", // renovate:kubernetes-release + Hash: "sha256:228a8b2679f84de9192a1ac5ad527c9ab73b0f76c452ed74f11da812bbcfaa42", InstallPath: constants.KubectlPath, Extract: false, }, { - Url: "data:application/json;base64,W3sib3AiOiJyZXBsYWNlIiwicGF0aCI6Ii9zcGVjL2NvbnRhaW5lcnMvMC9pbWFnZSIsInZhbHVlIjoicmVnaXN0cnkuazhzLmlvL2t1YmUtYXBpc2VydmVyOnYxLjMwLjEwQHNoYTI1Njo2M2IyYjRiNGU5YjVkY2I1YjFiNmNlYzlkNWY1ZjUzODc5MWE0MGNkOGNiMjczZWY1MzBlNmQ2NTM1YWEwYjQzIn1d", + Url: "data:application/json;base64,W3sib3AiOiJyZXBsYWNlIiwicGF0aCI6Ii9zcGVjL2NvbnRhaW5lcnMvMC9pbWFnZSIsInZhbHVlIjoicmVnaXN0cnkuazhzLmlvL2t1YmUtYXBpc2VydmVyOnYxLjMwLjExQHNoYTI1Njo3N2M1NDM0Njk2NTAzNmFjYzdhYzk1YzMyMDA1OTdlZGUzNmRiOTI0NjE3OTI0OGRkZTIxYzFhM2VjYzFjYWYwIn1d", InstallPath: patchFilePath("kube-apiserver"), }, { - Url: "data:application/json;base64,W3sib3AiOiJyZXBsYWNlIiwicGF0aCI6Ii9zcGVjL2NvbnRhaW5lcnMvMC9pbWFnZSIsInZhbHVlIjoicmVnaXN0cnkuazhzLmlvL2t1YmUtY29udHJvbGxlci1tYW5hZ2VyOnYxLjMwLjEwQHNoYTI1Njo5OWIzMzM2MzQzZWE0OGJlMjRmMWU2NDc3NDgyNWU5ZjhkNTE3MGJkMmVkNDgyZmYzMzY1NDhlYjgyNGY1ZjU4In1d", + Url: "data:application/json;base64,W3sib3AiOiJyZXBsYWNlIiwicGF0aCI6Ii9zcGVjL2NvbnRhaW5lcnMvMC9pbWFnZSIsInZhbHVlIjoicmVnaXN0cnkuazhzLmlvL2t1YmUtY29udHJvbGxlci1tYW5hZ2VyOnYxLjMwLjExQHNoYTI1NjpkODg3NGYzZmI0NTU5MWVjZGFjNjdhMzAzNWM3MzA4MDhmMThiM2FiMTMxNDc0OTVjN2Q3N2ViMTk2MGQ0ZjZmIn1d", InstallPath: patchFilePath("kube-controller-manager"), }, { - Url: "data:application/json;base64,W3sib3AiOiJyZXBsYWNlIiwicGF0aCI6Ii9zcGVjL2NvbnRhaW5lcnMvMC9pbWFnZSIsInZhbHVlIjoicmVnaXN0cnkuazhzLmlvL2t1YmUtc2NoZWR1bGVyOnYxLjMwLjEwQHNoYTI1NjpjZjdlYjI1NjE5MmYxZjUxMDkzZmUyNzhjMjA5YTkzNjhmMDY3NWViNjFlZDAxYjE0OGFmNDdkMmYyMWMwMDJkIn1d", + Url: "data:application/json;base64,W3sib3AiOiJyZXBsYWNlIiwicGF0aCI6Ii9zcGVjL2NvbnRhaW5lcnMvMC9pbWFnZSIsInZhbHVlIjoicmVnaXN0cnkuazhzLmlvL2t1YmUtc2NoZWR1bGVyOnYxLjMwLjExQHNoYTI1NjpjNjk5ZjhjOTdhZTdlYzgxOWM4YmQ4NzhkM2RiMTA0YmE3MmZjNDQwZDgxMGQ5MDMwZTA5Mjg2YjY5NjAxN2I1In1d", InstallPath: patchFilePath("kube-scheduler"), }, { @@ -332,7 +332,7 @@ var VersionConfigs = map[ValidK8sVersion]KubernetesVersion{ ClusterAutoscalerImage: "registry.k8s.io/autoscaling/cluster-autoscaler:v1.30.3@sha256:08fd86ee093760849ac4fd579eb90185b669fc20aa56c156aa34ea7b73dd5e34", // renovate:container }, V1_31: { - ClusterVersion: "v1.31.6", // renovate:kubernetes-release + ClusterVersion: "v1.31.7", // renovate:kubernetes-release KubernetesComponents: components.Components{ { Url: "https://github.com/containernetworking/plugins/releases/download/v1.6.2/cni-plugins-linux-amd64-v1.6.2.tgz", // renovate:cni-plugins-release @@ -347,33 +347,33 @@ var VersionConfigs = map[ValidK8sVersion]KubernetesVersion{ Extract: true, }, { - Url: "https://dl.k8s.io/v1.31.6/bin/linux/amd64/kubelet", // renovate:kubernetes-release - Hash: "sha256:ea50176095dd4650f6b270c79cf6d30deaaeb96ffa7d1eaac6924428cc9d2486", + Url: "https://dl.k8s.io/v1.31.7/bin/linux/amd64/kubelet", // renovate:kubernetes-release + Hash: "sha256:279e766a1a7c0dce2efae452c9de1e52b169df31c4b75c9d3b7d51f767ae6d42", InstallPath: constants.KubeletPath, Extract: false, }, { - Url: "https://dl.k8s.io/v1.31.6/bin/linux/amd64/kubeadm", // renovate:kubernetes-release - Hash: "sha256:c9d9add6c8cdbeb29d5e1743f23060fc06219b23f561eb9f959b5502fb055611", + Url: "https://dl.k8s.io/v1.31.7/bin/linux/amd64/kubeadm", // renovate:kubernetes-release + Hash: "sha256:be84c87c7b40977edf67fb8ee231abb273b93bbab5bb770af0f3f37c0d7c4b81", InstallPath: constants.KubeadmPath, Extract: false, }, { - Url: "https://dl.k8s.io/v1.31.6/bin/linux/amd64/kubectl", // renovate:kubernetes-release - Hash: "sha256:c46b2f5b0027e919299d1eca073ebf13a4c5c0528dd854fc71a5b93396c9fa9d", + Url: "https://dl.k8s.io/v1.31.7/bin/linux/amd64/kubectl", // renovate:kubernetes-release + Hash: "sha256:80a3c83f00241cd402bc8688464e5e3eedd52a461ee41d882f19cf04ad6d0379", InstallPath: constants.KubectlPath, Extract: false, }, { - Url: "data:application/json;base64,W3sib3AiOiJyZXBsYWNlIiwicGF0aCI6Ii9zcGVjL2NvbnRhaW5lcnMvMC9pbWFnZSIsInZhbHVlIjoicmVnaXN0cnkuazhzLmlvL2t1YmUtYXBpc2VydmVyOnYxLjMxLjZAc2hhMjU2OmJlMGEyZDgxNTc5M2IwNDA4ZDkyMWE1MGI4Mjc1OWU2NTRjZjFiYmE3MThjYWM0ODA0OTgzOTE5MjY5MDI5MDUifV0=", + Url: "data:application/json;base64,W3sib3AiOiJyZXBsYWNlIiwicGF0aCI6Ii9zcGVjL2NvbnRhaW5lcnMvMC9pbWFnZSIsInZhbHVlIjoicmVnaXN0cnkuazhzLmlvL2t1YmUtYXBpc2VydmVyOnYxLjMxLjdAc2hhMjU2OjIyYzE5Y2M3MGZlNTgwNmQwYTJjYjI4YTZiNmIzM2ZkMzRlNmY5ZTUwNjE2YmRmNmQ1MzY0OWJjZmFmYmMyNzcifV0=", InstallPath: patchFilePath("kube-apiserver"), }, { - Url: "data:application/json;base64,W3sib3AiOiJyZXBsYWNlIiwicGF0aCI6Ii9zcGVjL2NvbnRhaW5lcnMvMC9pbWFnZSIsInZhbHVlIjoicmVnaXN0cnkuazhzLmlvL2t1YmUtY29udHJvbGxlci1tYW5hZ2VyOnYxLjMxLjZAc2hhMjU2OjYzMTY2ZTUzN2E4Mjg1NWFjOWI1NGZmYThiNTEwNDI5ZmU3OTllZDliMDYyYmY2Yjc4OGI3NGUxZDU5OTVkMTIifV0=", + Url: "data:application/json;base64,W3sib3AiOiJyZXBsYWNlIiwicGF0aCI6Ii9zcGVjL2NvbnRhaW5lcnMvMC9pbWFnZSIsInZhbHVlIjoicmVnaXN0cnkuazhzLmlvL2t1YmUtY29udHJvbGxlci1tYW5hZ2VyOnYxLjMxLjdAc2hhMjU2OjZhYmU3YTBhY2NlY2YyOWRiNmViYWIxOGExMGY4NDQ2NzhmZmVkNjkzZDc5ZTJlNTFhMThhNmYyYjQ1MzBjYmIifV0=", InstallPath: patchFilePath("kube-controller-manager"), }, { - Url: "data:application/json;base64,W3sib3AiOiJyZXBsYWNlIiwicGF0aCI6Ii9zcGVjL2NvbnRhaW5lcnMvMC9pbWFnZSIsInZhbHVlIjoicmVnaXN0cnkuazhzLmlvL2t1YmUtc2NoZWR1bGVyOnYxLjMxLjZAc2hhMjU2OjhhNjRhZjMzYzU3MzQ2MzU1ZGMzY2M2ZjkyMjVkYmU3NzFkYTMwZTJmNDI3ZTgwMmNlMjM0MGVjM2I1ZGQ5YjUifV0=", + Url: "data:application/json;base64,W3sib3AiOiJyZXBsYWNlIiwicGF0aCI6Ii9zcGVjL2NvbnRhaW5lcnMvMC9pbWFnZSIsInZhbHVlIjoicmVnaXN0cnkuazhzLmlvL2t1YmUtc2NoZWR1bGVyOnYxLjMxLjdAc2hhMjU2OmZiODAyNDliY2I3N2VlNzJiMWM5ZmE1YjcwYmMyOGE4M2VkMTA3YzljYTcxOTU3ODQxYWQ5MWRiMzc5OTYzYmYifV0=", InstallPath: patchFilePath("kube-scheduler"), }, { diff --git a/terraform-provider-constellation/docs/resources/cluster.md b/terraform-provider-constellation/docs/resources/cluster.md index 3d81aa1ec..178e7aba7 100644 --- a/terraform-provider-constellation/docs/resources/cluster.md +++ b/terraform-provider-constellation/docs/resources/cluster.md @@ -69,7 +69,7 @@ resource "constellation_cluster" "azure_example" { See the [full list of CSPs](https://docs.edgeless.systems/constellation/overview/clouds) that Constellation supports. - `image` (Attributes) Constellation OS Image to use on the nodes. (see [below for nested schema](#nestedatt--image)) - `init_secret` (String) Secret used for initialization of the cluster. -- `kubernetes_version` (String) The Kubernetes version to use for the cluster. The supported versions are [v1.29.14 v1.30.10 v1.31.6]. +- `kubernetes_version` (String) The Kubernetes version to use for the cluster. The supported versions are [v1.29.15 v1.30.11 v1.31.7]. - `master_secret` (String) Hex-encoded 32-byte master secret for the cluster. - `master_secret_salt` (String) Hex-encoded 32-byte master secret salt for the cluster. - `measurement_salt` (String) Hex-encoded 32-byte measurement salt for the cluster. From b0a22270f8e7b0f83aecc9b94312c151d7f2fc68 Mon Sep 17 00:00:00 2001 From: edgelessci <71088502+edgelessci@users.noreply.github.com> Date: Sun, 23 Mar 2025 18:06:48 +0100 Subject: [PATCH 160/311] image: update locked rpms (#3698) Co-authored-by: edgelessci --- image/mirror/SHA256SUMS | 62 ++++++++++++++++++++--------------------- 1 file changed, 31 insertions(+), 31 deletions(-) diff --git a/image/mirror/SHA256SUMS b/image/mirror/SHA256SUMS index 4006546e4..d38a413e5 100644 --- a/image/mirror/SHA256SUMS +++ b/image/mirror/SHA256SUMS @@ -15,7 +15,7 @@ a9af8b72483b4ad6489e6d2492161120809453373edaf24722cffb394bd1cd15 catatonit-0.2. 5935816e8d377d0385e5287ca12e4d3b43e3c3cdc9cc4deafa653a6dba78611a composefs-libs-1.0.6-1.fc40.x86_64.rpm db246f6445469b5a71e965a081685471768393cf04181e7250ce0ddcb8a9c3d4 conmon-2.1.12-2.fc40.x86_64.rpm adf4b75cdd9fae9d2d37fb71d9f0bf625a6705c0f0a7784569ab21463fe22152 conntrack-tools-1.4.7-7.fc40.x86_64.rpm -621302b0ea9cdd73d5eea4d30935cb415143df1649cd8e92424e967ea98fc34d container-selinux-2.234.2-1.fc40.noarch.rpm +4f69d382decd37f53edf1ccf1093a122f209294128038d642beba5f0021131d3 container-selinux-2.235.0-2.fc40.noarch.rpm bbe29e0c7b4ca076d50b4ac3954eb383459230d96b13f353ee71ebd5de33b6d1 containerd-1.6.23-5.fc40.x86_64.rpm 0705251ea64b1558098016b2120f202c5aba77470093cb8f89ce6adb2a0b46b6 containernetworking-plugins-1.5.1-1.fc40.x86_64.rpm fd81f5d57a5feba4658d3ab1c6ab0a1a9551cff5c73263acf960bd7d41acaf25 containers-common-0.62.0-1.fc40.noarch.rpm @@ -279,26 +279,26 @@ c000cbb0a7df2c0c61559ab3f3732eacd163b171673298f4ec043cb6d223f364 publicsuffix-l 15a80b975cc29fdbf3b71a0c8fa3f76a3fe722529036435b0cf7272f01a560c3 python-unversioned-command-3.12.9-1.fc40.noarch.rpm 870b11ae674851e6f9a02e650681c2e4a9fb1c91311beb944813ac6a2d4e15c9 python3-3.12.9-1.fc40.x86_64.rpm 2406c85716129d4183fcd2be8de2923770e8d6a12de270ac94cc427404a34a26 python3-libs-3.12.9-1.fc40.x86_64.rpm -d50b24d1a217e5201b4f8350945b7a3bc3fa01a61a8dd8d28e1b9512295238e1 qemu-user-static-8.2.8-2.fc40.x86_64.rpm -11f752c50493eca8f6dddf3140c694d3db4bc808771eaba25978ea2c309b2196 qemu-user-static-aarch64-8.2.8-2.fc40.x86_64.rpm -8598fde32ac72cafcc57f30edbfed1f920c58001dbeecb6932f4de8ce76091ba qemu-user-static-alpha-8.2.8-2.fc40.x86_64.rpm -3f2992c1b134a187105663f32d252cb0fe50874e8cbbe1348e9f3817a09ef1c3 qemu-user-static-arm-8.2.8-2.fc40.x86_64.rpm -9debca3f0a2d8a6a3a9fd79930b343be2d4ab1fade7f67fb3bbd6674e232aadd qemu-user-static-cris-8.2.8-2.fc40.x86_64.rpm -94639ad2de5e2c4779ca0c4b51c3413c7b819a6cffc89eae06bb00ad539892a0 qemu-user-static-hexagon-8.2.8-2.fc40.x86_64.rpm -0adcb370c0f684c10191aefb7e8eb5d0db720701b633f9482606cb0bf70d969a qemu-user-static-hppa-8.2.8-2.fc40.x86_64.rpm -b972de6f95b765b61348eb26769bd67166a6cf91679554ecfd291dcd4ea146f1 qemu-user-static-loongarch64-8.2.8-2.fc40.x86_64.rpm -9b9cc11ea7d30d8ee5255c2b76711adf251a7268bc37c2ca2849bec3e3a916ae qemu-user-static-m68k-8.2.8-2.fc40.x86_64.rpm -c4b9d434f89ceb1f5ed6a8c17daafa8f63c26a0b3f5e9df2d4aeb90794743493 qemu-user-static-microblaze-8.2.8-2.fc40.x86_64.rpm -3eac150092fd0dbb8181dd08647f86b6ebe2879dfcd2ee99562334f8b0b71096 qemu-user-static-mips-8.2.8-2.fc40.x86_64.rpm -5a141c3d6e646904ffbe6da45af44d091087604eb939ef1418a949184a15ebd0 qemu-user-static-nios2-8.2.8-2.fc40.x86_64.rpm -80f9bae5124b65730895b97c8279e4a8ea6e3ffb89aafb60a2b08abe2e890cef qemu-user-static-or1k-8.2.8-2.fc40.x86_64.rpm -3847d1ddbf2fb352ad54a4f094c1e5a39f8924ab2cdd25433182146a966c2885 qemu-user-static-ppc-8.2.8-2.fc40.x86_64.rpm -c7942c1e22240c6aae727b07716ee5bbab201b485f173e246a7c28b7942060aa qemu-user-static-riscv-8.2.8-2.fc40.x86_64.rpm -f3472d9f43b54fbb47e4b828a204947689706ddb0dede9912683c0880fa03f94 qemu-user-static-s390x-8.2.8-2.fc40.x86_64.rpm -3b2118fa1c89cad033d9d723bee6a2129aca7ed9d407668b100b861885b3bf51 qemu-user-static-sh4-8.2.8-2.fc40.x86_64.rpm -07cebe66bf0a9b67d34f29bf38df89bd4ee7db0e2d122bfc4dd61944b57d3b03 qemu-user-static-sparc-8.2.8-2.fc40.x86_64.rpm -6ece8c3814e3885b84eaa61dcfeb585cc63c8a7777eb823eac6ae319a574ba2f qemu-user-static-x86-8.2.8-2.fc40.x86_64.rpm -5a069e041c823e6d25427768d4232c36fb999248ab4cb5af9c47bc29eddbbf0e qemu-user-static-xtensa-8.2.8-2.fc40.x86_64.rpm +b593f10e736995a0a898d37a1e595ad04bf162e7f0e7c9994e3032a9d9bc8799 qemu-user-static-8.2.9-1.fc40.x86_64.rpm +72b6185e59a7b359df273e9fe27dc014c0856341abcd1c907c7810a77cc6980e qemu-user-static-aarch64-8.2.9-1.fc40.x86_64.rpm +7eace5bc3e601266452b8356207604012542a8cd019b576e6d2ab9306c6a8e4c qemu-user-static-alpha-8.2.9-1.fc40.x86_64.rpm +6baadf76d6111fabe0c40d9ef8956396ffd23175dadceff940356e1d447c9f0b qemu-user-static-arm-8.2.9-1.fc40.x86_64.rpm +284850c3af8faa4b7ae51b5d2c1c597e783945a20b950b7bc0a925d02538ced3 qemu-user-static-cris-8.2.9-1.fc40.x86_64.rpm +8b5d75d2839682691d130409ebf7142f3fafdb970348f3b5336876d38d4ab0b7 qemu-user-static-hexagon-8.2.9-1.fc40.x86_64.rpm +fef5e7fef2df6f85092383de73373e5d9c9eb241232281bb94c068564c7306de qemu-user-static-hppa-8.2.9-1.fc40.x86_64.rpm +742c694b0e8cbe8bafe2b0602bb38f17c31b80c04f7eb6ee7f104e97d60a1e48 qemu-user-static-loongarch64-8.2.9-1.fc40.x86_64.rpm +872255f64d77ccc3a5388ace420e1434c504e79e31442f58a1516ff752697641 qemu-user-static-m68k-8.2.9-1.fc40.x86_64.rpm +314453265e4fe55fd7b02e01d17c14c4f68ff23bf652ca251915d65ff9006cc4 qemu-user-static-microblaze-8.2.9-1.fc40.x86_64.rpm +decbbd27625256fe9930c908eaf18e6c852f15e47913b7ca071bea091737d5c8 qemu-user-static-mips-8.2.9-1.fc40.x86_64.rpm +f7d088b6b21089c66c24317de994bc65c5ed0f7be484518e72aefe0f74aaf959 qemu-user-static-nios2-8.2.9-1.fc40.x86_64.rpm +58129a9a88a231446ec2fba60c378438d0020e3c7d72186f40d65d06be12eb93 qemu-user-static-or1k-8.2.9-1.fc40.x86_64.rpm +e1c1dc5e5b1d39b52b57c2ebfbbbaa4ece91d986ee8065547bcfb2f6b4707b92 qemu-user-static-ppc-8.2.9-1.fc40.x86_64.rpm +8863c1d75d185ed71bcba9496d353467d064669a3825ab5fda7b4f964bd1a76f qemu-user-static-riscv-8.2.9-1.fc40.x86_64.rpm +d8e5cbc0354aef6bca8600aeeb5f64b4833bb3f90466e64c37695fd7822c5f4b qemu-user-static-s390x-8.2.9-1.fc40.x86_64.rpm +71663f59440aae47599d857f89fb2149952ec4f1bb1afbd83f7d6ea00ccc393f qemu-user-static-sh4-8.2.9-1.fc40.x86_64.rpm +bfef80139dc556e1834b424a346a69fbdc2c706e0158402d8ea6c42e04123bb3 qemu-user-static-sparc-8.2.9-1.fc40.x86_64.rpm +9a0f90c77539963e1657148b3fda7b91285abfbfba52893735b36971df338b6c qemu-user-static-x86-8.2.9-1.fc40.x86_64.rpm +ccf7dd55fc0101233b3384077b544b8fcf658b3febd0e062a687a7537dd9618c qemu-user-static-xtensa-8.2.9-1.fc40.x86_64.rpm 8d50fba416f81e4091b144748fff22665ee88699fdc4a372b905d999d05fd3e8 qrencode-libs-4.1.1-7.fc40.i686.rpm 93781052576cc40a2c203bbc1bf865189a11b2c82436e614da9811baedc082fc qrencode-libs-4.1.1-7.fc40.x86_64.rpm 3527582fddcb54892228658b3929ffbb89766941a9794e726216e0800ac05721 readline-8.2-8.fc40.i686.rpm @@ -318,16 +318,16 @@ cfde0d25ecac7e689ee083b330b78df51d346c2b7557c83a189d5df95c4e2c8d shadow-utils-4 6e9b6b6196f1782419e447ac806c762d002c6930fe39b18999d9b32c24a0ecfc shadow-utils-subid-4.15.1-4.fc40.x86_64.rpm 67eede27af5b4773eb2f7ac794df694be030310d40bce462864c05b8f65c87c3 socat-1.8.0.0-2.fc40.x86_64.rpm 9fe46c08d942a5eaa66d997368f372557a81383fe9831ddeb801bccdde64f28b sqlite-libs-3.45.1-3.fc40.x86_64.rpm -50d517b44eeb126c05afcbc2e450bd5bfa1c6af0e9744e5a8fa749b0bbbd872e systemd-255.16-1.fc40.i686.rpm -f86b4e2a602905aeb1a87b2e0fcab9e783fa3347adb40d4e04c288ae0321f79f systemd-255.16-1.fc40.x86_64.rpm -7987560126dd84f8101bfc0e10455ed055f313c5df419d41417ebfcd7de16d97 systemd-boot-unsigned-255.16-1.fc40.x86_64.rpm -2c84b527acc9f776cae03fde6fe891f2d845b3b3aeea96758bf5f761f058fe5f systemd-libs-255.16-1.fc40.i686.rpm -2af80a3733c9cfee40b3a0cabb7263d9420182def1a072ef0b763915e8336f00 systemd-libs-255.16-1.fc40.x86_64.rpm -8ca37445fcbbd8a003fc67283694c0bd9299022d85acae8c53f0c828eeb07fa4 systemd-networkd-255.16-1.fc40.x86_64.rpm -d59030b779fdc989af950179ce808639a58878e6b8db4458fa7f7217c1b3b833 systemd-pam-255.16-1.fc40.i686.rpm -930aebc2ad9ada1be1ff85f2c2c6cedb1ca4ad81d7848b8a60955ce2f42a08a1 systemd-pam-255.16-1.fc40.x86_64.rpm -1c121a6537bb8922b3062f3d98ce5c825527cf55f9cbc65dbc1c4aba9ba79023 systemd-resolved-255.16-1.fc40.x86_64.rpm -6afe2b3d2bca4bdeb3bbd4a1dddc162f19863085db0f07c64a3bb9763e1ff2e4 systemd-udev-255.16-1.fc40.x86_64.rpm +08c40fb895e75add08d2c239d7bd24a0633ffaafed430f7ad5b464d1eea2a8b6 systemd-255.18-1.fc40.i686.rpm +51cd1eaa48613b981940d81ae76ea610c28265104e289a434a845ebf9e8f85a4 systemd-255.18-1.fc40.x86_64.rpm +d3c0e2fcfce8b412667f58d63f927076b01f51e0f36f5a7d4b4038efbebc95a0 systemd-boot-unsigned-255.18-1.fc40.x86_64.rpm +1fa7a7e4fcfa4f78c9bb0b5f95e100d3c9f36841368189339449612e7edb2a3c systemd-libs-255.18-1.fc40.i686.rpm +aceabc4c1848f8154afba961b3dfac1c95ec6c72cdf9238ceca384b699af3cef systemd-libs-255.18-1.fc40.x86_64.rpm +c8f5b5c50202965f86dc9139de3082a972e2a0222a1a426ce76a30d47cba5f32 systemd-networkd-255.18-1.fc40.x86_64.rpm +746e0db539b7c9a8bba425957304ca311878b198a2f6d63e60c42c266688c1dc systemd-pam-255.18-1.fc40.i686.rpm +71e42c637702d75b5a66058cb087c4ef7d0475da635ccfd0f40f71372d0e7de7 systemd-pam-255.18-1.fc40.x86_64.rpm +07082ff756a9db4851f996eb03e75f2d499a26bd42211a984788af5a1eeed300 systemd-resolved-255.18-1.fc40.x86_64.rpm +5dc7bdcbb590edf79d8ae90bf99a94d535b055816864ffdb2546acafc97d2736 systemd-udev-255.18-1.fc40.x86_64.rpm 65819c502727dc293a71a74b9a5f6b0ba781f12a99c5d5535085f168e5eac56e tar-1.35-3.fc40.x86_64.rpm 0478e12152cc3432a31dfca5ddbc80966800af437c6d7c0b26be307d5e1272e7 tpm2-tools-5.7-1.fc40.x86_64.rpm c3be8a6d0ea23b1d0bf466b19857b97f7ffde811ad7adec0599161059d84cc74 tpm2-tss-4.1.3-1.fc40.x86_64.rpm From b42f9dfb4ff4458dfdb63276032a23195dff3c59 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 23 Mar 2025 18:07:33 +0100 Subject: [PATCH 161/311] deps: update K8s constrained GCP versions (#3673) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- internal/versions/versions.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/internal/versions/versions.go b/internal/versions/versions.go index 0791ae3ba..3965abc04 100644 --- a/internal/versions/versions.go +++ b/internal/versions/versions.go @@ -329,7 +329,7 @@ var VersionConfigs = map[ValidK8sVersion]KubernetesVersion{ CloudControllerManagerImageOpenStack: "docker.io/k8scloudprovider/openstack-cloud-controller-manager:v1.26.4@sha256:05e846fb13481b6dbe4a1e50491feb219e8f5101af6cf662a086115735624db0", // renovate:container // External service image. Depends on k8s version. // Check for new versions at https://github.com/kubernetes/autoscaler/releases. - ClusterAutoscalerImage: "registry.k8s.io/autoscaling/cluster-autoscaler:v1.30.3@sha256:08fd86ee093760849ac4fd579eb90185b669fc20aa56c156aa34ea7b73dd5e34", // renovate:container + ClusterAutoscalerImage: "registry.k8s.io/autoscaling/cluster-autoscaler:v1.30.4@sha256:f508cac11c8300f27529ed73f8d80f9b1949f819e8f8787f28afcb8e47ceb2b4", // renovate:container }, V1_31: { ClusterVersion: "v1.31.7", // renovate:kubernetes-release @@ -396,7 +396,7 @@ var VersionConfigs = map[ValidK8sVersion]KubernetesVersion{ CloudControllerManagerImageOpenStack: "registry.k8s.io/provider-os/openstack-cloud-controller-manager:v1.32.0@sha256:25e0539888590240483b60dec84c2387fd3cc48bd81dc10a3f6b01fef2585548", // renovate:container // External service image. Depends on k8s version. // Check for new versions at https://github.com/kubernetes/autoscaler/releases. - ClusterAutoscalerImage: "registry.k8s.io/autoscaling/cluster-autoscaler:v1.31.0@sha256:6d4c51c35f344d230341d71bb6d35f2c2f0c0a6f205a7887ae44e6d852fb5b5f", // renovate:container + ClusterAutoscalerImage: "registry.k8s.io/autoscaling/cluster-autoscaler:v1.31.2@sha256:2f2ae9f88573d45d8c72d22abff97fb77fd8d9e55f40e57aa282957e56fd3a1a", // renovate:container }, } From f4840de69ee3ee797a63057aa784903b6b10289e Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 23 Mar 2025 18:07:43 +0100 Subject: [PATCH 162/311] deps: update module github.com/golang-jwt/jwt/v5 to v5.2.2 [SECURITY] (#3702) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 961553162..8e6acda8b 100644 --- a/go.mod +++ b/go.mod @@ -67,7 +67,7 @@ require ( github.com/go-playground/locales v0.14.1 github.com/go-playground/universal-translator v0.18.1 github.com/go-playground/validator/v10 v10.25.0 - github.com/golang-jwt/jwt/v5 v5.2.1 + github.com/golang-jwt/jwt/v5 v5.2.2 github.com/google/go-sev-guest v0.13.0 github.com/google/go-tdx-guest v0.3.2-0.20241009005452-097ee70d0843 github.com/google/go-tpm v0.9.3 diff --git a/go.sum b/go.sum index 12dc7db65..dc385b230 100644 --- a/go.sum +++ b/go.sum @@ -398,8 +398,8 @@ github.com/golang-jwt/jwt/v4 v4.0.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzw github.com/golang-jwt/jwt/v4 v4.5.0/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= github.com/golang-jwt/jwt/v4 v4.5.1 h1:JdqV9zKUdtaa9gdPlywC3aeoEsR681PlKC+4F5gQgeo= github.com/golang-jwt/jwt/v4 v4.5.1/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= -github.com/golang-jwt/jwt/v5 v5.2.1 h1:OuVbFODueb089Lh128TAcimifWaLhJwVflnrgM17wHk= -github.com/golang-jwt/jwt/v5 v5.2.1/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk= +github.com/golang-jwt/jwt/v5 v5.2.2 h1:Rl4B7itRWVtYIHFrSNd7vhTiz9UpLdi6gZhZ3wEeDy8= +github.com/golang-jwt/jwt/v5 v5.2.2/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk= github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE= github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/protobuf v1.1.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= From 3ccc7910aa83463f920a70e78e6323ae9ded27a7 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sun, 23 Mar 2025 18:07:54 +0100 Subject: [PATCH 163/311] deps: update dependency kubernetes-sigs/cri-tools to v1.32.0 (#3682) * deps: update dependency kubernetes-sigs/cri-tools to v1.32.0 * deps: tidy all modules --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: edgelessci --- internal/versions/versions.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/internal/versions/versions.go b/internal/versions/versions.go index 3965abc04..8c429fc5b 100644 --- a/internal/versions/versions.go +++ b/internal/versions/versions.go @@ -341,8 +341,8 @@ var VersionConfigs = map[ValidK8sVersion]KubernetesVersion{ Extract: true, }, { - Url: "https://github.com/kubernetes-sigs/cri-tools/releases/download/v1.31.1/crictl-v1.31.1-linux-amd64.tar.gz", // renovate:crictl-release - Hash: "sha256:0a03ba6b1e4c253d63627f8d210b2ea07675a8712587e697657b236d06d7d231", + Url: "https://github.com/kubernetes-sigs/cri-tools/releases/download/v1.32.0/crictl-v1.32.0-linux-amd64.tar.gz", // renovate:crictl-release + Hash: "sha256:f050b71d3a73a91a4e0990b90143ed04dcd100cc66f953736fcb6a2730e283c4", InstallPath: constants.BinDir, Extract: true, }, From be9f78cdc7b3f770ddfe1298865878c0fa25d658 Mon Sep 17 00:00:00 2001 From: edgelessci <71088502+edgelessci@users.noreply.github.com> Date: Sun, 23 Mar 2025 18:08:08 +0100 Subject: [PATCH 164/311] image: update measurements and image version (#3701) Co-authored-by: edgelessci From e001a8ec8f9c924196e5b7f568ea0776098f2825 Mon Sep 17 00:00:00 2001 From: edgelessci <71088502+edgelessci@users.noreply.github.com> Date: Sun, 23 Mar 2025 18:08:35 +0100 Subject: [PATCH 165/311] image: update locked rpms (#3703) Co-authored-by: edgelessci --- image/mirror/SHA256SUMS | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/image/mirror/SHA256SUMS b/image/mirror/SHA256SUMS index d38a413e5..0c4139a48 100644 --- a/image/mirror/SHA256SUMS +++ b/image/mirror/SHA256SUMS @@ -339,17 +339,17 @@ e1d443f7dcaec55eedc34bb66dd798ba9901dba69a169cff46f6c45671a3b3fa unbound-anchor 945aa536bc30050abc1870cef167cb944cf78d6628923476db43201a0054574b util-linux-2.40.2-1.fc40.x86_64.rpm 7ec1b5df780c5a30f8e901179480125a6ea87f1f7bad3b69da7f4b351b88c3dd util-linux-core-2.40-0.9.rc1.fc40.x86_64.rpm b1aa4e816c01c08c18924865640f214f717cdfc66837e53a24b8edfb80a86f9d util-linux-core-2.40.2-1.fc40.x86_64.rpm -c46fff2b0fd364c89c6e36abf1d6546bd209923c86312b774c3dd72bce610a4f vim-common-9.1.1169-1.fc40.x86_64.rpm -fa98d3d74921c9d8fe7bef96f3b283a05aaadba2b5b832f56dc72e9f97ee103e vim-data-9.1.1169-1.fc40.noarch.rpm -4499140a62b9982b3c09affb82688ba1fd62f2ab745ea3b5fe5fd86c39f87dc1 vim-enhanced-9.1.1169-1.fc40.x86_64.rpm -82690420e88fd44bf8b96ebcc1b45122ac53765e4f486f45b455f9fdfe9b9739 vim-filesystem-9.1.1169-1.fc40.noarch.rpm +397636b0d14b32dd63a07aa7618d4844db60c02e63b46b1d352875d0d7a0b4b3 vim-common-9.1.1202-1.fc40.x86_64.rpm +86be9c9504795e7eaab2e275eb297aaedf90ea626af859995c511dce3c06624e vim-data-9.1.1202-1.fc40.noarch.rpm +d5a64a210ce25f4c22f987ca95f4dbd580ba5dd665544ef1960675668abee724 vim-enhanced-9.1.1202-1.fc40.x86_64.rpm +79312c8907531326438d3f85f8cfca2e2b2f88ed521bc57828a3db3fc283b59c vim-filesystem-9.1.1202-1.fc40.noarch.rpm 69fd53fe41a8811e904b5429b1934a413d88978ec54d5c9e64370be32cbfc2ef wget2-2.2.0-2.fc40.x86_64.rpm a00cc0a87c60ffbf5495a9796ac7074e6a47e0bebbb8c137d902014cd7ff5a30 wget2-libs-2.2.0-2.fc40.x86_64.rpm 09822d8d386dc81619639415a211b34592b0c5d43f7be288691cc4d933a0542c wget2-wget-2.2.0-2.fc40.x86_64.rpm cf0306ceed1c6b3be39060d85f16b1953b464d3a625488b170d3b7aadf600645 which-2.21-41.fc40.x86_64.rpm 4ede95a2fa3bc0ae617c8bf3a375b800163d58733b4829b15d9f038505d79fee whois-nls-5.5.20-3.fc40.noarch.rpm e2195010e857f56b19246f8b821f9391922880b7691b3728a413f540edc890a6 xkeyboard-config-2.41-1.fc40.noarch.rpm -5eca369115d1e5a898157c269841e1056cbe79ad374ae00e32a10172477b1542 xxd-9.1.1169-1.fc40.x86_64.rpm +cba0417e89e6a56304bf41dd315a518e0fadf0e8f4572b2cf35d5ca621bee847 xxd-9.1.1202-1.fc40.x86_64.rpm ee599a1c4d7ee635e54ec137af4dded83f433b9c8a5976f75ecdcd000b5246e3 xz-5.4.6-3.fc40.x86_64.rpm b92ef78d8ab424c22130e457d0ef691d8197bff61c3b8852205d1b02baba3819 xz-libs-5.4.6-3.fc40.i686.rpm b6ee44b3d7e494b0364f26b7d0b169a8092180af787423cd5e8a47dc0f738a66 xz-libs-5.4.6-3.fc40.x86_64.rpm From 53c3d12feb0c16a572abfebd76083d54b719c17c Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 24 Mar 2025 09:53:07 +0100 Subject: [PATCH 166/311] deps: update golangci/golangci-lint to v1.64.8 (#3704) * deps: update golangci/golangci-lint to v1.64.8 * deps: tidy all modules --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: edgelessci --- bazel/toolchains/ci_deps.bzl | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/bazel/toolchains/ci_deps.bzl b/bazel/toolchains/ci_deps.bzl index 5bb4fb235..be25a162d 100644 --- a/bazel/toolchains/ci_deps.bzl +++ b/bazel/toolchains/ci_deps.bzl @@ -223,45 +223,45 @@ def _golangci_lint_deps(): name = "com_github_golangci_golangci_lint_linux_amd64", build_file = "//bazel/toolchains:BUILD.golangci.bazel", urls = [ - "https://cdn.confidential.cloud/constellation/cas/sha256/71e290acbacb7b3ba4f68f0540fb74dc180c4336ac8a6f3bdcd7fcc48b15148d", - "https://github.com/golangci/golangci-lint/releases/download/v1.64.6/golangci-lint-1.64.6-linux-amd64.tar.gz", + "https://cdn.confidential.cloud/constellation/cas/sha256/b6270687afb143d019f387c791cd2a6f1cb383be9b3124d241ca11bd3ce2e54e", + "https://github.com/golangci/golangci-lint/releases/download/v1.64.8/golangci-lint-1.64.8-linux-amd64.tar.gz", ], - strip_prefix = "golangci-lint-1.64.6-linux-amd64", + strip_prefix = "golangci-lint-1.64.8-linux-amd64", type = "tar.gz", - sha256 = "71e290acbacb7b3ba4f68f0540fb74dc180c4336ac8a6f3bdcd7fcc48b15148d", + sha256 = "b6270687afb143d019f387c791cd2a6f1cb383be9b3124d241ca11bd3ce2e54e", ) http_archive( name = "com_github_golangci_golangci_lint_linux_arm64", build_file = "//bazel/toolchains:BUILD.golangci.bazel", urls = [ - "https://cdn.confidential.cloud/constellation/cas/sha256/99a7ff13dec7a8781a68408b6ecb8a1c5e82786cba3189eaa91d5cdcc24362ce", - "https://github.com/golangci/golangci-lint/releases/download/v1.64.6/golangci-lint-1.64.6-linux-arm64.tar.gz", + "https://cdn.confidential.cloud/constellation/cas/sha256/a6ab58ebcb1c48572622146cdaec2956f56871038a54ed1149f1386e287789a5", + "https://github.com/golangci/golangci-lint/releases/download/v1.64.8/golangci-lint-1.64.8-linux-arm64.tar.gz", ], - strip_prefix = "golangci-lint-1.64.6-linux-arm64", + strip_prefix = "golangci-lint-1.64.8-linux-arm64", type = "tar.gz", - sha256 = "99a7ff13dec7a8781a68408b6ecb8a1c5e82786cba3189eaa91d5cdcc24362ce", + sha256 = "a6ab58ebcb1c48572622146cdaec2956f56871038a54ed1149f1386e287789a5", ) http_archive( name = "com_github_golangci_golangci_lint_darwin_amd64", build_file = "//bazel/toolchains:BUILD.golangci.bazel", urls = [ - "https://cdn.confidential.cloud/constellation/cas/sha256/08f9459e7125fed2612abd71596e04d172695921aff82120d1c1e5e9b6fff2a3", - "https://github.com/golangci/golangci-lint/releases/download/v1.64.6/golangci-lint-1.64.6-darwin-amd64.tar.gz", + "https://cdn.confidential.cloud/constellation/cas/sha256/b52aebb8cb51e00bfd5976099083fbe2c43ef556cef9c87e58a8ae656e740444", + "https://github.com/golangci/golangci-lint/releases/download/v1.64.8/golangci-lint-1.64.8-darwin-amd64.tar.gz", ], - strip_prefix = "golangci-lint-1.64.6-darwin-amd64", + strip_prefix = "golangci-lint-1.64.8-darwin-amd64", type = "tar.gz", - sha256 = "08f9459e7125fed2612abd71596e04d172695921aff82120d1c1e5e9b6fff2a3", + sha256 = "b52aebb8cb51e00bfd5976099083fbe2c43ef556cef9c87e58a8ae656e740444", ) http_archive( name = "com_github_golangci_golangci_lint_darwin_arm64", build_file = "//bazel/toolchains:BUILD.golangci.bazel", urls = [ - "https://cdn.confidential.cloud/constellation/cas/sha256/8c10d0c7c3935b8c2269d628b6a06a8f48d8fb4cc31af02fe4ce0cd18b0704c1", - "https://github.com/golangci/golangci-lint/releases/download/v1.64.6/golangci-lint-1.64.6-darwin-arm64.tar.gz", + "https://cdn.confidential.cloud/constellation/cas/sha256/70543d21e5b02a94079be8aa11267a5b060865583e337fe768d39b5d3e2faf1f", + "https://github.com/golangci/golangci-lint/releases/download/v1.64.8/golangci-lint-1.64.8-darwin-arm64.tar.gz", ], - strip_prefix = "golangci-lint-1.64.6-darwin-arm64", + strip_prefix = "golangci-lint-1.64.8-darwin-arm64", type = "tar.gz", - sha256 = "8c10d0c7c3935b8c2269d628b6a06a8f48d8fb4cc31af02fe4ce0cd18b0704c1", + sha256 = "70543d21e5b02a94079be8aa11267a5b060865583e337fe768d39b5d3e2faf1f", ) def _buf_deps(): From ddff16badb2b13c1de3d4a11a5833342d9aa2530 Mon Sep 17 00:00:00 2001 From: Markus Rudy Date: Mon, 24 Mar 2025 14:23:21 +0100 Subject: [PATCH 167/311] deps: bump github.com/containerd/containerd to v1.7.27 (#3707) --- go.mod | 2 +- go.sum | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 8e6acda8b..1ba8d1d82 100644 --- a/go.mod +++ b/go.mod @@ -197,7 +197,7 @@ require ( github.com/chai2010/gettext-go v1.0.2 // indirect github.com/cloudflare/circl v1.5.0 // indirect github.com/cncf/xds/go v0.0.0-20241223141626-cff3c89139a3 // indirect - github.com/containerd/containerd v1.7.24 // indirect + github.com/containerd/containerd v1.7.27 // indirect github.com/containerd/errdefs v0.3.0 // indirect github.com/containerd/log v0.1.0 // indirect github.com/containerd/platforms v0.2.1 // indirect diff --git a/go.sum b/go.sum index dc385b230..21446a256 100644 --- a/go.sum +++ b/go.sum @@ -222,10 +222,10 @@ github.com/cncf/xds/go v0.0.0-20241223141626-cff3c89139a3 h1:boJj011Hh+874zpIySe github.com/cncf/xds/go v0.0.0-20241223141626-cff3c89139a3/go.mod h1:W+zGtBO5Y1IgJhy4+A9GOqVhqLpfZi+vwmdNXUehLA8= github.com/containerd/cgroups v1.1.0 h1:v8rEWFl6EoqHB+swVNjVoCJE8o3jX7e8nqBGPLaDFBM= github.com/containerd/cgroups v1.1.0/go.mod h1:6ppBcbh/NOOUU+dMKrykgaBnK9lCIBxHqJDGwsa1mIw= -github.com/containerd/containerd v1.7.24 h1:zxszGrGjrra1yYJW/6rhm9cJ1ZQ8rkKBR48brqsa7nA= -github.com/containerd/containerd v1.7.24/go.mod h1:7QUzfURqZWCZV7RLNEn1XjUCQLEf0bkaK4GjUaZehxw= -github.com/containerd/continuity v0.4.2 h1:v3y/4Yz5jwnvqPKJJ+7Wf93fyWoCB3F5EclWG023MDM= -github.com/containerd/continuity v0.4.2/go.mod h1:F6PTNCKepoxEaXLQp3wDAjygEnImnZ/7o4JzpodfroQ= +github.com/containerd/containerd v1.7.27 h1:yFyEyojddO3MIGVER2xJLWoCIn+Up4GaHFquP7hsFII= +github.com/containerd/containerd v1.7.27/go.mod h1:xZmPnl75Vc+BLGt4MIfu6bp+fy03gdHAn9bz+FreFR0= +github.com/containerd/continuity v0.4.4 h1:/fNVfTJ7wIl/YPMHjf+5H32uFhl63JucB34PlCpMKII= +github.com/containerd/continuity v0.4.4/go.mod h1:/lNJvtJKUQStBzpVQ1+rasXO1LAWtUQssk28EZvJ3nE= github.com/containerd/errdefs v0.3.0 h1:FSZgGOeK4yuT/+DnF07/Olde/q4KBoMsaamhXxIMDp4= github.com/containerd/errdefs v0.3.0/go.mod h1:+YBYIdtsnF4Iw6nWZhJcqGSg/dwvV7tyJ/kCkyJ2k+M= github.com/containerd/log v0.1.0 h1:TCJt7ioM2cr/tfR8GPbGf9/VRAX8D2B4PjzCpfX540I= From 41396b21e52959f5d921dca21913943543439fbc Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 24 Mar 2025 14:30:14 +0100 Subject: [PATCH 168/311] deps: update dependency numpy to v2.2.4 (#3708) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/actions/e2e_benchmark/evaluate/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/actions/e2e_benchmark/evaluate/requirements.txt b/.github/actions/e2e_benchmark/evaluate/requirements.txt index ee45b8fbd..22a46ab7f 100644 --- a/.github/actions/e2e_benchmark/evaluate/requirements.txt +++ b/.github/actions/e2e_benchmark/evaluate/requirements.txt @@ -1,3 +1,3 @@ -numpy ==2.2.3 +numpy ==2.2.4 matplotlib ==3.10.1 Pillow ==11.1.0 \ No newline at end of file From 906e93b95c3f8824ed19db3ba1057066243d33d8 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 24 Mar 2025 15:41:05 +0100 Subject: [PATCH 169/311] deps: update dependency rules_pkg to v1.1.0 (#3705) * deps: update dependency rules_pkg to v1.1.0 * deps: tidy all modules --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: edgelessci Co-authored-by: Adrian Stobbe --- MODULE.bazel | 2 +- MODULE.bazel.lock | 6 +++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/MODULE.bazel b/MODULE.bazel index ba8df32e1..1824dcbe2 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -12,7 +12,7 @@ bazel_dep(name = "gazelle", version = "0.42.0") bazel_dep(name = "hermetic_cc_toolchain", version = "3.2.0") bazel_dep(name = "rules_cc", version = "0.1.1") bazel_dep(name = "rules_go", version = "0.53.0", repo_name = "io_bazel_rules_go") -bazel_dep(name = "rules_pkg", version = "1.0.1") +bazel_dep(name = "rules_pkg", version = "1.1.0") bazel_dep(name = "rules_proto", version = "7.1.0") bazel_dep(name = "rules_python", version = "1.2.0") diff --git a/MODULE.bazel.lock b/MODULE.bazel.lock index 4f64aec96..a0c0c0ed6 100644 --- a/MODULE.bazel.lock +++ b/MODULE.bazel.lock @@ -69,6 +69,7 @@ "https://bcr.bazel.build/modules/platforms/0.0.9/MODULE.bazel": "4a87a60c927b56ddd67db50c89acaa62f4ce2a1d2149ccb63ffd871d5ce29ebc", "https://bcr.bazel.build/modules/protobuf/21.7/MODULE.bazel": "a5a29bb89544f9b97edce05642fac225a808b5b7be74038ea3640fae2f8e66a7", "https://bcr.bazel.build/modules/protobuf/27.0/MODULE.bazel": "7873b60be88844a0a1d8f80b9d5d20cfbd8495a689b8763e76c6372998d3f64c", + "https://bcr.bazel.build/modules/protobuf/27.1/MODULE.bazel": "703a7b614728bb06647f965264967a8ef1c39e09e8f167b3ca0bb1fd80449c0d", "https://bcr.bazel.build/modules/protobuf/29.0-rc2/MODULE.bazel": "6241d35983510143049943fc0d57937937122baf1b287862f9dc8590fc4c37df", "https://bcr.bazel.build/modules/protobuf/29.0-rc3/MODULE.bazel": "33c2dfa286578573afc55a7acaea3cada4122b9631007c594bf0729f41c8de92", "https://bcr.bazel.build/modules/protobuf/29.1/MODULE.bazel": "557c3457560ff49e122ed76c0bc3397a64af9574691cb8201b4e46d4ab2ecb95", @@ -127,11 +128,13 @@ "https://bcr.bazel.build/modules/rules_license/1.0.0/source.json": "a52c89e54cc311196e478f8382df91c15f7a2bfdf4c6cd0e2675cc2ff0b56efb", "https://bcr.bazel.build/modules/rules_pkg/0.7.0/MODULE.bazel": "df99f03fc7934a4737122518bb87e667e62d780b610910f0447665a7e2be62dc", "https://bcr.bazel.build/modules/rules_pkg/1.0.1/MODULE.bazel": "5b1df97dbc29623bccdf2b0dcd0f5cb08e2f2c9050aab1092fd39a41e82686ff", - "https://bcr.bazel.build/modules/rules_pkg/1.0.1/source.json": "bd82e5d7b9ce2d31e380dd9f50c111d678c3bdaca190cb76b0e1c71b05e1ba8a", + "https://bcr.bazel.build/modules/rules_pkg/1.1.0/MODULE.bazel": "9db8031e71b6ef32d1846106e10dd0ee2deac042bd9a2de22b4761b0c3036453", + "https://bcr.bazel.build/modules/rules_pkg/1.1.0/source.json": "fef768df13a92ce6067e1cd0cdc47560dace01354f1d921cfb1d632511f7d608", "https://bcr.bazel.build/modules/rules_proto/4.0.0/MODULE.bazel": "a7a7b6ce9bee418c1a760b3d84f83a299ad6952f9903c67f19e4edd964894e06", "https://bcr.bazel.build/modules/rules_proto/5.3.0-21.7/MODULE.bazel": "e8dff86b0971688790ae75528fe1813f71809b5afd57facb44dad9e8eca631b7", "https://bcr.bazel.build/modules/rules_proto/6.0.0/MODULE.bazel": "b531d7f09f58dce456cd61b4579ce8c86b38544da75184eadaf0a7cb7966453f", "https://bcr.bazel.build/modules/rules_proto/6.0.2/MODULE.bazel": "ce916b775a62b90b61888052a416ccdda405212b6aaeb39522f7dc53431a5e73", + "https://bcr.bazel.build/modules/rules_proto/7.0.2/MODULE.bazel": "bf81793bd6d2ad89a37a40693e56c61b0ee30f7a7fdbaf3eabbf5f39de47dea2", "https://bcr.bazel.build/modules/rules_proto/7.1.0/MODULE.bazel": "002d62d9108f75bb807cd56245d45648f38275cb3a99dcd45dfb864c5d74cb96", "https://bcr.bazel.build/modules/rules_proto/7.1.0/source.json": "39f89066c12c24097854e8f57ab8558929f9c8d474d34b2c00ac04630ad8940e", "https://bcr.bazel.build/modules/rules_python/0.10.2/MODULE.bazel": "cc82bc96f2997baa545ab3ce73f196d040ffb8756fd2d66125a530031cd90e5f", @@ -141,6 +144,7 @@ "https://bcr.bazel.build/modules/rules_python/0.28.0/MODULE.bazel": "cba2573d870babc976664a912539b320cbaa7114cd3e8f053c720171cde331ed", "https://bcr.bazel.build/modules/rules_python/0.31.0/MODULE.bazel": "93a43dc47ee570e6ec9f5779b2e64c1476a6ce921c48cc9a1678a91dd5f8fd58", "https://bcr.bazel.build/modules/rules_python/0.4.0/MODULE.bazel": "9208ee05fd48bf09ac60ed269791cf17fb343db56c8226a720fbb1cdf467166c", + "https://bcr.bazel.build/modules/rules_python/1.0.0/MODULE.bazel": "898a3d999c22caa585eb062b600f88654bf92efb204fa346fb55f6f8edffca43", "https://bcr.bazel.build/modules/rules_python/1.2.0/MODULE.bazel": "5aeeb48b2a6c19d668b48adf2b8a2b209a6310c230db0ce77450f148a89846e4", "https://bcr.bazel.build/modules/rules_python/1.2.0/source.json": "5b7892685c9a843526fd5a31e7d7a93eb819c59fd7b7fc444b5b143558e1b073", "https://bcr.bazel.build/modules/rules_shell/0.2.0/MODULE.bazel": "fda8a652ab3c7d8fee214de05e7a9916d8b28082234e8d2c0094505c5268ed3c", From 4a9d265579404a64d10027f88c732a149beb2f36 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 24 Mar 2025 17:46:41 +0100 Subject: [PATCH 170/311] deps: update public.ecr.aws/eks/aws-load-balancer-controller Docker tag to v2.12.0 (#3706) * deps: update public.ecr.aws/eks/aws-load-balancer-controller Docker tag to v2.12.0 * deps: tidy all modules * deps: make renovate ignore generated AWS LB chart --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: edgelessci Co-authored-by: Markus Rudy --- renovate.json5 | 1 + 1 file changed, 1 insertion(+) diff --git a/renovate.json5 b/renovate.json5 index bd4c85d7c..6617bafc6 100644 --- a/renovate.json5 +++ b/renovate.json5 @@ -19,6 +19,7 @@ ], prConcurrentLimit: 4, ignorePaths: [ + 'internal/constellation/helm/charts/aws-load-balancer-controller/**', 'internal/constellation/helm/charts/cilium/**', 'internal/constellation/helm/charts/coredns/**', 'internal/constellation/helm/charts/edgeless/csi/charts/aws-csi-driver/**', From ec46c97d4ce51ddd9ea725c28af82ac6f8aeb8cd Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 25 Mar 2025 11:30:13 +0100 Subject: [PATCH 171/311] deps: update golangci/golangci-lint to v2 (major) (#3709) * deps: update golangci/golangci-lint to v2 * deps: tidy all modules * ci: migrate golangci-lint config to v2 --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: edgelessci Co-authored-by: Markus Rudy --- .golangci.yml | 74 +++++++++++++++++++++--------------- bazel/toolchains/ci_deps.bzl | 32 ++++++++-------- 2 files changed, 59 insertions(+), 47 deletions(-) diff --git a/.golangci.yml b/.golangci.yml index c3a46a296..2e5cd2d5c 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -1,53 +1,65 @@ +version: "2" run: - timeout: 10m build-tags: - integration - e2e modules-download-mode: readonly - output: formats: - - format: tab + tab: path: stdout - sort-results: true - + colors: false linters: enable: - # Default linters - - errcheck - - gosimple - - govet - - ineffassign - - staticcheck - - typecheck - - unused - # Additional linters - bodyclose - - errname - copyloopvar + - errname - godot - - gofmt - - gofumpt - misspell - noctx - revive - - usetesting - unconvert - unparam + - usetesting + settings: + errcheck: + exclude-functions: + - (*go.uber.org/zap.Logger).Sync + - (*google.golang.org/grpc.Server).Serve + exclusions: + generated: lax + presets: + - common-false-positives + - legacy + - std-error-handling + paths: + - 3rdparty/node-maintenance-operator + rules: + # TODO(burgerdev): these exclusions have been added to ease migration to v2 and should eventually be addressed. + - linters: ["staticcheck"] + text: "QF1008: could remove embedded field" + - linters: ["staticcheck"] + text: "QF1001: could apply De Morgan's law" + - linters: ["staticcheck"] + text: "ST1005: error strings should not be capitalized" + - linters: ["revive"] + text: "package-comments: package comment should be of the form" + - linters: ["revive"] + text: "package-comments: should have a package comment" + - linters: ["staticcheck"] + text: "QF1012: Use fmt.Fprintf" + - linters: ["staticcheck"] + text: "ST1019" + issues: max-issues-per-linter: 0 max-same-issues: 20 - exclude-dirs: - - 3rdparty/node-maintenance-operator - include: - - EXC0012 - - EXC0014 - -linters-settings: - errcheck: - # List of functions to exclude from checking, where each entry is a single function to exclude. - # See https://github.com/kisielk/errcheck#excluding-functions for details. - exclude-functions: - - (*go.uber.org/zap.Logger).Sync - - (*google.golang.org/grpc.Server).Serve +formatters: + enable: + - gofmt + - gofumpt + exclusions: + generated: lax + paths: + - 3rdparty/node-maintenance-operator diff --git a/bazel/toolchains/ci_deps.bzl b/bazel/toolchains/ci_deps.bzl index be25a162d..efb8eaac2 100644 --- a/bazel/toolchains/ci_deps.bzl +++ b/bazel/toolchains/ci_deps.bzl @@ -223,45 +223,45 @@ def _golangci_lint_deps(): name = "com_github_golangci_golangci_lint_linux_amd64", build_file = "//bazel/toolchains:BUILD.golangci.bazel", urls = [ - "https://cdn.confidential.cloud/constellation/cas/sha256/b6270687afb143d019f387c791cd2a6f1cb383be9b3124d241ca11bd3ce2e54e", - "https://github.com/golangci/golangci-lint/releases/download/v1.64.8/golangci-lint-1.64.8-linux-amd64.tar.gz", + "https://cdn.confidential.cloud/constellation/cas/sha256/50ebc01988429e07d29a556417aaf1ef4df441a7e88645617cf5db3033c0e37b", + "https://github.com/golangci/golangci-lint/releases/download/v2.0.0/golangci-lint-2.0.0-linux-amd64.tar.gz", ], - strip_prefix = "golangci-lint-1.64.8-linux-amd64", + strip_prefix = "golangci-lint-2.0.0-linux-amd64", type = "tar.gz", - sha256 = "b6270687afb143d019f387c791cd2a6f1cb383be9b3124d241ca11bd3ce2e54e", + sha256 = "50ebc01988429e07d29a556417aaf1ef4df441a7e88645617cf5db3033c0e37b", ) http_archive( name = "com_github_golangci_golangci_lint_linux_arm64", build_file = "//bazel/toolchains:BUILD.golangci.bazel", urls = [ - "https://cdn.confidential.cloud/constellation/cas/sha256/a6ab58ebcb1c48572622146cdaec2956f56871038a54ed1149f1386e287789a5", - "https://github.com/golangci/golangci-lint/releases/download/v1.64.8/golangci-lint-1.64.8-linux-arm64.tar.gz", + "https://cdn.confidential.cloud/constellation/cas/sha256/00cd307e8cb20001cf0655b5a723dd678eb2b578151afab798312cd4a5f5eae1", + "https://github.com/golangci/golangci-lint/releases/download/v2.0.0/golangci-lint-2.0.0-linux-arm64.tar.gz", ], - strip_prefix = "golangci-lint-1.64.8-linux-arm64", + strip_prefix = "golangci-lint-2.0.0-linux-arm64", type = "tar.gz", - sha256 = "a6ab58ebcb1c48572622146cdaec2956f56871038a54ed1149f1386e287789a5", + sha256 = "00cd307e8cb20001cf0655b5a723dd678eb2b578151afab798312cd4a5f5eae1", ) http_archive( name = "com_github_golangci_golangci_lint_darwin_amd64", build_file = "//bazel/toolchains:BUILD.golangci.bazel", urls = [ - "https://cdn.confidential.cloud/constellation/cas/sha256/b52aebb8cb51e00bfd5976099083fbe2c43ef556cef9c87e58a8ae656e740444", - "https://github.com/golangci/golangci-lint/releases/download/v1.64.8/golangci-lint-1.64.8-darwin-amd64.tar.gz", + "https://cdn.confidential.cloud/constellation/cas/sha256/07f81ff3c7a5078a36ac90e49c0dc8629625aa53efbdb463517e5f5929113e76", + "https://github.com/golangci/golangci-lint/releases/download/v2.0.0/golangci-lint-2.0.0-darwin-amd64.tar.gz", ], - strip_prefix = "golangci-lint-1.64.8-darwin-amd64", + strip_prefix = "golangci-lint-2.0.0-darwin-amd64", type = "tar.gz", - sha256 = "b52aebb8cb51e00bfd5976099083fbe2c43ef556cef9c87e58a8ae656e740444", + sha256 = "07f81ff3c7a5078a36ac90e49c0dc8629625aa53efbdb463517e5f5929113e76", ) http_archive( name = "com_github_golangci_golangci_lint_darwin_arm64", build_file = "//bazel/toolchains:BUILD.golangci.bazel", urls = [ - "https://cdn.confidential.cloud/constellation/cas/sha256/70543d21e5b02a94079be8aa11267a5b060865583e337fe768d39b5d3e2faf1f", - "https://github.com/golangci/golangci-lint/releases/download/v1.64.8/golangci-lint-1.64.8-darwin-arm64.tar.gz", + "https://cdn.confidential.cloud/constellation/cas/sha256/ee63f34045256370db6880500fe4f2904bb004e1a2591b09feb28642997d29d8", + "https://github.com/golangci/golangci-lint/releases/download/v2.0.0/golangci-lint-2.0.0-darwin-arm64.tar.gz", ], - strip_prefix = "golangci-lint-1.64.8-darwin-arm64", + strip_prefix = "golangci-lint-2.0.0-darwin-arm64", type = "tar.gz", - sha256 = "70543d21e5b02a94079be8aa11267a5b060865583e337fe768d39b5d3e2faf1f", + sha256 = "ee63f34045256370db6880500fe4f2904bb004e1a2591b09feb28642997d29d8", ) def _buf_deps(): From c7369fa2a745b8f67a594883eb0f30453c9dfb47 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 25 Mar 2025 11:59:07 +0100 Subject: [PATCH 172/311] deps: update GitHub action dependencies (#3711) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/actions/artifact_download/action.yml | 2 +- .github/actions/artifact_upload/action.yml | 2 +- .github/actions/build_cli/action.yml | 2 +- .../actions/build_micro_service/action.yml | 4 +-- .github/actions/cdbg_deploy/action.yml | 4 +-- .../actions/constellation_destroy/action.yml | 2 +- .../constellation_iam_destroy/action.yml | 2 +- .../container_registry_login/action.yml | 2 +- .github/actions/container_sbom/action.yml | 2 +- .../actions/deploy_logcollection/action.yml | 2 +- .../download_release_binaries/action.yml | 20 ++++++------- .../e2e_attestationconfigapi/action.yml | 2 +- .github/actions/e2e_benchmark/action.yml | 4 +-- .../actions/e2e_cleanup_timeframe/action.yml | 2 +- .github/actions/e2e_sonobuoy/action.yml | 2 +- .github/actions/e2e_test/action.yml | 4 +-- .github/actions/e2e_verify/action.yml | 2 +- .github/actions/find_latest_image/action.yml | 2 +- .github/actions/publish_helmchart/action.yml | 2 +- .github/actions/select_image/action.yml | 2 +- .../upload_terraform_module/action.yml | 2 +- .../workflows/aws-snp-launchmeasurement.yml | 2 +- .github/workflows/build-ccm-gcp.yml | 8 +++--- .github/workflows/build-gcp-guest-agent.yml | 4 +-- .../workflows/build-os-image-scheduled.yml | 6 ++-- .github/workflows/build-os-image.yml | 2 +- .github/workflows/check-links.yml | 2 +- .github/workflows/codeql.yml | 8 +++--- .github/workflows/draft-release.yml | 28 +++++++++---------- .../workflows/e2e-test-provider-example.yml | 2 +- .github/workflows/e2e-upgrade.yml | 10 +++---- .github/workflows/e2e-windows.yml | 4 +-- .github/workflows/on-release.yml | 2 +- .github/workflows/purge-main.yml | 2 +- .github/workflows/release.yml | 6 ++-- .github/workflows/reproducible-builds.yml | 12 ++++---- .github/workflows/scorecard.yml | 6 ++-- .github/workflows/sync-terraform-docs.yml | 2 +- .github/workflows/test-operator-codegen.yml | 4 +-- .github/workflows/test-tidy.yml | 2 +- .github/workflows/test-unittest.yml | 2 +- .github/workflows/update-rpms.yml | 4 +-- .github/workflows/versionsapi.yml | 6 ++-- 43 files changed, 96 insertions(+), 96 deletions(-) diff --git a/.github/actions/artifact_download/action.yml b/.github/actions/artifact_download/action.yml index 148adc258..82cb6c0af 100644 --- a/.github/actions/artifact_download/action.yml +++ b/.github/actions/artifact_download/action.yml @@ -28,7 +28,7 @@ runs: run: echo "directory=$(mktemp -d)" >> "$GITHUB_OUTPUT" - name: Download the artifact - uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8 + uses: actions/download-artifact@95815c38cf2ff2164869cbab79da8d1f422bc89e # v4.2.1 with: name: ${{ inputs.name }} path: ${{ steps.tempdir.outputs.directory }} diff --git a/.github/actions/artifact_upload/action.yml b/.github/actions/artifact_upload/action.yml index 76d7c1f03..2ef3e85a8 100644 --- a/.github/actions/artifact_upload/action.yml +++ b/.github/actions/artifact_upload/action.yml @@ -69,7 +69,7 @@ runs: done - name: Upload archive as artifact - uses: actions/upload-artifact@65c4c4a1ddee5b72f698fdd19549f0f0fb45cf08 # v4.6.0 + uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 with: name: ${{ inputs.name }} path: ${{ steps.tempdir.outputs.directory }}/archive.7z diff --git a/.github/actions/build_cli/action.yml b/.github/actions/build_cli/action.yml index 87fd1d055..3aff97fde 100644 --- a/.github/actions/build_cli/action.yml +++ b/.github/actions/build_cli/action.yml @@ -79,7 +79,7 @@ runs: # once it has the functionality - name: Install Cosign if: inputs.cosignPublicKey != '' && inputs.cosignPrivateKey != '' && inputs.cosignPassword != '' - uses: sigstore/cosign-installer@dc72c7d5c4d10cd6bcb8cf6e3fd625a9e5e537da # v3.7.0 + uses: sigstore/cosign-installer@d7d6bc7722e3daa8354c50bcb52f4837da5e9b6a # v3.8.1 - name: Install Rekor if: inputs.cosignPublicKey != '' && inputs.cosignPrivateKey != '' && inputs.cosignPassword != '' diff --git a/.github/actions/build_micro_service/action.yml b/.github/actions/build_micro_service/action.yml index 9ab77067e..acd4026be 100644 --- a/.github/actions/build_micro_service/action.yml +++ b/.github/actions/build_micro_service/action.yml @@ -42,7 +42,7 @@ runs: - name: Docker metadata id: meta - uses: docker/metadata-action@369eb591f429131d6889c46b94e711f089e6ca96 # v5.6.1 + uses: docker/metadata-action@902fa8ec7d6ecbf8d84d538b9b233a880e428804 # v5.7.0 with: images: | ghcr.io/${{ github.repository }}/${{ inputs.name }} @@ -62,7 +62,7 @@ runs: - name: Build and push container image id: build-micro-service - uses: docker/build-push-action@ca877d9245402d1537745e0e356eab47c3520991 # v6.13.0 + uses: docker/build-push-action@471d1dc4e07e5cdedd4c2171150001c434f0b7a4 # v6.15.0 with: context: . file: ${{ inputs.dockerfile }} diff --git a/.github/actions/cdbg_deploy/action.yml b/.github/actions/cdbg_deploy/action.yml index decf419fc..e9169d802 100644 --- a/.github/actions/cdbg_deploy/action.yml +++ b/.github/actions/cdbg_deploy/action.yml @@ -61,7 +61,7 @@ runs: - name: Login to AWS (IAM service principal) if: inputs.cloudProvider == 'aws' - uses: aws-actions/configure-aws-credentials@4fc4975a852c8cd99761e2de1f4ba73402e44dd9 # v4.0.3 + uses: aws-actions/configure-aws-credentials@ececac1a45f3b08a01d2dd070d28d111c5fe6722 # v4.1.0 with: role-to-assume: arn:aws:iam::795746500882:role/GithubActionsE2EIAM aws-region: eu-central-1 @@ -80,7 +80,7 @@ runs: - name: Login to AWS (Cluster service principal) if: inputs.cloudProvider == 'aws' - uses: aws-actions/configure-aws-credentials@4fc4975a852c8cd99761e2de1f4ba73402e44dd9 # v4.0.3 + uses: aws-actions/configure-aws-credentials@ececac1a45f3b08a01d2dd070d28d111c5fe6722 # v4.1.0 with: role-to-assume: arn:aws:iam::795746500882:role/GithubActionsE2ECluster aws-region: eu-central-1 diff --git a/.github/actions/constellation_destroy/action.yml b/.github/actions/constellation_destroy/action.yml index 7d38d1bb5..dd31e99b6 100644 --- a/.github/actions/constellation_destroy/action.yml +++ b/.github/actions/constellation_destroy/action.yml @@ -67,7 +67,7 @@ runs: - name: Login to AWS (Cluster role) if: inputs.cloudProvider == 'aws' - uses: aws-actions/configure-aws-credentials@4fc4975a852c8cd99761e2de1f4ba73402e44dd9 # v4.0.3 + uses: aws-actions/configure-aws-credentials@ececac1a45f3b08a01d2dd070d28d111c5fe6722 # v4.1.0 with: role-to-assume: arn:aws:iam::795746500882:role/GithubActionsE2ECluster aws-region: eu-central-1 diff --git a/.github/actions/constellation_iam_destroy/action.yml b/.github/actions/constellation_iam_destroy/action.yml index b5fa0083e..bebb77a2b 100644 --- a/.github/actions/constellation_iam_destroy/action.yml +++ b/.github/actions/constellation_iam_destroy/action.yml @@ -23,7 +23,7 @@ runs: - name: Login to AWS (IAM role) if: inputs.cloudProvider == 'aws' - uses: aws-actions/configure-aws-credentials@4fc4975a852c8cd99761e2de1f4ba73402e44dd9 # v4.0.3 + uses: aws-actions/configure-aws-credentials@ececac1a45f3b08a01d2dd070d28d111c5fe6722 # v4.1.0 with: role-to-assume: arn:aws:iam::795746500882:role/GithubActionsE2EIAM aws-region: eu-central-1 diff --git a/.github/actions/container_registry_login/action.yml b/.github/actions/container_registry_login/action.yml index 1c0e5d50f..929af6361 100644 --- a/.github/actions/container_registry_login/action.yml +++ b/.github/actions/container_registry_login/action.yml @@ -17,7 +17,7 @@ runs: steps: - name: Use docker for logging in if: runner.os != 'macOS' - uses: docker/login-action@9780b0c442fbb1117ed29e0efdff1e18412f7567 # v3.3.0 + uses: docker/login-action@74a5d142397b4f367a81961eba4e8cd7edddf772 # v3.4.0 with: registry: ${{ inputs.registry }} username: ${{ inputs.username }} diff --git a/.github/actions/container_sbom/action.yml b/.github/actions/container_sbom/action.yml index a100f3f6e..193db69a4 100644 --- a/.github/actions/container_sbom/action.yml +++ b/.github/actions/container_sbom/action.yml @@ -19,7 +19,7 @@ runs: steps: - name: Install Cosign if: inputs.cosignPublicKey != '' && inputs.cosignPrivateKey != '' && inputs.cosignPassword != '' - uses: sigstore/cosign-installer@dc72c7d5c4d10cd6bcb8cf6e3fd625a9e5e537da # v3.7.0 + uses: sigstore/cosign-installer@d7d6bc7722e3daa8354c50bcb52f4837da5e9b6a # v3.8.1 - name: Download Syft & Grype uses: ./.github/actions/install_syft_grype diff --git a/.github/actions/deploy_logcollection/action.yml b/.github/actions/deploy_logcollection/action.yml index 294367dbf..78abb5146 100644 --- a/.github/actions/deploy_logcollection/action.yml +++ b/.github/actions/deploy_logcollection/action.yml @@ -67,7 +67,7 @@ runs: # Make sure that helm is installed # This is not always the case, e.g. on MacOS runners - name: Install Helm - uses: azure/setup-helm@fe7b79cd5ee1e45176fcad797de68ecaf3ca4814 # v4.2.0 + uses: azure/setup-helm@b9e51907a09c216f16ebe8536097933489208112 # v4.3.0 with: version: v3.9.0 diff --git a/.github/actions/download_release_binaries/action.yml b/.github/actions/download_release_binaries/action.yml index a336a5e43..a0dc54668 100644 --- a/.github/actions/download_release_binaries/action.yml +++ b/.github/actions/download_release_binaries/action.yml @@ -5,51 +5,51 @@ runs: using: "composite" steps: - name: Download CLI binaries darwin-amd64 - uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8 + uses: actions/download-artifact@95815c38cf2ff2164869cbab79da8d1f422bc89e # v4.2.1 with: name: constellation-darwin-amd64 - name: Download CLI binaries darwin-arm64 - uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8 + uses: actions/download-artifact@95815c38cf2ff2164869cbab79da8d1f422bc89e # v4.2.1 with: name: constellation-darwin-arm64 - name: Download CLI binaries linux-amd64 - uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8 + uses: actions/download-artifact@95815c38cf2ff2164869cbab79da8d1f422bc89e # v4.2.1 with: name: constellation-linux-amd64 - name: Download CLI binaries linux-arm64 - uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8 + uses: actions/download-artifact@95815c38cf2ff2164869cbab79da8d1f422bc89e # v4.2.1 with: name: constellation-linux-arm64 - name: Download CLI binaries windows-amd64 - uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8 + uses: actions/download-artifact@95815c38cf2ff2164869cbab79da8d1f422bc89e # v4.2.1 with: name: constellation-windows-amd64 - name: Download Terraform module - uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8 + uses: actions/download-artifact@95815c38cf2ff2164869cbab79da8d1f422bc89e # v4.2.1 with: name: terraform-module - name: Download Terraform provider binary darwin-amd64 - uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8 + uses: actions/download-artifact@95815c38cf2ff2164869cbab79da8d1f422bc89e # v4.2.1 with: name: terraform-provider-constellation-darwin-amd64 - name: Download Terraform provider binary darwin-arm64 - uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8 + uses: actions/download-artifact@95815c38cf2ff2164869cbab79da8d1f422bc89e # v4.2.1 with: name: terraform-provider-constellation-darwin-arm64 - name: Download Terraform provider binary linux-amd64 - uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8 + uses: actions/download-artifact@95815c38cf2ff2164869cbab79da8d1f422bc89e # v4.2.1 with: name: terraform-provider-constellation-linux-amd64 - name: Download Terraform provider binary linux-arm64 - uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8 + uses: actions/download-artifact@95815c38cf2ff2164869cbab79da8d1f422bc89e # v4.2.1 with: name: terraform-provider-constellation-linux-arm64 diff --git a/.github/actions/e2e_attestationconfigapi/action.yml b/.github/actions/e2e_attestationconfigapi/action.yml index c3c49deaa..91537cc8d 100644 --- a/.github/actions/e2e_attestationconfigapi/action.yml +++ b/.github/actions/e2e_attestationconfigapi/action.yml @@ -19,7 +19,7 @@ runs: uses: ./.github/actions/setup_bazel_nix - name: Login to AWS - uses: aws-actions/configure-aws-credentials@4fc4975a852c8cd99761e2de1f4ba73402e44dd9 # v4.0.3 + uses: aws-actions/configure-aws-credentials@ececac1a45f3b08a01d2dd070d28d111c5fe6722 # v4.1.0 with: role-to-assume: arn:aws:iam::795746500882:role/GithubTestResourceAPI aws-region: eu-west-1 diff --git a/.github/actions/e2e_benchmark/action.yml b/.github/actions/e2e_benchmark/action.yml index 205c93c7c..4565e30bb 100644 --- a/.github/actions/e2e_benchmark/action.yml +++ b/.github/actions/e2e_benchmark/action.yml @@ -32,7 +32,7 @@ runs: steps: - name: Setup python - uses: actions/setup-python@42375524e23c412d93fb67b49958b491fce71c38 # v5.4.0 + uses: actions/setup-python@8d9ed9ac5c53483de85588cdf95a591a75ab9f55 # v5.5.0 with: python-version: "3.10" @@ -166,7 +166,7 @@ runs: encryptionSecret: ${{ inputs.encryptionSecret }} - name: Assume AWS role to retrieve and update benchmarks in S3 - uses: aws-actions/configure-aws-credentials@4fc4975a852c8cd99761e2de1f4ba73402e44dd9 # v4.0.3 + uses: aws-actions/configure-aws-credentials@ececac1a45f3b08a01d2dd070d28d111c5fe6722 # v4.1.0 with: role-to-assume: arn:aws:iam::795746500882:role/GithubActionUpdateBenchmarks aws-region: us-east-2 diff --git a/.github/actions/e2e_cleanup_timeframe/action.yml b/.github/actions/e2e_cleanup_timeframe/action.yml index fdf2d4db9..dba809fc2 100644 --- a/.github/actions/e2e_cleanup_timeframe/action.yml +++ b/.github/actions/e2e_cleanup_timeframe/action.yml @@ -22,7 +22,7 @@ runs: using: "composite" steps: - name: Authenticate AWS - uses: aws-actions/configure-aws-credentials@4fc4975a852c8cd99761e2de1f4ba73402e44dd9 # v4.0.3 + uses: aws-actions/configure-aws-credentials@ececac1a45f3b08a01d2dd070d28d111c5fe6722 # v4.1.0 with: role-to-assume: arn:aws:iam::795746500882:role/GithubActionsE2EDestroy aws-region: eu-central-1 diff --git a/.github/actions/e2e_sonobuoy/action.yml b/.github/actions/e2e_sonobuoy/action.yml index 1f1d2dec7..d33f02059 100644 --- a/.github/actions/e2e_sonobuoy/action.yml +++ b/.github/actions/e2e_sonobuoy/action.yml @@ -70,7 +70,7 @@ runs: - name: Publish test results if: (!env.ACT) && contains(inputs.sonobuoyTestSuiteCmd, '--plugin e2e') - uses: mikepenz/action-junit-report@ee6b445351cd81e2f73a16a0e52d598aeac2197f # v5.3.0 + uses: mikepenz/action-junit-report@97744eca465b8df9e6e33271cb155003f85327f1 # v5.5.0 with: report_paths: "**/junit_01.xml" fail_on_failure: true diff --git a/.github/actions/e2e_test/action.yml b/.github/actions/e2e_test/action.yml index 505e61d4c..447ac2b72 100644 --- a/.github/actions/e2e_test/action.yml +++ b/.github/actions/e2e_test/action.yml @@ -225,7 +225,7 @@ runs: - name: Login to AWS (IAM role) if: inputs.cloudProvider == 'aws' - uses: aws-actions/configure-aws-credentials@4fc4975a852c8cd99761e2de1f4ba73402e44dd9 # v4.0.3 + uses: aws-actions/configure-aws-credentials@ececac1a45f3b08a01d2dd070d28d111c5fe6722 # v4.1.0 with: role-to-assume: arn:aws:iam::795746500882:role/GithubActionsE2EIAM aws-region: eu-central-1 @@ -290,7 +290,7 @@ runs: - name: Login to AWS (Cluster role) if: inputs.cloudProvider == 'aws' - uses: aws-actions/configure-aws-credentials@4fc4975a852c8cd99761e2de1f4ba73402e44dd9 # v4.0.3 + uses: aws-actions/configure-aws-credentials@ececac1a45f3b08a01d2dd070d28d111c5fe6722 # v4.1.0 with: role-to-assume: arn:aws:iam::795746500882:role/GithubActionsE2ECluster aws-region: eu-central-1 diff --git a/.github/actions/e2e_verify/action.yml b/.github/actions/e2e_verify/action.yml index e64c04bab..54ed1ebeb 100644 --- a/.github/actions/e2e_verify/action.yml +++ b/.github/actions/e2e_verify/action.yml @@ -82,7 +82,7 @@ runs: - name: Login to AWS if: github.ref_name == 'main' - uses: aws-actions/configure-aws-credentials@4fc4975a852c8cd99761e2de1f4ba73402e44dd9 # v4.0.3 + uses: aws-actions/configure-aws-credentials@ececac1a45f3b08a01d2dd070d28d111c5fe6722 # v4.1.0 with: role-to-assume: arn:aws:iam::795746500882:role/GitHubConstellationImagePipeline aws-region: eu-central-1 diff --git a/.github/actions/find_latest_image/action.yml b/.github/actions/find_latest_image/action.yml index fc70e207c..8dabff672 100644 --- a/.github/actions/find_latest_image/action.yml +++ b/.github/actions/find_latest_image/action.yml @@ -38,7 +38,7 @@ runs: - name: Login to AWS if: inputs.imageVersion == '' - uses: aws-actions/configure-aws-credentials@4fc4975a852c8cd99761e2de1f4ba73402e44dd9 # v4.0.3 + uses: aws-actions/configure-aws-credentials@ececac1a45f3b08a01d2dd070d28d111c5fe6722 # v4.1.0 with: role-to-assume: arn:aws:iam::795746500882:role/GithubConstellationVersionsAPIRead aws-region: eu-central-1 diff --git a/.github/actions/publish_helmchart/action.yml b/.github/actions/publish_helmchart/action.yml index 3cf193e3d..3c26fbad7 100644 --- a/.github/actions/publish_helmchart/action.yml +++ b/.github/actions/publish_helmchart/action.yml @@ -29,7 +29,7 @@ runs: echo version=$(yq eval ".version" ${{ inputs.chartPath }}/Chart.yaml) | tee -a $GITHUB_OUTPUT - name: Create pull request - uses: peter-evans/create-pull-request@67ccf781d68cd99b580ae25a5c18a1cc84ffff1f # v7.0.6 + uses: peter-evans/create-pull-request@271a8d0340265f705b14b6d32b9829c1cb33d45e # v7.0.8 with: path: helm branch: "release/s3proxy/${{ steps.update-chart-version.outputs.version }}" diff --git a/.github/actions/select_image/action.yml b/.github/actions/select_image/action.yml index 541e9d152..66ae26207 100644 --- a/.github/actions/select_image/action.yml +++ b/.github/actions/select_image/action.yml @@ -18,7 +18,7 @@ runs: using: "composite" steps: - name: Login to AWS - uses: aws-actions/configure-aws-credentials@4fc4975a852c8cd99761e2de1f4ba73402e44dd9 # v4.0.3 + uses: aws-actions/configure-aws-credentials@ececac1a45f3b08a01d2dd070d28d111c5fe6722 # v4.1.0 with: role-to-assume: arn:aws:iam::795746500882:role/GithubConstellationVersionsAPIRead aws-region: eu-central-1 diff --git a/.github/actions/upload_terraform_module/action.yml b/.github/actions/upload_terraform_module/action.yml index 90a067ae2..140844fdd 100644 --- a/.github/actions/upload_terraform_module/action.yml +++ b/.github/actions/upload_terraform_module/action.yml @@ -15,7 +15,7 @@ runs: zip -r terraform-module.zip terraform-module - name: Upload artifact - uses: actions/upload-artifact@65c4c4a1ddee5b72f698fdd19549f0f0fb45cf08 # v4.6.0 + uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 with: name: terraform-module path: terraform-module.zip diff --git a/.github/workflows/aws-snp-launchmeasurement.yml b/.github/workflows/aws-snp-launchmeasurement.yml index 1c2c981a2..5f923de2f 100644 --- a/.github/workflows/aws-snp-launchmeasurement.yml +++ b/.github/workflows/aws-snp-launchmeasurement.yml @@ -21,7 +21,7 @@ jobs: - name: Download Firmware release id: download-firmware - uses: robinraju/release-downloader@a96f54c1b5f5e09e47d9504526e96febd949d4c2 # v1.11 + uses: robinraju/release-downloader@daf26c55d821e836577a15f77d86ddc078948b05 # v1.12 with: repository: aws/uefi latest: true diff --git a/.github/workflows/build-ccm-gcp.yml b/.github/workflows/build-ccm-gcp.yml index 699e94c37..4c913407e 100644 --- a/.github/workflows/build-ccm-gcp.yml +++ b/.github/workflows/build-ccm-gcp.yml @@ -29,9 +29,9 @@ jobs: fetch-depth: 0 - name: Setup Go environment - uses: actions/setup-go@f111f3307d8850f501ac008e886eec1fd1932a34 # v5.3.0 + uses: actions/setup-go@0aaccfd150d50ccaeb58ebd88d36e91967a5f35b # v5.4.0 with: - go-version: "1.23.6" + go-version: "1.24.1" cache: false - name: Install Crane @@ -76,7 +76,7 @@ jobs: - name: Docker meta id: meta - uses: docker/metadata-action@369eb591f429131d6889c46b94e711f089e6ca96 # v5.6.1 + uses: docker/metadata-action@902fa8ec7d6ecbf8d84d538b9b233a880e428804 # v5.7.0 with: images: | ghcr.io/edgelesssys/cloud-provider-gcp @@ -113,7 +113,7 @@ jobs: - name: Build and push container image id: build - uses: docker/build-push-action@ca877d9245402d1537745e0e356eab47c3520991 # v6.13.0 + uses: docker/build-push-action@471d1dc4e07e5cdedd4c2171150001c434f0b7a4 # v6.15.0 with: context: ./cloud-provider-gcp push: ${{ github.ref_name == 'main' }} diff --git a/.github/workflows/build-gcp-guest-agent.yml b/.github/workflows/build-gcp-guest-agent.yml index 280202889..b3682aa3e 100644 --- a/.github/workflows/build-gcp-guest-agent.yml +++ b/.github/workflows/build-gcp-guest-agent.yml @@ -85,7 +85,7 @@ jobs: - name: Docker meta id: meta if: steps.needs-build.outputs.out == 'true' - uses: docker/metadata-action@369eb591f429131d6889c46b94e711f089e6ca96 # v5.6.1 + uses: docker/metadata-action@902fa8ec7d6ecbf8d84d538b9b233a880e428804 # v5.7.0 with: images: | ${{ env.REGISTRY }}/edgelesssys/gcp-guest-agent @@ -114,7 +114,7 @@ jobs: - name: Build and push container image if: steps.needs-build.outputs.out == 'true' id: build - uses: docker/build-push-action@ca877d9245402d1537745e0e356eab47c3520991 # v6.13.0 + uses: docker/build-push-action@471d1dc4e07e5cdedd4c2171150001c434f0b7a4 # v6.15.0 with: context: ./guest-agent file: ./constellation/3rdparty/gcp-guest-agent/Dockerfile diff --git a/.github/workflows/build-os-image-scheduled.yml b/.github/workflows/build-os-image-scheduled.yml index 9df741ef6..7040e2771 100644 --- a/.github/workflows/build-os-image-scheduled.yml +++ b/.github/workflows/build-os-image-scheduled.yml @@ -65,9 +65,9 @@ jobs: token: ${{ secrets.CI_COMMIT_PUSH_PR }} - name: Setup Go environment - uses: actions/setup-go@f111f3307d8850f501ac008e886eec1fd1932a34 # v5.3.0 + uses: actions/setup-go@0aaccfd150d50ccaeb58ebd88d36e91967a5f35b # v5.4.0 with: - go-version: "1.23.6" + go-version: "1.24.1" cache: false - name: Determine version @@ -97,7 +97,7 @@ jobs: run: rm -f internal/attestation/measurements/measurement-generator/generate - name: Create pull request - uses: peter-evans/create-pull-request@67ccf781d68cd99b580ae25a5c18a1cc84ffff1f # v7.0.6 + uses: peter-evans/create-pull-request@271a8d0340265f705b14b6d32b9829c1cb33d45e # v7.0.8 with: branch: "image/automated/update-measurements-${{ github.run_number }}" base: main diff --git a/.github/workflows/build-os-image.yml b/.github/workflows/build-os-image.yml index d3c7aed2a..de4db988a 100644 --- a/.github/workflows/build-os-image.yml +++ b/.github/workflows/build-os-image.yml @@ -147,7 +147,7 @@ jobs: useCache: "false" - name: Login to AWS - uses: aws-actions/configure-aws-credentials@4fc4975a852c8cd99761e2de1f4ba73402e44dd9 # v4.0.3 + uses: aws-actions/configure-aws-credentials@ececac1a45f3b08a01d2dd070d28d111c5fe6722 # v4.1.0 with: role-to-assume: arn:aws:iam::795746500882:role/GitHubConstellationImagePipeline aws-region: eu-central-1 diff --git a/.github/workflows/check-links.yml b/.github/workflows/check-links.yml index 5176b7e3e..8929f88a7 100644 --- a/.github/workflows/check-links.yml +++ b/.github/workflows/check-links.yml @@ -25,7 +25,7 @@ jobs: ref: ${{ !github.event.pull_request.head.repo.fork && github.head_ref || '' }} - name: Link Checker - uses: lycheeverse/lychee-action@f796c8b7d468feb9b8c0a46da3fac0af6874d374 # v2.2.0 + uses: lycheeverse/lychee-action@f613c4a64e50d792e0b31ec34bbcbba12263c6a6 # v2.3.0 with: args: "--config ./.lychee.toml './**/*.md' './**/*.html'" fail: true diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index 61ea34bd8..c41514792 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -38,13 +38,13 @@ jobs: - name: Setup Go environment if: matrix.language == 'go' - uses: actions/setup-go@f111f3307d8850f501ac008e886eec1fd1932a34 # v5.3.0 + uses: actions/setup-go@0aaccfd150d50ccaeb58ebd88d36e91967a5f35b # v5.4.0 with: - go-version: "1.23.6" + go-version: "1.24.1" cache: false - name: Initialize CodeQL - uses: github/codeql-action/init@dd746615b3b9d728a6a37ca2045b68ca76d4841a # v3.28.8 + uses: github/codeql-action/init@1b549b9259bda1cb5ddde3b41741a82a2d15a841 # v3.28.13 with: languages: ${{ matrix.language }} @@ -63,6 +63,6 @@ jobs: echo "::endgroup::" - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@dd746615b3b9d728a6a37ca2045b68ca76d4841a # v3.28.8 + uses: github/codeql-action/analyze@1b549b9259bda1cb5ddde3b41741a82a2d15a841 # v3.28.13 with: category: "/language:${{ matrix.language }}" diff --git a/.github/workflows/draft-release.yml b/.github/workflows/draft-release.yml index c82555570..3db228b63 100644 --- a/.github/workflows/draft-release.yml +++ b/.github/workflows/draft-release.yml @@ -92,7 +92,7 @@ jobs: cosignPassword: ${{ inputs.key == 'release' && secrets.COSIGN_PASSWORD || secrets.COSIGN_DEV_PASSWORD }} - name: Upload CLI as artifact (unix) - uses: actions/upload-artifact@65c4c4a1ddee5b72f698fdd19549f0f0fb45cf08 # v4.6.0 + uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 if : ${{ matrix.os != 'windows' }} with: name: constellation-${{ matrix.os }}-${{ matrix.arch }} @@ -101,7 +101,7 @@ jobs: build/constellation-${{ matrix.os }}-${{ matrix.arch }}.sig - name: Upload CLI as artifact (windows) - uses: actions/upload-artifact@65c4c4a1ddee5b72f698fdd19549f0f0fb45cf08 # v4.6.0 + uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 if : ${{ matrix.os == 'windows' }} with: name: constellation-${{ matrix.os }}-${{ matrix.arch }} @@ -149,7 +149,7 @@ jobs: targetArch: ${{ matrix.arch }} - name: Upload Terraform Provider Binary as artifact (unix) - uses: actions/upload-artifact@65c4c4a1ddee5b72f698fdd19549f0f0fb45cf08 # v4.6.0 + uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 if : ${{ matrix.os != 'windows' }} with: name: terraform-provider-constellation-${{ matrix.os }}-${{ matrix.arch }} @@ -157,7 +157,7 @@ jobs: build/terraform-provider-constellation-${{ matrix.os }}-${{ matrix.arch }} - name: Upload Terraform Provider Binary as artifact (windows) - uses: actions/upload-artifact@65c4c4a1ddee5b72f698fdd19549f0f0fb45cf08 # v4.6.0 + uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 if : ${{ matrix.os == 'windows' }} with: name: terraform-provider-constellation-${{ matrix.os }}-${{ matrix.arch }} @@ -227,7 +227,7 @@ jobs: uses: ./.github/actions/download_release_binaries - name: Download CLI SBOM - uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8 + uses: actions/download-artifact@95815c38cf2ff2164869cbab79da8d1f422bc89e # v4.2.1 with: name: constellation.spdx.sbom @@ -261,7 +261,7 @@ jobs: ref: ${{ inputs.ref || github.head_ref }} - name: Install Cosign - uses: sigstore/cosign-installer@dc72c7d5c4d10cd6bcb8cf6e3fd625a9e5e537da # v3.7.0 + uses: sigstore/cosign-installer@d7d6bc7722e3daa8354c50bcb52f4837da5e9b6a # v3.8.1 - name: Download Syft & Grype uses: ./.github/actions/install_syft_grype @@ -296,13 +296,13 @@ jobs: COSIGN_PASSWORD: ${{ inputs.key == 'release' && secrets.COSIGN_PASSWORD || secrets.COSIGN_DEV_PASSWORD }} - name: Upload Constellation CLI SBOM - uses: actions/upload-artifact@65c4c4a1ddee5b72f698fdd19549f0f0fb45cf08 # v4.6.0 + uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 with: name: constellation.spdx.sbom path: constellation.spdx.sbom - name: Upload Constellation CLI SBOM's signature - uses: actions/upload-artifact@65c4c4a1ddee5b72f698fdd19549f0f0fb45cf08 # v4.6.0 + uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 with: name: constellation.spdx.sbom.sig path: constellation.spdx.sbom.sig @@ -316,7 +316,7 @@ jobs: - provenance-subjects # This must not be pinned to digest. See: # https://github.com/slsa-framework/slsa-github-generator#referencing-slsa-builders-and-generators - uses: slsa-framework/slsa-github-generator/.github/workflows/generator_generic_slsa3.yml@v2.0.0 + uses: slsa-framework/slsa-github-generator/.github/workflows/generator_generic_slsa3.yml@v2.1.0 with: base64-subjects: "${{ needs.provenance-subjects.outputs.provenance-subjects }}" @@ -340,12 +340,12 @@ jobs: uses: ./.github/actions/download_release_binaries - name: Download CLI SBOM - uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8 + uses: actions/download-artifact@95815c38cf2ff2164869cbab79da8d1f422bc89e # v4.2.1 with: name: constellation.spdx.sbom - name: Download provenance - uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8 + uses: actions/download-artifact@95815c38cf2ff2164869cbab79da8d1f422bc89e # v4.2.1 with: name: ${{ needs.provenance.outputs.provenance-name }} @@ -418,17 +418,17 @@ jobs: uses: ./.github/actions/download_release_binaries - name: Download CLI SBOM - uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8 + uses: actions/download-artifact@95815c38cf2ff2164869cbab79da8d1f422bc89e # v4.2.1 with: name: constellation.spdx.sbom - name: Download Constellation CLI SBOM's signature - uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8 + uses: actions/download-artifact@95815c38cf2ff2164869cbab79da8d1f422bc89e # v4.2.1 with: name: constellation.spdx.sbom.sig - name: Download Constellation provenance - uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8 + uses: actions/download-artifact@95815c38cf2ff2164869cbab79da8d1f422bc89e # v4.2.1 with: name: ${{ needs.provenance.outputs.provenance-name }} diff --git a/.github/workflows/e2e-test-provider-example.yml b/.github/workflows/e2e-test-provider-example.yml index e8edb07bf..1c4f88012 100644 --- a/.github/workflows/e2e-test-provider-example.yml +++ b/.github/workflows/e2e-test-provider-example.yml @@ -154,7 +154,7 @@ jobs: - name: Login to AWS (IAM + Cluster role) if: steps.determine.outputs.cloudProvider == 'aws' - uses: aws-actions/configure-aws-credentials@4fc4975a852c8cd99761e2de1f4ba73402e44dd9 # v4.0.3 + uses: aws-actions/configure-aws-credentials@ececac1a45f3b08a01d2dd070d28d111c5fe6722 # v4.1.0 with: role-to-assume: arn:aws:iam::795746500882:role/GithubActionsE2ETerraform aws-region: eu-central-1 diff --git a/.github/workflows/e2e-upgrade.yml b/.github/workflows/e2e-upgrade.yml index 508ecd5a2..18dde6109 100644 --- a/.github/workflows/e2e-upgrade.yml +++ b/.github/workflows/e2e-upgrade.yml @@ -268,13 +268,13 @@ jobs: push: true - name: Upload CLI binary # is needed for the cleanup step - uses: actions/upload-artifact@65c4c4a1ddee5b72f698fdd19549f0f0fb45cf08 # v4.6.0 + uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 with: name: constellation-upgrade-${{ inputs.attestationVariant }} path: build/constellation - name: Login to AWS - uses: aws-actions/configure-aws-credentials@4fc4975a852c8cd99761e2de1f4ba73402e44dd9 # v4.0.3 + uses: aws-actions/configure-aws-credentials@ececac1a45f3b08a01d2dd070d28d111c5fe6722 # v4.1.0 with: role-to-assume: arn:aws:iam::795746500882:role/GithubConstellationVersionsAPIRead aws-region: eu-central-1 @@ -296,7 +296,7 @@ jobs: - name: Login to AWS (IAM role) if: needs.generate-input-parameters.outputs.cloudProvider == 'aws' - uses: aws-actions/configure-aws-credentials@4fc4975a852c8cd99761e2de1f4ba73402e44dd9 # v4.0.3 + uses: aws-actions/configure-aws-credentials@ececac1a45f3b08a01d2dd070d28d111c5fe6722 # v4.1.0 with: role-to-assume: arn:aws:iam::795746500882:role/GithubActionsE2EIAM aws-region: eu-central-1 @@ -347,7 +347,7 @@ jobs: - name: Login to AWS (Cluster role) if: always() && needs.generate-input-parameters.outputs.cloudProvider == 'aws' - uses: aws-actions/configure-aws-credentials@4fc4975a852c8cd99761e2de1f4ba73402e44dd9 # v4.0.3 + uses: aws-actions/configure-aws-credentials@ececac1a45f3b08a01d2dd070d28d111c5fe6722 # v4.1.0 with: role-to-assume: arn:aws:iam::795746500882:role/GithubActionsE2ECluster aws-region: eu-central-1 @@ -424,7 +424,7 @@ jobs: ref: ${{ inputs.gitRef }} - name: Download CLI - uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8 + uses: actions/download-artifact@95815c38cf2ff2164869cbab79da8d1f422bc89e # v4.2.1 with: name: constellation-upgrade-${{ inputs.attestationVariant }} path: build diff --git a/.github/workflows/e2e-windows.yml b/.github/workflows/e2e-windows.yml index e9f377596..856048fab 100644 --- a/.github/workflows/e2e-windows.yml +++ b/.github/workflows/e2e-windows.yml @@ -45,7 +45,7 @@ jobs: push: true - name: Upload CLI artifact - uses: actions/upload-artifact@65c4c4a1ddee5b72f698fdd19549f0f0fb45cf08 # v4.6.0 + uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 with: path: build/constellation.exe name: "constell-exe" @@ -61,7 +61,7 @@ jobs: ref: ${{ !github.event.pull_request.head.repo.fork && github.head_ref || '' }} - name: Download CLI artifact - uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8 + uses: actions/download-artifact@95815c38cf2ff2164869cbab79da8d1f422bc89e # v4.2.1 with: name: "constell-exe" diff --git a/.github/workflows/on-release.yml b/.github/workflows/on-release.yml index 5830e5700..1744a7472 100644 --- a/.github/workflows/on-release.yml +++ b/.github/workflows/on-release.yml @@ -142,7 +142,7 @@ jobs: - uses: ./.github/actions/setup_bazel_nix - name: Login to AWS - uses: aws-actions/configure-aws-credentials@4fc4975a852c8cd99761e2de1f4ba73402e44dd9 # v4.0.3 + uses: aws-actions/configure-aws-credentials@ececac1a45f3b08a01d2dd070d28d111c5fe6722 # v4.1.0 with: role-to-assume: arn:aws:iam::795746500882:role/GitHubConstellationImagePipeline aws-region: eu-central-1 diff --git a/.github/workflows/purge-main.yml b/.github/workflows/purge-main.yml index b61df08ea..dd57947d7 100644 --- a/.github/workflows/purge-main.yml +++ b/.github/workflows/purge-main.yml @@ -23,7 +23,7 @@ jobs: ref: ${{ github.head_ref }} - name: Login to AWS - uses: aws-actions/configure-aws-credentials@4fc4975a852c8cd99761e2de1f4ba73402e44dd9 # v4.0.3 + uses: aws-actions/configure-aws-credentials@ececac1a45f3b08a01d2dd070d28d111c5fe6722 # v4.1.0 with: role-to-assume: arn:aws:iam::795746500882:role/GithubConstellationVersionsAPIRead aws-region: eu-central-1 diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 16749d413..a50461ee9 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -118,7 +118,7 @@ jobs: sed -i 's/fromVersion: \["[^"]*"\]/fromVersion: ["${{ inputs.version }}"]/g' .github/workflows/e2e-test-weekly.yml - name: Create docs pull request - uses: peter-evans/create-pull-request@67ccf781d68cd99b580ae25a5c18a1cc84ffff1f # v7.0.6 + uses: peter-evans/create-pull-request@271a8d0340265f705b14b6d32b9829c1cb33d45e # v7.0.8 with: branch: ${{ env.BRANCH }} base: main @@ -266,9 +266,9 @@ jobs: ref: ${{ needs.verify-inputs.outputs.WORKING_BRANCH }} - name: Setup Go environment - uses: actions/setup-go@f111f3307d8850f501ac008e886eec1fd1932a34 # v5.3.0 + uses: actions/setup-go@0aaccfd150d50ccaeb58ebd88d36e91967a5f35b # v5.4.0 with: - go-version: "1.23.6" + go-version: "1.24.1" cache: true - name: Build generateMeasurements tool diff --git a/.github/workflows/reproducible-builds.yml b/.github/workflows/reproducible-builds.yml index f2e3df0db..5779247c2 100644 --- a/.github/workflows/reproducible-builds.yml +++ b/.github/workflows/reproducible-builds.yml @@ -81,13 +81,13 @@ jobs: run: shasum -a 256 "${binary}" | tee "${binary}.sha256" - name: Upload binary artifact - uses: actions/upload-artifact@65c4c4a1ddee5b72f698fdd19549f0f0fb45cf08 # v4.6.0 + uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 with: name: "binaries-${{ matrix.target }}-${{ matrix.runner }}-${{ matrix.deps }}" path: "${{ env.binary }}" - name: Upload hash artifact - uses: actions/upload-artifact@65c4c4a1ddee5b72f698fdd19549f0f0fb45cf08 # v4.6.0 + uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 with: name: "sha256sums-${{ matrix.target }}-${{ matrix.runner }}-${{ matrix.deps }}" path: "${{ env.binary }}.sha256" @@ -146,13 +146,13 @@ jobs: run: shasum -a 256 "${binary}" | tee "${binary}.sha256" - name: Upload binary artifact - uses: actions/upload-artifact@65c4c4a1ddee5b72f698fdd19549f0f0fb45cf08 # v4.6.0 + uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 with: name: "osimages-${{ matrix.target }}-${{ matrix.runner }}" path: "${{ env.binary }}" - name: Upload hash artifact - uses: actions/upload-artifact@65c4c4a1ddee5b72f698fdd19549f0f0fb45cf08 # v4.6.0 + uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 with: name: "sha256sums-${{ matrix.target }}-${{ matrix.runner }}" path: "${{ env.binary }}.sha256" @@ -175,7 +175,7 @@ jobs: ref: ${{ !github.event.pull_request.head.repo.fork && github.head_ref || '' }} - name: Download binaries - uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8 + uses: actions/download-artifact@95815c38cf2ff2164869cbab79da8d1f422bc89e # v4.2.1 with: pattern: "binaries-${{ matrix.target }}-*" merge-multiple: true @@ -209,7 +209,7 @@ jobs: ref: ${{ !github.event.pull_request.head.repo.fork && github.head_ref || '' }} - name: Download os images - uses: actions/download-artifact@fa0a91b85d4f404e444e00e005971372dc801d16 # v4.1.8 + uses: actions/download-artifact@95815c38cf2ff2164869cbab79da8d1f422bc89e # v4.2.1 with: pattern: "osimages-${{ matrix.target }}-*" merge-multiple: true diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml index 9da8c94d5..af7a8d415 100644 --- a/.github/workflows/scorecard.yml +++ b/.github/workflows/scorecard.yml @@ -23,20 +23,20 @@ jobs: persist-credentials: false - name: Run analysis - uses: ossf/scorecard-action@62b2cac7ed8198b15735ed49ab1e5cf35480ba46 # v2.4.0 + uses: ossf/scorecard-action@f49aabe0b5af0936a0987cfb85d86b75731b0186 # v2.4.1 with: results_file: results.sarif results_format: sarif publish_results: true - name: Upload artifact - uses: actions/upload-artifact@65c4c4a1ddee5b72f698fdd19549f0f0fb45cf08 # v4.6.0 + uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 with: name: SARIF file path: results.sarif retention-days: 5 - name: Upload to code-scanning - uses: github/codeql-action/upload-sarif@dd746615b3b9d728a6a37ca2045b68ca76d4841a # v3.28.8 + uses: github/codeql-action/upload-sarif@1b549b9259bda1cb5ddde3b41741a82a2d15a841 # v3.28.13 with: sarif_file: results.sarif diff --git a/.github/workflows/sync-terraform-docs.yml b/.github/workflows/sync-terraform-docs.yml index 36ef698b5..9bc2aac07 100644 --- a/.github/workflows/sync-terraform-docs.yml +++ b/.github/workflows/sync-terraform-docs.yml @@ -40,7 +40,7 @@ jobs: - name: Create pull request id: create-pull-request - uses: peter-evans/create-pull-request@67ccf781d68cd99b580ae25a5c18a1cc84ffff1f # v7.0.6 + uses: peter-evans/create-pull-request@271a8d0340265f705b14b6d32b9829c1cb33d45e # v7.0.8 with: path: terraform-provider-constellation branch: "feat/docs/update" diff --git a/.github/workflows/test-operator-codegen.yml b/.github/workflows/test-operator-codegen.yml index f54b3a8b4..678535563 100644 --- a/.github/workflows/test-operator-codegen.yml +++ b/.github/workflows/test-operator-codegen.yml @@ -26,9 +26,9 @@ jobs: ref: ${{ !github.event.pull_request.head.repo.fork && github.head_ref || '' }} - name: Setup Go environment - uses: actions/setup-go@f111f3307d8850f501ac008e886eec1fd1932a34 # v5.3.0 + uses: actions/setup-go@0aaccfd150d50ccaeb58ebd88d36e91967a5f35b # v5.4.0 with: - go-version: "1.23.6" + go-version: "1.24.1" cache: true - name: Run code generation diff --git a/.github/workflows/test-tidy.yml b/.github/workflows/test-tidy.yml index 06aef3035..a0d925840 100644 --- a/.github/workflows/test-tidy.yml +++ b/.github/workflows/test-tidy.yml @@ -37,7 +37,7 @@ jobs: - name: Assume AWS role to upload Bazel dependencies to S3 if: startsWith(github.head_ref, 'renovate/') - uses: aws-actions/configure-aws-credentials@4fc4975a852c8cd99761e2de1f4ba73402e44dd9 # v4.0.3 + uses: aws-actions/configure-aws-credentials@ececac1a45f3b08a01d2dd070d28d111c5fe6722 # v4.1.0 with: role-to-assume: arn:aws:iam::795746500882:role/GithubConstellationMirrorWrite aws-region: eu-central-1 diff --git a/.github/workflows/test-unittest.yml b/.github/workflows/test-unittest.yml index eb93910ab..4226db3d3 100644 --- a/.github/workflows/test-unittest.yml +++ b/.github/workflows/test-unittest.yml @@ -49,7 +49,7 @@ jobs: rm -rf awscliv2.zip aws - name: Login to AWS (IAM role) - uses: aws-actions/configure-aws-credentials@4fc4975a852c8cd99761e2de1f4ba73402e44dd9 # v4.0.3 + uses: aws-actions/configure-aws-credentials@ececac1a45f3b08a01d2dd070d28d111c5fe6722 # v4.1.0 with: role-to-assume: arn:aws:iam::795746500882:role/GithubActionGocoverage aws-region: eu-central-1 diff --git a/.github/workflows/update-rpms.yml b/.github/workflows/update-rpms.yml index 9ac23eee7..8a5d67cd7 100644 --- a/.github/workflows/update-rpms.yml +++ b/.github/workflows/update-rpms.yml @@ -18,7 +18,7 @@ jobs: token: ${{ secrets.CI_COMMIT_PUSH_PR }} - name: Assume AWS role to upload Bazel dependencies to S3 - uses: aws-actions/configure-aws-credentials@4fc4975a852c8cd99761e2de1f4ba73402e44dd9 # v4.0.3 + uses: aws-actions/configure-aws-credentials@ececac1a45f3b08a01d2dd070d28d111c5fe6722 # v4.1.0 with: role-to-assume: arn:aws:iam::795746500882:role/GithubConstellationMirrorWrite aws-region: eu-central-1 @@ -39,7 +39,7 @@ jobs: fi - name: Create pull request - uses: peter-evans/create-pull-request@67ccf781d68cd99b580ae25a5c18a1cc84ffff1f # v7.0.6 + uses: peter-evans/create-pull-request@271a8d0340265f705b14b6d32b9829c1cb33d45e # v7.0.8 with: branch: "image/automated/update-rpms-${{ github.run_number }}" base: main diff --git a/.github/workflows/versionsapi.yml b/.github/workflows/versionsapi.yml index bf6720474..b7e1cced3 100644 --- a/.github/workflows/versionsapi.yml +++ b/.github/workflows/versionsapi.yml @@ -149,21 +149,21 @@ jobs: - name: Login to AWS without write access if: steps.check-rights.outputs.write == 'false' - uses: aws-actions/configure-aws-credentials@4fc4975a852c8cd99761e2de1f4ba73402e44dd9 # v4.0.3 + uses: aws-actions/configure-aws-credentials@ececac1a45f3b08a01d2dd070d28d111c5fe6722 # v4.1.0 with: role-to-assume: arn:aws:iam::795746500882:role/GithubConstellationVersionsAPIRead aws-region: eu-central-1 - name: Login to AWS with write access if: steps.check-rights.outputs.write == 'true' && steps.check-rights.outputs.auth == 'false' - uses: aws-actions/configure-aws-credentials@4fc4975a852c8cd99761e2de1f4ba73402e44dd9 # v4.0.3 + uses: aws-actions/configure-aws-credentials@ececac1a45f3b08a01d2dd070d28d111c5fe6722 # v4.1.0 with: role-to-assume: arn:aws:iam::795746500882:role/GithubConstellationVersionsAPIWrite aws-region: eu-central-1 - name: Login to AWS with write and image remove access if: steps.check-rights.outputs.write == 'true' && steps.check-rights.outputs.auth == 'true' - uses: aws-actions/configure-aws-credentials@4fc4975a852c8cd99761e2de1f4ba73402e44dd9 # v4.0.3 + uses: aws-actions/configure-aws-credentials@ececac1a45f3b08a01d2dd070d28d111c5fe6722 # v4.1.0 with: role-to-assume: arn:aws:iam::795746500882:role/GithubConstellationVersionsAPIRemove aws-region: eu-central-1 From 3cc930fa971b387f5c64e1febc35850f2bed2b0c Mon Sep 17 00:00:00 2001 From: miampf Date: Tue, 25 Mar 2025 11:28:48 +0000 Subject: [PATCH 173/311] feat: implement RFC 16 to allow emergency node access (#3557) --- .github/actions/e2e_emergency_ssh/action.yml | 68 +++++++++++++++++++ .github/actions/e2e_test/action.yml | 12 +++- .github/workflows/e2e-test-weekly.yml | 30 +++++++- .github/workflows/e2e-test.yml | 1 + cli/internal/cmd/ssh.go | 29 +++----- cli/internal/cmd/ssh_test.go | 31 ++------- docs/docs/reference/cli.md | 8 +-- docs/docs/workflows/troubleshooting.md | 49 +++++++++++++ image/base/mkosi.conf | 1 + .../system-preset/30-constellation.preset | 1 + .../system/create-host-ssh-key.service | 10 +++ image/mirror/SHA256SUMS | 28 ++++---- image/mirror/packages.txt | 1 + image/sysroot-tree/etc/ssh/sshd_config | 4 ++ rfc/016-node-access.md | 4 -- terraform/infrastructure/aws/main.tf | 1 + terraform/infrastructure/aws/outputs.tf | 5 ++ terraform/infrastructure/aws/variables.tf | 6 ++ terraform/infrastructure/azure/main.tf | 1 + terraform/infrastructure/azure/outputs.tf | 5 ++ terraform/infrastructure/azure/variables.tf | 6 ++ terraform/infrastructure/gcp/main.tf | 1 + terraform/infrastructure/gcp/outputs.tf | 5 ++ terraform/infrastructure/gcp/variables.tf | 6 ++ terraform/infrastructure/openstack/main.tf | 1 + terraform/infrastructure/openstack/outputs.tf | 5 ++ .../infrastructure/openstack/variables.tf | 6 ++ 27 files changed, 256 insertions(+), 69 deletions(-) create mode 100644 .github/actions/e2e_emergency_ssh/action.yml create mode 100644 image/base/mkosi.skeleton/usr/lib/systemd/system/create-host-ssh-key.service create mode 100644 image/sysroot-tree/etc/ssh/sshd_config diff --git a/.github/actions/e2e_emergency_ssh/action.yml b/.github/actions/e2e_emergency_ssh/action.yml new file mode 100644 index 000000000..81712956a --- /dev/null +++ b/.github/actions/e2e_emergency_ssh/action.yml @@ -0,0 +1,68 @@ +name: Emergency ssh +description: "Verify that an emergency ssh connection can be established." + +inputs: + kubeconfig: + description: "The kubeconfig file for the cluster." + required: true + +runs: + using: "composite" + steps: + - name: Test emergency ssh + shell: bash + env: + KUBECONFIG: ${{ inputs.kubeconfig }} + run: | + set -euo pipefail + + # Activate emergency ssh access to the cluster + pushd ./constellation-terraform + echo "emergency_ssh = true" >> terraform.tfvars + terraform apply -auto-approve + lb="$(terraform output -raw loadbalancer_address)" + popd + + # write ssh config + cat > ssh_config < '.\nYou can obtain the private node IP via the web UI of your CSP.\n", constants.TerraformWorkingDir) + cmd.Printf("You can now connect to a node using the \"constellation_cert.pub\" certificate.\nLook at the documentation for a how-to guide:\n\n\thttps://docs.edgeless.systems/constellation/workflows/troubleshooting#emergency-ssh-access\n") return nil } diff --git a/cli/internal/cmd/ssh_test.go b/cli/internal/cmd/ssh_test.go index 7f5fe566d..1150b1105 100644 --- a/cli/internal/cmd/ssh_test.go +++ b/cli/internal/cmd/ssh_test.go @@ -8,7 +8,6 @@ package cmd import ( "bytes" - "fmt" "testing" "github.com/edgelesssys/constellation/v2/internal/constants" @@ -29,18 +28,6 @@ func TestSSH(t *testing.T) { "salt": "MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK" } ` - - newFsWithDirectory := func() file.Handler { - require := require.New(t) - fh := file.NewHandler(afero.NewMemMapFs()) - require.NoError(fh.MkdirAll(constants.TerraformWorkingDir)) - return fh - } - newFsNoDirectory := func() file.Handler { - fh := file.NewHandler(afero.NewMemMapFs()) - return fh - } - testCases := map[string]struct { fh file.Handler pubKey string @@ -48,38 +35,32 @@ func TestSSH(t *testing.T) { wantErr bool }{ "everything exists": { - fh: newFsWithDirectory(), + fh: file.NewHandler(afero.NewMemMapFs()), pubKey: someSSHPubKey, masterSecret: someMasterSecret, }, "no public key": { - fh: newFsWithDirectory(), + fh: file.NewHandler(afero.NewMemMapFs()), masterSecret: someMasterSecret, wantErr: true, }, "no master secret": { - fh: newFsWithDirectory(), + fh: file.NewHandler(afero.NewMemMapFs()), pubKey: someSSHPubKey, wantErr: true, }, "malformed public key": { - fh: newFsWithDirectory(), + fh: file.NewHandler(afero.NewMemMapFs()), pubKey: "asdf", masterSecret: someMasterSecret, wantErr: true, }, "malformed master secret": { - fh: newFsWithDirectory(), + fh: file.NewHandler(afero.NewMemMapFs()), masterSecret: "asdf", pubKey: someSSHPubKey, wantErr: true, }, - "directory does not exist": { - fh: newFsNoDirectory(), - pubKey: someSSHPubKey, - masterSecret: someMasterSecret, - wantErr: true, - }, } for name, tc := range testCases { @@ -104,7 +85,7 @@ func TestSSH(t *testing.T) { assert.Error(err) } else { assert.NoError(err) - cert, err := tc.fh.Read(fmt.Sprintf("%s/ca_cert.pub", constants.TerraformWorkingDir)) + cert, err := tc.fh.Read("constellation_cert.pub") require.NoError(err) _, _, _, _, err = ssh.ParseAuthorizedKey(cert) require.NoError(err) diff --git a/docs/docs/reference/cli.md b/docs/docs/reference/cli.md index 7bb4d5b40..2ce14ef34 100644 --- a/docs/docs/reference/cli.md +++ b/docs/docs/reference/cli.md @@ -39,7 +39,7 @@ Commands: * [apply](#constellation-iam-upgrade-apply): Apply an upgrade to an IAM profile * [version](#constellation-version): Display version of this CLI * [init](#constellation-init): Initialize the Constellation cluster -* [ssh](#constellation-ssh): Prepare your cluster for emergency ssh access +* [ssh](#constellation-ssh): Generate a certificate for emergency SSH access ## constellation config @@ -845,11 +845,11 @@ constellation init [flags] ## constellation ssh -Prepare your cluster for emergency ssh access +Generate a certificate for emergency SSH access ### Synopsis -Prepare your cluster for emergency ssh access and sign a given key pair for authorization. +Generate a certificate for emergency SSH access to your SSH-enabled constellation cluster. ``` constellation ssh [flags] @@ -859,7 +859,7 @@ constellation ssh [flags] ``` -h, --help help for ssh - --key string the path to an existing ssh public key + --key string the path to an existing SSH public key ``` ### Options inherited from parent commands diff --git a/docs/docs/workflows/troubleshooting.md b/docs/docs/workflows/troubleshooting.md index 195bce1cc..903c829e0 100644 --- a/docs/docs/workflows/troubleshooting.md +++ b/docs/docs/workflows/troubleshooting.md @@ -149,3 +149,52 @@ Debugging via a shell on a node is [directly supported by Kubernetes](https://ku ```bash kubectl delete pod node-debugger-constell-worker-xksa0-000000-bjthj ``` + +### Emergency SSH access + +Emergency SSH access to nodes can be useful to diagnose issues or download important data even if the Kubernetes API isn't reachable anymore. + +1. Enter the `constellation-terraform` directory in your Constellation workspace and enable emergency SSH access to the cluster: + + ```bash + cd constellation-terraform + echo "emergency_ssh = true" >> ./terraform.tfvars + terraform apply + ``` + +2. Sign an existing SSH key with your master secret: + + ```bash + cd ../ # go back to your Constellation workspace + constellation ssh --key your_public_key.pub + ``` + + A certificate is written to `constellation_cert.pub`. + + The certificate is valid for 24 hours and enables you to access your Constellation nodes using + [certificate based authentication](https://en.wikibooks.org/wiki/OpenSSH/Cookbook/Certificate-based_Authentication). + +3. Now you can connect to any Constellation node using your certificate and your private key. + + ```bash + ssh -o CertificateFile=constellation_cert.pub -i root@ + ``` + + Normally, you don't have access to the Constellation nodes since they reside in a private network. + To access those nodes anyways, you can use your Constellation load balancer as a proxy jump host. + For this, use something along the following SSH client configuration: + + ```text + Host + ProxyJump none + + Host * + IdentityFile + PreferredAuthentications publickey + CertificateFile=constellation_cert.pub + User root + ProxyJump + ``` + + With this configuration you can connect to a Constellation node using `ssh -F `. + You can obtain the private node IP and the domain name of the load balancer using your CSP's web UI. diff --git a/image/base/mkosi.conf b/image/base/mkosi.conf index 5deab82c8..9201a05ff 100644 --- a/image/base/mkosi.conf +++ b/image/base/mkosi.conf @@ -41,6 +41,7 @@ Packages=containerd # Network Packages=iproute dbus + openssh-server systemd-networkd systemd-resolved diff --git a/image/base/mkosi.skeleton/usr/lib/systemd/system-preset/30-constellation.preset b/image/base/mkosi.skeleton/usr/lib/systemd/system-preset/30-constellation.preset index dcabbedd9..493434d54 100644 --- a/image/base/mkosi.skeleton/usr/lib/systemd/system-preset/30-constellation.preset +++ b/image/base/mkosi.skeleton/usr/lib/systemd/system-preset/30-constellation.preset @@ -10,3 +10,4 @@ enable measurements.service enable export_constellation_debug.service enable systemd-timesyncd enable udev-trigger.service +enable create-host-ssh-key.service diff --git a/image/base/mkosi.skeleton/usr/lib/systemd/system/create-host-ssh-key.service b/image/base/mkosi.skeleton/usr/lib/systemd/system/create-host-ssh-key.service new file mode 100644 index 000000000..28a0862e7 --- /dev/null +++ b/image/base/mkosi.skeleton/usr/lib/systemd/system/create-host-ssh-key.service @@ -0,0 +1,10 @@ +[Unit] +Description=Create a host SSH key +Before=network-pre.target + +[Service] +Type=oneshot +ExecStart=/bin/bash -c "mkdir -p /run/ssh; ssh-keygen -t ecdsa -q -N '' -f /run/ssh/ssh_host_ecdsa_key" + +[Install] +WantedBy=network-pre.target diff --git a/image/mirror/SHA256SUMS b/image/mirror/SHA256SUMS index 0c4139a48..1273c65a3 100644 --- a/image/mirror/SHA256SUMS +++ b/image/mirror/SHA256SUMS @@ -1,4 +1,3 @@ -37abef83e8927b4b48f69fcbdcc249d349c6029cc669401676d01f0ea326999e WALinuxAgent-udev-2.10.0.8-2.fc40.noarch.rpm 03b5889fecc19101fe5c5eb6105bded5705e16a7af957f92b6cc6a7a96e829a8 aardvark-dns-1.14.0-1.fc40.x86_64.rpm ac860c52abbc65af5835d1bd97400c531a5635d39bc1d68e36a1fe54863385ea alternatives-1.27-1.fc40.x86_64.rpm b28e7d90ed3aeb6ca10ecb235b70534665011af35bd3677fb836b1e3cfa602a7 audit-libs-4.0.3-1.fc40.i686.rpm @@ -15,11 +14,11 @@ a9af8b72483b4ad6489e6d2492161120809453373edaf24722cffb394bd1cd15 catatonit-0.2. 5935816e8d377d0385e5287ca12e4d3b43e3c3cdc9cc4deafa653a6dba78611a composefs-libs-1.0.6-1.fc40.x86_64.rpm db246f6445469b5a71e965a081685471768393cf04181e7250ce0ddcb8a9c3d4 conmon-2.1.12-2.fc40.x86_64.rpm adf4b75cdd9fae9d2d37fb71d9f0bf625a6705c0f0a7784569ab21463fe22152 conntrack-tools-1.4.7-7.fc40.x86_64.rpm -4f69d382decd37f53edf1ccf1093a122f209294128038d642beba5f0021131d3 container-selinux-2.235.0-2.fc40.noarch.rpm bbe29e0c7b4ca076d50b4ac3954eb383459230d96b13f353ee71ebd5de33b6d1 containerd-1.6.23-5.fc40.x86_64.rpm 0705251ea64b1558098016b2120f202c5aba77470093cb8f89ce6adb2a0b46b6 containernetworking-plugins-1.5.1-1.fc40.x86_64.rpm fd81f5d57a5feba4658d3ab1c6ab0a1a9551cff5c73263acf960bd7d41acaf25 containers-common-0.62.0-1.fc40.noarch.rpm 1472f71479fed6eb2103bd9653845609c7523523d06c36565a37d818fc144284 containers-common-extra-0.62.0-1.fc40.noarch.rpm +4f69d382decd37f53edf1ccf1093a122f209294128038d642beba5f0021131d3 container-selinux-2.235.0-2.fc40.noarch.rpm 299d3e7e1cbc110d9ae8a47f6ca95142c3e3783cb1464bfbd6bc550c414b97ec coreutils-single-9.4-9.fc40.x86_64.rpm d941a78ffb6e2e0b4c24d0097d0351ced8796edde90208b4bddee459bce0a949 cpio-2.15-1.fc40.x86_64.rpm faa23cb6a7a612c0a6e874c788c5add967c5e193bd38c2e6093b82b38a162f81 cracklib-2.9.11-5.fc40.i686.rpm @@ -68,11 +67,11 @@ a6f2098fc2ed16df92c9325bd7459cc41479e17306a4f9cddfd5df8a1b80d0f8 file-5.45-4.fc f76684ee78408660db83ab9932978a1346b280f4210cd744524b00b2e5891fe1 file-libs-5.45-4.fc40.x86_64.rpm 063af3db3808bea0d5c07dbb2d8369b275e1d05ad0850c80a8fec0413f47cd64 filesystem-3.18-8.fc40.x86_64.rpm 21725de2a93e1ea19f8d298e32a2428a3a08b9c98f22561cc778a807ed43639f findutils-4.9.0-9.fc40.x86_64.rpm +2d6631d65e3b5c91afdb100a51ee8e50294f0e074a944c1662008d878d47456e fuse3-3.16.2-3.fc40.x86_64.rpm +a9c6502a5b190aaf169e93afd337c009e0b2e235e31f3da23d29c7d063ad2ff9 fuse3-libs-3.16.2-3.fc40.x86_64.rpm f4c2d51c7b4577f7b7ef498f8e2afb1b007da2de00cca28e220f50129c40a48c fuse-common-3.16.2-3.fc40.x86_64.rpm f94315e447afb7442033b7b82e43a4ed62754f603afda53930280300855e46c7 fuse-libs-2.9.9-21.fc40.x86_64.rpm 8fe84b7e0319afcc9c9eb28130b74e0cd7c675667a6ce075eb7ee2ec1b0014c2 fuse-overlayfs-1.13-1.fc40.x86_64.rpm -2d6631d65e3b5c91afdb100a51ee8e50294f0e074a944c1662008d878d47456e fuse3-3.16.2-3.fc40.x86_64.rpm -a9c6502a5b190aaf169e93afd337c009e0b2e235e31f3da23d29c7d063ad2ff9 fuse3-libs-3.16.2-3.fc40.x86_64.rpm 6c80dfdaf7b27ea92c1276856b8b2ae5fde1ae5c391b773805be725515fdc1ac gawk-5.3.0-3.fc40.x86_64.rpm c4cc69bf3a2655b9ee9ac23492d377bac57811c5b4f81fbf43537520ee33c7af gawk-all-langpacks-5.3.0-3.fc40.x86_64.rpm 21470eb4ec55006c9efeee84c97772462008fceda1ab332e58d2caddfdaa0d1e gdbm-1.23-6.fc40.x86_64.rpm @@ -160,8 +159,8 @@ cd073c42cb4dfcd224e9b4619883f2c7923ab0b083d7c90b01e3052c89f6b814 libgcc-14.2.1- 10c4c12c6539ffea68974cd9b57013d471ac35fe3bef4833c0a22f6b29fbf489 libgcrypt-1.10.3-3.fc40.x86_64.rpm 03d5f4d139dec2e7c94714b1b9f59d37236dbda9f09271bdda99c71251f15f0e libgomp-14.2.1-3.fc40.x86_64.rpm 8d0a9840e06e72ccf756fa5a79c49f572dc827b0c75ea5a1f923235150d27ae2 libgpg-error-1.49-1.fc40.x86_64.rpm -677a67726c759c94faa94475185e46d028f171c9215390ac601ccd914188afb2 libidn2-2.3.7-1.fc40.i686.rpm -2fd2038b4a94eeede34e46ed0e035e619f77d0e412c70cf4e9bb836957e8f31b libidn2-2.3.7-1.fc40.x86_64.rpm +4fdafe5a28dc18a892713cc2071a46cbcb6561c9c62e10f20f04b0e562187228 libidn2-2.3.8-1.fc40.i686.rpm +63a08c0cf18474582a3e62367b5b4275d079e883e40f4cf32cab7afc316ec2dc libidn2-2.3.8-1.fc40.x86_64.rpm 98b0d9d25bd93c7061ce50480e214944a02d7de725e1d31f4461604380ffb74a libkcapi-1.5.0-4.fc40.x86_64.rpm 84977f5f157172dc7642a3f6602692bb6323b4b106c69f7081882e6c6a81a346 libkcapi-hasher-1.5.0-4.fc40.x86_64.rpm 906bb224af7b2e1ea64c258c6978a610b899b0af5be572ce1c09e36ec58b8a79 libkcapi-hmaccalc-1.5.0-4.fc40.x86_64.rpm @@ -245,6 +244,8 @@ a18edf32e89aefd453998d5d0ec3aa1ea193dac43f80b99db195abd7e8cf1a04 ncurses-libs-6 784e0fbc9ccb7087c10f4c41edbed13904f94244ff658f308614abe48cdf0d42 npth-1.7-1.fc40.x86_64.rpm f814bc09b50daaab468715088ec056373dbc209a5075306e4ce76f5c55eb2b42 nvme-cli-2.8-1.fc40.x86_64.rpm ecc7bc53e45b304272ed047ef681aec637eddae7a7ff0bc851665f3ac164f8ac openldap-2.6.8-2.fc40.x86_64.rpm +49e3e1c7d82ab28b1ab79bb2655a95cadeae2295f5543db8a07d74e090bcb90d openssh-9.6p1-2.fc40.x86_64.rpm +369b4d6e159a53afe9d2803d927f0523ceeae0822353aa8f0d81d0e3211b0788 openssh-server-9.6p1-2.fc40.x86_64.rpm bffa85f8feadf0bf5f7a8cea9ff9f5e49266959df6ae4d61cf929054c09ec2f8 openssl-libs-3.2.4-1.fc40.i686.rpm a1b67803e7afb5e16d977e49b8e63c50537bbaa6b261ab10348d55a54b1562dd openssl-libs-3.2.4-1.fc40.x86_64.rpm 9f0336deb6f1b1524ec48d837622e7e2291995369b0356d7ad1e1d427f3b659a os-prober-1.81-6.fc40.x86_64.rpm @@ -275,10 +276,10 @@ c03ba1c46e0e2dda36e654941f307aaa0d6574ee5143d6fec6e9af2bdf3252a2 popt-1.19-6.fc af85755cda79959a19161ebc26a45e507003298bd97b472b9ab0d512afa5e46a protobuf-c-1.5.0-3.fc40.x86_64.rpm 45ff2e9814aa059f323b23710c73309d41d36306667a3004f5fbb86b0cab4484 psmisc-23.6-6.fc40.x86_64.rpm c000cbb0a7df2c0c61559ab3f3732eacd163b171673298f4ec043cb6d223f364 publicsuffix-list-dafsa-20250116-1.fc40.noarch.rpm -7c703b431508f44c5184b5c1df052ed0f49b7439d68aa3597a9a57a5b26bd648 python-pip-wheel-23.3.2-2.fc40.noarch.rpm -15a80b975cc29fdbf3b71a0c8fa3f76a3fe722529036435b0cf7272f01a560c3 python-unversioned-command-3.12.9-1.fc40.noarch.rpm 870b11ae674851e6f9a02e650681c2e4a9fb1c91311beb944813ac6a2d4e15c9 python3-3.12.9-1.fc40.x86_64.rpm 2406c85716129d4183fcd2be8de2923770e8d6a12de270ac94cc427404a34a26 python3-libs-3.12.9-1.fc40.x86_64.rpm +7c703b431508f44c5184b5c1df052ed0f49b7439d68aa3597a9a57a5b26bd648 python-pip-wheel-23.3.2-2.fc40.noarch.rpm +15a80b975cc29fdbf3b71a0c8fa3f76a3fe722529036435b0cf7272f01a560c3 python-unversioned-command-3.12.9-1.fc40.noarch.rpm b593f10e736995a0a898d37a1e595ad04bf162e7f0e7c9994e3032a9d9bc8799 qemu-user-static-8.2.9-1.fc40.x86_64.rpm 72b6185e59a7b359df273e9fe27dc014c0856341abcd1c907c7810a77cc6980e qemu-user-static-aarch64-8.2.9-1.fc40.x86_64.rpm 7eace5bc3e601266452b8356207604012542a8cd019b576e6d2ab9306c6a8e4c qemu-user-static-alpha-8.2.9-1.fc40.x86_64.rpm @@ -339,17 +340,18 @@ e1d443f7dcaec55eedc34bb66dd798ba9901dba69a169cff46f6c45671a3b3fa unbound-anchor 945aa536bc30050abc1870cef167cb944cf78d6628923476db43201a0054574b util-linux-2.40.2-1.fc40.x86_64.rpm 7ec1b5df780c5a30f8e901179480125a6ea87f1f7bad3b69da7f4b351b88c3dd util-linux-core-2.40-0.9.rc1.fc40.x86_64.rpm b1aa4e816c01c08c18924865640f214f717cdfc66837e53a24b8edfb80a86f9d util-linux-core-2.40.2-1.fc40.x86_64.rpm -397636b0d14b32dd63a07aa7618d4844db60c02e63b46b1d352875d0d7a0b4b3 vim-common-9.1.1202-1.fc40.x86_64.rpm -86be9c9504795e7eaab2e275eb297aaedf90ea626af859995c511dce3c06624e vim-data-9.1.1202-1.fc40.noarch.rpm -d5a64a210ce25f4c22f987ca95f4dbd580ba5dd665544ef1960675668abee724 vim-enhanced-9.1.1202-1.fc40.x86_64.rpm -79312c8907531326438d3f85f8cfca2e2b2f88ed521bc57828a3db3fc283b59c vim-filesystem-9.1.1202-1.fc40.noarch.rpm +7c738289068791356ac633f968512021d125c7d2a858bf5493e14b4ce00c3f52 vim-common-9.1.1227-1.fc40.x86_64.rpm +80766fd967a7c24a543871996a0a857c38d3e7ac205fb3f6403ae9cb5529c424 vim-data-9.1.1227-1.fc40.noarch.rpm +d0f66fbd4e87a9245dd907a19ff90eb88bc60d312f3adfcd189eaf32884480c5 vim-enhanced-9.1.1227-1.fc40.x86_64.rpm +501d0bc28c36c713448570aa4a8a35789bc11c490f93ba4269767043251cd326 vim-filesystem-9.1.1227-1.fc40.noarch.rpm +37abef83e8927b4b48f69fcbdcc249d349c6029cc669401676d01f0ea326999e WALinuxAgent-udev-2.10.0.8-2.fc40.noarch.rpm 69fd53fe41a8811e904b5429b1934a413d88978ec54d5c9e64370be32cbfc2ef wget2-2.2.0-2.fc40.x86_64.rpm a00cc0a87c60ffbf5495a9796ac7074e6a47e0bebbb8c137d902014cd7ff5a30 wget2-libs-2.2.0-2.fc40.x86_64.rpm 09822d8d386dc81619639415a211b34592b0c5d43f7be288691cc4d933a0542c wget2-wget-2.2.0-2.fc40.x86_64.rpm cf0306ceed1c6b3be39060d85f16b1953b464d3a625488b170d3b7aadf600645 which-2.21-41.fc40.x86_64.rpm 4ede95a2fa3bc0ae617c8bf3a375b800163d58733b4829b15d9f038505d79fee whois-nls-5.5.20-3.fc40.noarch.rpm e2195010e857f56b19246f8b821f9391922880b7691b3728a413f540edc890a6 xkeyboard-config-2.41-1.fc40.noarch.rpm -cba0417e89e6a56304bf41dd315a518e0fadf0e8f4572b2cf35d5ca621bee847 xxd-9.1.1202-1.fc40.x86_64.rpm +a9f84423ade79c3577ac2fa302e5e290f01a7432f86d48ba168256cf31fc2807 xxd-9.1.1227-1.fc40.x86_64.rpm ee599a1c4d7ee635e54ec137af4dded83f433b9c8a5976f75ecdcd000b5246e3 xz-5.4.6-3.fc40.x86_64.rpm b92ef78d8ab424c22130e457d0ef691d8197bff61c3b8852205d1b02baba3819 xz-libs-5.4.6-3.fc40.i686.rpm b6ee44b3d7e494b0364f26b7d0b169a8092180af787423cd5e8a47dc0f738a66 xz-libs-5.4.6-3.fc40.x86_64.rpm diff --git a/image/mirror/packages.txt b/image/mirror/packages.txt index fd79a427a..9d6240a2e 100644 --- a/image/mirror/packages.txt +++ b/image/mirror/packages.txt @@ -19,6 +19,7 @@ mokutil nano nano-default-editor nvme-cli +openssh-server passt-selinux passwd podman diff --git a/image/sysroot-tree/etc/ssh/sshd_config b/image/sysroot-tree/etc/ssh/sshd_config new file mode 100644 index 000000000..dec4fd51d --- /dev/null +++ b/image/sysroot-tree/etc/ssh/sshd_config @@ -0,0 +1,4 @@ +HostKey /run/ssh/ssh_host_ecdsa_key +TrustedUserCAKeys /run/ssh/ssh_ca.pub +PasswordAuthentication no +ChallengeResponseAuthentication no diff --git a/rfc/016-node-access.md b/rfc/016-node-access.md index 0c6875c48..abc495400 100644 --- a/rfc/016-node-access.md +++ b/rfc/016-node-access.md @@ -1,7 +1,3 @@ ---- -status: approved, not implemented ---- - # RFC 016: Node Access ## Background diff --git a/terraform/infrastructure/aws/main.tf b/terraform/infrastructure/aws/main.tf index 37d63896b..42b4061ea 100644 --- a/terraform/infrastructure/aws/main.tf +++ b/terraform/infrastructure/aws/main.tf @@ -29,6 +29,7 @@ locals { { name = "recovery", port = "9999", health_check = "TCP" }, { name = "join", port = "30090", health_check = "TCP" }, var.debug ? [{ name = "debugd", port = "4000", health_check = "TCP" }] : [], + var.emergency_ssh ? [{ name = "ssh", port = "22", health_check = "TCP" }] : [], ]) target_group_arns = { control-plane : [ diff --git a/terraform/infrastructure/aws/outputs.tf b/terraform/infrastructure/aws/outputs.tf index 62f220619..b362ff094 100644 --- a/terraform/infrastructure/aws/outputs.tf +++ b/terraform/infrastructure/aws/outputs.tf @@ -45,3 +45,8 @@ output "ip_cidr_node" { value = local.cidr_vpc_subnet_nodes description = "CIDR block of the node network." } + +output "loadbalancer_address" { + value = aws_lb.front_end.dns_name + description = "Public loadbalancer address." +} diff --git a/terraform/infrastructure/aws/variables.tf b/terraform/infrastructure/aws/variables.tf index 67d0ec4d3..d55dedabb 100644 --- a/terraform/infrastructure/aws/variables.tf +++ b/terraform/infrastructure/aws/variables.tf @@ -85,3 +85,9 @@ variable "additional_tags" { default = {} description = "Additional tags that should be applied to created resources." } + +variable "emergency_ssh" { + type = bool + default = false + description = "Wether to expose the SSH port through the public load balancer." +} diff --git a/terraform/infrastructure/azure/main.tf b/terraform/infrastructure/azure/main.tf index 40ff289b3..59286af63 100644 --- a/terraform/infrastructure/azure/main.tf +++ b/terraform/infrastructure/azure/main.tf @@ -40,6 +40,7 @@ locals { { name = "recovery", port = "9999", health_check_protocol = "Tcp", path = null, priority = 104 }, { name = "join", port = "30090", health_check_protocol = "Tcp", path = null, priority = 105 }, var.debug ? [{ name = "debugd", port = "4000", health_check_protocol = "Tcp", path = null, priority = 106 }] : [], + var.emergency_ssh ? [{ name = "ssh", port = "22", health_check_protocol = "Tcp", path = null, priority = 107 }] : [], ]) // wildcard_lb_dns_name is the DNS name of the load balancer with a wildcard for the name. // example: given "name-1234567890.location.cloudapp.azure.com" it will return "*.location.cloudapp.azure.com" diff --git a/terraform/infrastructure/azure/outputs.tf b/terraform/infrastructure/azure/outputs.tf index 945c793b8..b3e5d844b 100644 --- a/terraform/infrastructure/azure/outputs.tf +++ b/terraform/infrastructure/azure/outputs.tf @@ -47,6 +47,11 @@ output "ip_cidr_node" { description = "CIDR block of the node network." } +output "loadbalancer_address" { + value = azurerm_public_ip.loadbalancer_ip[0].fqdn + description = "Public loadbalancer address." +} + # Azure-specific outputs output "attestation_url" { diff --git a/terraform/infrastructure/azure/variables.tf b/terraform/infrastructure/azure/variables.tf index a3ab1fd0b..64a02a35d 100644 --- a/terraform/infrastructure/azure/variables.tf +++ b/terraform/infrastructure/azure/variables.tf @@ -101,3 +101,9 @@ variable "additional_tags" { default = {} description = "Additional tags that should be applied to created resources." } + +variable "emergency_ssh" { + type = bool + default = false + description = "Wether to expose the SSH port through the public load balancer." +} diff --git a/terraform/infrastructure/gcp/main.tf b/terraform/infrastructure/gcp/main.tf index cd66002d9..f3af09a5a 100644 --- a/terraform/infrastructure/gcp/main.tf +++ b/terraform/infrastructure/gcp/main.tf @@ -40,6 +40,7 @@ locals { { name = "recovery", port = "9999", health_check = "TCP" }, { name = "join", port = "30090", health_check = "TCP" }, var.debug ? [{ name = "debugd", port = "4000", health_check = "TCP" }] : [], + var.emergency_ssh ? [{ name = "ssh", port = "22", health_check = "TCP" }] : [], ]) node_groups_by_role = { for name, node_group in var.node_groups : node_group.role => name... diff --git a/terraform/infrastructure/gcp/outputs.tf b/terraform/infrastructure/gcp/outputs.tf index cbdf9164a..8525bdb13 100644 --- a/terraform/infrastructure/gcp/outputs.tf +++ b/terraform/infrastructure/gcp/outputs.tf @@ -45,6 +45,11 @@ output "ip_cidr_node" { description = "CIDR block of the node network." } +output "loadbalancer_address" { + value = var.internal_load_balancer ? google_compute_address.loadbalancer_ip_internal[0].address : google_compute_global_address.loadbalancer_ip[0].address + description = "Public loadbalancer address." +} + # GCP-specific outputs output "project" { diff --git a/terraform/infrastructure/gcp/variables.tf b/terraform/infrastructure/gcp/variables.tf index 601394a55..b62b975db 100644 --- a/terraform/infrastructure/gcp/variables.tf +++ b/terraform/infrastructure/gcp/variables.tf @@ -75,3 +75,9 @@ variable "additional_labels" { default = {} description = "Additional labels that should be given to created recources." } + +variable "emergency_ssh" { + type = bool + default = false + description = "Wether to expose the SSH port through the public load balancer." +} diff --git a/terraform/infrastructure/openstack/main.tf b/terraform/infrastructure/openstack/main.tf index 9a56bfdda..442866d4c 100644 --- a/terraform/infrastructure/openstack/main.tf +++ b/terraform/infrastructure/openstack/main.tf @@ -43,6 +43,7 @@ locals { { name = "recovery", port = "9999", health_check = "TCP" }, { name = "join", port = "30090", health_check = "TCP" }, var.debug ? [{ name = "debugd", port = "4000", health_check = "TCP" }] : [], + var.emergency_ssh ? [{ name = "ssh", port = "22", health_check = "TCP" }] : [], ]) cidr_vpc_subnet_nodes = "192.168.178.0/24" cidr_vpc_subnet_lbs = "192.168.177.0/24" diff --git a/terraform/infrastructure/openstack/outputs.tf b/terraform/infrastructure/openstack/outputs.tf index be45ec065..810b11977 100644 --- a/terraform/infrastructure/openstack/outputs.tf +++ b/terraform/infrastructure/openstack/outputs.tf @@ -36,6 +36,11 @@ output "ip_cidr_node" { description = "CIDR block of the node network." } +output "loadbalancer_address" { + value = openstack_networking_floatingip_v2.public_ip.address + description = "Public loadbalancer address." +} + # OpenStack-specific outputs output "network_id" { diff --git a/terraform/infrastructure/openstack/variables.tf b/terraform/infrastructure/openstack/variables.tf index 12242f08b..3afa8c97a 100644 --- a/terraform/infrastructure/openstack/variables.tf +++ b/terraform/infrastructure/openstack/variables.tf @@ -71,3 +71,9 @@ variable "stackit_project_id" { type = string description = "STACKIT project ID." } + +variable "emergency_ssh" { + type = bool + default = false + description = "Wether to expose the SSH port through the public load balancer." +} From 83e08e3e37b4ff744e7032e3be8a777e34504399 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 25 Mar 2025 12:34:08 +0100 Subject: [PATCH 174/311] deps: update golangci/golangci-lint to v2.0.1 (#3712) * deps: update golangci/golangci-lint to v2.0.1 * deps: tidy all modules --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: edgelessci --- bazel/toolchains/ci_deps.bzl | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/bazel/toolchains/ci_deps.bzl b/bazel/toolchains/ci_deps.bzl index efb8eaac2..2852a801d 100644 --- a/bazel/toolchains/ci_deps.bzl +++ b/bazel/toolchains/ci_deps.bzl @@ -223,45 +223,45 @@ def _golangci_lint_deps(): name = "com_github_golangci_golangci_lint_linux_amd64", build_file = "//bazel/toolchains:BUILD.golangci.bazel", urls = [ - "https://cdn.confidential.cloud/constellation/cas/sha256/50ebc01988429e07d29a556417aaf1ef4df441a7e88645617cf5db3033c0e37b", - "https://github.com/golangci/golangci-lint/releases/download/v2.0.0/golangci-lint-2.0.0-linux-amd64.tar.gz", + "https://cdn.confidential.cloud/constellation/cas/sha256/9bfc38d7869834443c03ef5f9977e78207cca386a89c2ad0ecd2bd85ccdabe29", + "https://github.com/golangci/golangci-lint/releases/download/v2.0.1/golangci-lint-2.0.1-linux-amd64.tar.gz", ], - strip_prefix = "golangci-lint-2.0.0-linux-amd64", + strip_prefix = "golangci-lint-2.0.1-linux-amd64", type = "tar.gz", - sha256 = "50ebc01988429e07d29a556417aaf1ef4df441a7e88645617cf5db3033c0e37b", + sha256 = "9bfc38d7869834443c03ef5f9977e78207cca386a89c2ad0ecd2bd85ccdabe29", ) http_archive( name = "com_github_golangci_golangci_lint_linux_arm64", build_file = "//bazel/toolchains:BUILD.golangci.bazel", urls = [ - "https://cdn.confidential.cloud/constellation/cas/sha256/00cd307e8cb20001cf0655b5a723dd678eb2b578151afab798312cd4a5f5eae1", - "https://github.com/golangci/golangci-lint/releases/download/v2.0.0/golangci-lint-2.0.0-linux-arm64.tar.gz", + "https://cdn.confidential.cloud/constellation/cas/sha256/e5cee439b9d16eb2bf5ddc7e4e8b2d9465fb87c051fa307056b192a6f49b3796", + "https://github.com/golangci/golangci-lint/releases/download/v2.0.1/golangci-lint-2.0.1-linux-arm64.tar.gz", ], - strip_prefix = "golangci-lint-2.0.0-linux-arm64", + strip_prefix = "golangci-lint-2.0.1-linux-arm64", type = "tar.gz", - sha256 = "00cd307e8cb20001cf0655b5a723dd678eb2b578151afab798312cd4a5f5eae1", + sha256 = "e5cee439b9d16eb2bf5ddc7e4e8b2d9465fb87c051fa307056b192a6f49b3796", ) http_archive( name = "com_github_golangci_golangci_lint_darwin_amd64", build_file = "//bazel/toolchains:BUILD.golangci.bazel", urls = [ - "https://cdn.confidential.cloud/constellation/cas/sha256/07f81ff3c7a5078a36ac90e49c0dc8629625aa53efbdb463517e5f5929113e76", - "https://github.com/golangci/golangci-lint/releases/download/v2.0.0/golangci-lint-2.0.0-darwin-amd64.tar.gz", + "https://cdn.confidential.cloud/constellation/cas/sha256/ab6cfa62b3e71f14e05fae450537ef94c68cc19d3f2153e59644b0671c386557", + "https://github.com/golangci/golangci-lint/releases/download/v2.0.1/golangci-lint-2.0.1-darwin-amd64.tar.gz", ], - strip_prefix = "golangci-lint-2.0.0-darwin-amd64", + strip_prefix = "golangci-lint-2.0.1-darwin-amd64", type = "tar.gz", - sha256 = "07f81ff3c7a5078a36ac90e49c0dc8629625aa53efbdb463517e5f5929113e76", + sha256 = "ab6cfa62b3e71f14e05fae450537ef94c68cc19d3f2153e59644b0671c386557", ) http_archive( name = "com_github_golangci_golangci_lint_darwin_arm64", build_file = "//bazel/toolchains:BUILD.golangci.bazel", urls = [ - "https://cdn.confidential.cloud/constellation/cas/sha256/ee63f34045256370db6880500fe4f2904bb004e1a2591b09feb28642997d29d8", - "https://github.com/golangci/golangci-lint/releases/download/v2.0.0/golangci-lint-2.0.0-darwin-arm64.tar.gz", + "https://cdn.confidential.cloud/constellation/cas/sha256/a51f5f2f2b20ce481c33a6d34b94076d94389a835c646c77f356ea022d610c15", + "https://github.com/golangci/golangci-lint/releases/download/v2.0.1/golangci-lint-2.0.1-darwin-arm64.tar.gz", ], - strip_prefix = "golangci-lint-2.0.0-darwin-arm64", + strip_prefix = "golangci-lint-2.0.1-darwin-arm64", type = "tar.gz", - sha256 = "ee63f34045256370db6880500fe4f2904bb004e1a2591b09feb28642997d29d8", + sha256 = "a51f5f2f2b20ce481c33a6d34b94076d94389a835c646c77f356ea022d610c15", ) def _buf_deps(): From 66815a4a4728578e288cb90c68e5769d8c98c2d2 Mon Sep 17 00:00:00 2001 From: Leonard Cohnen Date: Tue, 25 Mar 2025 14:13:38 +0100 Subject: [PATCH 175/311] gcp: support projects with no default permissions (#3656) * helm/gcp: use service account in operator and joinservice * helm: format operator testdata * terraform/iam: create additional service account for VMs This service account is used in the following commits and is attached to the VMs * config: pass VM service account from iam create to cluster create via config * cli/iamcreate: limit name prefix length * docs: add minimal gcp IAM permissions --- .../constellation_iam_create/action.yml | 1 + .github/actions/e2e_test/action.yml | 6 + cli/internal/cloudcmd/iam.go | 8 +- cli/internal/cloudcmd/iamupgrade.go | 3 + cli/internal/cloudcmd/tfvars.go | 2 + cli/internal/cmd/apply_test.go | 1 + cli/internal/cmd/iamcreate.go | 3 + cli/internal/cmd/iamcreate_test.go | 140 +++++++------- cli/internal/cmd/iamcreategcp.go | 35 +++- cli/internal/cmd/init_test.go | 1 + cli/internal/terraform/terraform.go | 14 +- cli/internal/terraform/terraform_test.go | 36 +++- cli/internal/terraform/variables.go | 5 + cli/internal/terraform/variables_test.go | 32 +++- docs/docs/getting-started/first-steps.md | 2 +- docs/docs/getting-started/install.md | 3 + docs/docs/reference/cli.md | 14 +- docs/docs/workflows/config.md | 2 +- internal/config/config.go | 4 + internal/config/config_doc.go | 21 ++- internal/config/config_test.go | 1 + .../join-service/templates/daemonset.yaml | 10 + .../templates/deployment.yaml | 9 + .../templates/deployment.yaml | 171 +++++++++--------- .../join-service/templates/daemonset.yaml | 10 + .../templates/deployment.yaml | 171 +++++++++--------- .../join-service/templates/daemonset.yaml | 10 + .../templates/deployment.yaml | 171 +++++++++--------- .../join-service/templates/daemonset.yaml | 10 + .../templates/deployment.yaml | 171 +++++++++--------- .../join-service/templates/daemonset.yaml | 10 + .../templates/deployment.yaml | 9 + .../join-service/templates/daemonset.yaml | 10 + .../config/manager/manager.yaml | 10 + .../examples/full/gcp/main.tf | 11 +- terraform/infrastructure/gcp/main.tf | 45 ++--- .../gcp/modules/instance_group/main.tf | 14 +- .../gcp/modules/instance_group/variables.tf | 6 + terraform/infrastructure/gcp/variables.tf | 5 + terraform/infrastructure/iam/gcp/main.tf | 37 +++- terraform/infrastructure/iam/gcp/outputs.tf | 6 + terraform/infrastructure/iam/gcp/variables.tf | 7 +- 42 files changed, 771 insertions(+), 466 deletions(-) diff --git a/.github/actions/constellation_iam_create/action.yml b/.github/actions/constellation_iam_create/action.yml index 91282a927..6df998872 100644 --- a/.github/actions/constellation_iam_create/action.yml +++ b/.github/actions/constellation_iam_create/action.yml @@ -102,6 +102,7 @@ runs: --tf-log=DEBUG \ --yes ${extraFlags} + # TODO(@3u13r): Replace deprecated --serviceAccountID with --prefix - name: Constellation iam create gcp shell: bash if: inputs.cloudProvider == 'gcp' diff --git a/.github/actions/e2e_test/action.yml b/.github/actions/e2e_test/action.yml index 835955204..0b032b91f 100644 --- a/.github/actions/e2e_test/action.yml +++ b/.github/actions/e2e_test/action.yml @@ -258,6 +258,12 @@ runs: run: | uuid=$(uuidgen | tr "[:upper:]" "[:lower:]") uuid=${uuid%%-*} + + # GCP has a 6 character limit the additional uuid prefix since the full prefix length has a maximum of 24 + if [[ ${{ inputs.cloudProvider }} == 'gcp' ]]; then + uuid=${uuid:0:6} + fi + echo "uuid=${uuid}" | tee -a $GITHUB_OUTPUT echo "prefix=e2e-${{ github.run_id }}-${{ github.run_attempt }}-${uuid}" | tee -a $GITHUB_OUTPUT diff --git a/cli/internal/cloudcmd/iam.go b/cli/internal/cloudcmd/iam.go index e73f2854d..0046c27e3 100644 --- a/cli/internal/cloudcmd/iam.go +++ b/cli/internal/cloudcmd/iam.go @@ -91,6 +91,7 @@ type GCPIAMConfig struct { Zone string ProjectID string ServiceAccountID string + NamePrefix string } // AzureIAMConfig holds the necessary values for Azure IAM configuration. @@ -141,6 +142,7 @@ func (c *IAMCreator) createGCP(ctx context.Context, cl tfIAMClient, opts *IAMCon vars := terraform.GCPIAMVariables{ ServiceAccountID: opts.GCP.ServiceAccountID, + NamePrefix: opts.GCP.NamePrefix, Project: opts.GCP.ProjectID, Region: opts.GCP.Region, Zone: opts.GCP.Zone, @@ -158,7 +160,8 @@ func (c *IAMCreator) createGCP(ctx context.Context, cl tfIAMClient, opts *IAMCon return IAMOutput{ CloudProvider: cloudprovider.GCP, GCPOutput: GCPIAMOutput{ - ServiceAccountKey: iamOutput.GCP.SaKey, + ServiceAccountKey: iamOutput.GCP.SaKey, + IAMServiceAccountVM: iamOutput.GCP.ServiceAccountVMMailAddress, }, }, nil } @@ -232,7 +235,8 @@ type IAMOutput struct { // GCPIAMOutput contains the output information of a GCP IAM configuration. type GCPIAMOutput struct { - ServiceAccountKey string `json:"serviceAccountID,omitempty"` + ServiceAccountKey string `json:"serviceAccountID,omitempty"` + IAMServiceAccountVM string `json:"iamServiceAccountVM,omitempty"` } // AzureIAMOutput contains the output information of a Microsoft Azure IAM configuration. diff --git a/cli/internal/cloudcmd/iamupgrade.go b/cli/internal/cloudcmd/iamupgrade.go index 729af5d29..642903294 100644 --- a/cli/internal/cloudcmd/iamupgrade.go +++ b/cli/internal/cloudcmd/iamupgrade.go @@ -22,6 +22,9 @@ import ( // UpgradeRequiresIAMMigration returns true if the given cloud provider requires an IAM migration. func UpgradeRequiresIAMMigration(provider cloudprovider.Provider) bool { switch provider { + case cloudprovider.GCP: + // TODO(@3u13r): remove this case after the v2.22.0 release + return true default: return false } diff --git a/cli/internal/cloudcmd/tfvars.go b/cli/internal/cloudcmd/tfvars.go index aab752aca..98bb7bf55 100644 --- a/cli/internal/cloudcmd/tfvars.go +++ b/cli/internal/cloudcmd/tfvars.go @@ -231,6 +231,7 @@ func gcpTerraformVars(conf *config.Config, imageRef string) *terraform.GCPCluste InternalLoadBalancer: conf.InternalLoadBalancer, CCTechnology: ccTech, AdditionalLabels: conf.Tags, + IAMServiceAccountVM: conf.Provider.GCP.IAMServiceAccountVM, } } @@ -240,6 +241,7 @@ func gcpTerraformIAMVars(conf *config.Config, oldVars terraform.GCPIAMVariables) Region: conf.Provider.GCP.Region, Zone: conf.Provider.GCP.Zone, ServiceAccountID: oldVars.ServiceAccountID, + NamePrefix: oldVars.NamePrefix, } } diff --git a/cli/internal/cmd/apply_test.go b/cli/internal/cmd/apply_test.go index 17c03f33f..6988da6cb 100644 --- a/cli/internal/cmd/apply_test.go +++ b/cli/internal/cmd/apply_test.go @@ -256,6 +256,7 @@ func TestValidateInputs(t *testing.T) { ClientX509CertURL: "client_cert", })) cfg.Provider.GCP.ServiceAccountKeyPath = "saKey.json" + cfg.Provider.GCP.IAMServiceAccountVM = "example@example.com" } require.NoError(fh.WriteYAML(constants.ConfigFilename, cfg)) diff --git a/cli/internal/cmd/iamcreate.go b/cli/internal/cmd/iamcreate.go index b2e44f4a2..c70744cdc 100644 --- a/cli/internal/cmd/iamcreate.go +++ b/cli/internal/cmd/iamcreate.go @@ -29,6 +29,9 @@ var ( regionRegex = regexp.MustCompile(`^\w+-\w+[0-9]$`) // Source: https://cloud.google.com/resource-manager/reference/rest/v1/projects. gcpIDRegex = regexp.MustCompile(`^[a-z][-a-z0-9]{4,28}[a-z0-9]$`) + + // We currently append 6 characters to the prefix, therefore we remove 6 characters from the gcpIDRegex. + gcpPrefixRegex = regexp.MustCompile(`^[a-z][-a-z0-9]{4,22}[a-z0-9]$`) ) // newIAMCreateCmd returns a new cobra.Command for the iam create parent command. It needs another verb, and does nothing on its own. diff --git a/cli/internal/cmd/iamcreate_test.go b/cli/internal/cmd/iamcreate_test.go index 3a9c83051..b7d33c6c7 100644 --- a/cli/internal/cmd/iamcreate_test.go +++ b/cli/internal/cmd/iamcreate_test.go @@ -456,6 +456,7 @@ func TestIAMCreateGCP(t *testing.T) { creator *stubIAMCreator zoneFlag string serviceAccountIDFlag string + namePrefixFlag string projectIDFlag string yesFlag bool updateConfigFlag bool @@ -466,6 +467,14 @@ func TestIAMCreateGCP(t *testing.T) { wantErr bool }{ "iam create gcp": { + setupFs: defaultFs, + creator: &stubIAMCreator{id: validIAMIDFile}, + zoneFlag: "europe-west1-a", + namePrefixFlag: "constell-test", + projectIDFlag: "constell-1234", + yesFlag: true, + }, + "iam create gcp with deprecated serice account flag": { setupFs: defaultFs, creator: &stubIAMCreator{id: validIAMIDFile}, zoneFlag: "europe-west1-a", @@ -474,91 +483,91 @@ func TestIAMCreateGCP(t *testing.T) { yesFlag: true, }, "iam create gcp with existing config": { - setupFs: defaultFs, - creator: &stubIAMCreator{id: validIAMIDFile}, - zoneFlag: "europe-west1-a", - serviceAccountIDFlag: "constell-test", - projectIDFlag: "constell-1234", - yesFlag: true, - existingConfigFiles: []string{constants.ConfigFilename}, + setupFs: defaultFs, + creator: &stubIAMCreator{id: validIAMIDFile}, + zoneFlag: "europe-west1-a", + namePrefixFlag: "constell-test", + projectIDFlag: "constell-1234", + yesFlag: true, + existingConfigFiles: []string{constants.ConfigFilename}, }, "iam create gcp --update-config": { - setupFs: defaultFs, - creator: &stubIAMCreator{id: validIAMIDFile}, - zoneFlag: "europe-west1-a", - serviceAccountIDFlag: "constell-test", - projectIDFlag: "constell-1234", - updateConfigFlag: true, - yesFlag: true, - existingConfigFiles: []string{constants.ConfigFilename}, + setupFs: defaultFs, + creator: &stubIAMCreator{id: validIAMIDFile}, + zoneFlag: "europe-west1-a", + namePrefixFlag: "constell-test", + projectIDFlag: "constell-1234", + updateConfigFlag: true, + yesFlag: true, + existingConfigFiles: []string{constants.ConfigFilename}, }, "iam create gcp existing terraform dir": { - setupFs: defaultFs, - creator: &stubIAMCreator{id: validIAMIDFile}, - zoneFlag: "europe-west1-a", - serviceAccountIDFlag: "constell-test", - projectIDFlag: "constell-1234", + setupFs: defaultFs, + creator: &stubIAMCreator{id: validIAMIDFile}, + zoneFlag: "europe-west1-a", + namePrefixFlag: "constell-test", + projectIDFlag: "constell-1234", existingDirs: []string{constants.TerraformIAMWorkingDir}, yesFlag: true, wantErr: true, }, "iam create gcp invalid b64": { - setupFs: defaultFs, - creator: &stubIAMCreator{id: invalidIAMIDFile}, - zoneFlag: "europe-west1-a", - serviceAccountIDFlag: "constell-test", - projectIDFlag: "constell-1234", - yesFlag: true, - wantErr: true, + setupFs: defaultFs, + creator: &stubIAMCreator{id: invalidIAMIDFile}, + zoneFlag: "europe-west1-a", + namePrefixFlag: "constell-test", + projectIDFlag: "constell-1234", + yesFlag: true, + wantErr: true, }, "interactive": { - setupFs: defaultFs, - creator: &stubIAMCreator{id: validIAMIDFile}, - zoneFlag: "europe-west1-a", - serviceAccountIDFlag: "constell-test", - projectIDFlag: "constell-1234", - stdin: "yes\n", + setupFs: defaultFs, + creator: &stubIAMCreator{id: validIAMIDFile}, + zoneFlag: "europe-west1-a", + namePrefixFlag: "constell-test", + projectIDFlag: "constell-1234", + stdin: "yes\n", }, "interactive update config": { - setupFs: defaultFs, - creator: &stubIAMCreator{id: validIAMIDFile}, - zoneFlag: "europe-west1-a", - serviceAccountIDFlag: "constell-test", - projectIDFlag: "constell-1234", - stdin: "yes\n", - updateConfigFlag: true, - existingConfigFiles: []string{constants.ConfigFilename}, + setupFs: defaultFs, + creator: &stubIAMCreator{id: validIAMIDFile}, + zoneFlag: "europe-west1-a", + namePrefixFlag: "constell-test", + projectIDFlag: "constell-1234", + stdin: "yes\n", + updateConfigFlag: true, + existingConfigFiles: []string{constants.ConfigFilename}, }, "interactive abort": { - setupFs: defaultFs, - creator: &stubIAMCreator{id: validIAMIDFile}, - zoneFlag: "europe-west1-a", - serviceAccountIDFlag: "constell-test", - projectIDFlag: "constell-1234", - stdin: "no\n", - wantAbort: true, + setupFs: defaultFs, + creator: &stubIAMCreator{id: validIAMIDFile}, + zoneFlag: "europe-west1-a", + namePrefixFlag: "constell-test", + projectIDFlag: "constell-1234", + stdin: "no\n", + wantAbort: true, }, "interactive abort update config": { - setupFs: defaultFs, - creator: &stubIAMCreator{id: validIAMIDFile}, - zoneFlag: "europe-west1-a", - serviceAccountIDFlag: "constell-test", - projectIDFlag: "constell-1234", - stdin: "no\n", - wantAbort: true, - updateConfigFlag: true, - existingConfigFiles: []string{constants.ConfigFilename}, + setupFs: defaultFs, + creator: &stubIAMCreator{id: validIAMIDFile}, + zoneFlag: "europe-west1-a", + namePrefixFlag: "constell-test", + projectIDFlag: "constell-1234", + stdin: "no\n", + wantAbort: true, + updateConfigFlag: true, + existingConfigFiles: []string{constants.ConfigFilename}, }, "unwritable fs": { - setupFs: readOnlyFs, - creator: &stubIAMCreator{id: validIAMIDFile}, - zoneFlag: "europe-west1-a", - serviceAccountIDFlag: "constell-test", - projectIDFlag: "constell-1234", - yesFlag: true, - updateConfigFlag: true, - wantErr: true, + setupFs: readOnlyFs, + creator: &stubIAMCreator{id: validIAMIDFile}, + zoneFlag: "europe-west1-a", + namePrefixFlag: "constell-test", + projectIDFlag: "constell-1234", + yesFlag: true, + updateConfigFlag: true, + wantErr: true, }, } @@ -590,6 +599,7 @@ func TestIAMCreateGCP(t *testing.T) { flags: gcpIAMCreateFlags{ zone: tc.zoneFlag, serviceAccountID: tc.serviceAccountIDFlag, + namePrefix: tc.serviceAccountIDFlag, projectID: tc.projectIDFlag, }, }, diff --git a/cli/internal/cmd/iamcreategcp.go b/cli/internal/cmd/iamcreategcp.go index b6c55e5d1..d957f7424 100644 --- a/cli/internal/cmd/iamcreategcp.go +++ b/cli/internal/cmd/iamcreategcp.go @@ -31,13 +31,19 @@ func newIAMCreateGCPCmd() *cobra.Command { cmd.Flags().String("zone", "", "GCP zone the cluster will be deployed in (required)\n"+ "Find a list of available zones here: https://cloud.google.com/compute/docs/regions-zones#available") must(cobra.MarkFlagRequired(cmd.Flags(), "zone")) - cmd.Flags().String("serviceAccountID", "", "ID for the service account that will be created (required)\n"+ - "Must be 6 to 30 lowercase letters, digits, or hyphens.") - must(cobra.MarkFlagRequired(cmd.Flags(), "serviceAccountID")) + + cmd.Flags().String("serviceAccountID", "", "[Deprecated use \"--prefix\"]ID for the service account that will be created (required)\n"+ + "Must be 6 to 30 lowercase letters, digits, or hyphens. This flag is mutually exclusive with --prefix.") + cmd.Flags().String("prefix", "", "Prefix for the service account ID and VM ID that will be created (required)\n"+ + "Must be letters, digits, or hyphens.") + cmd.Flags().String("projectID", "", "ID of the GCP project the configuration will be created in (required)\n"+ "Find it on the welcome screen of your project: https://console.cloud.google.com/welcome") must(cobra.MarkFlagRequired(cmd.Flags(), "projectID")) + cmd.MarkFlagsMutuallyExclusive([]string{"prefix", "serviceAccountID"}...) + must(cmd.Flags().MarkDeprecated("serviceAccountID", "use --prefix instead")) + return cmd } @@ -53,6 +59,7 @@ func runIAMCreateGCP(cmd *cobra.Command, _ []string) error { type gcpIAMCreateFlags struct { rootFlags serviceAccountID string + namePrefix string zone string region string projectID string @@ -91,9 +98,18 @@ func (f *gcpIAMCreateFlags) parse(flags *pflag.FlagSet) error { if err != nil { return fmt.Errorf("getting 'serviceAccountID' flag: %w", err) } - if !gcpIDRegex.MatchString(f.serviceAccountID) { + if f.serviceAccountID != "" && !gcpIDRegex.MatchString(f.serviceAccountID) { return fmt.Errorf("serviceAccountID %q doesn't match %s", f.serviceAccountID, gcpIDRegex) } + + f.namePrefix, err = flags.GetString("prefix") + if err != nil { + return fmt.Errorf("getting 'prefix' flag: %w", err) + } + if f.namePrefix != "" && !gcpPrefixRegex.MatchString(f.namePrefix) { + return fmt.Errorf("prefix %q doesn't match %s", f.namePrefix, gcpIDRegex) + } + return nil } @@ -109,13 +125,19 @@ func (c *gcpIAMCreator) getIAMConfigOptions() *cloudcmd.IAMConfigOptions { Region: c.flags.region, ProjectID: c.flags.projectID, ServiceAccountID: c.flags.serviceAccountID, + NamePrefix: c.flags.namePrefix, }, } } func (c *gcpIAMCreator) printConfirmValues(cmd *cobra.Command) { cmd.Printf("Project ID:\t\t%s\n", c.flags.projectID) - cmd.Printf("Service Account ID:\t%s\n", c.flags.serviceAccountID) + if c.flags.namePrefix != "" { + cmd.Printf("Name Prefix:\t\t%s\n", c.flags.namePrefix) + } + if c.flags.serviceAccountID != "" { + cmd.Printf("Service Account ID:\t%s\n", c.flags.serviceAccountID) + } cmd.Printf("Region:\t\t\t%s\n", c.flags.region) cmd.Printf("Zone:\t\t\t%s\n\n", c.flags.zone) } @@ -127,11 +149,12 @@ func (c *gcpIAMCreator) printOutputValues(cmd *cobra.Command, _ cloudcmd.IAMOutp cmd.Printf("serviceAccountKeyPath:\t%s\n\n", c.flags.pathPrefixer.PrefixPrintablePath(constants.GCPServiceAccountKeyFilename)) } -func (c *gcpIAMCreator) writeOutputValuesToConfig(conf *config.Config, _ cloudcmd.IAMOutput) { +func (c *gcpIAMCreator) writeOutputValuesToConfig(conf *config.Config, out cloudcmd.IAMOutput) { conf.Provider.GCP.Project = c.flags.projectID conf.Provider.GCP.ServiceAccountKeyPath = constants.GCPServiceAccountKeyFilename // File was created in workspace, so only the filename is needed. conf.Provider.GCP.Region = c.flags.region conf.Provider.GCP.Zone = c.flags.zone + conf.Provider.GCP.IAMServiceAccountVM = out.GCPOutput.IAMServiceAccountVM for groupName, group := range conf.NodeGroups { group.Zone = c.flags.zone conf.NodeGroups[groupName] = group diff --git a/cli/internal/cmd/init_test.go b/cli/internal/cmd/init_test.go index 568c31ff8..524092783 100644 --- a/cli/internal/cmd/init_test.go +++ b/cli/internal/cmd/init_test.go @@ -539,6 +539,7 @@ func defaultConfigWithExpectedMeasurements(t *testing.T, conf *config.Config, cs conf.Provider.GCP.Project = "test-project" conf.Provider.GCP.Zone = "test-zone" conf.Provider.GCP.ServiceAccountKeyPath = "test-key-path" + conf.Provider.GCP.IAMServiceAccountVM = "example@example.com" conf.Attestation.GCPSEVSNP.Measurements[4] = measurements.WithAllBytes(0x44, measurements.Enforce, measurements.PCRMeasurementLength) conf.Attestation.GCPSEVSNP.Measurements[9] = measurements.WithAllBytes(0x11, measurements.Enforce, measurements.PCRMeasurementLength) conf.Attestation.GCPSEVSNP.Measurements[12] = measurements.WithAllBytes(0xcc, measurements.Enforce, measurements.PCRMeasurementLength) diff --git a/cli/internal/terraform/terraform.go b/cli/internal/terraform/terraform.go index f48d36e02..f12de0fbc 100644 --- a/cli/internal/terraform/terraform.go +++ b/cli/internal/terraform/terraform.go @@ -103,9 +103,18 @@ func (c *Client) ShowIAM(ctx context.Context, provider cloudprovider.Provider) ( if !ok { return IAMOutput{}, errors.New("invalid type in service_account_key output: not a string") } + IAMServiceAccountVMOutputRaw, ok := tfState.Values.Outputs["service_account_mail_vm"] + if !ok { + return IAMOutput{}, errors.New("no service_account_mail_vm output found") + } + IAMServiceAccountVMOutput, ok := IAMServiceAccountVMOutputRaw.Value.(string) + if !ok { + return IAMOutput{}, errors.New("invalid type in service_account_mail_vm output: not a string") + } return IAMOutput{ GCP: GCPIAMOutput{ - SaKey: saKeyOutput, + SaKey: saKeyOutput, + ServiceAccountVMMailAddress: IAMServiceAccountVMOutput, }, }, nil case cloudprovider.Azure: @@ -539,7 +548,8 @@ type IAMOutput struct { // GCPIAMOutput contains the output information of the Terraform IAM operation on GCP. type GCPIAMOutput struct { - SaKey string + SaKey string + ServiceAccountVMMailAddress string } // AzureIAMOutput contains the output information of the Terraform IAM operation on Microsoft Azure. diff --git a/cli/internal/terraform/terraform_test.go b/cli/internal/terraform/terraform_test.go index 103f0e959..41236a4f0 100644 --- a/cli/internal/terraform/terraform_test.go +++ b/cli/internal/terraform/terraform_test.go @@ -120,6 +120,7 @@ func TestPrepareIAM(t *testing.T) { Region: "europe-west1", Zone: "europe-west1-a", ServiceAccountID: "const-test-case", + NamePrefix: "test_iam", } azureVars := &AzureIAMVariables{ Location: "westus", @@ -509,6 +510,9 @@ func TestCreateIAM(t *testing.T) { "service_account_key": { Value: "12345678_abcdefg", }, + "service_account_mail_vm": { + Value: "test_iam_service_account_vm", + }, "subscription_id": { Value: "test_subscription_id", }, @@ -581,7 +585,7 @@ func TestCreateIAM(t *testing.T) { vars: gcpVars, tf: &stubTerraform{showState: newTestState()}, fs: afero.NewMemMapFs(), - want: IAMOutput{GCP: GCPIAMOutput{SaKey: "12345678_abcdefg"}}, + want: IAMOutput{GCP: GCPIAMOutput{SaKey: "12345678_abcdefg", ServiceAccountVMMailAddress: "test_iam_service_account_vm"}}, }, "gcp init fails": { pathBase: path.Join(constants.TerraformEmbeddedDir, "iam"), @@ -614,7 +618,25 @@ func TestCreateIAM(t *testing.T) { tf: &stubTerraform{ showState: &tfjson.State{ Values: &tfjson.StateValues{ - Outputs: map[string]*tfjson.StateOutput{}, + Outputs: map[string]*tfjson.StateOutput{ + "service_account_mail_vm": {Value: "test_iam_service_account_vm"}, + }, + }, + }, + }, + fs: afero.NewMemMapFs(), + wantErr: true, + }, + "gcp no service_account_mail_vm": { + pathBase: path.Join(constants.TerraformEmbeddedDir, "iam"), + provider: cloudprovider.GCP, + vars: gcpVars, + tf: &stubTerraform{ + showState: &tfjson.State{ + Values: &tfjson.StateValues{ + Outputs: map[string]*tfjson.StateOutput{ + "service_account_key": {Value: "12345678_abcdefg"}, + }, }, }, }, @@ -1129,7 +1151,8 @@ func TestShowIAM(t *testing.T) { "GCP success": { tf: &stubTerraform{ showState: getTfjsonState(map[string]any{ - "service_account_key": "key", + "service_account_key": "key", + "service_account_mail_vm": "example@example.com", }), }, csp: cloudprovider.GCP, @@ -1137,7 +1160,8 @@ func TestShowIAM(t *testing.T) { "GCP wrong data type": { tf: &stubTerraform{ showState: getTfjsonState(map[string]any{ - "service_account_key": map[string]any{}, + "service_account_key": map[string]any{}, + "service_account_mail_vm": "example@example.com", }), }, csp: cloudprovider.GCP, @@ -1145,7 +1169,9 @@ func TestShowIAM(t *testing.T) { }, "GCP missing key": { tf: &stubTerraform{ - showState: getTfjsonState(map[string]any{}), + showState: getTfjsonState(map[string]any{ + "service_account_mail_vm": "example@example.com", + }), }, csp: cloudprovider.GCP, wantErr: true, diff --git a/cli/internal/terraform/variables.go b/cli/internal/terraform/variables.go index 86af569e0..4f341f0ab 100644 --- a/cli/internal/terraform/variables.go +++ b/cli/internal/terraform/variables.go @@ -141,6 +141,8 @@ type GCPClusterVariables struct { InternalLoadBalancer bool `hcl:"internal_load_balancer" cty:"internal_load_balancer"` // CCTechnology is the confidential computing technology to use on the VMs. (`SEV` or `SEV_SNP`) CCTechnology string `hcl:"cc_technology" cty:"cc_technology"` + // IAMServiceAccountControlPlane is the IAM service account mail address to attach to VMs. + IAMServiceAccountVM string `hcl:"iam_service_account_vm" cty:"iam_service_account_vm"` // AdditionalLables are (optional) additional labels that should be applied to created resources. AdditionalLabels cloudprovider.Tags `hcl:"additional_labels" cty:"additional_labels"` } @@ -182,6 +184,9 @@ type GCPIAMVariables struct { Zone string `hcl:"zone" cty:"zone"` // ServiceAccountID is the ID of the service account to use. ServiceAccountID string `hcl:"service_account_id" cty:"service_account_id"` + // IAMServiceAccountVM is the ID of the service account to attach to VMs. + // TODO(@3u13r): Eventually remove this field after v2.22 has been released. + NamePrefix string `hcl:"name_prefix,optional" cty:"name_prefix"` } // String returns a string representation of the IAM-specific variables, formatted as Terraform variables. diff --git a/cli/internal/terraform/variables_test.go b/cli/internal/terraform/variables_test.go index 02567c314..b39d7a161 100644 --- a/cli/internal/terraform/variables_test.go +++ b/cli/internal/terraform/variables_test.go @@ -122,8 +122,9 @@ func TestGCPClusterVariables(t *testing.T) { DiskType: "pd-ssd", }, }, - CustomEndpoint: "example.com", - CCTechnology: "SEV_SNP", + CustomEndpoint: "example.com", + CCTechnology: "SEV_SNP", + IAMServiceAccountVM: "example@example.com", } // test that the variables are correctly rendered @@ -151,10 +152,11 @@ node_groups = { zone = "eu-central-1b" } } -custom_endpoint = "example.com" -internal_load_balancer = false -cc_technology = "SEV_SNP" -additional_labels = null +custom_endpoint = "example.com" +internal_load_balancer = false +cc_technology = "SEV_SNP" +iam_service_account_vm = "example@example.com" +additional_labels = null ` got := vars.String() assert.Equal(t, strings.Fields(want), strings.Fields(got)) // to ignore whitespace differences @@ -173,9 +175,27 @@ func TestGCPIAMVariables(t *testing.T) { region = "eu-central-1" zone = "eu-central-1a" service_account_id = "my-service-account" +name_prefix = "" ` got := vars.String() assert.Equal(t, strings.Fields(want), strings.Fields(got)) // to ignore whitespace differences + + vars = GCPIAMVariables{ + Project: "my-project", + Region: "eu-central-1", + Zone: "eu-central-1a", + NamePrefix: "my-prefix", + } + + // test that the variables are correctly rendered + want = `project_id = "my-project" +region = "eu-central-1" +zone = "eu-central-1a" +service_account_id = "" +name_prefix = "my-prefix" +` + got = vars.String() + assert.Equal(t, strings.Fields(want), strings.Fields(got)) // to ignore whitespace differences } func TestAzureClusterVariables(t *testing.T) { diff --git a/docs/docs/getting-started/first-steps.md b/docs/docs/getting-started/first-steps.md index b197f659d..a6ef2908b 100644 --- a/docs/docs/getting-started/first-steps.md +++ b/docs/docs/getting-started/first-steps.md @@ -102,7 +102,7 @@ If you encounter any problem with the following steps, make sure to use the [lat ```bash - constellation iam create gcp --projectID=yourproject-12345 --zone=europe-west2-a --serviceAccountID=constell-test --update-config + constellation iam create gcp --projectID=yourproject-12345 --zone=europe-west2-a --prefix=constell-test --update-config ``` This command creates IAM configuration in the GCP project `yourproject-12345` on the GCP zone `europe-west2-a` creating a new service account `constell-test`. It also updates the configuration file `constellation-conf.yaml` in your current directory with the IAM values filled in. diff --git a/docs/docs/getting-started/install.md b/docs/docs/getting-started/install.md index f7b36770a..f120b865a 100644 --- a/docs/docs/getting-started/install.md +++ b/docs/docs/getting-started/install.md @@ -234,6 +234,9 @@ Enable the [Compute Engine API](https://console.cloud.google.com/apis/library/co To [create the IAM configuration](../workflows/config.md#creating-an-iam-configuration) for Constellation, you need the following permissions: +* `iam.roles.create` +* `iam.roles.delete` +* `iam.roles.get` * `iam.serviceAccountKeys.create` * `iam.serviceAccountKeys.delete` * `iam.serviceAccountKeys.get` diff --git a/docs/docs/reference/cli.md b/docs/docs/reference/cli.md index 2ce14ef34..7cbc0be8d 100644 --- a/docs/docs/reference/cli.md +++ b/docs/docs/reference/cli.md @@ -685,13 +685,13 @@ constellation iam create gcp [flags] ### Options ``` - -h, --help help for gcp - --projectID string ID of the GCP project the configuration will be created in (required) - Find it on the welcome screen of your project: https://console.cloud.google.com/welcome - --serviceAccountID string ID for the service account that will be created (required) - Must be 6 to 30 lowercase letters, digits, or hyphens. - --zone string GCP zone the cluster will be deployed in (required) - Find a list of available zones here: https://cloud.google.com/compute/docs/regions-zones#available + -h, --help help for gcp + --prefix string Prefix for the service account ID and VM ID that will be created (required) + Must be letters, digits, or hyphens. + --projectID string ID of the GCP project the configuration will be created in (required) + Find it on the welcome screen of your project: https://console.cloud.google.com/welcome + --zone string GCP zone the cluster will be deployed in (required) + Find a list of available zones here: https://cloud.google.com/compute/docs/regions-zones#available ``` ### Options inherited from parent commands diff --git a/docs/docs/workflows/config.md b/docs/docs/workflows/config.md index 95f791acd..35ed98302 100644 --- a/docs/docs/workflows/config.md +++ b/docs/docs/workflows/config.md @@ -210,7 +210,7 @@ Paste the output into the corresponding fields of the `constellation-conf.yaml` You must be authenticated with the [GCP CLI](https://cloud.google.com/sdk/gcloud) in the shell session with a user that has the [required permissions for IAM creation](../getting-started/install.md#set-up-cloud-credentials). ```bash -constellation iam create gcp --projectID=yourproject-12345 --zone=europe-west2-a --serviceAccountID=constell-test +constellation iam create gcp --projectID=yourproject-12345 --zone=europe-west2-a --prefix=constell-test ``` This command creates IAM configuration in the GCP project `yourproject-12345` on the GCP zone `europe-west2-a` creating a new service account `constell-test`. diff --git a/internal/config/config.go b/internal/config/config.go index 5aefb05b3..860a86809 100644 --- a/internal/config/config.go +++ b/internal/config/config.go @@ -188,6 +188,9 @@ type GCPConfig struct { // Path of service account key file. For required service account roles, see https://docs.edgeless.systems/constellation/getting-started/install#authorization ServiceAccountKeyPath string `yaml:"serviceAccountKeyPath" validate:"required"` // description: | + // GCP service account mail address. This is being attached to the VMs for authorization. + IAMServiceAccountVM string `yaml:"IAMServiceAccountVM"` + // description: | // Deploy Persistent Disk CSI driver with on-node encryption. For details see: https://docs.edgeless.systems/constellation/architecture/encrypted-storage DeployCSIDriver *bool `yaml:"deployCSIDriver" validate:"required"` // description: | @@ -349,6 +352,7 @@ func Default() *Config { Region: "", Zone: "", ServiceAccountKeyPath: "", + IAMServiceAccountVM: "", DeployCSIDriver: toPtr(true), UseMarketplaceImage: toPtr(false), }, diff --git a/internal/config/config_doc.go b/internal/config/config_doc.go index d26af1643..b87db6b86 100644 --- a/internal/config/config_doc.go +++ b/internal/config/config_doc.go @@ -241,7 +241,7 @@ func init() { FieldName: "gcp", }, } - GCPConfigDoc.Fields = make([]encoder.Doc, 6) + GCPConfigDoc.Fields = make([]encoder.Doc, 7) GCPConfigDoc.Fields[0].Name = "project" GCPConfigDoc.Fields[0].Type = "string" GCPConfigDoc.Fields[0].Note = "" @@ -262,16 +262,21 @@ func init() { GCPConfigDoc.Fields[3].Note = "" GCPConfigDoc.Fields[3].Description = "Path of service account key file. For required service account roles, see https://docs.edgeless.systems/constellation/getting-started/install#authorization" GCPConfigDoc.Fields[3].Comments[encoder.LineComment] = "Path of service account key file. For required service account roles, see https://docs.edgeless.systems/constellation/getting-started/install#authorization" - GCPConfigDoc.Fields[4].Name = "deployCSIDriver" - GCPConfigDoc.Fields[4].Type = "bool" + GCPConfigDoc.Fields[4].Name = "IAMServiceAccountVM" + GCPConfigDoc.Fields[4].Type = "string" GCPConfigDoc.Fields[4].Note = "" - GCPConfigDoc.Fields[4].Description = "Deploy Persistent Disk CSI driver with on-node encryption. For details see: https://docs.edgeless.systems/constellation/architecture/encrypted-storage" - GCPConfigDoc.Fields[4].Comments[encoder.LineComment] = "Deploy Persistent Disk CSI driver with on-node encryption. For details see: https://docs.edgeless.systems/constellation/architecture/encrypted-storage" - GCPConfigDoc.Fields[5].Name = "useMarketplaceImage" + GCPConfigDoc.Fields[4].Description = "GCP service account mail address. This is being attached to the VMs for authorization." + GCPConfigDoc.Fields[4].Comments[encoder.LineComment] = "GCP service account mail address. This is being attached to the VMs for authorization." + GCPConfigDoc.Fields[5].Name = "deployCSIDriver" GCPConfigDoc.Fields[5].Type = "bool" GCPConfigDoc.Fields[5].Note = "" - GCPConfigDoc.Fields[5].Description = "Use the specified GCP Marketplace image offering." - GCPConfigDoc.Fields[5].Comments[encoder.LineComment] = "Use the specified GCP Marketplace image offering." + GCPConfigDoc.Fields[5].Description = "Deploy Persistent Disk CSI driver with on-node encryption. For details see: https://docs.edgeless.systems/constellation/architecture/encrypted-storage" + GCPConfigDoc.Fields[5].Comments[encoder.LineComment] = "Deploy Persistent Disk CSI driver with on-node encryption. For details see: https://docs.edgeless.systems/constellation/architecture/encrypted-storage" + GCPConfigDoc.Fields[6].Name = "useMarketplaceImage" + GCPConfigDoc.Fields[6].Type = "bool" + GCPConfigDoc.Fields[6].Note = "" + GCPConfigDoc.Fields[6].Description = "Use the specified GCP Marketplace image offering." + GCPConfigDoc.Fields[6].Comments[encoder.LineComment] = "Use the specified GCP Marketplace image offering." OpenStackConfigDoc.Type = "OpenStackConfig" OpenStackConfigDoc.Comments[encoder.LineComment] = "OpenStackConfig holds config information for OpenStack based Constellation deployments." diff --git a/internal/config/config_test.go b/internal/config/config_test.go index 5c60b26dc..f7ce59377 100644 --- a/internal/config/config_test.go +++ b/internal/config/config_test.go @@ -464,6 +464,7 @@ func TestValidate(t *testing.T) { gcp.Project = "test-project" gcp.Zone = "test-zone" gcp.ServiceAccountKeyPath = "test-key-path" + gcp.IAMServiceAccountVM = "example@example.com" cnf.Provider = ProviderConfig{} cnf.Provider.GCP = gcp cnf.Attestation.GCPSEVSNP.Measurements = measurements.M{ diff --git a/internal/constellation/helm/charts/edgeless/constellation-services/charts/join-service/templates/daemonset.yaml b/internal/constellation/helm/charts/edgeless/constellation-services/charts/join-service/templates/daemonset.yaml index fe6460d4a..5eed603c5 100644 --- a/internal/constellation/helm/charts/edgeless/constellation-services/charts/join-service/templates/daemonset.yaml +++ b/internal/constellation/helm/charts/edgeless/constellation-services/charts/join-service/templates/daemonset.yaml @@ -40,6 +40,9 @@ spec: - --cloud-provider={{ .Values.csp }} - --key-service-endpoint=key-service.{{ .Release.Namespace }}:{{ .Values.global.keyServicePort }} - --attestation-variant={{ .Values.attestationVariant }} + env: + - name: GOOGLE_APPLICATION_CREDENTIALS + value: /var/secrets/google/key.json volumeMounts: - mountPath: {{ .Values.global.serviceBasePath | quote }} name: config @@ -47,6 +50,9 @@ spec: - mountPath: /etc/kubernetes name: kubeadm readOnly: true + - mountPath: /var/secrets/google + name: gcekey + readOnly: true ports: - containerPort: {{ .Values.joinServicePort }} name: tcp @@ -54,6 +60,10 @@ spec: securityContext: privileged: true volumes: + - name: gcekey + secret: + secretName: gcekey + optional: true - name: config projected: sources: diff --git a/internal/constellation/helm/charts/edgeless/operators/charts/constellation-operator/templates/deployment.yaml b/internal/constellation/helm/charts/edgeless/operators/charts/constellation-operator/templates/deployment.yaml index 9083df141..5afe29d9b 100644 --- a/internal/constellation/helm/charts/edgeless/operators/charts/constellation-operator/templates/deployment.yaml +++ b/internal/constellation/helm/charts/edgeless/operators/charts/constellation-operator/templates/deployment.yaml @@ -42,6 +42,8 @@ spec: value: {{ .Values.csp | quote }} - name: constellation-uid value: {{ .Values.constellationUID | quote }} + - name: GOOGLE_APPLICATION_CREDENTIALS + value: /var/secrets/google/key.json image: {{ .Values.controllerManager.manager.image | quote }} livenessProbe: httpGet: @@ -72,6 +74,9 @@ spec: - mountPath: /etc/gce name: gceconf readOnly: true + - mountPath: /var/secrets/google + name: gcekey + readOnly: true - mountPath: /etc/constellation-upgrade-agent.sock name: upgrade-agent-socket readOnly: true @@ -109,6 +114,10 @@ spec: name: gceconf optional: true name: gceconf + - name: gcekey + secret: + secretName: gcekey + optional: true - name: upgrade-agent-socket hostPath: path: /run/constellation-upgrade-agent.sock diff --git a/internal/constellation/helm/testdata/AWS/constellation-operators/charts/constellation-operator/templates/deployment.yaml b/internal/constellation/helm/testdata/AWS/constellation-operators/charts/constellation-operator/templates/deployment.yaml index 01d9e6f57..fa41d793b 100644 --- a/internal/constellation/helm/testdata/AWS/constellation-operators/charts/constellation-operator/templates/deployment.yaml +++ b/internal/constellation/helm/testdata/AWS/constellation-operators/charts/constellation-operator/templates/deployment.yaml @@ -37,58 +37,63 @@ spec: kubectl.kubernetes.io/default-container: manager spec: containers: - - args: - - --health-probe-bind-address=:8081 - - --metrics-bind-address=:8080 - - --leader-elect - command: - - /node-operator - env: - - name: KUBERNETES_CLUSTER_DOMAIN - value: cluster.local - - name: CONSTEL_CSP - value: GCP - - name: constellation-uid - value: "42424242424242" - image: constellationOperatorImage - livenessProbe: - httpGet: - path: /healthz - port: 8081 - initialDelaySeconds: 15 - periodSeconds: 20 - name: manager - readinessProbe: - httpGet: - path: /readyz - port: 8081 - initialDelaySeconds: 5 - periodSeconds: 10 - resources: - limits: - cpu: 500m - memory: 128Mi - requests: - cpu: 10m - memory: 64Mi - securityContext: - allowPrivilegeEscalation: false - volumeMounts: - - mountPath: /etc/kubernetes/pki/etcd - name: etcd-certs - - mountPath: /host/usr/lib/os-release - name: usr-lib-os-release - - mountPath: /etc/os-release - name: etc-os-release - - mountPath: /etc/azure - name: azureconfig - readOnly: true - - mountPath: /etc/gce - name: gceconf - readOnly: true - - mountPath: /etc/constellation-upgrade-agent.sock - name: upgrade-agent-socket - readOnly: true + - args: + - --health-probe-bind-address=:8081 + - --metrics-bind-address=:8080 + - --leader-elect + command: + - /node-operator + env: + - name: KUBERNETES_CLUSTER_DOMAIN + value: cluster.local + - name: CONSTEL_CSP + value: GCP + - name: constellation-uid + value: "42424242424242" + - name: GOOGLE_APPLICATION_CREDENTIALS + value: /var/secrets/google/key.json + image: constellationOperatorImage + livenessProbe: + httpGet: + path: /healthz + port: 8081 + initialDelaySeconds: 15 + periodSeconds: 20 + name: manager + readinessProbe: + httpGet: + path: /readyz + port: 8081 + initialDelaySeconds: 5 + periodSeconds: 10 + resources: + limits: + cpu: 500m + memory: 128Mi + requests: + cpu: 10m + memory: 64Mi + securityContext: + allowPrivilegeEscalation: false + volumeMounts: + - mountPath: /etc/kubernetes/pki/etcd + name: etcd-certs + - mountPath: /host/usr/lib/os-release + name: usr-lib-os-release + - mountPath: /etc/os-release + name: etc-os-release + - mountPath: /etc/azure + name: azureconfig + readOnly: true + - mountPath: /etc/gce + name: gceconf + readOnly: true + - mountPath: /var/secrets/google + name: gcekey + readOnly: true + - mountPath: /etc/constellation-upgrade-agent.sock + name: upgrade-agent-socket + readOnly: true nodeSelector: node-role.kubernetes.io/control-plane: "" securityContext: @@ -96,34 +101,38 @@ spec: serviceAccountName: constellation-operator-controller-manager terminationGracePeriodSeconds: 10 tolerations: - - effect: NoSchedule - key: node-role.kubernetes.io/control-plane - operator: Exists - - effect: NoSchedule - key: node-role.kubernetes.io/master - operator: Exists + - effect: NoSchedule + key: node-role.kubernetes.io/control-plane + operator: Exists + - effect: NoSchedule + key: node-role.kubernetes.io/master + operator: Exists volumes: - - hostPath: - path: /etc/kubernetes/pki/etcd - type: Directory - name: etcd-certs - - hostPath: - path: /usr/lib/os-release - type: File - name: usr-lib-os-release - - hostPath: - path: /etc/os-release - type: File - name: etc-os-release - - name: azureconfig - secret: - optional: true - secretName: azureconfig - - configMap: + - hostPath: + path: /etc/kubernetes/pki/etcd + type: Directory + name: etcd-certs + - hostPath: + path: /usr/lib/os-release + type: File + name: usr-lib-os-release + - hostPath: + path: /etc/os-release + type: File + name: etc-os-release + - name: azureconfig + secret: + optional: true + secretName: azureconfig + - configMap: + name: gceconf + optional: true name: gceconf - optional: true - name: gceconf - - name: upgrade-agent-socket - hostPath: - path: /run/constellation-upgrade-agent.sock - type: Socket + - name: gcekey + secret: + secretName: gcekey + optional: true + - name: upgrade-agent-socket + hostPath: + path: /run/constellation-upgrade-agent.sock + type: Socket diff --git a/internal/constellation/helm/testdata/AWS/constellation-services/charts/join-service/templates/daemonset.yaml b/internal/constellation/helm/testdata/AWS/constellation-services/charts/join-service/templates/daemonset.yaml index 2156f82a6..7c65a887f 100644 --- a/internal/constellation/helm/testdata/AWS/constellation-services/charts/join-service/templates/daemonset.yaml +++ b/internal/constellation/helm/testdata/AWS/constellation-services/charts/join-service/templates/daemonset.yaml @@ -40,6 +40,9 @@ spec: - --cloud-provider=AWS - --key-service-endpoint=key-service.testNamespace:9000 - --attestation-variant=aws-nitro-tpm + env: + - name: GOOGLE_APPLICATION_CREDENTIALS + value: /var/secrets/google/key.json volumeMounts: - mountPath: /var/config name: config @@ -47,6 +50,9 @@ spec: - mountPath: /etc/kubernetes name: kubeadm readOnly: true + - mountPath: /var/secrets/google + name: gcekey + readOnly: true ports: - containerPort: 9090 name: tcp @@ -54,6 +60,10 @@ spec: securityContext: privileged: true volumes: + - name: gcekey + secret: + secretName: gcekey + optional: true - name: config projected: sources: diff --git a/internal/constellation/helm/testdata/Azure/constellation-operators/charts/constellation-operator/templates/deployment.yaml b/internal/constellation/helm/testdata/Azure/constellation-operators/charts/constellation-operator/templates/deployment.yaml index d50c5492f..23b5ac730 100644 --- a/internal/constellation/helm/testdata/Azure/constellation-operators/charts/constellation-operator/templates/deployment.yaml +++ b/internal/constellation/helm/testdata/Azure/constellation-operators/charts/constellation-operator/templates/deployment.yaml @@ -37,58 +37,63 @@ spec: kubectl.kubernetes.io/default-container: manager spec: containers: - - args: - - --health-probe-bind-address=:8081 - - --metrics-bind-address=:8080 - - --leader-elect - command: - - /node-operator - env: - - name: KUBERNETES_CLUSTER_DOMAIN - value: cluster.local - - name: CONSTEL_CSP - value: Azure - - name: constellation-uid - value: "42424242424242" - image: constellationOperatorImage - livenessProbe: - httpGet: - path: /healthz - port: 8081 - initialDelaySeconds: 15 - periodSeconds: 20 - name: manager - readinessProbe: - httpGet: - path: /readyz - port: 8081 - initialDelaySeconds: 5 - periodSeconds: 10 - resources: - limits: - cpu: 500m - memory: 128Mi - requests: - cpu: 10m - memory: 64Mi - securityContext: - allowPrivilegeEscalation: false - volumeMounts: - - mountPath: /etc/kubernetes/pki/etcd - name: etcd-certs - - mountPath: /host/usr/lib/os-release - name: usr-lib-os-release - - mountPath: /etc/os-release - name: etc-os-release - - mountPath: /etc/azure - name: azureconfig - readOnly: true - - mountPath: /etc/gce - name: gceconf - readOnly: true - - mountPath: /etc/constellation-upgrade-agent.sock - name: upgrade-agent-socket - readOnly: true + - args: + - --health-probe-bind-address=:8081 + - --metrics-bind-address=:8080 + - --leader-elect + command: + - /node-operator + env: + - name: KUBERNETES_CLUSTER_DOMAIN + value: cluster.local + - name: CONSTEL_CSP + value: Azure + - name: constellation-uid + value: "42424242424242" + - name: GOOGLE_APPLICATION_CREDENTIALS + value: /var/secrets/google/key.json + image: constellationOperatorImage + livenessProbe: + httpGet: + path: /healthz + port: 8081 + initialDelaySeconds: 15 + periodSeconds: 20 + name: manager + readinessProbe: + httpGet: + path: /readyz + port: 8081 + initialDelaySeconds: 5 + periodSeconds: 10 + resources: + limits: + cpu: 500m + memory: 128Mi + requests: + cpu: 10m + memory: 64Mi + securityContext: + allowPrivilegeEscalation: false + volumeMounts: + - mountPath: /etc/kubernetes/pki/etcd + name: etcd-certs + - mountPath: /host/usr/lib/os-release + name: usr-lib-os-release + - mountPath: /etc/os-release + name: etc-os-release + - mountPath: /etc/azure + name: azureconfig + readOnly: true + - mountPath: /etc/gce + name: gceconf + readOnly: true + - mountPath: /var/secrets/google + name: gcekey + readOnly: true + - mountPath: /etc/constellation-upgrade-agent.sock + name: upgrade-agent-socket + readOnly: true nodeSelector: node-role.kubernetes.io/control-plane: "" securityContext: @@ -96,34 +101,38 @@ spec: serviceAccountName: constellation-operator-controller-manager terminationGracePeriodSeconds: 10 tolerations: - - effect: NoSchedule - key: node-role.kubernetes.io/control-plane - operator: Exists - - effect: NoSchedule - key: node-role.kubernetes.io/master - operator: Exists + - effect: NoSchedule + key: node-role.kubernetes.io/control-plane + operator: Exists + - effect: NoSchedule + key: node-role.kubernetes.io/master + operator: Exists volumes: - - hostPath: - path: /etc/kubernetes/pki/etcd - type: Directory - name: etcd-certs - - hostPath: - path: /usr/lib/os-release - type: File - name: usr-lib-os-release - - hostPath: - path: /etc/os-release - type: File - name: etc-os-release - - name: azureconfig - secret: - optional: true - secretName: azureconfig - - configMap: + - hostPath: + path: /etc/kubernetes/pki/etcd + type: Directory + name: etcd-certs + - hostPath: + path: /usr/lib/os-release + type: File + name: usr-lib-os-release + - hostPath: + path: /etc/os-release + type: File + name: etc-os-release + - name: azureconfig + secret: + optional: true + secretName: azureconfig + - configMap: + name: gceconf + optional: true name: gceconf - optional: true - name: gceconf - - name: upgrade-agent-socket - hostPath: - path: /run/constellation-upgrade-agent.sock - type: Socket + - name: gcekey + secret: + secretName: gcekey + optional: true + - name: upgrade-agent-socket + hostPath: + path: /run/constellation-upgrade-agent.sock + type: Socket diff --git a/internal/constellation/helm/testdata/Azure/constellation-services/charts/join-service/templates/daemonset.yaml b/internal/constellation/helm/testdata/Azure/constellation-services/charts/join-service/templates/daemonset.yaml index 05f397876..361089daa 100644 --- a/internal/constellation/helm/testdata/Azure/constellation-services/charts/join-service/templates/daemonset.yaml +++ b/internal/constellation/helm/testdata/Azure/constellation-services/charts/join-service/templates/daemonset.yaml @@ -40,6 +40,9 @@ spec: - --cloud-provider=Azure - --key-service-endpoint=key-service.testNamespace:9000 - --attestation-variant=azure-sev-snp + env: + - name: GOOGLE_APPLICATION_CREDENTIALS + value: /var/secrets/google/key.json volumeMounts: - mountPath: /var/config name: config @@ -47,6 +50,9 @@ spec: - mountPath: /etc/kubernetes name: kubeadm readOnly: true + - mountPath: /var/secrets/google + name: gcekey + readOnly: true ports: - containerPort: 9090 name: tcp @@ -54,6 +60,10 @@ spec: securityContext: privileged: true volumes: + - name: gcekey + secret: + secretName: gcekey + optional: true - name: config projected: sources: diff --git a/internal/constellation/helm/testdata/GCP/constellation-operators/charts/constellation-operator/templates/deployment.yaml b/internal/constellation/helm/testdata/GCP/constellation-operators/charts/constellation-operator/templates/deployment.yaml index 01d9e6f57..fa41d793b 100644 --- a/internal/constellation/helm/testdata/GCP/constellation-operators/charts/constellation-operator/templates/deployment.yaml +++ b/internal/constellation/helm/testdata/GCP/constellation-operators/charts/constellation-operator/templates/deployment.yaml @@ -37,58 +37,63 @@ spec: kubectl.kubernetes.io/default-container: manager spec: containers: - - args: - - --health-probe-bind-address=:8081 - - --metrics-bind-address=:8080 - - --leader-elect - command: - - /node-operator - env: - - name: KUBERNETES_CLUSTER_DOMAIN - value: cluster.local - - name: CONSTEL_CSP - value: GCP - - name: constellation-uid - value: "42424242424242" - image: constellationOperatorImage - livenessProbe: - httpGet: - path: /healthz - port: 8081 - initialDelaySeconds: 15 - periodSeconds: 20 - name: manager - readinessProbe: - httpGet: - path: /readyz - port: 8081 - initialDelaySeconds: 5 - periodSeconds: 10 - resources: - limits: - cpu: 500m - memory: 128Mi - requests: - cpu: 10m - memory: 64Mi - securityContext: - allowPrivilegeEscalation: false - volumeMounts: - - mountPath: /etc/kubernetes/pki/etcd - name: etcd-certs - - mountPath: /host/usr/lib/os-release - name: usr-lib-os-release - - mountPath: /etc/os-release - name: etc-os-release - - mountPath: /etc/azure - name: azureconfig - readOnly: true - - mountPath: /etc/gce - name: gceconf - readOnly: true - - mountPath: /etc/constellation-upgrade-agent.sock - name: upgrade-agent-socket - readOnly: true + - args: + - --health-probe-bind-address=:8081 + - --metrics-bind-address=:8080 + - --leader-elect + command: + - /node-operator + env: + - name: KUBERNETES_CLUSTER_DOMAIN + value: cluster.local + - name: CONSTEL_CSP + value: GCP + - name: constellation-uid + value: "42424242424242" + - name: GOOGLE_APPLICATION_CREDENTIALS + value: /var/secrets/google/key.json + image: constellationOperatorImage + livenessProbe: + httpGet: + path: /healthz + port: 8081 + initialDelaySeconds: 15 + periodSeconds: 20 + name: manager + readinessProbe: + httpGet: + path: /readyz + port: 8081 + initialDelaySeconds: 5 + periodSeconds: 10 + resources: + limits: + cpu: 500m + memory: 128Mi + requests: + cpu: 10m + memory: 64Mi + securityContext: + allowPrivilegeEscalation: false + volumeMounts: + - mountPath: /etc/kubernetes/pki/etcd + name: etcd-certs + - mountPath: /host/usr/lib/os-release + name: usr-lib-os-release + - mountPath: /etc/os-release + name: etc-os-release + - mountPath: /etc/azure + name: azureconfig + readOnly: true + - mountPath: /etc/gce + name: gceconf + readOnly: true + - mountPath: /var/secrets/google + name: gcekey + readOnly: true + - mountPath: /etc/constellation-upgrade-agent.sock + name: upgrade-agent-socket + readOnly: true nodeSelector: node-role.kubernetes.io/control-plane: "" securityContext: @@ -96,34 +101,38 @@ spec: serviceAccountName: constellation-operator-controller-manager terminationGracePeriodSeconds: 10 tolerations: - - effect: NoSchedule - key: node-role.kubernetes.io/control-plane - operator: Exists - - effect: NoSchedule - key: node-role.kubernetes.io/master - operator: Exists + - effect: NoSchedule + key: node-role.kubernetes.io/control-plane + operator: Exists + - effect: NoSchedule + key: node-role.kubernetes.io/master + operator: Exists volumes: - - hostPath: - path: /etc/kubernetes/pki/etcd - type: Directory - name: etcd-certs - - hostPath: - path: /usr/lib/os-release - type: File - name: usr-lib-os-release - - hostPath: - path: /etc/os-release - type: File - name: etc-os-release - - name: azureconfig - secret: - optional: true - secretName: azureconfig - - configMap: + - hostPath: + path: /etc/kubernetes/pki/etcd + type: Directory + name: etcd-certs + - hostPath: + path: /usr/lib/os-release + type: File + name: usr-lib-os-release + - hostPath: + path: /etc/os-release + type: File + name: etc-os-release + - name: azureconfig + secret: + optional: true + secretName: azureconfig + - configMap: + name: gceconf + optional: true name: gceconf - optional: true - name: gceconf - - name: upgrade-agent-socket - hostPath: - path: /run/constellation-upgrade-agent.sock - type: Socket + - name: gcekey + secret: + secretName: gcekey + optional: true + - name: upgrade-agent-socket + hostPath: + path: /run/constellation-upgrade-agent.sock + type: Socket diff --git a/internal/constellation/helm/testdata/GCP/constellation-services/charts/join-service/templates/daemonset.yaml b/internal/constellation/helm/testdata/GCP/constellation-services/charts/join-service/templates/daemonset.yaml index 0ddfa9201..d50416871 100644 --- a/internal/constellation/helm/testdata/GCP/constellation-services/charts/join-service/templates/daemonset.yaml +++ b/internal/constellation/helm/testdata/GCP/constellation-services/charts/join-service/templates/daemonset.yaml @@ -40,6 +40,9 @@ spec: - --cloud-provider=GCP - --key-service-endpoint=key-service.testNamespace:9000 - --attestation-variant=gcp-sev-es + env: + - name: GOOGLE_APPLICATION_CREDENTIALS + value: /var/secrets/google/key.json volumeMounts: - mountPath: /var/config name: config @@ -47,6 +50,9 @@ spec: - mountPath: /etc/kubernetes name: kubeadm readOnly: true + - mountPath: /var/secrets/google + name: gcekey + readOnly: true ports: - containerPort: 9090 name: tcp @@ -54,6 +60,10 @@ spec: securityContext: privileged: true volumes: + - name: gcekey + secret: + secretName: gcekey + optional: true - name: config projected: sources: diff --git a/internal/constellation/helm/testdata/OpenStack/constellation-operators/charts/constellation-operator/templates/deployment.yaml b/internal/constellation/helm/testdata/OpenStack/constellation-operators/charts/constellation-operator/templates/deployment.yaml index 01d9e6f57..fa41d793b 100644 --- a/internal/constellation/helm/testdata/OpenStack/constellation-operators/charts/constellation-operator/templates/deployment.yaml +++ b/internal/constellation/helm/testdata/OpenStack/constellation-operators/charts/constellation-operator/templates/deployment.yaml @@ -37,58 +37,63 @@ spec: kubectl.kubernetes.io/default-container: manager spec: containers: - - args: - - --health-probe-bind-address=:8081 - - --metrics-bind-address=:8080 - - --leader-elect - command: - - /node-operator - env: - - name: KUBERNETES_CLUSTER_DOMAIN - value: cluster.local - - name: CONSTEL_CSP - value: GCP - - name: constellation-uid - value: "42424242424242" - image: constellationOperatorImage - livenessProbe: - httpGet: - path: /healthz - port: 8081 - initialDelaySeconds: 15 - periodSeconds: 20 - name: manager - readinessProbe: - httpGet: - path: /readyz - port: 8081 - initialDelaySeconds: 5 - periodSeconds: 10 - resources: - limits: - cpu: 500m - memory: 128Mi - requests: - cpu: 10m - memory: 64Mi - securityContext: - allowPrivilegeEscalation: false - volumeMounts: - - mountPath: /etc/kubernetes/pki/etcd - name: etcd-certs - - mountPath: /host/usr/lib/os-release - name: usr-lib-os-release - - mountPath: /etc/os-release - name: etc-os-release - - mountPath: /etc/azure - name: azureconfig - readOnly: true - - mountPath: /etc/gce - name: gceconf - readOnly: true - - mountPath: /etc/constellation-upgrade-agent.sock - name: upgrade-agent-socket - readOnly: true + - args: + - --health-probe-bind-address=:8081 + - --metrics-bind-address=:8080 + - --leader-elect + command: + - /node-operator + env: + - name: KUBERNETES_CLUSTER_DOMAIN + value: cluster.local + - name: CONSTEL_CSP + value: GCP + - name: constellation-uid + value: "42424242424242" + - name: GOOGLE_APPLICATION_CREDENTIALS + value: /var/secrets/google/key.json + image: constellationOperatorImage + livenessProbe: + httpGet: + path: /healthz + port: 8081 + initialDelaySeconds: 15 + periodSeconds: 20 + name: manager + readinessProbe: + httpGet: + path: /readyz + port: 8081 + initialDelaySeconds: 5 + periodSeconds: 10 + resources: + limits: + cpu: 500m + memory: 128Mi + requests: + cpu: 10m + memory: 64Mi + securityContext: + allowPrivilegeEscalation: false + volumeMounts: + - mountPath: /etc/kubernetes/pki/etcd + name: etcd-certs + - mountPath: /host/usr/lib/os-release + name: usr-lib-os-release + - mountPath: /etc/os-release + name: etc-os-release + - mountPath: /etc/azure + name: azureconfig + readOnly: true + - mountPath: /etc/gce + name: gceconf + readOnly: true + - mountPath: /var/secrets/google + name: gcekey + readOnly: true + - mountPath: /etc/constellation-upgrade-agent.sock + name: upgrade-agent-socket + readOnly: true nodeSelector: node-role.kubernetes.io/control-plane: "" securityContext: @@ -96,34 +101,38 @@ spec: serviceAccountName: constellation-operator-controller-manager terminationGracePeriodSeconds: 10 tolerations: - - effect: NoSchedule - key: node-role.kubernetes.io/control-plane - operator: Exists - - effect: NoSchedule - key: node-role.kubernetes.io/master - operator: Exists + - effect: NoSchedule + key: node-role.kubernetes.io/control-plane + operator: Exists + - effect: NoSchedule + key: node-role.kubernetes.io/master + operator: Exists volumes: - - hostPath: - path: /etc/kubernetes/pki/etcd - type: Directory - name: etcd-certs - - hostPath: - path: /usr/lib/os-release - type: File - name: usr-lib-os-release - - hostPath: - path: /etc/os-release - type: File - name: etc-os-release - - name: azureconfig - secret: - optional: true - secretName: azureconfig - - configMap: + - hostPath: + path: /etc/kubernetes/pki/etcd + type: Directory + name: etcd-certs + - hostPath: + path: /usr/lib/os-release + type: File + name: usr-lib-os-release + - hostPath: + path: /etc/os-release + type: File + name: etc-os-release + - name: azureconfig + secret: + optional: true + secretName: azureconfig + - configMap: + name: gceconf + optional: true name: gceconf - optional: true - name: gceconf - - name: upgrade-agent-socket - hostPath: - path: /run/constellation-upgrade-agent.sock - type: Socket + - name: gcekey + secret: + secretName: gcekey + optional: true + - name: upgrade-agent-socket + hostPath: + path: /run/constellation-upgrade-agent.sock + type: Socket diff --git a/internal/constellation/helm/testdata/OpenStack/constellation-services/charts/join-service/templates/daemonset.yaml b/internal/constellation/helm/testdata/OpenStack/constellation-services/charts/join-service/templates/daemonset.yaml index 0ed907f4d..96258cbe2 100644 --- a/internal/constellation/helm/testdata/OpenStack/constellation-services/charts/join-service/templates/daemonset.yaml +++ b/internal/constellation/helm/testdata/OpenStack/constellation-services/charts/join-service/templates/daemonset.yaml @@ -40,6 +40,9 @@ spec: - --cloud-provider=OpenStack - --key-service-endpoint=key-service.testNamespace:9000 - --attestation-variant=qemu-vtpm + env: + - name: GOOGLE_APPLICATION_CREDENTIALS + value: /var/secrets/google/key.json volumeMounts: - mountPath: /var/config name: config @@ -47,6 +50,9 @@ spec: - mountPath: /etc/kubernetes name: kubeadm readOnly: true + - mountPath: /var/secrets/google + name: gcekey + readOnly: true ports: - containerPort: 9090 name: tcp @@ -54,6 +60,10 @@ spec: securityContext: privileged: true volumes: + - name: gcekey + secret: + secretName: gcekey + optional: true - name: config projected: sources: diff --git a/internal/constellation/helm/testdata/QEMU/constellation-operators/charts/constellation-operator/templates/deployment.yaml b/internal/constellation/helm/testdata/QEMU/constellation-operators/charts/constellation-operator/templates/deployment.yaml index 99e4a790d..edad32c8d 100644 --- a/internal/constellation/helm/testdata/QEMU/constellation-operators/charts/constellation-operator/templates/deployment.yaml +++ b/internal/constellation/helm/testdata/QEMU/constellation-operators/charts/constellation-operator/templates/deployment.yaml @@ -50,6 +50,8 @@ spec: value: QEMU - name: constellation-uid value: "42424242424242" + - name: GOOGLE_APPLICATION_CREDENTIALS + value: /var/secrets/google/key.json image: constellationOperatorImage livenessProbe: httpGet: @@ -86,6 +88,9 @@ spec: - mountPath: /etc/gce name: gceconf readOnly: true + - mountPath: /var/secrets/google + name: gcekey + readOnly: true - mountPath: /etc/constellation-upgrade-agent.sock name: upgrade-agent-socket readOnly: true @@ -123,6 +128,10 @@ spec: name: gceconf optional: true name: gceconf + - name: gcekey + secret: + secretName: gcekey + optional: true - name: upgrade-agent-socket hostPath: path: /run/constellation-upgrade-agent.sock diff --git a/internal/constellation/helm/testdata/QEMU/constellation-services/charts/join-service/templates/daemonset.yaml b/internal/constellation/helm/testdata/QEMU/constellation-services/charts/join-service/templates/daemonset.yaml index 71ad80428..b1db9147f 100644 --- a/internal/constellation/helm/testdata/QEMU/constellation-services/charts/join-service/templates/daemonset.yaml +++ b/internal/constellation/helm/testdata/QEMU/constellation-services/charts/join-service/templates/daemonset.yaml @@ -40,6 +40,9 @@ spec: - --cloud-provider=QEMU - --key-service-endpoint=key-service.testNamespace:9000 - --attestation-variant=qemu-vtpm + env: + - name: GOOGLE_APPLICATION_CREDENTIALS + value: /var/secrets/google/key.json volumeMounts: - mountPath: /var/config name: config @@ -47,6 +50,9 @@ spec: - mountPath: /etc/kubernetes name: kubeadm readOnly: true + - mountPath: /var/secrets/google + name: gcekey + readOnly: true ports: - containerPort: 9090 name: tcp @@ -54,6 +60,10 @@ spec: securityContext: privileged: true volumes: + - name: gcekey + secret: + secretName: gcekey + optional: true - name: config projected: sources: diff --git a/operators/constellation-node-operator/config/manager/manager.yaml b/operators/constellation-node-operator/config/manager/manager.yaml index 32b39e301..314209305 100644 --- a/operators/constellation-node-operator/config/manager/manager.yaml +++ b/operators/constellation-node-operator/config/manager/manager.yaml @@ -31,6 +31,9 @@ spec: - /manager args: - --leader-elect + env: + - name: GOOGLE_APPLICATION_CREDENTIALS + value: /var/secrets/google/key.json image: controller:latest name: manager securityContext: @@ -60,6 +63,9 @@ spec: - mountPath: /etc/gce name: gceconf readOnly: true + - mountPath: /var/secrets/google + name: gcekey + readOnly: true - mountPath: /etc/constellation-upgrade-agent.sock name: upgrade-agent-socket readOnly: true @@ -91,6 +97,10 @@ spec: configMap: name: gceconf optional: true + - name: gcekey + secret: + secretName: gcekey + optional: true - name: upgrade-agent-socket hostPath: path: /run/constellation-upgrade-agent.sock diff --git a/terraform-provider-constellation/examples/full/gcp/main.tf b/terraform-provider-constellation/examples/full/gcp/main.tf index d685785b0..529aedebe 100644 --- a/terraform-provider-constellation/examples/full/gcp/main.tf +++ b/terraform-provider-constellation/examples/full/gcp/main.tf @@ -45,11 +45,11 @@ resource "random_bytes" "measurement_salt" { module "gcp_iam" { // replace $VERSION with the Constellation version you want to use, e.g., v2.14.0 - source = "https://github.com/edgelesssys/constellation/releases/download/$VERSION/terraform-module.zip//terraform-module/iam/gcp" - project_id = local.project_id - service_account_id = "${local.name}-sa" - zone = local.zone - region = local.region + source = "https://github.com/edgelesssys/constellation/releases/download/$VERSION/terraform-module.zip//terraform-module/iam/gcp" + project_id = local.project_id + name_prefix = local.name + zone = local.zone + region = local.region } module "gcp_infrastructure" { @@ -81,6 +81,7 @@ module "gcp_infrastructure" { project = local.project_id internal_load_balancer = false cc_technology = local.cc_technology + iam_service_account_vm = module.gcp_iam.service_account_mail_vm } data "constellation_attestation" "foo" { diff --git a/terraform/infrastructure/gcp/main.tf b/terraform/infrastructure/gcp/main.tf index f3af09a5a..dd8f72b34 100644 --- a/terraform/infrastructure/gcp/main.tf +++ b/terraform/infrastructure/gcp/main.tf @@ -161,28 +161,29 @@ resource "google_compute_firewall" "firewall_internal_pods" { } module "instance_group" { - source = "./modules/instance_group" - for_each = var.node_groups - base_name = local.name - node_group_name = each.key - role = each.value.role - zone = each.value.zone - uid = local.uid - instance_type = each.value.instance_type - initial_count = each.value.initial_count - image_id = var.image_id - disk_size = each.value.disk_size - disk_type = each.value.disk_type - network = google_compute_network.vpc_network.id - subnetwork = google_compute_subnetwork.vpc_subnetwork.id - alias_ip_range_name = google_compute_subnetwork.vpc_subnetwork.secondary_ip_range[0].range_name - kube_env = local.kube_env - debug = var.debug - named_ports = each.value.role == "control-plane" ? local.control_plane_named_ports : [] - labels = local.labels - init_secret_hash = local.init_secret_hash - custom_endpoint = var.custom_endpoint - cc_technology = var.cc_technology + source = "./modules/instance_group" + for_each = var.node_groups + base_name = local.name + node_group_name = each.key + role = each.value.role + zone = each.value.zone + uid = local.uid + instance_type = each.value.instance_type + initial_count = each.value.initial_count + image_id = var.image_id + disk_size = each.value.disk_size + disk_type = each.value.disk_type + network = google_compute_network.vpc_network.id + subnetwork = google_compute_subnetwork.vpc_subnetwork.id + alias_ip_range_name = google_compute_subnetwork.vpc_subnetwork.secondary_ip_range[0].range_name + kube_env = local.kube_env + debug = var.debug + named_ports = each.value.role == "control-plane" ? local.control_plane_named_ports : [] + labels = local.labels + init_secret_hash = local.init_secret_hash + custom_endpoint = var.custom_endpoint + cc_technology = var.cc_technology + iam_service_account_vm = var.iam_service_account_vm } resource "google_compute_address" "loadbalancer_ip_internal" { diff --git a/terraform/infrastructure/gcp/modules/instance_group/main.tf b/terraform/infrastructure/gcp/modules/instance_group/main.tf index 1726435e6..90da4ebf9 100644 --- a/terraform/infrastructure/gcp/modules/instance_group/main.tf +++ b/terraform/infrastructure/gcp/modules/instance_group/main.tf @@ -77,17 +77,11 @@ resource "google_compute_instance_template" "template" { on_host_maintenance = "TERMINATE" } + # Define all IAM access via the service account and not via scopes: + # See: https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/compute_instance_template#nested_service_account service_account { - scopes = [ - "https://www.googleapis.com/auth/compute", - "https://www.googleapis.com/auth/servicecontrol", - "https://www.googleapis.com/auth/service.management.readonly", - "https://www.googleapis.com/auth/devstorage.read_only", - "https://www.googleapis.com/auth/logging.write", - "https://www.googleapis.com/auth/monitoring.write", - "https://www.googleapis.com/auth/trace.append", - "https://www.googleapis.com/auth/cloud-platform", - ] + email = var.iam_service_account_vm + scopes = ["cloud-platform"] } shielded_instance_config { diff --git a/terraform/infrastructure/gcp/modules/instance_group/variables.tf b/terraform/infrastructure/gcp/modules/instance_group/variables.tf index 5370ec7d1..e4d2cbe5c 100644 --- a/terraform/infrastructure/gcp/modules/instance_group/variables.tf +++ b/terraform/infrastructure/gcp/modules/instance_group/variables.tf @@ -108,3 +108,9 @@ variable "cc_technology" { error_message = "The confidential computing technology has to be 'SEV' or 'SEV_SNP'." } } + +variable "iam_service_account_vm" { + type = string + default = "" + description = "IAM service account used for the VMs" +} diff --git a/terraform/infrastructure/gcp/variables.tf b/terraform/infrastructure/gcp/variables.tf index b62b975db..c29c24391 100644 --- a/terraform/infrastructure/gcp/variables.tf +++ b/terraform/infrastructure/gcp/variables.tf @@ -76,6 +76,11 @@ variable "additional_labels" { description = "Additional labels that should be given to created recources." } +variable "iam_service_account_vm" { + type = string + default = "" + description = "IAM service account used for the VMs" +} variable "emergency_ssh" { type = bool default = false diff --git a/terraform/infrastructure/iam/gcp/main.tf b/terraform/infrastructure/iam/gcp/main.tf index dc27c5f6c..3cda6e306 100644 --- a/terraform/infrastructure/iam/gcp/main.tf +++ b/terraform/infrastructure/iam/gcp/main.tf @@ -13,8 +13,19 @@ provider "google" { zone = var.zone } +locals { + sa_name = var.name_prefix == "" ? var.service_account_id : "${var.name_prefix}-sa" + sa_vm_name = var.name_prefix == "" ? "${var.service_account_id}-vm" : "${var.name_prefix}-sa-vm" +} + +resource "google_service_account" "vm" { + account_id = local.sa_vm_name + display_name = "Constellation service account for VMs" + description = "Service account used by the VMs" +} + resource "google_service_account" "service_account" { - account_id = var.service_account_id + account_id = local.sa_name display_name = "Constellation service account" description = "Service account used inside Constellation" } @@ -65,6 +76,30 @@ resource "google_project_iam_member" "iam_service_account_user_role" { depends_on = [null_resource.delay] } +resource "google_project_iam_custom_role" "vm" { + # role_id must not contain dashes + role_id = replace("${local.sa_vm_name}-role", "-", "_") + title = "Constellation IAM role for VMs" + description = "Constellation IAM role for VMs" + permissions = [ + "compute.instances.get", + "compute.instances.list", + "compute.subnetworks.get", + "compute.globalForwardingRules.list", + "compute.zones.list", + ] +} + +resource "google_project_iam_binding" "custom_role_vm_to_service_account_vm" { + project = var.project_id + role = "projects/${var.project_id}/roles/${google_project_iam_custom_role.vm.role_id}" + + members = [ + "serviceAccount:${google_service_account.vm.email}", + ] + depends_on = [null_resource.delay] +} + resource "google_service_account_key" "service_account_key" { service_account_id = google_service_account.service_account.name depends_on = [null_resource.delay] diff --git a/terraform/infrastructure/iam/gcp/outputs.tf b/terraform/infrastructure/iam/gcp/outputs.tf index 437261bb8..45d586de6 100644 --- a/terraform/infrastructure/iam/gcp/outputs.tf +++ b/terraform/infrastructure/iam/gcp/outputs.tf @@ -3,3 +3,9 @@ output "service_account_key" { description = "Private key of the service account." sensitive = true } + +output "service_account_mail_vm" { + value = google_service_account.vm.email + description = "Mail address of the service account to be attached to the VMs" + sensitive = false +} diff --git a/terraform/infrastructure/iam/gcp/variables.tf b/terraform/infrastructure/iam/gcp/variables.tf index 19c25d787..b1895f0fc 100644 --- a/terraform/infrastructure/iam/gcp/variables.tf +++ b/terraform/infrastructure/iam/gcp/variables.tf @@ -5,7 +5,12 @@ variable "project_id" { variable "service_account_id" { type = string - description = "ID for the service account being created. Must match ^[a-z](?:[-a-z0-9]{4,28}[a-z0-9])$." + description = "[DEPRECATED use var.name_prefix] ID for the service account being created. Must match ^[a-z](?:[-a-z0-9]{4,28}[a-z0-9])$." +} + +variable "name_prefix" { + type = string + description = "Prefix to be used for all resources created by this module." } variable "region" { From 18e67e7debf728d986b3a5dda4419d78d1438615 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 26 Mar 2025 19:31:00 +0100 Subject: [PATCH 176/311] deps: update golangci/golangci-lint to v2.0.2 (#3715) * deps: update golangci/golangci-lint to v2.0.2 * deps: tidy all modules --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: edgelessci --- bazel/toolchains/ci_deps.bzl | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/bazel/toolchains/ci_deps.bzl b/bazel/toolchains/ci_deps.bzl index 2852a801d..a2479439b 100644 --- a/bazel/toolchains/ci_deps.bzl +++ b/bazel/toolchains/ci_deps.bzl @@ -223,45 +223,45 @@ def _golangci_lint_deps(): name = "com_github_golangci_golangci_lint_linux_amd64", build_file = "//bazel/toolchains:BUILD.golangci.bazel", urls = [ - "https://cdn.confidential.cloud/constellation/cas/sha256/9bfc38d7869834443c03ef5f9977e78207cca386a89c2ad0ecd2bd85ccdabe29", - "https://github.com/golangci/golangci-lint/releases/download/v2.0.1/golangci-lint-2.0.1-linux-amd64.tar.gz", + "https://cdn.confidential.cloud/constellation/cas/sha256/89cc8a7810dc63b9a37900da03e37c3601caf46d42265d774e0f1a5d883d53e2", + "https://github.com/golangci/golangci-lint/releases/download/v2.0.2/golangci-lint-2.0.2-linux-amd64.tar.gz", ], - strip_prefix = "golangci-lint-2.0.1-linux-amd64", + strip_prefix = "golangci-lint-2.0.2-linux-amd64", type = "tar.gz", - sha256 = "9bfc38d7869834443c03ef5f9977e78207cca386a89c2ad0ecd2bd85ccdabe29", + sha256 = "89cc8a7810dc63b9a37900da03e37c3601caf46d42265d774e0f1a5d883d53e2", ) http_archive( name = "com_github_golangci_golangci_lint_linux_arm64", build_file = "//bazel/toolchains:BUILD.golangci.bazel", urls = [ - "https://cdn.confidential.cloud/constellation/cas/sha256/e5cee439b9d16eb2bf5ddc7e4e8b2d9465fb87c051fa307056b192a6f49b3796", - "https://github.com/golangci/golangci-lint/releases/download/v2.0.1/golangci-lint-2.0.1-linux-arm64.tar.gz", + "https://cdn.confidential.cloud/constellation/cas/sha256/789d5b91219ac68c2336f77d41cd7e33a910420594780f455893f8453d09595b", + "https://github.com/golangci/golangci-lint/releases/download/v2.0.2/golangci-lint-2.0.2-linux-arm64.tar.gz", ], - strip_prefix = "golangci-lint-2.0.1-linux-arm64", + strip_prefix = "golangci-lint-2.0.2-linux-arm64", type = "tar.gz", - sha256 = "e5cee439b9d16eb2bf5ddc7e4e8b2d9465fb87c051fa307056b192a6f49b3796", + sha256 = "789d5b91219ac68c2336f77d41cd7e33a910420594780f455893f8453d09595b", ) http_archive( name = "com_github_golangci_golangci_lint_darwin_amd64", build_file = "//bazel/toolchains:BUILD.golangci.bazel", urls = [ - "https://cdn.confidential.cloud/constellation/cas/sha256/ab6cfa62b3e71f14e05fae450537ef94c68cc19d3f2153e59644b0671c386557", - "https://github.com/golangci/golangci-lint/releases/download/v2.0.1/golangci-lint-2.0.1-darwin-amd64.tar.gz", + "https://cdn.confidential.cloud/constellation/cas/sha256/a88cbdc86b483fe44e90bf2dcc3fec2af8c754116e6edf0aa6592cac5baa7a0e", + "https://github.com/golangci/golangci-lint/releases/download/v2.0.2/golangci-lint-2.0.2-darwin-amd64.tar.gz", ], - strip_prefix = "golangci-lint-2.0.1-darwin-amd64", + strip_prefix = "golangci-lint-2.0.2-darwin-amd64", type = "tar.gz", - sha256 = "ab6cfa62b3e71f14e05fae450537ef94c68cc19d3f2153e59644b0671c386557", + sha256 = "a88cbdc86b483fe44e90bf2dcc3fec2af8c754116e6edf0aa6592cac5baa7a0e", ) http_archive( name = "com_github_golangci_golangci_lint_darwin_arm64", build_file = "//bazel/toolchains:BUILD.golangci.bazel", urls = [ - "https://cdn.confidential.cloud/constellation/cas/sha256/a51f5f2f2b20ce481c33a6d34b94076d94389a835c646c77f356ea022d610c15", - "https://github.com/golangci/golangci-lint/releases/download/v2.0.1/golangci-lint-2.0.1-darwin-arm64.tar.gz", + "https://cdn.confidential.cloud/constellation/cas/sha256/664550e7954f5f4451aae99b4f7382c1a47039c66f39ca605f5d9af1a0d32b49", + "https://github.com/golangci/golangci-lint/releases/download/v2.0.2/golangci-lint-2.0.2-darwin-arm64.tar.gz", ], - strip_prefix = "golangci-lint-2.0.1-darwin-arm64", + strip_prefix = "golangci-lint-2.0.2-darwin-arm64", type = "tar.gz", - sha256 = "a51f5f2f2b20ce481c33a6d34b94076d94389a835c646c77f356ea022d610c15", + sha256 = "664550e7954f5f4451aae99b4f7382c1a47039c66f39ca605f5d9af1a0d32b49", ) def _buf_deps(): From f5cd6a9d0bbf697fc4cf2373006cfc0e849095a3 Mon Sep 17 00:00:00 2001 From: edgelessci <71088502+edgelessci@users.noreply.github.com> Date: Wed, 26 Mar 2025 19:31:53 +0100 Subject: [PATCH 177/311] image: update measurements and image version (#3713) Co-authored-by: edgelessci --- .../measurements/measurements_enterprise.go | 16 ++++++++-------- internal/config/image_enterprise.go | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/internal/attestation/measurements/measurements_enterprise.go b/internal/attestation/measurements/measurements_enterprise.go index 90b50c9c7..d5ffbd0ff 100644 --- a/internal/attestation/measurements/measurements_enterprise.go +++ b/internal/attestation/measurements/measurements_enterprise.go @@ -19,14 +19,14 @@ package measurements // revive:disable:var-naming var ( - aws_AWSNitroTPM = M{0: {Expected: []byte{0x73, 0x7f, 0x76, 0x7a, 0x12, 0xf5, 0x4e, 0x70, 0xee, 0xcb, 0xc8, 0x68, 0x40, 0x11, 0x32, 0x3a, 0xe2, 0xfe, 0x2d, 0xd9, 0xf9, 0x07, 0x85, 0x57, 0x79, 0x69, 0xd7, 0xa2, 0x01, 0x3e, 0x8c, 0x12}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xb5, 0xc4, 0x99, 0x57, 0xcc, 0x7e, 0xf3, 0x82, 0xf6, 0xaa, 0xc1, 0x82, 0x1a, 0x0a, 0x0b, 0x30, 0x64, 0x26, 0x1d, 0x03, 0x6b, 0x14, 0x2b, 0xdf, 0x1c, 0xa8, 0xd9, 0xf0, 0x7c, 0x70, 0x63, 0x49}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x90, 0x7a, 0x0d, 0x14, 0xde, 0x7d, 0x74, 0xd0, 0x93, 0xd9, 0xd0, 0xca, 0x90, 0xe7, 0xde, 0x52, 0xd9, 0xd4, 0x09, 0xb8, 0xb8, 0x99, 0x96, 0xe4, 0x0d, 0xde, 0xc0, 0xb1, 0x3e, 0xc6, 0x52, 0xa3}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x03, 0xc4, 0xca, 0x1b, 0x51, 0x4a, 0xaf, 0xb2, 0xcd, 0xcb, 0x41, 0x7c, 0xd5, 0x38, 0x64, 0x37, 0x55, 0xaf, 0xad, 0x58, 0x44, 0x35, 0x5f, 0xe1, 0x0f, 0xe0, 0xfd, 0x79, 0xcc, 0x8c, 0x40, 0x4c}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - aws_AWSSEVSNP = M{0: {Expected: []byte{0xd6, 0xdf, 0x85, 0x53, 0x58, 0xf5, 0xb1, 0x0f, 0x06, 0xf0, 0xfa, 0xb3, 0xf4, 0x08, 0xad, 0x26, 0xcd, 0x16, 0x5a, 0x29, 0x49, 0xba, 0xd6, 0x9e, 0x2c, 0xc7, 0x56, 0x92, 0x52, 0x9e, 0x66, 0x2a}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xdc, 0x89, 0x83, 0x62, 0x79, 0xc5, 0xb2, 0xd2, 0xc0, 0xc9, 0x4f, 0x5e, 0x83, 0x7c, 0x2d, 0xd7, 0x23, 0x5c, 0x47, 0xff, 0xa6, 0x3a, 0x93, 0x85, 0xeb, 0x70, 0x1e, 0x2d, 0x8d, 0x83, 0x3b, 0xce}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x8b, 0x44, 0x82, 0x99, 0x3d, 0x2f, 0xaf, 0xc7, 0xee, 0xe3, 0x0e, 0x46, 0xf8, 0xac, 0xff, 0x62, 0x1f, 0xb1, 0xf1, 0x6c, 0xab, 0x3d, 0x4c, 0xd1, 0x89, 0x41, 0xaa, 0xc3, 0x91, 0x71, 0x0c, 0x97}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x26, 0x3f, 0xf8, 0xa3, 0xa0, 0x06, 0xf7, 0x47, 0xf1, 0x12, 0xc6, 0xac, 0x1c, 0x7a, 0x84, 0xa5, 0x79, 0x90, 0x45, 0xf3, 0xcd, 0x66, 0x1e, 0x78, 0xd0, 0xfc, 0x70, 0x53, 0x4f, 0x5b, 0x82, 0x18}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - azure_AzureSEVSNP = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x55, 0x9a, 0xd2, 0x03, 0x30, 0x5c, 0xff, 0xbe, 0xb7, 0x48, 0xac, 0x3e, 0xa3, 0x00, 0x2d, 0xe6, 0xb3, 0x02, 0x24, 0x44, 0x64, 0x19, 0x81, 0x3a, 0x70, 0xb1, 0xa4, 0x97, 0x60, 0x50, 0xc3, 0x6d}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x35, 0x4f, 0x33, 0xa2, 0x98, 0x35, 0x03, 0x73, 0xf7, 0x12, 0xde, 0x3a, 0xd3, 0x84, 0x89, 0x2a, 0xc3, 0xfb, 0x8a, 0xa1, 0xb5, 0xbf, 0x6a, 0x68, 0x3a, 0x17, 0x9b, 0x63, 0xec, 0xaf, 0xf3, 0xb5}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xfa, 0x10, 0x7c, 0xab, 0x12, 0xa9, 0xbb, 0x23, 0xca, 0x3f, 0x4f, 0xf9, 0x3d, 0xf9, 0xa8, 0xa5, 0x0e, 0x9f, 0x1d, 0xbf, 0x86, 0x18, 0x52, 0xea, 0x93, 0xdd, 0xfa, 0xa6, 0x84, 0xfb, 0xf5, 0xdf}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - azure_AzureTDX = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x1f, 0x75, 0x67, 0xce, 0xc8, 0x59, 0x25, 0x8f, 0xbd, 0xe5, 0xf7, 0x43, 0x16, 0x3a, 0x79, 0x04, 0x56, 0x8d, 0xaf, 0x01, 0x5f, 0xce, 0x62, 0xc6, 0x45, 0x01, 0x0b, 0x00, 0xce, 0x0c, 0x13, 0x71}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x1a, 0x04, 0xdc, 0xd3, 0x20, 0xef, 0x51, 0xac, 0x55, 0x32, 0x87, 0xd9, 0xe3, 0x13, 0xa9, 0xf2, 0x04, 0x61, 0x14, 0x7b, 0x5d, 0x79, 0xe3, 0x34, 0x7c, 0x11, 0x9d, 0xaa, 0x3c, 0x7f, 0x5b, 0xe7}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xf0, 0x81, 0xe1, 0xd4, 0xb0, 0x4d, 0x9a, 0x9c, 0xdd, 0x39, 0xb6, 0x58, 0x27, 0xdf, 0x12, 0xb1, 0x43, 0x48, 0x95, 0x1d, 0x8e, 0x86, 0x03, 0x85, 0x67, 0x43, 0x4c, 0x16, 0x5e, 0xa8, 0x2e, 0x58}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + aws_AWSNitroTPM = M{0: {Expected: []byte{0x73, 0x7f, 0x76, 0x7a, 0x12, 0xf5, 0x4e, 0x70, 0xee, 0xcb, 0xc8, 0x68, 0x40, 0x11, 0x32, 0x3a, 0xe2, 0xfe, 0x2d, 0xd9, 0xf9, 0x07, 0x85, 0x57, 0x79, 0x69, 0xd7, 0xa2, 0x01, 0x3e, 0x8c, 0x12}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xb4, 0x47, 0xde, 0x00, 0xba, 0x2a, 0x3d, 0xed, 0x3e, 0x96, 0xf3, 0xfb, 0x48, 0x92, 0x44, 0xad, 0x41, 0x38, 0xfb, 0x86, 0x88, 0xdb, 0x68, 0x59, 0x6e, 0xa2, 0x26, 0xe3, 0x3b, 0x6e, 0xce, 0x60}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x87, 0x1a, 0x8d, 0xcd, 0xb8, 0xd0, 0x57, 0xdf, 0x0b, 0x94, 0x5f, 0x7d, 0xc0, 0x04, 0x75, 0x65, 0x08, 0x22, 0xf1, 0x14, 0x76, 0x9f, 0x01, 0xb7, 0x2e, 0x8c, 0x72, 0xb6, 0x79, 0xd4, 0x0e, 0x7f}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x01, 0x36, 0xb6, 0x68, 0x47, 0xef, 0xa2, 0x0b, 0xf3, 0x5f, 0x7f, 0x8c, 0x49, 0xb6, 0x6a, 0xa4, 0x7e, 0x52, 0x74, 0xd2, 0xdb, 0x34, 0x98, 0x74, 0xa4, 0x6a, 0x50, 0x5d, 0x7c, 0x89, 0x60, 0x8d}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + aws_AWSSEVSNP = M{0: {Expected: []byte{0xd6, 0xdf, 0x85, 0x53, 0x58, 0xf5, 0xb1, 0x0f, 0x06, 0xf0, 0xfa, 0xb3, 0xf4, 0x08, 0xad, 0x26, 0xcd, 0x16, 0x5a, 0x29, 0x49, 0xba, 0xd6, 0x9e, 0x2c, 0xc7, 0x56, 0x92, 0x52, 0x9e, 0x66, 0x2a}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x72, 0x66, 0x5c, 0xd5, 0xc1, 0x6a, 0x58, 0x13, 0xed, 0xa5, 0x7d, 0x86, 0x1a, 0x6a, 0x84, 0x9c, 0x79, 0x63, 0x63, 0x70, 0xd3, 0x81, 0x4a, 0x66, 0xb5, 0xbe, 0xa2, 0xb5, 0x52, 0xf4, 0xd2, 0x77}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x17, 0x79, 0x74, 0xde, 0xbe, 0xc1, 0xd6, 0xbb, 0x30, 0x61, 0x05, 0x3c, 0x19, 0xde, 0x74, 0x64, 0x19, 0x03, 0xfd, 0xf5, 0x35, 0xa1, 0x18, 0xbe, 0x65, 0xd2, 0x69, 0xe2, 0xf6, 0xf7, 0x4f, 0xb4}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x67, 0xec, 0x72, 0xef, 0x81, 0x8f, 0xc1, 0x34, 0x64, 0xed, 0x81, 0x74, 0xb1, 0x4b, 0x9a, 0xa0, 0x6a, 0x63, 0xfe, 0x5d, 0x04, 0x72, 0xe8, 0x8d, 0x14, 0x6e, 0x49, 0x60, 0xb4, 0x4e, 0x71, 0xd9}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + azure_AzureSEVSNP = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x73, 0x4e, 0xa7, 0x9c, 0xad, 0xde, 0x76, 0x1a, 0x1f, 0xa6, 0xb9, 0xe6, 0x6f, 0x55, 0xef, 0x1b, 0xf3, 0x44, 0x42, 0x67, 0x76, 0x45, 0x49, 0xe2, 0x7a, 0x37, 0x90, 0xcd, 0xde, 0x10, 0x8a, 0x88}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xea, 0x72, 0x71, 0x28, 0x69, 0xac, 0x7e, 0xb0, 0xca, 0x87, 0x6d, 0x96, 0x56, 0xab, 0x99, 0xed, 0xcc, 0xd5, 0x48, 0x69, 0xfa, 0x1a, 0xe6, 0x79, 0x50, 0x5e, 0x8a, 0x67, 0x34, 0x01, 0x64, 0x7c}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x60, 0xec, 0x57, 0xff, 0xe6, 0x22, 0x03, 0x24, 0xca, 0xd4, 0x54, 0x2c, 0x11, 0x15, 0xd7, 0x79, 0x80, 0xb2, 0xc2, 0x7d, 0x26, 0xb1, 0x75, 0x5d, 0x9f, 0xfd, 0xd8, 0xd3, 0x1b, 0x71, 0x97, 0xc0}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + azure_AzureTDX = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x6b, 0xdb, 0x9f, 0x18, 0xea, 0xba, 0xdc, 0x73, 0x82, 0xc6, 0x23, 0x03, 0xdf, 0x65, 0x2b, 0xe1, 0xe3, 0xd5, 0x60, 0x5c, 0x86, 0xd0, 0x80, 0x9f, 0x66, 0x02, 0x10, 0x58, 0x72, 0x60, 0x7d, 0xed}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xdf, 0x6f, 0x42, 0xc8, 0x5d, 0x40, 0xaf, 0x53, 0x69, 0x09, 0xad, 0x00, 0xdc, 0xcd, 0xfc, 0xac, 0x22, 0x8a, 0x38, 0x1c, 0x13, 0x11, 0x3e, 0xfa, 0xdb, 0x8a, 0xe6, 0xcd, 0x00, 0xa6, 0xea, 0xa9}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xff, 0xa0, 0xee, 0x7e, 0xe4, 0x5a, 0x24, 0x4b, 0x25, 0x9f, 0xb9, 0x8f, 0x0e, 0xb6, 0xb1, 0xc3, 0x15, 0xf4, 0x46, 0x18, 0x13, 0xdb, 0x23, 0xf0, 0x7d, 0xc0, 0x2d, 0xfd, 0x34, 0xc4, 0xe8, 0x71}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} azure_AzureTrustedLaunch M - gcp_GCPSEVES = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xaf, 0x56, 0x9c, 0x07, 0x20, 0xe1, 0xd9, 0xde, 0x9b, 0x07, 0x1a, 0xa2, 0xd6, 0x02, 0x8b, 0x1d, 0x91, 0xd6, 0xa8, 0xb4, 0x06, 0xe3, 0xd4, 0xbe, 0x69, 0xe0, 0xf3, 0xf5, 0xe4, 0x60, 0xa0, 0xa4}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xbe, 0xf7, 0x2e, 0x16, 0x4f, 0xe6, 0xa4, 0x80, 0xf3, 0x80, 0x7d, 0xaf, 0x98, 0x88, 0xe5, 0xa3, 0x67, 0x35, 0xba, 0x01, 0x41, 0x12, 0x5f, 0x23, 0x1b, 0x64, 0xe4, 0xbc, 0xbc, 0xee, 0x68, 0xe6}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x30, 0xc0, 0x45, 0x76, 0x4e, 0x38, 0xd6, 0xc3, 0xe0, 0xac, 0x19, 0x0e, 0x90, 0xe9, 0xf8, 0x4e, 0xa6, 0xc6, 0x3c, 0x8f, 0x77, 0x7a, 0x62, 0xc6, 0x3a, 0x2f, 0x46, 0x77, 0x8b, 0x77, 0x23, 0xb4}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - gcp_GCPSEVSNP = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x74, 0xfe, 0xc7, 0x47, 0x7f, 0xa0, 0xc9, 0x21, 0xe7, 0xf9, 0x6c, 0xc3, 0x88, 0x76, 0x3f, 0x84, 0xb9, 0x5e, 0xce, 0x2a, 0xce, 0xf5, 0x9d, 0xb1, 0x29, 0x2b, 0xa1, 0x97, 0x77, 0xde, 0x6a, 0x04}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xd7, 0xa2, 0x13, 0xa7, 0xd8, 0x3f, 0x03, 0xbb, 0xfc, 0x18, 0x02, 0x81, 0x88, 0x62, 0x3a, 0xa5, 0xf7, 0xdf, 0x92, 0xf5, 0xa9, 0xf9, 0x8f, 0x32, 0x50, 0x48, 0x0a, 0x6b, 0xda, 0x12, 0xe6, 0x28}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xe9, 0x5c, 0x3d, 0x76, 0x94, 0x08, 0xfe, 0xf3, 0xb8, 0x75, 0x68, 0x49, 0x7b, 0x72, 0x1c, 0x7d, 0xef, 0x81, 0xc7, 0x0e, 0x54, 0x01, 0x30, 0x9b, 0x41, 0x7f, 0x33, 0x5c, 0x76, 0x0d, 0x77, 0xc5}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - openstack_QEMUVTPM = M{4: {Expected: []byte{0xb3, 0x9e, 0x7f, 0x79, 0xa1, 0xa3, 0x52, 0x1f, 0xcb, 0x7f, 0xbc, 0x2f, 0x88, 0x63, 0x37, 0x35, 0x5f, 0xf8, 0xe3, 0xb8, 0xc1, 0x61, 0x79, 0x2f, 0xda, 0x4b, 0x86, 0x5e, 0xa6, 0x30, 0xa6, 0x35}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x1d, 0x19, 0x76, 0x78, 0x27, 0x8d, 0x22, 0xb2, 0x65, 0xd6, 0x6c, 0xc2, 0x91, 0x6d, 0x96, 0xc2, 0x3b, 0xf9, 0x91, 0x1b, 0x7e, 0x54, 0x85, 0xac, 0xc3, 0xc8, 0x58, 0x7c, 0xad, 0xc2, 0x38, 0xa7}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xa6, 0xe2, 0xcb, 0x6a, 0xb4, 0xac, 0x96, 0x64, 0x2c, 0x29, 0x6b, 0x13, 0xee, 0x9d, 0xf1, 0xe7, 0x60, 0xd7, 0xd8, 0xf3, 0xa6, 0x10, 0x6d, 0x12, 0x9e, 0xf5, 0x6f, 0xf3, 0xea, 0x66, 0x05, 0x2d}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + gcp_GCPSEVES = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x92, 0x66, 0xd0, 0x6e, 0x5e, 0xb3, 0x3f, 0xf6, 0xb0, 0x92, 0x1e, 0xe8, 0x2c, 0x05, 0x21, 0x2f, 0x9a, 0x2e, 0x84, 0x28, 0xbe, 0x2e, 0xd8, 0x68, 0x32, 0xbb, 0xde, 0x2c, 0xc8, 0xb5, 0x39, 0xa0}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x2a, 0x84, 0x7c, 0xc5, 0x8d, 0x77, 0x28, 0x17, 0xa5, 0xfe, 0x67, 0xa0, 0xd8, 0x93, 0xf3, 0x2b, 0x14, 0x72, 0x03, 0x28, 0x40, 0xe2, 0x5b, 0xff, 0x9f, 0xb0, 0xae, 0xed, 0x51, 0x2b, 0x18, 0xcd}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xf2, 0x24, 0x44, 0xa6, 0x16, 0x5d, 0xb8, 0x33, 0x16, 0x6c, 0xcf, 0xe0, 0xb6, 0x2e, 0x87, 0x61, 0x9c, 0xab, 0x9a, 0xe0, 0x99, 0x47, 0xd1, 0x4c, 0xd7, 0x49, 0xd5, 0x10, 0x94, 0x8b, 0xa3, 0x40}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + gcp_GCPSEVSNP = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x84, 0x8b, 0x9c, 0xaa, 0x6c, 0x84, 0x02, 0x1f, 0x11, 0x84, 0xce, 0xa9, 0x31, 0x11, 0x76, 0xf9, 0xad, 0x86, 0xa6, 0x1a, 0x48, 0x48, 0xa1, 0xd0, 0x16, 0xef, 0xf4, 0x06, 0x42, 0xb6, 0x72, 0xd9}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x79, 0x19, 0x84, 0x5f, 0x0b, 0xd0, 0x32, 0xbf, 0x10, 0xf4, 0xed, 0x37, 0x8b, 0xbf, 0xfb, 0xb4, 0x21, 0xa7, 0x71, 0x72, 0x38, 0x6b, 0xf7, 0x7f, 0xd0, 0x01, 0x57, 0x89, 0xf3, 0xb2, 0x5f, 0x95}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x5b, 0x43, 0x62, 0x1a, 0x1b, 0x5f, 0xcc, 0x56, 0x02, 0x6c, 0x9f, 0x66, 0x15, 0x65, 0xd8, 0xff, 0x48, 0x6a, 0xf0, 0xc9, 0x66, 0xca, 0x25, 0xbe, 0x73, 0x64, 0xb7, 0x6c, 0x9c, 0x51, 0xcd, 0xef}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + openstack_QEMUVTPM = M{4: {Expected: []byte{0x0f, 0xd9, 0x9d, 0x60, 0x1b, 0x1a, 0xae, 0x2c, 0x98, 0xaf, 0xf4, 0x72, 0xcf, 0x23, 0x8f, 0xea, 0xd3, 0x97, 0xaf, 0xf0, 0xa8, 0x96, 0x97, 0x78, 0x4b, 0x90, 0xa9, 0x16, 0x34, 0xca, 0xaa, 0xe3}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x1a, 0xbb, 0x8e, 0x0e, 0xf5, 0x8e, 0x7f, 0x1d, 0xd5, 0x92, 0x31, 0x5b, 0xc1, 0x95, 0xee, 0x10, 0x7b, 0xaf, 0xe5, 0x11, 0x39, 0x78, 0x98, 0xe2, 0xd7, 0x3b, 0xdd, 0x4c, 0xf5, 0xa5, 0x4c, 0x34}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x52, 0xd4, 0x34, 0x32, 0xa1, 0x2a, 0x04, 0x81, 0x3e, 0x8c, 0x7e, 0xa5, 0x4c, 0xa7, 0xca, 0x2b, 0x1d, 0xe8, 0x15, 0xd1, 0xa4, 0xa2, 0xb5, 0x58, 0x9c, 0x0a, 0x19, 0x87, 0x58, 0xa5, 0xe0, 0x91}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} qemu_QEMUTDX M - qemu_QEMUVTPM = M{4: {Expected: []byte{0x89, 0x78, 0xe0, 0xec, 0x09, 0x67, 0x67, 0x5c, 0x45, 0xf5, 0x6c, 0x01, 0xa1, 0xff, 0xb5, 0xde, 0x68, 0x02, 0x51, 0x0a, 0x2c, 0x89, 0xad, 0x1d, 0x3a, 0x44, 0x62, 0xa1, 0xfc, 0x5c, 0xf2, 0x1a}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x61, 0x47, 0xb2, 0xb2, 0xa5, 0xfc, 0x5b, 0xc3, 0xc9, 0xa5, 0xdc, 0x4c, 0xa9, 0xf4, 0x33, 0x6e, 0xf1, 0x6d, 0x38, 0xb6, 0x49, 0xb7, 0xf3, 0x35, 0x0e, 0x05, 0xf3, 0xe4, 0x68, 0x32, 0x76, 0x63}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x9f, 0x51, 0xe1, 0x17, 0xa4, 0x91, 0xd4, 0x0c, 0xaa, 0x2b, 0x82, 0x6c, 0x37, 0xd0, 0x5c, 0x5f, 0x0b, 0x6e, 0x16, 0xd2, 0xcc, 0xaa, 0x0a, 0xcd, 0x76, 0xd0, 0xd7, 0x2f, 0x2c, 0xee, 0xda, 0xe3}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + qemu_QEMUVTPM = M{4: {Expected: []byte{0x60, 0x4d, 0xf0, 0xe2, 0x0d, 0x3a, 0x44, 0x81, 0x9c, 0x36, 0x2b, 0x85, 0xea, 0xa5, 0x93, 0xf5, 0x19, 0x95, 0xca, 0x92, 0xe0, 0x39, 0xa5, 0xe4, 0x4d, 0xed, 0xaa, 0x31, 0x08, 0xbc, 0x5b, 0x8e}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x41, 0x0f, 0x33, 0x64, 0x7f, 0x02, 0xec, 0xd9, 0x55, 0x72, 0x4b, 0xf1, 0x18, 0xd1, 0x1d, 0xfb, 0xcb, 0x92, 0xba, 0x04, 0xc9, 0x9a, 0xdc, 0x43, 0x09, 0xd9, 0x09, 0xa0, 0x1a, 0x54, 0xaa, 0x1b}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x20, 0x96, 0xcb, 0xe7, 0x74, 0x29, 0x80, 0x78, 0x21, 0x8e, 0xf4, 0x70, 0x47, 0x4d, 0x47, 0x2d, 0x4e, 0xcd, 0xdf, 0x67, 0x68, 0x96, 0x73, 0xab, 0x53, 0xfa, 0x09, 0x92, 0x4c, 0xeb, 0xde, 0xed}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} ) diff --git a/internal/config/image_enterprise.go b/internal/config/image_enterprise.go index 30331c013..b2920d115 100644 --- a/internal/config/image_enterprise.go +++ b/internal/config/image_enterprise.go @@ -10,5 +10,5 @@ package config const ( // defaultImage is the default image to use. - defaultImage = "ref/main/stream/nightly/v2.22.0-pre.0.20250317103434-f64dc96e7acb" + defaultImage = "ref/main/stream/nightly/v2.22.0-pre.0.20250325141338-66815a4a4728" ) From be146cdb22f83607beccb41c641456559fcf41d8 Mon Sep 17 00:00:00 2001 From: Leonard Cohnen Date: Wed, 26 Mar 2025 21:53:32 +0100 Subject: [PATCH 178/311] ci: bump slsa verifier (#3718) --- .github/workflows/draft-release.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/draft-release.yml b/.github/workflows/draft-release.yml index 3db228b63..1e5c378c1 100644 --- a/.github/workflows/draft-release.yml +++ b/.github/workflows/draft-release.yml @@ -93,7 +93,7 @@ jobs: - name: Upload CLI as artifact (unix) uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 - if : ${{ matrix.os != 'windows' }} + if: ${{ matrix.os != 'windows' }} with: name: constellation-${{ matrix.os }}-${{ matrix.arch }} path: | @@ -102,7 +102,7 @@ jobs: - name: Upload CLI as artifact (windows) uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 - if : ${{ matrix.os == 'windows' }} + if: ${{ matrix.os == 'windows' }} with: name: constellation-${{ matrix.os }}-${{ matrix.arch }} path: | @@ -150,7 +150,7 @@ jobs: - name: Upload Terraform Provider Binary as artifact (unix) uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 - if : ${{ matrix.os != 'windows' }} + if: ${{ matrix.os != 'windows' }} with: name: terraform-provider-constellation-${{ matrix.os }}-${{ matrix.arch }} path: | @@ -158,7 +158,7 @@ jobs: - name: Upload Terraform Provider Binary as artifact (windows) uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 - if : ${{ matrix.os == 'windows' }} + if: ${{ matrix.os == 'windows' }} with: name: terraform-provider-constellation-${{ matrix.os }}-${{ matrix.arch }} path: | @@ -323,7 +323,7 @@ jobs: provenance-verify: runs-on: ubuntu-24.04 env: - SLSA_VERIFIER_VERSION: "2.5.1" + SLSA_VERIFIER_VERSION: "2.7.0" needs: - build-cli - provenance From 5a1b7b7944358579339c1ecec1cc1281deae9f2d Mon Sep 17 00:00:00 2001 From: Markus Rudy Date: Thu, 27 Mar 2025 10:23:30 +0100 Subject: [PATCH 179/311] ci: exclude go vulns that don't affect library usage (#3721) --- bazel/ci/govulncheck.sh.in | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/bazel/ci/govulncheck.sh.in b/bazel/ci/govulncheck.sh.in index ac9feab6f..e73135093 100644 --- a/bazel/ci/govulncheck.sh.in +++ b/bazel/ci/govulncheck.sh.in @@ -27,11 +27,16 @@ submodules=$(${go} list -f '{{.Dir}}' -m) PATH=$(dirname "${go}"):${PATH} check_module() { + excluded_osvs=( + "GO-2025-3521" # Kubernetes GitRepo Volume Inadvertent Local Repository Access + "GO-2025-3547" # Kubernetes kube-apiserver Vulnerable to Race Condition + ) + # shellcheck disable=SC2016 # The $ sign in the single quoted string is correct. CGO_ENABLED=0 ${govulncheck} -C "$1" -format json "./..." | - "${jq}" -sr ' + "${jq}" --argjson excluded "$(printf '"%s"\n' "${excluded_osvs[@]}" | jq -s)" -sr ' (map(select(.osv) | {"key": .osv.id, "value": .osv.summary}) | from_entries) as $osvs | - map(select( .finding and .finding.osv != "GO-2024-3166" and .finding.osv != "GO-2025-3408" ) | .finding | select( .trace[-1].module | startswith("github.com/edgelesssys/") )) | + map(select( .finding and all($excluded[] != .finding.osv; .) ) | .finding | select( .trace[-1].module | startswith("github.com/edgelesssys/") )) | group_by(.osv) | map( {"osv": .[0].osv, "summary": $osvs[.[0].osv], "traces": [.[] | [.trace[] | .module]]} ) | if length > 0 then halt_error(1) else .[] end' From 4dab6759bbcd62c927d48c7e19a6a1058d7fb2af Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 27 Mar 2025 21:34:15 +0100 Subject: [PATCH 180/311] deps: update Terraform dependencies (#3716) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .../vpn/on-prem-terraform/.terraform.lock.hcl | 48 +++++----- dev-docs/howto/vpn/on-prem-terraform/main.tf | 2 +- .../azure-terraform/.terraform.lock.hcl | 48 +++++----- .../miniconstellation/azure-terraform/main.tf | 2 +- e2e/miniconstellation/.terraform.lock.hcl | 48 +++++----- e2e/miniconstellation/main.tf | 2 +- .../examples/full/aws/main.tf | 2 +- .../examples/full/azure/main.tf | 2 +- .../examples/full/gcp/main.tf | 2 +- .../examples/full/stackit/main.tf | 2 +- .../infrastructure/aws/.terraform.lock.hcl | 51 ++++++---- terraform/infrastructure/aws/main.tf | 2 +- .../aws/modules/instance_group/main.tf | 2 +- .../aws/modules/jump_host/main.tf | 2 +- .../aws/modules/load_balancer_target/main.tf | 2 +- .../aws/modules/public_private_subnet/main.tf | 2 +- .../infrastructure/azure/.terraform.lock.hcl | 48 +++++----- terraform/infrastructure/azure/main.tf | 2 +- .../modules/load_balancer_backend/main.tf | 2 +- .../azure/modules/scale_set/main.tf | 2 +- .../infrastructure/gcp/.terraform.lock.hcl | 42 ++++---- terraform/infrastructure/gcp/main.tf | 2 +- .../gcp/modules/instance_group/main.tf | 2 +- .../modules/internal_load_balancer/main.tf | 2 +- .../gcp/modules/jump_host/main.tf | 2 +- .../gcp/modules/loadbalancer/main.tf | 2 +- .../iam/aws/.terraform.lock.hcl | 60 ++++++------ terraform/infrastructure/iam/aws/main.tf | 2 +- .../iam/azure/.terraform.lock.hcl | 96 +++++++++---------- terraform/infrastructure/iam/azure/main.tf | 4 +- .../iam/gcp/.terraform.lock.hcl | 48 +++++----- terraform/infrastructure/iam/gcp/main.tf | 2 +- .../openstack/.terraform.lock.hcl | 51 ++++++---- terraform/infrastructure/openstack/main.tf | 2 +- .../modules/stackit_loadbalancer/main.tf | 2 +- .../infrastructure/qemu/.terraform.lock.hcl | 60 ++++++------ terraform/infrastructure/qemu/main.tf | 2 +- .../qemu/modules/instance_group/main.tf | 2 +- 38 files changed, 340 insertions(+), 316 deletions(-) diff --git a/dev-docs/howto/vpn/on-prem-terraform/.terraform.lock.hcl b/dev-docs/howto/vpn/on-prem-terraform/.terraform.lock.hcl index 43bb74a62..c628c140e 100644 --- a/dev-docs/howto/vpn/on-prem-terraform/.terraform.lock.hcl +++ b/dev-docs/howto/vpn/on-prem-terraform/.terraform.lock.hcl @@ -2,31 +2,31 @@ # Manual edits may be lost in future updates. provider "registry.terraform.io/hashicorp/azurerm" { - version = "4.21.0" - constraints = "4.21.0" + version = "4.24.0" + constraints = "4.24.0" hashes = [ - "h1:6Zce/bfJTubd9VZP+SduO6yD8B51yoeeUe5XyP+n8Tg=", - "h1:8VVtYcBaHWoyQw5DszL36a5Tbx7zGg8jsMPWDjNtkds=", - "h1:J1EF/O3HfSOSwhPEyXfXq1D1eOFySXSjQoElYWsUi9w=", - "h1:MkHYR2jMC/9CJQT9uZwHb3Lr2UTR+GSB1NVzSBd70MI=", - "h1:N2uMJqzYnR+aq7i75T6JX1pAI7Zg6zjpUIiaR2u36V4=", - "h1:SrzAtKrwc16XfEn7XLO8naHMr/q33SpHOEsnWN/L0HI=", - "h1:VaLnj0MaKBjPbAMwCyuJMYmKftnCU8q0XXQDaaAWQns=", - "h1:e1SrjIeLOMHizlsDugvd1qjRpeD1TFzLmU6k+yfztlA=", - "h1:fTq06csKOkoAqtkJn4FXn37wyRlJ0EJJgpe3CWMhIpU=", - "h1:gMu4FGlBedcPsbmKgqHRbT6HYanAqlpcozFAsnbrwhI=", - "h1:mo9aGGJoAiFRf5bBMPlsG6AsDaLqbvPgwkASgdHbiY8=", - "zh:166573ccd95258c761c5ee17ba53b1bf38aac59839fb67303489ca76a4fe39cf", - "zh:17ad468923b68620e0c976a51c512fedd640758f29647650fcdeff5fdfafb731", - "zh:4bb4c6674c3f4776da7fc193a78f929e872144e90821e9e834f02898a0a5b64d", - "zh:5be6d97f17709829fdac01067c5a793a3e3a01d5253107a43b8b94d6837a684b", - "zh:5d9a332a4854ec3e3c5fd185fade10c1b4b71ab8b1ee5d18e26fc29bb5648d83", - "zh:6bfb004b4eb8e041190f8ded8facd2530482eb83af0dead8cd1634abc831510b", - "zh:8b0c42fcd58370e3e4531ab721a09931af857043ee0b3f45404020fd1fdf7382", - "zh:9271775dffaea0d902e41acee737e95e1016a28f168792d06679cfc93e843ed5", - "zh:9cf0b0c48d9a3b21e74eda4f6198c117f52348768e9d0fcf8af933a2a15b6f83", - "zh:a0454a9f08b9de55382715d915be5f56e060e1c11dbd4304e5452518f402d9c1", - "zh:d9b4ea1a8ac558c09484d70f94a16deed35902e06943edb0b1f4ea5bca81feff", + "h1:31W8xw2zoe03WSEr441Jh1E4PKxEXduN6OeOUdhGHRE=", + "h1:3DzTW6k/otWNhyqEt3I5CnyOfu4VY96k//Ri2rJmtsw=", + "h1:HPGpRzmaAhrguNcDn25r1RAu4h0d4b2lq6MTIxiTw6w=", + "h1:MCqV1KMC8FqBjMDb6mnINcBVdN98hh/KSpJT2yKoHrE=", + "h1:N2nB3s9xiZ93Wb5XVJZmv8dfv6oBUpJyk+gKYugt+os=", + "h1:NqCwAlkZ4bgupjxMz32PaU0hW5ithwnc0KupYIJz6UA=", + "h1:QKLE+6C8K98qAoah9gY6H6twDjpFmujoJsw/uMAGp5Y=", + "h1:RW9HwyDDx4rLFLlgqnHd8HEXJFbaK1eaqmCNwf4YJRo=", + "h1:ZqpLJOc0bFeTCNbkSMINldvsHoKMZgrKnTAFILuXzJQ=", + "h1:o8pD1z2vMiCrdXRpcMPlfs8VZRlSJnB+fYaMSWpWLV0=", + "h1:wl0kzOYi+dGFMRajdQnlKSm3JpYY2i13UHcceLT8KkU=", + "zh:26cebd201fad0c361e757d8552208106b70fd8dbca3668229ae4eb92fcd69d20", + "zh:33e8929ef07dd515a93027d35b77ad28b9a9fa915d824c028e0df75bcd7ad18a", + "zh:3de012cfbb0e993826a4715a9b94908ab87e48f45a72b2ae87dc770bba1a38bc", + "zh:4d3fd7c389a1768e15ef0ad78fbf2c560d35284fcfb8196d775466bffe4aa8ca", + "zh:88b8979d73ea7f2361df4ae26b64202fac44c0bc1291d8cd4ffb9a605f99d35b", + "zh:95ebe18507cf32fe7cdbc3b8c69f78541be9511070a60d3d925e3ef4df7d7b20", + "zh:9ad4bd9262be7e6ea933ae3ce4696c86129be6b44c44a605e748ef95c897ea76", + "zh:a54609ff7eddf2b0eed9ae67e33c5fcdf94aa838a49d06052bbe632ed5453a91", + "zh:a6bdff023a0d9bc15fadda37b23202ec0f5d6fbb66013dcb70a9ad0f162a86f5", + "zh:cc4c82f23b2fe55126b06c719a8285ecf2cb9dd10b89c7a22af047f940c262e5", + "zh:ed32a4e66aaabb7fa919800a3fdb27bc3181844765f1109824af3a542b84bbf7", "zh:f569b65999264a9416862bca5cd2a6177d94ccb0424f3a4ef424428912b9cb3c", ] } diff --git a/dev-docs/howto/vpn/on-prem-terraform/main.tf b/dev-docs/howto/vpn/on-prem-terraform/main.tf index 65ccf1a79..3d97ff657 100644 --- a/dev-docs/howto/vpn/on-prem-terraform/main.tf +++ b/dev-docs/howto/vpn/on-prem-terraform/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { azurerm = { source = "hashicorp/azurerm" - version = "4.21.0" + version = "4.24.0" } random = { source = "hashicorp/random" diff --git a/dev-docs/miniconstellation/azure-terraform/.terraform.lock.hcl b/dev-docs/miniconstellation/azure-terraform/.terraform.lock.hcl index eb2c26afd..b3bc1c30d 100644 --- a/dev-docs/miniconstellation/azure-terraform/.terraform.lock.hcl +++ b/dev-docs/miniconstellation/azure-terraform/.terraform.lock.hcl @@ -2,31 +2,31 @@ # Manual edits may be lost in future updates. provider "registry.terraform.io/hashicorp/azurerm" { - version = "4.21.0" - constraints = "4.21.0" + version = "4.24.0" + constraints = "4.24.0" hashes = [ - "h1:6Zce/bfJTubd9VZP+SduO6yD8B51yoeeUe5XyP+n8Tg=", - "h1:8VVtYcBaHWoyQw5DszL36a5Tbx7zGg8jsMPWDjNtkds=", - "h1:J1EF/O3HfSOSwhPEyXfXq1D1eOFySXSjQoElYWsUi9w=", - "h1:MkHYR2jMC/9CJQT9uZwHb3Lr2UTR+GSB1NVzSBd70MI=", - "h1:N2uMJqzYnR+aq7i75T6JX1pAI7Zg6zjpUIiaR2u36V4=", - "h1:SrzAtKrwc16XfEn7XLO8naHMr/q33SpHOEsnWN/L0HI=", - "h1:VaLnj0MaKBjPbAMwCyuJMYmKftnCU8q0XXQDaaAWQns=", - "h1:e1SrjIeLOMHizlsDugvd1qjRpeD1TFzLmU6k+yfztlA=", - "h1:fTq06csKOkoAqtkJn4FXn37wyRlJ0EJJgpe3CWMhIpU=", - "h1:gMu4FGlBedcPsbmKgqHRbT6HYanAqlpcozFAsnbrwhI=", - "h1:mo9aGGJoAiFRf5bBMPlsG6AsDaLqbvPgwkASgdHbiY8=", - "zh:166573ccd95258c761c5ee17ba53b1bf38aac59839fb67303489ca76a4fe39cf", - "zh:17ad468923b68620e0c976a51c512fedd640758f29647650fcdeff5fdfafb731", - "zh:4bb4c6674c3f4776da7fc193a78f929e872144e90821e9e834f02898a0a5b64d", - "zh:5be6d97f17709829fdac01067c5a793a3e3a01d5253107a43b8b94d6837a684b", - "zh:5d9a332a4854ec3e3c5fd185fade10c1b4b71ab8b1ee5d18e26fc29bb5648d83", - "zh:6bfb004b4eb8e041190f8ded8facd2530482eb83af0dead8cd1634abc831510b", - "zh:8b0c42fcd58370e3e4531ab721a09931af857043ee0b3f45404020fd1fdf7382", - "zh:9271775dffaea0d902e41acee737e95e1016a28f168792d06679cfc93e843ed5", - "zh:9cf0b0c48d9a3b21e74eda4f6198c117f52348768e9d0fcf8af933a2a15b6f83", - "zh:a0454a9f08b9de55382715d915be5f56e060e1c11dbd4304e5452518f402d9c1", - "zh:d9b4ea1a8ac558c09484d70f94a16deed35902e06943edb0b1f4ea5bca81feff", + "h1:31W8xw2zoe03WSEr441Jh1E4PKxEXduN6OeOUdhGHRE=", + "h1:3DzTW6k/otWNhyqEt3I5CnyOfu4VY96k//Ri2rJmtsw=", + "h1:HPGpRzmaAhrguNcDn25r1RAu4h0d4b2lq6MTIxiTw6w=", + "h1:MCqV1KMC8FqBjMDb6mnINcBVdN98hh/KSpJT2yKoHrE=", + "h1:N2nB3s9xiZ93Wb5XVJZmv8dfv6oBUpJyk+gKYugt+os=", + "h1:NqCwAlkZ4bgupjxMz32PaU0hW5ithwnc0KupYIJz6UA=", + "h1:QKLE+6C8K98qAoah9gY6H6twDjpFmujoJsw/uMAGp5Y=", + "h1:RW9HwyDDx4rLFLlgqnHd8HEXJFbaK1eaqmCNwf4YJRo=", + "h1:ZqpLJOc0bFeTCNbkSMINldvsHoKMZgrKnTAFILuXzJQ=", + "h1:o8pD1z2vMiCrdXRpcMPlfs8VZRlSJnB+fYaMSWpWLV0=", + "h1:wl0kzOYi+dGFMRajdQnlKSm3JpYY2i13UHcceLT8KkU=", + "zh:26cebd201fad0c361e757d8552208106b70fd8dbca3668229ae4eb92fcd69d20", + "zh:33e8929ef07dd515a93027d35b77ad28b9a9fa915d824c028e0df75bcd7ad18a", + "zh:3de012cfbb0e993826a4715a9b94908ab87e48f45a72b2ae87dc770bba1a38bc", + "zh:4d3fd7c389a1768e15ef0ad78fbf2c560d35284fcfb8196d775466bffe4aa8ca", + "zh:88b8979d73ea7f2361df4ae26b64202fac44c0bc1291d8cd4ffb9a605f99d35b", + "zh:95ebe18507cf32fe7cdbc3b8c69f78541be9511070a60d3d925e3ef4df7d7b20", + "zh:9ad4bd9262be7e6ea933ae3ce4696c86129be6b44c44a605e748ef95c897ea76", + "zh:a54609ff7eddf2b0eed9ae67e33c5fcdf94aa838a49d06052bbe632ed5453a91", + "zh:a6bdff023a0d9bc15fadda37b23202ec0f5d6fbb66013dcb70a9ad0f162a86f5", + "zh:cc4c82f23b2fe55126b06c719a8285ecf2cb9dd10b89c7a22af047f940c262e5", + "zh:ed32a4e66aaabb7fa919800a3fdb27bc3181844765f1109824af3a542b84bbf7", "zh:f569b65999264a9416862bca5cd2a6177d94ccb0424f3a4ef424428912b9cb3c", ] } diff --git a/dev-docs/miniconstellation/azure-terraform/main.tf b/dev-docs/miniconstellation/azure-terraform/main.tf index 50b9f323c..75540a92d 100644 --- a/dev-docs/miniconstellation/azure-terraform/main.tf +++ b/dev-docs/miniconstellation/azure-terraform/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { azurerm = { source = "hashicorp/azurerm" - version = "4.21.0" + version = "4.24.0" } random = { source = "hashicorp/random" diff --git a/e2e/miniconstellation/.terraform.lock.hcl b/e2e/miniconstellation/.terraform.lock.hcl index dc962e9bf..204014603 100644 --- a/e2e/miniconstellation/.terraform.lock.hcl +++ b/e2e/miniconstellation/.terraform.lock.hcl @@ -2,31 +2,31 @@ # Manual edits may be lost in future updates. provider "registry.terraform.io/hashicorp/azurerm" { - version = "4.21.0" - constraints = "4.21.0" + version = "4.24.0" + constraints = "4.24.0" hashes = [ - "h1:6Zce/bfJTubd9VZP+SduO6yD8B51yoeeUe5XyP+n8Tg=", - "h1:8VVtYcBaHWoyQw5DszL36a5Tbx7zGg8jsMPWDjNtkds=", - "h1:J1EF/O3HfSOSwhPEyXfXq1D1eOFySXSjQoElYWsUi9w=", - "h1:MkHYR2jMC/9CJQT9uZwHb3Lr2UTR+GSB1NVzSBd70MI=", - "h1:N2uMJqzYnR+aq7i75T6JX1pAI7Zg6zjpUIiaR2u36V4=", - "h1:SrzAtKrwc16XfEn7XLO8naHMr/q33SpHOEsnWN/L0HI=", - "h1:VaLnj0MaKBjPbAMwCyuJMYmKftnCU8q0XXQDaaAWQns=", - "h1:e1SrjIeLOMHizlsDugvd1qjRpeD1TFzLmU6k+yfztlA=", - "h1:fTq06csKOkoAqtkJn4FXn37wyRlJ0EJJgpe3CWMhIpU=", - "h1:gMu4FGlBedcPsbmKgqHRbT6HYanAqlpcozFAsnbrwhI=", - "h1:mo9aGGJoAiFRf5bBMPlsG6AsDaLqbvPgwkASgdHbiY8=", - "zh:166573ccd95258c761c5ee17ba53b1bf38aac59839fb67303489ca76a4fe39cf", - "zh:17ad468923b68620e0c976a51c512fedd640758f29647650fcdeff5fdfafb731", - "zh:4bb4c6674c3f4776da7fc193a78f929e872144e90821e9e834f02898a0a5b64d", - "zh:5be6d97f17709829fdac01067c5a793a3e3a01d5253107a43b8b94d6837a684b", - "zh:5d9a332a4854ec3e3c5fd185fade10c1b4b71ab8b1ee5d18e26fc29bb5648d83", - "zh:6bfb004b4eb8e041190f8ded8facd2530482eb83af0dead8cd1634abc831510b", - "zh:8b0c42fcd58370e3e4531ab721a09931af857043ee0b3f45404020fd1fdf7382", - "zh:9271775dffaea0d902e41acee737e95e1016a28f168792d06679cfc93e843ed5", - "zh:9cf0b0c48d9a3b21e74eda4f6198c117f52348768e9d0fcf8af933a2a15b6f83", - "zh:a0454a9f08b9de55382715d915be5f56e060e1c11dbd4304e5452518f402d9c1", - "zh:d9b4ea1a8ac558c09484d70f94a16deed35902e06943edb0b1f4ea5bca81feff", + "h1:31W8xw2zoe03WSEr441Jh1E4PKxEXduN6OeOUdhGHRE=", + "h1:3DzTW6k/otWNhyqEt3I5CnyOfu4VY96k//Ri2rJmtsw=", + "h1:HPGpRzmaAhrguNcDn25r1RAu4h0d4b2lq6MTIxiTw6w=", + "h1:MCqV1KMC8FqBjMDb6mnINcBVdN98hh/KSpJT2yKoHrE=", + "h1:N2nB3s9xiZ93Wb5XVJZmv8dfv6oBUpJyk+gKYugt+os=", + "h1:NqCwAlkZ4bgupjxMz32PaU0hW5ithwnc0KupYIJz6UA=", + "h1:QKLE+6C8K98qAoah9gY6H6twDjpFmujoJsw/uMAGp5Y=", + "h1:RW9HwyDDx4rLFLlgqnHd8HEXJFbaK1eaqmCNwf4YJRo=", + "h1:ZqpLJOc0bFeTCNbkSMINldvsHoKMZgrKnTAFILuXzJQ=", + "h1:o8pD1z2vMiCrdXRpcMPlfs8VZRlSJnB+fYaMSWpWLV0=", + "h1:wl0kzOYi+dGFMRajdQnlKSm3JpYY2i13UHcceLT8KkU=", + "zh:26cebd201fad0c361e757d8552208106b70fd8dbca3668229ae4eb92fcd69d20", + "zh:33e8929ef07dd515a93027d35b77ad28b9a9fa915d824c028e0df75bcd7ad18a", + "zh:3de012cfbb0e993826a4715a9b94908ab87e48f45a72b2ae87dc770bba1a38bc", + "zh:4d3fd7c389a1768e15ef0ad78fbf2c560d35284fcfb8196d775466bffe4aa8ca", + "zh:88b8979d73ea7f2361df4ae26b64202fac44c0bc1291d8cd4ffb9a605f99d35b", + "zh:95ebe18507cf32fe7cdbc3b8c69f78541be9511070a60d3d925e3ef4df7d7b20", + "zh:9ad4bd9262be7e6ea933ae3ce4696c86129be6b44c44a605e748ef95c897ea76", + "zh:a54609ff7eddf2b0eed9ae67e33c5fcdf94aa838a49d06052bbe632ed5453a91", + "zh:a6bdff023a0d9bc15fadda37b23202ec0f5d6fbb66013dcb70a9ad0f162a86f5", + "zh:cc4c82f23b2fe55126b06c719a8285ecf2cb9dd10b89c7a22af047f940c262e5", + "zh:ed32a4e66aaabb7fa919800a3fdb27bc3181844765f1109824af3a542b84bbf7", "zh:f569b65999264a9416862bca5cd2a6177d94ccb0424f3a4ef424428912b9cb3c", ] } diff --git a/e2e/miniconstellation/main.tf b/e2e/miniconstellation/main.tf index 041b4b8fe..61984a2ec 100644 --- a/e2e/miniconstellation/main.tf +++ b/e2e/miniconstellation/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { azurerm = { source = "hashicorp/azurerm" - version = "4.21.0" + version = "4.24.0" } tls = { source = "hashicorp/tls" diff --git a/terraform-provider-constellation/examples/full/aws/main.tf b/terraform-provider-constellation/examples/full/aws/main.tf index 612ca6c55..090be7ec1 100644 --- a/terraform-provider-constellation/examples/full/aws/main.tf +++ b/terraform-provider-constellation/examples/full/aws/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { constellation = { source = "edgelesssys/constellation" - version = "2.20.1" // replace with the version you want to use + version = "2.21.1" // replace with the version you want to use } random = { source = "hashicorp/random" diff --git a/terraform-provider-constellation/examples/full/azure/main.tf b/terraform-provider-constellation/examples/full/azure/main.tf index 77d330bb5..5319275b6 100644 --- a/terraform-provider-constellation/examples/full/azure/main.tf +++ b/terraform-provider-constellation/examples/full/azure/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { constellation = { source = "edgelesssys/constellation" - version = "2.20.1" // replace with the version you want to use + version = "2.21.1" // replace with the version you want to use } random = { source = "hashicorp/random" diff --git a/terraform-provider-constellation/examples/full/gcp/main.tf b/terraform-provider-constellation/examples/full/gcp/main.tf index 529aedebe..e330adbff 100644 --- a/terraform-provider-constellation/examples/full/gcp/main.tf +++ b/terraform-provider-constellation/examples/full/gcp/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { constellation = { source = "edgelesssys/constellation" - version = "2.20.1" // replace with the version you want to use + version = "2.21.1" // replace with the version you want to use } random = { source = "hashicorp/random" diff --git a/terraform-provider-constellation/examples/full/stackit/main.tf b/terraform-provider-constellation/examples/full/stackit/main.tf index f7b97ea91..55e857995 100644 --- a/terraform-provider-constellation/examples/full/stackit/main.tf +++ b/terraform-provider-constellation/examples/full/stackit/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { constellation = { source = "edgelesssys/constellation" - version = "2.20.1" // replace with the version you want to use + version = "2.21.1" // replace with the version you want to use } random = { source = "hashicorp/random" diff --git a/terraform/infrastructure/aws/.terraform.lock.hcl b/terraform/infrastructure/aws/.terraform.lock.hcl index dc7fd3be1..269149541 100644 --- a/terraform/infrastructure/aws/.terraform.lock.hcl +++ b/terraform/infrastructure/aws/.terraform.lock.hcl @@ -2,29 +2,38 @@ # Manual edits may be lost in future updates. provider "registry.terraform.io/hashicorp/aws" { - version = "5.89.0" - constraints = "5.89.0" + version = "5.93.0" + constraints = "5.93.0" hashes = [ - "h1:3hTpe3sckeeiq6DK9hnFnGf4fe55ZkOlEFbSlRtho5c=", - "h1:LEGcR6yAdoJdJQR8zQskkmwu8zxElUNNQb7DCnutC3Y=", - "h1:rFvk42jJEKiSUhK1cbERfNgYm4mD+8tq0ZcxCwpXSJs=", - "h1:xknpTAuujOZwmfL4HvbAA7HXt5NtZcKEJQHPmncBxw0=", - "h1:yK0t+VEztYYyDVU8x2JddCH9WaOhOXOrB+dK8PpJAoU=", - "zh:0e55784d6effc33b9098ffab7fb77a242e0223a59cdcf964caa0be94d14684af", - "zh:23c64f3eaeffcafb007c89db3dfca94c8adf06b120af55abddaca55a6c6c924c", - "zh:338f620133cb607ce980f1725a0a78f61cbd42f4c601808ec1ee01a6c16c9811", - "zh:6ab0499172f17484d7b39924cf06782789df1473d31ebae0c7f3294f6e7a1227", - "zh:6dcde3e29e538cdf80971cbdce3b285056fd0e31dd64b02d2dcdf4c02f21d0a9", - "zh:75c9b594d77c9125bfb1aaf3fbd77a49e392841d53029b5726eb71d64de1233e", - "zh:7b334c23091e7b4c142e378416586292197c40a31a5bdb3b29c4f9afddd286f0", - "zh:991bbba72e5eb6eb351f466d68080992f5b0495f862a6723f386d1b4c965aa7d", + "h1:4K1FdUEbgICLEwA5k20n/nWEFwIJQXeCjUshFjJN0RU=", + "h1:6/ezzfnV1mbibGSb3Bts9rbmE/Fp8BUTYkW73lBMORM=", + "h1:8v3mNLg29p+pqnGd5P7qxINrT8NvwS3j+4PlvUyVr+U=", + "h1:BoaXR7Iba6O0PiTRmIpQFAPH9IeUIZ0f2Y+kJZwKDjI=", + "h1:Gix6sLHGKwqKg4L1V/gBa5tcjIj5UrqH4kW9AX/agl0=", + "h1:IxIllFrinmbRNRRMg2ZIpQBbpFO2plSOPMXQEjtRc5k=", + "h1:M1reAJwL5XOzznMU3LL+PEp6Ps4XUO7HjT2qPcqG7Dk=", + "h1:ODfuqpsLGW3WShNNPgImLOOXlphVs4u/fFdLkScqi8U=", + "h1:OOAfaIREMxRhe2minsNofE7gn8VDA0XQ659/Eq2hJAc=", + "h1:SbzGotY1leY5nnLo/PJOcwIlNTHdZpAErxJSrfr2tTg=", + "h1:Uz5TSid6XzojWT8BHTu2IIP2gy1utfymurqxFB0UNDk=", + "h1:oOThSM1UKrEfKT2KIjKWQF+QeA/cqqlAalKcSFlNiHs=", + "h1:u1r9qfTvAeoGAb4Rwh4nxI7w4JjFayempELiEGoHgJY=", + "h1:zcGenKa+3ZRmcHPWwXrvUx1472tpeaQntT4ShJfWMKE=", + "zh:00e1b15e6f02cdc788fe855232b63ccce6652930080eac3ba4b8a2e35db02b23", + "zh:3a77ee12e4f5ab2e7b320a0f507389c9171ab82c50d39ae7caa5a1fb2bd95cb3", + "zh:3e32d58e139d098d867eef37914fef01fffb08504d828e0f384c2ffc18d71f80", + "zh:41cf69a525f0fbe0fdb71d26be7ff5e20bb90ccdf5af32c83ed53f0ca2f071b5", + "zh:43055bdd0786855cf7242638a74b579f74f4f1a8e7c7e5e0e50230c8f6b908cb", + "zh:4ac4c29aa0de842ad91145c5a5fba21338531ffca13a510927d445e007a24938", + "zh:57e510498b3aeb6d6155c10fa195e1d5502e763899251057e59e73f653d1e262", + "zh:8f749645b27dba1a07d06aaf9d5596fc4213123f12f3808d68539e78ab16996e", "zh:9b12af85486a96aedd8d7984b0ff811a4b42e3d88dad1a3fb4c0b580d04fa425", - "zh:9bd2f12eef4a5dceafc211ab3b9a63f0e3e224007a60c1bbb842f76e0377033d", - "zh:b1ac1eb3b3e1a79fa5e5ad3364615f23b9ee0b093ceeb809fd386a4d40e7abb4", - "zh:cea91f43151b30c428c441b97c3b98bf1e5fb72ef72f6971308e3895e23437f4", - "zh:d3f000a1696a43d8186a516aace7d476d1fd76443627980504133477e19c8ecb", - "zh:d6f526fbbb3e51b3acc3b9640a158f7acc4a089632fca8ec6db430b450673f25", - "zh:e0c542950f96c93e761d50602e449fef8447f1389a6d5242a0a7dc9b06826d0b", + "zh:aaca5934ac6273d48922ad7685c5fc2aa7ef5275346a9e70366b7a180a788d41", + "zh:b7585b720a97467302f2e29f0688a5a746778f7b73c30eb085c25831decba1e1", + "zh:c16ae0a46d796858c49a89dd90e5ca92f793e646474fadeafaf701def4a4aa83", + "zh:d66bdc9cd5108452d9dba44082e504ff5e3a3001c8f853bbcaff850cb2127a21", + "zh:ee1aec6c44b117a6c8b7159ee7dc82f1ddac6ba434b4e6c493717738326f0a99", + "zh:f0da48692e00ecacea72d7104714d9721f6be40ba094490c442bb3e68d2e2604", ] } diff --git a/terraform/infrastructure/aws/main.tf b/terraform/infrastructure/aws/main.tf index 42b4061ea..0b8ed0059 100644 --- a/terraform/infrastructure/aws/main.tf +++ b/terraform/infrastructure/aws/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { aws = { source = "hashicorp/aws" - version = "5.89.0" + version = "5.93.0" } random = { source = "hashicorp/random" diff --git a/terraform/infrastructure/aws/modules/instance_group/main.tf b/terraform/infrastructure/aws/modules/instance_group/main.tf index e4a87f5d8..8aa0f774b 100644 --- a/terraform/infrastructure/aws/modules/instance_group/main.tf +++ b/terraform/infrastructure/aws/modules/instance_group/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { aws = { source = "hashicorp/aws" - version = "5.89.0" + version = "5.93.0" } random = { source = "hashicorp/random" diff --git a/terraform/infrastructure/aws/modules/jump_host/main.tf b/terraform/infrastructure/aws/modules/jump_host/main.tf index e37632fe6..2e58d3199 100644 --- a/terraform/infrastructure/aws/modules/jump_host/main.tf +++ b/terraform/infrastructure/aws/modules/jump_host/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { aws = { source = "hashicorp/aws" - version = "5.89.0" + version = "5.93.0" } } } diff --git a/terraform/infrastructure/aws/modules/load_balancer_target/main.tf b/terraform/infrastructure/aws/modules/load_balancer_target/main.tf index e16de138f..d1f2eb112 100644 --- a/terraform/infrastructure/aws/modules/load_balancer_target/main.tf +++ b/terraform/infrastructure/aws/modules/load_balancer_target/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { aws = { source = "hashicorp/aws" - version = "5.89.0" + version = "5.93.0" } } } diff --git a/terraform/infrastructure/aws/modules/public_private_subnet/main.tf b/terraform/infrastructure/aws/modules/public_private_subnet/main.tf index 50981afda..56708857d 100644 --- a/terraform/infrastructure/aws/modules/public_private_subnet/main.tf +++ b/terraform/infrastructure/aws/modules/public_private_subnet/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { aws = { source = "hashicorp/aws" - version = "5.89.0" + version = "5.93.0" } } } diff --git a/terraform/infrastructure/azure/.terraform.lock.hcl b/terraform/infrastructure/azure/.terraform.lock.hcl index 43bb74a62..c628c140e 100644 --- a/terraform/infrastructure/azure/.terraform.lock.hcl +++ b/terraform/infrastructure/azure/.terraform.lock.hcl @@ -2,31 +2,31 @@ # Manual edits may be lost in future updates. provider "registry.terraform.io/hashicorp/azurerm" { - version = "4.21.0" - constraints = "4.21.0" + version = "4.24.0" + constraints = "4.24.0" hashes = [ - "h1:6Zce/bfJTubd9VZP+SduO6yD8B51yoeeUe5XyP+n8Tg=", - "h1:8VVtYcBaHWoyQw5DszL36a5Tbx7zGg8jsMPWDjNtkds=", - "h1:J1EF/O3HfSOSwhPEyXfXq1D1eOFySXSjQoElYWsUi9w=", - "h1:MkHYR2jMC/9CJQT9uZwHb3Lr2UTR+GSB1NVzSBd70MI=", - "h1:N2uMJqzYnR+aq7i75T6JX1pAI7Zg6zjpUIiaR2u36V4=", - "h1:SrzAtKrwc16XfEn7XLO8naHMr/q33SpHOEsnWN/L0HI=", - "h1:VaLnj0MaKBjPbAMwCyuJMYmKftnCU8q0XXQDaaAWQns=", - "h1:e1SrjIeLOMHizlsDugvd1qjRpeD1TFzLmU6k+yfztlA=", - "h1:fTq06csKOkoAqtkJn4FXn37wyRlJ0EJJgpe3CWMhIpU=", - "h1:gMu4FGlBedcPsbmKgqHRbT6HYanAqlpcozFAsnbrwhI=", - "h1:mo9aGGJoAiFRf5bBMPlsG6AsDaLqbvPgwkASgdHbiY8=", - "zh:166573ccd95258c761c5ee17ba53b1bf38aac59839fb67303489ca76a4fe39cf", - "zh:17ad468923b68620e0c976a51c512fedd640758f29647650fcdeff5fdfafb731", - "zh:4bb4c6674c3f4776da7fc193a78f929e872144e90821e9e834f02898a0a5b64d", - "zh:5be6d97f17709829fdac01067c5a793a3e3a01d5253107a43b8b94d6837a684b", - "zh:5d9a332a4854ec3e3c5fd185fade10c1b4b71ab8b1ee5d18e26fc29bb5648d83", - "zh:6bfb004b4eb8e041190f8ded8facd2530482eb83af0dead8cd1634abc831510b", - "zh:8b0c42fcd58370e3e4531ab721a09931af857043ee0b3f45404020fd1fdf7382", - "zh:9271775dffaea0d902e41acee737e95e1016a28f168792d06679cfc93e843ed5", - "zh:9cf0b0c48d9a3b21e74eda4f6198c117f52348768e9d0fcf8af933a2a15b6f83", - "zh:a0454a9f08b9de55382715d915be5f56e060e1c11dbd4304e5452518f402d9c1", - "zh:d9b4ea1a8ac558c09484d70f94a16deed35902e06943edb0b1f4ea5bca81feff", + "h1:31W8xw2zoe03WSEr441Jh1E4PKxEXduN6OeOUdhGHRE=", + "h1:3DzTW6k/otWNhyqEt3I5CnyOfu4VY96k//Ri2rJmtsw=", + "h1:HPGpRzmaAhrguNcDn25r1RAu4h0d4b2lq6MTIxiTw6w=", + "h1:MCqV1KMC8FqBjMDb6mnINcBVdN98hh/KSpJT2yKoHrE=", + "h1:N2nB3s9xiZ93Wb5XVJZmv8dfv6oBUpJyk+gKYugt+os=", + "h1:NqCwAlkZ4bgupjxMz32PaU0hW5ithwnc0KupYIJz6UA=", + "h1:QKLE+6C8K98qAoah9gY6H6twDjpFmujoJsw/uMAGp5Y=", + "h1:RW9HwyDDx4rLFLlgqnHd8HEXJFbaK1eaqmCNwf4YJRo=", + "h1:ZqpLJOc0bFeTCNbkSMINldvsHoKMZgrKnTAFILuXzJQ=", + "h1:o8pD1z2vMiCrdXRpcMPlfs8VZRlSJnB+fYaMSWpWLV0=", + "h1:wl0kzOYi+dGFMRajdQnlKSm3JpYY2i13UHcceLT8KkU=", + "zh:26cebd201fad0c361e757d8552208106b70fd8dbca3668229ae4eb92fcd69d20", + "zh:33e8929ef07dd515a93027d35b77ad28b9a9fa915d824c028e0df75bcd7ad18a", + "zh:3de012cfbb0e993826a4715a9b94908ab87e48f45a72b2ae87dc770bba1a38bc", + "zh:4d3fd7c389a1768e15ef0ad78fbf2c560d35284fcfb8196d775466bffe4aa8ca", + "zh:88b8979d73ea7f2361df4ae26b64202fac44c0bc1291d8cd4ffb9a605f99d35b", + "zh:95ebe18507cf32fe7cdbc3b8c69f78541be9511070a60d3d925e3ef4df7d7b20", + "zh:9ad4bd9262be7e6ea933ae3ce4696c86129be6b44c44a605e748ef95c897ea76", + "zh:a54609ff7eddf2b0eed9ae67e33c5fcdf94aa838a49d06052bbe632ed5453a91", + "zh:a6bdff023a0d9bc15fadda37b23202ec0f5d6fbb66013dcb70a9ad0f162a86f5", + "zh:cc4c82f23b2fe55126b06c719a8285ecf2cb9dd10b89c7a22af047f940c262e5", + "zh:ed32a4e66aaabb7fa919800a3fdb27bc3181844765f1109824af3a542b84bbf7", "zh:f569b65999264a9416862bca5cd2a6177d94ccb0424f3a4ef424428912b9cb3c", ] } diff --git a/terraform/infrastructure/azure/main.tf b/terraform/infrastructure/azure/main.tf index 59286af63..0f603126d 100644 --- a/terraform/infrastructure/azure/main.tf +++ b/terraform/infrastructure/azure/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { azurerm = { source = "hashicorp/azurerm" - version = "4.21.0" + version = "4.24.0" } random = { source = "hashicorp/random" diff --git a/terraform/infrastructure/azure/modules/load_balancer_backend/main.tf b/terraform/infrastructure/azure/modules/load_balancer_backend/main.tf index 573a05821..89351c857 100644 --- a/terraform/infrastructure/azure/modules/load_balancer_backend/main.tf +++ b/terraform/infrastructure/azure/modules/load_balancer_backend/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { azurerm = { source = "hashicorp/azurerm" - version = "4.21.0" + version = "4.24.0" } } } diff --git a/terraform/infrastructure/azure/modules/scale_set/main.tf b/terraform/infrastructure/azure/modules/scale_set/main.tf index a149799ea..0d563feb4 100644 --- a/terraform/infrastructure/azure/modules/scale_set/main.tf +++ b/terraform/infrastructure/azure/modules/scale_set/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { azurerm = { source = "hashicorp/azurerm" - version = "4.21.0" + version = "4.24.0" } random = { source = "hashicorp/random" diff --git a/terraform/infrastructure/gcp/.terraform.lock.hcl b/terraform/infrastructure/gcp/.terraform.lock.hcl index c8404f671..fe3799dd8 100644 --- a/terraform/infrastructure/gcp/.terraform.lock.hcl +++ b/terraform/infrastructure/gcp/.terraform.lock.hcl @@ -2,25 +2,31 @@ # Manual edits may be lost in future updates. provider "registry.terraform.io/hashicorp/google" { - version = "6.23.0" - constraints = "6.23.0" + version = "6.27.0" + constraints = "6.27.0" hashes = [ - "h1:AQqvilOF4FnbXO/c84HsNkJ+TyZEs+N12iHYFnwvNOM=", - "h1:Gr39ABNw+A6lwP2gPG+yCzGmU5T97iI5qT0XLCd3Dh4=", - "h1:TLMWskwzbDsyfi6LaqTD0ckSTT4rtpGLF/QCojaDiec=", - "h1:oAaJhkB2s1y4fSESXi73zJxdHhC7NdB7rdFN6KH2uY8=", - "h1:uBPMb39cwdZE6XAPkTynWdIdChkj1IPrhqPHd+BffE4=", - "zh:032dd78eff887a673a1067008a8e47a69983bbcea9f41832320470247a76863a", - "zh:1af89f75142cf9c54499a466c8dc7055e2bbf02771a6b8c8cd57eb13dce9a800", - "zh:3696a8e72c6cef80fec3c3574fc8519f0410f23f6dc3e3540d2f03345c140d38", - "zh:58a15c71ae128ff64117c1c6b9ccf8ab2ac3e8f9c2c52957d8327f93495f62b1", - "zh:70ba2909611e8d1cc8009567e50e195c4269e6582d6a6fa0bce0d4e6313ab8d5", - "zh:8f8489d1eb8c189d59dc85e519e51ab4c4b1940e4d72450ae130ba752028fa01", - "zh:99c8c4e8dc67a7ab597d46ed566f64c4409761276f34bd863457a37254620fa6", - "zh:9b24d53440e8d7e06020e7b3aeca0dde4f1a3ef997d7da05ff3acb918896fcc2", - "zh:b3667fd6057997dbf0bd0179ddf686c272d4ab4fc7da6a03fdf2fad31ad4ecb5", - "zh:cc6df6d2291a337a5f434b7335c693164c6987604b9690d6b953b796d8eaa08a", - "zh:d871f39c3c5b63995793c9a70f107e52ca699d211c770a6e7ebc398ba59bcdc7", + "h1:1aVSGyBFnQf/EerFDnp6bRAXD16nTwmFk4iZ8DRRuNw=", + "h1:6u6rQ3HGvCnJpqka4RECJNdpEVV2mv5kpI8y5uWCvf4=", + "h1:CLLP3iWnjqnpuYvxTlv0hoXAwsoRiXuHAF+uC9zr7qE=", + "h1:KzQWVS5YOkTJxciv4nKjRwLbNuWq6SxlCLJTTpM5O90=", + "h1:MHuQfr068Yx5K5mEdLauY/0j2OZ9E1fe8d948w3kja8=", + "h1:NPQFeTud3D4Wt2eXK8/es14/Sof/s1X+QznjjrcmhHE=", + "h1:NecZZ8u3NGyGZZj3qTzyDXYUx4wQ1IRzVo+U2eYfkdk=", + "h1:T4n/UjC2M7qGJgTnNF4A9N4Oibq/c8kcNtVApL0+PsA=", + "h1:XaWH/1VsrMTjsg4Ik3YtIFdkQzXUpki66HJMVI7QZoE=", + "h1:q+jp9jrYyt0eGyntqEBWXWDh61UiyG/sa0+Xn7n72gc=", + "h1:yOClyOHiawZkVQ4CV2ZAQDBVYq+iwZ0H8CeD1lCpfIE=", + "zh:04623cec9bb1646265498b646f9ba2153eb98f2c190efbf9cf0e862547444a86", + "zh:1801c35017302ced13ca5faac210b10617dc933c63aaee9576422ec0119e7fbc", + "zh:3fe5d633a146a53504387acd6c16919a3eac1e7b55ae61c2d85583aeb2227528", + "zh:4870bce89958414e3b9c9d4f8e34e4d346b5800a24b6cc5df86fcad400091325", + "zh:48dbd5031de507b14e0ebca44f9dd00043057f6324c80971d4bc338072b2f7ea", + "zh:4c5146a49dd346295e3ef41303884ac28cd655705f4300ceafc23e2577f3b1ce", + "zh:592caabc8444d7df3cdf61cd62381fbaed854747e04af593f09c181699cca8c2", + "zh:a754c9f54745d614817acdb63a791315c79f1fdc7a0867c8d6f505e066de1b55", + "zh:c72857459146b74dbf270ad5a45e12f7a0f50254fcd200e6833f3d137709ae34", + "zh:e1e11e2373843dfe8cfaa32148981c7f3b04382baa3a901cb70a2db062ef0983", + "zh:e1f297229c4c6fed3bcfba576da4e72c42bb93b578794920ab2d8698b3a8cb40", "zh:f569b65999264a9416862bca5cd2a6177d94ccb0424f3a4ef424428912b9cb3c", ] } diff --git a/terraform/infrastructure/gcp/main.tf b/terraform/infrastructure/gcp/main.tf index dd8f72b34..f26ab5e16 100644 --- a/terraform/infrastructure/gcp/main.tf +++ b/terraform/infrastructure/gcp/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { google = { source = "hashicorp/google" - version = "6.23.0" + version = "6.27.0" } random = { diff --git a/terraform/infrastructure/gcp/modules/instance_group/main.tf b/terraform/infrastructure/gcp/modules/instance_group/main.tf index 90da4ebf9..82baa7f74 100644 --- a/terraform/infrastructure/gcp/modules/instance_group/main.tf +++ b/terraform/infrastructure/gcp/modules/instance_group/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { google = { source = "hashicorp/google" - version = "6.23.0" + version = "6.27.0" } random = { diff --git a/terraform/infrastructure/gcp/modules/internal_load_balancer/main.tf b/terraform/infrastructure/gcp/modules/internal_load_balancer/main.tf index 0a6b325e8..a46593b8a 100644 --- a/terraform/infrastructure/gcp/modules/internal_load_balancer/main.tf +++ b/terraform/infrastructure/gcp/modules/internal_load_balancer/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { google = { source = "hashicorp/google" - version = "6.23.0" + version = "6.27.0" } } } diff --git a/terraform/infrastructure/gcp/modules/jump_host/main.tf b/terraform/infrastructure/gcp/modules/jump_host/main.tf index 4417b4efb..6a1a9f211 100644 --- a/terraform/infrastructure/gcp/modules/jump_host/main.tf +++ b/terraform/infrastructure/gcp/modules/jump_host/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { google = { source = "hashicorp/google" - version = "6.23.0" + version = "6.27.0" } } } diff --git a/terraform/infrastructure/gcp/modules/loadbalancer/main.tf b/terraform/infrastructure/gcp/modules/loadbalancer/main.tf index c0cdf5327..dec886fe2 100644 --- a/terraform/infrastructure/gcp/modules/loadbalancer/main.tf +++ b/terraform/infrastructure/gcp/modules/loadbalancer/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { google = { source = "hashicorp/google" - version = "6.23.0" + version = "6.27.0" } } } diff --git a/terraform/infrastructure/iam/aws/.terraform.lock.hcl b/terraform/infrastructure/iam/aws/.terraform.lock.hcl index 7ef614685..7375c12ea 100644 --- a/terraform/infrastructure/iam/aws/.terraform.lock.hcl +++ b/terraform/infrastructure/iam/aws/.terraform.lock.hcl @@ -2,38 +2,38 @@ # Manual edits may be lost in future updates. provider "registry.terraform.io/hashicorp/aws" { - version = "5.89.0" - constraints = "5.89.0" + version = "5.93.0" + constraints = "5.93.0" hashes = [ - "h1:3hTpe3sckeeiq6DK9hnFnGf4fe55ZkOlEFbSlRtho5c=", - "h1:8SF2vIssFnD3R0aKIf678ZNka7dLdFqrJR5jO6q59zo=", - "h1:GU9sbCWMHvuDpMNh64sdN5nAThRjm5pHk8di8CEtZ60=", - "h1:LEGcR6yAdoJdJQR8zQskkmwu8zxElUNNQb7DCnutC3Y=", - "h1:NaNxQqZLsXZVXKKch3RwCjNJj2kPS6KBEd7AOZaJb54=", - "h1:gQxdrzAyG5IUN1w6fKRwEkBuD/F8x2lylkbRFdMS/Sw=", - "h1:o1gdfEioSuFXM47mlSNm4oW8MCNAGpqqCOCNgWmCc3M=", - "h1:qaRawpN4LV74lCwQCou9oUhY23kKVLxIj000NN3E9EA=", - "h1:rFvk42jJEKiSUhK1cbERfNgYm4mD+8tq0ZcxCwpXSJs=", - "h1:rzJKGweH0c8kaSC1xWkpc9VG2fIGUFs6AB2rN6ZavgA=", - "h1:xknpTAuujOZwmfL4HvbAA7HXt5NtZcKEJQHPmncBxw0=", - "h1:xwlkBwTfdL+H/tcI/HlAxQYDsO7+tuAZPuB1JilJsvE=", - "h1:xzXmecbF02pjS9yF+k1g2ESdkPzbuHc9SmvUvn1EXVQ=", - "h1:yK0t+VEztYYyDVU8x2JddCH9WaOhOXOrB+dK8PpJAoU=", - "zh:0e55784d6effc33b9098ffab7fb77a242e0223a59cdcf964caa0be94d14684af", - "zh:23c64f3eaeffcafb007c89db3dfca94c8adf06b120af55abddaca55a6c6c924c", - "zh:338f620133cb607ce980f1725a0a78f61cbd42f4c601808ec1ee01a6c16c9811", - "zh:6ab0499172f17484d7b39924cf06782789df1473d31ebae0c7f3294f6e7a1227", - "zh:6dcde3e29e538cdf80971cbdce3b285056fd0e31dd64b02d2dcdf4c02f21d0a9", - "zh:75c9b594d77c9125bfb1aaf3fbd77a49e392841d53029b5726eb71d64de1233e", - "zh:7b334c23091e7b4c142e378416586292197c40a31a5bdb3b29c4f9afddd286f0", - "zh:991bbba72e5eb6eb351f466d68080992f5b0495f862a6723f386d1b4c965aa7d", + "h1:4K1FdUEbgICLEwA5k20n/nWEFwIJQXeCjUshFjJN0RU=", + "h1:6/ezzfnV1mbibGSb3Bts9rbmE/Fp8BUTYkW73lBMORM=", + "h1:8v3mNLg29p+pqnGd5P7qxINrT8NvwS3j+4PlvUyVr+U=", + "h1:BoaXR7Iba6O0PiTRmIpQFAPH9IeUIZ0f2Y+kJZwKDjI=", + "h1:Gix6sLHGKwqKg4L1V/gBa5tcjIj5UrqH4kW9AX/agl0=", + "h1:IxIllFrinmbRNRRMg2ZIpQBbpFO2plSOPMXQEjtRc5k=", + "h1:M1reAJwL5XOzznMU3LL+PEp6Ps4XUO7HjT2qPcqG7Dk=", + "h1:ODfuqpsLGW3WShNNPgImLOOXlphVs4u/fFdLkScqi8U=", + "h1:OOAfaIREMxRhe2minsNofE7gn8VDA0XQ659/Eq2hJAc=", + "h1:SbzGotY1leY5nnLo/PJOcwIlNTHdZpAErxJSrfr2tTg=", + "h1:Uz5TSid6XzojWT8BHTu2IIP2gy1utfymurqxFB0UNDk=", + "h1:oOThSM1UKrEfKT2KIjKWQF+QeA/cqqlAalKcSFlNiHs=", + "h1:u1r9qfTvAeoGAb4Rwh4nxI7w4JjFayempELiEGoHgJY=", + "h1:zcGenKa+3ZRmcHPWwXrvUx1472tpeaQntT4ShJfWMKE=", + "zh:00e1b15e6f02cdc788fe855232b63ccce6652930080eac3ba4b8a2e35db02b23", + "zh:3a77ee12e4f5ab2e7b320a0f507389c9171ab82c50d39ae7caa5a1fb2bd95cb3", + "zh:3e32d58e139d098d867eef37914fef01fffb08504d828e0f384c2ffc18d71f80", + "zh:41cf69a525f0fbe0fdb71d26be7ff5e20bb90ccdf5af32c83ed53f0ca2f071b5", + "zh:43055bdd0786855cf7242638a74b579f74f4f1a8e7c7e5e0e50230c8f6b908cb", + "zh:4ac4c29aa0de842ad91145c5a5fba21338531ffca13a510927d445e007a24938", + "zh:57e510498b3aeb6d6155c10fa195e1d5502e763899251057e59e73f653d1e262", + "zh:8f749645b27dba1a07d06aaf9d5596fc4213123f12f3808d68539e78ab16996e", "zh:9b12af85486a96aedd8d7984b0ff811a4b42e3d88dad1a3fb4c0b580d04fa425", - "zh:9bd2f12eef4a5dceafc211ab3b9a63f0e3e224007a60c1bbb842f76e0377033d", - "zh:b1ac1eb3b3e1a79fa5e5ad3364615f23b9ee0b093ceeb809fd386a4d40e7abb4", - "zh:cea91f43151b30c428c441b97c3b98bf1e5fb72ef72f6971308e3895e23437f4", - "zh:d3f000a1696a43d8186a516aace7d476d1fd76443627980504133477e19c8ecb", - "zh:d6f526fbbb3e51b3acc3b9640a158f7acc4a089632fca8ec6db430b450673f25", - "zh:e0c542950f96c93e761d50602e449fef8447f1389a6d5242a0a7dc9b06826d0b", + "zh:aaca5934ac6273d48922ad7685c5fc2aa7ef5275346a9e70366b7a180a788d41", + "zh:b7585b720a97467302f2e29f0688a5a746778f7b73c30eb085c25831decba1e1", + "zh:c16ae0a46d796858c49a89dd90e5ca92f793e646474fadeafaf701def4a4aa83", + "zh:d66bdc9cd5108452d9dba44082e504ff5e3a3001c8f853bbcaff850cb2127a21", + "zh:ee1aec6c44b117a6c8b7159ee7dc82f1ddac6ba434b4e6c493717738326f0a99", + "zh:f0da48692e00ecacea72d7104714d9721f6be40ba094490c442bb3e68d2e2604", ] } diff --git a/terraform/infrastructure/iam/aws/main.tf b/terraform/infrastructure/iam/aws/main.tf index cc090b363..af4c45c13 100644 --- a/terraform/infrastructure/iam/aws/main.tf +++ b/terraform/infrastructure/iam/aws/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { aws = { source = "hashicorp/aws" - version = "5.89.0" + version = "5.93.0" } random = { source = "hashicorp/random" diff --git a/terraform/infrastructure/iam/azure/.terraform.lock.hcl b/terraform/infrastructure/iam/azure/.terraform.lock.hcl index 2db142b2e..3df0bb58d 100644 --- a/terraform/infrastructure/iam/azure/.terraform.lock.hcl +++ b/terraform/infrastructure/iam/azure/.terraform.lock.hcl @@ -2,61 +2,61 @@ # Manual edits may be lost in future updates. provider "registry.terraform.io/hashicorp/azuread" { - version = "3.1.0" - constraints = "3.1.0" + version = "3.2.0" + constraints = "3.2.0" hashes = [ - "h1:3IL36hU+a3ItNQcD4DUKMyCzQL99gYPTUCmzhOcWk7k=", - "h1:5FtOiormKTYibFrWcyjVLpSOaZmGE57HthZk1zM9PDI=", - "h1:5bFl5kqASmq2HW12dkTlpveG2sRPeSPIYxOJJ7nxtNE=", - "h1:Lsc0jEHsk+Btz05IaoPjCL7UHFatc7SmDtOdgs9VBOk=", - "h1:QY/V8YuAw2phme+ryKEbZ/9B+Xi7SfXAOVr4uBoRqpk=", - "h1:UmSL7MD8ULg/WlRgwisD5lHsjcg9l8AO7AeO0XN96dU=", - "h1:W7fSBa52yEvfF68nDpMpdq/Cmv7etcqMuC+sQfI9S98=", - "h1:oRliSu2DocxHIV4tIlr+jeOPw1IL8pipjAPNbXAWJD0=", - "h1:sBGDtSwT8Cz4NLBdR+LPPZW0L7kEIzOyvPDjv31COMw=", - "h1:ukyPZG2fnTkWoeOizY2c5s5OyOKIwNkkNdBtgnK9W60=", - "h1:waefTxGnXGI5s3eq8THePtMmfwd4xdWnNh2GrauM9L4=", - "zh:01b796cf12e93cc811cb15c8465605e75de170802060f9e2fe114835968960dd", - "zh:12005fbffb84467ff1d4ce9317370834d1279743bc201d3db95f36315cdf8157", + "h1:35w1gIXyoEkMb2iBNOpI0gJPkQlReEBfaNTEJo3BACI=", + "h1:DciAAiQWGJK0FR+2Qe/O/NwukMs6nLtVqv19BQY6hU4=", + "h1:F/l/I8q+C2bjxSqbXbM3tPCAkhi1IiJp65wV8x00HZE=", + "h1:Lc2vU3wSiGOqdXy91GUE+wyVgFnb123cAv0AX+QOzL4=", + "h1:NwTNmg71vw2qmJEh7UQLoSXdY8YJR/IQVVo3jXYusL8=", + "h1:jA5FZRPbN4CCB5gkMs/kQayEnkxIC/QfsDErnxsQDhI=", + "h1:kl1+Y4vo0TyT5UTmtjtdLu+tJrLgrWjM/aw9dAtiquY=", + "h1:oDAibUp9yw303PSvQErfo+J6UIKNYw5mXDWhfD/69O4=", + "h1:sY7AJiMpXjIkoXGHbh/4PUxW+4xZNHUwdonCS/Sjzv0=", + "h1:u/P26g3e4j5QM2i6VkYLFbmMhHlj76kvGfhJQ23BT9Q=", + "h1:wvXGU1TWdZFvPy6fJTjJEDwRe13a496hZouLsUkt5po=", + "zh:063897b38fd6231577c21a751ccd955716bca0e3abcf800a90dd1dd50fb24875", + "zh:19704c38c0cf229dc663e36a3ea53649780b7b5ec3953febbc95d7cb5e1cde27", "zh:1c3e89cf19118fc07d7b04257251fc9897e722c16e0a0df7b07fcd261f8c12e7", - "zh:1daf7d4ade44e69593488c1f6571b4fbdaf01ec41538207de1f12609b3830907", - "zh:386965c0529ed083b94968c25441385378d8643a5748591b221e6d6d3cea4dbc", - "zh:46ede0628c300c6d584135daa93733400b9ce968d8aebb3f925d904b3fcfa781", - "zh:7af453bf5217e1818ca5c2126edb8fe573c85f17a0557415a3bc7ae92a8652f5", - "zh:b6014600409715ca37aa85ddb066698f592b7d104f09c12a68d45c5b00404272", - "zh:bca84d10cd1e805e6d31a888eb6737a96aee14e1b5b919dee73d2a5a8ff85beb", - "zh:bd7d6e6c2a086bafdeeb33d5d4f919a8789ef3acf1a0baf2b8ea43996b96c213", - "zh:e5b7840b1b9d90c3f6be9a59400b7d0580376415a79aa740eba7f97bf35c25ef", - "zh:e94e114b205de36d60bc17a3758f9c4bfc6b01e63be81ae1d9699f9bf9650362", + "zh:463c9351c86d161b6c81efd3109d45acec45f4269bf0180a589073eb5ab6b3e1", + "zh:54a1962e9f998f3725d801274fb8e0a1a6ad194e50f599d586aca265ed193934", + "zh:64fafb076204728168a3c369b9412a0c58ee44ac3175d79611626725e812e73a", + "zh:7283c00ca13c7e1a5d2976884a314daed6dea7e5e99e33d8f99eda28b277c12a", + "zh:95a564a55d2ed8cac1299577f7b1671e0f9d13c0429f5e321deabadb0740efed", + "zh:a325b5c5ea1a8188ad51c4d3ffea76362895bc4749c613e2ec5ac807b3ede902", + "zh:b3d58bb47fdb747734fdefef8bb7d08ae45fd8634792d839043ae326f333b33e", + "zh:da1b6043e5615f767b9685ab4cfdffc04e1b5ca808c7c004d83bac75cbc8f465", + "zh:fd5eb49039b7787a1133cbb9f2ba6b0183de10e7ba95aaaaebdee7b50e40c6d9", ] } provider "registry.terraform.io/hashicorp/azurerm" { - version = "4.21.0" - constraints = "4.21.0" + version = "4.24.0" + constraints = "4.24.0" hashes = [ - "h1:6Zce/bfJTubd9VZP+SduO6yD8B51yoeeUe5XyP+n8Tg=", - "h1:8VVtYcBaHWoyQw5DszL36a5Tbx7zGg8jsMPWDjNtkds=", - "h1:J1EF/O3HfSOSwhPEyXfXq1D1eOFySXSjQoElYWsUi9w=", - "h1:MkHYR2jMC/9CJQT9uZwHb3Lr2UTR+GSB1NVzSBd70MI=", - "h1:N2uMJqzYnR+aq7i75T6JX1pAI7Zg6zjpUIiaR2u36V4=", - "h1:SrzAtKrwc16XfEn7XLO8naHMr/q33SpHOEsnWN/L0HI=", - "h1:VaLnj0MaKBjPbAMwCyuJMYmKftnCU8q0XXQDaaAWQns=", - "h1:e1SrjIeLOMHizlsDugvd1qjRpeD1TFzLmU6k+yfztlA=", - "h1:fTq06csKOkoAqtkJn4FXn37wyRlJ0EJJgpe3CWMhIpU=", - "h1:gMu4FGlBedcPsbmKgqHRbT6HYanAqlpcozFAsnbrwhI=", - "h1:mo9aGGJoAiFRf5bBMPlsG6AsDaLqbvPgwkASgdHbiY8=", - "zh:166573ccd95258c761c5ee17ba53b1bf38aac59839fb67303489ca76a4fe39cf", - "zh:17ad468923b68620e0c976a51c512fedd640758f29647650fcdeff5fdfafb731", - "zh:4bb4c6674c3f4776da7fc193a78f929e872144e90821e9e834f02898a0a5b64d", - "zh:5be6d97f17709829fdac01067c5a793a3e3a01d5253107a43b8b94d6837a684b", - "zh:5d9a332a4854ec3e3c5fd185fade10c1b4b71ab8b1ee5d18e26fc29bb5648d83", - "zh:6bfb004b4eb8e041190f8ded8facd2530482eb83af0dead8cd1634abc831510b", - "zh:8b0c42fcd58370e3e4531ab721a09931af857043ee0b3f45404020fd1fdf7382", - "zh:9271775dffaea0d902e41acee737e95e1016a28f168792d06679cfc93e843ed5", - "zh:9cf0b0c48d9a3b21e74eda4f6198c117f52348768e9d0fcf8af933a2a15b6f83", - "zh:a0454a9f08b9de55382715d915be5f56e060e1c11dbd4304e5452518f402d9c1", - "zh:d9b4ea1a8ac558c09484d70f94a16deed35902e06943edb0b1f4ea5bca81feff", + "h1:31W8xw2zoe03WSEr441Jh1E4PKxEXduN6OeOUdhGHRE=", + "h1:3DzTW6k/otWNhyqEt3I5CnyOfu4VY96k//Ri2rJmtsw=", + "h1:HPGpRzmaAhrguNcDn25r1RAu4h0d4b2lq6MTIxiTw6w=", + "h1:MCqV1KMC8FqBjMDb6mnINcBVdN98hh/KSpJT2yKoHrE=", + "h1:N2nB3s9xiZ93Wb5XVJZmv8dfv6oBUpJyk+gKYugt+os=", + "h1:NqCwAlkZ4bgupjxMz32PaU0hW5ithwnc0KupYIJz6UA=", + "h1:QKLE+6C8K98qAoah9gY6H6twDjpFmujoJsw/uMAGp5Y=", + "h1:RW9HwyDDx4rLFLlgqnHd8HEXJFbaK1eaqmCNwf4YJRo=", + "h1:ZqpLJOc0bFeTCNbkSMINldvsHoKMZgrKnTAFILuXzJQ=", + "h1:o8pD1z2vMiCrdXRpcMPlfs8VZRlSJnB+fYaMSWpWLV0=", + "h1:wl0kzOYi+dGFMRajdQnlKSm3JpYY2i13UHcceLT8KkU=", + "zh:26cebd201fad0c361e757d8552208106b70fd8dbca3668229ae4eb92fcd69d20", + "zh:33e8929ef07dd515a93027d35b77ad28b9a9fa915d824c028e0df75bcd7ad18a", + "zh:3de012cfbb0e993826a4715a9b94908ab87e48f45a72b2ae87dc770bba1a38bc", + "zh:4d3fd7c389a1768e15ef0ad78fbf2c560d35284fcfb8196d775466bffe4aa8ca", + "zh:88b8979d73ea7f2361df4ae26b64202fac44c0bc1291d8cd4ffb9a605f99d35b", + "zh:95ebe18507cf32fe7cdbc3b8c69f78541be9511070a60d3d925e3ef4df7d7b20", + "zh:9ad4bd9262be7e6ea933ae3ce4696c86129be6b44c44a605e748ef95c897ea76", + "zh:a54609ff7eddf2b0eed9ae67e33c5fcdf94aa838a49d06052bbe632ed5453a91", + "zh:a6bdff023a0d9bc15fadda37b23202ec0f5d6fbb66013dcb70a9ad0f162a86f5", + "zh:cc4c82f23b2fe55126b06c719a8285ecf2cb9dd10b89c7a22af047f940c262e5", + "zh:ed32a4e66aaabb7fa919800a3fdb27bc3181844765f1109824af3a542b84bbf7", "zh:f569b65999264a9416862bca5cd2a6177d94ccb0424f3a4ef424428912b9cb3c", ] } diff --git a/terraform/infrastructure/iam/azure/main.tf b/terraform/infrastructure/iam/azure/main.tf index 18f88aeec..7ba77112e 100644 --- a/terraform/infrastructure/iam/azure/main.tf +++ b/terraform/infrastructure/iam/azure/main.tf @@ -2,11 +2,11 @@ terraform { required_providers { azurerm = { source = "hashicorp/azurerm" - version = "4.21.0" + version = "4.24.0" } azuread = { source = "hashicorp/azuread" - version = "3.1.0" + version = "3.2.0" } } } diff --git a/terraform/infrastructure/iam/gcp/.terraform.lock.hcl b/terraform/infrastructure/iam/gcp/.terraform.lock.hcl index 5053a8aa4..29ea247b0 100644 --- a/terraform/infrastructure/iam/gcp/.terraform.lock.hcl +++ b/terraform/infrastructure/iam/gcp/.terraform.lock.hcl @@ -2,31 +2,31 @@ # Manual edits may be lost in future updates. provider "registry.terraform.io/hashicorp/google" { - version = "6.23.0" - constraints = "6.23.0" + version = "6.27.0" + constraints = "6.27.0" hashes = [ - "h1:AQqvilOF4FnbXO/c84HsNkJ+TyZEs+N12iHYFnwvNOM=", - "h1:Gr39ABNw+A6lwP2gPG+yCzGmU5T97iI5qT0XLCd3Dh4=", - "h1:H9bo7LCZafcq9OmqJomfxrcc6B3jKmIc3wpdHodfpYk=", - "h1:NTdicRL7Atqk8fM3B0PQguImzHdZWQwOZwPW0AzkQm0=", - "h1:TLMWskwzbDsyfi6LaqTD0ckSTT4rtpGLF/QCojaDiec=", - "h1:biGOmqtXxJKQl2BRp23Ars11UpSmZenahVIsm4ppFfk=", - "h1:mdB2KHl+8oFUWBWGnfbOaqX2y8H+Ptm0Fdub4feX99U=", - "h1:oAaJhkB2s1y4fSESXi73zJxdHhC7NdB7rdFN6KH2uY8=", - "h1:rENW0F5QJbBPmGBwoD+pzZw65D7W3LAfBZMFr9ncE80=", - "h1:uBPMb39cwdZE6XAPkTynWdIdChkj1IPrhqPHd+BffE4=", - "h1:wp55nTaA9gz0Imll8+4PYeOONzQYKKDWIcoB6qUoJaE=", - "zh:032dd78eff887a673a1067008a8e47a69983bbcea9f41832320470247a76863a", - "zh:1af89f75142cf9c54499a466c8dc7055e2bbf02771a6b8c8cd57eb13dce9a800", - "zh:3696a8e72c6cef80fec3c3574fc8519f0410f23f6dc3e3540d2f03345c140d38", - "zh:58a15c71ae128ff64117c1c6b9ccf8ab2ac3e8f9c2c52957d8327f93495f62b1", - "zh:70ba2909611e8d1cc8009567e50e195c4269e6582d6a6fa0bce0d4e6313ab8d5", - "zh:8f8489d1eb8c189d59dc85e519e51ab4c4b1940e4d72450ae130ba752028fa01", - "zh:99c8c4e8dc67a7ab597d46ed566f64c4409761276f34bd863457a37254620fa6", - "zh:9b24d53440e8d7e06020e7b3aeca0dde4f1a3ef997d7da05ff3acb918896fcc2", - "zh:b3667fd6057997dbf0bd0179ddf686c272d4ab4fc7da6a03fdf2fad31ad4ecb5", - "zh:cc6df6d2291a337a5f434b7335c693164c6987604b9690d6b953b796d8eaa08a", - "zh:d871f39c3c5b63995793c9a70f107e52ca699d211c770a6e7ebc398ba59bcdc7", + "h1:1aVSGyBFnQf/EerFDnp6bRAXD16nTwmFk4iZ8DRRuNw=", + "h1:6u6rQ3HGvCnJpqka4RECJNdpEVV2mv5kpI8y5uWCvf4=", + "h1:CLLP3iWnjqnpuYvxTlv0hoXAwsoRiXuHAF+uC9zr7qE=", + "h1:KzQWVS5YOkTJxciv4nKjRwLbNuWq6SxlCLJTTpM5O90=", + "h1:MHuQfr068Yx5K5mEdLauY/0j2OZ9E1fe8d948w3kja8=", + "h1:NPQFeTud3D4Wt2eXK8/es14/Sof/s1X+QznjjrcmhHE=", + "h1:NecZZ8u3NGyGZZj3qTzyDXYUx4wQ1IRzVo+U2eYfkdk=", + "h1:T4n/UjC2M7qGJgTnNF4A9N4Oibq/c8kcNtVApL0+PsA=", + "h1:XaWH/1VsrMTjsg4Ik3YtIFdkQzXUpki66HJMVI7QZoE=", + "h1:q+jp9jrYyt0eGyntqEBWXWDh61UiyG/sa0+Xn7n72gc=", + "h1:yOClyOHiawZkVQ4CV2ZAQDBVYq+iwZ0H8CeD1lCpfIE=", + "zh:04623cec9bb1646265498b646f9ba2153eb98f2c190efbf9cf0e862547444a86", + "zh:1801c35017302ced13ca5faac210b10617dc933c63aaee9576422ec0119e7fbc", + "zh:3fe5d633a146a53504387acd6c16919a3eac1e7b55ae61c2d85583aeb2227528", + "zh:4870bce89958414e3b9c9d4f8e34e4d346b5800a24b6cc5df86fcad400091325", + "zh:48dbd5031de507b14e0ebca44f9dd00043057f6324c80971d4bc338072b2f7ea", + "zh:4c5146a49dd346295e3ef41303884ac28cd655705f4300ceafc23e2577f3b1ce", + "zh:592caabc8444d7df3cdf61cd62381fbaed854747e04af593f09c181699cca8c2", + "zh:a754c9f54745d614817acdb63a791315c79f1fdc7a0867c8d6f505e066de1b55", + "zh:c72857459146b74dbf270ad5a45e12f7a0f50254fcd200e6833f3d137709ae34", + "zh:e1e11e2373843dfe8cfaa32148981c7f3b04382baa3a901cb70a2db062ef0983", + "zh:e1f297229c4c6fed3bcfba576da4e72c42bb93b578794920ab2d8698b3a8cb40", "zh:f569b65999264a9416862bca5cd2a6177d94ccb0424f3a4ef424428912b9cb3c", ] } diff --git a/terraform/infrastructure/iam/gcp/main.tf b/terraform/infrastructure/iam/gcp/main.tf index 3cda6e306..857d5e27d 100644 --- a/terraform/infrastructure/iam/gcp/main.tf +++ b/terraform/infrastructure/iam/gcp/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { google = { source = "hashicorp/google" - version = "6.23.0" + version = "6.27.0" } } } diff --git a/terraform/infrastructure/openstack/.terraform.lock.hcl b/terraform/infrastructure/openstack/.terraform.lock.hcl index b534cc033..4658d030f 100644 --- a/terraform/infrastructure/openstack/.terraform.lock.hcl +++ b/terraform/infrastructure/openstack/.terraform.lock.hcl @@ -26,29 +26,38 @@ provider "registry.terraform.io/hashicorp/random" { } provider "registry.terraform.io/stackitcloud/stackit" { - version = "0.43.2" - constraints = "0.43.2" + version = "0.46.0" + constraints = "0.46.0" hashes = [ - "h1:5UWqMPouvybJng4sPiOYV+axRHQutUu+b1PtGfqCzTU=", - "h1:FJFyUtokCwauMxhn6Ifg/omB/XApyUcTxhhl++Ki2B0=", - "h1:Pw9XZRsdsp6P/Ct4m1Q4yD4WQ3qja0t1wWiYPZZWl2c=", - "h1:jsf1yTdRltLsAvSw+/orxMhHApQYc15UZETWvUTJVs4=", - "h1:qzl7A95YEzExYL+g/Io2jTXf0PQy/xOnLewnxm83UPQ=", - "zh:0d6bca5ec365db934841dad5f03fbc92ec8f458850673184bddaeab79b0de2e1", + "h1:+bxcRYeeaqfqA5tajnUmAGHBsqDXeCfiHQGUT96nCCQ=", + "h1:2u0eIL6cD3uM+vTzM/BS0n9a89Gne5+BwWPRmGZPaDg=", + "h1:3tAzzZzGxkknOMqxF5E4DT6iSImcGeyKMew6ta0HzCM=", + "h1:7aT4q+GBGZPoa/E7WIUzwK+sT8rMI0xXKNEksMVfpkE=", + "h1:94eLzxfEVmaphHr0xHuao4TjbtFr2N+Bkf7OPiYGzW8=", + "h1:O2xv+6bwYHmvD9aeGRrwasRN0xy1mxIdHcyooZc++bU=", + "h1:Oh44iq7mxuRHh4IvX9Iv89aX/I8exYwg4FsAr/d9k2I=", + "h1:cgHbUfZLC+ozyJUgWhJ8v+loK96KulaZynDl9kdq+Jc=", + "h1:iSTzCeqxnUoOsk3xkhzJZPRRQG/2m+pqnDJ37ck9yTI=", + "h1:pKVkvkc2RfqH+5DHIkaHJ6ptH799hk9rkpyy3YkEij8=", + "h1:sdvX6ILKxuqGgXtzh7rWehWlYVMVXubZiSyq/M6b81U=", + "h1:w/9s1lf7LNIVGVcvrhCeK+Rt6WZZ71nUBnFdR0D9Hnw=", + "h1:yFY6owhNOk+kRrzxtdLPPydpiUoeEg0cU0Q18Hd2mkQ=", + "h1:ytE0BwooPYX5t2CjyRK0CaOYf0NZhzYovJGE3UrzVfI=", "zh:0dde99e7b343fa01f8eefc378171fb8621bedb20f59157d6cc8e3d46c738105f", - "zh:0ff1358c5c3242db939c48e8ce32fd31224254f8b417f39e633d69710b4666cf", - "zh:2436e4119f9bf4ccbe4cf100341ac05b886244dbdfe5f32ee0e0588e964ad4fa", - "zh:55e14ffbcfad35fca51667ed9e242bffb9cef057698d54af870b2efc53c222ff", - "zh:56956bb13ba08711cf7720cd21f5be208e21a9c8cf27c5b4bacf9ca1178031f0", - "zh:668289e778b5cec41861a72cb191d06e84c604463eed3102e66886e9866db2e5", - "zh:9c6d3bf11a88eb462b291dce3868d369c175beee8ef3a9642df14f30d6ab88bc", - "zh:a57c3b8d1dcab18a4c0ea97962891587531c0d94dfdd96fd49cb1fb39b35bc4c", - "zh:a5a1e0d7adc62776674b898912df4a3c9031dc8c6acd812022880bce5d8cda6f", - "zh:b36d078faa2500aa36b01a20f7f0e64e8f545a3c260a2c4dee7929151e3542ce", - "zh:b373b283ba43fc48253f816d033efa5406287f3877a6c0810b3471e767761eaa", - "zh:bd7019093eb8fc5d0b2bc4c0273e31f06cd2bc8ddb07ed4b9e8a5dfa15ecc1e9", - "zh:f16f2dfa67edc13da968b7081df199c38272fc18374119d8ac0382dadc01ea18", - "zh:f3ce30f35db3c6648f561a0b468d608f4c36b5bf4aa65256673e05816854ec08", + "zh:0deee0b8913c092d3b7682e21365f21de6d43972d1509830e2978d0f9f13b29f", + "zh:0e98445d409c9cc0bcccb80b7930a0f9ace995fc4e9f75f89e146256e25e7f2e", + "zh:1cc702f09152b3fdf3f2caa57fe19f59946de4ae64face23ed5c164a2bf0acc2", + "zh:21d5e94441c9d389788f141d1429032b15818456b8227faf40c4b4c7da8f878b", + "zh:5a81353b084c22462e83a2726d09f8c9e25193597abbd72677ded34641996cbf", + "zh:6409dfa4c8c2fea4806f7ebd3390a3d3d01d4b95eced75cfcc620c375a85520f", + "zh:ae0628b1fc333d329dba50cafb0a7db4895ac3427b9477a6cf37bc63fb7511b0", + "zh:c3b3006cbdd1b2439886d66503477f844d3f054210205a25adf6d5d4f9be1959", + "zh:dd51ef1844ae92338bf27db8003bad411aa02940dd9c6b173d901e3d9cdec1be", + "zh:eacef57781e450b29a231e25e48cd9560bf520f21b6728a073b5b28a4b4aaf07", + "zh:fa129a73911d38ba38b34df16b8ffc120c3e647ea7980482dea68ca0f4c3e4ba", + "zh:fa872477a4c2a2b6443c2fa2ba77d55c26dab9c2ad1fd20e824d290c95dac066", + "zh:ff31892da886980cc35a2a4d36e6759573b8ab0871f6b5cd6e0a572320477d5d", + "zh:ff45fae4dbb81730aeb894e1a52e3e6695ecafb428d264bfc82da9b57ecd5319", ] } diff --git a/terraform/infrastructure/openstack/main.tf b/terraform/infrastructure/openstack/main.tf index 442866d4c..bc0e2100c 100644 --- a/terraform/infrastructure/openstack/main.tf +++ b/terraform/infrastructure/openstack/main.tf @@ -7,7 +7,7 @@ terraform { stackit = { source = "stackitcloud/stackit" - version = "0.43.2" + version = "0.46.0" } random = { diff --git a/terraform/infrastructure/openstack/modules/stackit_loadbalancer/main.tf b/terraform/infrastructure/openstack/modules/stackit_loadbalancer/main.tf index 42103b7e8..745481339 100644 --- a/terraform/infrastructure/openstack/modules/stackit_loadbalancer/main.tf +++ b/terraform/infrastructure/openstack/modules/stackit_loadbalancer/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { stackit = { source = "stackitcloud/stackit" - version = "0.43.2" + version = "0.46.0" } } } diff --git a/terraform/infrastructure/qemu/.terraform.lock.hcl b/terraform/infrastructure/qemu/.terraform.lock.hcl index e4f46d1a6..25c91852f 100644 --- a/terraform/infrastructure/qemu/.terraform.lock.hcl +++ b/terraform/infrastructure/qemu/.terraform.lock.hcl @@ -2,37 +2,37 @@ # Manual edits may be lost in future updates. provider "registry.terraform.io/dmacvicar/libvirt" { - version = "0.8.1" - constraints = "0.8.1" + version = "0.8.3" + constraints = "0.8.3" hashes = [ - "h1:5FeCYHMRIdyECDTNoFsAj8ImUjcJdeyGvLr8Ja1w+EY=", - "h1:7O8wfEcqhW1bvWOUcrxL7cbCrdvXeD6nkXRSbr4KUZA=", - "h1:9PKhle3FeywAgnuJU1qzP1pmv8SSOWKhtVszkt+5+PM=", - "h1:E05LPgJfl9hkZ4q42rQThDy6S9nLajwFF3dPUMJOzIM=", - "h1:EvrKlA6d+0OjWFPy7p15U+suA5deQdgHo7V8x3d1/MM=", - "h1:IKy4tvKIxwGjzvLwVp/gfm9Ce8Iegqx0u3tuPXlwYLM=", - "h1:IxpbyFtBCvMVZVufdITj5SLyYQZSIRTUTRs7b8Pr+tQ=", - "h1:KUGB3qu7THug9hwg+Witf8PInTeMarpT1VnjeHIPE9Y=", - "h1:P89mPLLTUwyEvyUnHNW+m2QIXvjfJ9hTY8xtTl3D29o=", - "h1:PYgdRe26T85VCqUPjCpwWTnq1AN90IlOXf6zMD7rjbk=", - "h1:RcwrppqfAbj9po935/q7SQkEu4LpLcjU34VB8GCDauk=", - "h1:VdVOp9wkDQlo4FE9s1qrjOLDBZT/wWJ13TnasQEMnXw=", - "h1:fsZ4cwYgn7XdtEo/eSoyDlgbO5yycX8Mm5myTp0PGFU=", - "h1:zMNA/zoL1CY5Vdj91hkFhI9bddu5wTEdioeKVaTqxss=", - "zh:126b9c265f5c2c4faf9b6ea6abfd3f86639d6301ba99d11cb87caae65e91eca4", - "zh:282527a99f75468fe20a59e207ccc71f5de545548f1b0c6a4d235cc3664ff095", - "zh:3b44aba6825ef5c909607ac5ec7e2f286de4e8ecc36cc00e3a0780bba372f248", - "zh:41dfed618ef200061d2b7c991fbda7dd8c9c3a919d5952a4ce26315fa2f698e0", - "zh:43e628f793bef68892eefbd9afc571d2314df225c7dd78485a75fbc9e2869442", - "zh:478bb7bd04df95b8d71a33c1bc0d0f8b5ff2fc807c118ca3129ba6b3507fdb70", - "zh:65a5b3c1497e1b12b6d6b9feab2174fc58e861c164c08cdecf2bca10e4612fd4", - "zh:6f07753897cc9e3e9031597548e8716e39bfe7b348d7f271f67a477e1f5c9c22", - "zh:72282261a35e81895d002d6ec2b799404183803f55f5a4ecdb85ab2925196f5d", - "zh:7a7853515f4b9a30f76c10f3c38df4d7562b6b55332a9c07477364a49d2b462f", - "zh:a14dbc814c8aa5ba26b7a4195c28c4822f5024767a10f643de3822b0e32f7be1", - "zh:baa396ad19bb486ac356a89ec759b9355c4fb0a94fd67e49980a2e57fc243960", - "zh:ec626cc9e0e30321313c0ce80aea0dcca9f468da0530ee66beb217526fe8f8ea", - "zh:f4ee4844f3b8ef3d2c13fea620cc816f725daccb596cea0a2f6b18301b9f1d1a", + "h1:4R2L9SlbXt5VVZtQ0vPe1s65UygQT3aKTWpsGKqTnvM=", + "h1:AGOjd7NzTBQAiOjjlUdq5JjuYdWBL6jfrNf+qO7Z+cg=", + "h1:HuCu3y7gzhI1YLYWY7L9c3f5lhJyo5/Peozd50hoj4w=", + "h1:SE2o8WY/6vqSTow2nds6P2+IoJln0TvuF794xBjDIeE=", + "h1:Tttxr3E9O75MM+dDmq5sYHQEw29PwtIj+XDj/5drdfE=", + "h1:Wqa218+IMxnn4psH5r4FlvEL2/LKZRHc4tFm63uOrVc=", + "h1:Z+uoKz1rZ/z0xwEvycBhuDGDwQDKhHUDxlAfKkoGCko=", + "h1:bKZooqVcZ2vCovziB23j4exHuGg8s/FyxjoZ0NIY36Y=", + "h1:dSnCr6ib3qdJot4gXPMe8DW9pHwRPTkN+jkCbG/w4uI=", + "h1:fg6FmBx96CV7M1osSsZ215N47M3TGFeaoy2XVSmh2/Y=", + "h1:h7F4ON38TMmy+8fAoYBaKDOFWv7ZVUnI0J+h7jSL2T8=", + "h1:mymyoJNy7FTe3lkYzgt2Gqgrehn1m1EiqNLrpx5nerk=", + "h1:x44dqohhlnP6MxVsv0c07CcjOERfOBt79QCaoPgtFic=", + "h1:zEKrqI+ape4+ySL7RAZf2PFQ5jBqgfr239zdkyr6U+U=", + "zh:06ff0169beafd1891dc5a30616983abd32004a4f570d1d3dbb5851d84bd1c007", + "zh:2dbdd726d0987cda73b56ecdfbcb98a67485e86a7a44aec976c0081b7239d89d", + "zh:2e195a7bbdfcc13c45460571a5ba848a5c1e746b477c8381058767560f0ac93b", + "zh:3952da13080018c5aec498b73e343c4c22ad884afb8c983138fb7255617aa991", + "zh:478841bcf57df938726ddb90f55c7953fad09db4f6348747519afe7fc84b403b", + "zh:53bce78b03a82c4782acfe1f32c2b46a68fa5fb2fb90d4a5392c90b436b44244", + "zh:5c157f23e9768c67cddf9e847a571adca441607cb5adfb96dbfdd626ceadf92c", + "zh:6bc78d631959fb695664966851308e140c38f3f5cf648dd89756320c2d91765d", + "zh:8605d7d6915190836802654920a8eea3d751ae437273c4f4476dc0ebb9167a1d", + "zh:8b66a22b97331c2a56aed092fd39152d06ad957fd4810aa3f0c4ade0f9b15755", + "zh:92586a47a04082f70bb33f722672127a287caeed109beaaca2668e2e1d6a9caf", + "zh:99a9ee414f5c4268e287660ce8edec2efcba1f79351f83791b64c7e5ab04f569", + "zh:b7cff09fe74b0eb63b5b9aa94de5b33dadbd006d6d5b9578ac476039ea20b062", + "zh:d4188a343ff32c0e03ff28c7e84abce0f43cad2fdbcd9046eaafc247429039ff", ] } diff --git a/terraform/infrastructure/qemu/main.tf b/terraform/infrastructure/qemu/main.tf index b520587f3..db9ccaaa5 100644 --- a/terraform/infrastructure/qemu/main.tf +++ b/terraform/infrastructure/qemu/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { libvirt = { source = "dmacvicar/libvirt" - version = "0.8.1" + version = "0.8.3" } docker = { source = "kreuzwerker/docker" diff --git a/terraform/infrastructure/qemu/modules/instance_group/main.tf b/terraform/infrastructure/qemu/modules/instance_group/main.tf index 1aa841277..61c9b1d0a 100644 --- a/terraform/infrastructure/qemu/modules/instance_group/main.tf +++ b/terraform/infrastructure/qemu/modules/instance_group/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { libvirt = { source = "dmacvicar/libvirt" - version = "0.8.1" + version = "0.8.3" } random = { source = "hashicorp/random" From 67efbd43a5f24115075aa93134bb18cbd2435868 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 27 Mar 2025 21:34:32 +0100 Subject: [PATCH 181/311] deps: update ghcr.io/edgelesssys/gcp-guest-agent Docker tag to v20250324 (#3720) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- internal/versions/versions.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/versions/versions.go b/internal/versions/versions.go index 8c429fc5b..b8b327fec 100644 --- a/internal/versions/versions.go +++ b/internal/versions/versions.go @@ -169,7 +169,7 @@ const ( // GcpGuestImage image for GCP guest agent. // Check for new versions at https://github.com/GoogleCloudPlatform/guest-agent/releases and update in /.github/workflows/build-gcp-guest-agent.yml. - GcpGuestImage = "ghcr.io/edgelesssys/gcp-guest-agent:v20250225.0.0@sha256:2b947decf2cbd5c0fdd0815010812231098936ccf5768733ff972b3056a15623" // renovate:container + GcpGuestImage = "ghcr.io/edgelesssys/gcp-guest-agent:v20250324.1.0@sha256:f69408c6e64ded3df4afcc764b417697d71e955103939cc0c574cfb43ce5c156" // renovate:container // NodeMaintenanceOperatorImage is the image for the node maintenance operator. NodeMaintenanceOperatorImage = "quay.io/medik8s/node-maintenance-operator:v0.17.0@sha256:bf1c5758b3d266dd6234422d156c67ffdd47f50f70ce17d5cef1de6065030337" // renovate:container // LogstashImage is the container image of logstash, used for log collection by debugd. From accfd4e0416d2caad11e1caf97dfe6af1b3659a7 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 27 Mar 2025 21:34:47 +0100 Subject: [PATCH 182/311] deps: update ghcr.io/edgelesssys/constellation/s3proxy Docker tag to v2.22.0 (#3719) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- s3proxy/deploy/s3proxy/values.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/s3proxy/deploy/s3proxy/values.yaml b/s3proxy/deploy/s3proxy/values.yaml index 6153fd97c..f80d07960 100644 --- a/s3proxy/deploy/s3proxy/values.yaml +++ b/s3proxy/deploy/s3proxy/values.yaml @@ -3,7 +3,7 @@ awsAccessKeyID: "replaceme" awsSecretAccessKey: "replaceme" # Pod image to deploy. -image: "ghcr.io/edgelesssys/constellation/s3proxy:v2.21.0-pre.0.20250205082926-6d42d9b40e22" +image: "ghcr.io/edgelesssys/constellation/s3proxy:v2.22.0" # Control if multipart uploads are blocked. allowMultipart: false From 7b550bbf09c58c9e6be6bb8fdc90f7d042138924 Mon Sep 17 00:00:00 2001 From: edgelessci <71088502+edgelessci@users.noreply.github.com> Date: Sun, 30 Mar 2025 19:29:55 +0200 Subject: [PATCH 183/311] image: update locked rpms (#3727) Co-authored-by: edgelessci --- image/mirror/SHA256SUMS | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/image/mirror/SHA256SUMS b/image/mirror/SHA256SUMS index 1273c65a3..5f33fb5e4 100644 --- a/image/mirror/SHA256SUMS +++ b/image/mirror/SHA256SUMS @@ -1,3 +1,4 @@ +37abef83e8927b4b48f69fcbdcc249d349c6029cc669401676d01f0ea326999e WALinuxAgent-udev-2.10.0.8-2.fc40.noarch.rpm 03b5889fecc19101fe5c5eb6105bded5705e16a7af957f92b6cc6a7a96e829a8 aardvark-dns-1.14.0-1.fc40.x86_64.rpm ac860c52abbc65af5835d1bd97400c531a5635d39bc1d68e36a1fe54863385ea alternatives-1.27-1.fc40.x86_64.rpm b28e7d90ed3aeb6ca10ecb235b70534665011af35bd3677fb836b1e3cfa602a7 audit-libs-4.0.3-1.fc40.i686.rpm @@ -14,11 +15,11 @@ a9af8b72483b4ad6489e6d2492161120809453373edaf24722cffb394bd1cd15 catatonit-0.2. 5935816e8d377d0385e5287ca12e4d3b43e3c3cdc9cc4deafa653a6dba78611a composefs-libs-1.0.6-1.fc40.x86_64.rpm db246f6445469b5a71e965a081685471768393cf04181e7250ce0ddcb8a9c3d4 conmon-2.1.12-2.fc40.x86_64.rpm adf4b75cdd9fae9d2d37fb71d9f0bf625a6705c0f0a7784569ab21463fe22152 conntrack-tools-1.4.7-7.fc40.x86_64.rpm +b84841f98b3c14d68da5a4021f10973eb5fa6566e63f4933e40a0c91aa134ce4 container-selinux-2.236.0-1.fc40.noarch.rpm bbe29e0c7b4ca076d50b4ac3954eb383459230d96b13f353ee71ebd5de33b6d1 containerd-1.6.23-5.fc40.x86_64.rpm 0705251ea64b1558098016b2120f202c5aba77470093cb8f89ce6adb2a0b46b6 containernetworking-plugins-1.5.1-1.fc40.x86_64.rpm fd81f5d57a5feba4658d3ab1c6ab0a1a9551cff5c73263acf960bd7d41acaf25 containers-common-0.62.0-1.fc40.noarch.rpm 1472f71479fed6eb2103bd9653845609c7523523d06c36565a37d818fc144284 containers-common-extra-0.62.0-1.fc40.noarch.rpm -4f69d382decd37f53edf1ccf1093a122f209294128038d642beba5f0021131d3 container-selinux-2.235.0-2.fc40.noarch.rpm 299d3e7e1cbc110d9ae8a47f6ca95142c3e3783cb1464bfbd6bc550c414b97ec coreutils-single-9.4-9.fc40.x86_64.rpm d941a78ffb6e2e0b4c24d0097d0351ced8796edde90208b4bddee459bce0a949 cpio-2.15-1.fc40.x86_64.rpm faa23cb6a7a612c0a6e874c788c5add967c5e193bd38c2e6093b82b38a162f81 cracklib-2.9.11-5.fc40.i686.rpm @@ -57,7 +58,7 @@ f7778242b3242fab35a5e0c4f0919ca9823a47c7b296f274ff312cc2c49ba6e7 elfutils-libel a322c6f44f82bc21558f3bb7afc694dbdc28a41340280d3a2c5da2656a339d2f elfutils-libs-0.192-9.fc40.i686.rpm 184235133a6873a42b72d2d88657f12dd4b4b603fd5058fbd02daa0a7308f69c elfutils-libs-0.192-9.fc40.x86_64.rpm 95cf8ee199b2e1b3471f920ebad57d3d8178f5e68d37ee35a8a94727473ec8d3 ethtool-6.11-1.fc40.x86_64.rpm -6df53940c5e0575c6b6be4d4f1f48f5504a94b04bfb63ed2c80acc64412591b4 expat-2.6.4-1.fc40.x86_64.rpm +77981061416892abd7369751cbbe60c9fe3eaa2a71c4f240ccac6cec7f8d43a5 expat-2.7.0-1.fc40.x86_64.rpm 849feb04544096f9bbe16bc78c2198708fe658bdafa08575c911e538a7d31c18 fedora-gpg-keys-40-2.noarch.rpm 8f0a56982aa10b607bd3b8009e91bac1a7d9b7ba40eb4435ff9bd9efe7e5e76e fedora-release-40-40.noarch.rpm dde6f4b5d4415ce20df40cf1cb9ff3015aa5b1896c5b5625e49aa686cdce1d1d fedora-release-common-40-40.noarch.rpm @@ -67,11 +68,11 @@ a6f2098fc2ed16df92c9325bd7459cc41479e17306a4f9cddfd5df8a1b80d0f8 file-5.45-4.fc f76684ee78408660db83ab9932978a1346b280f4210cd744524b00b2e5891fe1 file-libs-5.45-4.fc40.x86_64.rpm 063af3db3808bea0d5c07dbb2d8369b275e1d05ad0850c80a8fec0413f47cd64 filesystem-3.18-8.fc40.x86_64.rpm 21725de2a93e1ea19f8d298e32a2428a3a08b9c98f22561cc778a807ed43639f findutils-4.9.0-9.fc40.x86_64.rpm -2d6631d65e3b5c91afdb100a51ee8e50294f0e074a944c1662008d878d47456e fuse3-3.16.2-3.fc40.x86_64.rpm -a9c6502a5b190aaf169e93afd337c009e0b2e235e31f3da23d29c7d063ad2ff9 fuse3-libs-3.16.2-3.fc40.x86_64.rpm f4c2d51c7b4577f7b7ef498f8e2afb1b007da2de00cca28e220f50129c40a48c fuse-common-3.16.2-3.fc40.x86_64.rpm f94315e447afb7442033b7b82e43a4ed62754f603afda53930280300855e46c7 fuse-libs-2.9.9-21.fc40.x86_64.rpm 8fe84b7e0319afcc9c9eb28130b74e0cd7c675667a6ce075eb7ee2ec1b0014c2 fuse-overlayfs-1.13-1.fc40.x86_64.rpm +2d6631d65e3b5c91afdb100a51ee8e50294f0e074a944c1662008d878d47456e fuse3-3.16.2-3.fc40.x86_64.rpm +a9c6502a5b190aaf169e93afd337c009e0b2e235e31f3da23d29c7d063ad2ff9 fuse3-libs-3.16.2-3.fc40.x86_64.rpm 6c80dfdaf7b27ea92c1276856b8b2ae5fde1ae5c391b773805be725515fdc1ac gawk-5.3.0-3.fc40.x86_64.rpm c4cc69bf3a2655b9ee9ac23492d377bac57811c5b4f81fbf43537520ee33c7af gawk-all-langpacks-5.3.0-3.fc40.x86_64.rpm 21470eb4ec55006c9efeee84c97772462008fceda1ab332e58d2caddfdaa0d1e gdbm-1.23-6.fc40.x86_64.rpm @@ -95,9 +96,9 @@ f8510eeec17b9258de9a68ce15af21f3ea135b5e767f3bc9047f851d81dbac6e google-compute 94e443590221fb17e0330f076ebac32baab17b8d9c22566db372899ae750ca64 gpgme-1.23.2-3.fc40.x86_64.rpm 6d54af0fc5ae216eb97720415acda4245ebc6c021420a2892b58620b5b25ca38 gpm-libs-1.20.7-46.fc40.x86_64.rpm 8e2310f6cde324576e537749cf1d4fee8028edfc0c8df3070f147ee162b423ce grep-3.11-7.fc40.x86_64.rpm -cfdba55bf65221d4cb6574e18586340f813ee948fb90f94088ab730a8cbd4400 grub2-common-2.06-123.fc40.noarch.rpm -a265c8c4acac4c2a3c5f63f98df89e689b87f6f6bcceac1c83882d9cdab90eab grub2-tools-2.06-123.fc40.x86_64.rpm -3ff26313487d9656195f2e121eb57ea6411deab71b0ec3ae57f11785ba86f330 grub2-tools-minimal-2.06-123.fc40.x86_64.rpm +46bc4d8d62eeb1fa3275898d44a30643260f4dda2d3d2a3992f879e4c7df26c7 grub2-common-2.12-16.fc40.noarch.rpm +c508cb9605baa6a0751feda2d23e9a65a4d11538d6d108c295562eac65c63ab1 grub2-tools-2.12-16.fc40.x86_64.rpm +0c6bb04c6e81d368793c03bab2ec736c3ea63aaea9dbb64d4a94b12b35320bdb grub2-tools-minimal-2.12-16.fc40.x86_64.rpm 6a146fa9b154e67eb67eeb258df37814a863997c87171fdc2bd771e5a46b1cc4 grubby-8.40-75.fc40.x86_64.rpm 6dcc2f8885135fc873c8ab94a6c7df05883060c5b25287956bebb3aa15a84e71 gzip-1.13-1.fc40.x86_64.rpm 7ea61bdaada7c1ab5b8567e054a73e2cb3ca6019e3db887049998fed7eea8514 iproute-6.7.0-2.fc40.x86_64.rpm @@ -220,8 +221,8 @@ fadf7dd93c5eee57ba78e0628bf041dbd2ea037ace52f0a5cbac55b363234d27 libverto-0.3.2 103da3ce282f675c8bae6ddce0f42dd826b44058204bf76a2c21581c9a22da08 libxcrypt-4.4.38-6.fc40.x86_64.rpm a17f9a8894a00ee97a42219b3b21d64bfb850d74059d89ae299210bc477e8967 libxkbcommon-1.6.0-2.fc40.i686.rpm 1f1d0c1e1132016735acc6fc3390102b35f9eb257244547c7b61c32a9c2314cc libxkbcommon-1.6.0-2.fc40.x86_64.rpm -db2c5422aeef81940a186b597df582b75a0f156e481262bef262f1b69ea1b799 libxml2-2.12.9-1.fc40.i686.rpm -1d33dae8642a772dc8fae5c8e2e81010d0536e8158f8fafb27e51fa1ee645df0 libxml2-2.12.9-1.fc40.x86_64.rpm +12fa7bdef4a5d95b78a38152a0c90b42c0cfc1a1b7c80fa25f4ccdb7c13cf849 libxml2-2.12.10-1.fc40.i686.rpm +a8ee5e5e972ac86d383bf2798db45f41a22b23d76a0fdef698ddd92076589ff5 libxml2-2.12.10-1.fc40.x86_64.rpm 9007aa6bc776262992172e3f24ea2528cd4f65fb82f2c2d01e27f53f79c5c6f7 libzstd-1.5.7-1.fc40.i686.rpm ec5650e3822d102bfe6bbebc7468a711128ef695f4bd06748ce242b8378d8b7b libzstd-1.5.7-1.fc40.x86_64.rpm 81409455da42a5ffdcf5b8cc711632ce037fec25d5ae00cbfda5010c9db04157 lua-libs-5.4.6-5.fc40.x86_64.rpm @@ -276,10 +277,10 @@ c03ba1c46e0e2dda36e654941f307aaa0d6574ee5143d6fec6e9af2bdf3252a2 popt-1.19-6.fc af85755cda79959a19161ebc26a45e507003298bd97b472b9ab0d512afa5e46a protobuf-c-1.5.0-3.fc40.x86_64.rpm 45ff2e9814aa059f323b23710c73309d41d36306667a3004f5fbb86b0cab4484 psmisc-23.6-6.fc40.x86_64.rpm c000cbb0a7df2c0c61559ab3f3732eacd163b171673298f4ec043cb6d223f364 publicsuffix-list-dafsa-20250116-1.fc40.noarch.rpm -870b11ae674851e6f9a02e650681c2e4a9fb1c91311beb944813ac6a2d4e15c9 python3-3.12.9-1.fc40.x86_64.rpm -2406c85716129d4183fcd2be8de2923770e8d6a12de270ac94cc427404a34a26 python3-libs-3.12.9-1.fc40.x86_64.rpm 7c703b431508f44c5184b5c1df052ed0f49b7439d68aa3597a9a57a5b26bd648 python-pip-wheel-23.3.2-2.fc40.noarch.rpm 15a80b975cc29fdbf3b71a0c8fa3f76a3fe722529036435b0cf7272f01a560c3 python-unversioned-command-3.12.9-1.fc40.noarch.rpm +870b11ae674851e6f9a02e650681c2e4a9fb1c91311beb944813ac6a2d4e15c9 python3-3.12.9-1.fc40.x86_64.rpm +2406c85716129d4183fcd2be8de2923770e8d6a12de270ac94cc427404a34a26 python3-libs-3.12.9-1.fc40.x86_64.rpm b593f10e736995a0a898d37a1e595ad04bf162e7f0e7c9994e3032a9d9bc8799 qemu-user-static-8.2.9-1.fc40.x86_64.rpm 72b6185e59a7b359df273e9fe27dc014c0856341abcd1c907c7810a77cc6980e qemu-user-static-aarch64-8.2.9-1.fc40.x86_64.rpm 7eace5bc3e601266452b8356207604012542a8cd019b576e6d2ab9306c6a8e4c qemu-user-static-alpha-8.2.9-1.fc40.x86_64.rpm @@ -344,7 +345,6 @@ b1aa4e816c01c08c18924865640f214f717cdfc66837e53a24b8edfb80a86f9d util-linux-cor 80766fd967a7c24a543871996a0a857c38d3e7ac205fb3f6403ae9cb5529c424 vim-data-9.1.1227-1.fc40.noarch.rpm d0f66fbd4e87a9245dd907a19ff90eb88bc60d312f3adfcd189eaf32884480c5 vim-enhanced-9.1.1227-1.fc40.x86_64.rpm 501d0bc28c36c713448570aa4a8a35789bc11c490f93ba4269767043251cd326 vim-filesystem-9.1.1227-1.fc40.noarch.rpm -37abef83e8927b4b48f69fcbdcc249d349c6029cc669401676d01f0ea326999e WALinuxAgent-udev-2.10.0.8-2.fc40.noarch.rpm 69fd53fe41a8811e904b5429b1934a413d88978ec54d5c9e64370be32cbfc2ef wget2-2.2.0-2.fc40.x86_64.rpm a00cc0a87c60ffbf5495a9796ac7074e6a47e0bebbb8c137d902014cd7ff5a30 wget2-libs-2.2.0-2.fc40.x86_64.rpm 09822d8d386dc81619639415a211b34592b0c5d43f7be288691cc4d933a0542c wget2-wget-2.2.0-2.fc40.x86_64.rpm From 3e6777c3e57df6f82efcecd65280414706e1d80a Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 1 Apr 2025 10:38:51 +0200 Subject: [PATCH 184/311] deps: update dependency rules_python to v1.3.0 (#3723) * deps: update dependency rules_python to v1.3.0 * deps: tidy all modules --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: edgelessci --- MODULE.bazel | 2 +- MODULE.bazel.lock | 162 ++++++++++++---------------------------------- 2 files changed, 41 insertions(+), 123 deletions(-) diff --git a/MODULE.bazel b/MODULE.bazel index 1824dcbe2..9bd67e799 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -14,7 +14,7 @@ bazel_dep(name = "rules_cc", version = "0.1.1") bazel_dep(name = "rules_go", version = "0.53.0", repo_name = "io_bazel_rules_go") bazel_dep(name = "rules_pkg", version = "1.1.0") bazel_dep(name = "rules_proto", version = "7.1.0") -bazel_dep(name = "rules_python", version = "1.2.0") +bazel_dep(name = "rules_python", version = "1.3.0") bazel_dep(name = "buildifier_prebuilt", version = "8.0.1", dev_dependency = True) diff --git a/MODULE.bazel.lock b/MODULE.bazel.lock index a0c0c0ed6..0dfebe95e 100644 --- a/MODULE.bazel.lock +++ b/MODULE.bazel.lock @@ -60,7 +60,8 @@ "https://bcr.bazel.build/modules/jsoncpp/1.9.5/source.json": "4108ee5085dd2885a341c7fab149429db457b3169b86eb081fa245eadf69169d", "https://bcr.bazel.build/modules/libpfm/4.11.0/MODULE.bazel": "45061ff025b301940f1e30d2c16bea596c25b176c8b6b3087e92615adbd52902", "https://bcr.bazel.build/modules/platforms/0.0.10/MODULE.bazel": "8cb8efaf200bdeb2150d93e162c40f388529a25852b332cec879373771e48ed5", - "https://bcr.bazel.build/modules/platforms/0.0.10/source.json": "f22828ff4cf021a6b577f1bf6341cb9dcd7965092a439f64fc1bb3b7a5ae4bd5", + "https://bcr.bazel.build/modules/platforms/0.0.11/MODULE.bazel": "0daefc49732e227caa8bfa834d65dc52e8cc18a2faf80df25e8caea151a9413f", + "https://bcr.bazel.build/modules/platforms/0.0.11/source.json": "f7e188b79ebedebfe75e9e1d098b8845226c7992b307e28e1496f23112e8fc29", "https://bcr.bazel.build/modules/platforms/0.0.4/MODULE.bazel": "9b328e31ee156f53f3c416a64f8491f7eb731742655a47c9eec4703a71644aee", "https://bcr.bazel.build/modules/platforms/0.0.5/MODULE.bazel": "5733b54ea419d5eaf7997054bb55f6a1d0b5ff8aedf0176fef9eea44f3acda37", "https://bcr.bazel.build/modules/platforms/0.0.6/MODULE.bazel": "ad6eeef431dc52aefd2d77ed20a4b353f8ebf0f4ecdd26a807d2da5aa8cd0615", @@ -145,8 +146,8 @@ "https://bcr.bazel.build/modules/rules_python/0.31.0/MODULE.bazel": "93a43dc47ee570e6ec9f5779b2e64c1476a6ce921c48cc9a1678a91dd5f8fd58", "https://bcr.bazel.build/modules/rules_python/0.4.0/MODULE.bazel": "9208ee05fd48bf09ac60ed269791cf17fb343db56c8226a720fbb1cdf467166c", "https://bcr.bazel.build/modules/rules_python/1.0.0/MODULE.bazel": "898a3d999c22caa585eb062b600f88654bf92efb204fa346fb55f6f8edffca43", - "https://bcr.bazel.build/modules/rules_python/1.2.0/MODULE.bazel": "5aeeb48b2a6c19d668b48adf2b8a2b209a6310c230db0ce77450f148a89846e4", - "https://bcr.bazel.build/modules/rules_python/1.2.0/source.json": "5b7892685c9a843526fd5a31e7d7a93eb819c59fd7b7fc444b5b143558e1b073", + "https://bcr.bazel.build/modules/rules_python/1.3.0/MODULE.bazel": "8361d57eafb67c09b75bf4bbe6be360e1b8f4f18118ab48037f2bd50aa2ccb13", + "https://bcr.bazel.build/modules/rules_python/1.3.0/source.json": "25932f917cd279c7baefa6cb1d3fa8750a7a29de522024449b19af6eab51f4a0", "https://bcr.bazel.build/modules/rules_shell/0.2.0/MODULE.bazel": "fda8a652ab3c7d8fee214de05e7a9916d8b28082234e8d2c0094505c5268ed3c", "https://bcr.bazel.build/modules/rules_shell/0.3.0/MODULE.bazel": "de4402cd12f4cc8fda2354fce179fdb068c0b9ca1ec2d2b17b3e21b24c1a937b", "https://bcr.bazel.build/modules/rules_shell/0.3.0/source.json": "c55ed591aa5009401ddf80ded9762ac32c358d2517ee7820be981e2de9756cf3", @@ -343,23 +344,6 @@ ] } }, - "@@platforms//host:extension.bzl%host_platform": { - "general": { - "bzlTransitiveDigest": "xelQcPZH8+tmuOHVjL9vDxMnnQNMlwj0SlvgoqBkm4U=", - "usagesDigest": "eKQSPbCJCzwdqDfIyJ+cheVNlVKVHmts40y1P3np7Sw=", - "recordedFileInputs": {}, - "recordedDirentsInputs": {}, - "envVariables": {}, - "generatedRepoSpecs": { - "host_platform": { - "bzlFile": "@@platforms//host:extension.bzl", - "ruleClassName": "host_platform_repo", - "attributes": {} - } - }, - "recordedRepoMappingEntries": [] - } - }, "@@pybind11_bazel~//:python_configure.bzl%extension": { "general": { "bzlTransitiveDigest": "whINYge95GgPtysKDbNHQ0ZlWYdtKybHs5y2tLF+x7Q=", @@ -581,8 +565,8 @@ }, "@@rules_python~//python/extensions:pip.bzl%pip": { "general": { - "bzlTransitiveDigest": "TMcTDxX1ukbhGz5AiHybGjPU8RVS+irg3YDEh4fIjEA=", - "usagesDigest": "hEwiPriSVVnfded102xomOZdaPdsmtoK0iJk69xb0go=", + "bzlTransitiveDigest": "oxG8ogxHEbtSCgVhCDBRrjiTlucxn15T4guZ4/etTgo=", + "usagesDigest": "lABgNFDx2B8eu1/8FW60KMkCqsChEDxlIL/ERa0nIFc=", "recordedFileInputs": { "@@rules_python~//tools/publish/requirements_linux.txt": "d576e0d8542df61396a9b38deeaa183c24135ed5e8e73bb9622f298f2671811e", "@@rules_fuzzing~//fuzzing/requirements.txt": "ab04664be026b632a0d2a2446c4f65982b7654f5b6851d2f9d399a19b7242a5b", @@ -956,28 +940,6 @@ ] } }, - "rules_python_publish_deps_311_cffi_cp311_cp311_manylinux_2_17_ppc64le_46bf4316": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64" - ], - "filename": "cffi-1.17.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "cffi==1.17.1", - "sha256": "46bf43160c1a35f7ec506d254e5c890f3c03648a4dbac12d624e4490a7046cd1", - "urls": [ - "https://files.pythonhosted.org/packages/1c/a0/a4fa9f4f781bda074c3ddd57a572b060fa0df7655d2a4247bbe277200146/cffi-1.17.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl" - ] - } - }, "rules_python_publish_deps_311_cffi_cp311_cp311_manylinux_2_17_s390x_a24ed04c": { "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", "ruleClassName": "whl_library", @@ -1192,31 +1154,6 @@ ] } }, - "rules_python_publish_deps_311_charset_normalizer_cp311_cp311_manylinux_2_17_ppc64le_ce031db0": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "charset-normalizer==3.4.0", - "sha256": "ce031db0408e487fd2775d745ce30a7cd2923667cf3b69d48d219f1d8f5ddeb6", - "urls": [ - "https://files.pythonhosted.org/packages/e2/29/d227805bff72ed6d6cb1ce08eec707f7cfbd9868044893617eb331f16295/charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl" - ] - } - }, "rules_python_publish_deps_311_charset_normalizer_cp311_cp311_manylinux_2_17_s390x_8ff4e7cd": { "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", "ruleClassName": "whl_library", @@ -1292,31 +1229,6 @@ ] } }, - "rules_python_publish_deps_311_charset_normalizer_cp311_cp311_musllinux_1_2_ppc64le_f1a2f519": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_ppc64le.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "charset-normalizer==3.4.0", - "sha256": "f1a2f519ae173b5b6a2c9d5fa3116ce16e48b3462c8b96dfdded11055e3d6365", - "urls": [ - "https://files.pythonhosted.org/packages/75/d2/0ab54463d3410709c09266dfb416d032a08f97fd7d60e94b8c6ef54ae14b/charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_ppc64le.whl" - ] - } - }, "rules_python_publish_deps_311_charset_normalizer_cp311_cp311_musllinux_1_2_s390x_63bc5c4a": { "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", "ruleClassName": "whl_library", @@ -2317,31 +2229,6 @@ ] } }, - "rules_python_publish_deps_311_nh3_cp37_abi3_manylinux_2_17_ppc64le_34c03fa7": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "nh3-0.2.18-cp37-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "nh3==0.2.18", - "sha256": "34c03fa78e328c691f982b7c03d4423bdfd7da69cd707fe572f544cf74ac23ad", - "urls": [ - "https://files.pythonhosted.org/packages/ab/a7/375afcc710dbe2d64cfbd69e31f82f3e423d43737258af01f6a56d844085/nh3-0.2.18-cp37-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl" - ] - } - }, "rules_python_publish_deps_311_nh3_cp37_abi3_manylinux_2_17_s390x_19aaba96": { "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", "ruleClassName": "whl_library", @@ -3240,8 +3127,8 @@ "whl_map": { "backports_tarfile": "{\"rules_python_publish_deps_311_backports_tarfile_py3_none_any_77e284d7\":[{\"filename\":\"backports.tarfile-1.2.0-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_backports_tarfile_sdist_d75e02c2\":[{\"filename\":\"backports_tarfile-1.2.0.tar.gz\",\"version\":\"3.11\"}]}", "certifi": "{\"rules_python_publish_deps_311_certifi_py3_none_any_922820b5\":[{\"filename\":\"certifi-2024.8.30-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_certifi_sdist_bec941d2\":[{\"filename\":\"certifi-2024.8.30.tar.gz\",\"version\":\"3.11\"}]}", - "cffi": "{\"rules_python_publish_deps_311_cffi_cp311_cp311_manylinux_2_17_aarch64_a1ed2dd2\":[{\"filename\":\"cffi-1.17.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_cffi_cp311_cp311_manylinux_2_17_ppc64le_46bf4316\":[{\"filename\":\"cffi-1.17.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_cffi_cp311_cp311_manylinux_2_17_s390x_a24ed04c\":[{\"filename\":\"cffi-1.17.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_cffi_cp311_cp311_manylinux_2_17_x86_64_610faea7\":[{\"filename\":\"cffi-1.17.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_cffi_cp311_cp311_musllinux_1_1_aarch64_a9b15d49\":[{\"filename\":\"cffi-1.17.1-cp311-cp311-musllinux_1_1_aarch64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_cffi_cp311_cp311_musllinux_1_1_x86_64_fc48c783\":[{\"filename\":\"cffi-1.17.1-cp311-cp311-musllinux_1_1_x86_64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_cffi_sdist_1c39c601\":[{\"filename\":\"cffi-1.17.1.tar.gz\",\"version\":\"3.11\"}]}", - "charset_normalizer": "{\"rules_python_publish_deps_311_charset_normalizer_cp311_cp311_macosx_10_9_universal2_0d99dd8f\":[{\"filename\":\"charset_normalizer-3.4.0-cp311-cp311-macosx_10_9_universal2.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_charset_normalizer_cp311_cp311_macosx_10_9_x86_64_c57516e5\":[{\"filename\":\"charset_normalizer-3.4.0-cp311-cp311-macosx_10_9_x86_64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_charset_normalizer_cp311_cp311_macosx_11_0_arm64_6dba5d19\":[{\"filename\":\"charset_normalizer-3.4.0-cp311-cp311-macosx_11_0_arm64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_charset_normalizer_cp311_cp311_manylinux_2_17_aarch64_bf4475b8\":[{\"filename\":\"charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_charset_normalizer_cp311_cp311_manylinux_2_17_ppc64le_ce031db0\":[{\"filename\":\"charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_charset_normalizer_cp311_cp311_manylinux_2_17_s390x_8ff4e7cd\":[{\"filename\":\"charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_charset_normalizer_cp311_cp311_manylinux_2_17_x86_64_3710a975\":[{\"filename\":\"charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_charset_normalizer_cp311_cp311_musllinux_1_2_aarch64_47334db7\":[{\"filename\":\"charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_aarch64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_charset_normalizer_cp311_cp311_musllinux_1_2_ppc64le_f1a2f519\":[{\"filename\":\"charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_ppc64le.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_charset_normalizer_cp311_cp311_musllinux_1_2_s390x_63bc5c4a\":[{\"filename\":\"charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_s390x.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_charset_normalizer_cp311_cp311_musllinux_1_2_x86_64_bcb4f8ea\":[{\"filename\":\"charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_x86_64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_charset_normalizer_cp311_cp311_win_amd64_cee4373f\":[{\"filename\":\"charset_normalizer-3.4.0-cp311-cp311-win_amd64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_charset_normalizer_py3_none_any_fe9f97fe\":[{\"filename\":\"charset_normalizer-3.4.0-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_charset_normalizer_sdist_223217c3\":[{\"filename\":\"charset_normalizer-3.4.0.tar.gz\",\"version\":\"3.11\"}]}", + "cffi": "{\"rules_python_publish_deps_311_cffi_cp311_cp311_manylinux_2_17_aarch64_a1ed2dd2\":[{\"filename\":\"cffi-1.17.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_cffi_cp311_cp311_manylinux_2_17_s390x_a24ed04c\":[{\"filename\":\"cffi-1.17.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_cffi_cp311_cp311_manylinux_2_17_x86_64_610faea7\":[{\"filename\":\"cffi-1.17.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_cffi_cp311_cp311_musllinux_1_1_aarch64_a9b15d49\":[{\"filename\":\"cffi-1.17.1-cp311-cp311-musllinux_1_1_aarch64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_cffi_cp311_cp311_musllinux_1_1_x86_64_fc48c783\":[{\"filename\":\"cffi-1.17.1-cp311-cp311-musllinux_1_1_x86_64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_cffi_sdist_1c39c601\":[{\"filename\":\"cffi-1.17.1.tar.gz\",\"version\":\"3.11\"}]}", + "charset_normalizer": "{\"rules_python_publish_deps_311_charset_normalizer_cp311_cp311_macosx_10_9_universal2_0d99dd8f\":[{\"filename\":\"charset_normalizer-3.4.0-cp311-cp311-macosx_10_9_universal2.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_charset_normalizer_cp311_cp311_macosx_10_9_x86_64_c57516e5\":[{\"filename\":\"charset_normalizer-3.4.0-cp311-cp311-macosx_10_9_x86_64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_charset_normalizer_cp311_cp311_macosx_11_0_arm64_6dba5d19\":[{\"filename\":\"charset_normalizer-3.4.0-cp311-cp311-macosx_11_0_arm64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_charset_normalizer_cp311_cp311_manylinux_2_17_aarch64_bf4475b8\":[{\"filename\":\"charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_charset_normalizer_cp311_cp311_manylinux_2_17_s390x_8ff4e7cd\":[{\"filename\":\"charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_charset_normalizer_cp311_cp311_manylinux_2_17_x86_64_3710a975\":[{\"filename\":\"charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_charset_normalizer_cp311_cp311_musllinux_1_2_aarch64_47334db7\":[{\"filename\":\"charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_aarch64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_charset_normalizer_cp311_cp311_musllinux_1_2_s390x_63bc5c4a\":[{\"filename\":\"charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_s390x.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_charset_normalizer_cp311_cp311_musllinux_1_2_x86_64_bcb4f8ea\":[{\"filename\":\"charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_x86_64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_charset_normalizer_cp311_cp311_win_amd64_cee4373f\":[{\"filename\":\"charset_normalizer-3.4.0-cp311-cp311-win_amd64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_charset_normalizer_py3_none_any_fe9f97fe\":[{\"filename\":\"charset_normalizer-3.4.0-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_charset_normalizer_sdist_223217c3\":[{\"filename\":\"charset_normalizer-3.4.0.tar.gz\",\"version\":\"3.11\"}]}", "cryptography": "{\"rules_python_publish_deps_311_cryptography_cp39_abi3_manylinux_2_17_aarch64_846da004\":[{\"filename\":\"cryptography-43.0.3-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_cryptography_cp39_abi3_manylinux_2_17_x86_64_0f996e72\":[{\"filename\":\"cryptography-43.0.3-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_cryptography_cp39_abi3_manylinux_2_28_aarch64_f7b178f1\":[{\"filename\":\"cryptography-43.0.3-cp39-abi3-manylinux_2_28_aarch64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_cryptography_cp39_abi3_manylinux_2_28_x86_64_c2e6fc39\":[{\"filename\":\"cryptography-43.0.3-cp39-abi3-manylinux_2_28_x86_64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_cryptography_cp39_abi3_musllinux_1_2_aarch64_e1be4655\":[{\"filename\":\"cryptography-43.0.3-cp39-abi3-musllinux_1_2_aarch64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_cryptography_cp39_abi3_musllinux_1_2_x86_64_df6b6c6d\":[{\"filename\":\"cryptography-43.0.3-cp39-abi3-musllinux_1_2_x86_64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_cryptography_sdist_315b9001\":[{\"filename\":\"cryptography-43.0.3.tar.gz\",\"version\":\"3.11\"}]}", "docutils": "{\"rules_python_publish_deps_311_docutils_py3_none_any_dafca5b9\":[{\"filename\":\"docutils-0.21.2-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_docutils_sdist_3a6b1873\":[{\"filename\":\"docutils-0.21.2.tar.gz\",\"version\":\"3.11\"}]}", "idna": "{\"rules_python_publish_deps_311_idna_py3_none_any_946d195a\":[{\"filename\":\"idna-3.10-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_idna_sdist_12f65c9b\":[{\"filename\":\"idna-3.10.tar.gz\",\"version\":\"3.11\"}]}", @@ -3254,7 +3141,7 @@ "markdown_it_py": "{\"rules_python_publish_deps_311_markdown_it_py_py3_none_any_35521684\":[{\"filename\":\"markdown_it_py-3.0.0-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_markdown_it_py_sdist_e3f60a94\":[{\"filename\":\"markdown-it-py-3.0.0.tar.gz\",\"version\":\"3.11\"}]}", "mdurl": "{\"rules_python_publish_deps_311_mdurl_py3_none_any_84008a41\":[{\"filename\":\"mdurl-0.1.2-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_mdurl_sdist_bb413d29\":[{\"filename\":\"mdurl-0.1.2.tar.gz\",\"version\":\"3.11\"}]}", "more_itertools": "{\"rules_python_publish_deps_311_more_itertools_py3_none_any_037b0d32\":[{\"filename\":\"more_itertools-10.5.0-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_more_itertools_sdist_5482bfef\":[{\"filename\":\"more-itertools-10.5.0.tar.gz\",\"version\":\"3.11\"}]}", - "nh3": "{\"rules_python_publish_deps_311_nh3_cp37_abi3_macosx_10_12_x86_64_14c5a72e\":[{\"filename\":\"nh3-0.2.18-cp37-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_nh3_cp37_abi3_macosx_10_12_x86_64_7b7c2a3c\":[{\"filename\":\"nh3-0.2.18-cp37-abi3-macosx_10_12_x86_64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_nh3_cp37_abi3_manylinux_2_17_aarch64_42c64511\":[{\"filename\":\"nh3-0.2.18-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_nh3_cp37_abi3_manylinux_2_17_armv7l_0411beb0\":[{\"filename\":\"nh3-0.2.18-cp37-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_nh3_cp37_abi3_manylinux_2_17_ppc64_5f36b271\":[{\"filename\":\"nh3-0.2.18-cp37-abi3-manylinux_2_17_ppc64.manylinux2014_ppc64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_nh3_cp37_abi3_manylinux_2_17_ppc64le_34c03fa7\":[{\"filename\":\"nh3-0.2.18-cp37-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_nh3_cp37_abi3_manylinux_2_17_s390x_19aaba96\":[{\"filename\":\"nh3-0.2.18-cp37-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_nh3_cp37_abi3_manylinux_2_17_x86_64_de3ceed6\":[{\"filename\":\"nh3-0.2.18-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_nh3_cp37_abi3_musllinux_1_2_aarch64_f0eca9ca\":[{\"filename\":\"nh3-0.2.18-cp37-abi3-musllinux_1_2_aarch64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_nh3_cp37_abi3_musllinux_1_2_armv7l_3a157ab1\":[{\"filename\":\"nh3-0.2.18-cp37-abi3-musllinux_1_2_armv7l.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_nh3_cp37_abi3_musllinux_1_2_x86_64_36c95d4b\":[{\"filename\":\"nh3-0.2.18-cp37-abi3-musllinux_1_2_x86_64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_nh3_cp37_abi3_win_amd64_8ce0f819\":[{\"filename\":\"nh3-0.2.18-cp37-abi3-win_amd64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_nh3_sdist_94a16692\":[{\"filename\":\"nh3-0.2.18.tar.gz\",\"version\":\"3.11\"}]}", + "nh3": "{\"rules_python_publish_deps_311_nh3_cp37_abi3_macosx_10_12_x86_64_14c5a72e\":[{\"filename\":\"nh3-0.2.18-cp37-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_nh3_cp37_abi3_macosx_10_12_x86_64_7b7c2a3c\":[{\"filename\":\"nh3-0.2.18-cp37-abi3-macosx_10_12_x86_64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_nh3_cp37_abi3_manylinux_2_17_aarch64_42c64511\":[{\"filename\":\"nh3-0.2.18-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_nh3_cp37_abi3_manylinux_2_17_armv7l_0411beb0\":[{\"filename\":\"nh3-0.2.18-cp37-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_nh3_cp37_abi3_manylinux_2_17_ppc64_5f36b271\":[{\"filename\":\"nh3-0.2.18-cp37-abi3-manylinux_2_17_ppc64.manylinux2014_ppc64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_nh3_cp37_abi3_manylinux_2_17_s390x_19aaba96\":[{\"filename\":\"nh3-0.2.18-cp37-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_nh3_cp37_abi3_manylinux_2_17_x86_64_de3ceed6\":[{\"filename\":\"nh3-0.2.18-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_nh3_cp37_abi3_musllinux_1_2_aarch64_f0eca9ca\":[{\"filename\":\"nh3-0.2.18-cp37-abi3-musllinux_1_2_aarch64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_nh3_cp37_abi3_musllinux_1_2_armv7l_3a157ab1\":[{\"filename\":\"nh3-0.2.18-cp37-abi3-musllinux_1_2_armv7l.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_nh3_cp37_abi3_musllinux_1_2_x86_64_36c95d4b\":[{\"filename\":\"nh3-0.2.18-cp37-abi3-musllinux_1_2_x86_64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_nh3_cp37_abi3_win_amd64_8ce0f819\":[{\"filename\":\"nh3-0.2.18-cp37-abi3-win_amd64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_nh3_sdist_94a16692\":[{\"filename\":\"nh3-0.2.18.tar.gz\",\"version\":\"3.11\"}]}", "pkginfo": "{\"rules_python_publish_deps_311_pkginfo_py3_none_any_889a6da2\":[{\"filename\":\"pkginfo-1.10.0-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_pkginfo_sdist_5df73835\":[{\"filename\":\"pkginfo-1.10.0.tar.gz\",\"version\":\"3.11\"}]}", "pycparser": "{\"rules_python_publish_deps_311_pycparser_py3_none_any_c3702b6d\":[{\"filename\":\"pycparser-2.22-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_pycparser_sdist_491c8be9\":[{\"filename\":\"pycparser-2.22.tar.gz\",\"version\":\"3.11\"}]}", "pygments": "{\"rules_python_publish_deps_311_pygments_py3_none_any_b8e6aca0\":[{\"filename\":\"pygments-2.18.0-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_pygments_sdist_786ff802\":[{\"filename\":\"pygments-2.18.0.tar.gz\",\"version\":\"3.11\"}]}", @@ -3436,6 +3323,37 @@ ] ] } + }, + "@@rules_python~//python/uv:uv.bzl%uv": { + "general": { + "bzlTransitiveDigest": "Xpqjnjzy6zZ90Es9Wa888ZLHhn7IsNGbph/e6qoxzw8=", + "usagesDigest": "qI5PVlIum/YAnGJg5oXGHzDkMFWt2aNSUZY4G8PBbic=", + "recordedFileInputs": {}, + "recordedDirentsInputs": {}, + "envVariables": {}, + "generatedRepoSpecs": { + "uv": { + "bzlFile": "@@rules_python~//python/uv/private:uv_toolchains_repo.bzl", + "ruleClassName": "uv_toolchains_repo", + "attributes": { + "toolchain_type": "'@@rules_python~//python/uv:uv_toolchain_type'", + "toolchain_names": [ + "none" + ], + "toolchain_implementations": { + "none": "'@@rules_python~//python:none'" + }, + "toolchain_compatible_with": { + "none": [ + "@platforms//:incompatible" + ] + }, + "toolchain_target_settings": {} + } + } + }, + "recordedRepoMappingEntries": [] + } } } } From 810c8448d9ad9d860de615c01ceab4c0fa5105a7 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 1 Apr 2025 10:40:11 +0200 Subject: [PATCH 185/311] deps: update fedora:40 Docker digest to 3c86d25 (#3722) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- debugd/filebeat/Dockerfile | 2 +- debugd/logstash/Dockerfile | 4 ++-- debugd/metricbeat/Dockerfile | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/debugd/filebeat/Dockerfile b/debugd/filebeat/Dockerfile index 2aa6f6b4c..f5badcf9a 100644 --- a/debugd/filebeat/Dockerfile +++ b/debugd/filebeat/Dockerfile @@ -1,4 +1,4 @@ -FROM fedora:40@sha256:7cdd2b48396929bb8723ea2fa60e03bee39cc22e2a853cbd891587fab4eb1bc9 AS release +FROM fedora:40@sha256:3c86d25fef9d2001712bc3d9b091fc40cf04be4767e48f1aa3b785bf58d300ed AS release RUN dnf install -y https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-8.6.2-x86_64.rpm diff --git a/debugd/logstash/Dockerfile b/debugd/logstash/Dockerfile index e0db1695a..8d538596a 100644 --- a/debugd/logstash/Dockerfile +++ b/debugd/logstash/Dockerfile @@ -1,11 +1,11 @@ -FROM fedora:40@sha256:7cdd2b48396929bb8723ea2fa60e03bee39cc22e2a853cbd891587fab4eb1bc9 AS build +FROM fedora:40@sha256:3c86d25fef9d2001712bc3d9b091fc40cf04be4767e48f1aa3b785bf58d300ed AS build ARG LOGSTASH_VER=8.6.1 RUN curl -fsSLO https://artifacts.opensearch.org/logstash/logstash-oss-with-opensearch-output-plugin-$LOGSTASH_VER-linux-x64.tar.gz RUN tar -zxvf logstash-oss-with-opensearch-output-plugin-$LOGSTASH_VER-linux-x64.tar.gz -FROM fedora:40@sha256:7cdd2b48396929bb8723ea2fa60e03bee39cc22e2a853cbd891587fab4eb1bc9 AS release +FROM fedora:40@sha256:3c86d25fef9d2001712bc3d9b091fc40cf04be4767e48f1aa3b785bf58d300ed AS release COPY --from=build logstash-* /usr/share/logstash diff --git a/debugd/metricbeat/Dockerfile b/debugd/metricbeat/Dockerfile index 108882355..11694af43 100644 --- a/debugd/metricbeat/Dockerfile +++ b/debugd/metricbeat/Dockerfile @@ -1,4 +1,4 @@ -FROM fedora:40@sha256:7cdd2b48396929bb8723ea2fa60e03bee39cc22e2a853cbd891587fab4eb1bc9 AS release +FROM fedora:40@sha256:3c86d25fef9d2001712bc3d9b091fc40cf04be4767e48f1aa3b785bf58d300ed AS release RUN dnf install -y https://artifacts.elastic.co/downloads/beats/metricbeat/metricbeat-8.9.2-x86_64.rpm From 700eb60614f4ac941708f00e8b31e938bea7c1af Mon Sep 17 00:00:00 2001 From: edgelessci <71088502+edgelessci@users.noreply.github.com> Date: Tue, 1 Apr 2025 10:52:26 +0200 Subject: [PATCH 186/311] Post v2.22.0 release updates to main (#3717) * docs: release 2.22 * chore: update version.txt to v2.23.0-pre * chore: update CI for v2.22.0 --------- Co-authored-by: edgelessci --- .github/workflows/e2e-test-release.yml | 2 +- .github/workflows/e2e-test-weekly.yml | 2 +- .../_media/SLSA-Badge-full-level3.svg | 47 + .../_media/benchmark_fio_azure_bw.png | Bin 0 -> 30975 bytes .../_media/benchmark_fio_azure_iops.png | Bin 0 -> 29702 bytes .../_media/benchmark_fio_gcp_bw.png | Bin 0 -> 30401 bytes .../_media/benchmark_fio_gcp_iops.png | Bin 0 -> 30221 bytes .../_media/benchmark_net_p2p_azure.png | Bin 0 -> 36902 bytes .../_media/benchmark_net_p2p_gcp.png | Bin 0 -> 36961 bytes .../_media/benchmark_net_p2svc_azure.png | Bin 0 -> 38309 bytes .../_media/benchmark_net_p2svc_gcp.png | Bin 0 -> 38395 bytes .../benchmark_vault/5replicas/max_latency.png | Bin 0 -> 21327 bytes .../5replicas/mean_latency.png | Bin 0 -> 18809 bytes .../benchmark_vault/5replicas/min_latency.png | Bin 0 -> 21414 bytes .../benchmark_vault/5replicas/p99_latency.png | Bin 0 -> 24062 bytes .../_media/concept-constellation.svg | 460 +++++++++ .../version-2.22/_media/concept-managed.svg | 591 ++++++++++++ .../_media/constellation_oneline.svg | 52 ++ .../version-2.22/_media/example-emojivoto.jpg | Bin 0 -> 141236 bytes .../_media/example-online-boutique.jpg | Bin 0 -> 263458 bytes .../recovery-gcp-serial-console-link.png | Bin 0 -> 46134 bytes .../version-2.22/_media/tcb.svg | 535 +++++++++++ .../version-2.22/architecture/attestation.md | 409 ++++++++ .../architecture/encrypted-storage.md | 62 ++ .../version-2.22/architecture/images.md | 49 + .../version-2.22/architecture/keys.md | 130 +++ .../architecture/microservices.md | 73 ++ .../version-2.22/architecture/networking.md | 22 + .../architecture/observability.md | 74 ++ .../architecture/orchestration.md | 83 ++ .../version-2.22/architecture/overview.md | 30 + .../version-2.22/architecture/versions.md | 21 + .../version-2.22/getting-started/examples.md | 6 + .../getting-started/examples/emojivoto.md | 22 + .../examples/filestash-s3proxy.md | 107 +++ .../examples/horizontal-scaling.md | 98 ++ .../examples/online-boutique.md | 29 + .../getting-started/first-steps-local.md | 277 ++++++ .../getting-started/first-steps.md | 235 +++++ .../version-2.22/getting-started/install.md | 442 +++++++++ .../getting-started/marketplaces.md | 56 ++ docs/versioned_docs/version-2.22/intro.md | 34 + .../version-2.22/overview/clouds.md | 66 ++ .../overview/confidential-kubernetes.md | 42 + .../version-2.22/overview/license.md | 33 + .../overview/performance/application.md | 102 ++ .../overview/performance/compute.md | 11 + .../version-2.22/overview/performance/io.md | 204 ++++ .../overview/performance/performance.md | 17 + .../version-2.22/overview/product.md | 12 + .../overview/security-benefits.md | 22 + .../version-2.22/reference/cli.md | 873 ++++++++++++++++++ .../version-2.22/reference/migration.md | 134 +++ .../version-2.22/reference/slsa.md | 73 ++ .../version-2.22/reference/terraform.md | 37 + .../version-2.22/workflows/cert-manager.md | 13 + .../version-2.22/workflows/config.md | 353 +++++++ .../version-2.22/workflows/create.md | 93 ++ .../version-2.22/workflows/lb.md | 28 + .../version-2.22/workflows/recovery.md | 179 ++++ .../workflows/reproducible-builds.md | 63 ++ .../version-2.22/workflows/s3proxy.md | 58 ++ .../version-2.22/workflows/sbom.md | 93 ++ .../version-2.22/workflows/scale.md | 122 +++ .../version-2.22/workflows/storage.md | 281 ++++++ .../version-2.22/workflows/terminate.md | 60 ++ .../workflows/terraform-provider.md | 140 +++ .../version-2.22/workflows/troubleshooting.md | 200 ++++ .../version-2.22/workflows/trusted-launch.md | 54 ++ .../version-2.22/workflows/upgrade.md | 110 +++ .../version-2.22/workflows/verify-cli.md | 129 +++ .../version-2.22/workflows/verify-cluster.md | 97 ++ .../version-2.22-sidebars.json | 304 ++++++ docs/versions.json | 1 + version.txt | 2 +- 75 files changed, 7951 insertions(+), 3 deletions(-) create mode 100644 docs/versioned_docs/version-2.22/_media/SLSA-Badge-full-level3.svg create mode 100644 docs/versioned_docs/version-2.22/_media/benchmark_fio_azure_bw.png create mode 100644 docs/versioned_docs/version-2.22/_media/benchmark_fio_azure_iops.png create mode 100644 docs/versioned_docs/version-2.22/_media/benchmark_fio_gcp_bw.png create mode 100644 docs/versioned_docs/version-2.22/_media/benchmark_fio_gcp_iops.png create mode 100644 docs/versioned_docs/version-2.22/_media/benchmark_net_p2p_azure.png create mode 100644 docs/versioned_docs/version-2.22/_media/benchmark_net_p2p_gcp.png create mode 100644 docs/versioned_docs/version-2.22/_media/benchmark_net_p2svc_azure.png create mode 100644 docs/versioned_docs/version-2.22/_media/benchmark_net_p2svc_gcp.png create mode 100644 docs/versioned_docs/version-2.22/_media/benchmark_vault/5replicas/max_latency.png create mode 100644 docs/versioned_docs/version-2.22/_media/benchmark_vault/5replicas/mean_latency.png create mode 100644 docs/versioned_docs/version-2.22/_media/benchmark_vault/5replicas/min_latency.png create mode 100644 docs/versioned_docs/version-2.22/_media/benchmark_vault/5replicas/p99_latency.png create mode 100644 docs/versioned_docs/version-2.22/_media/concept-constellation.svg create mode 100644 docs/versioned_docs/version-2.22/_media/concept-managed.svg create mode 100644 docs/versioned_docs/version-2.22/_media/constellation_oneline.svg create mode 100644 docs/versioned_docs/version-2.22/_media/example-emojivoto.jpg create mode 100644 docs/versioned_docs/version-2.22/_media/example-online-boutique.jpg create mode 100644 docs/versioned_docs/version-2.22/_media/recovery-gcp-serial-console-link.png create mode 100644 docs/versioned_docs/version-2.22/_media/tcb.svg create mode 100644 docs/versioned_docs/version-2.22/architecture/attestation.md create mode 100644 docs/versioned_docs/version-2.22/architecture/encrypted-storage.md create mode 100644 docs/versioned_docs/version-2.22/architecture/images.md create mode 100644 docs/versioned_docs/version-2.22/architecture/keys.md create mode 100644 docs/versioned_docs/version-2.22/architecture/microservices.md create mode 100644 docs/versioned_docs/version-2.22/architecture/networking.md create mode 100644 docs/versioned_docs/version-2.22/architecture/observability.md create mode 100644 docs/versioned_docs/version-2.22/architecture/orchestration.md create mode 100644 docs/versioned_docs/version-2.22/architecture/overview.md create mode 100644 docs/versioned_docs/version-2.22/architecture/versions.md create mode 100644 docs/versioned_docs/version-2.22/getting-started/examples.md create mode 100644 docs/versioned_docs/version-2.22/getting-started/examples/emojivoto.md create mode 100644 docs/versioned_docs/version-2.22/getting-started/examples/filestash-s3proxy.md create mode 100644 docs/versioned_docs/version-2.22/getting-started/examples/horizontal-scaling.md create mode 100644 docs/versioned_docs/version-2.22/getting-started/examples/online-boutique.md create mode 100644 docs/versioned_docs/version-2.22/getting-started/first-steps-local.md create mode 100644 docs/versioned_docs/version-2.22/getting-started/first-steps.md create mode 100644 docs/versioned_docs/version-2.22/getting-started/install.md create mode 100644 docs/versioned_docs/version-2.22/getting-started/marketplaces.md create mode 100644 docs/versioned_docs/version-2.22/intro.md create mode 100644 docs/versioned_docs/version-2.22/overview/clouds.md create mode 100644 docs/versioned_docs/version-2.22/overview/confidential-kubernetes.md create mode 100644 docs/versioned_docs/version-2.22/overview/license.md create mode 100644 docs/versioned_docs/version-2.22/overview/performance/application.md create mode 100644 docs/versioned_docs/version-2.22/overview/performance/compute.md create mode 100644 docs/versioned_docs/version-2.22/overview/performance/io.md create mode 100644 docs/versioned_docs/version-2.22/overview/performance/performance.md create mode 100644 docs/versioned_docs/version-2.22/overview/product.md create mode 100644 docs/versioned_docs/version-2.22/overview/security-benefits.md create mode 100644 docs/versioned_docs/version-2.22/reference/cli.md create mode 100644 docs/versioned_docs/version-2.22/reference/migration.md create mode 100644 docs/versioned_docs/version-2.22/reference/slsa.md create mode 100644 docs/versioned_docs/version-2.22/reference/terraform.md create mode 100644 docs/versioned_docs/version-2.22/workflows/cert-manager.md create mode 100644 docs/versioned_docs/version-2.22/workflows/config.md create mode 100644 docs/versioned_docs/version-2.22/workflows/create.md create mode 100644 docs/versioned_docs/version-2.22/workflows/lb.md create mode 100644 docs/versioned_docs/version-2.22/workflows/recovery.md create mode 100644 docs/versioned_docs/version-2.22/workflows/reproducible-builds.md create mode 100644 docs/versioned_docs/version-2.22/workflows/s3proxy.md create mode 100644 docs/versioned_docs/version-2.22/workflows/sbom.md create mode 100644 docs/versioned_docs/version-2.22/workflows/scale.md create mode 100644 docs/versioned_docs/version-2.22/workflows/storage.md create mode 100644 docs/versioned_docs/version-2.22/workflows/terminate.md create mode 100644 docs/versioned_docs/version-2.22/workflows/terraform-provider.md create mode 100644 docs/versioned_docs/version-2.22/workflows/troubleshooting.md create mode 100644 docs/versioned_docs/version-2.22/workflows/trusted-launch.md create mode 100644 docs/versioned_docs/version-2.22/workflows/upgrade.md create mode 100644 docs/versioned_docs/version-2.22/workflows/verify-cli.md create mode 100644 docs/versioned_docs/version-2.22/workflows/verify-cluster.md create mode 100644 docs/versioned_sidebars/version-2.22-sidebars.json diff --git a/.github/workflows/e2e-test-release.yml b/.github/workflows/e2e-test-release.yml index a3c9d25ab..2d7287014 100644 --- a/.github/workflows/e2e-test-release.yml +++ b/.github/workflows/e2e-test-release.yml @@ -409,7 +409,7 @@ jobs: fail-fast: false max-parallel: 1 matrix: - fromVersion: ["v2.21.1"] + fromVersion: ["v2.22.0"] attestationVariant: ["gcp-sev-snp", "azure-sev-snp", "azure-tdx", "aws-sev-snp"] name: Run upgrade tests secrets: inherit diff --git a/.github/workflows/e2e-test-weekly.yml b/.github/workflows/e2e-test-weekly.yml index ea5832bfb..906fc4eaa 100644 --- a/.github/workflows/e2e-test-weekly.yml +++ b/.github/workflows/e2e-test-weekly.yml @@ -446,7 +446,7 @@ jobs: fail-fast: false max-parallel: 1 matrix: - fromVersion: ["v2.21.1"] + fromVersion: ["v2.22.0"] attestationVariant: ["gcp-sev-snp", "azure-sev-snp", "azure-tdx", "aws-sev-snp"] name: Run upgrade tests secrets: inherit diff --git a/docs/versioned_docs/version-2.22/_media/SLSA-Badge-full-level3.svg b/docs/versioned_docs/version-2.22/_media/SLSA-Badge-full-level3.svg new file mode 100644 index 000000000..7154d4a13 --- /dev/null +++ b/docs/versioned_docs/version-2.22/_media/SLSA-Badge-full-level3.svg @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/versioned_docs/version-2.22/_media/benchmark_fio_azure_bw.png b/docs/versioned_docs/version-2.22/_media/benchmark_fio_azure_bw.png new file mode 100644 index 0000000000000000000000000000000000000000..a82ebe2d0511dc0a54f663e23c25dc275edaa15c GIT binary patch literal 30975 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�awQ>N&Uf?MYaB0>911Z$XQDz2h_WnZ`HC#RNE z!^--ER8y`idG#DJ^S*`AQZ)A?B2TZ|+U9cym9>-1W^uOW7)R$)K(^14rJp}O1A@Q{ zrD^>B&i3~9ZwxdFrH58lL-w19_n8aC@{_8<#c;ask%ydW%RddczL*aLqkmYN)lE0BH1lmwgU=85$AaQkE| z$SA!pvu{qynrTubh)%=0x;k&Y^)UO=M~e#%SZ((lWO%{q7xTG2qf>|%t@mm~3CN3^ zB;*8ARS=rkK2EE0e&mQyn6ScOm$F^=^?VT&0`)6)?tZ`SpR&h}CF@FdK|>%7xxfiU zx5%czMh3VW2Z$hyW>-x#Aym}S^GjXH)v>N=xpAZIluKVZBI9qG{dRv4lav6lq#;*& zJE5OSoklEO$qBIcmXjfQ;lZ_;sps*hk_p!0mCbP>Q7K(j3Qx&-mLWjRC1eVu8h+zk zgZHp3-edegsM#yW8p;yYBy5|tp7!>c4w~&DSGKS1X}gxuCpY@tcH^hx3qCUN!^4So z?GFP~x3WJzytc*eJMau)MpDwF(lonTEnJuREW26S`p$-zQk+tF9zF6OpItsBhB{*z z?QPYRo+D@ClT1tMUhQXPzZFTzns2`zK69c;0XYg0(_9V(H_;M$4~?EsytW(_KoWp# z@t^?#7qfr*G#4*qBsS`-B}M%=gOG4FRcVtKr&Q)3PRV9QL2RtaK{s<=!FKN7Z=;9l zX->H9b`ZpGFaCGo?JMr35xAw5R&ULgGSc1Y(e68OOQCn2#utg za)wNd_o&;{JHoSw33ThbI|FvL-R)PN;W5NKg{r|22tSQPGc>+a*51m$t+;1T;iL2z zq^+9MCO}T9&0Mpbbq*8n*5=I5xXC)GO0Y8qU!hWnAK)8%KXQT!%Cf|(fs68<&3e|# z^ZAZ@*aDUsvn_?2_M<*w{91**85E)G@70ePN7BSCmMOQGabyl|9@%dJV=my!%^~JS zmRX18${kV#puUvvWjLO|^X0nv0VMXc(1Q8Z$ie@dotLr`j8no=EmIAwyLI|n|IjZ^ zzKRH*%eHNF?-Nglh{%W;-s*IpYp3x#M>B3EZ-SY=g&=9A%^!YYKQ--4?Nz(joabN9 z&n_bS400Dfz{t&$k%?V+QoJZLVDy!YPx0mnEs3o5*AYWn&FeII`v5mBz<&x38|JOx|aQ$U5bqOUiL;=5ol9X+z3G8-vhVV*gk&# z1U?59UF0}`A61SBVG4&ZJa}-I(`iL;3cKJk^a@48$xyK3+BbLW`V@eoy|u8Qw&}&- z&o7ZL5L|a+wsPvFgkAP8^8-z@)NKMC9A2t%obtcO8>`RH=M@&Z0X4?}1)X!x(tz9G|N6yzoOpFvTL73im?9OqLZVg3 z@6NqZ_ZuafRZ`(tXnC0gHwn3t(!~!uRBX)(Z}LaB0gV%|~fZl?QN@Yvb!b6~j$m8;wv(vZV&0mlS7;Zx- zm*TA1E_9!Yej>Wc=K4A%5K2Ib@qEkVN`#-F(U1IsFuS0dScV zKA@LX(bFloizcx~b@r&M1GP|A4;{4vRy|JyT5VV|@xK~ooxJ+*|3@YNZ$h`er&n&p Wd&#xuzHQJ)b^FlcgN%ubHvR|v6RGR~ literal 0 HcmV?d00001 diff --git a/docs/versioned_docs/version-2.22/_media/benchmark_fio_azure_iops.png b/docs/versioned_docs/version-2.22/_media/benchmark_fio_azure_iops.png new file mode 100644 index 0000000000000000000000000000000000000000..1723257a812a773fea286d512d38ed9186a9a46e GIT binary patch literal 29702 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 literal 0 HcmV?d00001 diff --git a/docs/versioned_docs/version-2.22/_media/benchmark_fio_gcp_bw.png b/docs/versioned_docs/version-2.22/_media/benchmark_fio_gcp_bw.png new file mode 100644 index 0000000000000000000000000000000000000000..4f0ecc94bb43d5f9534300605a74aca374da4c3c GIT binary patch literal 30401 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 literal 0 HcmV?d00001 diff --git a/docs/versioned_docs/version-2.22/_media/benchmark_net_p2p_azure.png b/docs/versioned_docs/version-2.22/_media/benchmark_net_p2p_azure.png new file mode 100644 index 0000000000000000000000000000000000000000..9130349c764286e66108a54ffa77a2079807a57b GIT binary patch literal 36902 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 RMnD*58gDV~*w6Df{tphRb0+`* literal 0 HcmV?d00001 diff --git a/docs/versioned_docs/version-2.22/_media/benchmark_net_p2p_gcp.png b/docs/versioned_docs/version-2.22/_media/benchmark_net_p2p_gcp.png new file mode 100644 index 0000000000000000000000000000000000000000..a41557e96c15e5407beadc5011a3f3fa6aaaa71d GIT binary patch literal 36961 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 w{l|Gl!_|L&u}A+)itsPO`I2 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 Z{Ipv;Zm&N^7q&v795sIAG0R!&{{`ycGXVeq literal 0 HcmV?d00001 diff --git a/docs/versioned_docs/version-2.22/_media/benchmark_net_p2svc_gcp.png b/docs/versioned_docs/version-2.22/_media/benchmark_net_p2svc_gcp.png new file mode 100644 index 0000000000000000000000000000000000000000..55916a1de91094b18b3d47c50fc5f5900adfe9a3 GIT binary patch literal 38395 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
        xlH_*x9qK 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 VZqJAB#@`TUPAZ?sk~8rCe*osmgx literal 0 HcmV?d00001 diff --git a/docs/versioned_docs/version-2.22/_media/benchmark_vault/5replicas/p99_latency.png b/docs/versioned_docs/version-2.22/_media/benchmark_vault/5replicas/p99_latency.png new file mode 100644 index 0000000000000000000000000000000000000000..0190118b22f8ea7dbfc862067b06a47bd6ce0d42 GIT binary patch literal 24062 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 + diff --git a/docs/versioned_docs/version-2.22/_media/concept-managed.svg b/docs/versioned_docs/version-2.22/_media/concept-managed.svg new file mode 100644 index 000000000..5645a608f --- /dev/null +++ b/docs/versioned_docs/version-2.22/_media/concept-managed.svg @@ -0,0 +1,591 @@ + + diff --git a/docs/versioned_docs/version-2.22/_media/constellation_oneline.svg b/docs/versioned_docs/version-2.22/_media/constellation_oneline.svg new file mode 100644 index 000000000..4e354958a --- /dev/null +++ b/docs/versioned_docs/version-2.22/_media/constellation_oneline.svg @@ -0,0 +1,52 @@ + + + + + + + + diff --git a/docs/versioned_docs/version-2.22/_media/example-emojivoto.jpg b/docs/versioned_docs/version-2.22/_media/example-emojivoto.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4be0d5b26dc70a6fb99a5105c234e6d7ab51a213 GIT binary patch literal 141236 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 K-*lqjT literal 0 HcmV?d00001 diff --git a/docs/versioned_docs/version-2.22/_media/recovery-gcp-serial-console-link.png b/docs/versioned_docs/version-2.22/_media/recovery-gcp-serial-console-link.png new file mode 100644 index 0000000000000000000000000000000000000000..eb67f0e99985804d9f258a4bc74d42dfabf0d4a0 GIT binary patch literal 46134 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 fzhzeZch178eTiYWYbMif0YhC`N2%(mP2~Rqh literal 0 HcmV?d00001 diff --git a/docs/versioned_docs/version-2.22/_media/tcb.svg b/docs/versioned_docs/version-2.22/_media/tcb.svg new file mode 100644 index 000000000..e5bcb5b95 --- /dev/null +++ b/docs/versioned_docs/version-2.22/_media/tcb.svg @@ -0,0 +1,535 @@ + + diff --git a/docs/versioned_docs/version-2.22/architecture/attestation.md b/docs/versioned_docs/version-2.22/architecture/attestation.md new file mode 100644 index 000000000..9bd157460 --- /dev/null +++ b/docs/versioned_docs/version-2.22/architecture/attestation.md @@ -0,0 +1,409 @@ +# Attestation + +This page explains Constellation's attestation process and highlights the cornerstones of its trust model. + +## Terms + +The following lists terms and concepts that help to understand the attestation concept of Constellation. + +### Trusted Platform Module (TPM) + +A TPM chip is a dedicated tamper-resistant crypto-processor. +It can securely store artifacts such as passwords, certificates, encryption keys, or *runtime measurements* (more on this below). +When a TPM is implemented in software, it's typically called a *virtual* TPM (vTPM). + +### Runtime measurement + +A runtime measurement is a cryptographic hash of the memory pages of a so called *runtime component*. Runtime components of interest typically include a system's bootloader or OS kernel. + +### Platform Configuration Register (PCR) + +A Platform Configuration Register (PCR) is a memory location in the TPM that has some unique properties. +To store a new value in a PCR, the existing value is extended with a new value as follows: + +``` +PCR[N] = HASHalg( PCR[N] || ArgumentOfExtend ) +``` + +The PCRs are typically used to store runtime measurements. +The new value of a PCR is always an extension of the existing value. +Thus, storing the measurements of multiple components into the same PCR irreversibly links them together. + +### Measured boot + +Measured boot builds on the concept of chained runtime measurements. +Each component in the boot chain loads and measures the next component into the PCR before executing it. +By comparing the resulting PCR values against trusted reference values, the integrity of the entire boot chain and thereby the running system can be ensured. + +### Remote attestation (RA) + +Remote attestation is the process of verifying certain properties of an application or platform, such as integrity and confidentiality, from a remote location. +In the case of a measured boot, the goal is to obtain a signed attestation statement on the PCR values of the boot measurements. +The statement can then be verified and compared to a set of trusted reference values. +This way, the integrity of the platform can be ensured before sharing secrets with it. + +### Confidential virtual machine (CVM) + +Confidential computing (CC) is the protection of data in-use with hardware-based trusted execution environments (TEEs). +With CVMs, TEEs encapsulate entire virtual machines and isolate them against the hypervisor, other VMs, and direct memory access. +After loading the initial VM image into encrypted memory, the hypervisor calls for a secure processor to measure these initial memory pages. +The secure processor locks these pages and generates an attestation report on the initial page measurements. +CVM memory pages are encrypted with a key that resides inside the secure processor, which makes sure only the guest VM can access them. +The attestation report is signed by the secure processor and can be verified using remote attestation via the certificate authority of the hardware vendor. +Such an attestation statement guarantees the confidentiality and integrity of a CVM. + +### Attested TLS (aTLS) + +In a CC environment, attested TLS (aTLS) can be used to establish secure connections between two parties using the remote attestation features of the CC components. + +aTLS modifies the TLS handshake by embedding an attestation statement into the TLS certificate. +Instead of relying on a certificate authority, aTLS uses this attestation statement to establish trust in the certificate. + +The protocol can be used by clients to verify a server certificate, by a server to verify a client certificate, or for mutual verification (mutual aTLS). + +## Overview + +The challenge for Constellation is to lift a CVM's attestation statement to the Kubernetes software layer and make it end-to-end verifiable. +From there, Constellation needs to expand the attestation from a single CVM to the entire cluster. + +The [*JoinService*](microservices.md#joinservice) and [*VerificationService*](microservices.md#verificationservice) are where all runs together. +Internally, the *JoinService* uses remote attestation to securely join CVM nodes to the cluster. +Externally, the *VerificationService* provides an attestation statement for the cluster's CVMs and configuration. + +The following explains the details of both steps. + +## Node attestation + +The idea is that Constellation nodes should have verifiable integrity from the CVM hardware measurement up to the Kubernetes software layer. +The solution is a verifiable boot chain and an integrity-protected runtime environment. + +Constellation uses measured boot within CVMs, measuring each component in the boot process before executing it. +Outside of CC, this is usually implemented via TPMs. +CVM technologies differ in how they implement runtime measurements, but the general concepts are similar to those of a TPM. +For simplicity, TPM terminology like *PCR* is used in the following. + +When a Constellation node image boots inside a CVM, measured boot is used for all stages and components of the boot chain. +This process goes up to the root filesystem. +The root filesystem is mounted read-only with integrity protection. +For the details on the image and boot stages see the [image architecture](../architecture/images.md) documentation. +Any changes to the image will inevitably also change the corresponding PCR values. +To create a node attestation statement, the Constellation image obtains a CVM attestation statement from the hardware. +This includes the runtime measurements and thereby binds the measured boot results to the CVM hardware measurement. + +In addition to the image measurements, Constellation extends a PCR during the [initialization phase](../workflows/create.md) that irrevocably marks the node as initialized. +The measurement is created using the [*clusterID*](../architecture/keys.md#cluster-identity), tying all future attestation statements to this ID. +Thereby, an attestation statement is unique for every cluster and a node can be identified unambiguously as being initialized. + +To verify an attestation, the hardware's signature and a statement are verified first to establish trust in the contained runtime measurements. +If successful, the measurements are verified against the trusted values of the particular Constellation release version. +Finally, the measurement of the *clusterID* can be compared by calculating it with the [master secret](keys.md#master-secret). + +### Runtime measurements + +Constellation uses runtime measurements to implement the measured boot approach. +As stated above, the underlying hardware technology and guest firmware differ in their implementations of runtime measurements. +The following gives a detailed description of the available measurements in the different cloud environments. + +The runtime measurements consist of two types of values: + +* **Measurements produced by the cloud infrastructure and firmware of the CVM**: +These are measurements of closed-source firmware and other values controlled by the cloud provider. +While not being reproducible for the user, some of them can be compared against previously observed values. +Others may change frequently and aren't suitable for verification. +The [signed image measurements](#chain-of-trust) include measurements that are known, previously observed values. + +* **Measurements produced by the Constellation bootloader and boot chain**: +The Constellation Bootloader takes over from the CVM firmware and [measures the rest of the boot chain](images.md). +The Constellation [Bootstrapper](microservices.md#bootstrapper) is the first user mode component that runs in a Constellation image. +It extends PCR registers with the [IDs](keys.md#cluster-identity) of the cluster marking a node as initialized. + +Constellation allows to specify in the config which measurements should be enforced during the attestation process. +Enforcing non-reproducible measurements controlled by the cloud provider means that changes in these values require manual updates to the cluster's config. +By default, Constellation only enforces measurements that are stable values produced by the infrastructure or by Constellation directly. + + + + +Constellation uses the [vTPM](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/nitrotpm.html) (NitroTPM) feature of the [AWS Nitro System](http://aws.amazon.com/ec2/nitro/) on AWS for runtime measurements. + +The vTPM adheres to the [TPM 2.0](https://trustedcomputinggroup.org/resource/tpm-library-specification/) specification. +The VMs are attested by obtaining signed PCR values over the VM's boot configuration from the TPM and comparing them to a known, good state (measured boot). + +The following table lists all PCR values of the vTPM and the measured components. +It also lists what components of the boot chain did the measurements and if the value is reproducible and verifiable. +The latter means that the value can be generated offline and compared to the one in the vTPM. + +| PCR | Components | Measured by | Reproducible and verifiable | +| ----------- | ---------------------------------------------------------------- | -------------------------------------- | --------------------------- | +| 0 | Firmware | AWS | No | +| 1 | Firmware | AWS | No | +| 2 | Firmware | AWS | No | +| 3 | Firmware | AWS | No | +| 4 | Constellation Bootloader, Kernel, initramfs, Kernel command line | AWS, Constellation Bootloader | Yes | +| 5 | Firmware | AWS | No | +| 6 | Firmware | AWS | No | +| 7 | Secure Boot Policy | AWS, Constellation Bootloader | No | +| 8 | - | - | - | +| 9 | initramfs, Kernel command line | Linux Kernel | Yes | +| 10 | User space | Linux IMA | No[^1] | +| 11 | Unified Kernel Image components | Constellation Bootloader | Yes | +| 12 | Reserved | (User space, Constellation Bootloader) | Yes | +| 13 | Reserved | (Constellation Bootloader) | Yes | +| 14 | Secure Boot State | Constellation Bootloader | No | +| 15 | ClusterID | Constellation Bootstrapper | Yes | +| 16–23 | Unused | - | - | + + + + +Constellation uses the [vTPM](https://docs.microsoft.com/en-us/azure/virtual-machines/trusted-launch#vtpm) feature of Azure CVMs for runtime measurements. +This vTPM adheres to the [TPM 2.0](https://trustedcomputinggroup.org/resource/tpm-library-specification/) specification. +It provides a [measured boot](https://docs.microsoft.com/en-us/azure/security/fundamentals/measured-boot-host-attestation#measured-boot) verification that's based on the trusted launch feature of [Trusted Launch VMs](https://docs.microsoft.com/en-us/azure/virtual-machines/trusted-launch). + +The following table lists all PCR values of the vTPM and the measured components. +It also lists what components of the boot chain did the measurements and if the value is reproducible and verifiable. +The latter means that the value can be generated offline and compared to the one in the vTPM. + +| PCR | Components | Measured by | Reproducible and verifiable | +| ----------- | ---------------------------------------------------------------- | -------------------------------------- | --------------------------- | +| 0 | Firmware | Azure | No | +| 1 | Firmware | Azure | No | +| 2 | Firmware | Azure | No | +| 3 | Firmware | Azure | No | +| 4 | Constellation Bootloader, Kernel, initramfs, Kernel command line | Azure, Constellation Bootloader | Yes | +| 5 | Reserved | Azure | No | +| 6 | VM Unique ID | Azure | No | +| 7 | Secure Boot State | Azure, Constellation Bootloader | No | +| 8 | - | - | - | +| 9 | initramfs, Kernel command line | Linux Kernel | Yes | +| 10 | User space | Linux IMA | No[^1] | +| 11 | Unified Kernel Image components | Constellation Bootloader | Yes | +| 12 | Reserved | (User space, Constellation Bootloader) | Yes | +| 13 | Reserved | (Constellation Bootloader) | Yes | +| 14 | Secure Boot State | Constellation Bootloader | No | +| 15 | ClusterID | Constellation Bootstrapper | Yes | +| 16–23 | Unused | - | - | + + + + +Constellation uses the [vTPM](https://cloud.google.com/compute/confidential-vm/docs/about-cvm) feature of CVMs on GCP for runtime measurements. +Note that this vTPM doesn't run inside the hardware-protected CVM context, but is emulated by the hypervisor. + +The vTPM adheres to the [TPM 2.0](https://trustedcomputinggroup.org/resource/tpm-library-specification/) specification. +It provides a [launch attestation report](https://cloud.google.com/compute/confidential-vm/docs/monitoring#about_launch_attestation_report_events) that's based on the measured boot feature of [Shielded VMs](https://cloud.google.com/compute/shielded-vm/docs/shielded-vm#measured-boot). + +The following table lists all PCR values of the vTPM and the measured components. +It also lists what components of the boot chain did the measurements and if the value is reproducible and verifiable. +The latter means that the value can be generated offline and compared to the one in the vTPM. + +| PCR | Components | Measured by | Reproducible and verifiable | +| ----------- | ---------------------------------------------------------------- | -------------------------------------- | --------------------------- | +| 0 | CVM version and technology | GCP | No | +| 1 | Firmware | GCP | No | +| 2 | Firmware | GCP | No | +| 3 | Firmware | GCP | No | +| 4 | Constellation Bootloader, Kernel, initramfs, Kernel command line | GCP, Constellation Bootloader | Yes | +| 5 | Disk GUID partition table | GCP | No | +| 6 | Disk GUID partition table | GCP | No | +| 7 | GCP Secure Boot Policy | GCP, Constellation Bootloader | No | +| 8 | - | - | - | +| 9 | initramfs, Kernel command line | Linux Kernel | Yes | +| 10 | User space | Linux IMA | No[^1] | +| 11 | Unified Kernel Image components | Constellation Bootloader | Yes | +| 12 | Reserved | (User space, Constellation Bootloader) | Yes | +| 13 | Reserved | (Constellation Bootloader) | Yes | +| 14 | Secure Boot State | Constellation Bootloader | No | +| 15 | ClusterID | Constellation Bootstrapper | Yes | +| 16–23 | Unused | - | - | + + + + +Constellation uses a hypervisor-based vTPM for runtime measurements. + +The vTPM adheres to the [TPM 2.0](https://trustedcomputinggroup.org/resource/tpm-library-specification/) specification. +The VMs are attested by obtaining signed PCR values over the VM's boot configuration from the TPM and comparing them to a known, good state (measured boot). + +The following table lists all PCR values of the vTPM and the measured components. +It also lists what components of the boot chain did the measurements and if the value is reproducible and verifiable. +The latter means that the value can be generated offline and compared to the one in the vTPM. + +| PCR | Components | Measured by | Reproducible and verifiable | +| ----------- | ---------------------------------------------------------------- | -------------------------------------- | --------------------------- | +| 0 | Firmware | STACKIT | No | +| 1 | Firmware | STACKIT | No | +| 2 | Firmware | STACKIT | No | +| 3 | Firmware | STACKIT | No | +| 4 | Constellation Bootloader, Kernel, initramfs, Kernel command line | STACKIT, Constellation Bootloader | Yes | +| 5 | Firmware | STACKIT | No | +| 6 | Firmware | STACKIT | No | +| 7 | Secure Boot Policy | STACKIT, Constellation Bootloader | No | +| 8 | - | - | - | +| 9 | initramfs, Kernel command line | Linux Kernel | Yes | +| 10 | User space | Linux IMA | No[^1] | +| 11 | Unified Kernel Image components | Constellation Bootloader | Yes | +| 12 | Reserved | (User space, Constellation Bootloader) | Yes | +| 13 | Reserved | (Constellation Bootloader) | Yes | +| 14 | Secure Boot State | Constellation Bootloader | No | +| 15 | ClusterID | Constellation Bootstrapper | Yes | +| 16–23 | Unused | - | - | + + + + +### CVM verification + +To verify the integrity of the received attestation statement, a chain of trust from the CVM technology to the interface providing the statement has to be established. +For verification of the CVM technology, Constellation may expose additional options in its config file. + + + + +On AWS, AMD SEV-SNP is used to provide runtime encryption to the VMs. +An SEV-SNP attestation report is used to establish trust in the VM. +You may customize certain parameters for verification of the attestation statement using the Constellation config file. + +* TCB versions + + You can set the minimum version numbers of components in the SEV-SNP TCB. + Use the latest versions to enforce that only machines with the most recent firmware updates are allowed to join the cluster. + Alternatively, you can set a lower minimum version to allow slightly out-of-date machines to still be able to join the cluster. + +* AMD Root Key Certificate + + This certificate is the root of trust for verifying the SEV-SNP certificate chain. + +* AMD Signing Key Certificate + + This is the intermediate certificate for verifying the SEV-SNP report's signature. + If it's not specified, the CLI fetches it from the AMD key distribution server. + + + + +On Azure, AMD SEV-SNP is used to provide runtime encryption to the VMs. +An SEV-SNP attestation report is used to establish trust in the vTPM running inside the VM. +You may customize certain parameters for verification of the attestation statement using the Constellation config file. + +* TCB versions + + You can set the minimum version numbers of components in the SEV-SNP TCB. + Use the latest versions to enforce that only machines with the most recent firmware updates are allowed to join the cluster. + Alternatively, you can set a lower minimum version to allow slightly out-of-date machines to still be able to join the cluster. + +* AMD Root Key Certificate + + This certificate is the root of trust for verifying the SEV-SNP certificate chain. + +* Firmware Signer + + This config option allows you to specify how the firmware signer should be verified. + More explicitly, it controls the verification of the `IDKeyDigest` value in the SEV-SNP attestation report. + You can provide a list of accepted key digests and specify a policy on how this list is compared against the reported `IDKeyDigest`. + + + + +On GCP, AMD SEV-SNP is used to provide runtime encryption to the VMs. +An SEV-SNP attestation report is used to establish trust in the VM. +You may customize certain parameters for verification of the attestation statement using the Constellation config file. + +* TCB versions + + You can set the minimum version numbers of components in the SEV-SNP TCB. + Use the latest versions to enforce that only machines with the most recent firmware updates are allowed to join the cluster. + Alternatively, you can set a lower minimum version to allow slightly out-of-date machines to still be able to join the cluster. + +* AMD Root Key Certificate + + This certificate is the root of trust for verifying the SEV-SNP certificate chain. + +* AMD Signing Key Certificate + + This is the intermediate certificate for verifying the SEV-SNP report's signature. + If it's not specified, the CLI fetches it from the AMD key distribution server. + + + + +On STACKIT, AMD SEV-ES is used to provide runtime encryption to the VMs. +The hypervisor-based vTPM is used to establish trust in the VM via [runtime measurements](#runtime-measurements). +There is no additional configuration available for STACKIT. + + + + +## Cluster attestation + +Cluster-facing, Constellation's [*JoinService*](microservices.md#joinservice) verifies each node joining the cluster given the configured ground truth runtime measurements. +User-facing, the [*VerificationService*](microservices.md#verificationservice) provides an interface to verify a node using remote attestation. +By verifying the first node during the [initialization](microservices.md#bootstrapper) and configuring the ground truth measurements that are subsequently enforced by the *JoinService*, the whole cluster is verified in a transitive way. + +### Cluster-facing attestation + +The *JoinService* is provided with the runtime measurements of the whitelisted Constellation image version as the ground truth. +During the initialization and the cluster bootstrapping, each node connects to the *JoinService* using [aTLS](#attested-tls-atls). +During the handshake, the node transmits an attestation statement including its runtime measurements. +The *JoinService* verifies that statement and compares the measurements against the ground truth. +For details of the initialization process check the [microservice descriptions](microservices.md). + +After the initialization, every node updates its runtime measurements with the *clusterID* value, marking it irreversibly as initialized. +When an initialized node tries to join another cluster, its measurements inevitably mismatch the measurements of an uninitialized node and it will be declined. + +### User-facing attestation + +The [*VerificationService*](microservices.md#verificationservice) provides an endpoint for obtaining its hardware-based remote attestation statement, which includes the runtime measurements. +A user can [verify](../workflows/verify-cluster.md) this statement and compare the measurements against the configured ground truth and, thus, verify the identity and integrity of all Constellation components and the cluster configuration. Subsequently, the user knows that the entire cluster is in the expected state and is trustworthy. + +## Putting it all together + +This section puts the aforementioned concepts together and illustrate how trust into a Constellation cluster is established and maintained. + +### CLI and node images + +It all starts with the CLI executable. The CLI is signed by Edgeless Systems. To ensure non-repudiability for CLI releases, Edgeless Systems publishes corresponding signatures to the public ledger of the [sigstore project](https://www.sigstore.dev/). There's a [step-by-step guide](../workflows/verify-cli.md) on how to verify CLI signatures based on sigstore. + +The CLI contains the latest runtime measurements of the Constellation node image for all supported cloud platforms. In case a different version of the node image is to be used, the corresponding runtime measurements can be fetched using the CLI's [fetch-measurements command](../reference/cli.md#constellation-config-fetch-measurements). This command downloads the runtime measurements and the corresponding signature from cdn.confidential.cloud. See for example the following files corresponding to node image v2.16.3: + +* [Measurements](https://cdn.confidential.cloud/constellation/v2/ref/-/stream/stable/v2.16.3/image/measurements.json) +* [Signature](https://cdn.confidential.cloud/constellation/v2/ref/-/stream/stable/v2.16.3/image/measurements.json.sig) + +The CLI contains the long-term public key of Edgeless Systems to verify the signature of downloaded runtime measurements. + +### Cluster creation + +When a cluster is [created](../workflows/create.md), the CLI automatically verifies the runtime measurements of the *first node* using remote attestation. Based on this, the CLI and the first node set up a temporary TLS connection. This [aTLS](#attested-tls-atls) connection is used for two things: + +1. The CLI sends the [master secret](../architecture/keys.md#master-secret) of the to-be-created cluster to the CLI. The master secret is generated by the first node. +2. The first node sends a [kubeconfig file](https://www.redhat.com/sysadmin/kubeconfig) with Kubernetes credentials to the CLI. + +After this, the aTLS connection is closed and the first node bootstraps the Kubernetes cluster. All subsequent interactions between the CLI and the cluster go via the [Kubernetes API](https://kubernetes.io/docs/concepts/overview/kubernetes-api/) server running inside the cluster. The CLI (and other tools like kubectl) use the credentials referenced by the kubeconfig file to authenticate themselves towards the Kubernetes API server and to establish a mTLS connection. + +The CLI connects to the Kubernetes API to write the runtime measurements for the applicable node image to etcd. The JoinService uses these runtime measurements to verify all nodes that join the cluster subsequently. + +### Chain of trust + +In summary, there's a chain of trust based on cryptographic signatures that goes from the user to the cluster via the CLI. This is illustrated in the following diagram. + +```mermaid +flowchart LR + A[User]-- "verifies" -->B[CLI] + B[CLI]-- "verifies" -->C([Runtime measurements]) + D[Edgeless Systems]-- "signs" -->B[CLI] + D[Edgeless Systems]-- "signs" -->C([Runtime measurements]) + B[CLI]-- "verifies (remote attestation)" -->E[First node] + E[First node]-- "verifies (remote attestation)" -->F[Other nodes] + C([Runtime measurements]) -.-> E[First node] + C([Runtime measurements]) -.-> F[Other nodes] +``` + +### Upgrades + +Whenever a cluster is [upgraded](../workflows/upgrade.md) to a new version of the node image, the CLI sends the corresponding runtime measurements via the Kubernetes API server. The new runtime measurements are stored in etcd within the cluster and replace any previous runtime measurements. The new runtime measurements are then used automatically by the JoinService for the verification of new nodes. + +## References + +[^1]: Linux IMA produces runtime measurements of user-space binaries. +However, these measurements aren't deterministic and thus, PCR\[10] can't be compared to a constant value. +Instead, a policy engine must be used to verify the TPM event log against a policy. diff --git a/docs/versioned_docs/version-2.22/architecture/encrypted-storage.md b/docs/versioned_docs/version-2.22/architecture/encrypted-storage.md new file mode 100644 index 000000000..f047fa4a9 --- /dev/null +++ b/docs/versioned_docs/version-2.22/architecture/encrypted-storage.md @@ -0,0 +1,62 @@ +# Encrypted persistent storage + +Confidential VMs provide runtime memory encryption to protect data in use. +In the context of Kubernetes, this is sufficient for the confidentiality and integrity of stateless services. +Consider a front-end web server, for example, that keeps all connection information cached in main memory. +No sensitive data is ever written to an insecure medium. +However, many real-world applications need some form of state or data-lake service that's connected to a persistent storage device and requires encryption at rest. +As described in [Use persistent storage](../workflows/storage.md), cloud service providers (CSPs) use the container storage interface (CSI) to make their storage solutions available to Kubernetes workloads. +These CSI storage solutions often support some sort of encryption. +For example, Google Cloud [encrypts data at rest by default](https://cloud.google.com/security/encryption/default-encryption), without any action required by the customer. + +## Cloud provider-managed encryption + +CSP-managed storage solutions encrypt the data in the cloud backend before writing it physically to disk. +In the context of confidential computing and Constellation, the CSP and its managed services aren't trusted. +Hence, cloud provider-managed encryption protects your data from offline hardware access to physical storage devices. +It doesn't protect it from anyone with infrastructure-level access to the storage backend or a malicious insider in the cloud platform. +Even with "bring your own key" or similar concepts, the CSP performs the encryption process with access to the keys and plaintext data. + +In the security model of Constellation, securing persistent storage and thereby data at rest requires that all cryptographic operations are performed inside a trusted execution environment. +Consequently, using CSP-managed encryption of persistent storage usually isn't an option. + +## Constellation-managed encryption + +Constellation provides CSI drivers for storage solutions in all major clouds with built-in encryption support. +Block storage provisioned by the CSP is [mapped](https://guix.gnu.org/manual/en/html_node/Mapped-Devices.html) using the [dm-crypt](https://www.kernel.org/doc/html/latest/admin-guide/device-mapper/dm-crypt.html), and optionally the [dm-integrity](https://www.kernel.org/doc/html/latest/admin-guide/device-mapper/dm-integrity.html), kernel modules, before it's formatted and accessed by the Kubernetes workloads. +All cryptographic operations happen inside the trusted environment of the confidential Constellation node. + +Note that for integrity-protected disks, [volume expansion](https://kubernetes.io/blog/2018/07/12/resizing-persistent-volumes-using-kubernetes/) isn't supported. + +By default the driver uses data encryption keys (DEKs) issued by the Constellation [*KeyService*](microservices.md#keyservice). +The DEKs are in turn derived from the Constellation's key encryption key (KEK), which is directly derived from the [master secret](keys.md#master-secret). +This is the recommended mode of operation, and also requires the least amount of setup by the cluster administrator. + +Alternatively, the driver can be configured to use a key management system to store and access KEKs and DEKs. + +Refer to [keys and cryptography](keys.md) for more details on key management in Constellation. + +Once deployed and configured, the CSI driver ensures transparent encryption and integrity of all persistent volumes provisioned via its storage class. +Data at rest is secured without any additional actions required by the developer. + +## Cryptographic algorithms + +This section gives an overview of the libraries, cryptographic algorithms, and their configurations, used in Constellation's CSI drivers. + +### dm-crypt + +To interact with the dm-crypt kernel module, Constellation uses [libcryptsetup](https://gitlab.com/cryptsetup/cryptsetup/). +New devices are formatted as [LUKS2](https://gitlab.com/cryptsetup/LUKS2-docs/-/tree/master) partitions with a sector size of 4096 bytes. +The used key derivation function is [Argon2id](https://datatracker.ietf.org/doc/html/rfc9106) with the [recommended parameters for memory-constrained environments](https://datatracker.ietf.org/doc/html/rfc9106#section-7.4) of 3 iterations and 64 MiB of memory, utilizing 4 parallel threads. +For encryption Constellation uses AES in XTS-Plain64. The key size is 512 bit. + +### dm-integrity + +To interact with the dm-integrity kernel module, Constellation uses [libcryptsetup](https://gitlab.com/cryptsetup/cryptsetup/). +When enabled, the used data integrity algorithm is [HMAC](https://datatracker.ietf.org/doc/html/rfc2104) with SHA256 as the hash function. +The tag size is 32 Bytes. + +## Encrypted S3 object storage + +Constellation comes with a service that you can use to transparently retrofit client-side encryption to existing applications that use S3 (AWS or compatible) for storage. +To learn more, check out the [s3proxy documentation](../workflows/s3proxy.md). diff --git a/docs/versioned_docs/version-2.22/architecture/images.md b/docs/versioned_docs/version-2.22/architecture/images.md new file mode 100644 index 000000000..8a9c51d36 --- /dev/null +++ b/docs/versioned_docs/version-2.22/architecture/images.md @@ -0,0 +1,49 @@ +# Constellation images + +Constellation uses a minimal version of Fedora as the operating system running inside confidential VMs. This Linux distribution is optimized for containers and designed to be stateless. +The Constellation images provide measured boot and an immutable filesystem. + +## Measured boot + +```mermaid +flowchart LR + Firmware --> Bootloader + Bootloader --> uki + subgraph uki[Unified Kernel Image] + Kernel[Kernel] + initramfs[Initramfs] + cmdline[Kernel Command Line] + end + uki --> rootfs[Root Filesystem] +``` + +Measured boot uses a Trusted Platform Module (TPM) to measure every part of the boot process. This allows for verification of the integrity of a running system at any point in time. To ensure correct measurements of every stage, each stage is responsible to measure the next stage before transitioning. + +### Firmware + +With confidential VMs, the firmware is the root of trust and is measured automatically at boot. After initialization, the firmware will load and measure the bootloader before executing it. + +### Bootloader + +The bootloader is the first modifiable part of the boot chain. The bootloader is tasked with loading the kernel, initramfs and setting the kernel command line. The Constellation bootloader measures these components before starting the kernel. + +### initramfs + +The initramfs is a small filesystem loaded to prepare the actual root filesystem. The Constellation initramfs maps the block device containing the root filesystem with [dm-verity](https://www.kernel.org/doc/html/latest/admin-guide/device-mapper/verity.html). The initramfs then mounts the root filesystem from the mapped block device. + +dm-verity provides integrity checking using a cryptographic hash tree. When a block is read, its integrity is checked by verifying the tree against a trusted root hash. The initramfs reads this root hash from the previously measured kernel command line. Thus, if any block of the root filesystem's device is modified on disk, trying to read the modified block will result in a kernel panic at runtime. + +After mounting the root filesystem, the initramfs will switch over and start the `init` process of the integrity-protected root filesystem. + +## State disk + +In addition to the read-only root filesystem, each Constellation node has a disk for storing state data. +This disk is mounted readable and writable by the initramfs and contains data that should persist across reboots. +Such data can contain sensitive information and, therefore, must be stored securely. +To that end, the state disk is protected by authenticated encryption. +See the section on [keys and encryption](keys.md#storage-encryption) for more information on the cryptographic primitives in use. + +## Kubernetes components + +During initialization, the [*Bootstrapper*](microservices.md#bootstrapper) downloads and verifies the [Kubernetes components](https://kubernetes.io/docs/concepts/overview/components/) as configured by the user. +They're stored on the state partition and can be updated once new releases need to be installed. diff --git a/docs/versioned_docs/version-2.22/architecture/keys.md b/docs/versioned_docs/version-2.22/architecture/keys.md new file mode 100644 index 000000000..49821cd0b --- /dev/null +++ b/docs/versioned_docs/version-2.22/architecture/keys.md @@ -0,0 +1,130 @@ +# Key management and cryptographic primitives + +Constellation protects and isolates your cluster and workloads. +To that end, cryptography is the foundation that ensures the confidentiality and integrity of all components. +Evaluating the security and compliance of Constellation requires a precise understanding of the cryptographic primitives and keys used. +The following gives an overview of the architecture and explains the technical details. + +## Confidential VMs + +Confidential VM (CVM) technology comes with hardware and software components for memory encryption, isolation, and remote attestation. +For details on the implementations and cryptographic soundness, refer to the hardware vendors' documentation and advisories. + +## Master secret + +The master secret is the cryptographic material used for deriving the [*clusterID*](#cluster-identity) and the *key encryption key (KEK)* for [storage encryption](#storage-encryption). +It's generated during the bootstrapping of a Constellation cluster. +It can either be managed by [Constellation](#constellation-managed-key-management) or an [external key management system](#user-managed-key-management). +In case of [recovery](#recovery-and-migration), the master secret allows to decrypt the state and recover a Constellation cluster. + +## Cluster identity + +The identity of a Constellation cluster is represented by cryptographic [measurements](attestation.md#runtime-measurements): + +The **base measurements** represent the identity of a valid, uninitialized Constellation node. +They depend on the node image, but are otherwise the same for every Constellation cluster. +On node boot, they're determined using the CVM's attestation mechanism and [measured boot up to the read-only root filesystem](images.md). + +The **clusterID** represents the identity of a single initialized Constellation cluster. +It's derived from the master secret and a cryptographically random salt and unique for every Constellation cluster. +The [Bootstrapper](microservices.md#bootstrapper) measures the *clusterID* into its own PCR before executing any code not measured as part of the *base measurements*. +See [Node attestation](attestation.md#node-attestation) for details. + +The remote attestation statement of a Constellation cluster combines the *base measurements* and the *clusterID* for a verifiable, unspoofable, unique identity. + +## Network encryption + +Constellation encrypts all cluster network communication using the [container network interface (CNI)](https://github.com/containernetworking/cni). +See [network encryption](networking.md) for more details. + +The Cilium agent running on each node establishes a secure [WireGuard](https://www.wireguard.com/) tunnel between it and all other known nodes in the cluster. +Each node creates its own [Curve25519](http://cr.yp.to/ecdh.html) encryption key pair and distributes its public key via Kubernetes. +A node uses another node's public key to decrypt and encrypt traffic from and to Cilium-managed endpoints running on that node. +Connections are always encrypted peer-to-peer using [ChaCha20](http://cr.yp.to/chacha.html) with [Poly1305](http://cr.yp.to/mac.html). +WireGuard implements [forward secrecy with key rotation every 2 minutes](https://lists.zx2c4.com/pipermail/wireguard/2017-December/002141.html). + +## Storage encryption + +Constellation supports transparent encryption of persistent storage. +The Linux kernel's device mapper-based encryption features are used to encrypt the data on the block storage level. +Currently, the following primitives are used for block storage encryption: + +* [dm-crypt](https://www.kernel.org/doc/html/latest/admin-guide/device-mapper/dm-crypt.html) +* [dm-integrity](https://www.kernel.org/doc/html/latest/admin-guide/device-mapper/dm-integrity.html) + +Adding primitives for integrity protection in the CVM attacker model are under active development and will be available in a future version of Constellation. +See [encrypted storage](encrypted-storage.md) for more details. + +As a cluster administrator, when creating a cluster, you can use the Constellation [installation program](orchestration.md) to select one of the following methods for key management: + +* Constellation-managed key management +* User-managed key management + +### Constellation-managed key management + +#### Key material and key derivation + +During the creation of a Constellation cluster, the cluster's master secret is used to derive a KEK. +This means creating two clusters with the same master secret will yield the same KEK. +Any data encryption key (DEK) is derived from the KEK via HKDF. +Note that the master secret is recommended to be unique for every cluster and shouldn't be reused (except in case of [recovering](../workflows/recovery.md) a cluster). + +#### State and storage + +The KEK is derived from the master secret during the initialization. +Subsequently, all other key material is derived from the KEK. +Given the same KEK, any DEK can be derived deterministically from a given identifier. +Hence, there is no need to store DEKs. They can be derived on demand. +After the KEK was derived, it's stored in memory only and never leaves the CVM context. + +#### Availability + +Constellation-managed key management has the same availability as the underlying Kubernetes cluster. +Therefore, the KEK is stored in the [distributed Kubernetes etcd storage](https://kubernetes.io/docs/tasks/administer-cluster/configure-upgrade-etcd/) to allow for unexpected but non-fatal (control-plane) node failure. +The etcd storage is backed by the encrypted and integrity protected [state disk](images.md#state-disk) of the nodes. + +#### Recovery + +Constellation clusters can be recovered in the event of a disaster, even when all node machines have been stopped and need to be rebooted. +For details on the process see the [recovery workflow](../workflows/recovery.md). + +### User-managed key management + +User-managed key management is under active development and will be available soon. +In scenarios where constellation-managed key management isn't an option, this mode allows you to keep full control of your keys. +For example, compliance requirements may force you to keep your KEKs in an on-prem key management system (KMS). + +During the creation of a Constellation cluster, you specify a KEK present in a remote KMS. +This follows the common scheme of "bring your own key" (BYOK). +Constellation will support several KMSs for managing the storage and access of your KEK. +Initially, it will support the following KMSs: + +* [AWS KMS](https://aws.amazon.com/kms/) +* [GCP KMS](https://cloud.google.com/security-key-management) +* [Azure Key Vault](https://azure.microsoft.com/en-us/services/key-vault/#product-overview) +* [KMIP-compatible KMS](https://www.oasis-open.org/committees/tc_home.php?wg_abbrev=kmip) + +Storing the keys in Cloud KMS of AWS, Azure, or GCP binds the key usage to the particular cloud identity access management (IAM). +In the future, Constellation will support remote attestation-based access policies for Cloud KMS once available. +Note that using a Cloud KMS limits the isolation and protection to the guarantees of the particular offering. + +KMIP support allows you to use your KMIP-compatible on-prem KMS and keep full control over your keys. +This follows the common scheme of "hold your own key" (HYOK). + +The KEK is used to encrypt per-data "data encryption keys" (DEKs). +DEKs are generated to encrypt your data before storing it on persistent storage. +After being encrypted by the KEK, the DEKs are stored on dedicated cloud storage for persistence. +Currently, Constellation supports the following cloud storage options: + +* [AWS S3](https://aws.amazon.com/s3/) +* [GCP Cloud Storage](https://cloud.google.com/storage) +* [Azure Blob Storage](https://azure.microsoft.com/en-us/services/storage/blobs/#overview) + +The DEKs are only present in plaintext form in the encrypted main memory of the CVMs. +Similarly, the cryptographic operations for encrypting data before writing it to persistent storage are performed in the context of the CVMs. + +#### Recovery and migration + +In the case of a disaster, the KEK can be used to decrypt the DEKs locally and subsequently use them to decrypt and retrieve the data. +In case of migration, configuring the same KEK will provide seamless migration of data. +Thus, only the DEK storage needs to be transferred to the new cluster alongside the encrypted data for seamless migration. diff --git a/docs/versioned_docs/version-2.22/architecture/microservices.md b/docs/versioned_docs/version-2.22/architecture/microservices.md new file mode 100644 index 000000000..90bae783b --- /dev/null +++ b/docs/versioned_docs/version-2.22/architecture/microservices.md @@ -0,0 +1,73 @@ +# Microservices + +Constellation takes care of bootstrapping and initializing a Confidential Kubernetes cluster. +During the lifetime of the cluster, it handles day 2 operations such as key management, remote attestation, and updates. +These features are provided by several microservices: + +* The [Bootstrapper](microservices.md#bootstrapper) initializes a Constellation node and bootstraps the cluster +* The [JoinService](microservices.md#joinservice) joins new nodes to an existing cluster +* The [VerificationService](microservices.md#verificationservice) provides remote attestation functionality +* The [KeyService](microservices.md#keyservice) manages Constellation-internal keys + +The relations between microservices are shown in the following diagram: + +```mermaid +flowchart LR + subgraph admin [Admin's machine] + A[Constellation CLI] + end + subgraph img [Constellation OS image] + B[Constellation OS] + C[Bootstrapper] + end + subgraph Kubernetes + D[JoinService] + E[KeyService] + F[VerificationService] + end + A -- deploys --> + B -- starts --> C + C -- deploys --> D + C -- deploys --> E + C -- deploys --> F +``` + +## Bootstrapper + +The *Bootstrapper* is the first microservice launched after booting a Constellation node image. +It sets up that machine as a Kubernetes node and integrates that node into the Kubernetes cluster. +To this end, the *Bootstrapper* first downloads and verifies the [Kubernetes components](https://kubernetes.io/docs/concepts/overview/components/) at the configured versions. +The *Bootstrapper* tries to find an existing cluster and if successful, communicates with the [JoinService](microservices.md#joinservice) to join the node. +Otherwise, it waits for an initialization request to create a new Kubernetes cluster. + +## JoinService + +The *JoinService* runs as [DaemonSet](https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/) on each control-plane node. +New nodes (at cluster start, or later through autoscaling) send a request to the service over [attested TLS (aTLS)](attestation.md#attested-tls-atls). +The *JoinService* verifies the new node's certificate and attestation statement. +If attestation is successful, the new node is supplied with an encryption key from the [*KeyService*](microservices.md#keyservice) for its state disk, and a Kubernetes bootstrap token. + + +```mermaid +sequenceDiagram + participant New node + participant JoinService + New node->>JoinService: aTLS handshake (server side verification) + JoinService-->>New node: # + New node->>+JoinService: IssueJoinTicket(DiskUUID, NodeName, IsControlPlane) + JoinService->>+KeyService: GetDataKey(DiskUUID) + KeyService-->>-JoinService: DiskEncryptionKey + JoinService-->>-New node: DiskEncryptionKey, KubernetesJoinToken, ... +``` + +## VerificationService + +The *VerificationService* runs as DaemonSet on each node. +It provides user-facing functionality for remote attestation during the cluster's lifetime via an endpoint for [verifying the cluster](attestation.md#cluster-attestation). +Read more about the hardware-based [attestation feature](attestation.md) of Constellation and how to [verify](../workflows/verify-cluster.md) a cluster on the client side. + +## KeyService + +The *KeyService* runs as DaemonSet on each control-plane node. +It implements the key management for the [storage encryption keys](keys.md#storage-encryption) in Constellation. These keys are used for the [state disk](images.md#state-disk) of each node and the [transparently encrypted storage](encrypted-storage.md) for Kubernetes. +Depending on wether the [constellation-managed](keys.md#constellation-managed-key-management) or [user-managed](keys.md#user-managed-key-management) mode is used, the *KeyService* holds the key encryption key (KEK) directly or calls an external key management service (KMS) for key derivation respectively. diff --git a/docs/versioned_docs/version-2.22/architecture/networking.md b/docs/versioned_docs/version-2.22/architecture/networking.md new file mode 100644 index 000000000..e9cbdf029 --- /dev/null +++ b/docs/versioned_docs/version-2.22/architecture/networking.md @@ -0,0 +1,22 @@ +# Network encryption + +Constellation encrypts all pod communication using the [container network interface (CNI)](https://github.com/containernetworking/cni). +To that end, Constellation deploys, configures, and operates the [Cilium](https://cilium.io/) CNI plugin. +Cilium provides [transparent encryption](https://docs.cilium.io/en/stable/security/network/encryption) for all cluster traffic using either IPSec or [WireGuard](https://www.wireguard.com/). +Currently, Constellation only supports WireGuard as the encryption engine. +You can read more about the cryptographic soundness of WireGuard [in their white paper](https://www.wireguard.com/papers/wireguard.pdf). + +Cilium is actively working on implementing a feature called [`host-to-host`](https://github.com/cilium/cilium/pull/19401) encryption mode for WireGuard. +With `host-to-host`, all traffic between nodes will be tunneled via WireGuard (host-to-host, host-to-pod, pod-to-host, pod-to-pod). +Until the `host-to-host` feature is released, Constellation enables `pod-to-pod` encryption. +This mode encrypts all traffic between Kubernetes pods using WireGuard tunnels. + +When using Cilium in the default setup but with encryption enabled, there is a [known issue](https://docs.cilium.io/en/v1.12/gettingstarted/encryption/#egress-traffic-to-not-yet-discovered-remote-endpoints-may-be-unencrypted) +that can cause pod-to-pod traffic to be unencrypted. +To mitigate this issue, Constellation adds a *strict* mode to Cilium's `pod-to-pod` encryption. +This mode changes the default behavior of traffic that's destined for an unknown endpoint to not be send out in plaintext, but instead being dropped. +The strict mode distinguishes between traffic that's send to a pod from traffic that's destined for a cluster-external endpoint by considering the pod's CIDR range. + +Traffic originating from hosts isn't encrypted yet. +This mainly includes health checks from Kubernetes API server. +Also, traffic proxied over the API server via e.g. `kubectl port-forward` isn't encrypted. diff --git a/docs/versioned_docs/version-2.22/architecture/observability.md b/docs/versioned_docs/version-2.22/architecture/observability.md new file mode 100644 index 000000000..0f4daffd4 --- /dev/null +++ b/docs/versioned_docs/version-2.22/architecture/observability.md @@ -0,0 +1,74 @@ +# Observability + +In Kubernetes, observability is the ability to gain insight into the behavior and performance of applications. +It helps identify and resolve issues more effectively, ensuring stability and performance of Kubernetes workloads, reducing downtime and outages, and improving efficiency. +The "three pillars of observability" are logs, metrics, and traces. + +In the context of Confidential Computing, observability is a delicate subject and needs to be applied such that it doesn't leak any sensitive information. +The following gives an overview of where and how you can apply standard observability tools in Constellation. + +## Cloud resource monitoring + +While inaccessible, Constellation's nodes are still visible as black box VMs to the hypervisor. +Resource consumption, such as memory and CPU utilization, can be monitored from the outside and observed via the cloud platforms directly. +Similarly, other resources, such as storage and network and their respective metrics, are visible via the cloud platform. + +## Metrics + +Metrics are numeric representations of data measured over intervals of time. They're essential for understanding system health and gaining insights using telemetry signals. + +By default, Constellation exposes the [metrics for Kubernetes system components](https://kubernetes.io/docs/concepts/cluster-administration/system-metrics/) inside the cluster. +Similarly, the [etcd metrics](https://etcd.io/docs/v3.5/metrics/) endpoints are exposed inside the cluster. +These [metrics endpoints can be disabled](https://kubernetes.io/docs/concepts/cluster-administration/system-metrics/#disabling-metrics). + +You can collect these cluster-internal metrics via tools such as [Prometheus](https://prometheus.io/) or the [Elastic Stack](https://www.elastic.co/de/elastic-stack/). + +Constellation's CNI Cilium also supports [metrics via Prometheus endpoints](https://docs.cilium.io/en/latest/observability/metrics/). +However, in Constellation, they're disabled by default and must be enabled first. + +## Logs + +Logs represent discrete events that usually describe what's happening with your service. +The payload is an actual message emitted from your system along with a metadata section containing a timestamp, labels, and tracking identifiers. + +### System logs + +Detailed system-level logs are accessible via `/var/log` and [journald](https://www.freedesktop.org/software/systemd/man/systemd-journald.service.html) on the nodes directly. +They can be collected from there, for example, via [Filebeat and Logstash](https://www.elastic.co/guide/en/beats/filebeat/current/logstash-output.html), which are tools of the [Elastic Stack](https://www.elastic.co/de/elastic-stack/). + +In case of an error during the initialization, the CLI automatically collects the [Bootstrapper](./microservices.md#bootstrapper) logs and returns these as a file for [troubleshooting](../workflows/troubleshooting.md). Here is an example of such an event: + +```shell-session +Cluster initialization failed. This error is not recoverable. +Terminate your cluster and try again. +Fetched bootstrapper logs are stored in "constellation-cluster.log" +``` + +### Kubernetes logs + +Constellation supports the [Kubernetes logging architecture](https://kubernetes.io/docs/concepts/cluster-administration/logging/). +By default, logs are written to the nodes' encrypted state disks. +These include the Pod and container logs and the [system component logs](https://kubernetes.io/docs/concepts/cluster-administration/logging/#system-component-logs). + +[Constellation services](microservices.md) run as Pods inside the `kube-system` namespace and use the standard container logging mechanism. +The same applies for the [Cilium Pods](https://docs.cilium.io/en/latest/operations/troubleshooting/#logs). + +You can collect logs from within the cluster via tools such as [Fluentd](https://github.com/fluent/fluentd), [Loki](https://github.com/grafana/loki), or the [Elastic Stack](https://www.elastic.co/de/elastic-stack/). + +## Traces + +Modern systems are implemented as interconnected complex and distributed microservices. Understanding request flows and system communications is challenging, mainly because all systems in a chain need to be modified to propagate tracing information. Distributed tracing is a new approach to increasing observability and understanding performance bottlenecks. A trace represents consecutive events that reflect an end-to-end request path in a distributed system. + +Constellation supports [traces for Kubernetes system components](https://kubernetes.io/docs/concepts/cluster-administration/system-traces/). +By default, they're disabled and need to be enabled first. + +Similarly, Cilium can be enabled to [export traces](https://cilium.io/use-cases/metrics-export/). + +You can collect these traces via tools such as [Jaeger](https://www.jaegertracing.io/) or [Zipkin](https://zipkin.io/). + +## Integrations + +Platforms and SaaS solutions such as Datadog, logz.io, Dynatrace, or New Relic facilitate the observability challenge for Kubernetes and provide all-in-one SaaS solutions. +They install agents into the cluster that collect metrics, logs, and tracing information and upload them into the data lake of the platform. +Technically, the agent-based approach is compatible with Constellation, and attaching these platforms is straightforward. +However, you need to evaluate if the exported data might violate Constellation's compliance and privacy guarantees by uploading them to a third-party platform. diff --git a/docs/versioned_docs/version-2.22/architecture/orchestration.md b/docs/versioned_docs/version-2.22/architecture/orchestration.md new file mode 100644 index 000000000..3c8d529e7 --- /dev/null +++ b/docs/versioned_docs/version-2.22/architecture/orchestration.md @@ -0,0 +1,83 @@ +# Orchestrating Constellation clusters + +You can use the CLI to create a cluster on the supported cloud platforms. +The CLI provisions the resources in your cloud environment and initiates the initialization of your cluster. +It uses a set of parameters and an optional configuration file to manage your cluster installation. +The CLI is also used for updating your cluster. + +## Workspaces + +Each Constellation cluster has an associated *workspace*. +The workspace is where data such as the Constellation state and config files are stored. +Each workspace is associated with a single cluster and configuration. +The CLI stores state in the local filesystem making the current directory the active workspace. +Multiple clusters require multiple workspaces, hence, multiple directories. +Note that every operation on a cluster always has to be performed from the directory associated with its workspace. + +You may copy files from the workspace to other locations, +but you shouldn't move or delete them while the cluster is still being used. +The Constellation CLI takes care of managing the workspace. +Only when a cluster was terminated, and you are sure the files aren't needed anymore, should you remove a workspace. + +## Cluster creation process + +To allow for fine-grained configuration of your cluster and cloud environment, Constellation supports an extensive configuration file with strong defaults. [Generating the configuration file](../workflows/config.md) is typically the first thing you do in the workspace. + +Altogether, the following files are generated during the creation of a Constellation cluster and stored in the current workspace: + +* a configuration file +* a state file +* a Base64-encoded master secret +* [Terraform artifacts](../reference/terraform.md), stored in subdirectories +* a Kubernetes `kubeconfig` file. + +After the initialization of your cluster, the CLI will provide you with a Kubernetes `kubeconfig` file. +This file grants you access to your Kubernetes cluster and configures the [kubectl](https://kubernetes.io/docs/concepts/configuration/organize-cluster-access-kubeconfig/) tool. +In addition, the cluster's [identifier](orchestration.md#post-installation-configuration) is returned and stored in the state file. + +### Creation process details + +1. The CLI `apply` command first creates the confidential VM (CVM) resources in your cloud environment and configures the network +2. Each CVM boots the Constellation node image and measures every component in the boot chain +3. The first microservice launched in each node is the [*Bootstrapper*](microservices.md#bootstrapper) +4. The *Bootstrapper* waits until it either receives an initialization request or discovers an initialized cluster +5. The CLI then connects to the *Bootstrapper* of a selected node, sends the configuration, and initiates the initialization of the cluster +6. The *Bootstrapper* of **that** node [initializes the Kubernetes cluster](microservices.md#bootstrapper) and deploys the other Constellation [microservices](microservices.md) including the [*JoinService*](microservices.md#joinservice) +7. Subsequently, the *Bootstrappers* of the other nodes discover the initialized cluster and send join requests to the *JoinService* +8. As part of the join request each node includes an attestation statement of its boot measurements as authentication +9. The *JoinService* verifies the attestation statements and joins the nodes to the Kubernetes cluster +10. This process is repeated for every node joining the cluster later (e.g., through autoscaling) + +## Post-installation configuration + +Post-installation the CLI provides a configuration for [accessing the cluster using the Kubernetes API](https://kubernetes.io/docs/tasks/administer-cluster/access-cluster-api/). +The `kubeconfig` file provides the credentials and configuration for connecting and authenticating to the API server. +Once configured, orchestrate the Kubernetes cluster via `kubectl`. + +After the initialization, the CLI will present you with a couple of tokens: + +* The [*master secret*](keys.md#master-secret) (stored in the `constellation-mastersecret.json` file by default) +* The [*clusterID*](keys.md#cluster-identity) of your cluster in Base64 encoding + +You can read more about these values and their meaning in the guide on [cluster identity](keys.md#cluster-identity). + +The *master secret* must be kept secret and can be used to [recover your cluster](../workflows/recovery.md). +Instead of managing this secret manually, you can [use your key management solution of choice](keys.md#user-managed-key-management) with Constellation. + +The *clusterID* uniquely identifies a cluster and can be used to [verify your cluster](../workflows/verify-cluster.md). + +## Upgrades + +Constellation images and microservices may need to be upgraded to new versions during the lifetime of a cluster. +Constellation implements a rolling update mechanism ensuring no downtime of the control or data plane. +You can upgrade a Constellation cluster with a single operation by using the CLI. +For step-by-step instructions on how to do this, refer to [Upgrade your cluster](../workflows/upgrade.md). + +### Attestation of upgrades + +With every new image, corresponding measurements are released. +During an update procedure, the CLI provides new measurements to the [JoinService](microservices.md#joinservice) securely. +New measurements for an updated image are automatically pulled and verified by the CLI following the [supply chain security concept](attestation.md#chain-of-trust) of Constellation. +The [attestation section](attestation.md#cluster-facing-attestation) describes in detail how these measurements are then used by the JoinService for the attestation of nodes. + + diff --git a/docs/versioned_docs/version-2.22/architecture/overview.md b/docs/versioned_docs/version-2.22/architecture/overview.md new file mode 100644 index 000000000..386f93b2f --- /dev/null +++ b/docs/versioned_docs/version-2.22/architecture/overview.md @@ -0,0 +1,30 @@ +# Overview + +Constellation is a cloud-based confidential orchestration platform. +The foundation of Constellation is Kubernetes and therefore shares the same technology stack and architecture principles. +To learn more about Constellation and Kubernetes, see [product overview](../overview/product.md). + +## About orchestration and updates + +As a cluster administrator, you can use the [Constellation CLI](orchestration.md) to install and deploy a cluster. +Updates are provided in accordance with the [support policy](versions.md). + +## About microservices and attestation + +Constellation manages the nodes and network in your cluster. All nodes are bootstrapped by the [*Bootstrapper*](microservices.md#bootstrapper). They're verified and authenticated by the [*JoinService*](microservices.md#joinservice) before being added to the cluster and the network. Finally, the entire cluster can be verified via the [*VerificationService*](microservices.md#verificationservice) using [remote attestation](attestation.md). + +## About node images and verified boot + +Constellation comes with operating system images for Kubernetes control-plane and worker nodes. +They're highly optimized for running containerized workloads and specifically prepared for running inside confidential VMs. +You can learn more about [the images](images.md) and how verified boot ensures their integrity during boot and beyond. + +## About key management and cryptographic primitives + +Encryption of data at-rest, in-transit, and in-use is the fundamental building block for confidential computing and Constellation. Learn more about the [keys and cryptographic primitives](keys.md) used in Constellation, [encrypted persistent storage](encrypted-storage.md), and [network encryption](networking.md). + +## About observability + +Observability in Kubernetes refers to the capability to troubleshoot issues using telemetry signals such as logs, metrics, and traces. +In the realm of Confidential Computing, it's crucial that observability aligns with confidentiality, necessitating careful implementation. +Learn more about the [observability capabilities in Constellation](./observability.md). diff --git a/docs/versioned_docs/version-2.22/architecture/versions.md b/docs/versioned_docs/version-2.22/architecture/versions.md new file mode 100644 index 000000000..6f06c011b --- /dev/null +++ b/docs/versioned_docs/version-2.22/architecture/versions.md @@ -0,0 +1,21 @@ +# Versions and support policy + +All components of Constellation use a three-digit version number of the form `v..`. +The components are released in lock step, usually on the first Tuesday of every month. This release primarily introduces new features, but may also include security or performance improvements. The `MINOR` version will be incremented as part of this release. + +Additional `PATCH` releases may be created on demand, to fix security issues or bugs before the next `MINOR` release window. + +New releases are published on [GitHub](https://github.com/edgelesssys/constellation/releases). + +## Kubernetes support policy + +Constellation is aligned to the [version support policy of Kubernetes](https://kubernetes.io/releases/version-skew-policy/#supported-versions), and therefore usually supports the most recent three minor versions. +When a new minor version of Kubernetes is released, support is added to the next Constellation release, and that version then supports four Kubernetes versions. +Subsequent Constellation releases drop support for the oldest (and deprecated) Kubernetes version. + +The following Kubernetes versions are currently supported: + + +* v1.29.15 +* v1.30.11 +* v1.31.7 diff --git a/docs/versioned_docs/version-2.22/getting-started/examples.md b/docs/versioned_docs/version-2.22/getting-started/examples.md new file mode 100644 index 000000000..fded84980 --- /dev/null +++ b/docs/versioned_docs/version-2.22/getting-started/examples.md @@ -0,0 +1,6 @@ +# Examples + +After you [installed the CLI](install.md) and [created your first cluster](first-steps.md), you're ready to deploy applications. Why not start with one of the following examples? +* [Emojivoto](examples/emojivoto.md): a simple but fun web application +* [Online Boutique](examples/online-boutique.md): an e-commerce demo application by Google consisting of 11 separate microservices +* [Horizontal Pod Autoscaling](examples/horizontal-scaling.md): an example demonstrating Constellation's autoscaling capabilities diff --git a/docs/versioned_docs/version-2.22/getting-started/examples/emojivoto.md b/docs/versioned_docs/version-2.22/getting-started/examples/emojivoto.md new file mode 100644 index 000000000..2bbe27917 --- /dev/null +++ b/docs/versioned_docs/version-2.22/getting-started/examples/emojivoto.md @@ -0,0 +1,22 @@ +# Emojivoto +[Emojivoto](https://github.com/BuoyantIO/emojivoto) is a simple and fun application that's well suited to test the basic functionality of your cluster. + + + +emojivoto - Web UI + + + +1. Deploy the application: + ```bash + kubectl apply -k github.com/BuoyantIO/emojivoto/kustomize/deployment + ``` +2. Wait until it becomes available: + ```bash + kubectl wait --for=condition=available --timeout=60s -n emojivoto --all deployments + ``` +3. Forward the web service to your machine: + ```bash + kubectl -n emojivoto port-forward svc/web-svc 8080:80 + ``` +4. Visit [http://localhost:8080](http://localhost:8080) diff --git a/docs/versioned_docs/version-2.22/getting-started/examples/filestash-s3proxy.md b/docs/versioned_docs/version-2.22/getting-started/examples/filestash-s3proxy.md new file mode 100644 index 000000000..b9a394256 --- /dev/null +++ b/docs/versioned_docs/version-2.22/getting-started/examples/filestash-s3proxy.md @@ -0,0 +1,107 @@ + +# Deploying Filestash + +Filestash is a web frontend for different storage backends, including S3. +It's a useful application to showcase s3proxy in action. + +1. Deploy s3proxy as described in [Deployment](../../workflows/s3proxy.md#deployment). +2. Create a deployment file for Filestash with one pod: + +```sh +cat << EOF > "deployment-filestash.yaml" +apiVersion: apps/v1 +kind: Deployment +metadata: + name: filestash +spec: + replicas: 1 + selector: + matchLabels: + app: filestash + template: + metadata: + labels: + app: filestash + spec: + hostAliases: + - ip: $(kubectl get svc s3proxy-service -o=jsonpath='{.spec.clusterIP}') + hostnames: + - "s3.us-east-1.amazonaws.com" + - "s3.us-east-2.amazonaws.com" + - "s3.us-west-1.amazonaws.com" + - "s3.us-west-2.amazonaws.com" + - "s3.eu-north-1.amazonaws.com" + - "s3.eu-south-1.amazonaws.com" + - "s3.eu-south-2.amazonaws.com" + - "s3.eu-west-1.amazonaws.com" + - "s3.eu-west-2.amazonaws.com" + - "s3.eu-west-3.amazonaws.com" + - "s3.eu-central-1.amazonaws.com" + - "s3.eu-central-2.amazonaws.com" + - "s3.ap-northeast-1.amazonaws.com" + - "s3.ap-northeast-2.amazonaws.com" + - "s3.ap-northeast-3.amazonaws.com" + - "s3.ap-east-1.amazonaws.com" + - "s3.ap-southeast-1.amazonaws.com" + - "s3.ap-southeast-2.amazonaws.com" + - "s3.ap-southeast-3.amazonaws.com" + - "s3.ap-southeast-4.amazonaws.com" + - "s3.ap-south-1.amazonaws.com" + - "s3.ap-south-2.amazonaws.com" + - "s3.me-south-1.amazonaws.com" + - "s3.me-central-1.amazonaws.com" + - "s3.il-central-1.amazonaws.com" + - "s3.af-south-1.amazonaws.com" + - "s3.ca-central-1.amazonaws.com" + - "s3.sa-east-1.amazonaws.com" + containers: + - name: filestash + image: machines/filestash:latest + ports: + - containerPort: 8334 + volumeMounts: + - name: ca-cert + mountPath: /etc/ssl/certs/kube-ca.crt + subPath: kube-ca.crt + volumes: + - name: ca-cert + secret: + secretName: s3proxy-tls + items: + - key: ca.crt + path: kube-ca.crt +EOF +``` + +The pod spec includes the `hostAliases` key, which adds an entry to the pod's `/etc/hosts`. +The entry forwards all requests for any of the currently defined AWS regions to the Kubernetes service `s3proxy-service`. +If you followed the s3proxy [Deployment](../../workflows/s3proxy.md#deployment) guide, this service points to a s3proxy pod. + +The deployment specifies all regions explicitly to prevent accidental data leaks. +If one of your buckets were located in a region that's not part of the `hostAliases` key, traffic towards those buckets would not be redirected to s3proxy. +Similarly, if you want to exclude data for specific regions from going through s3proxy you can remove those regions from the deployment. + +The spec also includes a volume mount for the TLS certificate and adds it to the pod's certificate trust store. +The volume is called `ca-cert`. +The key `ca.crt` of that volume is mounted to `/etc/ssl/certs/kube-ca.crt`, which is the default certificate trust store location for that container's OpenSSL library. +Not adding the CA certificate will result in TLS authentication errors. + +3. Apply the file: `kubectl apply -f deployment-filestash.yaml` + +Afterward, you can use a port forward to access the Filestash pod: +`kubectl port-forward pod/$(kubectl get pod --selector='app=filestash' -o=jsonpath='{.items[*].metadata.name}') 8334:8334` + +4. After browsing to `localhost:8443`, Filestash will ask you to set an administrator password. +After setting it, you can directly leave the admin area by clicking the blue cloud symbol in the top left corner. +Subsequently, you can select S3 as storage backend and enter your credentials. +This will bring you to an overview of your buckets. +If you want to deploy Filestash in production, take a look at its [documentation](https://www.filestash.app/docs/). + +5. To see the logs of s3proxy intercepting requests made to S3, run: `kubectl logs -f pod/$(kubectl get pod --selector='app=s3proxy' -o=jsonpath='{.items[*].metadata.name}')` +Look out for log messages labeled `intercepting`. +There is one such log message for each message that's encrypted, decrypted, or blocked. + +6. Once you have uploaded a file with Filestash, you should be able to view the file in Filestash. +However, if you go to the AWS S3 [Web UI](https://s3.console.aws.amazon.com/s3/home) and download the file you just uploaded in Filestash, you won't be able to read it. +Another way to spot encrypted files without downloading them is to click on a file, scroll to the Metadata section, and look for the header named `x-amz-meta-constellation-encryption`. +This header holds the encrypted data encryption key of the object and is only present on objects that are encrypted by s3proxy. diff --git a/docs/versioned_docs/version-2.22/getting-started/examples/horizontal-scaling.md b/docs/versioned_docs/version-2.22/getting-started/examples/horizontal-scaling.md new file mode 100644 index 000000000..dfaf9e742 --- /dev/null +++ b/docs/versioned_docs/version-2.22/getting-started/examples/horizontal-scaling.md @@ -0,0 +1,98 @@ +# Horizontal Pod Autoscaling +This example demonstrates Constellation's autoscaling capabilities. It's based on the Kubernetes [HorizontalPodAutoscaler Walkthrough](https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough/). During the following steps, Constellation will spawn new VMs on demand, verify them, add them to the cluster, and delete them again when the load has settled down. + +## Requirements +The cluster needs to be initialized with Kubernetes 1.23 or later. In addition, [autoscaling must be enabled](../../workflows/scale.md) to enable Constellation to assign new nodes dynamically. + +Just for this example specifically, the cluster should have as few worker nodes in the beginning as possible. Start with a small cluster with only *one* low-powered node for the control-plane node and *one* low-powered worker node. + +:::info +We tested the example using instances of types `Standard_DC4as_v5` on Azure and `n2d-standard-4` on GCP. +::: + +## Setup + +1. Install the Kubernetes Metrics Server: + ```bash + kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml + ``` + +2. Deploy the HPA example server that's supposed to be scaled under load. + + This manifest is similar to the one from the Kubernetes HPA walkthrough, but with increased CPU limits and requests to facilitate the triggering of node scaling events. + ```bash + cat < + +Online Boutique - Web UI + + + +1. Create a namespace: + ```bash + kubectl create ns boutique + ``` +2. Deploy the application: + ```bash + kubectl apply -n boutique -f https://github.com/GoogleCloudPlatform/microservices-demo/raw/main/release/kubernetes-manifests.yaml + ``` +3. Wait for all services to become available: + ```bash + kubectl wait --for=condition=available --timeout=300s -n boutique --all deployments + ``` +4. Get the frontend's external IP address: + ```shell-session + $ kubectl get service frontend-external -n boutique | awk '{print $4}' + EXTERNAL-IP + + ``` + (`` is a placeholder for the IP assigned by your CSP.) +5. Enter the IP from the result in your browser to browse the online shop. diff --git a/docs/versioned_docs/version-2.22/getting-started/first-steps-local.md b/docs/versioned_docs/version-2.22/getting-started/first-steps-local.md new file mode 100644 index 000000000..98f0302de --- /dev/null +++ b/docs/versioned_docs/version-2.22/getting-started/first-steps-local.md @@ -0,0 +1,277 @@ +# First steps with a local cluster + +A local cluster lets you deploy and test Constellation without a cloud subscription. +You have two options: + +* Use MiniConstellation to automatically deploy a two-node cluster. +* For more fine-grained control, create the cluster using the QEMU provider. + +Both options use virtualization to create a local cluster with control-plane nodes and worker nodes. They **don't** require hardware with Confidential VM (CVM) support. For attestation, they currently use a software-based vTPM provided by KVM/QEMU. + +You need an x64 machine with a Linux OS. +You can use a VM, but it needs nested virtualization. + +## Prerequisites + +* Machine requirements: + * An x86-64 CPU with at least 4 cores (6 cores are recommended) + * At least 4 GB RAM (6 GB are recommended) + * 20 GB of free disk space + * Hardware virtualization enabled in the BIOS/UEFI (often referred to as Intel VT-x or AMD-V/SVM) / nested-virtualization support when using a VM +* Software requirements: + * Linux OS with [KVM kernel module](https://www.linux-kvm.org/page/Main_Page) + * Recommended: Ubuntu 22.04 LTS + * [Docker](https://docs.docker.com/engine/install/) + * [xsltproc](https://gitlab.gnome.org/GNOME/libxslt/-/wikis/home) + * (Optional) [virsh](https://www.libvirt.org/manpages/virsh.html) to observe and access your nodes + +### Software installation on Ubuntu + +```bash +# install Docker +curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg +echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null +sudo apt update +sudo apt install docker-ce +# install other dependencies +sudo apt install xsltproc +sudo snap install kubectl --classic +# install Constellation CLI +curl -LO https://github.com/edgelesssys/constellation/releases/latest/download/constellation-linux-amd64 +sudo install constellation-linux-amd64 /usr/local/bin/constellation +# do not drop forwarded packages +sudo iptables -P FORWARD ACCEPT +``` + +## Create a cluster + + + + + +With the `constellation mini` command, you can deploy and test Constellation locally. This mode is called MiniConstellation. Conceptually, MiniConstellation is similar to [MicroK8s](https://microk8s.io/), [K3s](https://k3s.io/), and [minikube](https://minikube.sigs.k8s.io/docs/). + + +:::caution + +MiniConstellation has specific soft- and hardware requirements such as a Linux OS running on an x86-64 CPU. Pay attention to all [prerequisites](#prerequisites) when setting up. + +::: + +:::note + +Since MiniConstellation runs on your local system, cloud features such as load balancing, +attaching persistent storage, or autoscaling aren't available. + +::: + +The following creates your MiniConstellation cluster (may take up to 10 minutes to complete): + +```bash +constellation mini up +``` + +This will configure your current directory as the [workspace](../architecture/orchestration.md#workspaces) for this cluster. +All `constellation` commands concerning this cluster need to be issued from this directory. + + + + +With the QEMU provider, you can create a local Constellation cluster as if it were in the cloud. The provider uses [QEMU](https://www.qemu.org/) to create multiple VMs for the cluster nodes, which interact with each other. + +:::caution + +Constellation on QEMU has specific soft- and hardware requirements such as a Linux OS running on an x86-64 CPU. Pay attention to all [prerequisites](#prerequisites) when setting up. + +::: + +:::note + +Since Constellation on QEMU runs on your local system, cloud features such as load balancing, +attaching persistent storage, or autoscaling aren't available. + +::: + +1. To set up your local cluster, you need to create a configuration file for Constellation first. + + ```bash + constellation config generate qemu + ``` + + This creates a [configuration file](../workflows/config.md) for QEMU called `constellation-conf.yaml`. After that, your current folder also becomes your [workspace](../architecture/orchestration.md#workspaces). All `constellation` commands for your cluster need to be executed from this directory. + +2. Now you can create your cluster and its nodes. `constellation apply` uses the options set in `constellation-conf.yaml`. + + ```bash + constellation apply -y + ``` + + The Output should look like the following: + + ```shell-session + $ constellation apply -y + Checking for infrastructure changes + The following Constellation cluster will be created: + 3 control-plane nodes of type 2-vCPUs will be created. + 1 worker node of type 2-vCPUs will be created. + Creating + Cloud infrastructure created successfully. + Your Constellation master secret was successfully written to ./constellation-mastersecret.json + Connecting + Initializing cluster + Installing Kubernetes components + Your Constellation cluster was successfully initialized. + + Constellation cluster identifier g6iMP5wRU1b7mpOz2WEISlIYSfdAhB0oNaOg6XEwKFY= + Kubernetes configuration constellation-admin.conf + + You can now connect to your cluster by executing: + export KUBECONFIG="$PWD/constellation-admin.conf" + ``` + + The cluster's identifier will be different in your output. + Keep `constellation-mastersecret.json` somewhere safe. + This will allow you to [recover your cluster](../workflows/recovery.md) in case of a disaster. + + :::info + + Depending on your setup, `constellation apply` may take 10+ minutes to complete. + + ::: + +3. Configure kubectl + + ```bash + export KUBECONFIG="$PWD/constellation-admin.conf" + ``` + + + + +## Connect to the cluster + +Your cluster initially consists of a single control-plane node: + +```shell-session +$ kubectl get nodes +NAME STATUS ROLES AGE VERSION +control-plane-0 Ready control-plane 66s v1.24.6 +``` + +Additional nodes will request to join the cluster shortly. Before each additional node is allowed to join the cluster, its state is verified using remote attestation by the [JoinService](../architecture/microservices.md#joinservice). +If verification passes successfully, the new node receives keys and certificates to join the cluster. + +You can follow this process by viewing the logs of the JoinService: + +```shell-session +$ kubectl logs -n kube-system daemonsets/join-service -f +{"level":"INFO","ts":"2022-10-14T09:32:20Z","caller":"cmd/main.go:48","msg":"Constellation Node Join Service","version":"2.1.0","cloudProvider":"qemu"} +{"level":"INFO","ts":"2022-10-14T09:32:20Z","logger":"validator","caller":"watcher/validator.go:96","msg":"Updating expected measurements"} +... +``` + +Once all nodes have joined your cluster, it may take a couple of minutes for all resources to become available. +You can check on the state of your cluster by running the following: + +```shell-session +$ kubectl get nodes +NAME STATUS ROLES AGE VERSION +control-plane-0 Ready control-plane 2m59s v1.24.6 +worker-0 Ready 32s v1.24.6 +``` + +## Deploy a sample application + +1. Deploy the [emojivoto app](https://github.com/BuoyantIO/emojivoto) + + ```bash + kubectl apply -k github.com/BuoyantIO/emojivoto/kustomize/deployment + ``` + +2. Expose the frontend service locally + + ```bash + kubectl wait --for=condition=available --timeout=60s -n emojivoto --all deployments + kubectl -n emojivoto port-forward svc/web-svc 8080:80 & + curl http://localhost:8080 + kill %1 + ``` + +## Terminate your cluster + + + + +Once you are done, you can clean up the created resources using the following command: + +```bash +constellation mini down +``` + +This will destroy your cluster and clean up your workspace. +The VM image and cluster configuration file (`constellation-conf.yaml`) will be kept and may be reused to create new clusters. + + + + +Once you are done, you can clean up the created resources using the following command: + +```bash +constellation terminate +``` + +This should give the following output: + +```shell-session +$ constellation terminate +You are about to terminate a Constellation cluster. +All of its associated resources will be DESTROYED. +This action is irreversible and ALL DATA WILL BE LOST. +Do you want to continue? [y/n]: +``` + +Confirm with `y` to terminate the cluster: + +```shell-session +Terminating ... +Your Constellation cluster was terminated successfully. +``` + +This will destroy your cluster and clean up your workspace. +The VM image and cluster configuration file (`constellation-conf.yaml`) will be kept and may be reused to create new clusters. + + + + +## Troubleshooting + +Make sure to use the [latest release](https://github.com/edgelesssys/constellation/releases/latest) and check out the [known issues](https://github.com/edgelesssys/constellation/issues?q=is%3Aopen+is%3Aissue+label%3A%22known+issue%22). + +### VMs have no internet access / CLI remains in "Initializing cluster" state + +`iptables` rules may prevent your VMs from accessing the internet. +Make sure your rules aren't dropping forwarded packages. + +List your rules: + +```bash +sudo iptables -S +``` + +The output may look similar to the following: + +```shell-session +-P INPUT ACCEPT +-P FORWARD DROP +-P OUTPUT ACCEPT +-N DOCKER +-N DOCKER-ISOLATION-STAGE-1 +-N DOCKER-ISOLATION-STAGE-2 +-N DOCKER-USER +``` + +If your `FORWARD` chain is set to `DROP`, you need to update your rules: + +```bash +sudo iptables -P FORWARD ACCEPT +``` diff --git a/docs/versioned_docs/version-2.22/getting-started/first-steps.md b/docs/versioned_docs/version-2.22/getting-started/first-steps.md new file mode 100644 index 000000000..a6ef2908b --- /dev/null +++ b/docs/versioned_docs/version-2.22/getting-started/first-steps.md @@ -0,0 +1,235 @@ +# First steps with Constellation + +The following steps guide you through the process of creating a cluster and deploying a sample app. This example assumes that you have successfully [installed and set up Constellation](install.md), +and have access to a cloud subscription. + +:::tip +If you don't have a cloud subscription, you can also set up a [local Constellation cluster using virtualization](../getting-started/first-steps-local.md) for testing. +::: + +:::note +If you encounter any problem with the following steps, make sure to use the [latest release](https://github.com/edgelesssys/constellation/releases/latest) and check out the [known issues](https://github.com/edgelesssys/constellation/issues?q=is%3Aopen+is%3Aissue+label%3A%22known+issue%22). +::: + +## Create a cluster + +1. Create the [configuration file](../workflows/config.md) and state file for your cloud provider. If you are following the steps of this guide, there is no need to edit the file. + + + + + ```bash + constellation config generate aws + ``` + + + + + ```bash + constellation config generate azure + ``` + + + + + ```bash + constellation config generate gcp + ``` + + + + + ```bash + constellation config generate stackit + ``` + + + + +2. Create your [IAM configuration](../workflows/config.md#creating-an-iam-configuration). + + + + + ```bash + constellation iam create aws --zone=us-east-2a --prefix=constellTest --update-config + ``` + + This command creates IAM configuration for the AWS zone `us-east-2a` using the prefix `constellTest` for all named resources being created. It also updates the configuration file `constellation-conf.yaml` in your current directory with the IAM values filled in. + + Depending on the attestation variant selected on config generation, different regions are available. + AMD SEV-SNP machines (requires the default attestation variant `awsSEVSNP`) are currently available in the following regions: + * `eu-west-1` + * `us-east-2` + + You can find a list of regions that support AMD SEV-SNP in [AWS's documentation](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/snp-requirements.html). + + NitroTPM machines (requires the attestation variant `awsNitroTPM`) are available in all regions. + Constellation OS images are currently replicated to the following regions: + * `eu-central-1` + * `eu-west-1` + * `eu-west-3` + * `us-east-2` + * `ap-south-1` + + If you require the OS image to be available in another region, [let us know](https://github.com/edgelesssys/constellation/issues/new?assignees=&labels=&template=feature_request.md&title=Support+new+AWS+image+region:+xx-xxxx-x). + + You can find a list of all [regions in AWS's documentation](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-regions-availability-zones.html#concepts-available-regions). + + + + + ```bash + constellation iam create azure --subscriptionID 00000000-0000-0000-0000-000000000000 --region=westus --resourceGroup=constellTest --servicePrincipal=spTest --update-config + ``` + + This command creates IAM configuration on the Azure region `westus` creating a new resource group `constellTest` and a new service principal `spTest`. It also updates the configuration file `constellation-conf.yaml` in your current directory with the IAM values filled in. + + CVMs are available in several Azure regions. Constellation OS images are currently replicated to the following: + + * `germanywestcentral` + * `westus` + * `eastus` + * `northeurope` + * `westeurope` + * `southeastasia` + + If you require the OS image to be available in another region, [let us know](https://github.com/edgelesssys/constellation/issues/new?assignees=&labels=&template=feature_request.md&title=Support+new+Azure+image+region:+xx-xxxx-x). + + You can find a list of all [regions in Azure's documentation](https://azure.microsoft.com/en-us/global-infrastructure/services/?products=virtual-machines®ions=all). + + + + + ```bash + constellation iam create gcp --projectID=yourproject-12345 --zone=europe-west2-a --prefix=constell-test --update-config + ``` + + This command creates IAM configuration in the GCP project `yourproject-12345` on the GCP zone `europe-west2-a` creating a new service account `constell-test`. It also updates the configuration file `constellation-conf.yaml` in your current directory with the IAM values filled in. + + Note that only regions offering CVMs of the `C2D` or `N2D` series are supported. You can find a [list of all regions in Google's documentation](https://cloud.google.com/compute/docs/regions-zones#available), which you can filter by machine type `C2D` or `N2D`. + + + + + To use Constellation on STACKIT, the cluster will use the User Access Token (UAT) that's generated [during the install step](./install.md). + After creating the accounts, fill in the STACKIT details in `constellation-conf.yaml` under `provider.openstack`: + + * `stackitProjectID`: STACKIT project id (can be found after login on the [STACKIT portal](https://portal.stackit.cloud)) + + :::caution + + `stackitProjectID` refers to the ID of your STACKIT project. The STACKIT portal also shows the OpenStack ID that's associated with your project in some places. Make sure you insert the STACKIT project ID in the `constellation-conf.yaml` file. It's of the format `XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX`. + + ::: + + + + + :::tip + To learn about all options you have for managing IAM resources and Constellation configuration, see the [Configuration workflow](../workflows/config.md). + ::: + + + +3. Create the cluster. `constellation apply` uses options set in `constellation-conf.yaml`. + If you want to manually manage your cloud resources, for example by using [Terraform](../reference/terraform.md), follow the corresponding instructions in the [Create workflow](../workflows/create.md). + + :::tip + + On Azure, you may need to wait 15+ minutes at this point for role assignments to propagate. + + ::: + + ```bash + constellation apply -y + ``` + + This should look similar to the following: + + ```shell-session + $ constellation apply -y + Checking for infrastructure changes + The following Constellation cluster will be created: + 3 control-plane nodes of type n2d-standard-4 will be created. + 1 worker node of type n2d-standard-4 will be created. + Creating + Cloud infrastructure created successfully + Your Constellation master secret was successfully written to ./constellation-mastersecret.json + Connecting + Initializing cluster + Installing Kubernetes components + Your Constellation cluster was successfully initialized. + + Constellation cluster identifier g6iMP5wRU1b7mpOz2WEISlIYSfdAhB0oNaOg6XEwKFY= + Kubernetes configuration constellation-admin.conf + + You can now connect to your cluster by executing: + export KUBECONFIG="$PWD/constellation-admin.conf" + ``` + + The cluster's identifier will be different in your output. + Keep `constellation-mastersecret.json` somewhere safe. + This will allow you to [recover your cluster](../workflows/recovery.md) in case of a disaster. + + :::info + + Depending on your CSP and region, `constellation apply` may take 10+ minutes to complete. + + ::: + +4. Configure kubectl. + + ```bash + export KUBECONFIG="$PWD/constellation-admin.conf" + ``` + +## Deploy a sample application + +1. Deploy the [emojivoto app](https://github.com/BuoyantIO/emojivoto) + + ```bash + kubectl apply -k github.com/BuoyantIO/emojivoto/kustomize/deployment + ``` + +2. Expose the frontend service locally + + ```bash + kubectl wait --for=condition=available --timeout=60s -n emojivoto --all deployments + kubectl -n emojivoto port-forward svc/web-svc 8080:80 & + curl http://localhost:8080 + kill %1 + ``` + +## Terminate your cluster + +Use the CLI to terminate your cluster. If you manually used [Terraform](../reference/terraform.md) to manage your cloud resources, follow the corresponding instructions in the [Terminate workflow](../workflows/terminate.md). + +```bash +constellation terminate +``` + +This should give the following output: + +```shell-session +$ constellation terminate +You are about to terminate a Constellation cluster. +All of its associated resources will be DESTROYED. +This action is irreversible and ALL DATA WILL BE LOST. +Do you want to continue? [y/n]: +``` + +Confirm with `y` to terminate the cluster: + +```shell-session +Terminating ... +Your Constellation cluster was terminated successfully. +``` + +Optionally, you can also [delete your IAM resources](../workflows/config.md#deleting-an-iam-configuration). diff --git a/docs/versioned_docs/version-2.22/getting-started/install.md b/docs/versioned_docs/version-2.22/getting-started/install.md new file mode 100644 index 000000000..f120b865a --- /dev/null +++ b/docs/versioned_docs/version-2.22/getting-started/install.md @@ -0,0 +1,442 @@ +# Installation and setup + +Constellation runs entirely in your cloud environment and can be controlled via a dedicated [command-line interface (CLI)](../reference/cli.md) or a [Terraform provider](../workflows/terraform-provider.md). + +## Prerequisites + +Make sure the following requirements are met: + +* Your machine is running Linux, macOS, or Windows +* You have admin rights on your machine +* [kubectl](https://kubernetes.io/docs/tasks/tools/) is installed +* Your CSP is Amazon Web Services (AWS), Microsoft Azure, Google Cloud Platform (GCP), or STACKIT + +## Install the Constellation CLI + +:::tip + +If you prefer to use Terraform, you can alternatively use the [Terraform provider](../workflows/terraform-provider.md) to manage the cluster's lifecycle. + +::: + +The CLI executable is available at [GitHub](https://github.com/edgelesssys/constellation/releases). +Install it with the following commands: + + + + +1. Download the CLI: + +```bash +curl -LO https://github.com/edgelesssys/constellation/releases/latest/download/constellation-linux-amd64 +``` + +2. [Verify the signature](../workflows/verify-cli.md) (optional) + +3. Install the CLI to your PATH: + +```bash +sudo install constellation-linux-amd64 /usr/local/bin/constellation +``` + + + + +1. Download the CLI: + +```bash +curl -LO https://github.com/edgelesssys/constellation/releases/latest/download/constellation-linux-arm64 +``` + +2. [Verify the signature](../workflows/verify-cli.md) (optional) + +3. Install the CLI to your PATH: + +```bash +sudo install constellation-linux-arm64 /usr/local/bin/constellation +``` + + + + + +1. Download the CLI: + +```bash +curl -LO https://github.com/edgelesssys/constellation/releases/latest/download/constellation-darwin-arm64 +``` + +2. [Verify the signature](../workflows/verify-cli.md) (optional) + +3. Install the CLI to your PATH: + +```bash +sudo install constellation-darwin-arm64 /usr/local/bin/constellation +``` + + + + + +1. Download the CLI: + +```bash +curl -LO https://github.com/edgelesssys/constellation/releases/latest/download/constellation-darwin-amd64 +``` + +2. [Verify the signature](../workflows/verify-cli.md) (optional) + +3. Install the CLI to your PATH: + +```bash +sudo install constellation-darwin-amd64 /usr/local/bin/constellation +``` + + + + + +1. Download the CLI: + +```bash +Invoke-WebRequest -OutFile ./constellation.exe -Uri 'https://github.com/edgelesssys/constellation/releases/latest/download/constellation-windows-amd64.exe' +``` + +2. [Verify the signature](../workflows/verify-cli.md) (optional) + +3. Install the CLI under `C:\Program Files\Constellation\bin\constellation.exe` + +3. Add the CLI to your PATH: + + 1. Open `Advanced system settings` by searching for the App in the Windows search + 2. Go to the `Advanced` tab + 3. Click `Environment Variables…` + 4. Click variable called `Path` and click `Edit…` + 5. Click `New` + 6. Enter the path to the folder containing the binary you want on your PATH: `C:\Program Files\Constellation\bin` + + + + +:::tip +The CLI supports autocompletion for various shells. To set it up, run `constellation completion` and follow the given steps. +::: + +## Set up cloud credentials + +Constellation makes authenticated calls to the CSP API. Therefore, you need to set up Constellation with the credentials for your CSP. + +:::tip +If you don't have a cloud subscription, you can also set up a [local Constellation cluster using virtualization](../getting-started/first-steps-local.md) for testing. +::: + +### Required permissions + + + + +To set up a Constellation cluster, you need to perform two tasks that require permissions: create the infrastructure and create roles for cluster nodes. Both of these actions can be performed by different users, e.g., an administrator to create roles and a DevOps engineer to create the infrastructure. + +To [create the IAM configuration](../workflows/config.md#creating-an-iam-configuration) for Constellation, you need the following permissions: + +```json +{ + "Version": "2012-10-17", + "Statement": [ + { + "Effect": "Allow", + "Action": [ + "ec2:DescribeAccountAttributes", + "iam:AddRoleToInstanceProfile", + "iam:AttachRolePolicy", + "iam:CreateInstanceProfile", + "iam:CreatePolicy", + "iam:CreateRole", + "iam:DeleteInstanceProfile", + "iam:DeletePolicy", + "iam:DeletePolicyVersion", + "iam:DeleteRole", + "iam:DetachRolePolicy", + "iam:GetInstanceProfile", + "iam:GetPolicy", + "iam:GetPolicyVersion", + "iam:GetRole", + "iam:ListAttachedRolePolicies", + "iam:ListInstanceProfilesForRole", + "iam:ListPolicyVersions", + "iam:ListRolePolicies", + "iam:PassRole", + "iam:RemoveRoleFromInstanceProfile", + "sts:GetCallerIdentity" + ], + "Resource": "*" + } + ] +} +``` + +The built-in `AdministratorAccess` policy is a superset of these permissions. + +To [create a Constellation cluster](../workflows/create.md), see the permissions of [main.tf](https://github.com/edgelesssys/constellation/blob/main/terraform/infrastructure/iam/aws/main.tf). + +The built-in `PowerUserAccess` policy is a superset of these permissions. + +Follow Amazon's guide on [understanding](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html) and [managing policies](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html). + + + + +The following [resource providers need to be registered](https://learn.microsoft.com/en-us/azure/azure-resource-manager/management/resource-providers-and-types#register-resource-provider) in your subscription: + +* `Microsoft.Attestation` +* `Microsoft.Compute` +* `Microsoft.Insights` +* `Microsoft.ManagedIdentity` +* `Microsoft.Network` + +By default, Constellation tries to register these automatically if they haven't been registered before. + +To [create the IAM configuration](../workflows/config.md#creating-an-iam-configuration) for Constellation, you need the following permissions: + +* `*/register/action` \[1] +* `Microsoft.Authorization/roleAssignments/*` +* `Microsoft.Authorization/roleDefinitions/*` +* `Microsoft.ManagedIdentity/userAssignedIdentities/*` +* `Microsoft.Resources/subscriptions/resourcegroups/*` + +The built-in `Owner` role is a superset of these permissions. + +To [create a Constellation cluster](../workflows/create.md), you need the following permissions: + +* `Microsoft.Attestation/attestationProviders/*` +* `Microsoft.Compute/virtualMachineScaleSets/*` +* `Microsoft.Insights/components/*` +* `Microsoft.ManagedIdentity/userAssignedIdentities/*` +* `Microsoft.Network/loadBalancers/*` +* `Microsoft.Network/loadBalancers/backendAddressPools/*` +* `Microsoft.Network/networkSecurityGroups/*` +* `Microsoft.Network/publicIPAddresses/*` +* `Microsoft.Network/virtualNetworks/*` +* `Microsoft.Network/virtualNetworks/subnets/*` +* `Microsoft.Network/natGateways/*` + +The built-in `Contributor` role is a superset of these permissions. + +Follow Microsoft's guide on [understanding](https://learn.microsoft.com/en-us/azure/role-based-access-control/role-definitions) and [assigning roles](https://learn.microsoft.com/en-us/azure/role-based-access-control/role-assignments). + +1: You can omit `*/register/Action` if the resource providers mentioned above are already registered and the `ARM_SKIP_PROVIDER_REGISTRATION` environment variable is set to `true` when creating the IAM configuration. + + + + +Create a new project for Constellation or use an existing one. +Enable the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com) on it. + +To [create the IAM configuration](../workflows/config.md#creating-an-iam-configuration) for Constellation, you need the following permissions: + +* `iam.roles.create` +* `iam.roles.delete` +* `iam.roles.get` +* `iam.serviceAccountKeys.create` +* `iam.serviceAccountKeys.delete` +* `iam.serviceAccountKeys.get` +* `iam.serviceAccounts.create` +* `iam.serviceAccounts.delete` +* `iam.serviceAccounts.get` +* `resourcemanager.projects.getIamPolicy` +* `resourcemanager.projects.setIamPolicy` + +Together, the built-in roles `roles/editor` and `roles/resourcemanager.projectIamAdmin` form a superset of these permissions. + +To [create a Constellation cluster](../workflows/create.md), you need the following permissions: + +* `compute.addresses.createInternal` +* `compute.addresses.deleteInternal` +* `compute.addresses.get` +* `compute.addresses.useInternal` +* `compute.backendServices.create` +* `compute.backendServices.delete` +* `compute.backendServices.get` +* `compute.backendServices.use` +* `compute.disks.create` +* `compute.firewalls.create` +* `compute.firewalls.delete` +* `compute.firewalls.get` +* `compute.firewalls.update` +* `compute.globalAddresses.create` +* `compute.globalAddresses.delete` +* `compute.globalAddresses.get` +* `compute.globalAddresses.use` +* `compute.globalForwardingRules.create` +* `compute.globalForwardingRules.delete` +* `compute.globalForwardingRules.get` +* `compute.globalForwardingRules.setLabels` +* `compute.globalOperations.get` +* `compute.healthChecks.create` +* `compute.healthChecks.delete` +* `compute.healthChecks.get` +* `compute.healthChecks.useReadOnly` +* `compute.instanceGroupManagers.create` +* `compute.instanceGroupManagers.delete` +* `compute.instanceGroupManagers.get` +* `compute.instanceGroupManagers.update` +* `compute.instanceGroups.create` +* `compute.instanceGroups.delete` +* `compute.instanceGroups.get` +* `compute.instanceGroups.update` +* `compute.instanceGroups.use` +* `compute.instances.create` +* `compute.instances.setLabels` +* `compute.instances.setMetadata` +* `compute.instances.setTags` +* `compute.instanceTemplates.create` +* `compute.instanceTemplates.delete` +* `compute.instanceTemplates.get` +* `compute.instanceTemplates.useReadOnly` +* `compute.networks.create` +* `compute.networks.delete` +* `compute.networks.get` +* `compute.networks.updatePolicy` +* `compute.routers.create` +* `compute.routers.delete` +* `compute.routers.get` +* `compute.routers.update` +* `compute.subnetworks.create` +* `compute.subnetworks.delete` +* `compute.subnetworks.get` +* `compute.subnetworks.use` +* `compute.targetTcpProxies.create` +* `compute.targetTcpProxies.delete` +* `compute.targetTcpProxies.get` +* `compute.targetTcpProxies.use` +* `iam.serviceAccounts.actAs` + +Together, the built-in roles `roles/editor`, `roles/compute.instanceAdmin` and `roles/resourcemanager.projectIamAdmin` form a superset of these permissions. + +Follow Google's guide on [understanding](https://cloud.google.com/iam/docs/understanding-roles) and [assigning roles](https://cloud.google.com/iam/docs/granting-changing-revoking-access). + + + + +Constellation on STACKIT requires a User Access Token (UAT) for the OpenStack API and a STACKIT service account. +The UAT already has all required permissions by default. +The STACKIT service account needs the `editor` role to create STACKIT LoadBalancers. +Look at the [STACKIT documentation](https://docs.stackit.cloud/stackit/en/getting-started-in-service-accounts-134415831.html) on how to create the service account and assign the role. + + + + +### Authentication + +You need to authenticate with your CSP. The following lists the required steps for *testing* and *production* environments. + +:::note +The steps for a *testing* environment are simpler. However, they may expose secrets to the CSP. If in doubt, follow the *production* steps. +::: + + + + +**Testing** + +You can use the [AWS CloudShell](https://console.aws.amazon.com/cloudshell/home). Make sure you are [authorized to use it](https://docs.aws.amazon.com/cloudshell/latest/userguide/sec-auth-with-identities.html). + +**Production** + +Use the latest version of the [AWS CLI](https://aws.amazon.com/cli/) on a trusted machine: + +```bash +aws configure +``` + +Options and first steps are described in the [AWS CLI documentation](https://docs.aws.amazon.com/cli/index.html). + + + + +**Testing** + +Simply open the [Azure Cloud Shell](https://docs.microsoft.com/en-us/azure/cloud-shell/overview). + +**Production** + +Use the latest version of the [Azure CLI](https://docs.microsoft.com/en-us/cli/azure/) on a trusted machine: + +```bash +az login +``` + +Other options are described in Azure's [authentication guide](https://docs.microsoft.com/en-us/cli/azure/authenticate-azure-cli). + + + + +**Testing** + +You can use the [Google Cloud Shell](https://cloud.google.com/shell). Make sure your [session is authorized](https://cloud.google.com/shell/docs/auth). For example, execute `gsutil` and accept the authorization prompt. + +**Production** + +Use one of the following options on a trusted machine: + +* Use the [`gcloud` CLI](https://cloud.google.com/sdk/gcloud) + + ```bash + gcloud auth application-default login + ``` + + This will ask you to log-in to your Google account and create your credentials. + The Constellation CLI will automatically load these credentials when needed. + +* Set up a service account and pass the credentials manually + + Follow [Google's guide](https://cloud.google.com/docs/authentication/production#manually) for setting up your credentials. + + + + +You need to authenticate with the infrastructure API (OpenStack) and create a service account (STACKIT API). + +1. [Follow the STACKIT documentation](https://docs.stackit.cloud/stackit/en/step-1-generating-of-user-access-token-11763726.html) for obtaining a User Access Token (UAT) to use the infrastructure API +2. Create a configuration file with the credentials from the User Access Token under: + * Linux: `~/.config/openstack/clouds.yaml` + * macOS: `/Users//Library/Application Support/openstack/clouds.yaml` or `/etc/openstack/clouds.yaml` + * Windows: `%AppData%\openstack\clouds.yaml` + + + ```yaml + clouds: + stackit: + auth: + auth_url: https://keystone.api.iaas.eu01.stackit.cloud/v3 + username: REPLACE_WITH_UAT_USERNAME + password: REPLACE_WITH_UAT_PASSWORD + project_id: REPLACE_WITH_OPENSTACK_PROJECT_ID + project_name: REPLACE_WITH_STACKIT_PROJECT_NAME + user_domain_name: portal_mvp + project_domain_name: portal_mvp + region_name: RegionOne + identity_api_version: 3 + ``` + +:::caution + +`project_id` refers to the ID of your OpenStack project. The STACKIT portal also shows the STACKIT ID that's associated with your project in some places. Make sure you insert the OpenStack project ID in the `clouds.yaml` file. + +::: + +3. [Follow the STACKIT documentation](https://docs.stackit.cloud/stackit/en/getting-started-in-service-accounts-134415831.html) for creating a service account and an access token +4. Assign the `editor` role to the service account by [following the documentation](https://docs.stackit.cloud/stackit/en/getting-started-in-service-accounts-134415831.html) +5. Create a configuration file under `~/.stackit/credentials.json` (`%USERPROFILE%\.stackit\credentials.json` on Windows) + + ```json + {"STACKIT_SERVICE_ACCOUNT_TOKEN":"REPLACE_WITH_TOKEN"} + ``` + + + + + +## Next steps + +You are now ready to [deploy your first confidential Kubernetes cluster and application](first-steps.md). diff --git a/docs/versioned_docs/version-2.22/getting-started/marketplaces.md b/docs/versioned_docs/version-2.22/getting-started/marketplaces.md new file mode 100644 index 000000000..a6763a42a --- /dev/null +++ b/docs/versioned_docs/version-2.22/getting-started/marketplaces.md @@ -0,0 +1,56 @@ +# Using Constellation via Cloud Marketplaces + +Constellation is available through the Marketplaces of AWS, Azure, GCP, and STACKIT. This allows you to create self-managed Constellation clusters that are billed on a pay-per-use basis (hourly, per vCPU) with your CSP account. You can still get direct support by Edgeless Systems. For more information, please [contact us](https://www.edgeless.systems/enterprise-support/). + +This document explains how to run Constellation with the dynamically billed cloud marketplace images. + + + + +To use Constellation's marketplace images, ensure that you are subscribed to the [marketplace offering](https://aws.amazon.com/marketplace/pp/prodview-2mbn65nv57oys) through the web portal. + +Then, enable the use of marketplace images in your Constellation `constellation-conf.yaml` [config file](../workflows/config.md): + +```bash +yq eval -i ".provider.aws.useMarketplaceImage = true" constellation-conf.yaml +``` + + + + +Constellation has a private marketplace plan. Please [contact us](https://www.edgeless.systems/enterprise-support/) to gain access. + +To use a marketplace image, you need to accept the marketplace image's terms once for your subscription with the [Azure CLI](https://learn.microsoft.com/en-us/cli/azure/vm/image/terms?view=azure-cli-latest): + +```bash +az vm image terms accept --publisher edgelesssystems --offer constellation --plan constellation +``` + +Then, enable the use of marketplace images in your Constellation `constellation-conf.yaml` [config file](../workflows/config.md): + +```bash +yq eval -i ".provider.azure.useMarketplaceImage = true" constellation-conf.yaml +``` + + + + +To use a marketplace image, ensure that the account is entitled to use marketplace images by Edgeless Systems by accepting the terms through the [web portal](https://console.cloud.google.com/marketplace/vm/config/edgeless-systems-public/constellation). + +Then, enable the use of marketplace images in your Constellation `constellation-conf.yaml` [config file](../workflows/config.md): + +```bash +yq eval -i ".provider.gcp.useMarketplaceImage = true" constellation-conf.yaml +``` + + + + +On STACKIT, the selected Constellation image is always a marketplace image. You can find more information on the STACKIT portal. + + + + +Ensure that the cluster uses an official release image version (i.e., `.image=vX.Y.Z` in the `constellation-conf.yaml` file). + +From there, you can proceed with the [cluster creation](../workflows/create.md) as usual. diff --git a/docs/versioned_docs/version-2.22/intro.md b/docs/versioned_docs/version-2.22/intro.md new file mode 100644 index 000000000..0bfe86da9 --- /dev/null +++ b/docs/versioned_docs/version-2.22/intro.md @@ -0,0 +1,34 @@ +--- +slug: / +id: intro +--- +# Introduction + +Welcome to the documentation of Constellation! Constellation is a Kubernetes engine that aims to provide the best possible data security. + +![Constellation concept](/img/concept.svg) + + Constellation shields your entire Kubernetes cluster from the underlying cloud infrastructure. Everything inside is always encrypted, including at runtime in memory. For this, Constellation leverages a technology called *confidential computing* and more specifically Confidential VMs. + +:::tip +See the 📄[whitepaper](https://content.edgeless.systems/hubfs/Confidential%20Computing%20Whitepaper.pdf) for more information on confidential computing. +::: + +## Goals + +From a security perspective, Constellation is designed to keep all data always encrypted and to prevent any access from the underlying (cloud) infrastructure. This includes access from datacenter employees, privileged cloud admins, and attackers coming through the infrastructure. Such attackers could be malicious co-tenants escalating their privileges or hackers who managed to compromise a cloud server. + +From a DevOps perspective, Constellation is designed to work just like what you would expect from a modern Kubernetes engine. + +## Use cases + +Constellation provides unique security [features](overview/confidential-kubernetes.md) and [benefits](overview/security-benefits.md). The core use cases are: + +* Increasing the overall security of your clusters +* Increasing the trustworthiness of your SaaS offerings +* Moving sensitive workloads from on-prem to the cloud +* Meeting regulatory requirements + +## Next steps + +You can learn more about the concept of Confidential Kubernetes, features, security benefits, and performance of Constellation in the *Basics* section. To jump right into the action head to *Getting started*. diff --git a/docs/versioned_docs/version-2.22/overview/clouds.md b/docs/versioned_docs/version-2.22/overview/clouds.md new file mode 100644 index 000000000..b2695d28e --- /dev/null +++ b/docs/versioned_docs/version-2.22/overview/clouds.md @@ -0,0 +1,66 @@ +# Feature status of clouds + +What works on which cloud? Currently, Confidential VMs (CVMs) are available in varying quality on the different clouds and software stacks. + +For Constellation, the ideal environment provides the following: + +1. Ability to run arbitrary software and images inside CVMs +2. CVMs based on AMD SEV-SNP (available in EPYC CPUs since the Milan generation) or Intel TDX (available in Xeon CPUs since the Sapphire Rapids generation) +3. Ability for CVM guests to obtain raw hardware attestation statements +4. Reviewable, open-source firmware inside CVMs +5. Capability of the firmware to attest the integrity of the code it passes control to, e.g., with an embedded virtual TPM (vTPM) + +(1) is a functional must-have. (2)--(5) are required for remote attestation that fully keeps the infrastructure/cloud out. Constellation can work without them or with approximations, but won't protect against certain privileged attackers anymore. + +The following table summarizes the state of features for different infrastructures. + +| **Feature** | **AWS** | **Azure** | **GCP** | **STACKIT** | **OpenStack (Yoga)** | +|-----------------------------------|---------|-----------|---------|--------------|----------------------| +| **1. Custom images** | Yes | Yes | Yes | Yes | Yes | +| **2. SEV-SNP or TDX** | Yes | Yes | Yes | No | Depends on kernel/HV | +| **3. Raw guest attestation** | Yes | Yes | Yes | No | Depends on kernel/HV | +| **4. Reviewable firmware** | Yes | No* | No | No | Depends on kernel/HV | +| **5. Confidential measured boot** | No | Yes | No | No | Depends on kernel/HV | + +## Amazon Web Services (AWS) + +Amazon EC2 [supports AMD SEV-SNP](https://aws.amazon.com/de/about-aws/whats-new/2023/04/amazon-ec2-amd-sev-snp/). +Regarding (3), AWS provides direct access to attestation statements. +However, regarding (5), attestation is partially based on the [NitroTPM](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/nitrotpm.html) for [measured boot](../architecture/attestation.md#measured-boot), which is a vTPM managed by the Nitro hypervisor. +Hence, the hypervisor is currently part of Constellation's TCB. +Regarding (4), the [firmware is open source](https://github.com/aws/uefi) and can be reproducibly built. + +## Microsoft Azure + +With its [CVM offering](https://docs.microsoft.com/en-us/azure/confidential-computing/confidential-vm-overview), Azure provides the best foundations for Constellation. +Regarding (3), Azure provides direct access to attestation statements. +The firmware runs in an isolated domain inside the CVM and exposes a vTPM (5), but it's closed source (4). +On SEV-SNP, Azure uses VM Privilege Level (VMPL) isolation for the separation of firmware and the rest of the VM; on TDX, they use TD partitioning. +This firmware is signed by Azure. +The signature is reflected in the attestation statements of CVMs. +Thus, the Azure closed-source firmware becomes part of Constellation's trusted computing base (TCB). + +\* Recently, [Azure announced the open source paravisor OpenHCL](https://techcommunity.microsoft.com/blog/windowsosplatform/openhcl-the-new-open-source-paravisor/4273172). It's the foundation for fully open source and verifiable CVM firmware. Once Azure provides their CVM firmware with reproducible builds based on OpenHCL, (4) switches from *No* to *Yes*. Constellation will support OpenHCL based firmware on Azure in the future. + +## Google Cloud Platform (GCP) + +The [CVMs Generally Available in GCP](https://cloud.google.com/confidential-computing/confidential-vm/docs/confidential-vm-overview#technologies) are based on AMD SEV-ES or SEV-SNP. +Regarding (3), with their SEV-SNP offering Google provides direct access to attestation statements. +However, regarding (5), attestation is partially based on the [Shielded VM vTPM](https://cloud.google.com/compute/shielded-vm/docs/shielded-vm#vtpm) for [measured boot](../architecture/attestation.md#measured-boot), which is a vTPM managed by Google's hypervisor. +Hence, the hypervisor is currently part of Constellation's TCB. +Regarding (4), the CVMs still include closed-source firmware. + +[TDX on Google](https://cloud.google.com/blog/products/identity-security/confidential-vms-on-intel-cpus-your-datas-new-intelligent-defense) is in public preview. +With it, Constellation would have a similar TCB and attestation flow as with the current SEV-SNP offering. + +## STACKIT + +[STACKIT Compute Engine](https://www.stackit.de/en/product/stackit-compute-engine/) supports AMD SEV-ES. A vTPM is used for measured boot, which is a vTPM managed by STACKIT's hypervisor. Hence, the hypervisor is currently part of Constellation's TCB. + +## OpenStack + +OpenStack is an open-source cloud and infrastructure management software. It's used by many smaller CSPs and datacenters. In the latest *Yoga* version, OpenStack has basic support for CVMs. However, much depends on the employed kernel and hypervisor. Features (2)--(4) are likely to be a *Yes* with Linux kernel version 6.2. Thus, going forward, OpenStack on corresponding AMD or Intel hardware will be a viable underpinning for Constellation. + +## Conclusion + +The different clouds and software like the Linux kernel and OpenStack are in the process of building out their support for state-of-the-art CVMs. Azure has already most features in place. For Constellation, the status quo means that the TCB has different shapes on different infrastructures. With broad SEV-SNP support coming to the Linux kernel, we soon expect a normalization of features across infrastructures. diff --git a/docs/versioned_docs/version-2.22/overview/confidential-kubernetes.md b/docs/versioned_docs/version-2.22/overview/confidential-kubernetes.md new file mode 100644 index 000000000..bff8c3322 --- /dev/null +++ b/docs/versioned_docs/version-2.22/overview/confidential-kubernetes.md @@ -0,0 +1,42 @@ +# Confidential Kubernetes + +We use the term *Confidential Kubernetes* to refer to the concept of using confidential-computing technology to shield entire Kubernetes clusters from the infrastructure. The three defining properties of this concept are: + +1. **Workload shielding**: the confidentiality and integrity of all workload-related data and code are enforced. +2. **Control plane shielding**: the confidentiality and integrity of the cluster's control plane, state, and workload configuration are enforced. +3. **Attestation and verifiability**: the two properties above can be verified remotely based on hardware-rooted cryptographic certificates. + +Each of the above properties is equally important. Only with all three in conjunction, an entire cluster can be shielded without gaps. + +## Constellation security features + +Constellation implements the Confidential Kubernetes concept with the following security features. + +* **Runtime encryption**: Constellation runs all Kubernetes nodes inside Confidential VMs (CVMs). This gives runtime encryption for the entire cluster. +* **Network and storage encryption**: Constellation augments this with transparent encryption of the [network](../architecture/networking.md), [persistent storage](../architecture/encrypted-storage.md), and other managed storage like [AWS S3](../architecture/encrypted-storage.md#encrypted-s3-object-storage). Thus, workloads and control plane are truly end-to-end encrypted: at rest, in transit, and at runtime. +* **Transparent key management**: Constellation manages the corresponding [cryptographic keys](../architecture/keys.md) inside CVMs. +* **Node attestation and verification**: Constellation verifies the integrity of each new CVM-based node using [remote attestation](../architecture/attestation.md). Only "good" nodes receive the cryptographic keys required to access the network and storage of a cluster. +* **Confidential computing-optimized images**: A node is "good" if it's running a signed Constellation [node image](../architecture/images.md) inside a CVM and is in the expected state. (Node images are hardware-measured during boot. The measurements are reflected in the attestation statements that are produced by nodes and verified by Constellation.) +* **"Whole cluster" attestation**: Towards the DevOps engineer, Constellation provides a single hardware-rooted certificate from which all of the above can be verified. + +With the above, Constellation wraps an entire cluster into one coherent and verifiable *confidential context*. The concept is depicted in the following. + +![Confidential Kubernetes](../_media/concept-constellation.svg) + +## Comparison: Managed Kubernetes with CVMs + +In comparison, managed Kubernetes with CVMs, as it's for example offered in [AKS](https://azure.microsoft.com/en-us/services/kubernetes-service/) and [GKE](https://cloud.google.com/kubernetes-engine), only provides runtime encryption for certain worker nodes. Here, each worker node is a separate (and typically unverified) confidential context. This only provides limited security benefits as it only prevents direct access to a worker node's memory. The large majority of potential attacks through the infrastructure remain unaffected. This includes attacks through the control plane, access to external key management, and the corruption of worker node images. This leaves many problems unsolved. For instance, *Node A* has no means to verify if *Node B* is "good" and if it's OK to share data with it. Consequently, this approach leaves a large attack surface, as is depicted in the following. + +![Concept: Managed Kubernetes plus CVMs](../_media/concept-managed.svg) + +The following table highlights the key differences in terms of features. + +| | Managed Kubernetes with CVMs | Confidential Kubernetes (Constellation✨) | +|-------------------------------------|------------------------------|--------------------------------------------| +| Runtime encryption | Partial (data plane only)| **Yes** | +| Node image verification | No | **Yes** | +| Full cluster attestation | No | **Yes** | +| Transparent network encryption | No | **Yes** | +| Transparent storage encryption | No | **Yes** | +| Confidential key management | No | **Yes** | +| Cloud agnostic / multi-cloud | No | **Yes** | diff --git a/docs/versioned_docs/version-2.22/overview/license.md b/docs/versioned_docs/version-2.22/overview/license.md new file mode 100644 index 000000000..34122c025 --- /dev/null +++ b/docs/versioned_docs/version-2.22/overview/license.md @@ -0,0 +1,33 @@ +# License + +## Source code + +Constellation's source code is available on [GitHub](https://github.com/edgelesssys/constellation) under the [GNU Affero General Public License v3.0](https://github.com/edgelesssys/constellation/blob/main/LICENSE). + +## Binaries + +Edgeless Systems provides ready-to-use and [signed](../architecture/attestation.md#chain-of-trust) binaries of Constellation. This includes the CLI and the [node images](../architecture/images.md). + +These binaries may be used free of charge within the bounds of Constellation's [**Community License**](#community-license). An [**Enterprise License**](#enterprise-license) can be purchased from Edgeless Systems. + +The Constellation CLI displays relevant license information when you initialize your cluster. You are responsible for staying within the bounds of your respective license. Constellation doesn't enforce any limits so as not to endanger your cluster's availability. + +## Terraform provider + +Edgeless Systems provides a [Terraform provider](https://github.com/edgelesssys/terraform-provider-constellation/releases), which may be used free of charge within the bounds of Constellation's [**Community License**](#community-license). An [**Enterprise License**](#enterprise-license) can be purchased from Edgeless Systems. + +You are responsible for staying within the bounds of your respective license. Constellation doesn't enforce any limits so as not to endanger your cluster's availability. + +## Community License + +You are free to use the Constellation binaries provided by Edgeless Systems to create services for internal consumption, evaluation purposes, or non-commercial use. You must not use the Constellation binaries to provide commercial hosted services to third parties. Edgeless Systems gives no warranties and offers no support. + +## Enterprise License + +Enterprise Licenses don't have the above limitations and come with support and additional features. Find out more at the [product website](https://www.edgeless.systems/products/constellation/). + +Once you have received your Enterprise License file, place it in your [Constellation workspace](../architecture/orchestration.md#workspaces) in a file named `constellation.license`. + +## CSP Marketplaces + +Constellation is available through the Marketplaces of AWS, Azure, GCP, and STACKIT. This allows you to create self-managed Constellation clusters that are billed on a pay-per-use basis (hourly, per vCPU) with your CSP account. You can still get direct support by Edgeless Systems. For more information, please [contact us](https://www.edgeless.systems/enterprise-support/). diff --git a/docs/versioned_docs/version-2.22/overview/performance/application.md b/docs/versioned_docs/version-2.22/overview/performance/application.md new file mode 100644 index 000000000..c67d59644 --- /dev/null +++ b/docs/versioned_docs/version-2.22/overview/performance/application.md @@ -0,0 +1,102 @@ +# Application benchmarks + +## HashiCorp Vault + +[HashiCorp Vault](https://www.vaultproject.io/) is a distributed secrets management software that can be deployed to Kubernetes. +HashiCorp maintains a benchmarking tool for vault, [vault-benchmark](https://github.com/hashicorp/vault-benchmark/). +Vault-benchmark generates load on a Vault deployment and measures response times. + +This article describes the results from running vault-benchmark on Constellation, AKS, and GKE. +You can find the setup for producing the data discussed in this article in the [vault-benchmarks](https://github.com/edgelesssys/vault-benchmarks) repository. + +The Vault API used during benchmarking is the [transits secret engine](https://developer.hashicorp.com/vault/docs/secrets/transit). +This allows services to send data to Vault for encryption, decryption, signing, and verification. + +## Results + +On each run, vault-benchmark sends requests and measures the latencies. +The measured latencies are aggregated through various statistical features. +After running the benchmark n times, the arithmetic mean over a subset of the reported statistics is calculated. +The selected features are arithmetic mean, 99th percentile, minimum, and maximum. + +Arithmetic mean gives a general sense of the latency on each target. +The 99th percentile shows performance in (most likely) erroneous states. +Minimum and maximum mark the range within which latency varies each run. + +The benchmark was configured with 1300 workers and 10 seconds per run. +Those numbers were chosen empirically. +The latency was stabilizing at 10 seconds runtime, not changing with further increase. +Increasing the number of workers beyond 1300 leads to request failures, marking the limit Vault was able to handle in this setup. +All results are based on 100 runs. + +The following data was generated while running five replicas, one primary, and four standby nodes. +All numbers are in seconds if not indicated otherwise. +``` +========== Results AKS ========== +Mean: mean: 1.632200, variance: 0.002057 +P99: mean: 5.480679, variance: 2.263700 +Max: mean: 6.651001, variance: 2.808401 +Min: mean: 0.011415, variance: 0.000133 +========== Results GKE ========== +Mean: mean: 1.656435, variance: 0.003615 +P99: mean: 6.030807, variance: 3.955051 +Max: mean: 7.164843, variance: 3.300004 +Min: mean: 0.010233, variance: 0.000111 +========== Results C11n ========== +Mean: mean: 1.651549, variance: 0.001610 +P99: mean: 5.780422, variance: 3.016106 +Max: mean: 6.942997, variance: 3.075796 +Min: mean: 0.013774, variance: 0.000228 +========== AKS vs C11n ========== +Mean: +1.171577 % (AKS is faster) +P99: +5.185495 % (AKS is faster) +Max: +4.205618 % (AKS is faster) +Min: +17.128781 % (AKS is faster) +========== GKE vs C11n ========== +Mean: -0.295851 % (GKE is slower) +P99: -4.331603 % (GKE is slower) +Max: -3.195248 % (GKE is slower) +Min: +25.710886 % (GKE is faster) +``` + +**Interpretation**: Latencies are all within ~5% of each other. +AKS performs slightly better than GKE and Constellation (C11n) in all cases except minimum latency. +Minimum latency is the lowest for GKE. +Compared to GKE, Constellation had slightly lower peak latencies (99th percentile and maximum), indicating that Constellation could have handled slightly more concurrent accesses than GKE. +Overall, performance is at comparable levels across all three distributions. +Based on these numbers, you can use a similarly sized Constellation cluster to run your existing Vault deployment. + +### Visualization + +The following plots visualize the data presented above as [box plots](https://en.wikipedia.org/wiki/Box_plot). +The whiskers denote the minimum and maximum. +The box stretches from the 25th to the 75th percentile, with the dividing bar marking the 50th percentile. +The circles outside the whiskers denote outliers. + +

        +Mean Latency + +![Mean Latency](../../_media/benchmark_vault/5replicas/mean_latency.png) + +
        + +
        +99th Percentile Latency + +![99th Percentile Latency](../../_media/benchmark_vault/5replicas/p99_latency.png) + +
        + +
        +Maximum Latency + +![Maximum Latency](../../_media/benchmark_vault/5replicas/max_latency.png) + +
        + +
        +Minimum Latency + +![Minimum Latency](../../_media/benchmark_vault/5replicas/min_latency.png) + +
        diff --git a/docs/versioned_docs/version-2.22/overview/performance/compute.md b/docs/versioned_docs/version-2.22/overview/performance/compute.md new file mode 100644 index 000000000..88dd4b1b2 --- /dev/null +++ b/docs/versioned_docs/version-2.22/overview/performance/compute.md @@ -0,0 +1,11 @@ +# Impact of runtime encryption on compute performance + +All nodes in a Constellation cluster are executed inside Confidential VMs (CVMs). Consequently, the performance of Constellation is inherently linked to the performance of these CVMs. + +## AMD and Azure benchmarking + +AMD and Azure have collectively released a [performance benchmark](https://community.amd.com/t5/business/microsoft-azure-confidential-computing-powered-by-3rd-gen-epyc/ba-p/497796) for CVMs that utilize 3rd Gen AMD EPYC processors (Milan) with SEV-SNP. This benchmark, which included a variety of mostly compute-intensive tests such as SPEC CPU 2017 and CoreMark, demonstrated that CVMs experience only minor performance degradation (ranging from 2% to 8%) when compared to standard VMs. Such results are indicative of the performance that can be expected from compute-intensive workloads running with Constellation on Azure. + +## AMD and Google benchmarking + +Similarly, AMD and Google have jointly released a [performance benchmark](https://www.amd.com/system/files/documents/3rd-gen-epyc-gcp-c2d-conf-compute-perf-brief.pdf) for CVMs employing 3rd Gen AMD EPYC processors (Milan) with SEV-SNP. With high-performance computing workloads such as WRF, NAMD, Ansys CFS, and Ansys LS_DYNA, they observed analogous findings, with only minor performance degradation (between 2% and 4%) compared to standard VMs. These outcomes are reflective of the performance that can be expected for compute-intensive workloads running with Constellation on GCP. diff --git a/docs/versioned_docs/version-2.22/overview/performance/io.md b/docs/versioned_docs/version-2.22/overview/performance/io.md new file mode 100644 index 000000000..3ae796f8a --- /dev/null +++ b/docs/versioned_docs/version-2.22/overview/performance/io.md @@ -0,0 +1,204 @@ +# I/O performance benchmarks + +To assess the overall performance of Constellation, this benchmark evaluates Constellation v2.6.0 in terms of storage I/O using [`fio`](https://fio.readthedocs.io/en/latest/fio_doc.html) and network performance using the [Kubernetes Network Benchmark](https://github.com/InfraBuilder/k8s-bench-suite#knb--kubernetes-network-be). + +This benchmark tested Constellation on Azure and GCP and compared the results against the managed Kubernetes offerings AKS and GKE. + +## Configurations + +### Constellation + +The benchmark was conducted with Constellation v2.6.0, Kubernetes v1.25.7, and Cilium v1.12. +It ran on the following infrastructure configurations. + +Constellation on Azure: + +- Nodes: 3 (1 Control-plane, 2 Worker) +- Machines: `DC4as_v5`: 3rd Generation AMD EPYC 7763v (Milan) processor with 4 Cores, 16 GiB memory +- CVM: `true` +- Region: `West US` +- Zone: `2` + +Constellation on GCP: + +- Nodes: 3 (1 Control-plane, 2 Worker) +- Machines: `n2d-standard-4`: 2nd Generation AMD EPYC (Rome) processor with 4 Cores, 16 GiB of memory +- CVM: `true` +- Zone: `europe-west3-b` + +### AKS + +On AKS, the benchmark used Kubernetes `v1.24.9` and nodes with version `AKSUbuntu-1804gen2containerd-2023.02.15`. +AKS ran with the [`kubenet`](https://learn.microsoft.com/en-us/azure/aks/concepts-network#kubenet-basic-networking) CNI and the [default CSI driver](https://learn.microsoft.com/en-us/azure/aks/azure-disk-csi) for Azure Disk. + +The following infrastructure configurations was used: + +- Nodes: 2 (2 Worker) +- Machines: `D4as_v5`: 3rd Generation AMD EPYC 7763v (Milan) processor with 4 Cores, 16 GiB memory +- CVM: `false` +- Region: `West US` +- Zone: `2` + +### GKE + +On GKE, the benchmark used Kubernetes `v1.24.9` and nodes with version `1.24.9-gke.3200`. +GKE ran with the [`kubenet`](https://cloud.google.com/kubernetes-engine/docs/concepts/network-overview) CNI and the [default CSI driver](https://cloud.google.com/kubernetes-engine/docs/how-to/persistent-volumes/gce-pd-csi-driver) for Compute Engine persistent disk. + +The following infrastructure configurations was used: + +- Nodes: 2 (2 Worker) +- Machines: `n2d-standard-4` 2nd Generation AMD EPYC (Rome) processor with 4 Cores, 16 GiB of memory +- CVM: `false` +- Zone: `europe-west3-b` + +## Results + +### Network + +This section gives a thorough analysis of the network performance of Constellation, specifically focusing on measuring TCP and UDP bandwidth. +The benchmark measured the bandwidth of pod-to-pod and pod-to-service connections between two different nodes using [`iperf`](https://iperf.fr/). + +GKE and Constellation on GCP had a maximum network bandwidth of [10 Gbps](https://cloud.google.com/compute/docs/general-purpose-machines#n2d_machines). +AKS with `Standard_D4as_v5` machines a maximum network bandwidth of [12.5 Gbps](https://learn.microsoft.com/en-us/azure/virtual-machines/dasv5-dadsv5-series#dasv5-series). +The Confidential VM equivalent `Standard_DC4as_v5` currently has a network bandwidth of [1.25 Gbps](https://learn.microsoft.com/en-us/azure/virtual-machines/dcasv5-dcadsv5-series#dcasv5-series-products). +Therefore, to make the test comparable, both AKS and Constellation on Azure were running with `Standard_DC4as_v5` machines and 1.25 Gbps bandwidth. + +Constellation on Azure and AKS used an MTU of 1500. +Constellation on GCP used an MTU of 8896. GKE used an MTU of 1450. + +The difference in network bandwidth can largely be attributed to two factors. + +- Constellation's [network encryption](../../architecture/networking.md) via Cilium and WireGuard, which protects data in-transit. +- [AMD SEV using SWIOTLB bounce buffers](https://lore.kernel.org/all/20200204193500.GA15564@ashkalra_ubuntu_server/T/) for all DMA including network I/O. + +#### Pod-to-Pod + +In this scenario, the client Pod connects directly to the server pod via its IP address. + +```mermaid +flowchart LR + subgraph Node A + Client[Client] + end + subgraph Node B + Server[Server] + end + Client ==>|traffic| Server +``` + +The results for "Pod-to-Pod" on Azure are as follows: + +![Network Pod2Pod Azure benchmark graph](../../_media/benchmark_net_p2p_azure.png) + +The results for "Pod-to-Pod" on GCP are as follows: + +![Network Pod2Pod GCP benchmark graph](../../_media/benchmark_net_p2p_gcp.png) + +#### Pod-to-Service + +In this scenario, the client Pod connects to the server Pod via a ClusterIP service. This is more relevant to real-world use cases. + +```mermaid +flowchart LR + subgraph Node A + Client[Client] ==>|traffic| Service[Service] + end + subgraph Node B + Server[Server] + end + Service ==>|traffic| Server +``` + +The results for "Pod-to-Pod" on Azure are as follows: + +![Network Pod2SVC Azure benchmark graph](../../_media/benchmark_net_p2svc_azure.png) + +The results for "Pod-to-Pod" on GCP are as follows: + +![Network Pod2SVC GCP benchmark graph](../../_media/benchmark_net_p2svc_gcp.png) + +In our recent comparison of Constellation on GCP with GKE, Constellation has 58% less TCP bandwidth. However, UDP bandwidth was slightly better with Constellation, thanks to its higher MTU. + +Similarly, when comparing Constellation on Azure with AKS using CVMs, Constellation achieved approximately 10% less TCP and 40% less UDP bandwidth. + +### Storage I/O + +Azure and GCP offer persistent storage for their Kubernetes services AKS and GKE via the Container Storage Interface (CSI). CSI storage in Kubernetes is available via `PersistentVolumes` (PV) and consumed via `PersistentVolumeClaims` (PVC). +Upon requesting persistent storage through a PVC, GKE and AKS will provision a PV as defined by a default [storage class](https://kubernetes.io/docs/concepts/storage/storage-classes/). +Constellation provides persistent storage on Azure and GCP [that's encrypted on the CSI layer](../../architecture/encrypted-storage.md). +Similarly, upon a PVC request, Constellation will provision a PV via a default storage class. + +For Constellation on Azure and AKS, the benchmark ran with Azure Disk storage [Standard SSD](https://learn.microsoft.com/en-us/azure/virtual-machines/disks-types#standard-ssds) of 400 GiB size. +The [DC4as machine type](https://learn.microsoft.com/en-us/azure/virtual-machines/dasv5-dadsv5-series#dasv5-series) with four cores provides the following maximum performance: + +- 6400 (20000 burst) IOPS +- 144 MB/s (600 MB/s burst) throughput + +However, the performance is bound by the capabilities of the [512 GiB Standard SSD size](https://learn.microsoft.com/en-us/azure/virtual-machines/disks-types#standard-ssds) (the size class of 400 GiB volumes): + +- 500 (600 burst) IOPS +- 60 MB/s (150 MB/s burst) throughput + +For Constellation on GCP and GKE, the benchmark ran with Compute Engine Persistent Disk Storage [pd-balanced](https://cloud.google.com/compute/docs/disks) of 400 GiB size. +The N2D machine type with four cores and pd-balanced provides the following [maximum performance](https://cloud.google.com/compute/docs/disks/performance#n2d_vms): + +- 3,000 read IOPS +- 15,000 write IOPS +- 240 MB/s read throughput +- 240 MB/s write throughput + +However, the performance is bound by the capabilities of a [`Zonal balanced PD`](https://cloud.google.com/compute/docs/disks/performance#zonal-persistent-disks) with 400 GiB size: + +- 2400 read IOPS +- 2400 write IOPS +- 112 MB/s read throughput +- 112 MB/s write throughput + +The [`fio`](https://fio.readthedocs.io/en/latest/fio_doc.html) benchmark consists of several tests. +The benchmark used [`Kubestr`](https://github.com/kastenhq/kubestr) to run `fio` in Kubernetes. +The default test performs randomized access patterns that accurately depict worst-case I/O scenarios for most applications. + +The following `fio` settings were used: + +- No Cloud caching +- No OS caching +- Single CPU +- 60 seconds runtime +- 10 seconds ramp-up time +- 10 GiB file +- IOPS: 4 KB blocks and 128 iodepth +- Bandwidth: 1024 KB blocks and 128 iodepth + +For more details, see the [`fio` test configuration](https://github.com/edgelesssys/constellation/blob/main/.github/actions/e2e_benchmark/fio.ini). + +The results for IOPS on Azure are as follows: + +![I/O IOPS Azure benchmark graph](../../_media/benchmark_fio_azure_iops.png) + +The results for IOPS on GCP are as follows: + +![I/O IOPS GCP benchmark graph](../../_media/benchmark_fio_gcp_iops.png) + +The results for bandwidth on Azure are as follows: + +![I/O bandwidth Azure benchmark graph](../../_media/benchmark_fio_azure_bw.png) + +The results for bandwidth on GCP are as follows: + +![I/O bandwidth GCP benchmark graph](../../_media/benchmark_fio_gcp_bw.png) + +On GCP, the results exceed the maximum performance guarantees of the chosen disk type. There are two possible explanations for this. The first is that there may be cloud caching in place that isn't configurable. Alternatively, the underlying provisioned disk size may be larger than what was requested, resulting in higher performance boundaries. + +When comparing Constellation on GCP with GKE, Constellation has similar bandwidth but about 10% less IOPS performance. On Azure, Constellation has similar IOPS performance compared to AKS, where both likely hit the maximum storage performance. However, Constellation has approximately 15% less read and write bandwidth. + +## Conclusion + +Despite the added [security benefits](../security-benefits.md) that Constellation provides, it only incurs a slight performance overhead when compared to managed Kubernetes offerings such as AKS and GKE. In most compute benchmarks, Constellation is on par with it's alternatives. +While it may be slightly slower in certain I/O scenarios due to network and storage encryption, there is ongoing work to reduce this overhead to single digits. + +For instance, storage encryption only adds between 10% to 15% overhead in terms of bandwidth and IOPS. +Meanwhile, the biggest performance impact that Constellation currently faces is network encryption, which can incur up to 58% overhead on a 10 Gbps network. +However, the Cilium team has conducted [benchmarks with Cilium using WireGuard encryption](https://docs.cilium.io/en/latest/operations/performance/benchmark/#encryption-wireguard-ipsec) on a 100 Gbps network that yielded over 15 Gbps. +We're confident that Constellation will provide a similar level of performance with an upcoming release. + +Overall, Constellation strikes a great balance between security and performance, and we're continuously working to improve its performance capabilities while maintaining its high level of security. diff --git a/docs/versioned_docs/version-2.22/overview/performance/performance.md b/docs/versioned_docs/version-2.22/overview/performance/performance.md new file mode 100644 index 000000000..59bf86602 --- /dev/null +++ b/docs/versioned_docs/version-2.22/overview/performance/performance.md @@ -0,0 +1,17 @@ +# Performance analysis of Constellation + +This section provides a comprehensive examination of the performance characteristics of Constellation. + +## Runtime encryption + +Runtime encryption affects compute performance. [Benchmarks by Azure and Google](compute.md) show that the performance degradation of Confidential VMs (CVMs) is small, ranging from 2% to 8% for compute-intensive workloads. + +## I/O performance benchmarks + +We evaluated the [I/O performance](io.md) of Constellation, utilizing a collection of synthetic benchmarks targeting networking and storage. +We further compared this performance to native managed Kubernetes offerings from various cloud providers, to better understand how Constellation stands in relation to standard practices. + +## Application benchmarking + +To gauge Constellation's applicability to well-known applications, we performed a [benchmark of HashiCorp Vault](application.md) running on Constellation. +The results were then compared to deployments on the managed Kubernetes offerings from different cloud providers, providing a tangible perspective on Constellation's performance in actual deployment scenarios. diff --git a/docs/versioned_docs/version-2.22/overview/product.md b/docs/versioned_docs/version-2.22/overview/product.md new file mode 100644 index 000000000..4b5d90706 --- /dev/null +++ b/docs/versioned_docs/version-2.22/overview/product.md @@ -0,0 +1,12 @@ +# Product features + +Constellation is a Kubernetes engine that aims to provide the best possible data security in combination with enterprise-grade scalability and reliability features---and a smooth user experience. + +From a security perspective, Constellation implements the [Confidential Kubernetes](confidential-kubernetes.md) concept and corresponding security features, which shield your entire cluster from the underlying infrastructure. + +From an operational perspective, Constellation provides the following key features: + +* **Native support for different clouds**: Constellation works on Amazon Web Services (AWS), Microsoft Azure, Google Cloud Platform (GCP), and STACKIT. Support for OpenStack-based environments is coming with a future release. Constellation securely interfaces with the cloud infrastructure to provide [cluster autoscaling](https://github.com/kubernetes/autoscaler/tree/master/cluster-autoscaler), [dynamic persistent volumes](https://kubernetes.io/docs/concepts/storage/dynamic-provisioning/), and [service load balancing](https://kubernetes.io/docs/concepts/services-networking/service/#loadbalancer). +* **High availability**: Constellation uses a [multi-master architecture](https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/high-availability/) with a [stacked etcd topology](https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/ha-topology/#stacked-etcd-topology) to ensure high availability. +* **Integrated Day-2 operations**: Constellation lets you securely [upgrade](../workflows/upgrade.md) your cluster to a new release. It also lets you securely [recover](../workflows/recovery.md) a failed cluster. Both with a single command. +* **Support for Terraform**: Constellation includes a [Terraform provider](../workflows/terraform-provider.md) that lets you manage the full lifecycle of your cluster via Terraform. diff --git a/docs/versioned_docs/version-2.22/overview/security-benefits.md b/docs/versioned_docs/version-2.22/overview/security-benefits.md new file mode 100644 index 000000000..51a8b64f5 --- /dev/null +++ b/docs/versioned_docs/version-2.22/overview/security-benefits.md @@ -0,0 +1,22 @@ +# Security benefits and threat model + +Constellation implements the [Confidential Kubernetes](confidential-kubernetes.md) concept and shields entire Kubernetes deployments from the infrastructure. More concretely, Constellation decreases the size of the trusted computing base (TCB) of a Kubernetes deployment. The TCB is the totality of elements in a computing environment that must be trusted not to be compromised. A smaller TCB results in a smaller attack surface. The following diagram shows how Constellation removes the *cloud & datacenter infrastructure* and the *physical hosts*, including the hypervisor, the host OS, and other components, from the TCB (red). Inside the confidential context (green), Kubernetes remains part of the TCB, but its integrity is attested and can be [verified](../workflows/verify-cluster.md). + +![TCB comparison](../_media/tcb.svg) + +Given this background, the following describes the concrete threat classes that Constellation addresses. + +## Insider access + +Employees and third-party contractors of cloud service providers (CSPs) have access to different layers of the cloud infrastructure. +This opens up a large attack surface where workloads and data can be read, copied, or manipulated. With Constellation, Kubernetes deployments are shielded from the infrastructure and thus such accesses are prevented. + +## Infrastructure-based attacks + +Malicious cloud users ("hackers") may break out of their tenancy and access other tenants' data. Advanced attackers may even be able to establish a permanent foothold within the infrastructure and access data over a longer period. Analogously to the *insider access* scenario, Constellation also prevents access to a deployment's data in this scenario. + +## Supply chain attacks + +Supply chain security is receiving lots of attention recently due to an [increasing number of recorded attacks](https://www.enisa.europa.eu/news/enisa-news/understanding-the-increase-in-supply-chain-security-attacks). For instance, a malicious actor could attempt to tamper Constellation node images (including Kubernetes and other software) before they're loaded in the confidential VMs of a cluster. Constellation uses [remote attestation](../architecture/attestation.md) in conjunction with public [transparency logs](../workflows/verify-cli.md) to prevent this. + +In the future, Constellation will extend this feature to customer workloads. This will enable cluster owners to create auditable policies that precisely define which containers can run in a given deployment. diff --git a/docs/versioned_docs/version-2.22/reference/cli.md b/docs/versioned_docs/version-2.22/reference/cli.md new file mode 100644 index 000000000..7cbc0be8d --- /dev/null +++ b/docs/versioned_docs/version-2.22/reference/cli.md @@ -0,0 +1,873 @@ +# CLI reference + + + +Use the Constellation CLI to create and manage your clusters. + +Usage: + +``` +constellation [command] +``` +Commands: + +* [config](#constellation-config): Work with the Constellation configuration file + * [generate](#constellation-config-generate): Generate a default configuration and state file + * [fetch-measurements](#constellation-config-fetch-measurements): Fetch measurements for configured cloud provider and image + * [instance-types](#constellation-config-instance-types): Print the supported instance types for all cloud providers + * [kubernetes-versions](#constellation-config-kubernetes-versions): Print the Kubernetes versions supported by this CLI + * [migrate](#constellation-config-migrate): Migrate a configuration file to a new version +* [create](#constellation-create): Create instances on a cloud platform for your Constellation cluster +* [apply](#constellation-apply): Apply a configuration to a Constellation cluster +* [mini](#constellation-mini): Manage MiniConstellation clusters + * [up](#constellation-mini-up): Create and initialize a new MiniConstellation cluster + * [down](#constellation-mini-down): Destroy a MiniConstellation cluster +* [status](#constellation-status): Show status of a Constellation cluster +* [verify](#constellation-verify): Verify the confidential properties of a Constellation cluster +* [upgrade](#constellation-upgrade): Find and apply upgrades to your Constellation cluster + * [check](#constellation-upgrade-check): Check for possible upgrades + * [apply](#constellation-upgrade-apply): Apply an upgrade to a Constellation cluster +* [recover](#constellation-recover): Recover a completely stopped Constellation cluster +* [terminate](#constellation-terminate): Terminate a Constellation cluster +* [iam](#constellation-iam): Work with the IAM configuration on your cloud provider + * [create](#constellation-iam-create): Create IAM configuration on a cloud platform for your Constellation cluster + * [aws](#constellation-iam-create-aws): Create IAM configuration on AWS for your Constellation cluster + * [azure](#constellation-iam-create-azure): Create IAM configuration on Microsoft Azure for your Constellation cluster + * [gcp](#constellation-iam-create-gcp): Create IAM configuration on GCP for your Constellation cluster + * [destroy](#constellation-iam-destroy): Destroy an IAM configuration and delete local Terraform files + * [upgrade](#constellation-iam-upgrade): Find and apply upgrades to your IAM profile + * [apply](#constellation-iam-upgrade-apply): Apply an upgrade to an IAM profile +* [version](#constellation-version): Display version of this CLI +* [init](#constellation-init): Initialize the Constellation cluster +* [ssh](#constellation-ssh): Generate a certificate for emergency SSH access + +## constellation config + +Work with the Constellation configuration file + +### Synopsis + +Work with the Constellation configuration file. + +### Options + +``` + -h, --help help for config +``` + +### Options inherited from parent commands + +``` + --debug enable debug logging + --force disable version compatibility checks - might result in corrupted clusters + --tf-log string Terraform log level (default "NONE") + -C, --workspace string path to the Constellation workspace +``` + +## constellation config generate + +Generate a default configuration and state file + +### Synopsis + +Generate a default configuration and state file for your selected cloud provider. + +``` +constellation config generate {aws|azure|gcp|openstack|qemu|stackit} [flags] +``` + +### Options + +``` + -a, --attestation string attestation variant to use {aws-sev-snp|aws-nitro-tpm|azure-sev-snp|azure-tdx|azure-trustedlaunch|gcp-sev-snp|gcp-sev-es|qemu-vtpm}. If not specified, the default for the cloud provider is used + -h, --help help for generate + -k, --kubernetes string Kubernetes version to use in format MAJOR.MINOR (default "v1.30") + -t, --tags strings additional tags for created resources given a list of key=value +``` + +### Options inherited from parent commands + +``` + --debug enable debug logging + --force disable version compatibility checks - might result in corrupted clusters + --tf-log string Terraform log level (default "NONE") + -C, --workspace string path to the Constellation workspace +``` + +## constellation config fetch-measurements + +Fetch measurements for configured cloud provider and image + +### Synopsis + +Fetch measurements for configured cloud provider and image. + +A config needs to be generated first. + +``` +constellation config fetch-measurements [flags] +``` + +### Options + +``` + -h, --help help for fetch-measurements + -s, --signature-url string alternative URL to fetch measurements' signature from + -u, --url string alternative URL to fetch measurements from +``` + +### Options inherited from parent commands + +``` + --debug enable debug logging + --force disable version compatibility checks - might result in corrupted clusters + --tf-log string Terraform log level (default "NONE") + -C, --workspace string path to the Constellation workspace +``` + +## constellation config instance-types + +Print the supported instance types for all cloud providers + +### Synopsis + +Print the supported instance types for all cloud providers. + +``` +constellation config instance-types [flags] +``` + +### Options + +``` + -h, --help help for instance-types +``` + +### Options inherited from parent commands + +``` + --debug enable debug logging + --force disable version compatibility checks - might result in corrupted clusters + --tf-log string Terraform log level (default "NONE") + -C, --workspace string path to the Constellation workspace +``` + +## constellation config kubernetes-versions + +Print the Kubernetes versions supported by this CLI + +### Synopsis + +Print the Kubernetes versions supported by this CLI. + +``` +constellation config kubernetes-versions [flags] +``` + +### Options + +``` + -h, --help help for kubernetes-versions +``` + +### Options inherited from parent commands + +``` + --debug enable debug logging + --force disable version compatibility checks - might result in corrupted clusters + --tf-log string Terraform log level (default "NONE") + -C, --workspace string path to the Constellation workspace +``` + +## constellation config migrate + +Migrate a configuration file to a new version + +### Synopsis + +Migrate a configuration file to a new version. + +``` +constellation config migrate [flags] +``` + +### Options + +``` + -h, --help help for migrate +``` + +### Options inherited from parent commands + +``` + --debug enable debug logging + --force disable version compatibility checks - might result in corrupted clusters + --tf-log string Terraform log level (default "NONE") + -C, --workspace string path to the Constellation workspace +``` + +## constellation create + +Create instances on a cloud platform for your Constellation cluster + +### Synopsis + +Create instances on a cloud platform for your Constellation cluster. + +``` +constellation create [flags] +``` + +### Options + +``` + -h, --help help for create + -y, --yes create the cluster without further confirmation +``` + +### Options inherited from parent commands + +``` + --debug enable debug logging + --force disable version compatibility checks - might result in corrupted clusters + --tf-log string Terraform log level (default "NONE") + -C, --workspace string path to the Constellation workspace +``` + +## constellation apply + +Apply a configuration to a Constellation cluster + +### Synopsis + +Apply a configuration to a Constellation cluster to initialize or upgrade the cluster. + +``` +constellation apply [flags] +``` + +### Options + +``` + --conformance enable conformance mode + -h, --help help for apply + --merge-kubeconfig merge Constellation kubeconfig file with default kubeconfig file in $HOME/.kube/config + --skip-helm-wait install helm charts without waiting for deployments to be ready + --skip-phases strings comma-separated list of upgrade phases to skip + one or multiple of { infrastructure | init | attestationconfig | certsans | helm | image | k8s } + -y, --yes run command without further confirmation + WARNING: the command might delete or update existing resources without additional checks. Please read the docs. + +``` + +### Options inherited from parent commands + +``` + --debug enable debug logging + --force disable version compatibility checks - might result in corrupted clusters + --tf-log string Terraform log level (default "NONE") + -C, --workspace string path to the Constellation workspace +``` + +## constellation mini + +Manage MiniConstellation clusters + +### Synopsis + +Manage MiniConstellation clusters. + +### Options + +``` + -h, --help help for mini +``` + +### Options inherited from parent commands + +``` + --debug enable debug logging + --force disable version compatibility checks - might result in corrupted clusters + --tf-log string Terraform log level (default "NONE") + -C, --workspace string path to the Constellation workspace +``` + +## constellation mini up + +Create and initialize a new MiniConstellation cluster + +### Synopsis + +Create and initialize a new MiniConstellation cluster. + +A mini cluster consists of a single control-plane and worker node, hosted using QEMU/KVM. + +``` +constellation mini up [flags] +``` + +### Options + +``` + -h, --help help for up + --merge-kubeconfig merge Constellation kubeconfig file with default kubeconfig file in $HOME/.kube/config (default true) +``` + +### Options inherited from parent commands + +``` + --debug enable debug logging + --force disable version compatibility checks - might result in corrupted clusters + --tf-log string Terraform log level (default "NONE") + -C, --workspace string path to the Constellation workspace +``` + +## constellation mini down + +Destroy a MiniConstellation cluster + +### Synopsis + +Destroy a MiniConstellation cluster. + +``` +constellation mini down [flags] +``` + +### Options + +``` + -h, --help help for down + -y, --yes terminate the cluster without further confirmation +``` + +### Options inherited from parent commands + +``` + --debug enable debug logging + --force disable version compatibility checks - might result in corrupted clusters + --tf-log string Terraform log level (default "NONE") + -C, --workspace string path to the Constellation workspace +``` + +## constellation status + +Show status of a Constellation cluster + +### Synopsis + +Show the status of a constellation cluster. + +Shows microservice, image, and Kubernetes versions installed in the cluster. Also shows status of current version upgrades. + +``` +constellation status [flags] +``` + +### Options + +``` + -h, --help help for status +``` + +### Options inherited from parent commands + +``` + --debug enable debug logging + --force disable version compatibility checks - might result in corrupted clusters + --tf-log string Terraform log level (default "NONE") + -C, --workspace string path to the Constellation workspace +``` + +## constellation verify + +Verify the confidential properties of a Constellation cluster + +### Synopsis + +Verify the confidential properties of a Constellation cluster. +If arguments aren't specified, values are read from `constellation-state.yaml`. + +``` +constellation verify [flags] +``` + +### Options + +``` + --cluster-id string expected cluster identifier + -h, --help help for verify + -e, --node-endpoint string endpoint of the node to verify, passed as HOST[:PORT] + -o, --output string print the attestation document in the output format {json|raw} +``` + +### Options inherited from parent commands + +``` + --debug enable debug logging + --force disable version compatibility checks - might result in corrupted clusters + --tf-log string Terraform log level (default "NONE") + -C, --workspace string path to the Constellation workspace +``` + +## constellation upgrade + +Find and apply upgrades to your Constellation cluster + +### Synopsis + +Find and apply upgrades to your Constellation cluster. + +### Options + +``` + -h, --help help for upgrade +``` + +### Options inherited from parent commands + +``` + --debug enable debug logging + --force disable version compatibility checks - might result in corrupted clusters + --tf-log string Terraform log level (default "NONE") + -C, --workspace string path to the Constellation workspace +``` + +## constellation upgrade check + +Check for possible upgrades + +### Synopsis + +Check which upgrades can be applied to your Constellation Cluster. + +``` +constellation upgrade check [flags] +``` + +### Options + +``` + -h, --help help for check + --ref string the reference to use for querying new versions (default "-") + --stream string the stream to use for querying new versions (default "stable") + -u, --update-config update the specified config file with the suggested versions +``` + +### Options inherited from parent commands + +``` + --debug enable debug logging + --force disable version compatibility checks - might result in corrupted clusters + --tf-log string Terraform log level (default "NONE") + -C, --workspace string path to the Constellation workspace +``` + +## constellation upgrade apply + +Apply an upgrade to a Constellation cluster + +### Synopsis + +Apply an upgrade to a Constellation cluster by applying the chosen configuration. + +``` +constellation upgrade apply [flags] +``` + +### Options + +``` + --conformance enable conformance mode + -h, --help help for apply + --skip-helm-wait install helm charts without waiting for deployments to be ready + --skip-phases strings comma-separated list of upgrade phases to skip + one or multiple of { infrastructure | helm | image | k8s } + -y, --yes run upgrades without further confirmation + WARNING: might delete your resources in case you are using cert-manager in your cluster. Please read the docs. + WARNING: might unintentionally overwrite measurements in the running cluster. +``` + +### Options inherited from parent commands + +``` + --debug enable debug logging + --force disable version compatibility checks - might result in corrupted clusters + --tf-log string Terraform log level (default "NONE") + -C, --workspace string path to the Constellation workspace +``` + +## constellation recover + +Recover a completely stopped Constellation cluster + +### Synopsis + +Recover a Constellation cluster by sending a recovery key to an instance in the boot stage. + +This is only required if instances restart without other instances available for bootstrapping. + +``` +constellation recover [flags] +``` + +### Options + +``` + -e, --endpoint string endpoint of the instance, passed as HOST[:PORT] + -h, --help help for recover +``` + +### Options inherited from parent commands + +``` + --debug enable debug logging + --force disable version compatibility checks - might result in corrupted clusters + --tf-log string Terraform log level (default "NONE") + -C, --workspace string path to the Constellation workspace +``` + +## constellation terminate + +Terminate a Constellation cluster + +### Synopsis + +Terminate a Constellation cluster. + +The cluster can't be started again, and all persistent storage will be lost. + +``` +constellation terminate [flags] +``` + +### Options + +``` + -h, --help help for terminate + -y, --yes terminate the cluster without further confirmation +``` + +### Options inherited from parent commands + +``` + --debug enable debug logging + --force disable version compatibility checks - might result in corrupted clusters + --tf-log string Terraform log level (default "NONE") + -C, --workspace string path to the Constellation workspace +``` + +## constellation iam + +Work with the IAM configuration on your cloud provider + +### Synopsis + +Work with the IAM configuration on your cloud provider. + +### Options + +``` + -h, --help help for iam +``` + +### Options inherited from parent commands + +``` + --debug enable debug logging + --force disable version compatibility checks - might result in corrupted clusters + --tf-log string Terraform log level (default "NONE") + -C, --workspace string path to the Constellation workspace +``` + +## constellation iam create + +Create IAM configuration on a cloud platform for your Constellation cluster + +### Synopsis + +Create IAM configuration on a cloud platform for your Constellation cluster. + +### Options + +``` + -h, --help help for create + --update-config update the config file with the specific IAM information + -y, --yes create the IAM configuration without further confirmation +``` + +### Options inherited from parent commands + +``` + --debug enable debug logging + --force disable version compatibility checks - might result in corrupted clusters + --tf-log string Terraform log level (default "NONE") + -C, --workspace string path to the Constellation workspace +``` + +## constellation iam create aws + +Create IAM configuration on AWS for your Constellation cluster + +### Synopsis + +Create IAM configuration on AWS for your Constellation cluster. + +``` +constellation iam create aws [flags] +``` + +### Options + +``` + -h, --help help for aws + --prefix string name prefix for all resources (required) + --zone string AWS availability zone the resources will be created in, e.g., us-east-2a (required) + See the Constellation docs for a list of currently supported regions. +``` + +### Options inherited from parent commands + +``` + --debug enable debug logging + --force disable version compatibility checks - might result in corrupted clusters + --tf-log string Terraform log level (default "NONE") + --update-config update the config file with the specific IAM information + -C, --workspace string path to the Constellation workspace + -y, --yes create the IAM configuration without further confirmation +``` + +## constellation iam create azure + +Create IAM configuration on Microsoft Azure for your Constellation cluster + +### Synopsis + +Create IAM configuration on Microsoft Azure for your Constellation cluster. + +``` +constellation iam create azure [flags] +``` + +### Options + +``` + -h, --help help for azure + --region string region the resources will be created in, e.g., westus (required) + --resourceGroup string name prefix of the two resource groups your cluster / IAM resources will be created in (required) + --servicePrincipal string name of the service principal that will be created (required) + --subscriptionID string subscription ID of the Azure account. Required if the 'ARM_SUBSCRIPTION_ID' environment variable is not set +``` + +### Options inherited from parent commands + +``` + --debug enable debug logging + --force disable version compatibility checks - might result in corrupted clusters + --tf-log string Terraform log level (default "NONE") + --update-config update the config file with the specific IAM information + -C, --workspace string path to the Constellation workspace + -y, --yes create the IAM configuration without further confirmation +``` + +## constellation iam create gcp + +Create IAM configuration on GCP for your Constellation cluster + +### Synopsis + +Create IAM configuration on GCP for your Constellation cluster. + +``` +constellation iam create gcp [flags] +``` + +### Options + +``` + -h, --help help for gcp + --prefix string Prefix for the service account ID and VM ID that will be created (required) + Must be letters, digits, or hyphens. + --projectID string ID of the GCP project the configuration will be created in (required) + Find it on the welcome screen of your project: https://console.cloud.google.com/welcome + --zone string GCP zone the cluster will be deployed in (required) + Find a list of available zones here: https://cloud.google.com/compute/docs/regions-zones#available +``` + +### Options inherited from parent commands + +``` + --debug enable debug logging + --force disable version compatibility checks - might result in corrupted clusters + --tf-log string Terraform log level (default "NONE") + --update-config update the config file with the specific IAM information + -C, --workspace string path to the Constellation workspace + -y, --yes create the IAM configuration without further confirmation +``` + +## constellation iam destroy + +Destroy an IAM configuration and delete local Terraform files + +### Synopsis + +Destroy an IAM configuration and delete local Terraform files. + +``` +constellation iam destroy [flags] +``` + +### Options + +``` + -h, --help help for destroy + -y, --yes destroy the IAM configuration without asking for confirmation +``` + +### Options inherited from parent commands + +``` + --debug enable debug logging + --force disable version compatibility checks - might result in corrupted clusters + --tf-log string Terraform log level (default "NONE") + -C, --workspace string path to the Constellation workspace +``` + +## constellation iam upgrade + +Find and apply upgrades to your IAM profile + +### Synopsis + +Find and apply upgrades to your IAM profile. + +### Options + +``` + -h, --help help for upgrade +``` + +### Options inherited from parent commands + +``` + --debug enable debug logging + --force disable version compatibility checks - might result in corrupted clusters + --tf-log string Terraform log level (default "NONE") + -C, --workspace string path to the Constellation workspace +``` + +## constellation iam upgrade apply + +Apply an upgrade to an IAM profile + +### Synopsis + +Apply an upgrade to an IAM profile. + +``` +constellation iam upgrade apply [flags] +``` + +### Options + +``` + -h, --help help for apply + -y, --yes run upgrades without further confirmation +``` + +### Options inherited from parent commands + +``` + --debug enable debug logging + --force disable version compatibility checks - might result in corrupted clusters + --tf-log string Terraform log level (default "NONE") + -C, --workspace string path to the Constellation workspace +``` + +## constellation version + +Display version of this CLI + +### Synopsis + +Display version of this CLI. + +``` +constellation version [flags] +``` + +### Options + +``` + -h, --help help for version +``` + +### Options inherited from parent commands + +``` + --debug enable debug logging + --force disable version compatibility checks - might result in corrupted clusters + --tf-log string Terraform log level (default "NONE") + -C, --workspace string path to the Constellation workspace +``` + +## constellation init + +Initialize the Constellation cluster + +### Synopsis + +Initialize the Constellation cluster. + +Start your confidential Kubernetes. + +``` +constellation init [flags] +``` + +### Options + +``` + --conformance enable conformance mode + -h, --help help for init + --merge-kubeconfig merge Constellation kubeconfig file with default kubeconfig file in $HOME/.kube/config + --skip-helm-wait install helm charts without waiting for deployments to be ready +``` + +### Options inherited from parent commands + +``` + --debug enable debug logging + --force disable version compatibility checks - might result in corrupted clusters + --tf-log string Terraform log level (default "NONE") + -C, --workspace string path to the Constellation workspace +``` + +## constellation ssh + +Generate a certificate for emergency SSH access + +### Synopsis + +Generate a certificate for emergency SSH access to your SSH-enabled constellation cluster. + +``` +constellation ssh [flags] +``` + +### Options + +``` + -h, --help help for ssh + --key string the path to an existing SSH public key +``` + +### Options inherited from parent commands + +``` + --debug enable debug logging + --force disable version compatibility checks - might result in corrupted clusters + --tf-log string Terraform log level (default "NONE") + -C, --workspace string path to the Constellation workspace +``` + diff --git a/docs/versioned_docs/version-2.22/reference/migration.md b/docs/versioned_docs/version-2.22/reference/migration.md new file mode 100644 index 000000000..36bfb1462 --- /dev/null +++ b/docs/versioned_docs/version-2.22/reference/migration.md @@ -0,0 +1,134 @@ +# Migrations + +This document describes breaking changes and migrations between Constellation releases. +Use [`constellation config migrate`](./cli.md#constellation-config-migrate) to automatically update an old config file to a new format. + +## Migrations to v2.19.1 + +### Azure + +* During the upgrade, security rules are migrated and the old ones need to be cleaned up manually by the user. The below script shows how to delete them through the Azure CLI: + +```bash +#!/usr/bin/env bash +name="" # the name provided in the config +uid="" # the cluster id can be retrieved via `yq '.infrastructure.uid' constellation-state.yaml` +resource_group="" # the RG can be retrieved via `yq '.provider.azure.resourceGroup' constellation-conf.yaml` + +rules=( + "kubernetes" + "bootstrapper" + "verify" + "recovery" + "join" + "debugd" + "konnectivity" +) + +for rule in "${rules[@]}"; do + echo "Deleting rule: ${rule}" + az network nsg rule delete \ + --resource-group "${resource_group}" \ + --nsg-name "${name}-${uid}" \ + --name "${rule}" +done + +echo "All specified rules have been deleted." +``` + +## Migrating from CLI versions before 2.21.1 + +### AWS + +* AWS clusters that use `LoadBalancer` resources require more IAM permissions. Please upgrade your IAM roles using `constellation iam upgrade apply`. This will show necessary changes and apply them, if desired. + +## Migrating from CLI versions before 2.19.0 + +### Azure + +* To allow seamless upgrades on Azure when Kubernetes services of type `LoadBalancer` are deployed, the target + load balancer in which the `cloud-controller-manager` creates load balancing rules was changed. Instead of using the load balancer + created and maintained by the CLI's Terraform code, the `cloud-controller-manager` now creates its own load balancer in Azure. + If your Constellation has services of type `LoadBalancer`, please remove them before the upgrade and re-apply them + afterward. + +## Migrating from CLI versions before 2.18.0 + +* The `provider.azure.appClientID` and `provider.azure.appClientSecret` fields are no longer supported and should be removed. +* To keep using an existing UAMI, add the `Owner` permission with the scope of your `resourceGroup`. +* Otherwise, simply [create new Constellation IAM credentials](../workflows/config.md#creating-an-iam-configuration) and use the created UAMI. +* To migrate the authentication for an existing cluster on Azure to an UAMI with the necessary permissions: + 1. Remove the `aadClientId` and `aadClientSecret` from the azureconfig secret. + 2. Set `useManagedIdentityExtension` to `true` and use the `userAssignedIdentity` from the Constellation config for the value of `userAssignedIdentityID`. + 3. Restart the CSI driver, cloud controller manager, cluster autoscaler, and Constellation operator pods. + +## Migrating from CLI versions before 2.10 + +* AWS cluster upgrades require additional IAM permissions for the newly introduced `aws-load-balancer-controller`. Please upgrade your IAM roles using `iam upgrade apply`. This will show necessary changes and apply them, if desired. +* The global `nodeGroups` field was added. +* The fields `instanceType`, `stateDiskSizeGB`, and `stateDiskType` for each cloud provider are now part of the configuration of individual node groups. +* The `constellation create` command no longer uses the flags `--control-plane-count` and `--worker-count`. Instead, the initial node count is configured per node group in the `nodeGroups` field. + +## Migrating from CLI versions before 2.9 + +* The `provider.azure.appClientID` and `provider.azure.clientSecretValue` fields were removed to enforce migration to managed identity authentication + +## Migrating from CLI versions before 2.8 + +* The `measurements` field for each cloud service provider was replaced with a global `attestation` field. +* The `confidentialVM`, `idKeyDigest`, and `enforceIdKeyDigest` fields for the Azure cloud service provider were removed in favor of using the global `attestation` field. +* The optional global field `attestationVariant` was replaced by the now required `attestation` field. + +## Migrating from CLI versions before 2.3 + +* The `sshUsers` field was deprecated in v2.2 and has been removed from the configuration in v2.3. + As an alternative for SSH, check the workflow section [Connect to nodes](../workflows/troubleshooting.md#node-shell-access). +* The `image` field for each cloud service provider has been replaced with a global `image` field. Use the following mapping to migrate your configuration: +
        + Show all + + | CSP | old image | new image | + | ----- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------- | + | AWS | `ami-06b8cbf4837a0a57c` | `v2.2.2` | + | AWS | `ami-02e96dc04a9e438cd` | `v2.2.2` | + | AWS | `ami-028ead928a9034b2f` | `v2.2.2` | + | AWS | `ami-032ac10dd8d8266e3` | `v2.2.1` | + | AWS | `ami-032e0d57cc4395088` | `v2.2.1` | + | AWS | `ami-053c3e49e19b96bdd` | `v2.2.1` | + | AWS | `ami-0e27ebcefc38f648b` | `v2.2.0` | + | AWS | `ami-098cd37f66523b7c3` | `v2.2.0` | + | AWS | `ami-04a87d302e2509aad` | `v2.2.0` | + | Azure | `/subscriptions/0d202bbb-4fa7-4af8-8125-58c269a05435/resourceGroups/constellation-images/providers/Microsoft.Compute/galleries/Constellation/images/constellation/versions/2.2.2` | `v2.2.2` | + | Azure | `/subscriptions/0d202bbb-4fa7-4af8-8125-58c269a05435/resourceGroups/constellation-images/providers/Microsoft.Compute/galleries/Constellation_CVM/images/constellation/versions/2.2.2` | `v2.2.2` | + | Azure | `/subscriptions/0d202bbb-4fa7-4af8-8125-58c269a05435/resourceGroups/constellation-images/providers/Microsoft.Compute/galleries/Constellation/images/constellation/versions/2.2.1` | `v2.2.1` | + | Azure | `/subscriptions/0d202bbb-4fa7-4af8-8125-58c269a05435/resourceGroups/constellation-images/providers/Microsoft.Compute/galleries/Constellation_CVM/images/constellation/versions/2.2.1` | `v2.2.1` | + | Azure | `/subscriptions/0d202bbb-4fa7-4af8-8125-58c269a05435/resourceGroups/constellation-images/providers/Microsoft.Compute/galleries/Constellation/images/constellation/versions/2.2.0` | `v2.2.0` | + | Azure | `/subscriptions/0d202bbb-4fa7-4af8-8125-58c269a05435/resourceGroups/constellation-images/providers/Microsoft.Compute/galleries/Constellation_CVM/images/constellation/versions/2.2.0` | `v2.2.0` | + | Azure | `/subscriptions/0d202bbb-4fa7-4af8-8125-58c269a05435/resourceGroups/constellation-images/providers/Microsoft.Compute/galleries/Constellation/images/constellation/versions/2.1.0` | `v2.1.0` | + | Azure | `/subscriptions/0d202bbb-4fa7-4af8-8125-58c269a05435/resourceGroups/constellation-images/providers/Microsoft.Compute/galleries/Constellation_CVM/images/constellation/versions/2.1.0` | `v2.1.0` | + | Azure | `/subscriptions/0d202bbb-4fa7-4af8-8125-58c269a05435/resourceGroups/constellation-images/providers/Microsoft.Compute/galleries/Constellation/images/constellation/versions/2.0.0` | `v2.0.0` | + | Azure | `/subscriptions/0d202bbb-4fa7-4af8-8125-58c269a05435/resourceGroups/constellation-images/providers/Microsoft.Compute/galleries/Constellation_CVM/images/constellation/versions/2.0.0` | `v2.0.0` | + | GCP | `projects/constellation-images/global/images/constellation-v2-2-2` | `v2.2.2` | + | GCP | `projects/constellation-images/global/images/constellation-v2-2-1` | `v2.2.1` | + | GCP | `projects/constellation-images/global/images/constellation-v2-2-0` | `v2.2.0` | + | GCP | `projects/constellation-images/global/images/constellation-v2-1-0` | `v2.1.0` | + | GCP | `projects/constellation-images/global/images/constellation-v2-0-0` | `v2.0.0` | + +
        +* The `enforcedMeasurements` field has been removed and merged with the `measurements` field. + * To migrate your config containing a new image (`v2.3` or greater), remove the old `measurements` and `enforcedMeasurements` entries from your config and run `constellation fetch-measurements` + * To migrate your config containing an image older than `v2.3`, remove the `enforcedMeasurements` entry and replace the entries in `measurements` as shown in the example below: + + ```diff + measurements: + - 0: DzXCFGCNk8em5ornNZtKi+Wg6Z7qkQfs5CfE3qTkOc8= + + 0: + + expected: DzXCFGCNk8em5ornNZtKi+Wg6Z7qkQfs5CfE3qTkOc8= + + warnOnly: true + - 8: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= + + 8: + + expected: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= + + warnOnly: false + -enforcedMeasurements: + - - 8 + ``` diff --git a/docs/versioned_docs/version-2.22/reference/slsa.md b/docs/versioned_docs/version-2.22/reference/slsa.md new file mode 100644 index 000000000..21f4e713c --- /dev/null +++ b/docs/versioned_docs/version-2.22/reference/slsa.md @@ -0,0 +1,73 @@ +# Supply chain levels for software artifacts (SLSA) adoption + +[Supply chain Levels for Software Artifacts, or SLSA (salsa)](https://slsa.dev/) is a framework for improving and grading a project's build system and engineering processes. SLSA focuses on security improvements for source code storage as well as build system definition, execution, and observation. SLSA is structured in [four levels](https://slsa.dev/spec/v0.1/levels). This page describes the adoption of SLSA for Constellation. + +:::info +SLSA is still in alpha status. The presented levels and their requirements might change in the future. We will adopt any changes into our engineering processes, as they get defined. +::: + +## Level 1 - Adopted + +**[Build - Scripted](https://slsa.dev/spec/v0.1/requirements#scripted-build)** + +All build steps are automated via [Bazel](https://github.com/edgelesssys/constellation/tree/main/bazel/ci) and [GitHub Actions](https://github.com/edgelesssys/constellation/tree/main/.github). + +**[Provenance - Available](https://slsa.dev/spec/v0.1/requirements#available)** + +Provenance for the CLI is generated using the [slsa-github-generator](https://github.com/slsa-framework/slsa-github-generator). + +## Level 2 - Adopted + +**[Source - Version Controlled](https://slsa.dev/spec/v0.1/requirements#version-controlled)** + +Constellation is hosted on GitHub using git. + +**[Build - Build Service](https://slsa.dev/spec/v0.1/requirements#build-service)** + +All builds are carried out by [GitHub Actions](https://github.com/edgelesssys/constellation/tree/main/.github). + +**[Provenance - Authenticated](https://slsa.dev/spec/v0.1/requirements#authenticated)** + +Provenance for the CLI is signed using the [slsa-github-generator](https://github.com/slsa-framework/slsa-github-generator). Learn [how to verify the CLI](../workflows/verify-cli.md) using the signed provenance, before using it for the first time. + +**[Provenance - Service Generated](https://slsa.dev/spec/v0.1/requirements#service-generated)** + +Provenance for the CLI is generated using the [slsa-github-generator](https://github.com/slsa-framework/slsa-github-generator) in GitHub Actions. + +## Level 3 - Adopted + +**[Source - Verified History](https://slsa.dev/spec/v0.1/requirements#verified-history)** + +The [Edgeless Systems](https://github.com/edgelesssys) GitHub organization [requires two-factor authentication](https://docs.github.com/en/organizations/keeping-your-organization-secure/managing-two-factor-authentication-for-your-organization/requiring-two-factor-authentication-in-your-organization) for all members. + +**[Source - Retained Indefinitely](https://slsa.dev/spec/v0.1/requirements#retained-indefinitely)** + +Since we use GitHub to host the repository, an external person can't modify or delete the history. Before a pull request can be merged, an explicit approval from an [Edgeless Systems](https://github.com/edgelesssys) team member is required. + +The same holds true for changes proposed by team members. Each change to `main` needs to be proposed via a pull request and requires at least one approval. + +The [Edgeless Systems](https://github.com/edgelesssys) GitHub organization admins control these settings and are able to make changes to the repository's history should legal requirements necessitate it. These changes require two-party approval following the obliterate policy. + +**[Build - Build as Code](https://slsa.dev/spec/v0.1/requirements#build-as-code)** + +All build files for Constellation are stored in [the same repository](https://github.com/edgelesssys/constellation/tree/main/.github). + +**[Build - Ephemeral Environment](https://slsa.dev/spec/v0.1/requirements#ephemeral-environment)** + +All GitHub Action workflows are executed on [GitHub-hosted runners](https://docs.github.com/en/actions/using-github-hosted-runners/about-github-hosted-runners). These runners are only available during workflow. + +We currently don't use [self-hosted runners](https://docs.github.com/en/actions/hosting-your-own-runners/about-self-hosted-runners). + +**[Build - Isolated](https://slsa.dev/spec/v0.1/requirements#isolated)** + +As outlined in the previous section, we use GitHub-hosted runners, which provide a new, isolated and ephemeral environment for each build. + +Additionally, the [SLSA GitHub generator](https://github.com/slsa-framework/slsa-github-generator#generation-of-provenance) itself is run in an isolated workflow with the artifact hash as defined inputs. + +**[Provenance - Non-falsifiable](https://slsa.dev/spec/v0.1/requirements#non-falsifiable)** + +As outlined by [SLSA GitHub generator](https://github.com/slsa-framework/slsa-github-generator) it already fulfills the non-falsifiable requirements for SLSA Level 3. The generated provenance is signed using [sigstore](https://sigstore.dev/) with an OIDC based proof of identity. + +## Level 4 - In Progress + +We strive to adopt certain aspect of SLSA Level 4 that support our engineering process. At the same time, SLSA is still in alpha status and the biggest changes to SLSA are expected to be around Level 4. diff --git a/docs/versioned_docs/version-2.22/reference/terraform.md b/docs/versioned_docs/version-2.22/reference/terraform.md new file mode 100644 index 000000000..9825a8bb8 --- /dev/null +++ b/docs/versioned_docs/version-2.22/reference/terraform.md @@ -0,0 +1,37 @@ +# Terraform usage + +[Terraform](https://www.terraform.io/) is an Infrastructure as Code (IaC) framework to manage cloud resources. This page explains how Constellation uses it internally and how advanced users may manually use it to have more control over the resource creation. + +:::info +Information on this page is intended for users who are familiar with Terraform. +It's not required for common usage of Constellation. +See the [Terraform documentation](https://developer.hashicorp.com/terraform/docs) if you want to learn more about it. +::: + +## Terraform state files + +Constellation keeps Terraform state files in subdirectories of the workspace together with the corresponding Terraform configuration files and metadata. +The subdirectories are created on the first Constellation CLI action that uses Terraform internally. + +Currently, these subdirectories are: + +* `constellation-terraform` - Terraform state files for the resources of the Constellation cluster +* `constellation-iam-terraform` - Terraform state files for IAM configuration + +As with all commands, commands that work with these files (e.g., `apply`, `terminate`, `iam`) have to be executed from the root of the cluster's [workspace directory](../architecture/orchestration.md#workspaces). You usually don't need and shouldn't manipulate or delete the subdirectories manually. + +## Interacting with Terraform manually + +Manual interaction with Terraform state created by Constellation (i.e., via the Terraform CLI) should only be performed by experienced users. It may lead to unrecoverable loss of cloud resources. For the majority of users and use cases, the interaction done by the [Constellation CLI](cli.md) is sufficient. + +## Terraform debugging + +To debug Terraform issues, the Constellation CLI offers the `tf-log` flag. You can set it to any of [Terraform's log levels](https://developer.hashicorp.com/terraform/internals/debugging): +* `JSON` (JSON-formatted logs at `TRACE` level) +* `TRACE` +* `DEBUG` +* `INFO` +* `WARN` +* `ERROR` + +The log output is written to the `terraform.log` file in the workspace directory. The output is appended to the file on each run. diff --git a/docs/versioned_docs/version-2.22/workflows/cert-manager.md b/docs/versioned_docs/version-2.22/workflows/cert-manager.md new file mode 100644 index 000000000..1d847e8bf --- /dev/null +++ b/docs/versioned_docs/version-2.22/workflows/cert-manager.md @@ -0,0 +1,13 @@ +# Install cert-manager + +:::caution +If you want to use cert-manager with Constellation, pay attention to the following to avoid potential pitfalls. +::: + +Constellation ships with cert-manager preinstalled. +The default installation is part of the `kube-system` namespace, as all other Constellation-managed microservices. +You are free to install more instances of cert-manager into other namespaces. +However, be aware that any new installation needs to use the same version as the one installed with Constellation or rely on the same CRD versions. +Also remember to set the `installCRDs` value to `false` when installing new cert-manager instances. +It will create problems if you have two installations of cert-manager depending on different versions of the installed CRDs. +CRDs are cluster-wide resources and cert-manager depends on specific versions of those CRDs for each release. diff --git a/docs/versioned_docs/version-2.22/workflows/config.md b/docs/versioned_docs/version-2.22/workflows/config.md new file mode 100644 index 000000000..35ed98302 --- /dev/null +++ b/docs/versioned_docs/version-2.22/workflows/config.md @@ -0,0 +1,353 @@ +# Configure your cluster + +:::info +This recording presents the essence of this page. It's recommended to read it in full for the motivation and all details. +::: + + + +--- + +Before you can create your cluster, you need to configure the identity and access management (IAM) for your cloud service provider (CSP) and choose machine types for the nodes. + +## Creating the configuration file + +You can generate a configuration file for your CSP by using the following CLI command: + + + + +```bash +constellation config generate aws +``` + + + + +```bash +constellation config generate azure +``` + + + + +```bash +constellation config generate gcp +``` + + + + +```bash +constellation config generate stackit +``` + + + + +This creates the file `constellation-conf.yaml` in the current directory. + +## Choosing a VM type + +Constellation supports the following VM types: + + + +By default, Constellation uses `m6a.xlarge` VMs (4 vCPUs, 16 GB RAM) to create your cluster. +Optionally, you can switch to a different VM type by modifying `instanceType` in the configuration file. +If you are using the default attestation variant `awsSEVSNP`, you can use the instance types described in [AWS's AMD SEV-SNP docs](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/snp-requirements.html). +Please mind the region restrictions mentioned in the [Getting started](../getting-started/first-steps.md#create-a-cluster) section. + +If you are using the attestation variant `awsNitroTPM`, you can choose any of the [nitroTPM-enabled instance types](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/enable-nitrotpm-prerequisites.html). + +The Constellation CLI can also print the supported instance types with: `constellation config instance-types`. + + + + +By default, Constellation uses `Standard_DC4as_v5` CVMs (4 vCPUs, 16 GB RAM) to create your cluster. Optionally, you can switch to a different VM type by modifying `instanceType` in the configuration file. For CVMs, any VM type with a minimum of 4 vCPUs from the [DCasv5 & DCadsv5](https://docs.microsoft.com/en-us/azure/virtual-machines/dcasv5-dcadsv5-series) or [ECasv5 & ECadsv5](https://docs.microsoft.com/en-us/azure/virtual-machines/ecasv5-ecadsv5-series) families is supported. + +You can also run `constellation config instance-types` to get the list of all supported options. + + + + +By default, Constellation uses `n2d-standard-4` VMs (4 vCPUs, 16 GB RAM) to create your cluster. Optionally, you can switch to a different VM type by modifying `instanceType` in the configuration file. Supported are all machines with a minimum of 4 vCPUs from the [C2D](https://cloud.google.com/compute/docs/compute-optimized-machines#c2d_machine_types) or [N2D](https://cloud.google.com/compute/docs/general-purpose-machines#n2d_machines) family. You can run `constellation config instance-types` to get the list of all supported options. + + + + +By default, Constellation uses `m1a.4cd` VMs (4 vCPUs, 30 GB RAM) to create your cluster. +Optionally, you can switch to a different VM type by modifying `instanceType` in the configuration file. + +The following instance types are known to be supported: + +| name | vCPUs | GB RAM | +|----------|-------|--------| +| m1a.4cd | 4 | 30 | +| m1a.8cd | 8 | 60 | +| m1a.16cd | 16 | 120 | +| m1a.30cd | 30 | 230 | + +You can choose any of the SEV-enabled instance types. You can find a list of all supported instance types in the [STACKIT documentation](https://docs.stackit.cloud/stackit/en/virtual-machine-flavors-75137231.html). + +The Constellation CLI can also print the supported instance types with: `constellation config instance-types`. + + + + +Fill the desired VM type into the `instanceType` fields in the `constellation-conf.yml` file. + +## Creating additional node groups + +By default, Constellation creates the node groups `control_plane_default` and `worker_default` for control-plane nodes and workers, respectively. +If you require additional control-plane or worker groups with different instance types, zone placements, or disk sizes, you can add additional node groups to the `constellation-conf.yml` file. +Each node group can be scaled individually. + +Consider the following example for AWS: + +```yaml +nodeGroups: + control_plane_default: + role: control-plane + instanceType: c6a.xlarge + stateDiskSizeGB: 30 + stateDiskType: gp3 + zone: eu-west-1c + initialCount: 3 + worker_default: + role: worker + instanceType: c6a.xlarge + stateDiskSizeGB: 30 + stateDiskType: gp3 + zone: eu-west-1c + initialCount: 2 + high_cpu: + role: worker + instanceType: c6a.24xlarge + stateDiskSizeGB: 128 + stateDiskType: gp3 + zone: eu-west-1c + initialCount: 1 +``` + +This configuration creates an additional node group `high_cpu` with a larger instance type and disk. + +You can use the field `zone` to specify what availability zone nodes of the group are placed in. +On Azure, this field is empty by default and nodes are automatically spread across availability zones. +STACKIT currently offers SEV-enabled CPUs in the `eu01-1`, `eu01-2`, and `eu01-3` zones. +Consult the documentation of your cloud provider for more information: + +* [AWS](https://aws.amazon.com/about-aws/global-infrastructure/regions_az/) +* [Azure](https://azure.microsoft.com/en-us/explore/global-infrastructure/availability-zones) +* [GCP](https://cloud.google.com/compute/docs/regions-zones) +* [STACKIT](https://docs.stackit.cloud/stackit/en/regions-and-availability-zones-75137212.html) + +## Choosing a Kubernetes version + +To learn which Kubernetes versions can be installed with your current CLI, you can run `constellation config kubernetes-versions`. +See also Constellation's [Kubernetes support policy](../architecture/versions.md#kubernetes-support-policy). + +## Creating an IAM configuration + +You can create an IAM configuration for your cluster automatically using the `constellation iam create` command. +If you already have a Constellation configuration file, you can add the `--update-config` flag to the command. This writes the needed IAM fields into your configuration. Furthermore, the flag updates the zone/region of the configuration if it hasn't been set yet. + + + + +You must be authenticated with the [AWS CLI](https://aws.amazon.com/en/cli/) in the shell session with a user that has the [required permissions for IAM creation](../getting-started/install.md#set-up-cloud-credentials). + +```bash +constellation iam create aws --zone=us-east-2a --prefix=constellTest +``` + +This command creates IAM configuration for the AWS zone `us-east-2a` using the prefix `constellTest` for all named resources being created. + +Constellation OS images are currently replicated to the following regions: + +* `eu-central-1` +* `eu-west-1` +* `eu-west-3` +* `us-east-2` +* `ap-south-1` + +If you require the OS image to be available in another region, [let us know](https://github.com/edgelesssys/constellation/issues/new?assignees=&labels=&template=feature_request.md&title=Support+new+AWS+image+region:+xx-xxxx-x). + +You can find a list of all [regions in AWS's documentation](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-regions-availability-zones.html#concepts-available-regions). + +Paste the output into the corresponding fields of the `constellation-conf.yaml` file. + + + + +You must be authenticated with the [Azure CLI](https://learn.microsoft.com/en-us/cli/azure/install-azure-cli) in the shell session with a user that has the [required permissions for IAM creation](../getting-started/install.md#set-up-cloud-credentials). + +```bash +constellation iam create azure --subscriptionID 00000000-0000-0000-0000-000000000000 --region=westus --resourceGroup=constellTest --servicePrincipal=spTest +``` + +This command creates IAM configuration on the Azure region `westus` creating a new resource group `constellTest` and a new service principal `spTest`. + +CVMs are available in several Azure regions. Constellation OS images are currently replicated to the following: + +* `germanywestcentral` +* `westus` +* `eastus` +* `northeurope` +* `westeurope` +* `southeastasia` + +If you require the OS image to be available in another region, [let us know](https://github.com/edgelesssys/constellation/issues/new?assignees=&labels=&template=feature_request.md&title=Support+new+Azure+image+region:+xx-xxxx-x). + +You can find a list of all [regions in Azure's documentation](https://azure.microsoft.com/en-us/global-infrastructure/services/?products=virtual-machines®ions=all). + +Paste the output into the corresponding fields of the `constellation-conf.yaml` file. + + + + +You must be authenticated with the [GCP CLI](https://cloud.google.com/sdk/gcloud) in the shell session with a user that has the [required permissions for IAM creation](../getting-started/install.md#set-up-cloud-credentials). + +```bash +constellation iam create gcp --projectID=yourproject-12345 --zone=europe-west2-a --prefix=constell-test +``` + +This command creates IAM configuration in the GCP project `yourproject-12345` on the GCP zone `europe-west2-a` creating a new service account `constell-test`. + +Note that only regions offering CVMs of the `C2D` or `N2D` series are supported. You can find a [list of all regions in Google's documentation](https://cloud.google.com/compute/docs/regions-zones#available), which you can filter by machine type `N2D`. + +Paste the output into the corresponding fields of the `constellation-conf.yaml` file. + + + + +STACKIT requires manual creation and configuration of service accounts. Look at the [first steps](../getting-started/first-steps.md) for more information. + + + + +
        +Alternatively, you can manually create the IAM configuration on your CSP. + +The following describes the configuration fields and how you obtain the required information or create the required resources. + + + + +* **region**: The name of your chosen AWS data center region, e.g., `us-east-2`. + + Constellation OS images are currently replicated to the following regions: + * `eu-central-1` + * `eu-west-1` + * `eu-west-3` + * `us-east-2` + * `ap-south-1` + + If you require the OS image to be available in another region, [let us know](https://github.com/edgelesssys/constellation/issues/new?assignees=&labels=&template=feature_request.md&title=Support+new+AWS+image+region:+xx-xxxx-x). + + You can find a list of all [regions in AWS's documentation](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-regions-availability-zones.html#concepts-available-regions). + +* **zone**: The name of your chosen AWS data center availability zone, e.g., `us-east-2a`. + + Learn more about [availability zones in AWS's documentation](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-regions-availability-zones.html#concepts-availability-zones). + +* **iamProfileControlPlane**: The name of an IAM instance profile attached to all control-plane nodes. + + You can create the resource with [Terraform](https://www.terraform.io/). For that, use the [provided Terraform script](https://github.com/edgelesssys/constellation/tree/release/v2.2/hack/terraform/aws/iam) to generate the necessary profile. The profile name will be provided as Terraform output value: `control_plane_instance_profile_name`. + + Alternatively, you can create the AWS profile with a tool of your choice. Use the JSON policy in [main.tf](https://github.com/edgelesssys/constellation/tree/release/v2.2/hack/terraform/aws/iam/main.tf) in the resource `aws_iam_policy.control_plane_policy`. + +* **iamProfileWorkerNodes**: The name of an IAM instance profile attached to all worker nodes. + + You can create the resource with [Terraform](https://www.terraform.io/). For that, use the [provided Terraform script](https://github.com/edgelesssys/constellation/tree/release/v2.2/hack/terraform/aws/iam) to generate the necessary profile. The profile name will be provided as Terraform output value: `worker_nodes_instance_profile_name`. + + Alternatively, you can create the AWS profile with a tool of your choice. Use the JSON policy in [main.tf](https://github.com/edgelesssys/constellation/tree/release/v2.2/hack/terraform/aws/iam/main.tf) in the resource `aws_iam_policy.worker_node_policy`. + + + + +* **subscription**: The UUID of your Azure subscription, e.g., `8b8bd01f-efd9-4113-9bd1-c82137c32da7`. + + You can view your subscription UUID via `az account show` and read the `id` field. For more information refer to [Azure's documentation](https://docs.microsoft.com/en-us/azure/azure-portal/get-subscription-tenant-id#find-your-azure-subscription). + +* **tenant**: The UUID of your Azure tenant, e.g., `3400e5a2-8fe2-492a-886c-38cb66170f25`. + + You can view your tenant UUID via `az account show` and read the `tenant` field. For more information refer to [Azure's documentation](https://docs.microsoft.com/en-us/azure/azure-portal/get-subscription-tenant-id#find-your-azure-ad-tenant). + +* **location**: The Azure datacenter location you want to deploy your cluster in, e.g., `westus`. + + CVMs are available in several Azure regions. Constellation OS images are currently replicated to the following: + + * `germanywestcentral` + * `westus` + * `eastus` + * `northeurope` + * `westeurope` + * `southeastasia` + + If you require the OS image to be available in another region, [let us know](https://github.com/edgelesssys/constellation/issues/new?assignees=&labels=&template=feature_request.md&title=Support+new+Azure+image+region:+xx-xxxx-x). + + You can find a list of all [regions in Azure's documentation](https://azure.microsoft.com/en-us/global-infrastructure/services/?products=virtual-machines®ions=all). + +* **resourceGroup**: [Create a new resource group in Azure](https://learn.microsoft.com/azure/azure-resource-manager/management/manage-resource-groups-portal) for your Constellation cluster. Set this configuration field to the name of the created resource group. + +* **userAssignedIdentity**: [Create a new managed identity in Azure](https://learn.microsoft.com/azure/active-directory/managed-identities-azure-resources/how-manage-user-assigned-managed-identities). You should create the identity in a different resource group as all resources within the cluster resource group will be deleted on cluster termination. + + Add three role assignments to the identity: `Owner`, `Virtual Machine Contributor`, and `Application Insights Component Contributor`. The `scope` of all three should refer to the previously created cluster resource group. + + Set the configuration value to the full ID of the created identity, e.g., `/subscriptions/8b8bd01f-efd9-4113-9bd1-c82137c32da7/resourcegroups/constellation-identity/providers/Microsoft.ManagedIdentity/userAssignedIdentities/constellation-identity`. You can get it by opening the `JSON View` from the `Overview` section of the identity. + + The user-assigned identity is used by instances of the cluster to access other cloud resources. + For more information about managed identities refer to [Azure's documentation](https://docs.microsoft.com/en-us/azure/active-directory/managed-identities-azure-resources/how-manage-user-assigned-managed-identities). + + + + +* **project**: The ID of your GCP project, e.g., `constellation-129857`. + + You can find it on the [welcome screen of your GCP project](https://console.cloud.google.com/welcome). For more information refer to [Google's documentation](https://support.google.com/googleapi/answer/7014113). + +* **region**: The GCP region you want to deploy your cluster in, e.g., `us-west1`. + + You can find a [list of all regions in Google's documentation](https://cloud.google.com/compute/docs/regions-zones#available). + +* **zone**: The GCP zone you want to deploy your cluster in, e.g., `us-west1-a`. + + You can find a [list of all zones in Google's documentation](https://cloud.google.com/compute/docs/regions-zones#available). + +* **serviceAccountKeyPath**: To configure this, you need to create a GCP [service account](https://cloud.google.com/iam/docs/service-accounts) with the following permissions: + + * `Compute Instance Admin (v1) (roles/compute.instanceAdmin.v1)` + * `Compute Network Admin (roles/compute.networkAdmin)` + * `Compute Security Admin (roles/compute.securityAdmin)` + * `Compute Storage Admin (roles/compute.storageAdmin)` + * `Service Account User (roles/iam.serviceAccountUser)` + + Afterward, create and download a new JSON key for this service account. Place the downloaded file in your Constellation workspace, and set the config parameter to the filename, e.g., `constellation-129857-15343dba46cb.json`. + + + + +STACKIT requires manual creation and configuration of service accounts. Look at the [first steps](../getting-started/first-steps.md) for more information. + + + +
        + +Now that you've configured your CSP, you can [create your cluster](./create.md). + +## Deleting an IAM configuration + +You can keep a created IAM configuration and reuse it for new clusters. Alternatively, you can also delete it if you don't want to use it anymore. + +Delete the IAM configuration by executing the following command in the same directory where you executed `constellation iam create` (the directory that contains [`constellation-iam-terraform`](../reference/terraform.md) as a subdirectory): + +```bash +constellation iam destroy +``` + +:::caution +For Azure, deleting the IAM configuration by executing `constellation iam destroy` will delete the whole resource group created by `constellation iam create`. +This also includes any additional resources in the resource group that weren't created by Constellation. +::: diff --git a/docs/versioned_docs/version-2.22/workflows/create.md b/docs/versioned_docs/version-2.22/workflows/create.md new file mode 100644 index 000000000..6074ebb16 --- /dev/null +++ b/docs/versioned_docs/version-2.22/workflows/create.md @@ -0,0 +1,93 @@ +# Create your cluster + +:::info +This recording presents the essence of this page. It's recommended to read it in full for the motivation and all details. +::: + + + +--- + +Creating your cluster happens through multiple phases. +The most significant ones are: + +1. Creating the necessary resources in your cloud environment +2. Bootstrapping the Constellation cluster and setting up a connection +3. Installing the necessary Kubernetes components + +`constellation apply` handles all this in a single command. +You can use the `--skip-phases` flag to skip specific phases of the process. +For example, if you created the infrastructure manually, you can skip the cloud resource creation phase. + +See the [architecture](../architecture/orchestration.md) section for details on the inner workings of this process. + +:::tip +If you don't have a cloud subscription, you can also set up a [local Constellation cluster using virtualization](../getting-started/first-steps-local.md) for testing. +::: + +Before you create the cluster, make sure to have a [valid configuration file](./config.md). + + + + +```bash +constellation apply +``` + +`apply` stores the state of your cluster's cloud resources in a [`constellation-terraform`](../architecture/orchestration.md#cluster-creation-process) directory in your workspace. + + + + +Self-managed infrastructure allows for more flexibility in the setup, by separating the infrastructure setup from the Constellation cluster management. +This provides flexibility in DevOps and can meet potential regulatory requirements. +It's recommended to use Terraform for infrastructure management, but you can use any tool of your choice. + +:::info + + When using Terraform, you can use the [Constellation Terraform provider](./terraform-provider.md) to manage the entire Constellation cluster lifecycle. + +::: + +You can refer to the Terraform files for the selected CSP from the [Constellation GitHub repository](https://github.com/edgelesssys/constellation/tree/main/terraform/infrastructure) for a minimum Constellation cluster configuration. From this base, you can now add, edit, or substitute resources per your own requirements with the infrastructure +management tooling of your choice. You need to keep the essential functionality of the base configuration in order for your cluster to function correctly. + + + +:::info + + On Azure, a manual update to the MAA provider's policy is necessary. + You can apply the update with the following command after creating the infrastructure, with `` being the URL of the MAA provider (i.e., `$(terraform output attestation_url | jq -r)`, when using the minimal Terraform configuration). + + ```bash + constellation maa-patch + ``` + +::: + + + +Make sure all necessary resources are created, e.g., through checking your CSP's portal and retrieve the necessary values, aligned with the outputs (specified in `outputs.tf`) of the base configuration. + +Fill these outputs into the corresponding fields of the `Infrastructure` block inside the `constellation-state.yaml` file. For example, fill the IP or DNS name your cluster can be reached at into the `.Infrastructure.ClusterEndpoint` field. + +With the required cloud resources set up, continue with initializing your cluster. + +```bash +constellation apply --skip-phases=infrastructure +``` + + + + +Finally, configure `kubectl` for your cluster: + +```bash +export KUBECONFIG="$PWD/constellation-admin.conf" +``` + +🏁 That's it. You've successfully created a Constellation cluster. + +### Troubleshooting + +In case `apply` fails, the CLI collects logs from the bootstrapping instance and stores them inside `constellation-cluster.log`. diff --git a/docs/versioned_docs/version-2.22/workflows/lb.md b/docs/versioned_docs/version-2.22/workflows/lb.md new file mode 100644 index 000000000..868e61076 --- /dev/null +++ b/docs/versioned_docs/version-2.22/workflows/lb.md @@ -0,0 +1,28 @@ +# Expose a service + +Constellation integrates the native load balancers of each CSP. Therefore, to expose a service simply [create a service of type `LoadBalancer`](https://kubernetes.io/docs/concepts/services-networking/service/#loadbalancer). + +## Internet-facing LB service on AWS + +To expose your application service externally you might want to use a Kubernetes Service of type `LoadBalancer`. On AWS, load-balancing is achieved through the [AWS Load Balancer Controller](https://kubernetes-sigs.github.io/aws-load-balancer-controller) as in the managed EKS. + +Since recent versions, the controller deploy an internal LB by default requiring to set an annotation `service.beta.kubernetes.io/aws-load-balancer-scheme: internet-facing` to have an internet-facing LB. For more details, see the [official docs](https://kubernetes-sigs.github.io/aws-load-balancer-controller/v2.7/guide/service/nlb/). + +For general information on LB with AWS see [Network load balancing on Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/network-load-balancing.html). + +:::caution +Before terminating the cluster, all LB backed services should be deleted, so that the controller can cleanup the related resources. +::: + +## Ingress on AWS + +The AWS Load Balancer Controller also provisions `Ingress` resources of class `alb`. +AWS Application Load Balancers (ALBs) can be configured with a [`target-type`](https://kubernetes-sigs.github.io/aws-load-balancer-controller/v2.7/guide/ingress/annotations/#target-type). +The target type `ip` requires using the EKS container network solution, which makes it incompatible with Constellation. +If a service can be exposed on a `NodePort`, the target type `instance` can be used. + +See [Application load balancing on Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/alb-ingress.html) for more information. + +:::caution +Ingress handlers backed by AWS ALBs reside outside the Constellation cluster, so they shouldn't be handling sensitive traffic! +::: diff --git a/docs/versioned_docs/version-2.22/workflows/recovery.md b/docs/versioned_docs/version-2.22/workflows/recovery.md new file mode 100644 index 000000000..592ae247b --- /dev/null +++ b/docs/versioned_docs/version-2.22/workflows/recovery.md @@ -0,0 +1,179 @@ +# Recover your cluster + +Recovery of a Constellation cluster means getting it back into a healthy state after too many concurrent node failures in the control plane. +Reasons for an unhealthy cluster can vary from a power outage, or planned reboot, to migration of nodes and regions. +Recovery events are rare, because Constellation is built for high availability and automatically and securely replaces failed nodes. When a node is replaced, Constellation's control plane first verifies the new node before it sends the node the cryptographic keys required to decrypt its [state disk](../architecture/images.md#state-disk). + +Constellation provides a recovery mechanism for cases where the control plane has failed and is unable to replace nodes. +The `constellation recover` command securely connects to all nodes in need of recovery using [attested TLS](../architecture/attestation.md#attested-tls-atls) and provides them with the keys to decrypt their state disks and continue booting. + +## Identify unhealthy clusters + +The first step to recovery is identifying when a cluster becomes unhealthy. +Usually, this can be first observed when the Kubernetes API server becomes unresponsive. + +You can check the health status of the nodes via the cloud service provider (CSP). +Constellation provides logging information on the boot process and status via serial console output. +In the following, you'll find detailed descriptions for identifying clusters stuck in recovery for each CSP. + + + + +First, open the AWS console to view all Auto Scaling Groups (ASGs) in the region of your cluster. Select the ASG of the control plane `--control-plane` and check that enough members are in a *Running* state. + +Second, check the boot logs of these *Instances*. In the ASG's *Instance management* view, select each desired instance. In the upper right corner, select **Action > Monitor and troubleshoot > Get system log**. + +In the serial console output, search for `Waiting for decryption key`. +Similar output to the following means your node was restarted and needs to decrypt the [state disk](../architecture/images.md#state-disk): + +```json +{"level":"INFO","ts":"2022-09-08T10:21:53Z","caller":"cmd/main.go:55","msg":"Starting disk-mapper","version":"2.0.0","cloudProvider":"gcp"} +{"level":"INFO","ts":"2022-09-08T10:21:53Z","logger":"setupManager","caller":"setup/setup.go:72","msg":"Preparing existing state disk"} +{"level":"INFO","ts":"2022-09-08T10:21:53Z","logger":"rejoinClient","caller":"rejoinclient/client.go:65","msg":"Starting RejoinClient"} +{"level":"INFO","ts":"2022-09-08T10:21:53Z","logger":"recoveryServer","caller":"recoveryserver/server.go:59","msg":"Starting RecoveryServer"} +``` + +The node will then try to connect to the [*JoinService*](../architecture/microservices.md#joinservice) and obtain the decryption key. +If this fails due to an unhealthy control plane, you will see log messages similar to the following: + +```json +{"level":"INFO","ts":"2022-09-08T10:21:53Z","logger":"rejoinClient","caller":"rejoinclient/client.go:77","msg":"Received list with JoinService endpoints","endpoints":["192.168.178.4:30090","192.168.178.2:30090"]} +{"level":"INFO","ts":"2022-09-08T10:21:53Z","logger":"rejoinClient","caller":"rejoinclient/client.go:96","msg":"Requesting rejoin ticket","endpoint":"192.168.178.4:30090"} +{"level":"WARN","ts":"2022-09-08T10:21:53Z","logger":"rejoinClient","caller":"rejoinclient/client.go:101","msg":"Failed to rejoin on endpoint","error":"rpc error: code = Unavailable desc = connection error: desc = \"transport: Error while dialing dial tcp 192.168.178.4:30090: connect: connection refused\"","endpoint":"192.168.178.4:30090"} +{"level":"INFO","ts":"2022-09-08T10:21:53Z","logger":"rejoinClient","caller":"rejoinclient/client.go:96","msg":"Requesting rejoin ticket","endpoint":"192.168.178.2:30090"} +{"level":"WARN","ts":"2022-09-08T10:22:13Z","logger":"rejoinClient","caller":"rejoinclient/client.go:101","msg":"Failed to rejoin on endpoint","error":"rpc error: code = Unavailable desc = connection error: desc = \"transport: Error while dialing dial tcp 192.168.178.2:30090: i/o timeout\"","endpoint":"192.168.178.2:30090"} +{"level":"ERROR","ts":"2022-09-08T10:22:13Z","logger":"rejoinClient","caller":"rejoinclient/client.go:110","msg":"Failed to rejoin on all endpoints"} +``` + +This means that you have to recover the node manually. + + + + +In the Azure portal, find the cluster's resource group. +Inside the resource group, open the control plane *Virtual machine scale set* `constellation-scale-set-controlplanes-`. +On the left, go to **Settings** > **Instances** and check that enough members are in a *Running* state. + +Second, check the boot logs of these *Instances*. +In the scale set's *Instances* view, open the details page of the desired instance. +On the left, go to **Support + troubleshooting** > **Serial console**. + +In the serial console output, search for `Waiting for decryption key`. +Similar output to the following means your node was restarted and needs to decrypt the [state disk](../architecture/images.md#state-disk): + +```json +{"level":"INFO","ts":"2022-09-08T09:56:41Z","caller":"cmd/main.go:55","msg":"Starting disk-mapper","version":"2.0.0","cloudProvider":"azure"} +{"level":"INFO","ts":"2022-09-08T09:56:43Z","logger":"setupManager","caller":"setup/setup.go:72","msg":"Preparing existing state disk"} +{"level":"INFO","ts":"2022-09-08T09:56:43Z","logger":"recoveryServer","caller":"recoveryserver/server.go:59","msg":"Starting RecoveryServer"} +{"level":"INFO","ts":"2022-09-08T09:56:43Z","logger":"rejoinClient","caller":"rejoinclient/client.go:65","msg":"Starting RejoinClient"} +``` + +The node will then try to connect to the [*JoinService*](../architecture/microservices.md#joinservice) and obtain the decryption key. +If this fails due to an unhealthy control plane, you will see log messages similar to the following: + +```json +{"level":"INFO","ts":"2022-09-08T09:56:43Z","logger":"rejoinClient","caller":"rejoinclient/client.go:77","msg":"Received list with JoinService endpoints","endpoints":["10.9.0.5:30090","10.9.0.6:30090"]} +{"level":"INFO","ts":"2022-09-08T09:56:43Z","logger":"rejoinClient","caller":"rejoinclient/client.go:96","msg":"Requesting rejoin ticket","endpoint":"10.9.0.5:30090"} +{"level":"WARN","ts":"2022-09-08T09:57:03Z","logger":"rejoinClient","caller":"rejoinclient/client.go:101","msg":"Failed to rejoin on endpoint","error":"rpc error: code = Unavailable desc = connection error: desc = \"transport: Error while dialing dial tcp 10.9.0.5:30090: i/o timeout\"","endpoint":"10.9.0.5:30090"} +{"level":"INFO","ts":"2022-09-08T09:57:03Z","logger":"rejoinClient","caller":"rejoinclient/client.go:96","msg":"Requesting rejoin ticket","endpoint":"10.9.0.6:30090"} +{"level":"WARN","ts":"2022-09-08T09:57:23Z","logger":"rejoinClient","caller":"rejoinclient/client.go:101","msg":"Failed to rejoin on endpoint","error":"rpc error: code = Unavailable desc = connection error: desc = \"transport: Error while dialing dial tcp 10.9.0.6:30090: i/o timeout\"","endpoint":"10.9.0.6:30090"} +{"level":"ERROR","ts":"2022-09-08T09:57:23Z","logger":"rejoinClient","caller":"rejoinclient/client.go:110","msg":"Failed to rejoin on all endpoints"} +``` + +This means that you have to recover the node manually. + + + + +First, check that the control plane *Instance Group* has enough members in a *Ready* state. +In the GCP Console, go to **Instance Groups** and check the group for the cluster's control plane `-control-plane-`. + +Second, check the status of the *VM Instances*. +Go to **VM Instances** and open the details of the desired instance. +Check the serial console output of that instance by opening the **Logs** > **Serial port 1 (console)** page: + +![GCP portal serial console link](../_media/recovery-gcp-serial-console-link.png) + +In the serial console output, search for `Waiting for decryption key`. +Similar output to the following means your node was restarted and needs to decrypt the [state disk](../architecture/images.md#state-disk): + +```json +{"level":"INFO","ts":"2022-09-08T10:21:53Z","caller":"cmd/main.go:55","msg":"Starting disk-mapper","version":"2.0.0","cloudProvider":"gcp"} +{"level":"INFO","ts":"2022-09-08T10:21:53Z","logger":"setupManager","caller":"setup/setup.go:72","msg":"Preparing existing state disk"} +{"level":"INFO","ts":"2022-09-08T10:21:53Z","logger":"rejoinClient","caller":"rejoinclient/client.go:65","msg":"Starting RejoinClient"} +{"level":"INFO","ts":"2022-09-08T10:21:53Z","logger":"recoveryServer","caller":"recoveryserver/server.go:59","msg":"Starting RecoveryServer"} +``` + +The node will then try to connect to the [*JoinService*](../architecture/microservices.md#joinservice) and obtain the decryption key. +If this fails due to an unhealthy control plane, you will see log messages similar to the following: + +```json +{"level":"INFO","ts":"2022-09-08T10:21:53Z","logger":"rejoinClient","caller":"rejoinclient/client.go:77","msg":"Received list with JoinService endpoints","endpoints":["192.168.178.4:30090","192.168.178.2:30090"]} +{"level":"INFO","ts":"2022-09-08T10:21:53Z","logger":"rejoinClient","caller":"rejoinclient/client.go:96","msg":"Requesting rejoin ticket","endpoint":"192.168.178.4:30090"} +{"level":"WARN","ts":"2022-09-08T10:21:53Z","logger":"rejoinClient","caller":"rejoinclient/client.go:101","msg":"Failed to rejoin on endpoint","error":"rpc error: code = Unavailable desc = connection error: desc = \"transport: Error while dialing dial tcp 192.168.178.4:30090: connect: connection refused\"","endpoint":"192.168.178.4:30090"} +{"level":"INFO","ts":"2022-09-08T10:21:53Z","logger":"rejoinClient","caller":"rejoinclient/client.go:96","msg":"Requesting rejoin ticket","endpoint":"192.168.178.2:30090"} +{"level":"WARN","ts":"2022-09-08T10:22:13Z","logger":"rejoinClient","caller":"rejoinclient/client.go:101","msg":"Failed to rejoin on endpoint","error":"rpc error: code = Unavailable desc = connection error: desc = \"transport: Error while dialing dial tcp 192.168.178.2:30090: i/o timeout\"","endpoint":"192.168.178.2:30090"} +{"level":"ERROR","ts":"2022-09-08T10:22:13Z","logger":"rejoinClient","caller":"rejoinclient/client.go:110","msg":"Failed to rejoin on all endpoints"} +``` + +This means that you have to recover the node manually. + + + + +First, open the STACKIT portal to view all servers in your project. Select individual control plane nodes `--control-plane--` and check that enough members are in a *Running* state. + +Second, check the boot logs of these servers. Click on a server name and select **Overview**. Find the **Machine Setup** section and click on **Web console** > **Open console**. + +In the serial console output, search for `Waiting for decryption key`. +Similar output to the following means your node was restarted and needs to decrypt the [state disk](../architecture/images.md#state-disk): + +```json +{"level":"INFO","ts":"2022-09-08T10:21:53Z","caller":"cmd/main.go:55","msg":"Starting disk-mapper","version":"2.0.0","cloudProvider":"gcp"} +{"level":"INFO","ts":"2022-09-08T10:21:53Z","logger":"setupManager","caller":"setup/setup.go:72","msg":"Preparing existing state disk"} +{"level":"INFO","ts":"2022-09-08T10:21:53Z","logger":"rejoinClient","caller":"rejoinclient/client.go:65","msg":"Starting RejoinClient"} +{"level":"INFO","ts":"2022-09-08T10:21:53Z","logger":"recoveryServer","caller":"recoveryserver/server.go:59","msg":"Starting RecoveryServer"} +``` + +The node will then try to connect to the [*JoinService*](../architecture/microservices.md#joinservice) and obtain the decryption key. +If this fails due to an unhealthy control plane, you will see log messages similar to the following: + +```json +{"level":"INFO","ts":"2022-09-08T10:21:53Z","logger":"rejoinClient","caller":"rejoinclient/client.go:77","msg":"Received list with JoinService endpoints","endpoints":["192.168.178.4:30090","192.168.178.2:30090"]} +{"level":"INFO","ts":"2022-09-08T10:21:53Z","logger":"rejoinClient","caller":"rejoinclient/client.go:96","msg":"Requesting rejoin ticket","endpoint":"192.168.178.4:30090"} +{"level":"WARN","ts":"2022-09-08T10:21:53Z","logger":"rejoinClient","caller":"rejoinclient/client.go:101","msg":"Failed to rejoin on endpoint","error":"rpc error: code = Unavailable desc = connection error: desc = \"transport: Error while dialing dial tcp 192.168.178.4:30090: connect: connection refused\"","endpoint":"192.168.178.4:30090"} +{"level":"INFO","ts":"2022-09-08T10:21:53Z","logger":"rejoinClient","caller":"rejoinclient/client.go:96","msg":"Requesting rejoin ticket","endpoint":"192.168.178.2:30090"} +{"level":"WARN","ts":"2022-09-08T10:22:13Z","logger":"rejoinClient","caller":"rejoinclient/client.go:101","msg":"Failed to rejoin on endpoint","error":"rpc error: code = Unavailable desc = connection error: desc = \"transport: Error while dialing dial tcp 192.168.178.2:30090: i/o timeout\"","endpoint":"192.168.178.2:30090"} +{"level":"ERROR","ts":"2022-09-08T10:22:13Z","logger":"rejoinClient","caller":"rejoinclient/client.go:110","msg":"Failed to rejoin on all endpoints"} +``` + +This means that you have to recover the node manually. + + + + +## Recover a cluster + +Recovering a cluster requires the following parameters: + +* The `constellation-state.yaml` file in your working directory or the cluster's endpoint +* The master secret of the cluster + +A cluster can be recovered like this: + +```bash +$ constellation recover +Pushed recovery key. +Pushed recovery key. +Pushed recovery key. +Recovered 3 control-plane nodes. +``` + +In the serial console output of the node you'll see a similar output to the following: + +```json +{"level":"INFO","ts":"2022-09-08T10:26:59Z","logger":"recoveryServer","caller":"recoveryserver/server.go:93","msg":"Received recover call"} +{"level":"INFO","ts":"2022-09-08T10:26:59Z","logger":"recoveryServer","caller":"recoveryserver/server.go:125","msg":"Received state disk key and measurement secret, shutting down server"} +{"level":"INFO","ts":"2022-09-08T10:26:59Z","logger":"recoveryServer.gRPC","caller":"zap/server_interceptors.go:61","msg":"finished streaming call with code OK","grpc.start_time":"2022-09-08T10:26:59Z","system":"grpc","span.kind":"server","grpc.service":"recoverproto.API","grpc.method":"Recover","peer.address":"192.0.2.3:41752","grpc.code":"OK","grpc.time_ms":15.701} +{"level":"INFO","ts":"2022-09-08T10:27:13Z","logger":"rejoinClient","caller":"rejoinclient/client.go:87","msg":"RejoinClient stopped"} +``` diff --git a/docs/versioned_docs/version-2.22/workflows/reproducible-builds.md b/docs/versioned_docs/version-2.22/workflows/reproducible-builds.md new file mode 100644 index 000000000..e3bc46095 --- /dev/null +++ b/docs/versioned_docs/version-2.22/workflows/reproducible-builds.md @@ -0,0 +1,63 @@ +# Reproduce released artifacts + +Constellation has first-class support for [reproducible builds](https://reproducible-builds.org). +Reproducing the released artifacts is an alternative to [signature verification](verify-cli.md) that doesn't require trusting Edgeless Systems' release process. +The following sections describe how to rebuild an artifact and how Constellation ensures that the rebuild reproduces the artifacts bit-by-bit. + +## Build environment prerequisites + +The build systems used by Constellation - [Bazel](https://bazel.build/) and [Nix](https://nixos.org) - are designed for deterministic, reproducible builds. +These two dependencies should be the only prerequisites for a successful build. +However, it can't be ruled out completely that peculiarities of the host affect the build result. +Thus, we recommend the following host setup for best results: + +1. A Linux operating system not older than v5.4. +2. The GNU C library not older than v2.31 (avoid `musl`). +3. GNU `coreutils` not older than v8.30 (avoid `busybox`). +4. An `ext4` filesystem for building. +5. AppArmor turned off. + +This is given, for example, on an Ubuntu 22.04 system, which is also used for reproducibility tests. + +:::note + +To avoid any backwards-compatibility issues, the host software versions should also not be much newer than the Constellation release. + +::: + +## Run the build + +The following instructions outline qualitatively how to reproduce a build. +Constellation implements these instructions in the [Reproducible Builds workflow](https://github.com/edgelesssys/constellation/actions/workflows/reproducible-builds.yml), which continuously tests for reproducibility. +The workflow is a good place to look up specific version numbers and build steps. + +1. Check out the Constellation repository at the tag corresponding to the release. + + ```bash + git clone https://github.com/edgelesssys/constellation.git + cd constellation + git checkout v2.20.0 + ``` + +2. [Install the Bazel release](https://bazel.build/install) specified in `.bazelversion`. +3. [Install Nix](https://nixos.org/download/) (any recent version should do). +4. Run the build with `bazel build $target` for one of the following targets of interest: + + ```data + //cli:cli_enterprise_darwin_amd64 + //cli:cli_enterprise_darwin_arm64 + //cli:cli_enterprise_linux_amd64 + //cli:cli_enterprise_linux_arm64 + //cli:cli_enterprise_windows_amd64 + ``` + +5. Compare the build result with the downloaded release artifact. + + + +## Feedback + +Reproduction failures often indicate a bug in the build system or in the build definitions. +Therefore, we're interested in any reproducibility issues you might encounter. +[Start a bug report](https://github.com/edgelesssys/constellation/issues/new/choose) and describe the details of your build environment. +Make sure to include your result binary or a [`diffoscope`](https://diffoscope.org/) report, if possible. diff --git a/docs/versioned_docs/version-2.22/workflows/s3proxy.md b/docs/versioned_docs/version-2.22/workflows/s3proxy.md new file mode 100644 index 000000000..121e8a461 --- /dev/null +++ b/docs/versioned_docs/version-2.22/workflows/s3proxy.md @@ -0,0 +1,58 @@ +# Install s3proxy + +Constellation includes a transparent client-side encryption proxy for [AWS S3](https://aws.amazon.com/de/s3/) and compatible stores. +s3proxy encrypts objects before sending them to S3 and automatically decrypts them on retrieval, without requiring changes to your application. +With s3proxy, you can use S3 for storage in a confidential way without having to trust the storage provider. + +## Limitations + +Currently, s3proxy has the following limitations: +- Only `PutObject` and `GetObject` requests are encrypted/decrypted by s3proxy. +By default, s3proxy will block requests that may expose unencrypted data to S3 (e.g. UploadPart). +The `allow-multipart` flag disables request blocking for evaluation purposes. +- Using the [Range](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html#API_GetObject_RequestSyntax) header on `GetObject` is currently not supported and will result in an error. + +These limitations will be removed with future iterations of s3proxy. +If you want to use s3proxy but these limitations stop you from doing so, consider [opening an issue](https://github.com/edgelesssys/constellation/issues/new?assignees=&labels=&projects=&template=feature_request.yml). + +## Deployment + +You can add the s3proxy to your Constellation cluster as follows: +1. Add the Edgeless Systems chart repository: + ```bash + helm repo add edgeless https://helm.edgeless.systems/stable + helm repo update + ``` +2. Set ACCESS_KEY and ACCESS_SECRET to valid credentials you want s3proxy to use to interact with S3. +3. Deploy s3proxy: + ```bash + helm install s3proxy edgeless/s3proxy --set awsAccessKeyID="$ACCESS_KEY" --set awsSecretAccessKey="$ACCESS_SECRET" + ``` + +If you want to run a demo application, check out the [Filestash with s3proxy](../getting-started/examples/filestash-s3proxy.md) example. + + +## Technical details + +### Encryption + +s3proxy relies on Google's [Tink Cryptographic Library](https://developers.google.com/tink) to implement cryptographic operations securely. +The used cryptographic primitives are [NIST SP 800 38f](https://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-38F.pdf) for key wrapping and [AES](https://en.wikipedia.org/wiki/Advanced_Encryption_Standard)-[GCM](https://en.wikipedia.org/wiki/Block_cipher_mode_of_operation#Galois/counter_(GCM)) with 256 bit keys for data encryption. + +s3proxy uses [envelope encryption](https://cloud.google.com/kms/docs/envelope-encryption) to encrypt objects. +This means s3proxy uses a key encryption key (KEK) issued by the [KeyService](../architecture/microservices.md#keyservice) to encrypt data encryption keys (DEKs). +Each S3 object is encrypted with its own DEK. +The encrypted DEK is then saved as metadata of the encrypted object. +This enables key rotation of the KEK without re-encrypting the data in S3. +The approach also allows access to objects from different locations, as long as each location has access to the KEK. + +### Traffic interception + +To use s3proxy, you have to redirect your outbound S3 traffic to s3proxy. +This can either be done by modifying your client application or by changing the deployment of your application. + +The necessary deployment modifications are to add DNS redirection and a trusted TLS certificate to the client's trust store. +DNS redirection can be defined for each pod, allowing you to use s3proxy for one application without changing other applications in the same cluster. +Adding a trusted TLS certificate is necessary as clients communicate with s3proxy via HTTPS. +To have your client application trust s3proxy's TLS certificate, the certificate has to be added to the client's certificate trust store. +The [Filestash with s3proxy](../getting-started/examples/filestash-s3proxy.md) example shows how to do this. diff --git a/docs/versioned_docs/version-2.22/workflows/sbom.md b/docs/versioned_docs/version-2.22/workflows/sbom.md new file mode 100644 index 000000000..6c1702dee --- /dev/null +++ b/docs/versioned_docs/version-2.22/workflows/sbom.md @@ -0,0 +1,93 @@ +# Consume software bill of materials (SBOMs) + + + +--- + +Constellation builds produce a [software bill of materials (SBOM)](https://www.ntia.gov/SBOM) for each generated [artifact](../architecture/microservices.md). +You can use SBOMs to make informed decisions about dependencies and vulnerabilities in a given application. Enterprises rely on SBOMs to maintain an inventory of used applications, which allows them to take data-driven approaches to managing risks related to vulnerabilities. + +SBOMs for Constellation are generated using [Syft](https://github.com/anchore/syft), signed using [Cosign](https://github.com/sigstore/cosign), and stored with the produced artifact. + +:::note +The public key for Edgeless Systems' long-term code-signing key is: + +``` +-----BEGIN PUBLIC KEY----- +MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEf8F1hpmwE+YCFXzjGtaQcrL6XZVT +JmEe5iSLvG1SyQSAew7WdMKF6o9t8e2TFuCkzlOhhlws2OHWbiFZnFWCFw== +-----END PUBLIC KEY----- +``` + +The public key is also available for download at [https://edgeless.systems/es.pub](https://edgeless.systems/es.pub) and in the Twitter profile [@EdgelessSystems](https://twitter.com/EdgelessSystems). + +Make sure the key is available in a file named `cosign.pub` to execute the following examples. +::: + +## Verify and download SBOMs + +The following sections detail how to work with each type of artifact to verify and extract the SBOM. + +### Constellation CLI + +The SBOM for Constellation CLI is made available on the [GitHub release page](https://github.com/edgelesssys/constellation/releases). The SBOM (`constellation.spdx.sbom`) and corresponding signature (`constellation.spdx.sbom.sig`) are valid for each Constellation CLI for a given version, regardless of architecture and operating system. + +```bash +curl -LO https://github.com/edgelesssys/constellation/releases/download/v2.2.0/constellation.spdx.sbom +curl -LO https://github.com/edgelesssys/constellation/releases/download/v2.2.0/constellation.spdx.sbom.sig +cosign verify-blob --key cosign.pub --signature constellation.spdx.sbom.sig constellation.spdx.sbom +``` + +### Container Images + +SBOMs for container images are [attached to the image using Cosign](https://docs.sigstore.dev/cosign/signing/other_types/#sboms-software-bill-of-materials) and uploaded to the same registry. + +As a consumer, use cosign to download and verify the SBOM: + +```bash +# Verify and download the attestation statement +cosign verify-attestation ghcr.io/edgelesssys/constellation/verification-service@v2.2.0 --type 'https://cyclonedx.org/bom' --key cosign.pub --output-file verification-service.att.json +# Extract SBOM from attestation statement +jq -r .payload verification-service.att.json | base64 -d > verification-service.cyclonedx.sbom +``` + +A successful verification should result in similar output: + +```shell-session +$ cosign verify-attestation ghcr.io/edgelesssys/constellation/verification-service@v2.2.0 --type 'https://cyclonedx.org/bom' --key cosign.pub --output-file verification-service.sbom + +Verification for ghcr.io/edgelesssys/constellation/verification-service@v2.2.0 -- +The following checks were performed on each of these signatures: + - The cosign claims were validated + - The signatures were verified against the specified public key +$ jq -r .payload verification-service.sbom | base64 -d > verification-service.cyclonedx.sbom +``` + +:::note + +This example considers only the `verification-service`. The same approach works for all containers in the [Constellation container registry](https://github.com/orgs/edgelesssys/packages?repo_name=constellation). + +::: + + + +## Vulnerability scanning + +You can use a plethora of tools to consume SBOMs. This section provides suggestions for tools that are popular and known to produce reliable results, but any tool that consumes [SPDX](https://spdx.dev/) or [CycloneDX](https://cyclonedx.org/) files should work. + +Syft is able to [convert between the two formats](https://github.com/anchore/syft#format-conversion-experimental) in case you require a specific type. + +### Grype + +[Grype](https://github.com/anchore/grype) is a CLI tool that lends itself well for integration into CI/CD systems or local developer machines. It's also able to consume the signed attestation statement directly and does the verification in one go. + +```bash +grype att:verification-service.sbom --key cosign.pub --add-cpes-if-none -q +``` + +### Dependency Track + +[Dependency Track](https://dependencytrack.org/) is one of the oldest and most mature solutions when it comes to managing software inventory and vulnerabilities. Once imported, it continuously scans SBOMs for new vulnerabilities. It supports the CycloneDX format and provides direct guidance on how to comply with [U.S. Executive Order 14028](https://docs.dependencytrack.org/usage/executive-order-14028/). diff --git a/docs/versioned_docs/version-2.22/workflows/scale.md b/docs/versioned_docs/version-2.22/workflows/scale.md new file mode 100644 index 000000000..28f19e3f1 --- /dev/null +++ b/docs/versioned_docs/version-2.22/workflows/scale.md @@ -0,0 +1,122 @@ +# Scale your cluster + +Constellation provides all features of a Kubernetes cluster including scaling and autoscaling. + +## Worker node scaling + +### Autoscaling + +Constellation comes with autoscaling disabled by default. To enable autoscaling, find the scaling group of +worker nodes: + +```bash +kubectl get scalinggroups -o json | yq '.items | .[] | select(.spec.role == "Worker") | [{"name": .metadata.name, "nodeGoupName": .spec.nodeGroupName}]' +``` + +This will output a list of scaling groups with the corresponding cloud provider name (`name`) and the cloud provider agnostic name of the node group (`nodeGroupName`). + +Then, patch the `autoscaling` field of the scaling group resource with the desired `name` to `true`: + +```bash +# Replace with the name of the scaling group you want to enable autoscaling for +worker_group= +kubectl patch scalinggroups $worker_group --patch '{"spec":{"autoscaling": true}}' --type='merge' +kubectl get scalinggroup $worker_group -o jsonpath='{.spec}' | yq -P +``` + +The cluster autoscaler now automatically provisions additional worker nodes so that all pods have a place to run. +You can configure the minimum and maximum number of worker nodes in the scaling group by patching the `min` or +`max` fields of the scaling group resource: + +```bash +kubectl patch scalinggroups $worker_group --patch '{"spec":{"max": 5}}' --type='merge' +kubectl get scalinggroup $worker_group -o jsonpath='{.spec}' | yq -P +``` + +The cluster autoscaler will now never provision more than 5 worker nodes. + +If you want to see the autoscaling in action, try to add a deployment with a lot of replicas, like the +following Nginx deployment. The number of replicas needed to trigger the autoscaling depends on the size of +and count of your worker nodes. Wait for the rollout of the deployment to finish and compare the number of +worker nodes before and after the deployment: + +```bash +kubectl create deployment nginx --image=nginx --replicas 150 +kubectl -n kube-system get nodes +kubectl rollout status deployment nginx +kubectl -n kube-system get nodes +``` + +### Manual scaling + +Alternatively, you can manually scale your cluster up or down: + + + + +1. Go to Auto Scaling Groups and select the worker ASG to scale up. +2. Click **Edit** +3. Set the new (increased) **Desired capacity** and **Update**. + + + + +1. Find your Constellation resource group. +2. Select the `scale-set-workers`. +3. Go to **settings** and **scaling**. +4. Set the new **instance count** and **save**. + + + + +1. In Compute Engine go to [Instance Groups](https://console.cloud.google.com/compute/instanceGroups/). +2. **Edit** the **worker** instance group. +3. Set the new **number of instances** and **save**. + + + + +Dynamic cluster scaling isn't yet supported for STACKIT. +Support will be introduced in one of the upcoming releases. + + + + +## Control-plane node scaling + +Control-plane nodes can **only be scaled manually and only scaled up**! + +To increase the number of control-plane nodes, follow these steps: + + + + +1. Go to Auto Scaling Groups and select the control-plane ASG to scale up. +2. Click **Edit** +3. Set the new (increased) **Desired capacity** and **Update**. + + + + +1. Find your Constellation resource group. +2. Select the `scale-set-controlplanes`. +3. Go to **settings** and **scaling**. +4. Set the new (increased) **instance count** and **save**. + + + + +1. In Compute Engine go to [Instance Groups](https://console.cloud.google.com/compute/instanceGroups/). +2. **Edit** the **control-plane** instance group. +3. Set the new (increased) **number of instances** and **save**. + + + + +Dynamic cluster scaling isn't yet supported for STACKIT. +Support will be introduced in one of the upcoming releases. + + + + +If you scale down the number of control-planes nodes, the removed nodes won't be able to exit the `etcd` cluster correctly. This will endanger the quorum that's required to run a stable Kubernetes control plane. diff --git a/docs/versioned_docs/version-2.22/workflows/storage.md b/docs/versioned_docs/version-2.22/workflows/storage.md new file mode 100644 index 000000000..a5c52be90 --- /dev/null +++ b/docs/versioned_docs/version-2.22/workflows/storage.md @@ -0,0 +1,281 @@ +# Use persistent storage + +Persistent storage in Kubernetes requires cloud-specific configuration. +For abstraction of container storage, Kubernetes offers [volumes](https://kubernetes.io/docs/concepts/storage/volumes/), +allowing users to mount storage solutions directly into containers. +The [Container Storage Interface (CSI)](https://kubernetes-csi.github.io/docs/) is the standard interface for exposing arbitrary block and file storage systems into containers in Kubernetes. +Cloud service providers (CSPs) offer their own CSI-based solutions for cloud storage. + +## Confidential storage + +Most cloud storage solutions support encryption, such as [GCE Persistent Disks (PD)](https://cloud.google.com/kubernetes-engine/docs/how-to/using-cmek). +Constellation supports the available CSI-based storage options for Kubernetes engines in AWS, Azure, GCP, and STACKIT. +However, their encryption takes place in the storage backend and is managed by the CSP. +Thus, using the default CSI drivers for these storage types means trusting the CSP with your persistent data. + +To address this, Constellation provides CSI drivers for AWS EBS, Azure Disk, GCE PD, and OpenStack Cinder, offering [encryption on the node level](../architecture/keys.md#storage-encryption). They enable transparent encryption for persistent volumes without needing to trust the cloud backend. Plaintext data never leaves the confidential VM context, offering you confidential storage. + +For more details see [encrypted persistent storage](../architecture/encrypted-storage.md). + +## CSI drivers + +Constellation supports the following drivers, which offer node-level encryption and optional integrity protection. + + + + +**Constellation CSI driver for AWS Elastic Block Store** +Mount [Elastic Block Store](https://aws.amazon.com/ebs/) storage volumes into your Constellation cluster. +Follow the instructions on how to [install the Constellation CSI driver](#installation) or check out the [repository](https://github.com/edgelesssys/constellation-aws-ebs-csi-driver) for more information. + + + + +**Constellation CSI driver for Azure Disk**: +Mount Azure [Disk Storage](https://azure.microsoft.com/en-us/services/storage/disks/#overview) into your Constellation cluster. +See the instructions on how to [install the Constellation CSI driver](#installation) or check out the [repository](https://github.com/edgelesssys/constellation-azuredisk-csi-driver) for more information. +Since Azure Disks are mounted as `ReadWriteOnce`, they're only available to a single pod. + + + + +**Constellation CSI driver for GCP Persistent Disk**: +Mount [Persistent Disk](https://cloud.google.com/persistent-disk) block storage into your Constellation cluster. +Follow the instructions on how to [install the Constellation CSI driver](#installation) or check out the [repository](https://github.com/edgelesssys/constellation-gcp-compute-persistent-disk-csi-driver) for more information. + + + + +**Constellation CSI driver for STACKIT / OpenStack Cinder** +Mount [Cinder](https://docs.openstack.org/cinder/latest/) block storage volumes into your Constellation cluster. +Follow the instructions on how to [install the Constellation CSI driver](#installation) or check out the [repository](https://github.com/edgelesssys/constellation-cloud-provider-openstack) for more information. + + + + +Note that in case the options above aren't a suitable solution for you, Constellation is compatible with all other CSI-based storage options. For example, you can use [AWS EFS](https://docs.aws.amazon.com/en_en/eks/latest/userguide/efs-csi.html), [Azure Files](https://docs.microsoft.com/en-us/azure/storage/files/storage-files-introduction), or [GCP Filestore](https://cloud.google.com/filestore) with Constellation out of the box. Constellation is just not providing transparent encryption on the node level for these storage types yet. + +## Installation + +The Constellation CLI automatically installs Constellation's CSI driver for the selected CSP in your cluster. +If you don't need a CSI driver or wish to deploy your own, you can disable the automatic installation by setting `deployCSIDriver` to `false` in your Constellation config file. + + + + +AWS comes with two storage classes by default. + +* `encrypted-rwo` + * Uses [SSDs of `gp3` type](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-volume-types.html) + * ext-4 filesystem + * Encryption of all data written to disk +* `integrity-encrypted-rwo` + * Uses [SSDs of `gp3` type](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-volume-types.html) + * ext-4 filesystem + * Encryption of all data written to disk + * Integrity protection of data written to disk + +For more information on encryption algorithms and key sizes, refer to [cryptographic algorithms](../architecture/encrypted-storage.md#cryptographic-algorithms). + +:::info + +The default storage class is set to `encrypted-rwo` for performance reasons. +If you want integrity-protected storage, set the `storageClassName` parameter of your persistent volume claim to `integrity-encrypted-rwo`. + +Alternatively, you can create your own storage class with integrity protection enabled by adding `csi.storage.k8s.io/fstype: ext4-integrity` to the class `parameters`. +Or use another filesystem by specifying another file system type with the suffix `-integrity`, e.g., `csi.storage.k8s.io/fstype: xfs-integrity`. + +Note that volume expansion isn't supported for integrity-protected disks. + +::: + + + + +Azure comes with two storage classes by default. + +* `encrypted-rwo` + * Uses [Standard SSDs](https://learn.microsoft.com/en-us/azure/virtual-machines/disks-types#standard-ssds) + * ext-4 filesystem + * Encryption of all data written to disk +* `integrity-encrypted-rwo` + * Uses [Premium SSDs](https://learn.microsoft.com/en-us/azure/virtual-machines/disks-types#premium-ssds) + * ext-4 filesystem + * Encryption of all data written to disk + * Integrity protection of data written to disk + +For more information on encryption algorithms and key sizes, refer to [cryptographic algorithms](../architecture/encrypted-storage.md#cryptographic-algorithms). + +:::info + +The default storage class is set to `encrypted-rwo` for performance reasons. +If you want integrity-protected storage, set the `storageClassName` parameter of your persistent volume claim to `integrity-encrypted-rwo`. + +Alternatively, you can create your own storage class with integrity protection enabled by adding `csi.storage.k8s.io/fstype: ext4-integrity` to the class `parameters`. +Or use another filesystem by specifying another file system type with the suffix `-integrity`, e.g., `csi.storage.k8s.io/fstype: xfs-integrity`. + +Note that volume expansion isn't supported for integrity-protected disks. + +::: + + + + +GCP comes with two storage classes by default. + +* `encrypted-rwo` + * Uses [standard persistent disks](https://cloud.google.com/compute/docs/disks#pdspecs) + * ext-4 filesystem + * Encryption of all data written to disk +* `integrity-encrypted-rwo` + * Uses [performance (SSD) persistent disks](https://cloud.google.com/compute/docs/disks#pdspecs) + * ext-4 filesystem + * Encryption of all data written to disk + * Integrity protection of data written to disk + +For more information on encryption algorithms and key sizes, refer to [cryptographic algorithms](../architecture/encrypted-storage.md#cryptographic-algorithms). + +:::info + +The default storage class is set to `encrypted-rwo` for performance reasons. +If you want integrity-protected storage, set the `storageClassName` parameter of your persistent volume claim to `integrity-encrypted-rwo`. + +Alternatively, you can create your own storage class with integrity protection enabled by adding `csi.storage.k8s.io/fstype: ext4-integrity` to the class `parameters`. +Or use another filesystem by specifying another file system type with the suffix `-integrity`, e.g., `csi.storage.k8s.io/fstype: xfs-integrity`. + +Note that volume expansion isn't supported for integrity-protected disks. + +::: + + + + +STACKIT comes with two storage classes by default. + +* `encrypted-rwo` + * Uses [disks of `storage_premium_perf1` type](https://docs.stackit.cloud/stackit/en/service-plans-blockstorage-75137974.html) + * ext-4 filesystem + * Encryption of all data written to disk +* `integrity-encrypted-rwo` + * Uses [disks of `storage_premium_perf1` type](https://docs.stackit.cloud/stackit/en/service-plans-blockstorage-75137974.html) + * ext-4 filesystem + * Encryption of all data written to disk + * Integrity protection of data written to disk + +For more information on encryption algorithms and key sizes, refer to [cryptographic algorithms](../architecture/encrypted-storage.md#cryptographic-algorithms). + +:::info + +The default storage class is set to `encrypted-rwo` for performance reasons. +If you want integrity-protected storage, set the `storageClassName` parameter of your persistent volume claim to `integrity-encrypted-rwo`. + +Alternatively, you can create your own storage class with integrity protection enabled by adding `csi.storage.k8s.io/fstype: ext4-integrity` to the class `parameters`. +Or use another filesystem by specifying another file system type with the suffix `-integrity`, e.g., `csi.storage.k8s.io/fstype: xfs-integrity`. + +Note that volume expansion isn't supported for integrity-protected disks. + +::: + + + + +1. Create a [persistent volume](https://kubernetes.io/docs/concepts/storage/persistent-volumes/) + + A [persistent volume claim](https://kubernetes.io/docs/concepts/storage/persistent-volumes/#persistentvolumeclaims) is a request for storage with certain properties. + It can refer to a storage class. + The following creates a persistent volume claim, requesting 20 GB of storage via the `encrypted-rwo` storage class: + + ```bash + cat < + +--- + +You can terminate your cluster using the CLI. For this, you need the Terraform state directory named [`constellation-terraform`](../reference/terraform.md) in the current directory. + +:::danger + +All ephemeral storage and state of your cluster will be lost. Make sure any data is safely stored in persistent storage. Constellation can recreate your cluster and the associated encryption keys, but won't backup your application data automatically. + +::: + + + +Terminate the cluster by running: + +```bash +constellation terminate +``` + +Or without confirmation (e.g., for automation purposes): + +```bash +constellation terminate --yes +``` + +This deletes all resources created by Constellation in your cloud environment. +All local files created by the `apply` command are deleted as well, except for `constellation-mastersecret.json` and the configuration file. + +:::caution + +Termination can fail if additional resources have been created that depend on the ones managed by Constellation. In this case, you need to delete these additional +resources manually. Just run the `terminate` command again afterward to continue the termination process of the cluster. + +::: + + + +Terminate the cluster by running: + +```bash +terraform destroy +``` + +Delete all files that are no longer needed: + +```bash +rm constellation-state.yaml constellation-admin.conf +``` + +Only the `constellation-mastersecret.json` and the configuration file remain. + + + diff --git a/docs/versioned_docs/version-2.22/workflows/terraform-provider.md b/docs/versioned_docs/version-2.22/workflows/terraform-provider.md new file mode 100644 index 000000000..c7a795d3f --- /dev/null +++ b/docs/versioned_docs/version-2.22/workflows/terraform-provider.md @@ -0,0 +1,140 @@ +# Use the Terraform provider + +The Constellation Terraform provider allows to manage the full lifecycle of a Constellation cluster (namely creation, upgrades, and deletion) via Terraform. +The provider is available through the [Terraform registry](https://registry.terraform.io/providers/edgelesssys/constellation/latest) and is released in lock-step with Constellation releases. + +## Prerequisites + +- a Linux / Mac operating system (ARM64/AMD64) +- a Terraform installation of version `v1.4.4` or above + +## Quick setup + +This example shows how to set up a Constellation cluster with the reference IAM and infrastructure setup. This setup is also used when creating a Constellation cluster through the Constellation CLI. You can either consume the IAM / infrastructure modules through a remote source (recommended) or local files. The latter requires downloading the infrastructure and IAM modules for the corresponding CSP from `terraform-modules.zip` on the [Constellation release page](https://github.com/edgelesssys/constellation/releases/latest) and placing them in the Terraform workspace directory. + +1. Create a directory (workspace) for your Constellation cluster. + + ```bash + mkdir constellation-workspace + cd constellation-workspace + ``` + +2. Use one of the [example configurations for using the Constellation Terraform provider](https://github.com/edgelesssys/constellation/tree/main/terraform-provider-constellation/examples/full) or create a `main.tf` file and fill it with the resources you want to create. The [Constellation Terraform provider documentation](https://registry.terraform.io/providers/edgelesssys/constellation/latest) offers thorough documentation on the resources and their attributes. +3. Initialize and apply the Terraform configuration. + + + + Initialize the providers and apply the configuration. + + ```bash + terraform init + terraform apply + ``` + + Optionally, you can prefix the `terraform apply` command with `TF_LOG=INFO` to collect [Terraform logs](https://developer.hashicorp.com/terraform/internals/debugging) while applying the configuration. This may provide helpful output in debugging scenarios. + + + +:::info +On SEV-SNP, you need to manually patch the policy of the MAA provider before creating the Constellation cluster, as this feature isn't available in Azure's Terraform provider yet. The Constellation CLI provides a utility for patching, but you can also do it manually. + + ```bash + terraform init + terraform apply -target module.azure_iam # adjust resource path if not using the example configuration + terraform apply -target module.azure_infrastructure # adjust resource path if not using the example configuration + constellation maa-patch $(terraform output -raw maa_url) # adjust output path / input if not using the example configuration or manually patch the resource + terraform apply -target constellation_cluster.azure_example # adjust resource path if not using the example configuration + ``` + + Use the following policy if manually performing the patch. + + ``` + version= 1.0; + authorizationrules + { + [type=="x-ms-azurevm-default-securebootkeysvalidated", value==false] => deny(); + [type=="x-ms-azurevm-debuggersdisabled", value==false] => deny(); + // The line below was edited to use the MAA provider within Constellation. Do not edit manually. + //[type=="secureboot", value==false] => deny(); + [type=="x-ms-azurevm-signingdisabled", value==false] => deny(); + [type=="x-ms-azurevm-dbvalidated", value==false] => deny(); + [type=="x-ms-azurevm-dbxvalidated", value==false] => deny(); + => permit(); + }; + issuancerules + { + }; + ``` + +::: + + Initialize the providers and apply the configuration. + + ```bash + terraform init + terraform apply + ``` + + Optionally, you can prefix the `terraform apply` command with `TF_LOG=INFO` to collect [Terraform logs](https://developer.hashicorp.com/terraform/internals/debugging) while applying the configuration. This may provide helpful output in debugging scenarios. + + + + + Initialize the providers and apply the configuration. + + ```bash + terraform init + terraform apply + ``` + + Optionally, you can prefix the `terraform apply` command with `TF_LOG=INFO` to collect [Terraform logs](https://developer.hashicorp.com/terraform/internals/debugging) while applying the configuration. This may provide helpful output in debugging scenarios. + + + Initialize the providers and apply the configuration. + + ```bash + terraform init + terraform apply + ``` + + Optionally, you can prefix the `terraform apply` command with `TF_LOG=INFO` to collect [Terraform logs](https://developer.hashicorp.com/terraform/internals/debugging) while applying the configuration. This may provide helpful output in debugging scenarios. + + + +4. Connect to the cluster. + + ```bash + terraform output -raw kubeconfig > constellation-admin.conf + export KUBECONFIG=$(realpath constellation-admin.conf) + ``` + +## Bringing your own infrastructure + +Instead of using the example infrastructure used in the [quick setup](#quick-setup), you can also provide your own infrastructure. +If you need a starting point for a custom infrastructure setup, you can download the infrastructure / IAM Terraform modules for the respective CSP from the Constellation [GitHub releases](https://github.com/edgelesssys/constellation/releases). You can modify and extend the modules per your requirements, while keeping the basic functionality intact. +The module contains: + +- `{csp}`: cloud resources the cluster runs on +- `iam/{csp}`: IAM resources used within the cluster + +When upgrading your cluster, make sure to check the Constellation release notes for potential breaking changes in the reference infrastructure / IAM modules that need to be considered. + +## Cluster upgrades + +:::tip +Also see the [general documentation on cluster upgrades](./upgrade.md). +::: + +The steps for applying the upgrade are as follows: + +1. Update the version constraint of the Constellation Terraform provider in the `required_providers` block in your Terraform configuration. +2. If you explicitly set any of the version attributes of the provider's resources and data sources (e.g. `image_version` or `constellation_microservice_version`), make sure to update them too. Refer to Constellation's [version support policy](https://github.com/edgelesssys/constellation/blob/main/dev-docs/workflows/versions-support.md) for more information on how each Constellation version and its dependencies are supported. +3. Update the IAM / infrastructure configuration. + - For [remote addresses as module sources](https://developer.hashicorp.com/terraform/language/modules/sources#fetching-archives-over-http), update the version number inside the address of the `source` field of the infrastructure / IAM module to the target version. + - For [local paths as module sources](https://developer.hashicorp.com/terraform/language/modules/sources#local-paths) or when [providing your own infrastructure](#bringing-your-own-infrastructure), see the changes made in the reference modules since the upgrade's origin version and adjust your infrastructure / IAM configuration accordingly. +4. Upgrade the Terraform module and provider dependencies and apply the targeted configuration. + +```bash + terraform init -upgrade + terraform apply +``` diff --git a/docs/versioned_docs/version-2.22/workflows/troubleshooting.md b/docs/versioned_docs/version-2.22/workflows/troubleshooting.md new file mode 100644 index 000000000..903c829e0 --- /dev/null +++ b/docs/versioned_docs/version-2.22/workflows/troubleshooting.md @@ -0,0 +1,200 @@ +# Troubleshooting + +This section aids you in finding problems when working with Constellation. + +## Common issues + +### Issues with creating new clusters + +When you create a new cluster, you should always use the [latest release](https://github.com/edgelesssys/constellation/releases/latest). +If something doesn't work, check out the [known issues](https://github.com/edgelesssys/constellation/issues?q=is%3Aopen+is%3Aissue+label%3A%22known+issue%22). + +### Azure: Resource Providers can't be registered + +On Azure, you may receive the following error when running `apply` or `terminate` with limited IAM permissions: + +```shell-session +Error: Error ensuring Resource Providers are registered. + +Terraform automatically attempts to register the Resource Providers it supports to +ensure it's able to provision resources. + +If you don't have permission to register Resource Providers you may wish to use the +"skip_provider_registration" flag in the Provider block to disable this functionality. + +[...] +``` + +To continue, please ensure that the [required resource providers](../getting-started/install.md#required-permissions) have been registered in your subscription by your administrator. + +Afterward, set `ARM_SKIP_PROVIDER_REGISTRATION=true` as an environment variable and either run `apply` or `terminate` again. +For example: + +```bash +ARM_SKIP_PROVIDER_REGISTRATION=true constellation apply +``` + +Or alternatively, for `terminate`: + +```bash +ARM_SKIP_PROVIDER_REGISTRATION=true constellation terminate +``` + +### Azure: Can't update attestation policy + +On Azure, you may receive the following error when running `apply` from within an Azure environment, e.g., an Azure VM: + +```shell-session +An error occurred: patching policies: updating attestation policy: unexpected status code: 403 Forbidden +``` + +The problem occurs because the Azure SDK we use internally attempts to [authenticate towards the Azure API with the managed identity of your current environment instead of the Azure CLI token](https://pkg.go.dev/github.com/Azure/azure-sdk-for-go/sdk/azidentity#DefaultAzureCredential). + +We decided not to deviate from this behavior and comply with the ordering of credentials. + +A solution is to add the [required permissions](../getting-started/install.md#required-permissions) to the managed identity of your environment. For example, the managed identity of your Azure VM, instead of the account that you've authenticated with in the Azure CLI. + +If your setup requires a change in the ordering of credentials, please open an issue and explain your desired behavior. + + + +### Nodes fail to join with error `untrusted measurement value` + +This error indicates that a node's [attestation statement](../architecture/attestation.md) contains measurements that don't match the trusted values expected by the [JoinService](../architecture/microservices.md#joinservice). +This may for example happen if the cloud provider updates the VM's firmware such that it influences the [runtime measurements](../architecture/attestation.md#runtime-measurements) in an unforeseen way. +A failed upgrade due to an erroneous attestation config can also cause this error. +You can change the expected measurements to resolve the failure. + +:::caution + +Attestation and trusted measurements are crucial for the security of your cluster. +Be extra careful when manually changing these settings. +When in doubt, check if the encountered [issue is known](https://github.com/edgelesssys/constellation/issues?q=is%3Aopen+is%3Aissue+label%3A%22known+issue%22) or [contact support](https://github.com/edgelesssys/constellation#support). + +::: + +:::tip + +During an upgrade with modified attestation config, a backup of the current configuration is stored in the `join-config` config map in the `kube-system` namespace under the `attestationConfig_backup` key. To restore the old attestation config after a failed upgrade, replace the value of `attestationConfig` with the value from `attestationConfig_backup`: + +```bash +kubectl patch configmaps -n kube-system join-config -p "{\"data\":{\"attestationConfig\":\"$(kubectl get configmaps -n kube-system join-config -o "jsonpath={.data.attestationConfig_backup}")\"}}" +``` + +::: + +You can use the `apply` command to change measurements of a running cluster: + +1. Modify the `measurements` key in your local `constellation-conf.yaml` to the expected values. +2. Run `constellation apply`. + +Keep in mind that running `apply` also applies any version changes from your config to the cluster. + +You can run these commands to learn about the versions currently configured in the cluster: + +- Kubernetes API server version: `kubectl get nodeversion constellation-version -o json -n kube-system | jq .spec.kubernetesClusterVersion` +- image version: `kubectl get nodeversion constellation-version -o json -n kube-system | jq .spec.imageVersion` +- microservices versions: `helm list --filter 'constellation-services' -n kube-system` + +### Upgrading Kubernetes resources fails + +Constellation manages its Kubernetes resources using Helm. +When applying an upgrade, the charts that are about to be installed, and a values override file `overrides.yaml`, +are saved to disk in your current workspace under `constellation-upgrade/upgrade-/helm-charts/`. +If upgrading the charts using the Constellation CLI fails, you can review these charts and try to manually apply the upgrade. + +:::caution + +Changing and manually applying the charts may destroy cluster resources and can lead to broken Constellation deployments. +Proceed with caution and when in doubt, +check if the encountered [issue is known](https://github.com/edgelesssys/constellation/issues?q=is%3Aopen+is%3Aissue+label%3A%22known+issue%22) or [contact support](https://github.com/edgelesssys/constellation#support). + +::: + +## Diagnosing issues + +### Logs + +To get started on diagnosing issues with Constellation, it's often helpful to collect logs from nodes, pods, or other resources in the cluster. Most logs are available through Kubernetes' standard +[logging interfaces](https://kubernetes.io/docs/concepts/cluster-administration/logging/). + +To debug issues occurring at boot time of the nodes, you can use the serial console interface of the CSP while the machine boots to get a read-only view of the boot logs. + +Apart from that, Constellation also offers further [observability integrations](../architecture/observability.md). + +### Node shell access + +Debugging via a shell on a node is [directly supported by Kubernetes](https://kubernetes.io/docs/tasks/debug/debug-application/debug-running-pod/#node-shell-session). + +1. Figure out which node to connect to: + + ```bash + kubectl get nodes + # or to see more information, such as IPs: + kubectl get nodes -o wide + ``` + +2. Connect to the node: + + ```bash + kubectl debug node/constell-worker-xksa0-000000 -it --image=busybox + ``` + + You will be presented with a prompt. + + The nodes file system is mounted at `/host`. + +3. Once finished, clean up the debug pod: + + ```bash + kubectl delete pod node-debugger-constell-worker-xksa0-000000-bjthj + ``` + +### Emergency SSH access + +Emergency SSH access to nodes can be useful to diagnose issues or download important data even if the Kubernetes API isn't reachable anymore. + +1. Enter the `constellation-terraform` directory in your Constellation workspace and enable emergency SSH access to the cluster: + + ```bash + cd constellation-terraform + echo "emergency_ssh = true" >> ./terraform.tfvars + terraform apply + ``` + +2. Sign an existing SSH key with your master secret: + + ```bash + cd ../ # go back to your Constellation workspace + constellation ssh --key your_public_key.pub + ``` + + A certificate is written to `constellation_cert.pub`. + + The certificate is valid for 24 hours and enables you to access your Constellation nodes using + [certificate based authentication](https://en.wikibooks.org/wiki/OpenSSH/Cookbook/Certificate-based_Authentication). + +3. Now you can connect to any Constellation node using your certificate and your private key. + + ```bash + ssh -o CertificateFile=constellation_cert.pub -i root@ + ``` + + Normally, you don't have access to the Constellation nodes since they reside in a private network. + To access those nodes anyways, you can use your Constellation load balancer as a proxy jump host. + For this, use something along the following SSH client configuration: + + ```text + Host + ProxyJump none + + Host * + IdentityFile + PreferredAuthentications publickey + CertificateFile=constellation_cert.pub + User root + ProxyJump + ``` + + With this configuration you can connect to a Constellation node using `ssh -F `. + You can obtain the private node IP and the domain name of the load balancer using your CSP's web UI. diff --git a/docs/versioned_docs/version-2.22/workflows/trusted-launch.md b/docs/versioned_docs/version-2.22/workflows/trusted-launch.md new file mode 100644 index 000000000..d6d01d8eb --- /dev/null +++ b/docs/versioned_docs/version-2.22/workflows/trusted-launch.md @@ -0,0 +1,54 @@ +# Use Azure trusted launch VMs + +Constellation also supports [trusted launch VMs](https://docs.microsoft.com/en-us/azure/virtual-machines/trusted-launch) on Microsoft Azure. Trusted launch VMs don't offer the same level of security as Confidential VMs, but are available in more regions and in larger quantities. The main difference between trusted launch VMs and normal VMs is that the former offer vTPM-based remote attestation. When used with trusted launch VMs, Constellation relies on vTPM-based remote attestation to verify nodes. + +:::caution + +Trusted launch VMs don't provide runtime encryption and don't keep the cloud service provider (CSP) out of your trusted computing base. + +::: + +Constellation supports trusted launch VMs with instance types `Standard_D*_v4` and `Standard_E*_v4`. Run `constellation config instance-types` for a list of all supported instance types. + +## VM images + +Azure currently doesn't support [community galleries for trusted launch VMs](https://docs.microsoft.com/en-us/azure/virtual-machines/share-gallery-community). Thus, you need to manually import the Constellation node image into your cloud subscription. + +The latest image is available at `https://cdn.confidential.cloud/constellation/images/azure/trusted-launch/v2.2.0/constellation.img`. Simply adjust the version number to download a newer version. + +After you've downloaded the image, create a resource group `constellation-images` in your Azure subscription and import the image. +You can use a script to do this: + +```bash +wget https://raw.githubusercontent.com/edgelesssys/constellation/main/hack/importAzure.sh +chmod +x importAzure.sh +AZURE_IMAGE_VERSION=2.2.0 AZURE_RESOURCE_GROUP_NAME=constellation-images AZURE_IMAGE_FILE=./constellation.img ./importAzure.sh +``` + +The script creates the following resources: + +1. A new image gallery with the default name `constellation-import` +2. A new image definition with the default name `constellation` +3. The actual image with the provided version. In this case `2.2.0` + +Once the import is completed, use the `ID` of the image version in your `constellation-conf.yaml` for the `image` field. Set `confidentialVM` to `false`. + +Fetch the image measurements: + +```bash +IMAGE_VERSION=2.2.0 +URL=https://public-edgeless-constellation.s3.us-east-2.amazonaws.com//communitygalleries/constellationcvm-b3782fa0-0df7-4f2f-963e-fc7fc42663df/images/constellation/versions/$IMAGE_VERSION/measurements.yaml +constellation config fetch-measurements -u$URL -s$URL.sig +``` + +:::info + +The [`constellation apply`](create.md) command will issue a warning because manually imported images aren't recognized as production grade images: + +```shell-session +Configured image doesn't look like a released production image. Double check image before deploying to production. +``` + +Please ignore this warning. + +::: diff --git a/docs/versioned_docs/version-2.22/workflows/upgrade.md b/docs/versioned_docs/version-2.22/workflows/upgrade.md new file mode 100644 index 000000000..3db2ecad6 --- /dev/null +++ b/docs/versioned_docs/version-2.22/workflows/upgrade.md @@ -0,0 +1,110 @@ +# Upgrade your cluster + +Constellation provides an easy way to upgrade all components of your cluster, without disrupting its availability. +Specifically, you can upgrade the Kubernetes version, the nodes' image, and the Constellation microservices. +You configure the desired versions in your local Constellation configuration and trigger upgrades with the `apply` command. +To learn about available versions you use the `upgrade check` command. +Which versions are available depends on the CLI version you are using. + +## Update the CLI + +Each CLI comes with a set of supported microservice and Kubernetes versions. +Most importantly, a given CLI version can only upgrade a cluster of the previous minor version, but not older ones. +This means that you have to upgrade your CLI and cluster one minor version at a time. + +For example, if you are currently on CLI version v2.6 and the latest version is v2.8, you should + +* upgrade the CLI to v2.7, +* upgrade the cluster to v2.7, +* and only then continue upgrading the CLI (and the cluster) to v2.8 after. + +Also note that if your current Kubernetes version isn't supported by the next CLI version, use your current CLI to upgrade to a newer Kubernetes version first. + +To learn which Kubernetes versions are supported by a particular CLI, run [constellation config kubernetes-versions](../reference/cli.md#constellation-config-kubernetes-versions). + +## Migrate the configuration + +The Constellation configuration file is located in the file `constellation-conf.yaml` in your workspace. +Refer to the [migration reference](../reference/migration.md) to check if you need to update fields in your configuration file. +Use [`constellation config migrate`](../reference/cli.md#constellation-config-migrate) to automatically update an old config file to a new format. + +## Check for upgrades + +To learn which versions the current CLI can upgrade to and what's installed in your cluster, run: + +```bash +# Show possible upgrades +constellation upgrade check + +# Show possible upgrades and write them to config file +constellation upgrade check --update-config +``` + +You can either enter the reported target versions into your config manually or run the above command with the `--update-config` flag. +When using this flag, the `kubernetesVersion`, `image`, `microserviceVersion`, and `attestation` fields are overwritten with the smallest available upgrade. + +## Apply the upgrade + +Once you updated your config with the desired versions, you can trigger the upgrade with this command: + +```bash +constellation apply +``` + +Microservice upgrades will be finished within a few minutes, depending on the cluster size. +If you are interested, you can monitor pods restarting in the `kube-system` namespace with your tool of choice. + +Image and Kubernetes upgrades take longer. +For each node in your cluster, a new node has to be created and joined. +The process usually takes up to ten minutes per node. + +When applying an upgrade, the Helm charts for the upgrade as well as backup files of Constellation-managed Custom Resource Definitions, Custom Resources, and Terraform state are created. +You can use the Terraform state backup to restore previous resources in case an upgrade misconfigured or erroneously deleted a resource. +You can use the Custom Resource (Definition) backup files to restore Custom Resources and Definitions manually (e.g., via `kubectl apply`) if the automatic migration of those resources fails. +You can use the Helm charts to manually apply upgrades to the Kubernetes resources, should an upgrade fail. + +:::note + +For advanced users: the upgrade consists of several phases that can be individually skipped through the `--skip-phases` flag. +The phases are `infrastracture` for the cloud resource management through Terraform, `helm` for the chart management of the microservices, `image` for OS image upgrades, and `k8s` for Kubernetes version upgrades. + +::: + +## Check the status + +Upgrades are asynchronous operations. +After you run `apply`, it will take a while until the upgrade has completed. +To understand if an upgrade is finished, you can run: + +```bash +constellation status +``` + +This command displays the following information: + +* The installed services and their versions +* The image and Kubernetes version the cluster is expecting on each node +* How many nodes are up to date + +Here's an example output: + +```shell-session +Target versions: + Image: v2.6.0 + Kubernetes: v1.25.8 +Service versions: + Cilium: v1.12.1 + cert-manager: v1.10.0 + constellation-operators: v2.6.0 + constellation-services: v2.6.0 +Cluster status: Some node versions are out of date + Image: 23/25 + Kubernetes: 25/25 +``` + +This output indicates that the cluster is running Kubernetes version `1.25.8`, and all nodes have the appropriate binaries installed. +23 out of 25 nodes have already upgraded to the targeted image version of `2.6.0`, while two are still in progress. + +## Apply further upgrades + +After the upgrade is finished, you can run `constellation upgrade check` again to see if there are more upgrades available. If so, repeat the process. diff --git a/docs/versioned_docs/version-2.22/workflows/verify-cli.md b/docs/versioned_docs/version-2.22/workflows/verify-cli.md new file mode 100644 index 000000000..e33569d37 --- /dev/null +++ b/docs/versioned_docs/version-2.22/workflows/verify-cli.md @@ -0,0 +1,129 @@ +# Verify the CLI + +:::info +This recording presents the essence of this page. It's recommended to read it in full for the motivation and all details. +::: + + + +--- + +Edgeless Systems uses [sigstore](https://www.sigstore.dev/) and [SLSA](https://slsa.dev) to ensure supply-chain security for the Constellation CLI and node images ("artifacts"). sigstore consists of three components: [Cosign](https://docs.sigstore.dev/cosign/signing/overview/), [Rekor](https://docs.sigstore.dev/logging/overview), and Fulcio. Edgeless Systems uses Cosign to sign artifacts. All signatures are uploaded to the public Rekor transparency log, which resides at `https://rekor.sigstore.dev`. + +:::note +The public key for Edgeless Systems' long-term code-signing key is: + +``` +-----BEGIN PUBLIC KEY----- +MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEf8F1hpmwE+YCFXzjGtaQcrL6XZVT +JmEe5iSLvG1SyQSAew7WdMKF6o9t8e2TFuCkzlOhhlws2OHWbiFZnFWCFw== +-----END PUBLIC KEY----- +``` + +The public key is also available for download at [https://edgeless.systems/es.pub](https://edgeless.systems/es.pub) and in the Twitter profile [@EdgelessSystems](https://twitter.com/EdgelessSystems). +::: + +The Rekor transparency log is a public append-only ledger that verifies and records signatures and associated metadata. The Rekor transparency log enables everyone to observe the sequence of (software) signatures issued by Edgeless Systems and many other parties. The transparency log allows for the public identification of dubious or malicious signatures. + +You should always ensure that (1) your CLI executable was signed with the private key corresponding to the above public key and that (2) there is a corresponding entry in the Rekor transparency log. Both can be done as described in the following. + +:::info +You don't need to verify the Constellation node images. This is done automatically by your CLI and the rest of Constellation. +::: + +## Verify the signature + +:::info +This guide assumes Linux on an amd64 processor. The exact steps for other platforms differ slightly. +::: + +First, [install the Cosign CLI](https://docs.sigstore.dev/cosign/system_config/installation/). Next, [download](https://github.com/edgelesssys/constellation/releases) and verify the signature that accompanies your CLI executable, for example: + +```shell-session +$ cosign verify-blob --key https://edgeless.systems/es.pub --signature constellation-linux-amd64.sig constellation-linux-amd64 + +Verified OK +``` + +The above performs an offline verification of the provided public key, signature, and executable. To also verify that a corresponding entry exists in the public Rekor transparency log, add the variable `COSIGN_EXPERIMENTAL=1`: + +```shell-session +$ COSIGN_EXPERIMENTAL=1 cosign verify-blob --key https://edgeless.systems/es.pub --signature constellation-linux-amd64.sig constellation-linux-amd64 + +tlog entry verified with uuid: afaba7f6635b3e058888692841848e5514357315be9528474b23f5dcccb82b13 index: 3477047 +Verified OK +``` + +🏁 You now know that your CLI executable was officially released and signed by Edgeless Systems. + +### Optional: Manually inspect the transparency log + +To further inspect the public Rekor transparency log, [install the Rekor CLI](https://docs.sigstore.dev/logging/installation). A search for the CLI executable should give a single UUID. (Note that this UUID contains the UUID from the previous `cosign` command.) + +```shell-session +$ rekor-cli search --artifact constellation-linux-amd64 + +Found matching entries (listed by UUID): +362f8ecba72f4326afaba7f6635b3e058888692841848e5514357315be9528474b23f5dcccb82b13 +``` + +With this UUID you can get the full entry from the transparency log: + +```shell-session +$ rekor-cli get --uuid=362f8ecba72f4326afaba7f6635b3e058888692841848e5514357315be9528474b23f5dcccb82b13 + +LogID: c0d23d6ad406973f9559f3ba2d1ca01f84147d8ffc5b8445c224f98b9591801d +Index: 3477047 +IntegratedTime: 2022-09-12T22:28:16Z +UUID: afaba7f6635b3e058888692841848e5514357315be9528474b23f5dcccb82b13 +Body: { + "HashedRekordObj": { + "data": { + "hash": { + "algorithm": "sha256", + "value": "40e137b9b9b8204d672642fd1e181c6d5ccb50cfc5cc7fcbb06a8c2c78f44aff" + } + }, + "signature": { + "content": "MEUCIQCSER3mGj+j5Pr2kOXTlCIHQC3gT30I7qkLr9Awt6eUUQIgcLUKRIlY50UN8JGwVeNgkBZyYD8HMxwC/LFRWoMn180=", + "publicKey": { + "content": "LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFZjhGMWhwbXdFK1lDRlh6akd0YVFjckw2WFpWVApKbUVlNWlTTHZHMVN5UVNBZXc3V2RNS0Y2bzl0OGUyVEZ1Q2t6bE9oaGx3czJPSFdiaUZabkZXQ0Z3PT0KLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tCg==" + } + } + } +} +``` + +The field `publicKey` should contain Edgeless Systems' public key in Base64 encoding. + +You can get an exhaustive list of artifact signatures issued by Edgeless Systems via the following command: + +```bash +rekor-cli search --public-key https://edgeless.systems/es.pub --pki-format x509 +``` + +Edgeless Systems monitors this list to detect potential unauthorized use of its private key. + +## Verify the provenance + +Provenance attests that a software artifact was produced by a specific repository and build system invocation. For more information on provenance visit [slsa.dev](https://slsa.dev/provenance/v0.2) and learn about the [adoption of SLSA for Constellation](../reference/slsa.md). + +Just as checking its signature proves that the CLI hasn't been manipulated, checking the provenance proves that the artifact was produced by the expected build process and hasn't been tampered with. + +To verify the provenance, first install the [slsa-verifier](https://github.com/slsa-framework/slsa-verifier). Then make sure you have the provenance file (`constellation.intoto.jsonl`) and Constellation CLI downloaded. Both are available on the [GitHub release page](https://github.com/edgelesssys/constellation/releases). + +:::info +The same provenance file is valid for all Constellation CLI executables of a given version independent of the target platform. +::: + +Use the verifier to perform the check: + +```shell-session +$ slsa-verifier verify-artifact constellation-linux-amd64 \ + --provenance-path constellation.intoto.jsonl \ + --source-uri github.com/edgelesssys/constellation + +Verified signature against tlog entry index 7771317 at URL: https://rekor.sigstore.dev/api/v1/log/entries/24296fb24b8ad77af2c04c8b4ae0d5bc5... +Verified build using builder https://github.com/slsa-framework/slsa-github-generator/.github/workflows/generator_generic_slsa3.yml@refs/tags/v1.2.2 at commit 18e9924b416323c37b9cdfd6cc728de8a947424a +PASSED: Verified SLSA provenance +``` diff --git a/docs/versioned_docs/version-2.22/workflows/verify-cluster.md b/docs/versioned_docs/version-2.22/workflows/verify-cluster.md new file mode 100644 index 000000000..b6595ebf2 --- /dev/null +++ b/docs/versioned_docs/version-2.22/workflows/verify-cluster.md @@ -0,0 +1,97 @@ +# Verify your cluster + +Constellation's [attestation feature](../architecture/attestation.md) allows you, or a third party, to verify the integrity and confidentiality of your Constellation cluster. + +## Fetch measurements + +To verify the integrity of Constellation you need trusted measurements to verify against. For each node image released by Edgeless Systems, there are signed measurements, which you can download using the CLI: + +```bash +constellation config fetch-measurements +``` + +This command performs the following steps: + +1. Download the signed measurements for the configured image. By default, this will use Edgeless Systems' public measurement registry. +2. Verify the signature of the measurements. This will use Edgeless Systems' [public key](https://edgeless.systems/es.pub). +3. Write measurements into configuration file. + +The configuration file then contains a list of `measurements` similar to the following: + +```yaml +# ... +measurements: + 0: + expected: "0f35c214608d93c7a6e68ae7359b4a8be5a0e99eea9107ece427c4dea4e439cf" + warnOnly: false + 4: + expected: "02c7a67c01ec70ffaf23d73a12f749ab150a8ac6dc529bda2fe1096a98bf42ea" + warnOnly: false + 5: + expected: "e6949026b72e5045706cd1318889b3874480f7a3f7c5c590912391a2d15e6975" + warnOnly: true + 8: + expected: "0000000000000000000000000000000000000000000000000000000000000000" + warnOnly: false + 9: + expected: "f0a6e8601b00e2fdc57195686cd4ef45eb43a556ac1209b8e25d993213d68384" + warnOnly: false + 11: + expected: "0000000000000000000000000000000000000000000000000000000000000000" + warnOnly: false + 12: + expected: "da99eb6cf7c7fbb692067c87fd5ca0b7117dc293578e4fea41f95d3d3d6af5e2" + warnOnly: false + 13: + expected: "0000000000000000000000000000000000000000000000000000000000000000" + warnOnly: false + 14: + expected: "d7c4cc7ff7933022f013e03bdee875b91720b5b86cf1753cad830f95e791926f" + warnOnly: true + 15: + expected: "0000000000000000000000000000000000000000000000000000000000000000" + warnOnly: false +# ... +``` + +Each entry specifies the expected value of the Constellation node, and whether the measurement should be enforced (`warnOnly: false`), or only a warning should be logged (`warnOnly: true`). +By default, the subset of the [available measurements](../architecture/attestation.md#runtime-measurements) that can be locally reproduced and verified is enforced. + +During attestation, the validating side (CLI or [join service](../architecture/microservices.md#joinservice)) compares each measurement reported by the issuing side (first node or joining node) individually. +For mismatching measurements that have set `warnOnly` to `true` only a warning is emitted. +For mismatching measurements that have set `warnOnly` to `false` an error is emitted and attestation fails. +If attestation fails for a new node, it isn't permitted to join the cluster. + +## The *verify* command + +:::note +The steps below are purely optional. They're automatically executed by `constellation apply` when you initialize your cluster. The `constellation verify` command mostly has an illustrative purpose. +::: + +The `verify` command obtains and verifies an attestation statement from a running Constellation cluster. + +```bash +constellation verify [--cluster-id ...] +``` + +From the attestation statement, the command verifies the following properties: + +* The cluster is using the correct Confidential VM (CVM) type. +* Inside the CVMs, the correct node images are running. The node images are identified through the measurements obtained in the previous step. +* The unique ID of the cluster matches the one from your `constellation-state.yaml` file or passed in via `--cluster-id`. + +Once the above properties are verified, you know that you are talking to the right Constellation cluster and it's in a good and trustworthy shape. + +### Custom arguments + +The `verify` command also allows you to verify any Constellation deployment that you have network access to. For this you need the following: + +* The IP address of a running Constellation cluster's [VerificationService](../architecture/microservices.md#verificationservice). The `VerificationService` is exposed via a `NodePort` service using the external IP address of your cluster. Run `kubectl get nodes -o wide` and look for `EXTERNAL-IP`. +* The cluster's *clusterID*. See [cluster identity](../architecture/keys.md#cluster-identity) for more details. +* A `constellation-conf.yaml` file with the expected measurements of the cluster in your working directory. + +For example: + +```shell-session +constellation verify -e 192.0.2.1 --cluster-id Q29uc3RlbGxhdGlvbkRvY3VtZW50YXRpb25TZWNyZXQ= +``` diff --git a/docs/versioned_sidebars/version-2.22-sidebars.json b/docs/versioned_sidebars/version-2.22-sidebars.json new file mode 100644 index 000000000..c9937ab4f --- /dev/null +++ b/docs/versioned_sidebars/version-2.22-sidebars.json @@ -0,0 +1,304 @@ +{ + "docs": [ + { + "type": "doc", + "label": "Introduction", + "id": "intro" + }, + { + "type": "category", + "label": "Basics", + "link": { + "type": "generated-index" + }, + "items": [ + { + "type": "doc", + "label": "Confidential Kubernetes", + "id": "overview/confidential-kubernetes" + }, + { + "type": "doc", + "label": "Security benefits", + "id": "overview/security-benefits" + }, + { + "type": "doc", + "label": "Product features", + "id": "overview/product" + }, + { + "type": "doc", + "label": "Feature status of clouds", + "id": "overview/clouds" + }, + { + "type": "category", + "label": "Performance", + "link": { + "type": "doc", + "id": "overview/performance/performance" + }, + "items": [ + { + "type": "doc", + "label": "Compute benchmarks", + "id": "overview/performance/compute" + }, + { + "type": "doc", + "label": "I/O benchmarks", + "id": "overview/performance/io" + }, + { + "type": "doc", + "label": "Application benchmarks", + "id": "overview/performance/application" + } + ] + }, + { + "type": "doc", + "label": "License", + "id": "overview/license" + } + ] + }, + { + "type": "category", + "label": "Getting started", + "link": { + "type": "generated-index" + }, + "items": [ + { + "type": "doc", + "label": "Installation", + "id": "getting-started/install" + }, + { + "type": "doc", + "label": "First steps (cloud)", + "id": "getting-started/first-steps" + }, + { + "type": "doc", + "label": "First steps (local)", + "id": "getting-started/first-steps-local" + }, + { + "type": "doc", + "label": "Cloud Marketplaces", + "id": "getting-started/marketplaces" + }, + { + "type": "category", + "label": "Examples", + "link": { + "type": "doc", + "id": "getting-started/examples" + }, + "items": [ + { + "type": "doc", + "label": "Emojivoto", + "id": "getting-started/examples/emojivoto" + }, + { + "type": "doc", + "label": "Online Boutique", + "id": "getting-started/examples/online-boutique" + }, + { + "type": "doc", + "label": "Horizontal Pod Autoscaling", + "id": "getting-started/examples/horizontal-scaling" + }, + { + "type": "doc", + "label": "Filestash with s3proxy", + "id": "getting-started/examples/filestash-s3proxy" + } + ] + } + ] + }, + { + "type": "category", + "label": "Workflows", + "link": { + "type": "generated-index" + }, + "items": [ + { + "type": "doc", + "label": "Verify the CLI", + "id": "workflows/verify-cli" + }, + { + "type": "doc", + "label": "Configure your cluster", + "id": "workflows/config" + }, + { + "type": "doc", + "label": "Create your cluster", + "id": "workflows/create" + }, + { + "type": "doc", + "label": "Scale your cluster", + "id": "workflows/scale" + }, + { + "type": "doc", + "label": "Upgrade your cluster", + "id": "workflows/upgrade" + }, + { + "type": "doc", + "label": "Expose a service", + "id": "workflows/lb" + }, + { + "type": "doc", + "label": "Install cert-manager", + "id": "workflows/cert-manager" + }, + { + "type": "doc", + "label": "Install s3proxy", + "id": "workflows/s3proxy" + }, + { + "type": "doc", + "label": "Terminate your cluster", + "id": "workflows/terminate" + }, + { + "type": "doc", + "label": "Recover your cluster", + "id": "workflows/recovery" + }, + { + "type": "doc", + "label": "Verify your cluster", + "id": "workflows/verify-cluster" + }, + { + "type": "doc", + "label": "Use persistent storage", + "id": "workflows/storage" + }, + { + "type": "doc", + "label": "Use the Terraform provider", + "id": "workflows/terraform-provider" + }, + { + "type": "doc", + "label": "Consume SBOMs", + "id": "workflows/sbom" + }, + { + "type": "doc", + "label": "Reproduce release artifacts", + "id": "workflows/reproducible-builds" + }, + { + "type": "doc", + "label": "Troubleshooting", + "id": "workflows/troubleshooting" + } + ] + }, + { + "type": "category", + "label": "Architecture", + "link": { + "type": "generated-index" + }, + "items": [ + { + "type": "doc", + "label": "Overview", + "id": "architecture/overview" + }, + { + "type": "doc", + "label": "Cluster orchestration", + "id": "architecture/orchestration" + }, + { + "type": "doc", + "label": "Versions and support", + "id": "architecture/versions" + }, + { + "type": "doc", + "label": "Microservices", + "id": "architecture/microservices" + }, + { + "type": "doc", + "label": "Attestation", + "id": "architecture/attestation" + }, + { + "type": "doc", + "label": "Images", + "id": "architecture/images" + }, + { + "type": "doc", + "label": "Keys and cryptographic primitives", + "id": "architecture/keys" + }, + { + "type": "doc", + "label": "Encrypted persistent storage", + "id": "architecture/encrypted-storage" + }, + { + "type": "doc", + "label": "Networking", + "id": "architecture/networking" + }, + { + "type": "doc", + "label": "Observability", + "id": "architecture/observability" + } + ] + }, + { + "type": "category", + "label": "Reference", + "link": { + "type": "generated-index" + }, + "items": [ + { + "type": "doc", + "label": "CLI", + "id": "reference/cli" + }, + { + "type": "doc", + "label": "Configuration migrations", + "id": "reference/migration" + }, + { + "type": "doc", + "label": "Terraform usage", + "id": "reference/terraform" + }, + { + "type": "doc", + "label": "SLSA adoption", + "id": "reference/slsa" + } + ] + } + ] +} diff --git a/docs/versions.json b/docs/versions.json index a78b65348..4d55a926c 100644 --- a/docs/versions.json +++ b/docs/versions.json @@ -1,4 +1,5 @@ [ + "2.22", "2.21", "2.20", "2.19", diff --git a/version.txt b/version.txt index cf313fcea..954dd96a4 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -v2.22.0-pre +v2.23.0-pre From c4d8fe3741d30557c0e73c822da0287de3878eb3 Mon Sep 17 00:00:00 2001 From: edgelessci <71088502+edgelessci@users.noreply.github.com> Date: Wed, 2 Apr 2025 08:29:51 +0200 Subject: [PATCH 187/311] image: update measurements and image version (#3731) Co-authored-by: edgelessci --- .../measurements/measurements_enterprise.go | 16 ++++++++-------- internal/config/image_enterprise.go | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/internal/attestation/measurements/measurements_enterprise.go b/internal/attestation/measurements/measurements_enterprise.go index d5ffbd0ff..0d1297ac4 100644 --- a/internal/attestation/measurements/measurements_enterprise.go +++ b/internal/attestation/measurements/measurements_enterprise.go @@ -19,14 +19,14 @@ package measurements // revive:disable:var-naming var ( - aws_AWSNitroTPM = M{0: {Expected: []byte{0x73, 0x7f, 0x76, 0x7a, 0x12, 0xf5, 0x4e, 0x70, 0xee, 0xcb, 0xc8, 0x68, 0x40, 0x11, 0x32, 0x3a, 0xe2, 0xfe, 0x2d, 0xd9, 0xf9, 0x07, 0x85, 0x57, 0x79, 0x69, 0xd7, 0xa2, 0x01, 0x3e, 0x8c, 0x12}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xb4, 0x47, 0xde, 0x00, 0xba, 0x2a, 0x3d, 0xed, 0x3e, 0x96, 0xf3, 0xfb, 0x48, 0x92, 0x44, 0xad, 0x41, 0x38, 0xfb, 0x86, 0x88, 0xdb, 0x68, 0x59, 0x6e, 0xa2, 0x26, 0xe3, 0x3b, 0x6e, 0xce, 0x60}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x87, 0x1a, 0x8d, 0xcd, 0xb8, 0xd0, 0x57, 0xdf, 0x0b, 0x94, 0x5f, 0x7d, 0xc0, 0x04, 0x75, 0x65, 0x08, 0x22, 0xf1, 0x14, 0x76, 0x9f, 0x01, 0xb7, 0x2e, 0x8c, 0x72, 0xb6, 0x79, 0xd4, 0x0e, 0x7f}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x01, 0x36, 0xb6, 0x68, 0x47, 0xef, 0xa2, 0x0b, 0xf3, 0x5f, 0x7f, 0x8c, 0x49, 0xb6, 0x6a, 0xa4, 0x7e, 0x52, 0x74, 0xd2, 0xdb, 0x34, 0x98, 0x74, 0xa4, 0x6a, 0x50, 0x5d, 0x7c, 0x89, 0x60, 0x8d}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - aws_AWSSEVSNP = M{0: {Expected: []byte{0xd6, 0xdf, 0x85, 0x53, 0x58, 0xf5, 0xb1, 0x0f, 0x06, 0xf0, 0xfa, 0xb3, 0xf4, 0x08, 0xad, 0x26, 0xcd, 0x16, 0x5a, 0x29, 0x49, 0xba, 0xd6, 0x9e, 0x2c, 0xc7, 0x56, 0x92, 0x52, 0x9e, 0x66, 0x2a}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x72, 0x66, 0x5c, 0xd5, 0xc1, 0x6a, 0x58, 0x13, 0xed, 0xa5, 0x7d, 0x86, 0x1a, 0x6a, 0x84, 0x9c, 0x79, 0x63, 0x63, 0x70, 0xd3, 0x81, 0x4a, 0x66, 0xb5, 0xbe, 0xa2, 0xb5, 0x52, 0xf4, 0xd2, 0x77}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x17, 0x79, 0x74, 0xde, 0xbe, 0xc1, 0xd6, 0xbb, 0x30, 0x61, 0x05, 0x3c, 0x19, 0xde, 0x74, 0x64, 0x19, 0x03, 0xfd, 0xf5, 0x35, 0xa1, 0x18, 0xbe, 0x65, 0xd2, 0x69, 0xe2, 0xf6, 0xf7, 0x4f, 0xb4}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x67, 0xec, 0x72, 0xef, 0x81, 0x8f, 0xc1, 0x34, 0x64, 0xed, 0x81, 0x74, 0xb1, 0x4b, 0x9a, 0xa0, 0x6a, 0x63, 0xfe, 0x5d, 0x04, 0x72, 0xe8, 0x8d, 0x14, 0x6e, 0x49, 0x60, 0xb4, 0x4e, 0x71, 0xd9}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - azure_AzureSEVSNP = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x73, 0x4e, 0xa7, 0x9c, 0xad, 0xde, 0x76, 0x1a, 0x1f, 0xa6, 0xb9, 0xe6, 0x6f, 0x55, 0xef, 0x1b, 0xf3, 0x44, 0x42, 0x67, 0x76, 0x45, 0x49, 0xe2, 0x7a, 0x37, 0x90, 0xcd, 0xde, 0x10, 0x8a, 0x88}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xea, 0x72, 0x71, 0x28, 0x69, 0xac, 0x7e, 0xb0, 0xca, 0x87, 0x6d, 0x96, 0x56, 0xab, 0x99, 0xed, 0xcc, 0xd5, 0x48, 0x69, 0xfa, 0x1a, 0xe6, 0x79, 0x50, 0x5e, 0x8a, 0x67, 0x34, 0x01, 0x64, 0x7c}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x60, 0xec, 0x57, 0xff, 0xe6, 0x22, 0x03, 0x24, 0xca, 0xd4, 0x54, 0x2c, 0x11, 0x15, 0xd7, 0x79, 0x80, 0xb2, 0xc2, 0x7d, 0x26, 0xb1, 0x75, 0x5d, 0x9f, 0xfd, 0xd8, 0xd3, 0x1b, 0x71, 0x97, 0xc0}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - azure_AzureTDX = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x6b, 0xdb, 0x9f, 0x18, 0xea, 0xba, 0xdc, 0x73, 0x82, 0xc6, 0x23, 0x03, 0xdf, 0x65, 0x2b, 0xe1, 0xe3, 0xd5, 0x60, 0x5c, 0x86, 0xd0, 0x80, 0x9f, 0x66, 0x02, 0x10, 0x58, 0x72, 0x60, 0x7d, 0xed}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xdf, 0x6f, 0x42, 0xc8, 0x5d, 0x40, 0xaf, 0x53, 0x69, 0x09, 0xad, 0x00, 0xdc, 0xcd, 0xfc, 0xac, 0x22, 0x8a, 0x38, 0x1c, 0x13, 0x11, 0x3e, 0xfa, 0xdb, 0x8a, 0xe6, 0xcd, 0x00, 0xa6, 0xea, 0xa9}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xff, 0xa0, 0xee, 0x7e, 0xe4, 0x5a, 0x24, 0x4b, 0x25, 0x9f, 0xb9, 0x8f, 0x0e, 0xb6, 0xb1, 0xc3, 0x15, 0xf4, 0x46, 0x18, 0x13, 0xdb, 0x23, 0xf0, 0x7d, 0xc0, 0x2d, 0xfd, 0x34, 0xc4, 0xe8, 0x71}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + aws_AWSNitroTPM = M{0: {Expected: []byte{0x73, 0x7f, 0x76, 0x7a, 0x12, 0xf5, 0x4e, 0x70, 0xee, 0xcb, 0xc8, 0x68, 0x40, 0x11, 0x32, 0x3a, 0xe2, 0xfe, 0x2d, 0xd9, 0xf9, 0x07, 0x85, 0x57, 0x79, 0x69, 0xd7, 0xa2, 0x01, 0x3e, 0x8c, 0x12}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xff, 0xba, 0x72, 0x15, 0xb3, 0xca, 0x90, 0x19, 0xbb, 0x23, 0xa0, 0xcf, 0xcb, 0xfb, 0x6e, 0xb0, 0xa3, 0xc0, 0x09, 0xd9, 0xc3, 0x0e, 0x4f, 0x4c, 0xc2, 0x3e, 0xb8, 0xf7, 0x78, 0xec, 0x93, 0xe6}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x96, 0x0b, 0x27, 0xba, 0x9a, 0xb7, 0xa4, 0xad, 0x79, 0x21, 0x37, 0x14, 0x98, 0xa1, 0xa1, 0x6e, 0xf4, 0xa8, 0xac, 0x22, 0x8a, 0x43, 0xd2, 0x66, 0xd4, 0x10, 0xa3, 0xe8, 0xd3, 0x63, 0xf0, 0x41}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x46, 0x29, 0x39, 0x11, 0xea, 0x74, 0x45, 0xa8, 0x56, 0xc0, 0x7b, 0x65, 0x32, 0xf9, 0x88, 0x86, 0x5b, 0xc0, 0x8e, 0xa2, 0xde, 0x5e, 0x05, 0x9e, 0x1f, 0x52, 0xa6, 0x05, 0x2c, 0xa4, 0x22, 0xaa}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + aws_AWSSEVSNP = M{0: {Expected: []byte{0xd6, 0xdf, 0x85, 0x53, 0x58, 0xf5, 0xb1, 0x0f, 0x06, 0xf0, 0xfa, 0xb3, 0xf4, 0x08, 0xad, 0x26, 0xcd, 0x16, 0x5a, 0x29, 0x49, 0xba, 0xd6, 0x9e, 0x2c, 0xc7, 0x56, 0x92, 0x52, 0x9e, 0x66, 0x2a}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xb9, 0x7d, 0x66, 0x85, 0x9a, 0xb6, 0xff, 0x3f, 0x0a, 0xa8, 0xcb, 0x8e, 0x3f, 0x4b, 0x41, 0x35, 0x73, 0x4e, 0xa8, 0xdd, 0x3b, 0x0c, 0x52, 0x35, 0x83, 0x44, 0xef, 0x36, 0xdf, 0xda, 0xaf, 0xce}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xc1, 0x66, 0x40, 0x9b, 0xde, 0xb5, 0x0f, 0xb1, 0x39, 0xd9, 0x7e, 0x44, 0x02, 0x2e, 0xec, 0x8f, 0x02, 0x85, 0xc7, 0xfe, 0x2b, 0xc9, 0xec, 0xce, 0xdf, 0x02, 0x51, 0x58, 0x86, 0x7e, 0x0a, 0x83}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x11, 0x28, 0xf0, 0x85, 0x14, 0x8e, 0x29, 0x6c, 0x2e, 0x64, 0x8c, 0x18, 0x2c, 0x99, 0xe5, 0xfa, 0x0b, 0x21, 0xd9, 0xbe, 0xb9, 0x8b, 0xc6, 0xfe, 0xda, 0x9a, 0xad, 0x9e, 0xf7, 0x9c, 0x10, 0xf7}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + azure_AzureSEVSNP = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x89, 0x50, 0x5a, 0x26, 0x1b, 0x7a, 0xb4, 0x9e, 0x16, 0x56, 0xb1, 0xd3, 0x28, 0xfa, 0x50, 0x7d, 0x12, 0x6d, 0x48, 0x91, 0x98, 0xd5, 0xea, 0x3a, 0x20, 0xa2, 0x51, 0xe0, 0x64, 0x4b, 0xa2, 0xc3}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xc1, 0x79, 0xa3, 0x8b, 0x17, 0x25, 0xda, 0x77, 0x62, 0x64, 0x1c, 0x08, 0x80, 0x11, 0x60, 0x64, 0x09, 0xdd, 0x20, 0x69, 0xbd, 0xbe, 0x99, 0x32, 0xcc, 0x03, 0x82, 0x1d, 0x14, 0x21, 0x85, 0xa2}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x47, 0xc1, 0x82, 0xec, 0x41, 0xd4, 0xc5, 0xe0, 0x3d, 0x9a, 0x32, 0xa3, 0x89, 0x25, 0x74, 0x28, 0x76, 0x57, 0xa0, 0xc0, 0x71, 0x79, 0xcb, 0xb7, 0x7d, 0xb3, 0x67, 0x3d, 0x96, 0xa8, 0xe2, 0xc3}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + azure_AzureTDX = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xec, 0x52, 0xe8, 0x25, 0x6d, 0xfb, 0xe0, 0xf5, 0xa3, 0x64, 0x14, 0x32, 0x94, 0x26, 0x99, 0xac, 0x76, 0xca, 0x69, 0x8b, 0xc6, 0x5f, 0x71, 0xcf, 0x8e, 0x56, 0x7f, 0x12, 0xbd, 0xab, 0x1b, 0xb9}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x3d, 0x8e, 0x9e, 0x91, 0x3c, 0x53, 0x41, 0xf0, 0x5b, 0x50, 0x03, 0x47, 0xfa, 0xef, 0x89, 0xde, 0x1c, 0x56, 0xd3, 0xd7, 0x33, 0xe0, 0x33, 0x0a, 0x1b, 0xf6, 0xdd, 0x09, 0x3f, 0xea, 0xd3, 0x5f}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xe9, 0x2a, 0x6b, 0xe7, 0x86, 0x7c, 0x4d, 0x6f, 0xf4, 0x4e, 0x15, 0x7b, 0x14, 0xc9, 0xc0, 0xbc, 0x38, 0x04, 0x0c, 0xab, 0x5a, 0x7c, 0xba, 0x77, 0xac, 0x4e, 0x2c, 0xaa, 0x4d, 0x54, 0xf8, 0xda}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} azure_AzureTrustedLaunch M - gcp_GCPSEVES = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x92, 0x66, 0xd0, 0x6e, 0x5e, 0xb3, 0x3f, 0xf6, 0xb0, 0x92, 0x1e, 0xe8, 0x2c, 0x05, 0x21, 0x2f, 0x9a, 0x2e, 0x84, 0x28, 0xbe, 0x2e, 0xd8, 0x68, 0x32, 0xbb, 0xde, 0x2c, 0xc8, 0xb5, 0x39, 0xa0}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x2a, 0x84, 0x7c, 0xc5, 0x8d, 0x77, 0x28, 0x17, 0xa5, 0xfe, 0x67, 0xa0, 0xd8, 0x93, 0xf3, 0x2b, 0x14, 0x72, 0x03, 0x28, 0x40, 0xe2, 0x5b, 0xff, 0x9f, 0xb0, 0xae, 0xed, 0x51, 0x2b, 0x18, 0xcd}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xf2, 0x24, 0x44, 0xa6, 0x16, 0x5d, 0xb8, 0x33, 0x16, 0x6c, 0xcf, 0xe0, 0xb6, 0x2e, 0x87, 0x61, 0x9c, 0xab, 0x9a, 0xe0, 0x99, 0x47, 0xd1, 0x4c, 0xd7, 0x49, 0xd5, 0x10, 0x94, 0x8b, 0xa3, 0x40}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - gcp_GCPSEVSNP = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x84, 0x8b, 0x9c, 0xaa, 0x6c, 0x84, 0x02, 0x1f, 0x11, 0x84, 0xce, 0xa9, 0x31, 0x11, 0x76, 0xf9, 0xad, 0x86, 0xa6, 0x1a, 0x48, 0x48, 0xa1, 0xd0, 0x16, 0xef, 0xf4, 0x06, 0x42, 0xb6, 0x72, 0xd9}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x79, 0x19, 0x84, 0x5f, 0x0b, 0xd0, 0x32, 0xbf, 0x10, 0xf4, 0xed, 0x37, 0x8b, 0xbf, 0xfb, 0xb4, 0x21, 0xa7, 0x71, 0x72, 0x38, 0x6b, 0xf7, 0x7f, 0xd0, 0x01, 0x57, 0x89, 0xf3, 0xb2, 0x5f, 0x95}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x5b, 0x43, 0x62, 0x1a, 0x1b, 0x5f, 0xcc, 0x56, 0x02, 0x6c, 0x9f, 0x66, 0x15, 0x65, 0xd8, 0xff, 0x48, 0x6a, 0xf0, 0xc9, 0x66, 0xca, 0x25, 0xbe, 0x73, 0x64, 0xb7, 0x6c, 0x9c, 0x51, 0xcd, 0xef}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - openstack_QEMUVTPM = M{4: {Expected: []byte{0x0f, 0xd9, 0x9d, 0x60, 0x1b, 0x1a, 0xae, 0x2c, 0x98, 0xaf, 0xf4, 0x72, 0xcf, 0x23, 0x8f, 0xea, 0xd3, 0x97, 0xaf, 0xf0, 0xa8, 0x96, 0x97, 0x78, 0x4b, 0x90, 0xa9, 0x16, 0x34, 0xca, 0xaa, 0xe3}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x1a, 0xbb, 0x8e, 0x0e, 0xf5, 0x8e, 0x7f, 0x1d, 0xd5, 0x92, 0x31, 0x5b, 0xc1, 0x95, 0xee, 0x10, 0x7b, 0xaf, 0xe5, 0x11, 0x39, 0x78, 0x98, 0xe2, 0xd7, 0x3b, 0xdd, 0x4c, 0xf5, 0xa5, 0x4c, 0x34}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x52, 0xd4, 0x34, 0x32, 0xa1, 0x2a, 0x04, 0x81, 0x3e, 0x8c, 0x7e, 0xa5, 0x4c, 0xa7, 0xca, 0x2b, 0x1d, 0xe8, 0x15, 0xd1, 0xa4, 0xa2, 0xb5, 0x58, 0x9c, 0x0a, 0x19, 0x87, 0x58, 0xa5, 0xe0, 0x91}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + gcp_GCPSEVES = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x39, 0xa4, 0xae, 0x08, 0x76, 0x93, 0x98, 0x81, 0x6a, 0x98, 0xab, 0xd4, 0xe9, 0xb1, 0xb9, 0xb4, 0x54, 0xdf, 0xfe, 0x6f, 0x0b, 0x5e, 0xb4, 0x96, 0xaa, 0xfa, 0xc9, 0xb1, 0x09, 0x49, 0x81, 0x63}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x6b, 0xa4, 0xf8, 0xb5, 0x68, 0x94, 0x12, 0xc8, 0xeb, 0x48, 0xd4, 0x01, 0x5c, 0xb1, 0xed, 0x68, 0xe3, 0xdb, 0xa3, 0x9c, 0x38, 0x3a, 0x92, 0x01, 0x18, 0xf2, 0x44, 0x6e, 0xfb, 0x3a, 0x3f, 0x30}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x6c, 0x5a, 0x46, 0x52, 0x12, 0xd4, 0x5d, 0x36, 0x41, 0xfe, 0x7f, 0xc5, 0xe8, 0xa4, 0x10, 0xa4, 0xcb, 0xb0, 0xd4, 0xa5, 0xeb, 0x0f, 0x50, 0x8f, 0x7b, 0xc2, 0x57, 0xf0, 0xb7, 0x61, 0xf4, 0xc1}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + gcp_GCPSEVSNP = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x1e, 0x97, 0x86, 0x46, 0x00, 0x75, 0x9c, 0x9c, 0xa6, 0xb3, 0xdc, 0x2e, 0xc9, 0x7f, 0xd0, 0xa5, 0xda, 0xb5, 0x5d, 0x50, 0x29, 0x91, 0xbf, 0x1d, 0x8c, 0x34, 0x10, 0xfb, 0x68, 0xd3, 0xf7, 0x68}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x54, 0xd1, 0xcd, 0xa3, 0x2a, 0x3d, 0x07, 0x9d, 0x8b, 0x87, 0x11, 0xae, 0x64, 0xe2, 0x85, 0x0f, 0x28, 0xd2, 0xa6, 0x2b, 0x8b, 0x55, 0x4c, 0x65, 0x52, 0x4d, 0x04, 0x47, 0x04, 0x4b, 0x7a, 0x26}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x1a, 0x03, 0x4e, 0x7b, 0x2c, 0x15, 0x72, 0xfe, 0x76, 0xb3, 0x5b, 0xf2, 0x8f, 0xb5, 0x41, 0x65, 0x86, 0x03, 0x0b, 0xbd, 0x0a, 0xa6, 0x55, 0xcd, 0x75, 0x73, 0x86, 0xf1, 0x9e, 0x0d, 0xd2, 0x9f}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + openstack_QEMUVTPM = M{4: {Expected: []byte{0x1b, 0x0c, 0xc2, 0xa9, 0x68, 0x3c, 0x9a, 0x57, 0xac, 0xbe, 0xd4, 0x95, 0x74, 0x45, 0x11, 0xd6, 0x96, 0x52, 0xa3, 0x25, 0x87, 0x25, 0xac, 0xa6, 0x48, 0x1b, 0x9d, 0x3c, 0x1f, 0x6d, 0xf7, 0xf0}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xce, 0x1d, 0x99, 0xc6, 0x2a, 0xcf, 0x46, 0x28, 0xa4, 0xcf, 0xbf, 0x2f, 0x4a, 0x52, 0xa5, 0xa1, 0x0b, 0x63, 0x64, 0x74, 0xf9, 0x2c, 0xfc, 0xd3, 0x0a, 0x6e, 0xfb, 0x37, 0x6d, 0x74, 0x1c, 0x02}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xe4, 0x34, 0x6a, 0xa6, 0x26, 0xd2, 0x94, 0x10, 0x16, 0x00, 0x0d, 0xef, 0xc6, 0xdf, 0x66, 0x3f, 0xad, 0x31, 0x9a, 0x04, 0x65, 0xa9, 0x7f, 0xaa, 0xd3, 0x49, 0x59, 0xe8, 0x78, 0x62, 0xd7, 0x7a}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} qemu_QEMUTDX M - qemu_QEMUVTPM = M{4: {Expected: []byte{0x60, 0x4d, 0xf0, 0xe2, 0x0d, 0x3a, 0x44, 0x81, 0x9c, 0x36, 0x2b, 0x85, 0xea, 0xa5, 0x93, 0xf5, 0x19, 0x95, 0xca, 0x92, 0xe0, 0x39, 0xa5, 0xe4, 0x4d, 0xed, 0xaa, 0x31, 0x08, 0xbc, 0x5b, 0x8e}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x41, 0x0f, 0x33, 0x64, 0x7f, 0x02, 0xec, 0xd9, 0x55, 0x72, 0x4b, 0xf1, 0x18, 0xd1, 0x1d, 0xfb, 0xcb, 0x92, 0xba, 0x04, 0xc9, 0x9a, 0xdc, 0x43, 0x09, 0xd9, 0x09, 0xa0, 0x1a, 0x54, 0xaa, 0x1b}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x20, 0x96, 0xcb, 0xe7, 0x74, 0x29, 0x80, 0x78, 0x21, 0x8e, 0xf4, 0x70, 0x47, 0x4d, 0x47, 0x2d, 0x4e, 0xcd, 0xdf, 0x67, 0x68, 0x96, 0x73, 0xab, 0x53, 0xfa, 0x09, 0x92, 0x4c, 0xeb, 0xde, 0xed}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + qemu_QEMUVTPM = M{4: {Expected: []byte{0x56, 0x19, 0xa6, 0x2d, 0x9b, 0x1b, 0x50, 0xa3, 0xfe, 0x21, 0x5b, 0x2a, 0x23, 0x98, 0xbc, 0xe6, 0x82, 0xe2, 0xb8, 0xc1, 0xb9, 0x05, 0x23, 0xc7, 0x51, 0x43, 0x69, 0x5b, 0x42, 0x41, 0x86, 0x62}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xc1, 0x80, 0x14, 0xf7, 0xbb, 0x45, 0x7e, 0xfc, 0x3f, 0xe7, 0x2e, 0x8d, 0x3a, 0x0e, 0xc1, 0x9b, 0x4d, 0x38, 0xb0, 0x76, 0x8e, 0x27, 0x5b, 0x1a, 0xe2, 0xe4, 0x56, 0x3f, 0xb2, 0xcb, 0x7a, 0xf0}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x86, 0x61, 0x04, 0xb3, 0xed, 0x54, 0x6a, 0xeb, 0x9e, 0xdf, 0x2d, 0x17, 0x9f, 0x0e, 0xf2, 0x91, 0xeb, 0xa3, 0xe6, 0x69, 0xe5, 0xbb, 0x00, 0xcf, 0xa3, 0x7a, 0x43, 0x5e, 0xad, 0xff, 0x70, 0x57}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} ) diff --git a/internal/config/image_enterprise.go b/internal/config/image_enterprise.go index b2920d115..ab2142527 100644 --- a/internal/config/image_enterprise.go +++ b/internal/config/image_enterprise.go @@ -10,5 +10,5 @@ package config const ( // defaultImage is the default image to use. - defaultImage = "ref/main/stream/nightly/v2.22.0-pre.0.20250325141338-66815a4a4728" + defaultImage = "ref/main/stream/nightly/v2.23.0-pre.0.20250401105226-700eb60614f4" ) From 5ab11ab996e89d94dd3acddefe011ba38fa48f02 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 2 Apr 2025 08:59:01 +0200 Subject: [PATCH 188/311] deps: update dependency DeterminateSystems/nix-installer to v3.2.0 (#3730) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/reproducible-builds.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/reproducible-builds.yml b/.github/workflows/reproducible-builds.yml index 5779247c2..3d2255363 100644 --- a/.github/workflows/reproducible-builds.yml +++ b/.github/workflows/reproducible-builds.yml @@ -57,7 +57,7 @@ jobs: chmod a+x "$HOME/.local/bin/bazel" echo "$HOME/.local/bin" >> "$GITHUB_PATH" - curl -fsSL -o "$HOME/.local/bin/nix-installer" https://github.com/DeterminateSystems/nix-installer/releases/download/v3.0.0/nix-installer-x86_64-linux # renovate:github-release + curl -fsSL -o "$HOME/.local/bin/nix-installer" https://github.com/DeterminateSystems/nix-installer/releases/download/v3.2.0/nix-installer-x86_64-linux # renovate:github-release nixVersion=$(cat .nixversion) chmod a+x "$HOME/.local/bin/nix-installer" "$HOME/.local/bin/nix-installer" install --no-confirm --nix-package-url "https://releases.nixos.org/nix/nix-$nixVersion/nix-$nixVersion-x86_64-linux.tar.xz" From ebc962ad68de31a11e2316a7a3186e75888a52d4 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 2 Apr 2025 13:19:18 +0200 Subject: [PATCH 189/311] deps: update Terraform dependencies (#3732) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .../vpn/on-prem-terraform/.terraform.lock.hcl | 48 +++++++-------- dev-docs/howto/vpn/on-prem-terraform/main.tf | 2 +- .../azure-terraform/.terraform.lock.hcl | 48 +++++++-------- .../miniconstellation/azure-terraform/main.tf | 2 +- e2e/miniconstellation/.terraform.lock.hcl | 48 +++++++-------- e2e/miniconstellation/main.tf | 2 +- .../examples/full/aws/main.tf | 2 +- .../examples/full/azure/main.tf | 2 +- .../examples/full/gcp/main.tf | 2 +- .../examples/full/stackit/main.tf | 2 +- .../infrastructure/azure/.terraform.lock.hcl | 48 +++++++-------- terraform/infrastructure/azure/main.tf | 2 +- .../modules/load_balancer_backend/main.tf | 2 +- .../azure/modules/scale_set/main.tf | 2 +- .../infrastructure/gcp/.terraform.lock.hcl | 48 +++++++-------- terraform/infrastructure/gcp/main.tf | 2 +- .../gcp/modules/instance_group/main.tf | 2 +- .../modules/internal_load_balancer/main.tf | 2 +- .../gcp/modules/jump_host/main.tf | 2 +- .../gcp/modules/loadbalancer/main.tf | 2 +- .../iam/azure/.terraform.lock.hcl | 48 +++++++-------- terraform/infrastructure/iam/azure/main.tf | 2 +- .../iam/gcp/.terraform.lock.hcl | 48 +++++++-------- terraform/infrastructure/iam/gcp/main.tf | 2 +- .../openstack/.terraform.lock.hcl | 60 +++++++++---------- terraform/infrastructure/openstack/main.tf | 2 +- .../modules/stackit_loadbalancer/main.tf | 2 +- 27 files changed, 217 insertions(+), 217 deletions(-) diff --git a/dev-docs/howto/vpn/on-prem-terraform/.terraform.lock.hcl b/dev-docs/howto/vpn/on-prem-terraform/.terraform.lock.hcl index c628c140e..cdcf1b084 100644 --- a/dev-docs/howto/vpn/on-prem-terraform/.terraform.lock.hcl +++ b/dev-docs/howto/vpn/on-prem-terraform/.terraform.lock.hcl @@ -2,31 +2,31 @@ # Manual edits may be lost in future updates. provider "registry.terraform.io/hashicorp/azurerm" { - version = "4.24.0" - constraints = "4.24.0" + version = "4.25.0" + constraints = "4.25.0" hashes = [ - "h1:31W8xw2zoe03WSEr441Jh1E4PKxEXduN6OeOUdhGHRE=", - "h1:3DzTW6k/otWNhyqEt3I5CnyOfu4VY96k//Ri2rJmtsw=", - "h1:HPGpRzmaAhrguNcDn25r1RAu4h0d4b2lq6MTIxiTw6w=", - "h1:MCqV1KMC8FqBjMDb6mnINcBVdN98hh/KSpJT2yKoHrE=", - "h1:N2nB3s9xiZ93Wb5XVJZmv8dfv6oBUpJyk+gKYugt+os=", - "h1:NqCwAlkZ4bgupjxMz32PaU0hW5ithwnc0KupYIJz6UA=", - "h1:QKLE+6C8K98qAoah9gY6H6twDjpFmujoJsw/uMAGp5Y=", - "h1:RW9HwyDDx4rLFLlgqnHd8HEXJFbaK1eaqmCNwf4YJRo=", - "h1:ZqpLJOc0bFeTCNbkSMINldvsHoKMZgrKnTAFILuXzJQ=", - "h1:o8pD1z2vMiCrdXRpcMPlfs8VZRlSJnB+fYaMSWpWLV0=", - "h1:wl0kzOYi+dGFMRajdQnlKSm3JpYY2i13UHcceLT8KkU=", - "zh:26cebd201fad0c361e757d8552208106b70fd8dbca3668229ae4eb92fcd69d20", - "zh:33e8929ef07dd515a93027d35b77ad28b9a9fa915d824c028e0df75bcd7ad18a", - "zh:3de012cfbb0e993826a4715a9b94908ab87e48f45a72b2ae87dc770bba1a38bc", - "zh:4d3fd7c389a1768e15ef0ad78fbf2c560d35284fcfb8196d775466bffe4aa8ca", - "zh:88b8979d73ea7f2361df4ae26b64202fac44c0bc1291d8cd4ffb9a605f99d35b", - "zh:95ebe18507cf32fe7cdbc3b8c69f78541be9511070a60d3d925e3ef4df7d7b20", - "zh:9ad4bd9262be7e6ea933ae3ce4696c86129be6b44c44a605e748ef95c897ea76", - "zh:a54609ff7eddf2b0eed9ae67e33c5fcdf94aa838a49d06052bbe632ed5453a91", - "zh:a6bdff023a0d9bc15fadda37b23202ec0f5d6fbb66013dcb70a9ad0f162a86f5", - "zh:cc4c82f23b2fe55126b06c719a8285ecf2cb9dd10b89c7a22af047f940c262e5", - "zh:ed32a4e66aaabb7fa919800a3fdb27bc3181844765f1109824af3a542b84bbf7", + "h1:0ngEPvgsbXdQ6feo/6WqVkxDj1zsDx2jdsB2bl+R1Rg=", + "h1:3ZxcyUNfYBb49d6tw584RWmYbYozgqueZLHaJi9BLDA=", + "h1:6dUCvh+kYsKRVeqIEtcVdMgInojZqVV86R7DHkVXHq4=", + "h1:F0sulaJhPHnLbwWcKlsXP7DDAVQi9+93fFxjEoZQaKo=", + "h1:RvLXu5xam1B4u5TWEPdvKIc2lLNUekACXxl3OnplvLw=", + "h1:SG57DX+kbbsSlLr1y9Z/n/2F57aPlzSBi9tP+Y4ltD4=", + "h1:UMRdLJ+HHUIxHYrbguIJrsRUN3xGrf92Q53UGZi3fM4=", + "h1:fKYoZJBpyKMkoN46eGto3qG+IvD/SP2cjTD4AxGxJxg=", + "h1:kTMYggdpy3ozYocnK7SI6217nh8FAJQEVP8+93nVjEs=", + "h1:r3wbLuv+ZOTFgYna274nvJD41bUBrIEq3XrvzeZar5c=", + "h1:xNXSfbZ3U4IIYp9ttN+uDQqptNM7Ynk19283z0+2pww=", + "zh:05e9243872f174ec7e7bd58c92b986464d516d9281e28e6abe4b57fa9fd58b3c", + "zh:1b124540c947410e9334e64912bce4e3b5b164ae7734927fb093178081e67011", + "zh:2daaeadd33305a1e700682a1d369d52b1376c64a44e680c2fccdc3e58cd86edb", + "zh:3767cfeeaae01a5c263d863d1c8b58eca9a4fa8ada8dbdf41222d1b143694065", + "zh:3c69f63583468366fb641f606c23a269fd04b6f1603e06c20568ffc28e6581bd", + "zh:7b3afd2827ed6def9ce46dcb9ce8603db493606d1d2b50da9c09f8ef44b2545c", + "zh:8d37210d2a738c755da60dbdf26f6cb2d719ce8711aeea838bc961257d921e0e", + "zh:9096e89a61d1d04123075a4ef429fb52d2d22b9786f82c1d52db172c9a67e563", + "zh:9fcf345164043fd8147b5f8ec084a57e50ebdf0a5c48c2d49660ce461db650ae", + "zh:cbb5738bca019d8539432cb20b680781c3870d60a4e057ad178bc2ddc6f40e67", + "zh:ed49bf0d5875fcfb39dd739b79877ba2738bfb61c39546b02d5d0278f960da9e", "zh:f569b65999264a9416862bca5cd2a6177d94ccb0424f3a4ef424428912b9cb3c", ] } diff --git a/dev-docs/howto/vpn/on-prem-terraform/main.tf b/dev-docs/howto/vpn/on-prem-terraform/main.tf index 3d97ff657..ca1457fae 100644 --- a/dev-docs/howto/vpn/on-prem-terraform/main.tf +++ b/dev-docs/howto/vpn/on-prem-terraform/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { azurerm = { source = "hashicorp/azurerm" - version = "4.24.0" + version = "4.25.0" } random = { source = "hashicorp/random" diff --git a/dev-docs/miniconstellation/azure-terraform/.terraform.lock.hcl b/dev-docs/miniconstellation/azure-terraform/.terraform.lock.hcl index b3bc1c30d..63f51d59d 100644 --- a/dev-docs/miniconstellation/azure-terraform/.terraform.lock.hcl +++ b/dev-docs/miniconstellation/azure-terraform/.terraform.lock.hcl @@ -2,31 +2,31 @@ # Manual edits may be lost in future updates. provider "registry.terraform.io/hashicorp/azurerm" { - version = "4.24.0" - constraints = "4.24.0" + version = "4.25.0" + constraints = "4.25.0" hashes = [ - "h1:31W8xw2zoe03WSEr441Jh1E4PKxEXduN6OeOUdhGHRE=", - "h1:3DzTW6k/otWNhyqEt3I5CnyOfu4VY96k//Ri2rJmtsw=", - "h1:HPGpRzmaAhrguNcDn25r1RAu4h0d4b2lq6MTIxiTw6w=", - "h1:MCqV1KMC8FqBjMDb6mnINcBVdN98hh/KSpJT2yKoHrE=", - "h1:N2nB3s9xiZ93Wb5XVJZmv8dfv6oBUpJyk+gKYugt+os=", - "h1:NqCwAlkZ4bgupjxMz32PaU0hW5ithwnc0KupYIJz6UA=", - "h1:QKLE+6C8K98qAoah9gY6H6twDjpFmujoJsw/uMAGp5Y=", - "h1:RW9HwyDDx4rLFLlgqnHd8HEXJFbaK1eaqmCNwf4YJRo=", - "h1:ZqpLJOc0bFeTCNbkSMINldvsHoKMZgrKnTAFILuXzJQ=", - "h1:o8pD1z2vMiCrdXRpcMPlfs8VZRlSJnB+fYaMSWpWLV0=", - "h1:wl0kzOYi+dGFMRajdQnlKSm3JpYY2i13UHcceLT8KkU=", - "zh:26cebd201fad0c361e757d8552208106b70fd8dbca3668229ae4eb92fcd69d20", - "zh:33e8929ef07dd515a93027d35b77ad28b9a9fa915d824c028e0df75bcd7ad18a", - "zh:3de012cfbb0e993826a4715a9b94908ab87e48f45a72b2ae87dc770bba1a38bc", - "zh:4d3fd7c389a1768e15ef0ad78fbf2c560d35284fcfb8196d775466bffe4aa8ca", - "zh:88b8979d73ea7f2361df4ae26b64202fac44c0bc1291d8cd4ffb9a605f99d35b", - "zh:95ebe18507cf32fe7cdbc3b8c69f78541be9511070a60d3d925e3ef4df7d7b20", - "zh:9ad4bd9262be7e6ea933ae3ce4696c86129be6b44c44a605e748ef95c897ea76", - "zh:a54609ff7eddf2b0eed9ae67e33c5fcdf94aa838a49d06052bbe632ed5453a91", - "zh:a6bdff023a0d9bc15fadda37b23202ec0f5d6fbb66013dcb70a9ad0f162a86f5", - "zh:cc4c82f23b2fe55126b06c719a8285ecf2cb9dd10b89c7a22af047f940c262e5", - "zh:ed32a4e66aaabb7fa919800a3fdb27bc3181844765f1109824af3a542b84bbf7", + "h1:0ngEPvgsbXdQ6feo/6WqVkxDj1zsDx2jdsB2bl+R1Rg=", + "h1:3ZxcyUNfYBb49d6tw584RWmYbYozgqueZLHaJi9BLDA=", + "h1:6dUCvh+kYsKRVeqIEtcVdMgInojZqVV86R7DHkVXHq4=", + "h1:F0sulaJhPHnLbwWcKlsXP7DDAVQi9+93fFxjEoZQaKo=", + "h1:RvLXu5xam1B4u5TWEPdvKIc2lLNUekACXxl3OnplvLw=", + "h1:SG57DX+kbbsSlLr1y9Z/n/2F57aPlzSBi9tP+Y4ltD4=", + "h1:UMRdLJ+HHUIxHYrbguIJrsRUN3xGrf92Q53UGZi3fM4=", + "h1:fKYoZJBpyKMkoN46eGto3qG+IvD/SP2cjTD4AxGxJxg=", + "h1:kTMYggdpy3ozYocnK7SI6217nh8FAJQEVP8+93nVjEs=", + "h1:r3wbLuv+ZOTFgYna274nvJD41bUBrIEq3XrvzeZar5c=", + "h1:xNXSfbZ3U4IIYp9ttN+uDQqptNM7Ynk19283z0+2pww=", + "zh:05e9243872f174ec7e7bd58c92b986464d516d9281e28e6abe4b57fa9fd58b3c", + "zh:1b124540c947410e9334e64912bce4e3b5b164ae7734927fb093178081e67011", + "zh:2daaeadd33305a1e700682a1d369d52b1376c64a44e680c2fccdc3e58cd86edb", + "zh:3767cfeeaae01a5c263d863d1c8b58eca9a4fa8ada8dbdf41222d1b143694065", + "zh:3c69f63583468366fb641f606c23a269fd04b6f1603e06c20568ffc28e6581bd", + "zh:7b3afd2827ed6def9ce46dcb9ce8603db493606d1d2b50da9c09f8ef44b2545c", + "zh:8d37210d2a738c755da60dbdf26f6cb2d719ce8711aeea838bc961257d921e0e", + "zh:9096e89a61d1d04123075a4ef429fb52d2d22b9786f82c1d52db172c9a67e563", + "zh:9fcf345164043fd8147b5f8ec084a57e50ebdf0a5c48c2d49660ce461db650ae", + "zh:cbb5738bca019d8539432cb20b680781c3870d60a4e057ad178bc2ddc6f40e67", + "zh:ed49bf0d5875fcfb39dd739b79877ba2738bfb61c39546b02d5d0278f960da9e", "zh:f569b65999264a9416862bca5cd2a6177d94ccb0424f3a4ef424428912b9cb3c", ] } diff --git a/dev-docs/miniconstellation/azure-terraform/main.tf b/dev-docs/miniconstellation/azure-terraform/main.tf index 75540a92d..ff9010158 100644 --- a/dev-docs/miniconstellation/azure-terraform/main.tf +++ b/dev-docs/miniconstellation/azure-terraform/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { azurerm = { source = "hashicorp/azurerm" - version = "4.24.0" + version = "4.25.0" } random = { source = "hashicorp/random" diff --git a/e2e/miniconstellation/.terraform.lock.hcl b/e2e/miniconstellation/.terraform.lock.hcl index 204014603..587a3fdbd 100644 --- a/e2e/miniconstellation/.terraform.lock.hcl +++ b/e2e/miniconstellation/.terraform.lock.hcl @@ -2,31 +2,31 @@ # Manual edits may be lost in future updates. provider "registry.terraform.io/hashicorp/azurerm" { - version = "4.24.0" - constraints = "4.24.0" + version = "4.25.0" + constraints = "4.25.0" hashes = [ - "h1:31W8xw2zoe03WSEr441Jh1E4PKxEXduN6OeOUdhGHRE=", - "h1:3DzTW6k/otWNhyqEt3I5CnyOfu4VY96k//Ri2rJmtsw=", - "h1:HPGpRzmaAhrguNcDn25r1RAu4h0d4b2lq6MTIxiTw6w=", - "h1:MCqV1KMC8FqBjMDb6mnINcBVdN98hh/KSpJT2yKoHrE=", - "h1:N2nB3s9xiZ93Wb5XVJZmv8dfv6oBUpJyk+gKYugt+os=", - "h1:NqCwAlkZ4bgupjxMz32PaU0hW5ithwnc0KupYIJz6UA=", - "h1:QKLE+6C8K98qAoah9gY6H6twDjpFmujoJsw/uMAGp5Y=", - "h1:RW9HwyDDx4rLFLlgqnHd8HEXJFbaK1eaqmCNwf4YJRo=", - "h1:ZqpLJOc0bFeTCNbkSMINldvsHoKMZgrKnTAFILuXzJQ=", - "h1:o8pD1z2vMiCrdXRpcMPlfs8VZRlSJnB+fYaMSWpWLV0=", - "h1:wl0kzOYi+dGFMRajdQnlKSm3JpYY2i13UHcceLT8KkU=", - "zh:26cebd201fad0c361e757d8552208106b70fd8dbca3668229ae4eb92fcd69d20", - "zh:33e8929ef07dd515a93027d35b77ad28b9a9fa915d824c028e0df75bcd7ad18a", - "zh:3de012cfbb0e993826a4715a9b94908ab87e48f45a72b2ae87dc770bba1a38bc", - "zh:4d3fd7c389a1768e15ef0ad78fbf2c560d35284fcfb8196d775466bffe4aa8ca", - "zh:88b8979d73ea7f2361df4ae26b64202fac44c0bc1291d8cd4ffb9a605f99d35b", - "zh:95ebe18507cf32fe7cdbc3b8c69f78541be9511070a60d3d925e3ef4df7d7b20", - "zh:9ad4bd9262be7e6ea933ae3ce4696c86129be6b44c44a605e748ef95c897ea76", - "zh:a54609ff7eddf2b0eed9ae67e33c5fcdf94aa838a49d06052bbe632ed5453a91", - "zh:a6bdff023a0d9bc15fadda37b23202ec0f5d6fbb66013dcb70a9ad0f162a86f5", - "zh:cc4c82f23b2fe55126b06c719a8285ecf2cb9dd10b89c7a22af047f940c262e5", - "zh:ed32a4e66aaabb7fa919800a3fdb27bc3181844765f1109824af3a542b84bbf7", + "h1:0ngEPvgsbXdQ6feo/6WqVkxDj1zsDx2jdsB2bl+R1Rg=", + "h1:3ZxcyUNfYBb49d6tw584RWmYbYozgqueZLHaJi9BLDA=", + "h1:6dUCvh+kYsKRVeqIEtcVdMgInojZqVV86R7DHkVXHq4=", + "h1:F0sulaJhPHnLbwWcKlsXP7DDAVQi9+93fFxjEoZQaKo=", + "h1:RvLXu5xam1B4u5TWEPdvKIc2lLNUekACXxl3OnplvLw=", + "h1:SG57DX+kbbsSlLr1y9Z/n/2F57aPlzSBi9tP+Y4ltD4=", + "h1:UMRdLJ+HHUIxHYrbguIJrsRUN3xGrf92Q53UGZi3fM4=", + "h1:fKYoZJBpyKMkoN46eGto3qG+IvD/SP2cjTD4AxGxJxg=", + "h1:kTMYggdpy3ozYocnK7SI6217nh8FAJQEVP8+93nVjEs=", + "h1:r3wbLuv+ZOTFgYna274nvJD41bUBrIEq3XrvzeZar5c=", + "h1:xNXSfbZ3U4IIYp9ttN+uDQqptNM7Ynk19283z0+2pww=", + "zh:05e9243872f174ec7e7bd58c92b986464d516d9281e28e6abe4b57fa9fd58b3c", + "zh:1b124540c947410e9334e64912bce4e3b5b164ae7734927fb093178081e67011", + "zh:2daaeadd33305a1e700682a1d369d52b1376c64a44e680c2fccdc3e58cd86edb", + "zh:3767cfeeaae01a5c263d863d1c8b58eca9a4fa8ada8dbdf41222d1b143694065", + "zh:3c69f63583468366fb641f606c23a269fd04b6f1603e06c20568ffc28e6581bd", + "zh:7b3afd2827ed6def9ce46dcb9ce8603db493606d1d2b50da9c09f8ef44b2545c", + "zh:8d37210d2a738c755da60dbdf26f6cb2d719ce8711aeea838bc961257d921e0e", + "zh:9096e89a61d1d04123075a4ef429fb52d2d22b9786f82c1d52db172c9a67e563", + "zh:9fcf345164043fd8147b5f8ec084a57e50ebdf0a5c48c2d49660ce461db650ae", + "zh:cbb5738bca019d8539432cb20b680781c3870d60a4e057ad178bc2ddc6f40e67", + "zh:ed49bf0d5875fcfb39dd739b79877ba2738bfb61c39546b02d5d0278f960da9e", "zh:f569b65999264a9416862bca5cd2a6177d94ccb0424f3a4ef424428912b9cb3c", ] } diff --git a/e2e/miniconstellation/main.tf b/e2e/miniconstellation/main.tf index 61984a2ec..a510c2a50 100644 --- a/e2e/miniconstellation/main.tf +++ b/e2e/miniconstellation/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { azurerm = { source = "hashicorp/azurerm" - version = "4.24.0" + version = "4.25.0" } tls = { source = "hashicorp/tls" diff --git a/terraform-provider-constellation/examples/full/aws/main.tf b/terraform-provider-constellation/examples/full/aws/main.tf index 090be7ec1..6d5b498d1 100644 --- a/terraform-provider-constellation/examples/full/aws/main.tf +++ b/terraform-provider-constellation/examples/full/aws/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { constellation = { source = "edgelesssys/constellation" - version = "2.21.1" // replace with the version you want to use + version = "2.22.0" // replace with the version you want to use } random = { source = "hashicorp/random" diff --git a/terraform-provider-constellation/examples/full/azure/main.tf b/terraform-provider-constellation/examples/full/azure/main.tf index 5319275b6..1e87874dc 100644 --- a/terraform-provider-constellation/examples/full/azure/main.tf +++ b/terraform-provider-constellation/examples/full/azure/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { constellation = { source = "edgelesssys/constellation" - version = "2.21.1" // replace with the version you want to use + version = "2.22.0" // replace with the version you want to use } random = { source = "hashicorp/random" diff --git a/terraform-provider-constellation/examples/full/gcp/main.tf b/terraform-provider-constellation/examples/full/gcp/main.tf index e330adbff..874ba658e 100644 --- a/terraform-provider-constellation/examples/full/gcp/main.tf +++ b/terraform-provider-constellation/examples/full/gcp/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { constellation = { source = "edgelesssys/constellation" - version = "2.21.1" // replace with the version you want to use + version = "2.22.0" // replace with the version you want to use } random = { source = "hashicorp/random" diff --git a/terraform-provider-constellation/examples/full/stackit/main.tf b/terraform-provider-constellation/examples/full/stackit/main.tf index 55e857995..5cc8b8b85 100644 --- a/terraform-provider-constellation/examples/full/stackit/main.tf +++ b/terraform-provider-constellation/examples/full/stackit/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { constellation = { source = "edgelesssys/constellation" - version = "2.21.1" // replace with the version you want to use + version = "2.22.0" // replace with the version you want to use } random = { source = "hashicorp/random" diff --git a/terraform/infrastructure/azure/.terraform.lock.hcl b/terraform/infrastructure/azure/.terraform.lock.hcl index c628c140e..cdcf1b084 100644 --- a/terraform/infrastructure/azure/.terraform.lock.hcl +++ b/terraform/infrastructure/azure/.terraform.lock.hcl @@ -2,31 +2,31 @@ # Manual edits may be lost in future updates. provider "registry.terraform.io/hashicorp/azurerm" { - version = "4.24.0" - constraints = "4.24.0" + version = "4.25.0" + constraints = "4.25.0" hashes = [ - "h1:31W8xw2zoe03WSEr441Jh1E4PKxEXduN6OeOUdhGHRE=", - "h1:3DzTW6k/otWNhyqEt3I5CnyOfu4VY96k//Ri2rJmtsw=", - "h1:HPGpRzmaAhrguNcDn25r1RAu4h0d4b2lq6MTIxiTw6w=", - "h1:MCqV1KMC8FqBjMDb6mnINcBVdN98hh/KSpJT2yKoHrE=", - "h1:N2nB3s9xiZ93Wb5XVJZmv8dfv6oBUpJyk+gKYugt+os=", - "h1:NqCwAlkZ4bgupjxMz32PaU0hW5ithwnc0KupYIJz6UA=", - "h1:QKLE+6C8K98qAoah9gY6H6twDjpFmujoJsw/uMAGp5Y=", - "h1:RW9HwyDDx4rLFLlgqnHd8HEXJFbaK1eaqmCNwf4YJRo=", - "h1:ZqpLJOc0bFeTCNbkSMINldvsHoKMZgrKnTAFILuXzJQ=", - "h1:o8pD1z2vMiCrdXRpcMPlfs8VZRlSJnB+fYaMSWpWLV0=", - "h1:wl0kzOYi+dGFMRajdQnlKSm3JpYY2i13UHcceLT8KkU=", - "zh:26cebd201fad0c361e757d8552208106b70fd8dbca3668229ae4eb92fcd69d20", - "zh:33e8929ef07dd515a93027d35b77ad28b9a9fa915d824c028e0df75bcd7ad18a", - "zh:3de012cfbb0e993826a4715a9b94908ab87e48f45a72b2ae87dc770bba1a38bc", - "zh:4d3fd7c389a1768e15ef0ad78fbf2c560d35284fcfb8196d775466bffe4aa8ca", - "zh:88b8979d73ea7f2361df4ae26b64202fac44c0bc1291d8cd4ffb9a605f99d35b", - "zh:95ebe18507cf32fe7cdbc3b8c69f78541be9511070a60d3d925e3ef4df7d7b20", - "zh:9ad4bd9262be7e6ea933ae3ce4696c86129be6b44c44a605e748ef95c897ea76", - "zh:a54609ff7eddf2b0eed9ae67e33c5fcdf94aa838a49d06052bbe632ed5453a91", - "zh:a6bdff023a0d9bc15fadda37b23202ec0f5d6fbb66013dcb70a9ad0f162a86f5", - "zh:cc4c82f23b2fe55126b06c719a8285ecf2cb9dd10b89c7a22af047f940c262e5", - "zh:ed32a4e66aaabb7fa919800a3fdb27bc3181844765f1109824af3a542b84bbf7", + "h1:0ngEPvgsbXdQ6feo/6WqVkxDj1zsDx2jdsB2bl+R1Rg=", + "h1:3ZxcyUNfYBb49d6tw584RWmYbYozgqueZLHaJi9BLDA=", + "h1:6dUCvh+kYsKRVeqIEtcVdMgInojZqVV86R7DHkVXHq4=", + "h1:F0sulaJhPHnLbwWcKlsXP7DDAVQi9+93fFxjEoZQaKo=", + "h1:RvLXu5xam1B4u5TWEPdvKIc2lLNUekACXxl3OnplvLw=", + "h1:SG57DX+kbbsSlLr1y9Z/n/2F57aPlzSBi9tP+Y4ltD4=", + "h1:UMRdLJ+HHUIxHYrbguIJrsRUN3xGrf92Q53UGZi3fM4=", + "h1:fKYoZJBpyKMkoN46eGto3qG+IvD/SP2cjTD4AxGxJxg=", + "h1:kTMYggdpy3ozYocnK7SI6217nh8FAJQEVP8+93nVjEs=", + "h1:r3wbLuv+ZOTFgYna274nvJD41bUBrIEq3XrvzeZar5c=", + "h1:xNXSfbZ3U4IIYp9ttN+uDQqptNM7Ynk19283z0+2pww=", + "zh:05e9243872f174ec7e7bd58c92b986464d516d9281e28e6abe4b57fa9fd58b3c", + "zh:1b124540c947410e9334e64912bce4e3b5b164ae7734927fb093178081e67011", + "zh:2daaeadd33305a1e700682a1d369d52b1376c64a44e680c2fccdc3e58cd86edb", + "zh:3767cfeeaae01a5c263d863d1c8b58eca9a4fa8ada8dbdf41222d1b143694065", + "zh:3c69f63583468366fb641f606c23a269fd04b6f1603e06c20568ffc28e6581bd", + "zh:7b3afd2827ed6def9ce46dcb9ce8603db493606d1d2b50da9c09f8ef44b2545c", + "zh:8d37210d2a738c755da60dbdf26f6cb2d719ce8711aeea838bc961257d921e0e", + "zh:9096e89a61d1d04123075a4ef429fb52d2d22b9786f82c1d52db172c9a67e563", + "zh:9fcf345164043fd8147b5f8ec084a57e50ebdf0a5c48c2d49660ce461db650ae", + "zh:cbb5738bca019d8539432cb20b680781c3870d60a4e057ad178bc2ddc6f40e67", + "zh:ed49bf0d5875fcfb39dd739b79877ba2738bfb61c39546b02d5d0278f960da9e", "zh:f569b65999264a9416862bca5cd2a6177d94ccb0424f3a4ef424428912b9cb3c", ] } diff --git a/terraform/infrastructure/azure/main.tf b/terraform/infrastructure/azure/main.tf index 0f603126d..3ba15e746 100644 --- a/terraform/infrastructure/azure/main.tf +++ b/terraform/infrastructure/azure/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { azurerm = { source = "hashicorp/azurerm" - version = "4.24.0" + version = "4.25.0" } random = { source = "hashicorp/random" diff --git a/terraform/infrastructure/azure/modules/load_balancer_backend/main.tf b/terraform/infrastructure/azure/modules/load_balancer_backend/main.tf index 89351c857..830f7a202 100644 --- a/terraform/infrastructure/azure/modules/load_balancer_backend/main.tf +++ b/terraform/infrastructure/azure/modules/load_balancer_backend/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { azurerm = { source = "hashicorp/azurerm" - version = "4.24.0" + version = "4.25.0" } } } diff --git a/terraform/infrastructure/azure/modules/scale_set/main.tf b/terraform/infrastructure/azure/modules/scale_set/main.tf index 0d563feb4..b61b0b66c 100644 --- a/terraform/infrastructure/azure/modules/scale_set/main.tf +++ b/terraform/infrastructure/azure/modules/scale_set/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { azurerm = { source = "hashicorp/azurerm" - version = "4.24.0" + version = "4.25.0" } random = { source = "hashicorp/random" diff --git a/terraform/infrastructure/gcp/.terraform.lock.hcl b/terraform/infrastructure/gcp/.terraform.lock.hcl index fe3799dd8..eb96aff3e 100644 --- a/terraform/infrastructure/gcp/.terraform.lock.hcl +++ b/terraform/infrastructure/gcp/.terraform.lock.hcl @@ -2,32 +2,32 @@ # Manual edits may be lost in future updates. provider "registry.terraform.io/hashicorp/google" { - version = "6.27.0" - constraints = "6.27.0" + version = "6.28.0" + constraints = "6.28.0" hashes = [ - "h1:1aVSGyBFnQf/EerFDnp6bRAXD16nTwmFk4iZ8DRRuNw=", - "h1:6u6rQ3HGvCnJpqka4RECJNdpEVV2mv5kpI8y5uWCvf4=", - "h1:CLLP3iWnjqnpuYvxTlv0hoXAwsoRiXuHAF+uC9zr7qE=", - "h1:KzQWVS5YOkTJxciv4nKjRwLbNuWq6SxlCLJTTpM5O90=", - "h1:MHuQfr068Yx5K5mEdLauY/0j2OZ9E1fe8d948w3kja8=", - "h1:NPQFeTud3D4Wt2eXK8/es14/Sof/s1X+QznjjrcmhHE=", - "h1:NecZZ8u3NGyGZZj3qTzyDXYUx4wQ1IRzVo+U2eYfkdk=", - "h1:T4n/UjC2M7qGJgTnNF4A9N4Oibq/c8kcNtVApL0+PsA=", - "h1:XaWH/1VsrMTjsg4Ik3YtIFdkQzXUpki66HJMVI7QZoE=", - "h1:q+jp9jrYyt0eGyntqEBWXWDh61UiyG/sa0+Xn7n72gc=", - "h1:yOClyOHiawZkVQ4CV2ZAQDBVYq+iwZ0H8CeD1lCpfIE=", - "zh:04623cec9bb1646265498b646f9ba2153eb98f2c190efbf9cf0e862547444a86", - "zh:1801c35017302ced13ca5faac210b10617dc933c63aaee9576422ec0119e7fbc", - "zh:3fe5d633a146a53504387acd6c16919a3eac1e7b55ae61c2d85583aeb2227528", - "zh:4870bce89958414e3b9c9d4f8e34e4d346b5800a24b6cc5df86fcad400091325", - "zh:48dbd5031de507b14e0ebca44f9dd00043057f6324c80971d4bc338072b2f7ea", - "zh:4c5146a49dd346295e3ef41303884ac28cd655705f4300ceafc23e2577f3b1ce", - "zh:592caabc8444d7df3cdf61cd62381fbaed854747e04af593f09c181699cca8c2", - "zh:a754c9f54745d614817acdb63a791315c79f1fdc7a0867c8d6f505e066de1b55", - "zh:c72857459146b74dbf270ad5a45e12f7a0f50254fcd200e6833f3d137709ae34", - "zh:e1e11e2373843dfe8cfaa32148981c7f3b04382baa3a901cb70a2db062ef0983", - "zh:e1f297229c4c6fed3bcfba576da4e72c42bb93b578794920ab2d8698b3a8cb40", + "h1:8FLr1ZsOobsrFAiiwGQzuqzVjBj5mYYWkMN0Y09Qjq8=", + "h1:DGPyFrIRVTigrTsVQV6r9qoiCX7OcGfieDjnk+TcXB8=", + "h1:G2D9+1cuLBLMkeOHUXHrV1WQdddkogA5q3anL0Xr2TI=", + "h1:S9knFeidlUtcNO+mhizWU9ibt6L0mSz5dgLV6TIA0m4=", + "h1:dTcCD7AJBI1mAKZODNtwtdPwfF7kqd641O+NNUS1WHw=", + "h1:dU734u/u9hk/RHDDj39246xwiczNx3esgivjOudMOs0=", + "h1:hWvkPXL2I2rd7EqvaVPisY471myaTrNiFopIjExFXfQ=", + "h1:kdykym1DNqAwgPjz4qtiNiQ4gHDrctsWvIvNDQTnQrU=", + "h1:oOYYQJYDlh7UoQx7t7y2DUsM8puXMBOJ+CWd6JaYCro=", + "h1:s/EZB00Y4Mct8G43Vp/X1BpDNGq9j7AbIPBj4icIv0A=", + "h1:v1WgDN2R+XUky0itOG0bf6E+m+w+d3Mh8tZVP/XBKnQ=", + "zh:2528b47d20d378283478feafdf16aade01d56d42c3283d7c904fd7a108f150f0", + "zh:36ef5e5b960375a166434f5836b5b957d760c34edfa256133c575e865ff4ee3c", + "zh:5fb97ca9465379dc5b965e407c5ccaa6c41fc1984214497fbf5b2bb49a585297", + "zh:78d2adcf6623f170aab3956d26d115032fecea11db4f62ee9ee76b67389546f3", + "zh:832bb0a957d4d1e664391186791af1cea14e0af878ea12d1b0ce5bb0a5dc98ef", + "zh:8c1eee42fd21b64596b72b4808595b6b1e07c3c614990e22b347c35a42360fed", + "zh:8fcb3165c29944d4465ce9db93daf2b9c816223bf6fcbd95818814525a706038", + "zh:931d05f9ba329942e6888873022e31c458048a8c2a3e42a6d1952337d2f9b240", + "zh:b78472cd5750b6d2d363c735a5e8d2a7bb98d0979ab7e42b8c5f9d17a2e5bbb6", + "zh:d203df11df368d2316894c481d34be2de9e54d1f90cec0056ef5154d06a9edc7", "zh:f569b65999264a9416862bca5cd2a6177d94ccb0424f3a4ef424428912b9cb3c", + "zh:fecb0db6ab81777a0f48d315838f911753e9c5d66e22eebd491abd83c49fde2c", ] } diff --git a/terraform/infrastructure/gcp/main.tf b/terraform/infrastructure/gcp/main.tf index f26ab5e16..3a9dde574 100644 --- a/terraform/infrastructure/gcp/main.tf +++ b/terraform/infrastructure/gcp/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { google = { source = "hashicorp/google" - version = "6.27.0" + version = "6.28.0" } random = { diff --git a/terraform/infrastructure/gcp/modules/instance_group/main.tf b/terraform/infrastructure/gcp/modules/instance_group/main.tf index 82baa7f74..3235b82b3 100644 --- a/terraform/infrastructure/gcp/modules/instance_group/main.tf +++ b/terraform/infrastructure/gcp/modules/instance_group/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { google = { source = "hashicorp/google" - version = "6.27.0" + version = "6.28.0" } random = { diff --git a/terraform/infrastructure/gcp/modules/internal_load_balancer/main.tf b/terraform/infrastructure/gcp/modules/internal_load_balancer/main.tf index a46593b8a..f36781518 100644 --- a/terraform/infrastructure/gcp/modules/internal_load_balancer/main.tf +++ b/terraform/infrastructure/gcp/modules/internal_load_balancer/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { google = { source = "hashicorp/google" - version = "6.27.0" + version = "6.28.0" } } } diff --git a/terraform/infrastructure/gcp/modules/jump_host/main.tf b/terraform/infrastructure/gcp/modules/jump_host/main.tf index 6a1a9f211..aae592239 100644 --- a/terraform/infrastructure/gcp/modules/jump_host/main.tf +++ b/terraform/infrastructure/gcp/modules/jump_host/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { google = { source = "hashicorp/google" - version = "6.27.0" + version = "6.28.0" } } } diff --git a/terraform/infrastructure/gcp/modules/loadbalancer/main.tf b/terraform/infrastructure/gcp/modules/loadbalancer/main.tf index dec886fe2..781088fa3 100644 --- a/terraform/infrastructure/gcp/modules/loadbalancer/main.tf +++ b/terraform/infrastructure/gcp/modules/loadbalancer/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { google = { source = "hashicorp/google" - version = "6.27.0" + version = "6.28.0" } } } diff --git a/terraform/infrastructure/iam/azure/.terraform.lock.hcl b/terraform/infrastructure/iam/azure/.terraform.lock.hcl index 3df0bb58d..7de49d782 100644 --- a/terraform/infrastructure/iam/azure/.terraform.lock.hcl +++ b/terraform/infrastructure/iam/azure/.terraform.lock.hcl @@ -32,31 +32,31 @@ provider "registry.terraform.io/hashicorp/azuread" { } provider "registry.terraform.io/hashicorp/azurerm" { - version = "4.24.0" - constraints = "4.24.0" + version = "4.25.0" + constraints = "4.25.0" hashes = [ - "h1:31W8xw2zoe03WSEr441Jh1E4PKxEXduN6OeOUdhGHRE=", - "h1:3DzTW6k/otWNhyqEt3I5CnyOfu4VY96k//Ri2rJmtsw=", - "h1:HPGpRzmaAhrguNcDn25r1RAu4h0d4b2lq6MTIxiTw6w=", - "h1:MCqV1KMC8FqBjMDb6mnINcBVdN98hh/KSpJT2yKoHrE=", - "h1:N2nB3s9xiZ93Wb5XVJZmv8dfv6oBUpJyk+gKYugt+os=", - "h1:NqCwAlkZ4bgupjxMz32PaU0hW5ithwnc0KupYIJz6UA=", - "h1:QKLE+6C8K98qAoah9gY6H6twDjpFmujoJsw/uMAGp5Y=", - "h1:RW9HwyDDx4rLFLlgqnHd8HEXJFbaK1eaqmCNwf4YJRo=", - "h1:ZqpLJOc0bFeTCNbkSMINldvsHoKMZgrKnTAFILuXzJQ=", - "h1:o8pD1z2vMiCrdXRpcMPlfs8VZRlSJnB+fYaMSWpWLV0=", - "h1:wl0kzOYi+dGFMRajdQnlKSm3JpYY2i13UHcceLT8KkU=", - "zh:26cebd201fad0c361e757d8552208106b70fd8dbca3668229ae4eb92fcd69d20", - "zh:33e8929ef07dd515a93027d35b77ad28b9a9fa915d824c028e0df75bcd7ad18a", - "zh:3de012cfbb0e993826a4715a9b94908ab87e48f45a72b2ae87dc770bba1a38bc", - "zh:4d3fd7c389a1768e15ef0ad78fbf2c560d35284fcfb8196d775466bffe4aa8ca", - "zh:88b8979d73ea7f2361df4ae26b64202fac44c0bc1291d8cd4ffb9a605f99d35b", - "zh:95ebe18507cf32fe7cdbc3b8c69f78541be9511070a60d3d925e3ef4df7d7b20", - "zh:9ad4bd9262be7e6ea933ae3ce4696c86129be6b44c44a605e748ef95c897ea76", - "zh:a54609ff7eddf2b0eed9ae67e33c5fcdf94aa838a49d06052bbe632ed5453a91", - "zh:a6bdff023a0d9bc15fadda37b23202ec0f5d6fbb66013dcb70a9ad0f162a86f5", - "zh:cc4c82f23b2fe55126b06c719a8285ecf2cb9dd10b89c7a22af047f940c262e5", - "zh:ed32a4e66aaabb7fa919800a3fdb27bc3181844765f1109824af3a542b84bbf7", + "h1:0ngEPvgsbXdQ6feo/6WqVkxDj1zsDx2jdsB2bl+R1Rg=", + "h1:3ZxcyUNfYBb49d6tw584RWmYbYozgqueZLHaJi9BLDA=", + "h1:6dUCvh+kYsKRVeqIEtcVdMgInojZqVV86R7DHkVXHq4=", + "h1:F0sulaJhPHnLbwWcKlsXP7DDAVQi9+93fFxjEoZQaKo=", + "h1:RvLXu5xam1B4u5TWEPdvKIc2lLNUekACXxl3OnplvLw=", + "h1:SG57DX+kbbsSlLr1y9Z/n/2F57aPlzSBi9tP+Y4ltD4=", + "h1:UMRdLJ+HHUIxHYrbguIJrsRUN3xGrf92Q53UGZi3fM4=", + "h1:fKYoZJBpyKMkoN46eGto3qG+IvD/SP2cjTD4AxGxJxg=", + "h1:kTMYggdpy3ozYocnK7SI6217nh8FAJQEVP8+93nVjEs=", + "h1:r3wbLuv+ZOTFgYna274nvJD41bUBrIEq3XrvzeZar5c=", + "h1:xNXSfbZ3U4IIYp9ttN+uDQqptNM7Ynk19283z0+2pww=", + "zh:05e9243872f174ec7e7bd58c92b986464d516d9281e28e6abe4b57fa9fd58b3c", + "zh:1b124540c947410e9334e64912bce4e3b5b164ae7734927fb093178081e67011", + "zh:2daaeadd33305a1e700682a1d369d52b1376c64a44e680c2fccdc3e58cd86edb", + "zh:3767cfeeaae01a5c263d863d1c8b58eca9a4fa8ada8dbdf41222d1b143694065", + "zh:3c69f63583468366fb641f606c23a269fd04b6f1603e06c20568ffc28e6581bd", + "zh:7b3afd2827ed6def9ce46dcb9ce8603db493606d1d2b50da9c09f8ef44b2545c", + "zh:8d37210d2a738c755da60dbdf26f6cb2d719ce8711aeea838bc961257d921e0e", + "zh:9096e89a61d1d04123075a4ef429fb52d2d22b9786f82c1d52db172c9a67e563", + "zh:9fcf345164043fd8147b5f8ec084a57e50ebdf0a5c48c2d49660ce461db650ae", + "zh:cbb5738bca019d8539432cb20b680781c3870d60a4e057ad178bc2ddc6f40e67", + "zh:ed49bf0d5875fcfb39dd739b79877ba2738bfb61c39546b02d5d0278f960da9e", "zh:f569b65999264a9416862bca5cd2a6177d94ccb0424f3a4ef424428912b9cb3c", ] } diff --git a/terraform/infrastructure/iam/azure/main.tf b/terraform/infrastructure/iam/azure/main.tf index 7ba77112e..8b18aa5da 100644 --- a/terraform/infrastructure/iam/azure/main.tf +++ b/terraform/infrastructure/iam/azure/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { azurerm = { source = "hashicorp/azurerm" - version = "4.24.0" + version = "4.25.0" } azuread = { source = "hashicorp/azuread" diff --git a/terraform/infrastructure/iam/gcp/.terraform.lock.hcl b/terraform/infrastructure/iam/gcp/.terraform.lock.hcl index 29ea247b0..532c950c8 100644 --- a/terraform/infrastructure/iam/gcp/.terraform.lock.hcl +++ b/terraform/infrastructure/iam/gcp/.terraform.lock.hcl @@ -2,32 +2,32 @@ # Manual edits may be lost in future updates. provider "registry.terraform.io/hashicorp/google" { - version = "6.27.0" - constraints = "6.27.0" + version = "6.28.0" + constraints = "6.28.0" hashes = [ - "h1:1aVSGyBFnQf/EerFDnp6bRAXD16nTwmFk4iZ8DRRuNw=", - "h1:6u6rQ3HGvCnJpqka4RECJNdpEVV2mv5kpI8y5uWCvf4=", - "h1:CLLP3iWnjqnpuYvxTlv0hoXAwsoRiXuHAF+uC9zr7qE=", - "h1:KzQWVS5YOkTJxciv4nKjRwLbNuWq6SxlCLJTTpM5O90=", - "h1:MHuQfr068Yx5K5mEdLauY/0j2OZ9E1fe8d948w3kja8=", - "h1:NPQFeTud3D4Wt2eXK8/es14/Sof/s1X+QznjjrcmhHE=", - "h1:NecZZ8u3NGyGZZj3qTzyDXYUx4wQ1IRzVo+U2eYfkdk=", - "h1:T4n/UjC2M7qGJgTnNF4A9N4Oibq/c8kcNtVApL0+PsA=", - "h1:XaWH/1VsrMTjsg4Ik3YtIFdkQzXUpki66HJMVI7QZoE=", - "h1:q+jp9jrYyt0eGyntqEBWXWDh61UiyG/sa0+Xn7n72gc=", - "h1:yOClyOHiawZkVQ4CV2ZAQDBVYq+iwZ0H8CeD1lCpfIE=", - "zh:04623cec9bb1646265498b646f9ba2153eb98f2c190efbf9cf0e862547444a86", - "zh:1801c35017302ced13ca5faac210b10617dc933c63aaee9576422ec0119e7fbc", - "zh:3fe5d633a146a53504387acd6c16919a3eac1e7b55ae61c2d85583aeb2227528", - "zh:4870bce89958414e3b9c9d4f8e34e4d346b5800a24b6cc5df86fcad400091325", - "zh:48dbd5031de507b14e0ebca44f9dd00043057f6324c80971d4bc338072b2f7ea", - "zh:4c5146a49dd346295e3ef41303884ac28cd655705f4300ceafc23e2577f3b1ce", - "zh:592caabc8444d7df3cdf61cd62381fbaed854747e04af593f09c181699cca8c2", - "zh:a754c9f54745d614817acdb63a791315c79f1fdc7a0867c8d6f505e066de1b55", - "zh:c72857459146b74dbf270ad5a45e12f7a0f50254fcd200e6833f3d137709ae34", - "zh:e1e11e2373843dfe8cfaa32148981c7f3b04382baa3a901cb70a2db062ef0983", - "zh:e1f297229c4c6fed3bcfba576da4e72c42bb93b578794920ab2d8698b3a8cb40", + "h1:8FLr1ZsOobsrFAiiwGQzuqzVjBj5mYYWkMN0Y09Qjq8=", + "h1:DGPyFrIRVTigrTsVQV6r9qoiCX7OcGfieDjnk+TcXB8=", + "h1:G2D9+1cuLBLMkeOHUXHrV1WQdddkogA5q3anL0Xr2TI=", + "h1:S9knFeidlUtcNO+mhizWU9ibt6L0mSz5dgLV6TIA0m4=", + "h1:dTcCD7AJBI1mAKZODNtwtdPwfF7kqd641O+NNUS1WHw=", + "h1:dU734u/u9hk/RHDDj39246xwiczNx3esgivjOudMOs0=", + "h1:hWvkPXL2I2rd7EqvaVPisY471myaTrNiFopIjExFXfQ=", + "h1:kdykym1DNqAwgPjz4qtiNiQ4gHDrctsWvIvNDQTnQrU=", + "h1:oOYYQJYDlh7UoQx7t7y2DUsM8puXMBOJ+CWd6JaYCro=", + "h1:s/EZB00Y4Mct8G43Vp/X1BpDNGq9j7AbIPBj4icIv0A=", + "h1:v1WgDN2R+XUky0itOG0bf6E+m+w+d3Mh8tZVP/XBKnQ=", + "zh:2528b47d20d378283478feafdf16aade01d56d42c3283d7c904fd7a108f150f0", + "zh:36ef5e5b960375a166434f5836b5b957d760c34edfa256133c575e865ff4ee3c", + "zh:5fb97ca9465379dc5b965e407c5ccaa6c41fc1984214497fbf5b2bb49a585297", + "zh:78d2adcf6623f170aab3956d26d115032fecea11db4f62ee9ee76b67389546f3", + "zh:832bb0a957d4d1e664391186791af1cea14e0af878ea12d1b0ce5bb0a5dc98ef", + "zh:8c1eee42fd21b64596b72b4808595b6b1e07c3c614990e22b347c35a42360fed", + "zh:8fcb3165c29944d4465ce9db93daf2b9c816223bf6fcbd95818814525a706038", + "zh:931d05f9ba329942e6888873022e31c458048a8c2a3e42a6d1952337d2f9b240", + "zh:b78472cd5750b6d2d363c735a5e8d2a7bb98d0979ab7e42b8c5f9d17a2e5bbb6", + "zh:d203df11df368d2316894c481d34be2de9e54d1f90cec0056ef5154d06a9edc7", "zh:f569b65999264a9416862bca5cd2a6177d94ccb0424f3a4ef424428912b9cb3c", + "zh:fecb0db6ab81777a0f48d315838f911753e9c5d66e22eebd491abd83c49fde2c", ] } diff --git a/terraform/infrastructure/iam/gcp/main.tf b/terraform/infrastructure/iam/gcp/main.tf index 857d5e27d..f85c92b62 100644 --- a/terraform/infrastructure/iam/gcp/main.tf +++ b/terraform/infrastructure/iam/gcp/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { google = { source = "hashicorp/google" - version = "6.27.0" + version = "6.28.0" } } } diff --git a/terraform/infrastructure/openstack/.terraform.lock.hcl b/terraform/infrastructure/openstack/.terraform.lock.hcl index 4658d030f..3e97fb6a6 100644 --- a/terraform/infrastructure/openstack/.terraform.lock.hcl +++ b/terraform/infrastructure/openstack/.terraform.lock.hcl @@ -26,38 +26,38 @@ provider "registry.terraform.io/hashicorp/random" { } provider "registry.terraform.io/stackitcloud/stackit" { - version = "0.46.0" - constraints = "0.46.0" + version = "0.47.0" + constraints = "0.47.0" hashes = [ - "h1:+bxcRYeeaqfqA5tajnUmAGHBsqDXeCfiHQGUT96nCCQ=", - "h1:2u0eIL6cD3uM+vTzM/BS0n9a89Gne5+BwWPRmGZPaDg=", - "h1:3tAzzZzGxkknOMqxF5E4DT6iSImcGeyKMew6ta0HzCM=", - "h1:7aT4q+GBGZPoa/E7WIUzwK+sT8rMI0xXKNEksMVfpkE=", - "h1:94eLzxfEVmaphHr0xHuao4TjbtFr2N+Bkf7OPiYGzW8=", - "h1:O2xv+6bwYHmvD9aeGRrwasRN0xy1mxIdHcyooZc++bU=", - "h1:Oh44iq7mxuRHh4IvX9Iv89aX/I8exYwg4FsAr/d9k2I=", - "h1:cgHbUfZLC+ozyJUgWhJ8v+loK96KulaZynDl9kdq+Jc=", - "h1:iSTzCeqxnUoOsk3xkhzJZPRRQG/2m+pqnDJ37ck9yTI=", - "h1:pKVkvkc2RfqH+5DHIkaHJ6ptH799hk9rkpyy3YkEij8=", - "h1:sdvX6ILKxuqGgXtzh7rWehWlYVMVXubZiSyq/M6b81U=", - "h1:w/9s1lf7LNIVGVcvrhCeK+Rt6WZZ71nUBnFdR0D9Hnw=", - "h1:yFY6owhNOk+kRrzxtdLPPydpiUoeEg0cU0Q18Hd2mkQ=", - "h1:ytE0BwooPYX5t2CjyRK0CaOYf0NZhzYovJGE3UrzVfI=", + "h1:+cKr3G+gi+pFKEpFVlvOaXwnWKBzTV9Bi0UixBzww9k=", + "h1:+fHFWKJf+knfbisZiTgtiZi9CRGzC/Lu5HGkmcMP7XE=", + "h1:/XS26Hk7bbkzTR2uG+dh/QQKhauFyRpuzpmHyY8zrjA=", + "h1:1KPUd8qbrdP+eY86R/vbDJJDPkYKLUIUPeqHjbn3xo8=", + "h1:8/nJFwePAR79D9Kj3YoGXgpRvo604LzgWpvncP6knuE=", + "h1:ByfFdkFHqzplso2+AbW3N83t4Ebgc7S1IB4t9ti4i5I=", + "h1:FXs2h1UoxkzTDPrQIeFxzmDgf1Ir1xK1GoLN2RvugdU=", + "h1:HjELOengNwXYM3K/Rk4oDTymmuC3t/I1I/0mZ7oG9sk=", + "h1:PQNUx7ZwQapOquh0bLa7r4HCqjcS84vTXe5bnliHKPY=", + "h1:iSicwqvx7QvGdM91OV1Sb8XkC22LzTOgIaduAWL0Ofo=", + "h1:icStaeN3GR75mpJrYiAgF6qgni79dUX2t5Pt+b6brmk=", + "h1:lCDze2ajl55ROR0XFw6jPN8Z+AASWJdOJ9sExo9XaTg=", + "h1:nnppmOpaX8vKk5vd0nDS5Q0IE4+giurP+F7+ti0nJco=", + "h1:yGwWjdraf5Gr77lreJs2eld8P0RegnJ7cEmEXCQs9tY=", "zh:0dde99e7b343fa01f8eefc378171fb8621bedb20f59157d6cc8e3d46c738105f", - "zh:0deee0b8913c092d3b7682e21365f21de6d43972d1509830e2978d0f9f13b29f", - "zh:0e98445d409c9cc0bcccb80b7930a0f9ace995fc4e9f75f89e146256e25e7f2e", - "zh:1cc702f09152b3fdf3f2caa57fe19f59946de4ae64face23ed5c164a2bf0acc2", - "zh:21d5e94441c9d389788f141d1429032b15818456b8227faf40c4b4c7da8f878b", - "zh:5a81353b084c22462e83a2726d09f8c9e25193597abbd72677ded34641996cbf", - "zh:6409dfa4c8c2fea4806f7ebd3390a3d3d01d4b95eced75cfcc620c375a85520f", - "zh:ae0628b1fc333d329dba50cafb0a7db4895ac3427b9477a6cf37bc63fb7511b0", - "zh:c3b3006cbdd1b2439886d66503477f844d3f054210205a25adf6d5d4f9be1959", - "zh:dd51ef1844ae92338bf27db8003bad411aa02940dd9c6b173d901e3d9cdec1be", - "zh:eacef57781e450b29a231e25e48cd9560bf520f21b6728a073b5b28a4b4aaf07", - "zh:fa129a73911d38ba38b34df16b8ffc120c3e647ea7980482dea68ca0f4c3e4ba", - "zh:fa872477a4c2a2b6443c2fa2ba77d55c26dab9c2ad1fd20e824d290c95dac066", - "zh:ff31892da886980cc35a2a4d36e6759573b8ab0871f6b5cd6e0a572320477d5d", - "zh:ff45fae4dbb81730aeb894e1a52e3e6695ecafb428d264bfc82da9b57ecd5319", + "zh:1813b57d07c5301fe7acd2ac74c032eb8437d1855fc6d076e2d198dcb53f093f", + "zh:1d6cfef67c5ee1f571db294219aa3aa1fa8159716b61a816b019fed150e8ce8c", + "zh:2051158758a179d82c8c448903ac5429173d3c2740b0e020b1c79bc8c4da8348", + "zh:5a06b5a877388eeb217e1683714fd219ab80a61322ea990989e548fd5fb61d19", + "zh:6b9d367d52bf5c67d65e4ab5db59b74cebf6aab960d4dd674b848ab07260d376", + "zh:7ca6862cda9986b6879b8f7b1991fd6e704dc1e34290f8b40e3a6d1688e78c32", + "zh:83ac62268fdd7e139774f1f379df07d55a19a14a3eedd516b0b1877087adedb4", + "zh:87ffe33e157394650310979bd041294781b84b202d2fffbe49246cf886b77279", + "zh:9e18e0b5cd905d4a6dd8fd176a450a92eaf618866394ef7463a8b8643666ca7c", + "zh:a3cca93d8406359d4eab1ac8e02ad2ddf2cabfe3753e44f710244a87ab2d7826", + "zh:a6ae6ca5372bd36dfd30bdfbfbf6906f8d40875fdc502867d8bea9536540b0f9", + "zh:a7a5697016e5d76c5a1fccdd5d9b6bd26593cdcbd972c6386f11476f4adc6fed", + "zh:b51086beac083f989098df8eab0930f4146e829e23afa7f28ba3360ad8369dc4", + "zh:d11ccef52dd3fbb07379169f29c2ea9c099d92b840152ba7e935108196f3e86b", ] } diff --git a/terraform/infrastructure/openstack/main.tf b/terraform/infrastructure/openstack/main.tf index bc0e2100c..aae314990 100644 --- a/terraform/infrastructure/openstack/main.tf +++ b/terraform/infrastructure/openstack/main.tf @@ -7,7 +7,7 @@ terraform { stackit = { source = "stackitcloud/stackit" - version = "0.46.0" + version = "0.47.0" } random = { diff --git a/terraform/infrastructure/openstack/modules/stackit_loadbalancer/main.tf b/terraform/infrastructure/openstack/modules/stackit_loadbalancer/main.tf index 745481339..49e638b27 100644 --- a/terraform/infrastructure/openstack/modules/stackit_loadbalancer/main.tf +++ b/terraform/infrastructure/openstack/modules/stackit_loadbalancer/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { stackit = { source = "stackitcloud/stackit" - version = "0.46.0" + version = "0.47.0" } } } From b52639d2b86580aec58f53f984b219aabbdfdafd Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 2 Apr 2025 13:31:22 +0200 Subject: [PATCH 190/311] deps: update bufbuild/buf to v1.51.0 (#3729) * deps: update bufbuild/buf to v1.51.0 * deps: tidy all modules --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: edgelessci --- bazel/toolchains/ci_deps.bzl | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/bazel/toolchains/ci_deps.bzl b/bazel/toolchains/ci_deps.bzl index a2479439b..cbf9e8838 100644 --- a/bazel/toolchains/ci_deps.bzl +++ b/bazel/toolchains/ci_deps.bzl @@ -270,44 +270,44 @@ def _buf_deps(): strip_prefix = "buf/bin", build_file_content = """exports_files(["buf"], visibility = ["//visibility:public"])""", urls = [ - "https://cdn.confidential.cloud/constellation/cas/sha256/96f701c56484899c85dd0fe3895fad431226e20312f2bd5af2e33a87d260d4ce", - "https://github.com/bufbuild/buf/releases/download/v1.50.1/buf-Linux-x86_64.tar.gz", + "https://cdn.confidential.cloud/constellation/cas/sha256/3cf4aa139b289e09f76f3b506d0f48b5d27bd4a58b510af6b976e6a0fb4a0953", + "https://github.com/bufbuild/buf/releases/download/v1.51.0/buf-Linux-x86_64.tar.gz", ], type = "tar.gz", - sha256 = "96f701c56484899c85dd0fe3895fad431226e20312f2bd5af2e33a87d260d4ce", + sha256 = "3cf4aa139b289e09f76f3b506d0f48b5d27bd4a58b510af6b976e6a0fb4a0953", ) http_archive( name = "com_github_bufbuild_buf_linux_arm64", strip_prefix = "buf/bin", build_file_content = """exports_files(["buf"], visibility = ["//visibility:public"])""", urls = [ - "https://cdn.confidential.cloud/constellation/cas/sha256/92acc02c6d9126a8ed7e0d18793b6e11289c483a550d21e7b7a4271264925bca", - "https://github.com/bufbuild/buf/releases/download/v1.50.1/buf-Linux-aarch64.tar.gz", + "https://cdn.confidential.cloud/constellation/cas/sha256/853f91722ab06e8e7d140b9693f6f6eafd4812636f193ab5dbae99ee1612f1b6", + "https://github.com/bufbuild/buf/releases/download/v1.51.0/buf-Linux-aarch64.tar.gz", ], type = "tar.gz", - sha256 = "92acc02c6d9126a8ed7e0d18793b6e11289c483a550d21e7b7a4271264925bca", + sha256 = "853f91722ab06e8e7d140b9693f6f6eafd4812636f193ab5dbae99ee1612f1b6", ) http_archive( name = "com_github_bufbuild_buf_darwin_amd64", strip_prefix = "buf/bin", build_file_content = """exports_files(["buf"], visibility = ["//visibility:public"])""", urls = [ - "https://cdn.confidential.cloud/constellation/cas/sha256/28acc2c4c6b5698367f39d1de90b2259ce0d2d48ee4a17b636d69aa9498138d2", - "https://github.com/bufbuild/buf/releases/download/v1.50.1/buf-Darwin-x86_64.tar.gz", + "https://cdn.confidential.cloud/constellation/cas/sha256/ed5873b81f80d2aa95f4534b51c3a9e0d382d807902706b4aee7a61be5516461", + "https://github.com/bufbuild/buf/releases/download/v1.51.0/buf-Darwin-x86_64.tar.gz", ], type = "tar.gz", - sha256 = "28acc2c4c6b5698367f39d1de90b2259ce0d2d48ee4a17b636d69aa9498138d2", + sha256 = "ed5873b81f80d2aa95f4534b51c3a9e0d382d807902706b4aee7a61be5516461", ) http_archive( name = "com_github_bufbuild_buf_darwin_arm64", strip_prefix = "buf/bin", build_file_content = """exports_files(["buf"], visibility = ["//visibility:public"])""", urls = [ - "https://cdn.confidential.cloud/constellation/cas/sha256/06df191fc2f0df70686a97370f2988a22a1d7cd69fb789d296bbd884b5280d29", - "https://github.com/bufbuild/buf/releases/download/v1.50.1/buf-Darwin-arm64.tar.gz", + "https://cdn.confidential.cloud/constellation/cas/sha256/fc34097ddc95533b0d8065bdf9cf368c63f040ea9d96ffda4ab2805122fddbce", + "https://github.com/bufbuild/buf/releases/download/v1.51.0/buf-Darwin-arm64.tar.gz", ], type = "tar.gz", - sha256 = "06df191fc2f0df70686a97370f2988a22a1d7cd69fb789d296bbd884b5280d29", + sha256 = "fc34097ddc95533b0d8065bdf9cf368c63f040ea9d96ffda4ab2805122fddbce", ) def _talos_docgen_deps(): From 88ca92509cdd45b911420db9dea781b122e4c698 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 2 Apr 2025 16:20:47 +0200 Subject: [PATCH 191/311] deps: update Go dependencies (#3735) * deps: update Go dependencies * deps: rollback go-tpm-tools * deps: tidy all modules --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Moritz Sanft <58110325+msanft@users.noreply.github.com> Co-authored-by: edgelessci --- bootstrapper/initproto/init.pb.go | 119 +++---- debugd/service/debugd.pb.go | 173 +++------ disk-mapper/recoverproto/recover.pb.go | 34 +- go.mod | 192 +++++----- go.sum | 333 +++++++++--------- hack/tools/go.mod | 20 +- hack/tools/go.sum | 44 +-- internal/versions/components/components.pb.go | 29 +- joinservice/joinproto/join.pb.go | 117 ++---- keyservice/keyserviceproto/keyservice.pb.go | 36 +- upgrade-agent/upgradeproto/upgrade.pb.go | 44 +-- verify/verifyproto/verify.pb.go | 33 +- 12 files changed, 477 insertions(+), 697 deletions(-) diff --git a/bootstrapper/initproto/init.pb.go b/bootstrapper/initproto/init.pb.go index c4d38f621..5ce2213ae 100644 --- a/bootstrapper/initproto/init.pb.go +++ b/bootstrapper/initproto/init.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.36.5 +// protoc-gen-go v1.36.6 // protoc v5.29.1 // source: bootstrapper/initproto/init.proto @@ -458,83 +458,46 @@ func (x *KubernetesComponent) GetExtract() bool { var File_bootstrapper_initproto_init_proto protoreflect.FileDescriptor -var file_bootstrapper_initproto_init_proto_rawDesc = string([]byte{ - 0x0a, 0x21, 0x62, 0x6f, 0x6f, 0x74, 0x73, 0x74, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2f, 0x69, - 0x6e, 0x69, 0x74, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x69, 0x6e, 0x69, 0x74, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x12, 0x04, 0x69, 0x6e, 0x69, 0x74, 0x1a, 0x2d, 0x69, 0x6e, 0x74, 0x65, 0x72, - 0x6e, 0x61, 0x6c, 0x2f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x63, 0x6f, 0x6d, - 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, - 0x74, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xd0, 0x03, 0x0a, 0x0b, 0x49, 0x6e, 0x69, - 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x17, 0x0a, 0x07, 0x6b, 0x6d, 0x73, 0x5f, - 0x75, 0x72, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6b, 0x6d, 0x73, 0x55, 0x72, - 0x69, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x5f, 0x75, 0x72, 0x69, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x55, - 0x72, 0x69, 0x12, 0x29, 0x0a, 0x10, 0x6d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x6d, 0x65, 0x6e, - 0x74, 0x5f, 0x73, 0x61, 0x6c, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0f, 0x6d, 0x65, - 0x61, 0x73, 0x75, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x61, 0x6c, 0x74, 0x12, 0x2d, 0x0a, - 0x12, 0x6b, 0x75, 0x62, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x65, 0x73, 0x5f, 0x76, 0x65, 0x72, 0x73, - 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x6b, 0x75, 0x62, 0x65, 0x72, - 0x6e, 0x65, 0x74, 0x65, 0x73, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x29, 0x0a, 0x10, - 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x6d, 0x6f, 0x64, 0x65, - 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0f, 0x63, 0x6f, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, - 0x6e, 0x63, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x4a, 0x0a, 0x15, 0x6b, 0x75, 0x62, 0x65, 0x72, - 0x6e, 0x65, 0x74, 0x65, 0x73, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x73, - 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, - 0x6e, 0x74, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x52, 0x14, 0x6b, - 0x75, 0x62, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x65, 0x73, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, - 0x6e, 0x74, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x69, 0x6e, 0x69, 0x74, 0x5f, 0x73, 0x65, 0x63, 0x72, - 0x65, 0x74, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x69, 0x6e, 0x69, 0x74, 0x53, 0x65, - 0x63, 0x72, 0x65, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, - 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6c, 0x75, 0x73, - 0x74, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2e, 0x0a, 0x13, 0x61, 0x70, 0x69, 0x73, 0x65, - 0x72, 0x76, 0x65, 0x72, 0x5f, 0x63, 0x65, 0x72, 0x74, 0x5f, 0x73, 0x61, 0x6e, 0x73, 0x18, 0x0a, - 0x20, 0x03, 0x28, 0x09, 0x52, 0x11, 0x61, 0x70, 0x69, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x43, - 0x65, 0x72, 0x74, 0x53, 0x61, 0x6e, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x5f, 0x63, 0x69, 0x64, 0x72, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x73, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x43, 0x69, 0x64, 0x72, 0x4a, 0x04, 0x08, 0x04, 0x10, 0x05, - 0x52, 0x19, 0x63, 0x6c, 0x6f, 0x75, 0x64, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x5f, - 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x5f, 0x75, 0x72, 0x69, 0x22, 0xc1, 0x01, 0x0a, 0x0c, - 0x49, 0x6e, 0x69, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3e, 0x0a, 0x0c, - 0x69, 0x6e, 0x69, 0x74, 0x5f, 0x73, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x69, 0x6e, 0x69, 0x74, 0x2e, 0x49, 0x6e, 0x69, 0x74, 0x53, 0x75, - 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, - 0x0b, 0x69, 0x6e, 0x69, 0x74, 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x12, 0x3e, 0x0a, 0x0c, - 0x69, 0x6e, 0x69, 0x74, 0x5f, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x69, 0x6e, 0x69, 0x74, 0x2e, 0x49, 0x6e, 0x69, 0x74, 0x46, 0x61, - 0x69, 0x6c, 0x75, 0x72, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x00, 0x52, - 0x0b, 0x69, 0x6e, 0x69, 0x74, 0x46, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x12, 0x29, 0x0a, 0x03, - 0x6c, 0x6f, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x69, 0x6e, 0x69, 0x74, - 0x2e, 0x4c, 0x6f, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x54, 0x79, 0x70, 0x65, - 0x48, 0x00, 0x52, 0x03, 0x6c, 0x6f, 0x67, 0x42, 0x06, 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x22, - 0x6f, 0x0a, 0x13, 0x49, 0x6e, 0x69, 0x74, 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x6b, 0x75, 0x62, 0x65, 0x63, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0a, 0x6b, 0x75, 0x62, 0x65, - 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x12, 0x19, 0x0a, 0x08, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x5f, - 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x49, - 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x09, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x49, 0x64, - 0x22, 0x2b, 0x0a, 0x13, 0x49, 0x6e, 0x69, 0x74, 0x46, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x23, 0x0a, - 0x0f, 0x4c, 0x6f, 0x67, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x54, 0x79, 0x70, 0x65, - 0x12, 0x10, 0x0a, 0x03, 0x6c, 0x6f, 0x67, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x03, 0x6c, - 0x6f, 0x67, 0x22, 0x78, 0x0a, 0x13, 0x4b, 0x75, 0x62, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x65, 0x73, - 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x68, - 0x61, 0x73, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x68, 0x61, 0x73, 0x68, 0x12, - 0x21, 0x0a, 0x0c, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x50, 0x61, - 0x74, 0x68, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x18, 0x04, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x07, 0x65, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x32, 0x36, 0x0a, 0x03, - 0x41, 0x50, 0x49, 0x12, 0x2f, 0x0a, 0x04, 0x49, 0x6e, 0x69, 0x74, 0x12, 0x11, 0x2e, 0x69, 0x6e, - 0x69, 0x74, 0x2e, 0x49, 0x6e, 0x69, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x12, - 0x2e, 0x69, 0x6e, 0x69, 0x74, 0x2e, 0x49, 0x6e, 0x69, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x30, 0x01, 0x42, 0x40, 0x5a, 0x3e, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, - 0x6f, 0x6d, 0x2f, 0x65, 0x64, 0x67, 0x65, 0x6c, 0x65, 0x73, 0x73, 0x73, 0x79, 0x73, 0x2f, 0x63, - 0x6f, 0x6e, 0x73, 0x74, 0x65, 0x6c, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x76, 0x32, 0x2f, - 0x62, 0x6f, 0x6f, 0x74, 0x73, 0x74, 0x72, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2f, 0x69, 0x6e, 0x69, - 0x74, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -}) +const file_bootstrapper_initproto_init_proto_rawDesc = "" + + "\n" + + "!bootstrapper/initproto/init.proto\x12\x04init\x1a-internal/versions/components/components.proto\"\xd0\x03\n" + + "\vInitRequest\x12\x17\n" + + "\akms_uri\x18\x01 \x01(\tR\x06kmsUri\x12\x1f\n" + + "\vstorage_uri\x18\x02 \x01(\tR\n" + + "storageUri\x12)\n" + + "\x10measurement_salt\x18\x03 \x01(\fR\x0fmeasurementSalt\x12-\n" + + "\x12kubernetes_version\x18\x05 \x01(\tR\x11kubernetesVersion\x12)\n" + + "\x10conformance_mode\x18\x06 \x01(\bR\x0fconformanceMode\x12J\n" + + "\x15kubernetes_components\x18\a \x03(\v2\x15.components.ComponentR\x14kubernetesComponents\x12\x1f\n" + + "\vinit_secret\x18\b \x01(\fR\n" + + "initSecret\x12!\n" + + "\fcluster_name\x18\t \x01(\tR\vclusterName\x12.\n" + + "\x13apiserver_cert_sans\x18\n" + + " \x03(\tR\x11apiserverCertSans\x12!\n" + + "\fservice_cidr\x18\v \x01(\tR\vserviceCidrJ\x04\b\x04\x10\x05R\x19cloud_service_account_uri\"\xc1\x01\n" + + "\fInitResponse\x12>\n" + + "\finit_success\x18\x01 \x01(\v2\x19.init.InitSuccessResponseH\x00R\vinitSuccess\x12>\n" + + "\finit_failure\x18\x02 \x01(\v2\x19.init.InitFailureResponseH\x00R\vinitFailure\x12)\n" + + "\x03log\x18\x03 \x01(\v2\x15.init.LogResponseTypeH\x00R\x03logB\x06\n" + + "\x04kind\"o\n" + + "\x13InitSuccessResponse\x12\x1e\n" + + "\n" + + "kubeconfig\x18\x01 \x01(\fR\n" + + "kubeconfig\x12\x19\n" + + "\bowner_id\x18\x02 \x01(\fR\aownerId\x12\x1d\n" + + "\n" + + "cluster_id\x18\x03 \x01(\fR\tclusterId\"+\n" + + "\x13InitFailureResponse\x12\x14\n" + + "\x05error\x18\x01 \x01(\tR\x05error\"#\n" + + "\x0fLogResponseType\x12\x10\n" + + "\x03log\x18\x01 \x01(\fR\x03log\"x\n" + + "\x13KubernetesComponent\x12\x10\n" + + "\x03url\x18\x01 \x01(\tR\x03url\x12\x12\n" + + "\x04hash\x18\x02 \x01(\tR\x04hash\x12!\n" + + "\finstall_path\x18\x03 \x01(\tR\vinstallPath\x12\x18\n" + + "\aextract\x18\x04 \x01(\bR\aextract26\n" + + "\x03API\x12/\n" + + "\x04Init\x12\x11.init.InitRequest\x1a\x12.init.InitResponse0\x01B@Z>github.com/edgelesssys/constellation/v2/bootstrapper/initprotob\x06proto3" var ( file_bootstrapper_initproto_init_proto_rawDescOnce sync.Once diff --git a/debugd/service/debugd.pb.go b/debugd/service/debugd.pb.go index be0812d4b..8414c895f 100644 --- a/debugd/service/debugd.pb.go +++ b/debugd/service/debugd.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.36.5 +// protoc-gen-go v1.36.6 // protoc v5.29.1 // source: debugd/service/debugd.proto @@ -816,121 +816,62 @@ func (x *UploadSystemdServiceUnitsResponse) GetStatus() UploadSystemdServiceUnit var File_debugd_service_debugd_proto protoreflect.FileDescriptor -var file_debugd_service_debugd_proto_rawDesc = string([]byte{ - 0x0a, 0x1b, 0x64, 0x65, 0x62, 0x75, 0x67, 0x64, 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, - 0x2f, 0x64, 0x65, 0x62, 0x75, 0x67, 0x64, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x06, 0x64, - 0x65, 0x62, 0x75, 0x67, 0x64, 0x22, 0x32, 0x0a, 0x0e, 0x53, 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6f, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x20, 0x0a, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x18, - 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x64, 0x65, 0x62, 0x75, 0x67, 0x64, 0x2e, 0x49, - 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x22, 0x40, 0x0a, 0x0f, 0x53, 0x65, 0x74, - 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2d, 0x0a, 0x06, - 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x15, 0x2e, 0x64, - 0x65, 0x62, 0x75, 0x67, 0x64, 0x2e, 0x53, 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x53, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x10, 0x0a, 0x0e, 0x47, - 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x33, 0x0a, - 0x0f, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x20, 0x0a, 0x04, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x0c, - 0x2e, 0x64, 0x65, 0x62, 0x75, 0x67, 0x64, 0x2e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x04, 0x69, 0x6e, - 0x66, 0x6f, 0x22, 0x2e, 0x0a, 0x04, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, - 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x22, 0x16, 0x0a, 0x14, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x46, 0x69, - 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x7a, 0x0a, 0x13, 0x46, 0x69, - 0x6c, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x12, 0x34, 0x0a, 0x06, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x1a, 0x2e, 0x64, 0x65, 0x62, 0x75, 0x67, 0x64, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x54, - 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x48, 0x00, 0x52, - 0x06, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x25, 0x0a, 0x05, 0x63, 0x68, 0x75, 0x6e, 0x6b, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x64, 0x65, 0x62, 0x75, 0x67, 0x64, 0x2e, - 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x48, 0x00, 0x52, 0x05, 0x63, 0x68, 0x75, 0x6e, 0x6b, 0x42, 0x06, - 0x0a, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x22, 0x97, 0x01, 0x0a, 0x12, 0x46, 0x69, 0x6c, 0x65, 0x54, - 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x1e, 0x0a, - 0x0a, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x50, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0a, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x50, 0x61, 0x74, 0x68, 0x12, 0x12, 0x0a, - 0x04, 0x6d, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x04, 0x6d, 0x6f, 0x64, - 0x65, 0x12, 0x35, 0x0a, 0x13, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x53, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x55, 0x6e, 0x69, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, - 0x52, 0x13, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x55, 0x6e, 0x69, 0x74, 0x88, 0x01, 0x01, 0x42, 0x16, 0x0a, 0x14, 0x5f, 0x6f, 0x76, 0x65, - 0x72, 0x72, 0x69, 0x64, 0x65, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x55, 0x6e, 0x69, 0x74, - 0x22, 0x35, 0x0a, 0x05, 0x43, 0x68, 0x75, 0x6e, 0x6b, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, - 0x74, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, - 0x65, 0x6e, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6c, 0x61, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x08, 0x52, 0x04, 0x6c, 0x61, 0x73, 0x74, 0x22, 0x5e, 0x0a, 0x13, 0x55, 0x70, 0x6c, 0x6f, 0x61, - 0x64, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x31, - 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x19, - 0x2e, 0x64, 0x65, 0x62, 0x75, 0x67, 0x64, 0x2e, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x46, 0x69, - 0x6c, 0x65, 0x73, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, - 0x73, 0x12, 0x14, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x22, 0x3d, 0x0a, 0x0b, 0x53, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x55, 0x6e, 0x69, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x6f, - 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x6f, - 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x4d, 0x0a, 0x20, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, - 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x55, 0x6e, - 0x69, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x29, 0x0a, 0x05, 0x75, 0x6e, - 0x69, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x64, 0x65, 0x62, 0x75, - 0x67, 0x64, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x55, 0x6e, 0x69, 0x74, 0x52, 0x05, - 0x75, 0x6e, 0x69, 0x74, 0x73, 0x22, 0x64, 0x0a, 0x21, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x53, - 0x79, 0x73, 0x74, 0x65, 0x6d, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x55, 0x6e, 0x69, - 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3f, 0x0a, 0x06, 0x73, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x27, 0x2e, 0x64, 0x65, 0x62, - 0x75, 0x67, 0x64, 0x2e, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, - 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x55, 0x6e, 0x69, 0x74, 0x73, 0x53, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x2a, 0x3f, 0x0a, 0x0d, 0x53, - 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x14, 0x0a, 0x10, - 0x53, 0x45, 0x54, 0x5f, 0x49, 0x4e, 0x46, 0x4f, 0x5f, 0x53, 0x55, 0x43, 0x43, 0x45, 0x53, 0x53, - 0x10, 0x00, 0x12, 0x18, 0x0a, 0x14, 0x53, 0x45, 0x54, 0x5f, 0x49, 0x4e, 0x46, 0x4f, 0x5f, 0x41, - 0x4c, 0x52, 0x45, 0x41, 0x44, 0x59, 0x5f, 0x53, 0x45, 0x54, 0x10, 0x01, 0x2a, 0xb1, 0x01, 0x0a, - 0x11, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x53, 0x74, 0x61, 0x74, - 0x75, 0x73, 0x12, 0x18, 0x0a, 0x14, 0x55, 0x50, 0x4c, 0x4f, 0x41, 0x44, 0x5f, 0x46, 0x49, 0x4c, - 0x45, 0x53, 0x5f, 0x53, 0x55, 0x43, 0x43, 0x45, 0x53, 0x53, 0x10, 0x00, 0x12, 0x1e, 0x0a, 0x1a, - 0x55, 0x50, 0x4c, 0x4f, 0x41, 0x44, 0x5f, 0x46, 0x49, 0x4c, 0x45, 0x53, 0x5f, 0x55, 0x50, 0x4c, - 0x4f, 0x41, 0x44, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0x01, 0x12, 0x20, 0x0a, 0x1c, - 0x55, 0x50, 0x4c, 0x4f, 0x41, 0x44, 0x5f, 0x46, 0x49, 0x4c, 0x45, 0x53, 0x5f, 0x41, 0x4c, 0x52, - 0x45, 0x41, 0x44, 0x59, 0x5f, 0x53, 0x54, 0x41, 0x52, 0x54, 0x45, 0x44, 0x10, 0x02, 0x12, 0x21, - 0x0a, 0x1d, 0x55, 0x50, 0x4c, 0x4f, 0x41, 0x44, 0x5f, 0x46, 0x49, 0x4c, 0x45, 0x53, 0x5f, 0x41, - 0x4c, 0x52, 0x45, 0x41, 0x44, 0x59, 0x5f, 0x46, 0x49, 0x4e, 0x49, 0x53, 0x48, 0x45, 0x44, 0x10, - 0x03, 0x12, 0x1d, 0x0a, 0x19, 0x55, 0x50, 0x4c, 0x4f, 0x41, 0x44, 0x5f, 0x46, 0x49, 0x4c, 0x45, - 0x53, 0x5f, 0x53, 0x54, 0x41, 0x52, 0x54, 0x5f, 0x46, 0x41, 0x49, 0x4c, 0x45, 0x44, 0x10, 0x04, - 0x2a, 0x75, 0x0a, 0x1f, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, - 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x55, 0x6e, 0x69, 0x74, 0x73, 0x53, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x12, 0x28, 0x0a, 0x24, 0x55, 0x50, 0x4c, 0x4f, 0x41, 0x44, 0x5f, 0x53, 0x59, - 0x53, 0x54, 0x45, 0x4d, 0x44, 0x5f, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x55, 0x4e, - 0x49, 0x54, 0x53, 0x5f, 0x53, 0x55, 0x43, 0x43, 0x45, 0x53, 0x53, 0x10, 0x00, 0x12, 0x28, 0x0a, - 0x24, 0x55, 0x50, 0x4c, 0x4f, 0x41, 0x44, 0x5f, 0x53, 0x59, 0x53, 0x54, 0x45, 0x4d, 0x44, 0x5f, - 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x5f, 0x55, 0x4e, 0x49, 0x54, 0x53, 0x5f, 0x46, 0x41, - 0x49, 0x4c, 0x55, 0x52, 0x45, 0x10, 0x01, 0x32, 0x94, 0x03, 0x0a, 0x06, 0x44, 0x65, 0x62, 0x75, - 0x67, 0x64, 0x12, 0x3c, 0x0a, 0x07, 0x53, 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x16, 0x2e, - 0x64, 0x65, 0x62, 0x75, 0x67, 0x64, 0x2e, 0x53, 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, 0x64, 0x65, 0x62, 0x75, 0x67, 0x64, 0x2e, 0x53, - 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, - 0x12, 0x3c, 0x0a, 0x07, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x16, 0x2e, 0x64, 0x65, - 0x62, 0x75, 0x67, 0x64, 0x2e, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, 0x64, 0x65, 0x62, 0x75, 0x67, 0x64, 0x2e, 0x47, 0x65, 0x74, - 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x12, 0x4b, - 0x0a, 0x0b, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x1b, 0x2e, - 0x64, 0x65, 0x62, 0x75, 0x67, 0x64, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, - 0x66, 0x65, 0x72, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x1b, 0x2e, 0x64, 0x65, 0x62, - 0x75, 0x67, 0x64, 0x2e, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x28, 0x01, 0x12, 0x4e, 0x0a, 0x0d, 0x44, - 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x1c, 0x2e, 0x64, - 0x65, 0x62, 0x75, 0x67, 0x64, 0x2e, 0x44, 0x6f, 0x77, 0x6e, 0x6c, 0x6f, 0x61, 0x64, 0x46, 0x69, - 0x6c, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1b, 0x2e, 0x64, 0x65, 0x62, - 0x75, 0x67, 0x64, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, 0x65, 0x72, - 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x00, 0x30, 0x01, 0x12, 0x71, 0x0a, 0x18, 0x55, - 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x53, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x55, 0x6e, 0x69, 0x74, 0x73, 0x12, 0x28, 0x2e, 0x64, 0x65, 0x62, 0x75, 0x67, 0x64, - 0x2e, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x64, 0x53, 0x65, - 0x72, 0x76, 0x69, 0x63, 0x65, 0x55, 0x6e, 0x69, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x29, 0x2e, 0x64, 0x65, 0x62, 0x75, 0x67, 0x64, 0x2e, 0x55, 0x70, 0x6c, 0x6f, 0x61, - 0x64, 0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x55, - 0x6e, 0x69, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x38, - 0x5a, 0x36, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x65, 0x64, 0x67, - 0x65, 0x6c, 0x65, 0x73, 0x73, 0x73, 0x79, 0x73, 0x2f, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x65, 0x6c, - 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x76, 0x32, 0x2f, 0x64, 0x65, 0x62, 0x75, 0x67, 0x64, - 0x2f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -}) +const file_debugd_service_debugd_proto_rawDesc = "" + + "\n" + + "\x1bdebugd/service/debugd.proto\x12\x06debugd\"2\n" + + "\x0eSetInfoRequest\x12 \n" + + "\x04info\x18\x01 \x03(\v2\f.debugd.InfoR\x04info\"@\n" + + "\x0fSetInfoResponse\x12-\n" + + "\x06status\x18\x01 \x01(\x0e2\x15.debugd.SetInfoStatusR\x06status\"\x10\n" + + "\x0eGetInfoRequest\"3\n" + + "\x0fGetInfoResponse\x12 \n" + + "\x04info\x18\x01 \x03(\v2\f.debugd.InfoR\x04info\".\n" + + "\x04Info\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + + "\x05value\x18\x02 \x01(\tR\x05value\"\x16\n" + + "\x14DownloadFilesRequest\"z\n" + + "\x13FileTransferMessage\x124\n" + + "\x06header\x18\x01 \x01(\v2\x1a.debugd.FileTransferHeaderH\x00R\x06header\x12%\n" + + "\x05chunk\x18\x02 \x01(\v2\r.debugd.ChunkH\x00R\x05chunkB\x06\n" + + "\x04kind\"\x97\x01\n" + + "\x12FileTransferHeader\x12\x1e\n" + + "\n" + + "targetPath\x18\x01 \x01(\tR\n" + + "targetPath\x12\x12\n" + + "\x04mode\x18\x03 \x01(\rR\x04mode\x125\n" + + "\x13overrideServiceUnit\x18\x04 \x01(\tH\x00R\x13overrideServiceUnit\x88\x01\x01B\x16\n" + + "\x14_overrideServiceUnit\"5\n" + + "\x05Chunk\x12\x18\n" + + "\acontent\x18\x01 \x01(\fR\acontent\x12\x12\n" + + "\x04last\x18\x02 \x01(\bR\x04last\"^\n" + + "\x13UploadFilesResponse\x121\n" + + "\x06status\x18\x01 \x01(\x0e2\x19.debugd.UploadFilesStatusR\x06status\x12\x14\n" + + "\x05error\x18\x02 \x01(\tR\x05error\"=\n" + + "\vServiceUnit\x12\x12\n" + + "\x04name\x18\x01 \x01(\tR\x04name\x12\x1a\n" + + "\bcontents\x18\x02 \x01(\tR\bcontents\"M\n" + + " UploadSystemdServiceUnitsRequest\x12)\n" + + "\x05units\x18\x01 \x03(\v2\x13.debugd.ServiceUnitR\x05units\"d\n" + + "!UploadSystemdServiceUnitsResponse\x12?\n" + + "\x06status\x18\x01 \x01(\x0e2'.debugd.UploadSystemdServiceUnitsStatusR\x06status*?\n" + + "\rSetInfoStatus\x12\x14\n" + + "\x10SET_INFO_SUCCESS\x10\x00\x12\x18\n" + + "\x14SET_INFO_ALREADY_SET\x10\x01*\xb1\x01\n" + + "\x11UploadFilesStatus\x12\x18\n" + + "\x14UPLOAD_FILES_SUCCESS\x10\x00\x12\x1e\n" + + "\x1aUPLOAD_FILES_UPLOAD_FAILED\x10\x01\x12 \n" + + "\x1cUPLOAD_FILES_ALREADY_STARTED\x10\x02\x12!\n" + + "\x1dUPLOAD_FILES_ALREADY_FINISHED\x10\x03\x12\x1d\n" + + "\x19UPLOAD_FILES_START_FAILED\x10\x04*u\n" + + "\x1fUploadSystemdServiceUnitsStatus\x12(\n" + + "$UPLOAD_SYSTEMD_SERVICE_UNITS_SUCCESS\x10\x00\x12(\n" + + "$UPLOAD_SYSTEMD_SERVICE_UNITS_FAILURE\x10\x012\x94\x03\n" + + "\x06Debugd\x12<\n" + + "\aSetInfo\x12\x16.debugd.SetInfoRequest\x1a\x17.debugd.SetInfoResponse\"\x00\x12<\n" + + "\aGetInfo\x12\x16.debugd.GetInfoRequest\x1a\x17.debugd.GetInfoResponse\"\x00\x12K\n" + + "\vUploadFiles\x12\x1b.debugd.FileTransferMessage\x1a\x1b.debugd.UploadFilesResponse\"\x00(\x01\x12N\n" + + "\rDownloadFiles\x12\x1c.debugd.DownloadFilesRequest\x1a\x1b.debugd.FileTransferMessage\"\x000\x01\x12q\n" + + "\x18UploadSystemServiceUnits\x12(.debugd.UploadSystemdServiceUnitsRequest\x1a).debugd.UploadSystemdServiceUnitsResponse\"\x00B8Z6github.com/edgelesssys/constellation/v2/debugd/serviceb\x06proto3" var ( file_debugd_service_debugd_proto_rawDescOnce sync.Once diff --git a/disk-mapper/recoverproto/recover.pb.go b/disk-mapper/recoverproto/recover.pb.go index 09918724e..cf62209b3 100644 --- a/disk-mapper/recoverproto/recover.pb.go +++ b/disk-mapper/recoverproto/recover.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.36.5 +// protoc-gen-go v1.36.6 // protoc v5.29.1 // source: disk-mapper/recoverproto/recover.proto @@ -115,28 +115,16 @@ func (*RecoverResponse) Descriptor() ([]byte, []int) { var File_disk_mapper_recoverproto_recover_proto protoreflect.FileDescriptor -var file_disk_mapper_recoverproto_recover_proto_rawDesc = string([]byte{ - 0x0a, 0x26, 0x64, 0x69, 0x73, 0x6b, 0x2d, 0x6d, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2f, 0x72, 0x65, - 0x63, 0x6f, 0x76, 0x65, 0x72, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x72, 0x65, 0x63, 0x6f, 0x76, - 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0c, 0x72, 0x65, 0x63, 0x6f, 0x76, 0x65, - 0x72, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x4a, 0x0a, 0x0e, 0x52, 0x65, 0x63, 0x6f, 0x76, 0x65, - 0x72, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x17, 0x0a, 0x07, 0x6b, 0x6d, 0x73, 0x5f, - 0x75, 0x72, 0x69, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6b, 0x6d, 0x73, 0x55, 0x72, - 0x69, 0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x5f, 0x75, 0x72, 0x69, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x73, 0x74, 0x6f, 0x72, 0x61, 0x67, 0x65, 0x55, - 0x72, 0x69, 0x22, 0x11, 0x0a, 0x0f, 0x52, 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x32, 0x4f, 0x0a, 0x03, 0x41, 0x50, 0x49, 0x12, 0x48, 0x0a, 0x07, - 0x52, 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x12, 0x1c, 0x2e, 0x72, 0x65, 0x63, 0x6f, 0x76, 0x65, - 0x72, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x52, 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x1a, 0x1d, 0x2e, 0x72, 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x52, 0x65, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x00, 0x42, 0x42, 0x5a, 0x40, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, - 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x65, 0x64, 0x67, 0x65, 0x6c, 0x65, 0x73, 0x73, 0x73, 0x79, 0x73, - 0x2f, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x65, 0x6c, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x76, - 0x32, 0x2f, 0x64, 0x69, 0x73, 0x6b, 0x2d, 0x6d, 0x61, 0x70, 0x70, 0x65, 0x72, 0x2f, 0x72, 0x65, - 0x63, 0x6f, 0x76, 0x65, 0x72, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x33, -}) +const file_disk_mapper_recoverproto_recover_proto_rawDesc = "" + + "\n" + + "&disk-mapper/recoverproto/recover.proto\x12\frecoverproto\"J\n" + + "\x0eRecoverMessage\x12\x17\n" + + "\akms_uri\x18\x03 \x01(\tR\x06kmsUri\x12\x1f\n" + + "\vstorage_uri\x18\x04 \x01(\tR\n" + + "storageUri\"\x11\n" + + "\x0fRecoverResponse2O\n" + + "\x03API\x12H\n" + + "\aRecover\x12\x1c.recoverproto.RecoverMessage\x1a\x1d.recoverproto.RecoverResponse\"\x00BBZ@github.com/edgelesssys/constellation/v2/disk-mapper/recoverprotob\x06proto3" var ( file_disk_mapper_recoverproto_recover_proto_rawDescOnce sync.Once diff --git a/go.mod b/go.mod index 1ba8d1d82..79af1de63 100644 --- a/go.mod +++ b/go.mod @@ -11,72 +11,72 @@ replace github.com/martinjungblut/go-cryptsetup => github.com/daniel-weisse/go-c // See this issue: https://github.com/kubernetes/kubernetes/issues/79384 // And this README: https://github.com/kubernetes/kubernetes/blob/master/staging/README.md replace ( - k8s.io/cloud-provider => k8s.io/cloud-provider v0.32.2 - k8s.io/controller-manager => k8s.io/controller-manager v0.32.2 - k8s.io/cri-client => k8s.io/cri-client v0.32.2 - k8s.io/csi-translation-lib => k8s.io/csi-translation-lib v0.32.2 - k8s.io/dynamic-resource-allocation => k8s.io/dynamic-resource-allocation v0.32.2 - k8s.io/endpointslice => k8s.io/endpointslice v0.32.2 - k8s.io/externaljwt => k8s.io/externaljwt v0.32.2 - k8s.io/kube-aggregator => k8s.io/kube-aggregator v0.32.2 - k8s.io/kube-controller-manager => k8s.io/kube-controller-manager v0.32.2 - k8s.io/kube-proxy => k8s.io/kube-proxy v0.32.2 - k8s.io/kube-scheduler => k8s.io/kube-scheduler v0.32.2 - k8s.io/legacy-cloud-providers => k8s.io/legacy-cloud-providers v0.30.10 - k8s.io/pod-security-admission => k8s.io/pod-security-admission v0.32.2 - k8s.io/sample-apiserver => k8s.io/sample-apiserver v0.32.2 + k8s.io/cloud-provider => k8s.io/cloud-provider v0.32.3 + k8s.io/controller-manager => k8s.io/controller-manager v0.32.3 + k8s.io/cri-client => k8s.io/cri-client v0.32.3 + k8s.io/csi-translation-lib => k8s.io/csi-translation-lib v0.32.3 + k8s.io/dynamic-resource-allocation => k8s.io/dynamic-resource-allocation v0.32.3 + k8s.io/endpointslice => k8s.io/endpointslice v0.32.3 + k8s.io/externaljwt => k8s.io/externaljwt v0.32.3 + k8s.io/kube-aggregator => k8s.io/kube-aggregator v0.32.3 + k8s.io/kube-controller-manager => k8s.io/kube-controller-manager v0.32.3 + k8s.io/kube-proxy => k8s.io/kube-proxy v0.32.3 + k8s.io/kube-scheduler => k8s.io/kube-scheduler v0.32.3 + k8s.io/legacy-cloud-providers => k8s.io/legacy-cloud-providers v0.30.11 + k8s.io/pod-security-admission => k8s.io/pod-security-admission v0.32.3 + k8s.io/sample-apiserver => k8s.io/sample-apiserver v0.32.3 ) require ( - cloud.google.com/go/compute v1.34.0 + cloud.google.com/go/compute v1.36.0 cloud.google.com/go/compute/metadata v0.6.0 - cloud.google.com/go/kms v1.21.0 - cloud.google.com/go/secretmanager v1.14.5 - cloud.google.com/go/storage v1.50.0 + cloud.google.com/go/kms v1.21.1 + cloud.google.com/go/secretmanager v1.14.6 + cloud.google.com/go/storage v1.51.0 dario.cat/mergo v1.0.1 github.com/Azure/azure-sdk-for-go v68.0.0+incompatible - github.com/Azure/azure-sdk-for-go/sdk/azcore v1.17.0 + github.com/Azure/azure-sdk-for-go/sdk/azcore v1.17.1 github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.8.2 - github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v6 v6.3.0 + github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v6 v6.4.0 github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/network/armnetwork/v6 v6.2.0 github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/azsecrets v1.3.1 github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.6.0 - github.com/BurntSushi/toml v1.4.0 + github.com/BurntSushi/toml v1.5.0 github.com/aws/aws-sdk-go v1.55.6 github.com/aws/aws-sdk-go-v2 v1.36.3 - github.com/aws/aws-sdk-go-v2/config v1.29.9 - github.com/aws/aws-sdk-go-v2/credentials v1.17.62 + github.com/aws/aws-sdk-go-v2/config v1.29.12 + github.com/aws/aws-sdk-go-v2/credentials v1.17.65 github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.30 - github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.65 + github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.70 github.com/aws/aws-sdk-go-v2/service/autoscaling v1.52.1 - github.com/aws/aws-sdk-go-v2/service/cloudfront v1.45.1 - github.com/aws/aws-sdk-go-v2/service/ec2 v1.207.1 - github.com/aws/aws-sdk-go-v2/service/elasticloadbalancingv2 v1.44.1 + github.com/aws/aws-sdk-go-v2/service/cloudfront v1.45.2 + github.com/aws/aws-sdk-go-v2/service/ec2 v1.211.0 + github.com/aws/aws-sdk-go-v2/service/elasticloadbalancingv2 v1.45.0 github.com/aws/aws-sdk-go-v2/service/resourcegroupstaggingapi v1.26.1 - github.com/aws/aws-sdk-go-v2/service/s3 v1.78.1 - github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.35.1 + github.com/aws/aws-sdk-go-v2/service/s3 v1.79.0 + github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.35.2 github.com/aws/smithy-go v1.22.3 - github.com/bazelbuild/buildtools v0.0.0-20250204160707-ad48c76ab9b5 + github.com/bazelbuild/buildtools v0.0.0-20250326091033-f79c8eafbddd github.com/bazelbuild/rules_go v0.53.0 github.com/coreos/go-systemd/v22 v22.5.0 - github.com/docker/docker v28.0.1+incompatible + github.com/docker/docker v28.0.4+incompatible github.com/edgelesssys/go-azguestattestation v0.0.0-20250212085035-c38c01af80ba github.com/edgelesssys/go-tdx-qpl v0.0.0-20250129202750-607ac61e2377 github.com/foxboron/go-uefi v0.0.0-20250207204325-69fb7dba244f github.com/fsnotify/fsnotify v1.8.0 github.com/go-playground/locales v0.14.1 github.com/go-playground/universal-translator v0.18.1 - github.com/go-playground/validator/v10 v10.25.0 + github.com/go-playground/validator/v10 v10.26.0 github.com/golang-jwt/jwt/v5 v5.2.2 github.com/google/go-sev-guest v0.13.0 - github.com/google/go-tdx-guest v0.3.2-0.20241009005452-097ee70d0843 + github.com/google/go-tdx-guest v0.3.2-0.20250318080245-df394d562502 github.com/google/go-tpm v0.9.3 github.com/google/go-tpm-tools v0.4.4 github.com/google/uuid v1.6.0 github.com/googleapis/gax-go/v2 v2.14.1 github.com/gophercloud/gophercloud/v2 v2.6.0 github.com/gophercloud/utils/v2 v2.0.0-20250212084022-725b94822eeb - github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.3.0 + github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.3.1 github.com/hashicorp/go-kms-wrapping/v2 v2.0.18 github.com/hashicorp/go-kms-wrapping/wrappers/awskms/v2 v2.0.11 github.com/hashicorp/go-kms-wrapping/wrappers/azurekeyvault/v2 v2.0.14 @@ -90,66 +90,66 @@ require ( github.com/hashicorp/terraform-plugin-framework-validators v0.17.0 github.com/hashicorp/terraform-plugin-go v0.26.0 github.com/hashicorp/terraform-plugin-log v0.9.0 - github.com/hashicorp/terraform-plugin-testing v1.11.0 + github.com/hashicorp/terraform-plugin-testing v1.12.0 github.com/hexops/gotextdiff v1.0.3 github.com/martinjungblut/go-cryptsetup v0.0.0-20220520180014-fd0874fd07a6 github.com/mattn/go-isatty v0.0.20 github.com/mitchellh/go-homedir v1.1.0 - github.com/onsi/ginkgo/v2 v2.22.2 - github.com/onsi/gomega v1.36.2 + github.com/onsi/ginkgo/v2 v2.23.3 + github.com/onsi/gomega v1.36.3 github.com/pkg/errors v0.9.1 github.com/regclient/regclient v0.8.2 github.com/rogpeppe/go-internal v1.14.1 github.com/samber/slog-multi v1.4.0 github.com/schollz/progressbar/v3 v3.18.0 github.com/secure-systems-lab/go-securesystemslib v0.9.0 - github.com/siderolabs/talos/pkg/machinery v1.9.4 + github.com/siderolabs/talos/pkg/machinery v1.9.5 github.com/sigstore/rekor v1.3.9 - github.com/sigstore/sigstore v1.9.0 - github.com/spf13/afero v1.12.0 + github.com/sigstore/sigstore v1.9.1 + github.com/spf13/afero v1.14.0 github.com/spf13/cobra v1.9.1 github.com/spf13/pflag v1.0.6 github.com/stretchr/testify v1.10.0 github.com/tink-crypto/tink-go/v2 v2.3.0 github.com/vincent-petithory/dataurl v1.0.0 - go.etcd.io/etcd/api/v3 v3.5.18 - go.etcd.io/etcd/client/pkg/v3 v3.5.18 - go.etcd.io/etcd/client/v3 v3.5.18 + go.etcd.io/etcd/api/v3 v3.5.21 + go.etcd.io/etcd/client/pkg/v3 v3.5.21 + go.etcd.io/etcd/client/v3 v3.5.21 go.uber.org/goleak v1.3.0 - golang.org/x/crypto v0.35.0 - golang.org/x/exp v0.0.0-20250128182459-e0ece0dbea4c - golang.org/x/mod v0.23.0 - golang.org/x/sys v0.30.0 - golang.org/x/text v0.22.0 - golang.org/x/tools v0.30.0 - google.golang.org/api v0.223.0 - google.golang.org/grpc v1.71.0 - google.golang.org/protobuf v1.36.5 + golang.org/x/crypto v0.36.0 + golang.org/x/exp v0.0.0-20250305212735-054e65f0b394 + golang.org/x/mod v0.24.0 + golang.org/x/sys v0.31.0 + golang.org/x/text v0.23.0 + golang.org/x/tools v0.31.0 + google.golang.org/api v0.228.0 + google.golang.org/grpc v1.71.1 + google.golang.org/protobuf v1.36.6 gopkg.in/yaml.v3 v3.0.1 - helm.sh/helm/v3 v3.17.1 - k8s.io/api v0.32.2 - k8s.io/apiextensions-apiserver v0.32.2 - k8s.io/apimachinery v0.32.2 - k8s.io/apiserver v0.32.2 - k8s.io/client-go v0.32.2 - k8s.io/cluster-bootstrap v0.32.2 - k8s.io/kubelet v0.32.2 - k8s.io/kubernetes v1.32.2 - k8s.io/mount-utils v0.32.2 - k8s.io/utils v0.0.0-20241210054802-24370beab758 + helm.sh/helm/v3 v3.17.2 + k8s.io/api v0.32.3 + k8s.io/apiextensions-apiserver v0.32.3 + k8s.io/apimachinery v0.32.3 + k8s.io/apiserver v0.32.3 + k8s.io/client-go v0.32.3 + k8s.io/cluster-bootstrap v0.32.3 + k8s.io/kubelet v0.32.3 + k8s.io/kubernetes v1.32.3 + k8s.io/mount-utils v0.32.3 + k8s.io/utils v0.0.0-20250321185631-1f6e0b77f77e libvirt.org/go/libvirt v1.11001.0 - sigs.k8s.io/controller-runtime v0.20.2 + sigs.k8s.io/controller-runtime v0.20.4 sigs.k8s.io/yaml v1.4.0 ) require ( - cel.dev/expr v0.19.1 // indirect - cloud.google.com/go v0.118.2 // indirect + cel.dev/expr v0.19.2 // indirect + cloud.google.com/go v0.120.0 // indirect cloud.google.com/go/auth v0.15.0 // indirect - cloud.google.com/go/auth/oauth2adapt v0.2.7 // indirect - cloud.google.com/go/iam v1.4.0 // indirect - cloud.google.com/go/longrunning v0.6.4 // indirect - cloud.google.com/go/monitoring v1.23.0 // indirect + cloud.google.com/go/auth/oauth2adapt v0.2.8 // indirect + cloud.google.com/go/iam v1.4.1 // indirect + cloud.google.com/go/longrunning v0.6.5 // indirect + cloud.google.com/go/monitoring v1.24.0 // indirect github.com/AdaLogics/go-fuzz-headers v0.0.0-20230811130428-ced1acdcaa24 // indirect github.com/Azure/azure-sdk-for-go/sdk/internal v1.10.0 // indirect github.com/Azure/azure-sdk-for-go/sdk/keyvault/azkeys v0.10.0 // indirect @@ -164,10 +164,10 @@ require ( github.com/Azure/go-autorest/autorest/validation v0.3.1 // indirect github.com/Azure/go-autorest/logger v0.2.1 // indirect github.com/Azure/go-autorest/tracing v0.6.0 // indirect - github.com/AzureAD/microsoft-authentication-library-for-go v1.3.3 // indirect + github.com/AzureAD/microsoft-authentication-library-for-go v1.4.1 // indirect github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.25.0 // indirect - github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.49.0 // indirect - github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.49.0 // indirect + github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.51.0 // indirect + github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.51.0 // indirect github.com/MakeNowJust/heredoc v1.0.0 // indirect github.com/Masterminds/goutils v1.1.1 // indirect github.com/Masterminds/semver/v3 v3.3.0 // indirect @@ -184,11 +184,11 @@ require ( github.com/aws/aws-sdk-go-v2/internal/ini v1.8.3 // indirect github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.34 // indirect github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.3 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.6.2 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.7.0 // indirect github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.15 // indirect github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.15 // indirect - github.com/aws/aws-sdk-go-v2/service/sso v1.25.1 // indirect - github.com/aws/aws-sdk-go-v2/service/ssooidc v1.29.1 // indirect + github.com/aws/aws-sdk-go-v2/service/sso v1.25.2 // indirect + github.com/aws/aws-sdk-go-v2/service/ssooidc v1.30.0 // indirect github.com/aws/aws-sdk-go-v2/service/sts v1.33.17 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/blang/semver v3.5.1+incompatible // indirect @@ -196,7 +196,7 @@ require ( github.com/cespare/xxhash/v2 v2.3.0 // indirect github.com/chai2010/gettext-go v1.0.2 // indirect github.com/cloudflare/circl v1.5.0 // indirect - github.com/cncf/xds/go v0.0.0-20241223141626-cff3c89139a3 // indirect + github.com/cncf/xds/go v0.0.0-20250121191232-2f005788dc42 // indirect github.com/containerd/containerd v1.7.27 // indirect github.com/containerd/errdefs v0.3.0 // indirect github.com/containerd/log v0.1.0 // indirect @@ -264,7 +264,7 @@ require ( github.com/google/pprof v0.0.0-20241210010833-40e02aabc2ad // indirect github.com/google/s2a-go v0.1.9 // indirect github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 // indirect - github.com/googleapis/enterprise-certificate-proxy v0.3.4 // indirect + github.com/googleapis/enterprise-certificate-proxy v0.3.6 // indirect github.com/gorilla/mux v1.8.1 // indirect github.com/gorilla/websocket v1.5.0 // indirect github.com/gosuri/uitable v0.0.4 // indirect @@ -272,7 +272,7 @@ require ( github.com/hashicorp/errwrap v1.1.0 // indirect github.com/hashicorp/go-checkpoint v0.5.0 // indirect github.com/hashicorp/go-cleanhttp v0.5.2 // indirect - github.com/hashicorp/go-cty v1.4.1-0.20200414143053-d3edf31b6320 // indirect + github.com/hashicorp/go-cty v1.5.0 // indirect github.com/hashicorp/go-hclog v1.6.3 // indirect github.com/hashicorp/go-multierror v1.1.1 // indirect github.com/hashicorp/go-plugin v1.6.2 // indirect @@ -283,7 +283,7 @@ require ( github.com/hashicorp/go-sockaddr v1.0.6 // indirect github.com/hashicorp/go-uuid v1.0.3 // indirect github.com/hashicorp/logutils v1.0.0 // indirect - github.com/hashicorp/terraform-plugin-sdk/v2 v2.35.0 // indirect + github.com/hashicorp/terraform-plugin-sdk/v2 v2.36.1 // indirect github.com/hashicorp/terraform-registry-address v0.2.4 // indirect github.com/hashicorp/terraform-svchost v0.1.1 // indirect github.com/hashicorp/yamux v0.1.1 // indirect @@ -360,36 +360,36 @@ require ( github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 // indirect github.com/xeipuuv/gojsonschema v1.2.0 // indirect github.com/xlab/treeprint v1.2.0 // indirect - github.com/zclconf/go-cty v1.16.1 // indirect + github.com/zclconf/go-cty v1.16.2 // indirect go.mongodb.org/mongo-driver v1.14.0 // indirect go.opentelemetry.io/auto/sdk v1.1.0 // indirect go.opentelemetry.io/contrib/detectors/gcp v1.34.0 // indirect go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.59.0 // indirect go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.59.0 // indirect - go.opentelemetry.io/otel v1.34.0 // indirect - go.opentelemetry.io/otel/metric v1.34.0 // indirect - go.opentelemetry.io/otel/sdk v1.34.0 // indirect + go.opentelemetry.io/otel v1.35.0 // indirect + go.opentelemetry.io/otel/metric v1.35.0 // indirect + go.opentelemetry.io/otel/sdk v1.35.0 // indirect go.opentelemetry.io/otel/sdk/metric v1.34.0 // indirect - go.opentelemetry.io/otel/trace v1.34.0 // indirect + go.opentelemetry.io/otel/trace v1.35.0 // indirect go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.27.0 // indirect - golang.org/x/net v0.35.0 // indirect - golang.org/x/oauth2 v0.27.0 // indirect - golang.org/x/sync v0.11.0 // indirect - golang.org/x/term v0.29.0 // indirect - golang.org/x/time v0.10.0 // indirect + golang.org/x/net v0.38.0 // indirect + golang.org/x/oauth2 v0.28.0 // indirect + golang.org/x/sync v0.12.0 // indirect + golang.org/x/term v0.30.0 // indirect + golang.org/x/time v0.11.0 // indirect gomodules.xyz/jsonpatch/v2 v2.4.0 // indirect google.golang.org/appengine v1.6.8 // indirect - google.golang.org/genproto v0.0.0-20250122153221-138b5a5a4fd4 // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20250219182151-9fdb1cabc7b2 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20250219182151-9fdb1cabc7b2 // indirect + google.golang.org/genproto v0.0.0-20250303144028-a0af3efb3deb // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20250313205543-e70fdf4c4cb4 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20250313205543-e70fdf4c4cb4 // indirect gopkg.in/evanphx/json-patch.v4 v4.12.0 // indirect gopkg.in/inf.v0 v0.9.1 // indirect - k8s.io/cli-runtime v0.32.1 // indirect - k8s.io/component-base v0.32.2 // indirect + k8s.io/cli-runtime v0.32.2 // indirect + k8s.io/component-base v0.32.3 // indirect k8s.io/klog/v2 v2.130.1 // indirect k8s.io/kube-openapi v0.0.0-20241105132330-32ad38e42d3f // indirect - k8s.io/kubectl v0.32.1 // indirect + k8s.io/kubectl v0.32.2 // indirect oras.land/oras-go v1.2.5 // indirect sigs.k8s.io/json v0.0.0-20241010143419-9aa6b5e7a4b3 // indirect sigs.k8s.io/kustomize/api v0.18.0 // indirect diff --git a/go.sum b/go.sum index 21446a256..3cbd415f0 100644 --- a/go.sum +++ b/go.sum @@ -1,29 +1,29 @@ -cel.dev/expr v0.19.1 h1:NciYrtDRIR0lNCnH1LFJegdjspNx9fI59O7TWcua/W4= -cel.dev/expr v0.19.1/go.mod h1:MrpN08Q+lEBs+bGYdLxxHkZoUSsCp0nSKTs0nTymJgw= -cloud.google.com/go v0.118.2 h1:bKXO7RXMFDkniAAvvuMrAPtQ/VHrs9e7J5UT3yrGdTY= -cloud.google.com/go v0.118.2/go.mod h1:CFO4UPEPi8oV21xoezZCrd3d81K4fFkDTEJu4R8K+9M= +cel.dev/expr v0.19.2 h1:V354PbqIXr9IQdwy4SYA4xa0HXaWq1BUPAGzugBY5V4= +cel.dev/expr v0.19.2/go.mod h1:MrpN08Q+lEBs+bGYdLxxHkZoUSsCp0nSKTs0nTymJgw= +cloud.google.com/go v0.120.0 h1:wc6bgG9DHyKqF5/vQvX1CiZrtHnxJjBlKUyF9nP6meA= +cloud.google.com/go v0.120.0/go.mod h1:/beW32s8/pGRuj4IILWQNd4uuebeT4dkOhKmkfit64Q= cloud.google.com/go/auth v0.15.0 h1:Ly0u4aA5vG/fsSsxu98qCQBemXtAtJf+95z9HK+cxps= cloud.google.com/go/auth v0.15.0/go.mod h1:WJDGqZ1o9E9wKIL+IwStfyn/+s59zl4Bi+1KQNVXLZ8= -cloud.google.com/go/auth/oauth2adapt v0.2.7 h1:/Lc7xODdqcEw8IrZ9SvwnlLX6j9FHQM74z6cBk9Rw6M= -cloud.google.com/go/auth/oauth2adapt v0.2.7/go.mod h1:NTbTTzfvPl1Y3V1nPpOgl2w6d/FjO7NNUQaWSox6ZMc= -cloud.google.com/go/compute v1.34.0 h1:+k/kmViu4TEi97NGaxAATYtpYBviOWJySPZ+ekA95kk= -cloud.google.com/go/compute v1.34.0/go.mod h1:zWZwtLwZQyonEvIQBuIa0WvraMYK69J5eDCOw9VZU4g= +cloud.google.com/go/auth/oauth2adapt v0.2.8 h1:keo8NaayQZ6wimpNSmW5OPc283g65QNIiLpZnkHRbnc= +cloud.google.com/go/auth/oauth2adapt v0.2.8/go.mod h1:XQ9y31RkqZCcwJWNSx2Xvric3RrU88hAYYbjDWYDL+c= +cloud.google.com/go/compute v1.36.0 h1:QzLrJRxytIGE8OJWzmMweIdiu2pIlRVq9kSi7+xnDkU= +cloud.google.com/go/compute v1.36.0/go.mod h1:+GZuz5prSWFLquViP55zcjRrOm7vRpIllx2MaYpzuiI= cloud.google.com/go/compute/metadata v0.6.0 h1:A6hENjEsCDtC1k8byVsgwvVcioamEHvZ4j01OwKxG9I= cloud.google.com/go/compute/metadata v0.6.0/go.mod h1:FjyFAW1MW0C203CEOMDTu3Dk1FlqW3Rga40jzHL4hfg= -cloud.google.com/go/iam v1.4.0 h1:ZNfy/TYfn2uh/ukvhp783WhnbVluqf/tzOaqVUPlIPA= -cloud.google.com/go/iam v1.4.0/go.mod h1:gMBgqPaERlriaOV0CUl//XUzDhSfXevn4OEUbg6VRs4= -cloud.google.com/go/kms v1.21.0 h1:x3EeWKuYwdlo2HLse/876ZrKjk2L5r7Uexfm8+p6mSI= -cloud.google.com/go/kms v1.21.0/go.mod h1:zoFXMhVVK7lQ3JC9xmhHMoQhnjEDZFoLAr5YMwzBLtk= +cloud.google.com/go/iam v1.4.1 h1:cFC25Nv+u5BkTR/BT1tXdoF2daiVbZ1RLx2eqfQ9RMM= +cloud.google.com/go/iam v1.4.1/go.mod h1:2vUEJpUG3Q9p2UdsyksaKpDzlwOrnMzS30isdReIcLM= +cloud.google.com/go/kms v1.21.1 h1:r1Auo+jlfJSf8B7mUnVw5K0fI7jWyoUy65bV53VjKyk= +cloud.google.com/go/kms v1.21.1/go.mod h1:s0wCyByc9LjTdCjG88toVs70U9W+cc6RKFc8zAqX7nE= cloud.google.com/go/logging v1.13.0 h1:7j0HgAp0B94o1YRDqiqm26w4q1rDMH7XNRU34lJXHYc= cloud.google.com/go/logging v1.13.0/go.mod h1:36CoKh6KA/M0PbhPKMq6/qety2DCAErbhXT62TuXALA= -cloud.google.com/go/longrunning v0.6.4 h1:3tyw9rO3E2XVXzSApn1gyEEnH2K9SynNQjMlBi3uHLg= -cloud.google.com/go/longrunning v0.6.4/go.mod h1:ttZpLCe6e7EXvn9OxpBRx7kZEB0efv8yBO6YnVMfhJs= -cloud.google.com/go/monitoring v1.23.0 h1:M3nXww2gn9oZ/qWN2bZ35CjolnVHM3qnSbu6srCPgjk= -cloud.google.com/go/monitoring v1.23.0/go.mod h1:034NnlQPDzrQ64G2Gavhl0LUHZs9H3rRmhtnp7jiJgg= -cloud.google.com/go/secretmanager v1.14.5 h1:W++V0EL9iL6T2+ec24Dm++bIti0tI6Gx6sCosDBters= -cloud.google.com/go/secretmanager v1.14.5/go.mod h1:GXznZF3qqPZDGZQqETZwZqHw4R6KCaYVvcGiRBA+aqY= -cloud.google.com/go/storage v1.50.0 h1:3TbVkzTooBvnZsk7WaAQfOsNrdoM8QHusXA1cpk6QJs= -cloud.google.com/go/storage v1.50.0/go.mod h1:l7XeiD//vx5lfqE3RavfmU9yvk5Pp0Zhcv482poyafY= +cloud.google.com/go/longrunning v0.6.5 h1:sD+t8DO8j4HKW4QfouCklg7ZC1qC4uzVZt8iz3uTW+Q= +cloud.google.com/go/longrunning v0.6.5/go.mod h1:Et04XK+0TTLKa5IPYryKf5DkpwImy6TluQ1QTLwlKmY= +cloud.google.com/go/monitoring v1.24.0 h1:csSKiCJ+WVRgNkRzzz3BPoGjFhjPY23ZTcaenToJxMM= +cloud.google.com/go/monitoring v1.24.0/go.mod h1:Bd1PRK5bmQBQNnuGwHBfUamAV1ys9049oEPHnn4pcsc= +cloud.google.com/go/secretmanager v1.14.6 h1:/ooktIMSORaWk9gm3vf8+Mg+zSrUplJFKBztP993oL0= +cloud.google.com/go/secretmanager v1.14.6/go.mod h1:0OWeM3qpJ2n71MGgNfKsgjC/9LfVTcUqXFUlGxo5PzY= +cloud.google.com/go/storage v1.51.0 h1:ZVZ11zCiD7b3k+cH5lQs/qcNaoSz3U9I0jgwVzqDlCw= +cloud.google.com/go/storage v1.51.0/go.mod h1:YEJfu/Ki3i5oHC/7jyTgsGZwdQ8P9hqMqvpi5kRKGgc= cloud.google.com/go/trace v1.11.3 h1:c+I4YFjxRQjvAhRmSsmjpASUKq88chOX854ied0K/pE= cloud.google.com/go/trace v1.11.3/go.mod h1:pt7zCYiDSQjC9Y2oqCsh9jF4GStB/hmjrYLsxRR27q8= dario.cat/mergo v1.0.1 h1:Ra4+bf83h2ztPIQYNP99R6m+Y7KfnARDfID+a+vLl4s= @@ -36,8 +36,8 @@ github.com/AdamKorcz/go-fuzz-headers-1 v0.0.0-20230919221257-8b5d3ce2d11d h1:zjq github.com/AdamKorcz/go-fuzz-headers-1 v0.0.0-20230919221257-8b5d3ce2d11d/go.mod h1:XNqJ7hv2kY++g8XEHREpi+JqZo3+0l+CH2egBVN4yqM= github.com/Azure/azure-sdk-for-go v68.0.0+incompatible h1:fcYLmCpyNYRnvJbPerq7U0hS+6+I79yEDJBqVNcqUzU= github.com/Azure/azure-sdk-for-go v68.0.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= -github.com/Azure/azure-sdk-for-go/sdk/azcore v1.17.0 h1:g0EZJwz7xkXQiZAI5xi9f3WWFYBlX1CPTrR+NDToRkQ= -github.com/Azure/azure-sdk-for-go/sdk/azcore v1.17.0/go.mod h1:XCW7KnZet0Opnr7HccfUw1PLc4CjHqpcaxW8DHklNkQ= +github.com/Azure/azure-sdk-for-go/sdk/azcore v1.17.1 h1:DSDNVxqkoXJiko6x8a90zidoYqnYYa6c1MTzDKzKkTo= +github.com/Azure/azure-sdk-for-go/sdk/azcore v1.17.1/go.mod h1:zGqV2R4Cr/k8Uye5w+dgQ06WJtEcbQG/8J7BB6hnCr4= github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.8.2 h1:F0gBpfdPLGsw+nsgk6aqqkZS1jiixa5WwFe3fk/T3Ys= github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.8.2/go.mod h1:SqINnQ9lVVdRlyC8cd1lCI0SdX4n2paeABd2K8ggfnE= github.com/Azure/azure-sdk-for-go/sdk/azidentity/cache v0.3.2 h1:yz1bePFlP5Vws5+8ez6T3HWXPmwOK7Yvq8QxDBD3SKY= @@ -48,8 +48,8 @@ github.com/Azure/azure-sdk-for-go/sdk/keyvault/azkeys v0.10.0 h1:m/sWOGCREuSBqg2 github.com/Azure/azure-sdk-for-go/sdk/keyvault/azkeys v0.10.0/go.mod h1:Pu5Zksi2KrU7LPbZbNINx6fuVrUp/ffvpxdDj+i8LeE= github.com/Azure/azure-sdk-for-go/sdk/keyvault/internal v0.7.1 h1:FbH3BbSb4bvGluTesZZ+ttN/MDsnMmQP36OSnDuSXqw= github.com/Azure/azure-sdk-for-go/sdk/keyvault/internal v0.7.1/go.mod h1:9V2j0jn9jDEkCkv8w/bKTNppX/d0FVA1ud77xCIP4KA= -github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v6 v6.3.0 h1:Dc9miZr1Mhaqbb3cmJCRokkG16uk8JKkqOADf084zy4= -github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v6 v6.3.0/go.mod h1:CHo9QYhWEvrKVeXsEMJSl2bpmYYNu6aG12JsSaFBXlY= +github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v6 v6.4.0 h1:z7Mqz6l0EFH549GvHEqfjKvi+cRScxLWbaoeLm9wxVQ= +github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v6 v6.4.0/go.mod h1:v6gbfH+7DG7xH2kUNs+ZJ9tF6O3iNnR85wMtmr+F54o= github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/internal/v3 v3.1.0 h1:2qsIIvxVT+uE6yrNldntJKlLRgxGbZ85kgtz5SNBhMw= github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/internal/v3 v3.1.0/go.mod h1:AW8VEadnhw9xox+VaVd9sP7NjzOAnaZBLRH6Tq3cJ38= github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/network/armnetwork/v6 v6.2.0 h1:HYGD75g0bQ3VO/Omedm54v4LrD3B1cGImuRF3AJ5wLo= @@ -88,20 +88,20 @@ github.com/Azure/go-autorest/tracing v0.6.0 h1:TYi4+3m5t6K48TGI9AUdb+IzbnSxvnvUM github.com/Azure/go-autorest/tracing v0.6.0/go.mod h1:+vhtPC754Xsa23ID7GlGsrdKBpUA79WCAKPPZVC2DeU= github.com/AzureAD/microsoft-authentication-extensions-for-go/cache v0.1.1 h1:WJTmL004Abzc5wDB5VtZG2PJk5ndYDgVacGqfirKxjM= github.com/AzureAD/microsoft-authentication-extensions-for-go/cache v0.1.1/go.mod h1:tCcJZ0uHAmvjsVYzEFivsRTN00oz5BEsRgQHu5JZ9WE= -github.com/AzureAD/microsoft-authentication-library-for-go v1.3.3 h1:H5xDQaE3XowWfhZRUpnfC+rGZMEVoSiji+b+/HFAPU4= -github.com/AzureAD/microsoft-authentication-library-for-go v1.3.3/go.mod h1:wP83P5OoQ5p6ip3ScPr0BAq0BvuPAvacpEuSzyouqAI= -github.com/BurntSushi/toml v1.4.0 h1:kuoIxZQy2WRRk1pttg9asf+WVv6tWQuBNVmK8+nqPr0= -github.com/BurntSushi/toml v1.4.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho= +github.com/AzureAD/microsoft-authentication-library-for-go v1.4.1 h1:8BKxhZZLX/WosEeoCvWysmKUscfa9v8LIPEEU0JjE2o= +github.com/AzureAD/microsoft-authentication-library-for-go v1.4.1/go.mod h1:wP83P5OoQ5p6ip3ScPr0BAq0BvuPAvacpEuSzyouqAI= +github.com/BurntSushi/toml v1.5.0 h1:W5quZX/G/csjUnuI8SUYlsHs9M38FC7znL0lIO+DvMg= +github.com/BurntSushi/toml v1.5.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho= github.com/DATA-DOG/go-sqlmock v1.5.2 h1:OcvFkGmslmlZibjAjaHm3L//6LiuBgolP7OputlJIzU= github.com/DATA-DOG/go-sqlmock v1.5.2/go.mod h1:88MAG/4G7SMwSE3CeA0ZKzrT5CiOU3OJ+JlNzwDqpNU= github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.25.0 h1:3c8yed4lgqTt+oTQ+JNMDo+F4xprBf+O/il4ZC0nRLw= github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.25.0/go.mod h1:obipzmGjfSjam60XLwGfqUkJsfiheAl+TUjG+4yzyPM= -github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.49.0 h1:o90wcURuxekmXrtxmYWTyNla0+ZEHhud6DI1ZTxd1vI= -github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.49.0/go.mod h1:6fTWu4m3jocfUZLYF5KsZC1TUfRvEjs7lM4crme/irw= -github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/cloudmock v0.49.0 h1:jJKWl98inONJAr/IZrdFQUWcwUO95DLY1XMD1ZIut+g= -github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/cloudmock v0.49.0/go.mod h1:l2fIqmwB+FKSfvn3bAD/0i+AXAxhIZjTK2svT/mgUXs= -github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.49.0 h1:GYUJLfvd++4DMuMhCFLgLXvFwofIxh/qOwoGuS/LTew= -github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.49.0/go.mod h1:wRbFgBQUVm1YXrvWKofAEmq9HNJTDphbAaJSSX01KUI= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.51.0 h1:fYE9p3esPxA/C0rQ0AHhP0drtPXDRhaWiwg1DPqO7IU= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.51.0/go.mod h1:BnBReJLvVYx2CS/UHOgVz2BXKXD9wsQPxZug20nZhd0= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/cloudmock v0.51.0 h1:OqVGm6Ei3x5+yZmSJG1Mh2NwHvpVmZ08CB5qJhT9Nuk= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/cloudmock v0.51.0/go.mod h1:SZiPHWGOOk3bl8tkevxkoiwPgsIl6CwrWcbwjfHZpdM= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.51.0 h1:6/0iUd0xrnX7qt+mLNRwg5c0PGv8wpE8K90ryANQwMI= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.51.0/go.mod h1:otE2jQekW/PqXk1Awf5lmfokJx4uwuqcj1ab5SpGeW0= github.com/MakeNowJust/heredoc v1.0.0 h1:cXCdzVdstXyiTqTvfqk9SDHpKNjxuom+DOlyEeQ4pzQ= github.com/MakeNowJust/heredoc v1.0.0/go.mod h1:mG5amYoWBHf8vpLOuehzbGGw0EHxpZZ6lCpQ4fNJ8LE= github.com/Masterminds/goutils v1.1.1 h1:5nUrii3FMTL5diU80unEVvNevw1nH4+ZV4DSLVJLSYI= @@ -140,14 +140,14 @@ github.com/aws/aws-sdk-go-v2 v1.36.3 h1:mJoei2CxPutQVxaATCzDUjcZEjVRdpsiiXi2o38y github.com/aws/aws-sdk-go-v2 v1.36.3/go.mod h1:LLXuLpgzEbD766Z5ECcRmi8AzSwfZItDtmABVkRLGzg= github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.10 h1:zAybnyUQXIZ5mok5Jqwlf58/TFE7uvd3IAsa1aF9cXs= github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.10/go.mod h1:qqvMj6gHLR/EXWZw4ZbqlPbQUyenf4h82UQUlKc+l14= -github.com/aws/aws-sdk-go-v2/config v1.29.9 h1:Kg+fAYNaJeGXp1vmjtidss8O2uXIsXwaRqsQJKXVr+0= -github.com/aws/aws-sdk-go-v2/config v1.29.9/go.mod h1:oU3jj2O53kgOU4TXq/yipt6ryiooYjlkqqVaZk7gY/U= -github.com/aws/aws-sdk-go-v2/credentials v1.17.62 h1:fvtQY3zFzYJ9CfixuAQ96IxDrBajbBWGqjNTCa79ocU= -github.com/aws/aws-sdk-go-v2/credentials v1.17.62/go.mod h1:ElETBxIQqcxej++Cs8GyPBbgMys5DgQPTwo7cUPDKt8= +github.com/aws/aws-sdk-go-v2/config v1.29.12 h1:Y/2a+jLPrPbHpFkpAAYkVEtJmxORlXoo5k2g1fa2sUo= +github.com/aws/aws-sdk-go-v2/config v1.29.12/go.mod h1:xse1YTjmORlb/6fhkWi8qJh3cvZi4JoVNhc+NbJt4kI= +github.com/aws/aws-sdk-go-v2/credentials v1.17.65 h1:q+nV2yYegofO/SUXruT+pn4KxkxmaQ++1B/QedcKBFM= +github.com/aws/aws-sdk-go-v2/credentials v1.17.65/go.mod h1:4zyjAuGOdikpNYiSGpsGz8hLGmUzlY8pc8r9QQ/RXYQ= github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.30 h1:x793wxmUWVDhshP8WW2mlnXuFrO4cOd3HLBroh1paFw= github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.30/go.mod h1:Jpne2tDnYiFascUEs2AWHJL9Yp7A5ZVy3TNyxaAjD6M= -github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.65 h1:03zF9oWZyXvw08Say761JGpE9PbeGPd4FAmdpgDAm/I= -github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.65/go.mod h1:hBobvLKm46Igpcw6tkq9hFUmU14iAOrC5KL6EyYYckA= +github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.70 h1:pgaM86/BFt7dR0b/Jj+OU+taT34nkQlKPkjkYH1POAo= +github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.70/go.mod h1:vnoXXAU4FFW5JqLC/ZPF67IA5N0f8gah0t0aGI+N9+4= github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.34 h1:ZK5jHhnrioRkUNOc+hOgQKlUL5JeC3S6JgLxtQ+Rm0Q= github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.34/go.mod h1:p4VfIceZokChbA9FzMbRGz5OV+lekcVtHlPKEO0gSZY= github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.34 h1:SZwFm17ZUNNg5Np0ioo/gq8Mn6u9w19Mri8DnJ15Jf0= @@ -158,36 +158,36 @@ github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.34 h1:ZNTqv4nIdE/DiBfUUfXcLZ/Spcu github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.34/go.mod h1:zf7Vcd1ViW7cPqYWEHLHJkS50X0JS2IKz9Cgaj6ugrs= github.com/aws/aws-sdk-go-v2/service/autoscaling v1.52.1 h1:wj4AION3NjQvjOiI8wm+TVU8y+8EsTl7fSgJAzk9cgc= github.com/aws/aws-sdk-go-v2/service/autoscaling v1.52.1/go.mod h1:CDqMoc3KRdZJ8qziW96J35lKH01Wq3B2aihtHj2JbRs= -github.com/aws/aws-sdk-go-v2/service/cloudfront v1.45.1 h1:i5znMqubyVRwPT8MsBndfhtvjuSj4qRVAh9oVRXRPcI= -github.com/aws/aws-sdk-go-v2/service/cloudfront v1.45.1/go.mod h1:FIBJ48TS+qJb+Ne4qJ+0NeIhtPTVXItXooTeNeVI4Po= -github.com/aws/aws-sdk-go-v2/service/ec2 v1.207.1 h1:yIbrcRq0nKF75IlSiUlo4g/Qe3RzGBdDCR+WRZLf5IE= -github.com/aws/aws-sdk-go-v2/service/ec2 v1.207.1/go.mod h1:ouvGEfHbLaIlWwpDpOVWPWR+YwO0HDv3vm5tYLq8ImY= -github.com/aws/aws-sdk-go-v2/service/elasticloadbalancingv2 v1.44.1 h1:A1ddja1y637DPqZRAmVyd+rUj+m+63oQBWk0VJca2hs= -github.com/aws/aws-sdk-go-v2/service/elasticloadbalancingv2 v1.44.1/go.mod h1:xnCC3vFBfOKpU6PcsCKL2ktgBTZfOwTGxj6V8/X3IS4= +github.com/aws/aws-sdk-go-v2/service/cloudfront v1.45.2 h1:S3JpsBLyn/jqSJ6GgsbDQHubmop6fshQk/iOaOeotsc= +github.com/aws/aws-sdk-go-v2/service/cloudfront v1.45.2/go.mod h1:FIBJ48TS+qJb+Ne4qJ+0NeIhtPTVXItXooTeNeVI4Po= +github.com/aws/aws-sdk-go-v2/service/ec2 v1.211.0 h1:+5SxE8y8TIOYt8cwoqtd4WVpdpHHDWXD99DEAIjfBJ8= +github.com/aws/aws-sdk-go-v2/service/ec2 v1.211.0/go.mod h1:ouvGEfHbLaIlWwpDpOVWPWR+YwO0HDv3vm5tYLq8ImY= +github.com/aws/aws-sdk-go-v2/service/elasticloadbalancingv2 v1.45.0 h1:RB7V8wT9ypjE/YJVBgKjoydTOh4IFoqceGiKxFH70mY= +github.com/aws/aws-sdk-go-v2/service/elasticloadbalancingv2 v1.45.0/go.mod h1:xnCC3vFBfOKpU6PcsCKL2ktgBTZfOwTGxj6V8/X3IS4= github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.3 h1:eAh2A4b5IzM/lum78bZ590jy36+d/aFLgKF/4Vd1xPE= github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.3/go.mod h1:0yKJC/kb8sAnmlYa6Zs3QVYqaC8ug2AbnNChv5Ox3uA= -github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.6.2 h1:t/gZFyrijKuSU0elA5kRngP/oU3mc0I+Dvp8HwRE4c0= -github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.6.2/go.mod h1:iu6FSzgt+M2/x3Dk8zhycdIcHjEFb36IS8HVUVFoMg0= +github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.7.0 h1:lguz0bmOoGzozP9XfRJR1QIayEYo+2vP/No3OfLF0pU= +github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.7.0/go.mod h1:iu6FSzgt+M2/x3Dk8zhycdIcHjEFb36IS8HVUVFoMg0= github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.15 h1:dM9/92u2F1JbDaGooxTq18wmmFzbJRfXfVfy96/1CXM= github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.15/go.mod h1:SwFBy2vjtA0vZbjjaFtfN045boopadnoVPhu4Fv66vY= github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.15 h1:moLQUoVq91LiqT1nbvzDukyqAlCv89ZmwaHw/ZFlFZg= github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.15/go.mod h1:ZH34PJUc8ApjBIfgQCFvkWcUDBtl/WTD+uiYHjd8igA= github.com/aws/aws-sdk-go-v2/service/resourcegroupstaggingapi v1.26.1 h1:emvw6/2IQzFGPiAnFkRu10XwB4unT76YJnZNsUFmqDc= github.com/aws/aws-sdk-go-v2/service/resourcegroupstaggingapi v1.26.1/go.mod h1:cgPfPTC/V3JqwCKed7Q6d0FrgarV7ltz4Bz6S4Q+Dqk= -github.com/aws/aws-sdk-go-v2/service/s3 v1.78.1 h1:1M0gSbyP6q06gl3384wpoKPaH9G16NPqZFieEhLboSU= -github.com/aws/aws-sdk-go-v2/service/s3 v1.78.1/go.mod h1:4qzsZSzB/KiX2EzDjs9D7A8rI/WGJxZceVJIHqtJjIU= -github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.35.1 h1:+FDQfaijddP+aeT1BcT4ic8nZZc4hYUQVDL51CeCvb8= -github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.35.1/go.mod h1:yGhDiLKguA3iFJYxbrQkQiNzuy+ddxesSZYWVeeEH5Q= -github.com/aws/aws-sdk-go-v2/service/sso v1.25.1 h1:8JdC7Gr9NROg1Rusk25IcZeTO59zLxsKgE0gkh5O6h0= -github.com/aws/aws-sdk-go-v2/service/sso v1.25.1/go.mod h1:qs4a9T5EMLl/Cajiw2TcbNt2UNo/Hqlyp+GiuG4CFDI= -github.com/aws/aws-sdk-go-v2/service/ssooidc v1.29.1 h1:KwuLovgQPcdjNMfFt9OhUd9a2OwcOKhxfvF4glTzLuA= -github.com/aws/aws-sdk-go-v2/service/ssooidc v1.29.1/go.mod h1:MlYRNmYu/fGPoxBQVvBYr9nyr948aY/WLUvwBMBJubs= +github.com/aws/aws-sdk-go-v2/service/s3 v1.79.0 h1:OIw2nryEApESTYI5deCZGcq4Gvz8DBAt4tJlNyg3v5o= +github.com/aws/aws-sdk-go-v2/service/s3 v1.79.0/go.mod h1:U5SNqwhXB3Xe6F47kXvWihPl/ilGaEDe8HD/50Z9wxc= +github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.35.2 h1:vlYXbindmagyVA3RS2SPd47eKZ00GZZQcr+etTviHtc= +github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.35.2/go.mod h1:yGhDiLKguA3iFJYxbrQkQiNzuy+ddxesSZYWVeeEH5Q= +github.com/aws/aws-sdk-go-v2/service/sso v1.25.2 h1:pdgODsAhGo4dvzC3JAG5Ce0PX8kWXrTZGx+jxADD+5E= +github.com/aws/aws-sdk-go-v2/service/sso v1.25.2/go.mod h1:qs4a9T5EMLl/Cajiw2TcbNt2UNo/Hqlyp+GiuG4CFDI= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.30.0 h1:90uX0veLKcdHVfvxhkWUQSCi5VabtwMLFutYiRke4oo= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.30.0/go.mod h1:MlYRNmYu/fGPoxBQVvBYr9nyr948aY/WLUvwBMBJubs= github.com/aws/aws-sdk-go-v2/service/sts v1.33.17 h1:PZV5W8yk4OtH1JAuhV2PXwwO9v5G5Aoj+eMCn4T+1Kc= github.com/aws/aws-sdk-go-v2/service/sts v1.33.17/go.mod h1:cQnB8CUnxbMU82JvlqjKR2HBOm3fe9pWorWBza6MBJ4= github.com/aws/smithy-go v1.22.3 h1:Z//5NuZCSW6R4PhQ93hShNbyBbn8BWCmCVCt+Q8Io5k= github.com/aws/smithy-go v1.22.3/go.mod h1:t1ufH5HMublsJYulve2RKmHDC15xu1f26kHCp/HgceI= -github.com/bazelbuild/buildtools v0.0.0-20250204160707-ad48c76ab9b5 h1:ls2GvHSkr+EXNZBBGVrPewx3nc54YBHCHd6v4BOlz9g= -github.com/bazelbuild/buildtools v0.0.0-20250204160707-ad48c76ab9b5/go.mod h1:PLNUetjLa77TCCziPsz0EI8a6CUxgC+1jgmWv0H25tg= +github.com/bazelbuild/buildtools v0.0.0-20250326091033-f79c8eafbddd h1:IEd6eE1VADgrYwafzjlx+Zf0qsjGztL1pqWqW2/2Tfo= +github.com/bazelbuild/buildtools v0.0.0-20250326091033-f79c8eafbddd/go.mod h1:PLNUetjLa77TCCziPsz0EI8a6CUxgC+1jgmWv0H25tg= github.com/bazelbuild/rules_go v0.53.0 h1:u160DT+RRb+Xb2aSO4piN8xhs4aZvWz2UDXCq48F4ao= github.com/bazelbuild/rules_go v0.53.0/go.mod h1:xB1jfsYHWlnZyPPxzlOSst4q2ZAwS251Mp9Iw6TPuBc= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= @@ -218,8 +218,8 @@ github.com/chengxilo/virtualterm v1.0.4 h1:Z6IpERbRVlfB8WkOmtbHiDbBANU7cimRIof7m github.com/chengxilo/virtualterm v1.0.4/go.mod h1:DyxxBZz/x1iqJjFxTFcr6/x+jSpqN0iwWCOK1q10rlY= github.com/cloudflare/circl v1.5.0 h1:hxIWksrX6XN5a1L2TI/h53AGPhNHoUBo+TD1ms9+pys= github.com/cloudflare/circl v1.5.0/go.mod h1:uddAzsPgqdMAYatqJ0lsjX1oECcQLIlRpzZh3pJrofs= -github.com/cncf/xds/go v0.0.0-20241223141626-cff3c89139a3 h1:boJj011Hh+874zpIySeApCX4GeOjPl9qhRF3QuIZq+Q= -github.com/cncf/xds/go v0.0.0-20241223141626-cff3c89139a3/go.mod h1:W+zGtBO5Y1IgJhy4+A9GOqVhqLpfZi+vwmdNXUehLA8= +github.com/cncf/xds/go v0.0.0-20250121191232-2f005788dc42 h1:Om6kYQYDUk5wWbT0t0q6pvyM49i9XZAv9dDrkDA7gjk= +github.com/cncf/xds/go v0.0.0-20250121191232-2f005788dc42/go.mod h1:W+zGtBO5Y1IgJhy4+A9GOqVhqLpfZi+vwmdNXUehLA8= github.com/containerd/cgroups v1.1.0 h1:v8rEWFl6EoqHB+swVNjVoCJE8o3jX7e8nqBGPLaDFBM= github.com/containerd/cgroups v1.1.0/go.mod h1:6ppBcbh/NOOUU+dMKrykgaBnK9lCIBxHqJDGwsa1mIw= github.com/containerd/containerd v1.7.27 h1:yFyEyojddO3MIGVER2xJLWoCIn+Up4GaHFquP7hsFII= @@ -267,8 +267,8 @@ github.com/docker/cli v27.5.0+incompatible h1:aMphQkcGtpHixwwhAXJT1rrK/detk2JIvD github.com/docker/cli v27.5.0+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= github.com/docker/distribution v2.8.3+incompatible h1:AtKxIZ36LoNK51+Z6RpzLpddBirtxJnzDrHLEKxTAYk= github.com/docker/distribution v2.8.3+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= -github.com/docker/docker v28.0.1+incompatible h1:FCHjSRdXhNRFjlHMTv4jUNlIBbTeRjrWfeFuJp7jpo0= -github.com/docker/docker v28.0.1+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/docker v28.0.4+incompatible h1:JNNkBctYKurkw6FrHfKqY0nKIDf5nrbxjVBtS+cdcok= +github.com/docker/docker v28.0.4+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= github.com/docker/docker-credential-helpers v0.8.2 h1:bX3YxiGzFP5sOXWc3bTPEXdEaZSeVMrFgOr3T+zrFAo= github.com/docker/docker-credential-helpers v0.8.2/go.mod h1:P3ci7E3lwkZg6XiHdRKft1KckHiO9a2rNtyFbZ/ry9M= github.com/docker/go-connections v0.5.0 h1:USnMq7hx7gwdVZq1L49hLXaFtUdTADjXGp+uj1Br63c= @@ -374,8 +374,8 @@ github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/o github.com/go-playground/locales v0.14.1/go.mod h1:hxrqLVvrK65+Rwrd5Fc6F2O76J/NuW9t0sjnWqG1slY= github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY= github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY= -github.com/go-playground/validator/v10 v10.25.0 h1:5Dh7cjvzR7BRZadnsVOzPhWsrwUr0nmsZJxEAnFLNO8= -github.com/go-playground/validator/v10 v10.25.0/go.mod h1:GGzBIJMuE98Ic/kJsBXbz1x/7cByt++cQ+YOuDM5wus= +github.com/go-playground/validator/v10 v10.26.0 h1:SP05Nqhjcvz81uJaRfEV0YBSSSGMc/iMaVtFbr3Sw2k= +github.com/go-playground/validator/v10 v10.26.0/go.mod h1:I5QpIEbmr8On7W0TktmJAumgzX4CA1XNl4ZmDuVHKKo= github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= github.com/go-sql-driver/mysql v1.8.1 h1:LedoTUt/eveggdHS9qUFC1EFSa8bU2+1pZjSRpvNJ1Y= github.com/go-sql-driver/mysql v1.8.1/go.mod h1:wEBSXgmK//2ZFJyE+qWnIsVGmvmEKlqwuVSjsCm7DZg= @@ -433,8 +433,8 @@ github.com/google/go-containerregistry v0.20.3 h1:oNx7IdTI936V8CQRveCjaxOiegWwvM github.com/google/go-containerregistry v0.20.3/go.mod h1:w00pIgBRDVUDFM6bq+Qx8lwNWK+cxgCuX1vd3PIBDNI= github.com/google/go-sev-guest v0.13.0 h1:DJB6ACdykyweMU0HGOp/TQ7cjsnbV2ecbYunu2E0qy0= github.com/google/go-sev-guest v0.13.0/go.mod h1:SK9vW+uyfuzYdVN0m8BShL3OQCtXZe/JPF7ZkpD3760= -github.com/google/go-tdx-guest v0.3.2-0.20241009005452-097ee70d0843 h1:+MoPobRN9HrDhGyn6HnF5NYo4uMBKaiFqAtf/D/OB4A= -github.com/google/go-tdx-guest v0.3.2-0.20241009005452-097ee70d0843/go.mod h1:g/n8sKITIT9xRivBUbizo34DTsUm2nN2uU3A662h09g= +github.com/google/go-tdx-guest v0.3.2-0.20250318080245-df394d562502 h1:UdMIBSun24nrhzgGYuwG9LsOd0b2J4wBvo/96grtvm4= +github.com/google/go-tdx-guest v0.3.2-0.20250318080245-df394d562502/go.mod h1:uHy3VaNXNXhl0fiPxKqTxieeouqQmW6A0EfLcaeCYBk= github.com/google/go-tpm v0.9.3 h1:+yx0/anQuGzi+ssRqeD6WpXjW2L/V0dItUayO0i9sRc= github.com/google/go-tpm v0.9.3/go.mod h1:h9jEsEECg7gtLis0upRBQU+GhYVH6jMjrFxI8u6bVUY= github.com/google/go-tpm-tools v0.4.4 h1:oiQfAIkc6xTy9Fl5NKTeTJkBTlXdHsxAofmQyxBKY98= @@ -457,8 +457,8 @@ github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3 github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/googleapis/enterprise-certificate-proxy v0.3.4 h1:XYIDZApgAnrN1c855gTgghdIA6Stxb52D5RnLI1SLyw= -github.com/googleapis/enterprise-certificate-proxy v0.3.4/go.mod h1:YKe7cfqYXjKGpGvmSg28/fFvhNzinZQm8DGnaburhGA= +github.com/googleapis/enterprise-certificate-proxy v0.3.6 h1:GW/XbdyBFQ8Qe+YAmFU9uHLo7OnF5tL52HFAgMmyrf4= +github.com/googleapis/enterprise-certificate-proxy v0.3.6/go.mod h1:MkHOF77EYAE7qfSuSS9PU6g4Nt4e11cnsDUowfwewLA= github.com/googleapis/gax-go/v2 v2.14.1 h1:hb0FFeiPaQskmvakKu5EbCbpntQn48jyHuvrkurSS/Q= github.com/googleapis/gax-go/v2 v2.14.1/go.mod h1:Hb/NubMaVM88SrNkvl8X/o8XWwDJEPqouaLeN2IUxoA= github.com/gophercloud/gophercloud/v2 v2.6.0 h1:XJKQ0in3iHOZHVAFMXq/OhjCuvvG+BKR0unOqRfG1EI= @@ -475,8 +475,8 @@ github.com/gosuri/uitable v0.0.4 h1:IG2xLKRvErL3uhY6e1BylFzG+aJiwQviDDTfOKeKTpY= github.com/gosuri/uitable v0.0.4/go.mod h1:tKR86bXuXPZazfOTG1FIzvjIdXzd0mo4Vtn16vt0PJo= github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79 h1:+ngKgrYPPJrOjhax5N+uePQ0Fh1Z7PheYoUI/0nzkPA= github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= -github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.3.0 h1:FbSCl+KggFl+Ocym490i/EyXF4lPgLoUtcSWquBM0Rs= -github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.3.0/go.mod h1:qOchhhIlmRcqk/O9uCo/puJlyo07YINaIqdZfZG3Jkc= +github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.3.1 h1:KcFzXwzM/kGhIRHvc8jdixfIJjVzuUJdnv+5xsPutog= +github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.3.1/go.mod h1:qOchhhIlmRcqk/O9uCo/puJlyo07YINaIqdZfZG3Jkc= github.com/grpc-ecosystem/grpc-gateway v1.16.0 h1:gmcG1KaJ57LophUzW0Hy8NmPhnMZb4M0+kPpLofRdBo= github.com/grpc-ecosystem/grpc-gateway/v2 v2.24.0 h1:TmHmbvxPmaegwhDubVz0lICL0J5Ka2vwTzhoePEXsGE= github.com/grpc-ecosystem/grpc-gateway/v2 v2.24.0/go.mod h1:qztMSjm835F2bXf+5HKAPIS5qsmQDqZna/PgVt4rWtI= @@ -488,8 +488,8 @@ github.com/hashicorp/go-checkpoint v0.5.0/go.mod h1:7nfLNL10NsxqO4iWuW6tWW0HjZuD github.com/hashicorp/go-cleanhttp v0.5.0/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ= github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48= -github.com/hashicorp/go-cty v1.4.1-0.20200414143053-d3edf31b6320 h1:1/D3zfFHttUKaCaGKZ/dR2roBXv0vKbSCnssIldfQdI= -github.com/hashicorp/go-cty v1.4.1-0.20200414143053-d3edf31b6320/go.mod h1:EiZBMaudVLy8fmjf9Npq1dq9RalhveqZG5w/yz3mHWs= +github.com/hashicorp/go-cty v1.5.0 h1:EkQ/v+dDNUqnuVpmS5fPqyY71NXVgT5gf32+57xY8g0= +github.com/hashicorp/go-cty v1.5.0/go.mod h1:lFUCG5kd8exDobgSfyj4ONE/dc822kiYMguVKdHGMLM= github.com/hashicorp/go-hclog v0.16.2/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= github.com/hashicorp/go-hclog v1.6.3 h1:Qr2kF+eVWjTiYmU7Y31tYlP1h0q/X3Nl3tPGdaB11/k= github.com/hashicorp/go-hclog v1.6.3/go.mod h1:W4Qnvbt70Wk/zYJryRzDRU/4r0kIg0PVHBcfoyhpF5M= @@ -540,10 +540,10 @@ github.com/hashicorp/terraform-plugin-go v0.26.0 h1:cuIzCv4qwigug3OS7iKhpGAbZTiy github.com/hashicorp/terraform-plugin-go v0.26.0/go.mod h1:+CXjuLDiFgqR+GcrM5a2E2Kal5t5q2jb0E3D57tTdNY= github.com/hashicorp/terraform-plugin-log v0.9.0 h1:i7hOA+vdAItN1/7UrfBqBwvYPQ9TFvymaRGZED3FCV0= github.com/hashicorp/terraform-plugin-log v0.9.0/go.mod h1:rKL8egZQ/eXSyDqzLUuwUYLVdlYeamldAHSxjUFADow= -github.com/hashicorp/terraform-plugin-sdk/v2 v2.35.0 h1:wyKCCtn6pBBL46c1uIIBNUOWlNfYXfXpVo16iDyLp8Y= -github.com/hashicorp/terraform-plugin-sdk/v2 v2.35.0/go.mod h1:B0Al8NyYVr8Mp/KLwssKXG1RqnTk7FySqSn4fRuLNgw= -github.com/hashicorp/terraform-plugin-testing v1.11.0 h1:MeDT5W3YHbONJt2aPQyaBsgQeAIckwPX41EUHXEn29A= -github.com/hashicorp/terraform-plugin-testing v1.11.0/go.mod h1:WNAHQ3DcgV/0J+B15WTE6hDvxcUdkPPpnB1FR3M910U= +github.com/hashicorp/terraform-plugin-sdk/v2 v2.36.1 h1:WNMsTLkZf/3ydlgsuXePa3jvZFwAJhruxTxP/c1Viuw= +github.com/hashicorp/terraform-plugin-sdk/v2 v2.36.1/go.mod h1:P6o64QS97plG44iFzSM6rAn6VJIC/Sy9a9IkEtl79K4= +github.com/hashicorp/terraform-plugin-testing v1.12.0 h1:tpIe+T5KBkA1EO6aT704SPLedHUo55RenguLHcaSBdI= +github.com/hashicorp/terraform-plugin-testing v1.12.0/go.mod h1:jbDQUkT9XRjAh1Bvyufq+PEH1Xs4RqIdpOQumSgSXBM= github.com/hashicorp/terraform-registry-address v0.2.4 h1:JXu/zHB2Ymg/TGVCRu10XqNa4Sh2bWcqCNyKWjnCPJA= github.com/hashicorp/terraform-registry-address v0.2.4/go.mod h1:tUNYTVyCtU4OIGXXMDp7WNcJ+0W1B4nmstVDgHMjfAU= github.com/hashicorp/terraform-svchost v0.1.1 h1:EZZimZ1GxdqFRinZ1tpJwVxxt49xc/S52uzrw4x0jKQ= @@ -685,10 +685,10 @@ github.com/oklog/ulid v1.3.1 h1:EGfNDEx6MqHz8B3uNV6QAib1UR2Lm97sHi3ocA6ESJ4= github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= github.com/olareg/olareg v0.1.1 h1:Ui7q93zjcoF+U9U71sgqgZWByDoZOpqHitUXEu2xV+g= github.com/olareg/olareg v0.1.1/go.mod h1:w8NP4SWrHHtxsFaUiv1lnCnYPm4sN1seCd2h7FK/dc0= -github.com/onsi/ginkgo/v2 v2.22.2 h1:/3X8Panh8/WwhU/3Ssa6rCKqPLuAkVY2I0RoyDLySlU= -github.com/onsi/ginkgo/v2 v2.22.2/go.mod h1:oeMosUL+8LtarXBHu/c0bx2D/K9zyQ6uX3cTyztHwsk= -github.com/onsi/gomega v1.36.2 h1:koNYke6TVk6ZmnyHrCXba/T/MoLBXFjeC1PtvYgw0A8= -github.com/onsi/gomega v1.36.2/go.mod h1:DdwyADRjrc825LhMEkD76cHR5+pUnjhUN8GlHlRPHzY= +github.com/onsi/ginkgo/v2 v2.23.3 h1:edHxnszytJ4lD9D5Jjc4tiDkPBZ3siDeJJkUZJJVkp0= +github.com/onsi/ginkgo/v2 v2.23.3/go.mod h1:zXTP6xIp3U8aVuXN8ENK9IXRaTjFnpVB9mGmaSRvxnM= +github.com/onsi/gomega v1.36.3 h1:hID7cr8t3Wp26+cYnfcjR6HpJ00fdogN6dqZ1t6IylU= +github.com/onsi/gomega v1.36.3/go.mod h1:8D9+Txp43QWKhM24yyOBEdpkzN8FvJyAwecBgsU4KU0= github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= github.com/opencontainers/image-spec v1.1.0 h1:8SG7/vwALn54lVB/0yZ/MMwhFrPYtpEHQb2IpWsCzug= @@ -763,21 +763,21 @@ github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 h1:n661drycOFuPLCN github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3/go.mod h1:A0bzQcvG0E7Rwjx0REVgAGH58e96+X0MeOfepqsbeW4= github.com/shopspring/decimal v1.4.0 h1:bxl37RwXBklmTi0C79JfXCEBD1cqqHt0bbgBAGFp81k= github.com/shopspring/decimal v1.4.0/go.mod h1:gawqmDU56v4yIKSwfBSFip1HdCCXN8/+DMd9qYNcwME= -github.com/siderolabs/talos/pkg/machinery v1.9.4 h1:ReKkU5gaf5h/cZde3ME45hREgOEWODTJYfBFeMhZGkA= -github.com/siderolabs/talos/pkg/machinery v1.9.4/go.mod h1:yLkJ5ZvIpshDRhUVWjuSyTN6YAQiusSJF4/zj2/XfpY= +github.com/siderolabs/talos/pkg/machinery v1.9.5 h1:hH+f48MLNoDUeyny1zR/i2fLqReK64Fq9WmIizL8GEs= +github.com/siderolabs/talos/pkg/machinery v1.9.5/go.mod h1:yLkJ5ZvIpshDRhUVWjuSyTN6YAQiusSJF4/zj2/XfpY= github.com/sigstore/protobuf-specs v0.4.0 h1:yoZbdh0kZYKOSiVbYyA8J3f2wLh5aUk2SQB7LgAfIdU= github.com/sigstore/protobuf-specs v0.4.0/go.mod h1:FKW5NYhnnFQ/Vb9RKtQk91iYd0MKJ9AxyqInEwU6+OI= github.com/sigstore/rekor v1.3.9 h1:sUjRpKVh/hhgqGMs0t+TubgYsksArZ6poLEC3MsGAzU= github.com/sigstore/rekor v1.3.9/go.mod h1:xThNUhm6eNEmkJ/SiU/FVU7pLY2f380fSDZFsdDWlcM= -github.com/sigstore/sigstore v1.9.0 h1:zUfcKbp8RiJ4wEmA4nvcnEySQAqzF1NtV+v6rVzLwNY= -github.com/sigstore/sigstore v1.9.0/go.mod h1:zUoATYzR1J3rLNp3jmp4fzIJtWdhC3ZM6MnpcBtnsE4= +github.com/sigstore/sigstore v1.9.1 h1:bNMsfFATsMPaagcf+uppLk4C9rQZ2dh5ysmCxQBYWaw= +github.com/sigstore/sigstore v1.9.1/go.mod h1:zUoATYzR1J3rLNp3jmp4fzIJtWdhC3ZM6MnpcBtnsE4= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ= github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= github.com/skeema/knownhosts v1.3.0 h1:AM+y0rI04VksttfwjkSTNQorvGqmwATnvnAHpSgc0LY= github.com/skeema/knownhosts v1.3.0/go.mod h1:sPINvnADmT/qYH1kfv+ePMmOBTH6Tbl7b5LvTDjFK7M= -github.com/spf13/afero v1.12.0 h1:UcOPyRBYczmFn6yvphxkn9ZEOY65cpwGKb5mL36mrqs= -github.com/spf13/afero v1.12.0/go.mod h1:ZTlWwG4/ahT8W7T0WQ5uYmjI9duaLQGy3Q2OAl4sk/4= +github.com/spf13/afero v1.14.0 h1:9tH6MapGnn/j0eb0yIXiLjERO8RB6xIVZRDCX7PtqWA= +github.com/spf13/afero v1.14.0/go.mod h1:acJQ8t0ohCGuMN3O+Pv0V0hgMxNYDlvdk+VTfyZmbYo= github.com/spf13/cast v1.7.0 h1:ntdiHjuueXFgm5nzDRdOS4yfT43P5Fnud6DH50rz/7w= github.com/spf13/cast v1.7.0/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo= github.com/spf13/cobra v1.9.1 h1:CXSaggrXdbHK9CF+8ywj8Amf7PBRmPCOJugH954Nnlo= @@ -846,16 +846,16 @@ github.com/yvasiyarov/newrelic_platform_go v0.0.0-20140908184405-b21fdbd4370f h1 github.com/yvasiyarov/newrelic_platform_go v0.0.0-20140908184405-b21fdbd4370f/go.mod h1:GlGEuHIJweS1mbCqG+7vt2nvWLzLLnRHbXz5JKd/Qbg= github.com/zalando/go-keyring v0.2.3 h1:v9CUu9phlABObO4LPWycf+zwMG7nlbb3t/B5wa97yms= github.com/zalando/go-keyring v0.2.3/go.mod h1:HL4k+OXQfJUWaMnqyuSOc0drfGPX2b51Du6K+MRgZMk= -github.com/zclconf/go-cty v1.16.1 h1:a5TZEPzBFFR53udlIKApXzj8JIF4ZNQ6abH79z5R1S0= -github.com/zclconf/go-cty v1.16.1/go.mod h1:VvMs5i0vgZdhYawQNq5kePSpLAoz8u1xvZgrPIxfnZE= +github.com/zclconf/go-cty v1.16.2 h1:LAJSwc3v81IRBZyUVQDUdZ7hs3SYs9jv0eZJDWHD/70= +github.com/zclconf/go-cty v1.16.2/go.mod h1:VvMs5i0vgZdhYawQNq5kePSpLAoz8u1xvZgrPIxfnZE= github.com/zclconf/go-cty-debug v0.0.0-20240509010212-0d6042c53940 h1:4r45xpDWB6ZMSMNJFMOjqrGHynW3DIBuR2H9j0ug+Mo= github.com/zclconf/go-cty-debug v0.0.0-20240509010212-0d6042c53940/go.mod h1:CmBdvvj3nqzfzJ6nTCIwDTPZ56aVGvDrmztiO5g3qrM= -go.etcd.io/etcd/api/v3 v3.5.18 h1:Q4oDAKnmwqTo5lafvB+afbgCDF7E35E4EYV2g+FNGhs= -go.etcd.io/etcd/api/v3 v3.5.18/go.mod h1:uY03Ob2H50077J7Qq0DeehjM/A9S8PhVfbQ1mSaMopU= -go.etcd.io/etcd/client/pkg/v3 v3.5.18 h1:mZPOYw4h8rTk7TeJ5+3udUkfVGBqc+GCjOJYd68QgNM= -go.etcd.io/etcd/client/pkg/v3 v3.5.18/go.mod h1:BxVf2o5wXG9ZJV+/Cu7QNUiJYk4A29sAhoI5tIRsCu4= -go.etcd.io/etcd/client/v3 v3.5.18 h1:nvvYmNHGumkDjZhTHgVU36A9pykGa2K4lAJ0yY7hcXA= -go.etcd.io/etcd/client/v3 v3.5.18/go.mod h1:kmemwOsPU9broExyhYsBxX4spCTDX3yLgPMWtpBXG6E= +go.etcd.io/etcd/api/v3 v3.5.21 h1:A6O2/JDb3tvHhiIz3xf9nJ7REHvtEFJJ3veW3FbCnS8= +go.etcd.io/etcd/api/v3 v3.5.21/go.mod h1:c3aH5wcvXv/9dqIw2Y810LDXJfhSYdHQ0vxmP3CCHVY= +go.etcd.io/etcd/client/pkg/v3 v3.5.21 h1:lPBu71Y7osQmzlflM9OfeIV2JlmpBjqBNlLtcoBqUTc= +go.etcd.io/etcd/client/pkg/v3 v3.5.21/go.mod h1:BgqT/IXPjK9NkeSDjbzwsHySX3yIle2+ndz28nVsjUs= +go.etcd.io/etcd/client/v3 v3.5.21 h1:T6b1Ow6fNjOLOtM0xSoKNQt1ASPCLWrF9XMHcH9pEyY= +go.etcd.io/etcd/client/v3 v3.5.21/go.mod h1:mFYy67IOqmbRf/kRUvsHixzo3iG+1OF2W2+jVIQRAnU= go.mongodb.org/mongo-driver v1.14.0 h1:P98w8egYRjYe3XDjxhYJagTokP/H6HzlsnojRgZRd80= go.mongodb.org/mongo-driver v1.14.0/go.mod h1:Vzb0Mk/pa7e6cWw85R4F/endUC3u0U9jGcNU603k65c= go.mozilla.org/pkcs7 v0.0.0-20200128120323-432b2356ecb1 h1:A/5uWzF44DlIgdm/PQFwfMkW0JX+cIcQi/SwLAmZP5M= @@ -870,22 +870,22 @@ go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.5 go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.59.0/go.mod h1:ijPqXp5P6IRRByFVVg9DY8P5HkxkHE5ARIa+86aXPf4= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.59.0 h1:CV7UdSGJt/Ao6Gp4CXckLxVRRsRgDHoI8XjbL3PDl8s= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.59.0/go.mod h1:FRmFuRJfag1IZ2dPkHnEoSFVgTVPUd2qf5Vi69hLb8I= -go.opentelemetry.io/otel v1.34.0 h1:zRLXxLCgL1WyKsPVrgbSdMN4c0FMkDAskSTQP+0hdUY= -go.opentelemetry.io/otel v1.34.0/go.mod h1:OWFPOQ+h4G8xpyjgqo4SxJYdDQ/qmRH+wivy7zzx9oI= +go.opentelemetry.io/otel v1.35.0 h1:xKWKPxrxB6OtMCbmMY021CqC45J+3Onta9MqjhnusiQ= +go.opentelemetry.io/otel v1.35.0/go.mod h1:UEqy8Zp11hpkUrL73gSlELM0DupHoiq72dR+Zqel/+Y= go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.28.0 h1:3Q/xZUyC1BBkualc9ROb4G8qkH90LXEIICcs5zv1OYY= go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.28.0/go.mod h1:s75jGIWA9OfCMzF0xr+ZgfrB5FEbbV7UuYo32ahUiFI= go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.33.0 h1:wpMfgF8E1rkrT1Z6meFh1NDtownE9Ii3n3X2GJYjsaU= go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.33.0/go.mod h1:wAy0T/dUbs468uOlkT31xjvqQgEVXv58BRFWEgn5v/0= go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.29.0 h1:WDdP9acbMYjbKIyJUhTvtzj601sVJOqgWdUxSdR/Ysc= go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.29.0/go.mod h1:BLbf7zbNIONBLPwvFnwNHGj4zge8uTCM/UPIVW1Mq2I= -go.opentelemetry.io/otel/metric v1.34.0 h1:+eTR3U0MyfWjRDhmFMxe2SsW64QrZ84AOhvqS7Y+PoQ= -go.opentelemetry.io/otel/metric v1.34.0/go.mod h1:CEDrp0fy2D0MvkXE+dPV7cMi8tWZwX3dmaIhwPOaqHE= -go.opentelemetry.io/otel/sdk v1.34.0 h1:95zS4k/2GOy069d321O8jWgYsW3MzVV+KuSPKp7Wr1A= -go.opentelemetry.io/otel/sdk v1.34.0/go.mod h1:0e/pNiaMAqaykJGKbi+tSjWfNNHMTxoC9qANsCzbyxU= +go.opentelemetry.io/otel/metric v1.35.0 h1:0znxYu2SNyuMSQT4Y9WDWej0VpcsxkuklLa4/siN90M= +go.opentelemetry.io/otel/metric v1.35.0/go.mod h1:nKVFgxBZ2fReX6IlyW28MgZojkoAkJGaE8CpgeAU3oE= +go.opentelemetry.io/otel/sdk v1.35.0 h1:iPctf8iprVySXSKJffSS79eOjl9pvxV9ZqOWT0QejKY= +go.opentelemetry.io/otel/sdk v1.35.0/go.mod h1:+ga1bZliga3DxJ3CQGg3updiaAJoNECOgJREo9KHGQg= go.opentelemetry.io/otel/sdk/metric v1.34.0 h1:5CeK9ujjbFVL5c1PhLuStg1wxA7vQv7ce1EK0Gyvahk= go.opentelemetry.io/otel/sdk/metric v1.34.0/go.mod h1:jQ/r8Ze28zRKoNRdkjCZxfs6YvBTG1+YIqyFVFYec5w= -go.opentelemetry.io/otel/trace v1.34.0 h1:+ouXS2V8Rd4hp4580a8q23bg0azF2nI8cqLYnC8mh/k= -go.opentelemetry.io/otel/trace v1.34.0/go.mod h1:Svm7lSjQD7kG7KJ/MUHPVXSDGz2OX4h0M2jHBhmSfRE= +go.opentelemetry.io/otel/trace v1.35.0 h1:dPpEfJu1sDIqruz7BHFG3c7528f6ddfSWfFDVt/xgMs= +go.opentelemetry.io/otel/trace v1.35.0/go.mod h1:WUk7DtFp1Aw2MkvqGdwiXYDZZNvA/1J8o6xRXLrIkyc= go.opentelemetry.io/proto/otlp v1.3.1 h1:TrMUixzpM0yuc/znrFTP9MMRh8trP93mkCiDVeXrui0= go.opentelemetry.io/proto/otlp v1.3.1/go.mod h1:0X1WI4de4ZsLrrJNLAQbFeLCm3T7yBkR0XqQ7niQU+8= go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= @@ -902,16 +902,16 @@ golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5y golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.6.0/go.mod h1:OFC/31mSvZgRz0V1QTNCzfAI1aIRzbiufJtkMIlEp58= golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU= -golang.org/x/crypto v0.35.0 h1:b15kiHdrGCHrP6LvwaQ3c03kgNhhiMgvlhxHQhmg2Xs= -golang.org/x/crypto v0.35.0/go.mod h1:dy7dXNW32cAb/6/PRuTNsix8T+vJAqvuIy5Bli/x0YQ= -golang.org/x/exp v0.0.0-20250128182459-e0ece0dbea4c h1:KL/ZBHXgKGVmuZBZ01Lt57yE5ws8ZPSkkihmEyq7FXc= -golang.org/x/exp v0.0.0-20250128182459-e0ece0dbea4c/go.mod h1:tujkw807nyEEAamNbDrEGzRav+ilXA7PCRAd6xsmwiU= +golang.org/x/crypto v0.36.0 h1:AnAEvhDddvBdpY+uR+MyHmuZzzNqXSe/GvuDeob5L34= +golang.org/x/crypto v0.36.0/go.mod h1:Y4J0ReaxCR1IMaabaSMugxJES1EpwhBHhv2bDHklZvc= +golang.org/x/exp v0.0.0-20250305212735-054e65f0b394 h1:nDVHiLt8aIbd/VzvPWN6kSOPE7+F/fNFDSXLVYkE/Iw= +golang.org/x/exp v0.0.0-20250305212735-054e65f0b394/go.mod h1:sIifuuw/Yco/y6yb6+bDNfyeQ/MdPUy/hKEMYQV17cM= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/mod v0.23.0 h1:Zb7khfcRGKk+kqfxFaP5tZqCnDZMjC5VtUBs87Hr6QM= -golang.org/x/mod v0.23.0/go.mod h1:6SkKJ3Xj0I0BrPOZoBy3bdMptDDU9oJrpohJ3eWZ1fY= +golang.org/x/mod v0.24.0 h1:ZfthKaKaT4NrhGVZHO1/WDTwGES4De8KtWO0SIbNJMU= +golang.org/x/mod v0.24.0/go.mod h1:IXM97Txy2VM4PJ3gI61r1YEk/gAj6zAHN3AdZt6S9Ww= golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= @@ -924,10 +924,10 @@ golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qx golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= -golang.org/x/net v0.35.0 h1:T5GQRQb2y08kTAByq9L4/bz8cipCdA8FbRTXewonqY8= -golang.org/x/net v0.35.0/go.mod h1:EglIi67kWsHKlRzzVMUD93VMSWGFOMSZgxFjparz1Qk= -golang.org/x/oauth2 v0.27.0 h1:da9Vo7/tDv5RH/7nZDz1eMGS/q1Vv1N/7FCrBhI9I3M= -golang.org/x/oauth2 v0.27.0/go.mod h1:onh5ek6nERTohokkhCD/y2cV4Do3fxFHFuAejCkRWT8= +golang.org/x/net v0.38.0 h1:vRMAPTMaeGqVhG5QyLJHqNDwecKTomGeqbnfZyKlBI8= +golang.org/x/net v0.38.0/go.mod h1:ivrbrMbzFq5J41QOQh0siUuly180yBYtLp+CKbEaFx8= +golang.org/x/oauth2 v0.28.0 h1:CrgCKl8PPAVtLnU3c+EDw6x11699EWlsDeWNWKdIOkc= +golang.org/x/oauth2 v0.28.0/go.mod h1:onh5ek6nERTohokkhCD/y2cV4Do3fxFHFuAejCkRWT8= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -936,8 +936,8 @@ golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.11.0 h1:GGz8+XQP4FvTTrjZPzNKTMFtSXH80RAzG+5ghFPgK9w= -golang.org/x/sync v0.11.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.12.0 h1:MHc5BpPuC30uJk597Ri8TV3CNZcTLu6B6z4lJy+g6Jw= +golang.org/x/sync v0.12.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -966,17 +966,16 @@ golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.30.0 h1:QjkSwP/36a20jFYWkSue1YwXzLmsV5Gfq7Eiy72C1uc= -golang.org/x/sys v0.30.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.31.0 h1:ioabZlmFYtWhL+TRYpcnNlLwhyxaM9kWTDEmfnprqik= +golang.org/x/sys v0.31.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk= -golang.org/x/term v0.29.0 h1:L6pJp37ocefwRRtYPKSWOWzOtWSxVajvz2ldH/xi3iU= -golang.org/x/term v0.29.0/go.mod h1:6bl4lRlvVuDgSf3179VpIxBF0o10JUpXWOnI7nErv7s= +golang.org/x/term v0.30.0 h1:PQ39fJZ+mfadBm0y5WlL4vlM7Sx1Hgf13sMIY2+QS9Y= +golang.org/x/term v0.30.0/go.mod h1:NYYFdzHoI5wRh/h5tDMdMqCqPJZEuNqVR5xJLd/n67g= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= @@ -984,41 +983,41 @@ golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= -golang.org/x/text v0.22.0 h1:bofq7m3/HAFvbF51jz3Q9wLg3jkvSPuiZu/pD1XwgtM= -golang.org/x/text v0.22.0/go.mod h1:YRoo4H8PVmsu+E3Ou7cqLVH8oXWIHVoX0jqUWALQhfY= -golang.org/x/time v0.10.0 h1:3usCWA8tQn0L8+hFJQNgzpWbd89begxN66o1Ojdn5L4= -golang.org/x/time v0.10.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= +golang.org/x/text v0.23.0 h1:D71I7dUrlY+VX0gQShAThNGHFxZ13dGLBHQLVl1mJlY= +golang.org/x/text v0.23.0/go.mod h1:/BLNzu4aZCJ1+kcD0DNRotWKage4q2rGVAg4o22unh4= +golang.org/x/time v0.11.0 h1:/bpjEDfN9tkoN/ryeYHnv5hcMlc8ncjMcM4XBk5NWV0= +golang.org/x/time v0.11.0/go.mod h1:CDIdPxbZBQxdj6cxyCIdrNogrJKMJ7pr37NYpMcMDSg= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= -golang.org/x/tools v0.30.0 h1:BgcpHewrV5AUp2G9MebG4XPFI1E2W41zU1SaqVA9vJY= -golang.org/x/tools v0.30.0/go.mod h1:c347cR/OJfw5TI+GfX7RUPNMdDRRbjvYTS0jPyvsVtY= +golang.org/x/tools v0.31.0 h1:0EedkvKDbh+qistFTd0Bcwe/YLh4vHwWEkiI0toFIBU= +golang.org/x/tools v0.31.0/go.mod h1:naFTU+Cev749tSJRXJlna0T3WxKvb1kWEx15xA4SdmQ= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= gomodules.xyz/jsonpatch/v2 v2.4.0 h1:Ci3iUJyx9UeRx7CeFN8ARgGbkESwJK+KB9lLcWxY/Zw= gomodules.xyz/jsonpatch/v2 v2.4.0/go.mod h1:AH3dM2RI6uoBZxn3LVrfvJ3E0/9dG4cSrbuBJT4moAY= -google.golang.org/api v0.223.0 h1:JUTaWEriXmEy5AhvdMgksGGPEFsYfUKaPEYXd4c3Wvc= -google.golang.org/api v0.223.0/go.mod h1:C+RS7Z+dDwds2b+zoAk5hN/eSfsiCn0UDrYof/M4d2M= +google.golang.org/api v0.228.0 h1:X2DJ/uoWGnY5obVjewbp8icSL5U4FzuCfy9OjbLSnLs= +google.golang.org/api v0.228.0/go.mod h1:wNvRS1Pbe8r4+IfBIniV8fwCpGwTrYa+kMUDiC5z5a4= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.6.8 h1:IhEN5q69dyKagZPYMSdIjS2HqprW324FRQZJcGqPAsM= google.golang.org/appengine v1.6.8/go.mod h1:1jJ3jBArFh5pcgW8gCtRJnepW8FzD1V44FJffLiz/Ds= -google.golang.org/genproto v0.0.0-20250122153221-138b5a5a4fd4 h1:Pw6WnI9W/LIdRxqK7T6XGugGbHIRl5Q7q3BssH6xk4s= -google.golang.org/genproto v0.0.0-20250122153221-138b5a5a4fd4/go.mod h1:qbZzneIOXSq+KFAFut9krLfRLZiFLzZL5u2t8SV83EE= -google.golang.org/genproto/googleapis/api v0.0.0-20250219182151-9fdb1cabc7b2 h1:35ZFtrCgaAjF7AFAK0+lRSf+4AyYnWRbH7og13p7rZ4= -google.golang.org/genproto/googleapis/api v0.0.0-20250219182151-9fdb1cabc7b2/go.mod h1:W9ynFDP/shebLB1Hl/ESTOap2jHd6pmLXPNZC7SVDbA= -google.golang.org/genproto/googleapis/rpc v0.0.0-20250219182151-9fdb1cabc7b2 h1:DMTIbak9GhdaSxEjvVzAeNZvyc03I61duqNbnm3SU0M= -google.golang.org/genproto/googleapis/rpc v0.0.0-20250219182151-9fdb1cabc7b2/go.mod h1:LuRYeWDFV6WOn90g357N17oMCaxpgCnbi/44qJvDn2I= -google.golang.org/grpc v1.71.0 h1:kF77BGdPTQ4/JZWMlb9VpJ5pa25aqvVqogsxNHHdeBg= -google.golang.org/grpc v1.71.0/go.mod h1:H0GRtasmQOh9LkFoCPDu3ZrwUtD1YGE+b2vYBYd/8Ec= +google.golang.org/genproto v0.0.0-20250303144028-a0af3efb3deb h1:ITgPrl429bc6+2ZraNSzMDk3I95nmQln2fuPstKwFDE= +google.golang.org/genproto v0.0.0-20250303144028-a0af3efb3deb/go.mod h1:sAo5UzpjUwgFBCzupwhcLcxHVDK7vG5IqI30YnwX2eE= +google.golang.org/genproto/googleapis/api v0.0.0-20250313205543-e70fdf4c4cb4 h1:IFnXJq3UPB3oBREOodn1v1aGQeZYQclEmvWRMN0PSsY= +google.golang.org/genproto/googleapis/api v0.0.0-20250313205543-e70fdf4c4cb4/go.mod h1:c8q6Z6OCqnfVIqUFJkCzKcrj8eCvUrz+K4KRzSTuANg= +google.golang.org/genproto/googleapis/rpc v0.0.0-20250313205543-e70fdf4c4cb4 h1:iK2jbkWL86DXjEx0qiHcRE9dE4/Ahua5k6V8OWFb//c= +google.golang.org/genproto/googleapis/rpc v0.0.0-20250313205543-e70fdf4c4cb4/go.mod h1:LuRYeWDFV6WOn90g357N17oMCaxpgCnbi/44qJvDn2I= +google.golang.org/grpc v1.71.1 h1:ffsFWr7ygTUscGPI0KKK6TLrGz0476KUvvsbqWK0rPI= +google.golang.org/grpc v1.71.1/go.mod h1:H0GRtasmQOh9LkFoCPDu3ZrwUtD1YGE+b2vYBYd/8Ec= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.36.5 h1:tPhr+woSbjfYvY6/GPufUoYizxw1cF/yFoxJ2fmpwlM= -google.golang.org/protobuf v1.36.5/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= +google.golang.org/protobuf v1.36.6 h1:z1NpPI8ku2WgiWnf+t9wTPsn6eP1L7ksHUlkfLvd9xY= +google.golang.org/protobuf v1.36.6/go.mod h1:jduwjTPXsFjZGTmRluh+L6NjiWu7pchiJ2/5YcXBHnY= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= @@ -1041,44 +1040,44 @@ gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gotest.tools/v3 v3.4.0 h1:ZazjZUfuVeZGLAmlKKuyv3IKP5orXcwtOwDQH6YVr6o= gotest.tools/v3 v3.4.0/go.mod h1:CtbdzLSsqVhDgMtKsx03ird5YTGB3ar27v0u/yKBW5g= -helm.sh/helm/v3 v3.17.1 h1:gzVoAD+qVuoJU6KDMSAeo0xRJ6N1znRxz3wyuXRmJDk= -helm.sh/helm/v3 v3.17.1/go.mod h1:nvreuhuR+j78NkQcLC3TYoprCKStLyw5P4T7E5itv2w= -k8s.io/api v0.32.2 h1:bZrMLEkgizC24G9eViHGOPbW+aRo9duEISRIJKfdJuw= -k8s.io/api v0.32.2/go.mod h1:hKlhk4x1sJyYnHENsrdCWw31FEmCijNGPJO5WzHiJ6Y= -k8s.io/apiextensions-apiserver v0.32.2 h1:2YMk285jWMk2188V2AERy5yDwBYrjgWYggscghPCvV4= -k8s.io/apiextensions-apiserver v0.32.2/go.mod h1:GPwf8sph7YlJT3H6aKUWtd0E+oyShk/YHWQHf/OOgCA= -k8s.io/apimachinery v0.32.2 h1:yoQBR9ZGkA6Rgmhbp/yuT9/g+4lxtsGYwW6dR6BDPLQ= -k8s.io/apimachinery v0.32.2/go.mod h1:GpHVgxoKlTxClKcteaeuF1Ul/lDVb74KpZcxcmLDElE= -k8s.io/apiserver v0.32.2 h1:WzyxAu4mvLkQxwD9hGa4ZfExo3yZZaYzoYvvVDlM6vw= -k8s.io/apiserver v0.32.2/go.mod h1:PEwREHiHNU2oFdte7BjzA1ZyjWjuckORLIK/wLV5goM= -k8s.io/cli-runtime v0.32.1 h1:19nwZPlYGJPUDbhAxDIS2/oydCikvKMHsxroKNGA2mM= -k8s.io/cli-runtime v0.32.1/go.mod h1:NJPbeadVFnV2E7B7vF+FvU09mpwYlZCu8PqjzfuOnkY= -k8s.io/client-go v0.32.2 h1:4dYCD4Nz+9RApM2b/3BtVvBHw54QjMFUl1OLcJG5yOA= -k8s.io/client-go v0.32.2/go.mod h1:fpZ4oJXclZ3r2nDOv+Ux3XcJutfrwjKTCHz2H3sww94= -k8s.io/cluster-bootstrap v0.32.2 h1:2M/VDIVeUuqdyUfZIMHl39Q6NDomLxny8s/yNQLs+18= -k8s.io/cluster-bootstrap v0.32.2/go.mod h1:jzzJvoOU5mjuNXLlORra1pANHtVLWKZWXc4XAjHjMPY= -k8s.io/component-base v0.32.2 h1:1aUL5Vdmu7qNo4ZsE+569PV5zFatM9hl+lb3dEea2zU= -k8s.io/component-base v0.32.2/go.mod h1:PXJ61Vx9Lg+P5mS8TLd7bCIr+eMJRQTyXe8KvkrvJq0= +helm.sh/helm/v3 v3.17.2 h1:agYQ5ew2jq5vdx2K7q5W44KyKQrnSubUMCQsjkiv3/o= +helm.sh/helm/v3 v3.17.2/go.mod h1:+uJKMH/UiMzZQOALR3XUf3BLIoczI2RKKD6bMhPh4G8= +k8s.io/api v0.32.3 h1:Hw7KqxRusq+6QSplE3NYG4MBxZw1BZnq4aP4cJVINls= +k8s.io/api v0.32.3/go.mod h1:2wEDTXADtm/HA7CCMD8D8bK4yuBUptzaRhYcYEEYA3k= +k8s.io/apiextensions-apiserver v0.32.3 h1:4D8vy+9GWerlErCwVIbcQjsWunF9SUGNu7O7hiQTyPY= +k8s.io/apiextensions-apiserver v0.32.3/go.mod h1:8YwcvVRMVzw0r1Stc7XfGAzB/SIVLunqApySV5V7Dss= +k8s.io/apimachinery v0.32.3 h1:JmDuDarhDmA/Li7j3aPrwhpNBA94Nvk5zLeOge9HH1U= +k8s.io/apimachinery v0.32.3/go.mod h1:GpHVgxoKlTxClKcteaeuF1Ul/lDVb74KpZcxcmLDElE= +k8s.io/apiserver v0.32.3 h1:kOw2KBuHOA+wetX1MkmrxgBr648ksz653j26ESuWNY8= +k8s.io/apiserver v0.32.3/go.mod h1:q1x9B8E/WzShF49wh3ADOh6muSfpmFL0I2t+TG0Zdgc= +k8s.io/cli-runtime v0.32.2 h1:aKQR4foh9qeyckKRkNXUccP9moxzffyndZAvr+IXMks= +k8s.io/cli-runtime v0.32.2/go.mod h1:a/JpeMztz3xDa7GCyyShcwe55p8pbcCVQxvqZnIwXN8= +k8s.io/client-go v0.32.3 h1:RKPVltzopkSgHS7aS98QdscAgtgah/+zmpAogooIqVU= +k8s.io/client-go v0.32.3/go.mod h1:3v0+3k4IcT9bXTc4V2rt+d2ZPPG700Xy6Oi0Gdl2PaY= +k8s.io/cluster-bootstrap v0.32.3 h1:AqIpsUhB6MUeaAsl1WvaUw54AHRd2hfZrESlKChtd8s= +k8s.io/cluster-bootstrap v0.32.3/go.mod h1:CHbBwgOb6liDV6JFUTkx5t85T2xidy0sChBDoyYw344= +k8s.io/component-base v0.32.3 h1:98WJvvMs3QZ2LYHBzvltFSeJjEx7t5+8s71P7M74u8k= +k8s.io/component-base v0.32.3/go.mod h1:LWi9cR+yPAv7cu2X9rZanTiFKB2kHA+JjmhkKjCZRpI= k8s.io/klog/v2 v2.130.1 h1:n9Xl7H1Xvksem4KFG4PYbdQCQxqc/tTUyrgXaOhHSzk= k8s.io/klog/v2 v2.130.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE= k8s.io/kube-openapi v0.0.0-20241105132330-32ad38e42d3f h1:GA7//TjRY9yWGy1poLzYYJJ4JRdzg3+O6e8I+e+8T5Y= k8s.io/kube-openapi v0.0.0-20241105132330-32ad38e42d3f/go.mod h1:R/HEjbvWI0qdfb8viZUeVZm0X6IZnxAydC7YU42CMw4= -k8s.io/kubectl v0.32.1 h1:/btLtXLQUU1rWx8AEvX9jrb9LaI6yeezt3sFALhB8M8= -k8s.io/kubectl v0.32.1/go.mod h1:sezNuyWi1STk4ZNPVRIFfgjqMI6XMf+oCVLjZen/pFQ= -k8s.io/kubelet v0.32.2 h1:WFTSYdt3BB1aTApDuKNI16x/4MYqqX8WBBBBh3KupDg= -k8s.io/kubelet v0.32.2/go.mod h1:cC1ms5RS+lu0ckVr6AviCQXHLSPKEBC3D5oaCBdTGkI= -k8s.io/kubernetes v1.32.2 h1:mShetlA102UpjRVSGzB+5vjJwy8oPy8FMWrkTH5f37o= -k8s.io/kubernetes v1.32.2/go.mod h1:tiIKO63GcdPRBHW2WiUFm3C0eoLczl3f7qi56Dm1W8I= -k8s.io/mount-utils v0.32.2 h1:aDwp+ucWiVnDr/LpRg88/dsXf/vm6gI1VZkYH3+3+Vw= -k8s.io/mount-utils v0.32.2/go.mod h1:Kun5c2svjAPx0nnvJKYQWhfeNW+O0EpzHgRhDcYoSY0= -k8s.io/utils v0.0.0-20241210054802-24370beab758 h1:sdbE21q2nlQtFh65saZY+rRM6x6aJJI8IUa1AmH/qa0= -k8s.io/utils v0.0.0-20241210054802-24370beab758/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= +k8s.io/kubectl v0.32.2 h1:TAkag6+XfSBgkqK9I7ZvwtF0WVtUAvK8ZqTt+5zi1Us= +k8s.io/kubectl v0.32.2/go.mod h1:+h/NQFSPxiDZYX/WZaWw9fwYezGLISP0ud8nQKg+3g8= +k8s.io/kubelet v0.32.3 h1:B9HzW4yB67flx8tN2FYuDwZvxnmK3v5EjxxFvOYjmc8= +k8s.io/kubelet v0.32.3/go.mod h1:yyAQSCKC+tjSlaFw4HQG7Jein+vo+GeKBGdXdQGvL1U= +k8s.io/kubernetes v1.32.3 h1:2A58BlNME8NwsMawmnM6InYo3Jf35Nw5G79q46kXwoA= +k8s.io/kubernetes v1.32.3/go.mod h1:GvhiBeolvSRzBpFlgM0z/Bbu3Oxs9w3P6XfEgYaMi8k= +k8s.io/mount-utils v0.32.3 h1:ZPXXHblfBhYP89OnaozpFg9Ojl6HhDfxBLcdWNkaxW8= +k8s.io/mount-utils v0.32.3/go.mod h1:Kun5c2svjAPx0nnvJKYQWhfeNW+O0EpzHgRhDcYoSY0= +k8s.io/utils v0.0.0-20250321185631-1f6e0b77f77e h1:KqK5c/ghOm8xkHYhlodbp6i6+r+ChV2vuAuVRdFbLro= +k8s.io/utils v0.0.0-20250321185631-1f6e0b77f77e/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= libvirt.org/go/libvirt v1.11001.0 h1:QJgpslxY7qkpXZIDxdMHpkDl7FfhgQJwqRTGBbg/S8E= libvirt.org/go/libvirt v1.11001.0/go.mod h1:1WiFE8EjZfq+FCVog+rvr1yatKbKZ9FaFMZgEqxEJqQ= oras.land/oras-go v1.2.5 h1:XpYuAwAb0DfQsunIyMfeET92emK8km3W4yEzZvUbsTo= oras.land/oras-go v1.2.5/go.mod h1:PuAwRShRZCsZb7g8Ar3jKKQR/2A/qN+pkYxIOd/FAoo= -sigs.k8s.io/controller-runtime v0.20.2 h1:/439OZVxoEc02psi1h4QO3bHzTgu49bb347Xp4gW1pc= -sigs.k8s.io/controller-runtime v0.20.2/go.mod h1:xg2XB0K5ShQzAgsoujxuKN4LNXR2LfwwHsPj7Iaw+XY= +sigs.k8s.io/controller-runtime v0.20.4 h1:X3c+Odnxz+iPTRobG4tp092+CvBU9UK0t/bRf+n0DGU= +sigs.k8s.io/controller-runtime v0.20.4/go.mod h1:xg2XB0K5ShQzAgsoujxuKN4LNXR2LfwwHsPj7Iaw+XY= sigs.k8s.io/json v0.0.0-20241010143419-9aa6b5e7a4b3 h1:/Rv+M11QRah1itp8VhT6HoVx1Ray9eB4DBr+K+/sCJ8= sigs.k8s.io/json v0.0.0-20241010143419-9aa6b5e7a4b3/go.mod h1:18nIHnGi6636UCz6m8i4DhaJ65T6EruyzmoQqI2BVDo= sigs.k8s.io/kustomize/api v0.18.0 h1:hTzp67k+3NEVInwz5BHyzc9rGxIauoXferXyjv5lWPo= diff --git a/hack/tools/go.mod b/hack/tools/go.mod index 2a0dd37ec..007573137 100644 --- a/hack/tools/go.mod +++ b/hack/tools/go.mod @@ -5,8 +5,8 @@ go 1.23.6 require ( github.com/google/go-licenses v1.6.0 github.com/google/keep-sorted v0.6.0 - github.com/katexochen/sh/v3 v3.10.0 - golang.org/x/tools v0.30.0 + github.com/katexochen/sh/v3 v3.11.0 + golang.org/x/tools v0.31.0 golang.org/x/vuln v1.1.4 ) @@ -26,7 +26,7 @@ require ( github.com/mattn/go-isatty v0.0.20 // indirect github.com/mitchellh/go-homedir v1.1.0 // indirect github.com/otiai10/copy v1.6.0 // indirect - github.com/rogpeppe/go-internal v1.13.1 // indirect + github.com/rogpeppe/go-internal v1.14.1 // indirect github.com/rs/zerolog v1.31.0 // indirect github.com/sergi/go-diff v1.3.1 // indirect github.com/spf13/cobra v1.8.0 // indirect @@ -35,14 +35,14 @@ require ( github.com/stretchr/testify v1.8.4 // indirect github.com/xanzy/ssh-agent v0.3.3 // indirect go.opencensus.io v0.24.0 // indirect - golang.org/x/crypto v0.33.0 // indirect - golang.org/x/mod v0.23.0 // indirect - golang.org/x/net v0.35.0 // indirect - golang.org/x/sync v0.11.0 // indirect - golang.org/x/sys v0.30.0 // indirect + golang.org/x/crypto v0.36.0 // indirect + golang.org/x/mod v0.24.0 // indirect + golang.org/x/net v0.37.0 // indirect + golang.org/x/sync v0.12.0 // indirect + golang.org/x/sys v0.31.0 // indirect golang.org/x/telemetry v0.0.0-20240522233618-39ace7a40ae7 // indirect - golang.org/x/term v0.29.0 // indirect - golang.org/x/text v0.22.0 // indirect + golang.org/x/term v0.30.0 // indirect + golang.org/x/text v0.23.0 // indirect gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect gopkg.in/src-d/go-billy.v4 v4.3.2 // indirect gopkg.in/src-d/go-git.v4 v4.13.1 // indirect diff --git a/hack/tools/go.sum b/hack/tools/go.sum index 23982d7b2..2bfda5470 100644 --- a/hack/tools/go.sum +++ b/hack/tools/go.sum @@ -174,8 +174,8 @@ github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE= github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= -github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= +github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= github.com/google/go-licenses v1.6.0 h1:MM+VCXf0slYkpWO0mECvdYDVCxZXIQNal5wqUIXEZ/A= github.com/google/go-licenses v1.6.0/go.mod h1:Z8jgz2isEhdenOqd/00pq7I4y4k1xVVQJv415otjclo= github.com/google/go-replayers/httpreplay v1.1.1 h1:H91sIMlt1NZzN7R+/ASswyouLJfW0WLW7fhyUFvDEkY= @@ -235,8 +235,8 @@ github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= -github.com/katexochen/sh/v3 v3.10.0 h1:Ego1a6oSmdt9WypgalMnbZNmL9CVSxwiX12CFZM981I= -github.com/katexochen/sh/v3 v3.10.0/go.mod h1:edcqgocfPrMX4vdCLGZQgc4T+2Cr6zNN+Adg/w8PLxw= +github.com/katexochen/sh/v3 v3.11.0 h1:L71eTHDOVv7CKiCJVDm28EmIdIT/s8dXzKgddW9Uxok= +github.com/katexochen/sh/v3 v3.11.0/go.mod h1:Z6jje5FhaLunbZtZlnYi6qcaqMO+rdh8m0IJ2jWTbew= github.com/kevinburke/ssh_config v0.0.0-20190725054713-01f96b0aa0cd/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= github.com/kevinburke/ssh_config v1.2.0 h1:x584FjTGwHzMwvHx18PXxbBVzfnxogHaAReU4gf13a4= github.com/kevinburke/ssh_config v1.2.0/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= @@ -276,8 +276,8 @@ github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZN github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII= -github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o= +github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ= +github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc= github.com/rs/xid v1.5.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= github.com/rs/zerolog v1.31.0 h1:FcTR3NnLWW+NnTwwhFWiJSZr4ECLpqCm6QsEnyvbV4A= github.com/rs/zerolog v1.31.0/go.mod h1:/7mN4D5sKwJLZQ2b/znpjC3/GQWY/xaDXUM0kKWRHss= @@ -341,8 +341,8 @@ golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPh golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw= -golang.org/x/crypto v0.33.0 h1:IOBPskki6Lysi0lo9qQvbxiQ+FvsCC/YWOecCHAixus= -golang.org/x/crypto v0.33.0/go.mod h1:bVdXmD7IV/4GdElGPozy6U7lWdRXA4qyRVGJV57uQ5M= +golang.org/x/crypto v0.36.0 h1:AnAEvhDddvBdpY+uR+MyHmuZzzNqXSe/GvuDeob5L34= +golang.org/x/crypto v0.36.0/go.mod h1:Y4J0ReaxCR1IMaabaSMugxJES1EpwhBHhv2bDHklZvc= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -380,8 +380,8 @@ golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/mod v0.7.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/mod v0.23.0 h1:Zb7khfcRGKk+kqfxFaP5tZqCnDZMjC5VtUBs87Hr6QM= -golang.org/x/mod v0.23.0/go.mod h1:6SkKJ3Xj0I0BrPOZoBy3bdMptDDU9oJrpohJ3eWZ1fY= +golang.org/x/mod v0.24.0 h1:ZfthKaKaT4NrhGVZHO1/WDTwGES4De8KtWO0SIbNJMU= +golang.org/x/mod v0.24.0/go.mod h1:IXM97Txy2VM4PJ3gI61r1YEk/gAj6zAHN3AdZt6S9Ww= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -428,8 +428,8 @@ golang.org/x/net v0.0.0-20220624214902-1bab6f366d9e/go.mod h1:XRhObCWvk6IyKnWLug golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= golang.org/x/net v0.5.0/go.mod h1:DivGGAXEgPSlEBzxGzZI+ZLohi+xUj054jfeKui00ws= -golang.org/x/net v0.35.0 h1:T5GQRQb2y08kTAByq9L4/bz8cipCdA8FbRTXewonqY8= -golang.org/x/net v0.35.0/go.mod h1:EglIi67kWsHKlRzzVMUD93VMSWGFOMSZgxFjparz1Qk= +golang.org/x/net v0.37.0 h1:1zLorHbz+LYj7MQlSf1+2tPIIgibq2eL5xkrGk6f+2c= +golang.org/x/net v0.37.0/go.mod h1:ivrbrMbzFq5J41QOQh0siUuly180yBYtLp+CKbEaFx8= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -466,8 +466,8 @@ golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.11.0 h1:GGz8+XQP4FvTTrjZPzNKTMFtSXH80RAzG+5ghFPgK9w= -golang.org/x/sync v0.11.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.12.0 h1:MHc5BpPuC30uJk597Ri8TV3CNZcTLu6B6z4lJy+g6Jw= +golang.org/x/sync v0.12.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190221075227-b4e8571b14e0/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -538,16 +538,16 @@ golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.30.0 h1:QjkSwP/36a20jFYWkSue1YwXzLmsV5Gfq7Eiy72C1uc= -golang.org/x/sys v0.30.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.31.0 h1:ioabZlmFYtWhL+TRYpcnNlLwhyxaM9kWTDEmfnprqik= +golang.org/x/sys v0.31.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= golang.org/x/telemetry v0.0.0-20240522233618-39ace7a40ae7 h1:FemxDzfMUcK2f3YY4H+05K9CDzbSVr2+q/JKN45pey0= golang.org/x/telemetry v0.0.0-20240522233618-39ace7a40ae7/go.mod h1:pRgIJT+bRLFKnoM1ldnzKoxTIn14Yxz928LQRYYgIN0= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.4.0/go.mod h1:9P2UbLfCdcvo3p/nzKvsmas4TnlujnuoV9hGgYzW1lQ= -golang.org/x/term v0.29.0 h1:L6pJp37ocefwRRtYPKSWOWzOtWSxVajvz2ldH/xi3iU= -golang.org/x/term v0.29.0/go.mod h1:6bl4lRlvVuDgSf3179VpIxBF0o10JUpXWOnI7nErv7s= +golang.org/x/term v0.30.0 h1:PQ39fJZ+mfadBm0y5WlL4vlM7Sx1Hgf13sMIY2+QS9Y= +golang.org/x/term v0.30.0/go.mod h1:NYYFdzHoI5wRh/h5tDMdMqCqPJZEuNqVR5xJLd/n67g= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -559,8 +559,8 @@ golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.6.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.22.0 h1:bofq7m3/HAFvbF51jz3Q9wLg3jkvSPuiZu/pD1XwgtM= -golang.org/x/text v0.22.0/go.mod h1:YRoo4H8PVmsu+E3Ou7cqLVH8oXWIHVoX0jqUWALQhfY= +golang.org/x/text v0.23.0 h1:D71I7dUrlY+VX0gQShAThNGHFxZ13dGLBHQLVl1mJlY= +golang.org/x/text v0.23.0/go.mod h1:/BLNzu4aZCJ1+kcD0DNRotWKage4q2rGVAg4o22unh4= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -619,8 +619,8 @@ golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/tools v0.5.0/go.mod h1:N+Kgy78s5I24c24dU8OfWNEotWjutIs8SnJvn5IDq+k= -golang.org/x/tools v0.30.0 h1:BgcpHewrV5AUp2G9MebG4XPFI1E2W41zU1SaqVA9vJY= -golang.org/x/tools v0.30.0/go.mod h1:c347cR/OJfw5TI+GfX7RUPNMdDRRbjvYTS0jPyvsVtY= +golang.org/x/tools v0.31.0 h1:0EedkvKDbh+qistFTd0Bcwe/YLh4vHwWEkiI0toFIBU= +golang.org/x/tools v0.31.0/go.mod h1:naFTU+Cev749tSJRXJlna0T3WxKvb1kWEx15xA4SdmQ= golang.org/x/vuln v1.1.4 h1:Ju8QsuyhX3Hk8ma3CesTbO8vfJD9EvUBgHvkxHBzj0I= golang.org/x/vuln v1.1.4/go.mod h1:F+45wmU18ym/ca5PLTPLsSzr2KppzswxPP603ldA67s= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= diff --git a/internal/versions/components/components.pb.go b/internal/versions/components/components.pb.go index 59de22110..5236421c8 100644 --- a/internal/versions/components/components.pb.go +++ b/internal/versions/components/components.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.36.5 +// protoc-gen-go v1.36.6 // protoc v5.29.1 // source: internal/versions/components/components.proto @@ -91,24 +91,15 @@ func (x *Component) GetExtract() bool { var File_internal_versions_components_components_proto protoreflect.FileDescriptor -var file_internal_versions_components_components_proto_rawDesc = string([]byte{ - 0x0a, 0x2d, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x76, 0x65, 0x72, 0x73, 0x69, - 0x6f, 0x6e, 0x73, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x63, - 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, - 0x0a, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x73, 0x22, 0x6e, 0x0a, 0x09, 0x43, - 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x75, 0x72, 0x6c, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x75, 0x72, 0x6c, 0x12, 0x12, 0x0a, 0x04, 0x68, 0x61, - 0x73, 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x68, 0x61, 0x73, 0x68, 0x12, 0x21, - 0x0a, 0x0c, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x5f, 0x70, 0x61, 0x74, 0x68, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x69, 0x6e, 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x50, 0x61, 0x74, - 0x68, 0x12, 0x18, 0x0a, 0x07, 0x65, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x07, 0x65, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x42, 0x46, 0x5a, 0x44, 0x67, - 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x65, 0x64, 0x67, 0x65, 0x6c, 0x65, - 0x73, 0x73, 0x73, 0x79, 0x73, 0x2f, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x65, 0x6c, 0x6c, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x2f, 0x76, 0x32, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, - 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, - 0x6e, 0x74, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -}) +const file_internal_versions_components_components_proto_rawDesc = "" + + "\n" + + "-internal/versions/components/components.proto\x12\n" + + "components\"n\n" + + "\tComponent\x12\x10\n" + + "\x03url\x18\x01 \x01(\tR\x03url\x12\x12\n" + + "\x04hash\x18\x02 \x01(\tR\x04hash\x12!\n" + + "\finstall_path\x18\x03 \x01(\tR\vinstallPath\x12\x18\n" + + "\aextract\x18\x04 \x01(\bR\aextractBFZDgithub.com/edgelesssys/constellation/v2/internal/versions/componentsb\x06proto3" var ( file_internal_versions_components_components_proto_rawDescOnce sync.Once diff --git a/joinservice/joinproto/join.pb.go b/joinservice/joinproto/join.pb.go index 3e14cad75..9c8af76d7 100644 --- a/joinservice/joinproto/join.pb.go +++ b/joinservice/joinproto/join.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.36.5 +// protoc-gen-go v1.36.6 // protoc v5.29.1 // source: joinservice/joinproto/join.proto @@ -360,90 +360,37 @@ func (x *IssueRejoinTicketResponse) GetMeasurementSecret() []byte { var File_joinservice_joinproto_join_proto protoreflect.FileDescriptor -var file_joinservice_joinproto_join_proto_rawDesc = string([]byte{ - 0x0a, 0x20, 0x6a, 0x6f, 0x69, 0x6e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x6a, 0x6f, - 0x69, 0x6e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x6a, 0x6f, 0x69, 0x6e, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x12, 0x04, 0x6a, 0x6f, 0x69, 0x6e, 0x1a, 0x2d, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, - 0x61, 0x6c, 0x2f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x63, 0x6f, 0x6d, 0x70, - 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x73, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, - 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x90, 0x01, 0x0a, 0x16, 0x49, 0x73, 0x73, 0x75, - 0x65, 0x4a, 0x6f, 0x69, 0x6e, 0x54, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x64, 0x69, 0x73, 0x6b, 0x5f, 0x75, 0x75, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x64, 0x69, 0x73, 0x6b, 0x55, 0x75, 0x69, 0x64, 0x12, - 0x2f, 0x0a, 0x13, 0x63, 0x65, 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x5f, 0x72, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x12, 0x63, 0x65, - 0x72, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x28, 0x0a, 0x10, 0x69, 0x73, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x5f, 0x70, - 0x6c, 0x61, 0x6e, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x69, 0x73, 0x43, 0x6f, - 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x50, 0x6c, 0x61, 0x6e, 0x65, 0x22, 0xc7, 0x04, 0x0a, 0x17, 0x49, - 0x73, 0x73, 0x75, 0x65, 0x4a, 0x6f, 0x69, 0x6e, 0x54, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x24, 0x0a, 0x0e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x5f, - 0x64, 0x69, 0x73, 0x6b, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0c, - 0x73, 0x74, 0x61, 0x74, 0x65, 0x44, 0x69, 0x73, 0x6b, 0x4b, 0x65, 0x79, 0x12, 0x29, 0x0a, 0x10, - 0x6d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x73, 0x61, 0x6c, 0x74, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0f, 0x6d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x6d, - 0x65, 0x6e, 0x74, 0x53, 0x61, 0x6c, 0x74, 0x12, 0x2d, 0x0a, 0x12, 0x6d, 0x65, 0x61, 0x73, 0x75, - 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x0c, 0x52, 0x11, 0x6d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, - 0x53, 0x65, 0x63, 0x72, 0x65, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x6b, 0x75, 0x62, 0x65, 0x6c, 0x65, - 0x74, 0x5f, 0x63, 0x65, 0x72, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0b, 0x6b, 0x75, - 0x62, 0x65, 0x6c, 0x65, 0x74, 0x43, 0x65, 0x72, 0x74, 0x12, 0x2e, 0x0a, 0x13, 0x61, 0x70, 0x69, - 0x5f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x65, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x61, 0x70, 0x69, 0x53, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x45, 0x6e, 0x64, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, - 0x65, 0x6e, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, - 0x3e, 0x0a, 0x1c, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, 0x5f, 0x74, 0x6f, 0x6b, - 0x65, 0x6e, 0x5f, 0x63, 0x61, 0x5f, 0x63, 0x65, 0x72, 0x74, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x18, - 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, 0x18, 0x64, 0x69, 0x73, 0x63, 0x6f, 0x76, 0x65, 0x72, 0x79, - 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x43, 0x61, 0x43, 0x65, 0x72, 0x74, 0x48, 0x61, 0x73, 0x68, 0x12, - 0x4f, 0x0a, 0x13, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x5f, 0x70, 0x6c, 0x61, 0x6e, 0x65, - 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x6a, - 0x6f, 0x69, 0x6e, 0x2e, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x5f, 0x70, 0x6c, 0x61, 0x6e, - 0x65, 0x5f, 0x63, 0x65, 0x72, 0x74, 0x5f, 0x6f, 0x72, 0x5f, 0x6b, 0x65, 0x79, 0x52, 0x11, 0x63, - 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x50, 0x6c, 0x61, 0x6e, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x73, - 0x12, 0x2d, 0x0a, 0x12, 0x6b, 0x75, 0x62, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x65, 0x73, 0x5f, 0x76, - 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x6b, 0x75, - 0x62, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x65, 0x73, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, - 0x4a, 0x0a, 0x15, 0x6b, 0x75, 0x62, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x65, 0x73, 0x5f, 0x63, 0x6f, - 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x0a, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, - 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x70, - 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x52, 0x14, 0x6b, 0x75, 0x62, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x65, - 0x73, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x37, 0x0a, 0x18, 0x61, - 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x64, 0x5f, 0x63, 0x61, 0x5f, 0x70, 0x75, 0x62, - 0x6c, 0x69, 0x63, 0x5f, 0x6b, 0x65, 0x79, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x15, 0x61, - 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x7a, 0x65, 0x64, 0x43, 0x61, 0x50, 0x75, 0x62, 0x6c, 0x69, - 0x63, 0x4b, 0x65, 0x79, 0x22, 0x43, 0x0a, 0x19, 0x63, 0x6f, 0x6e, 0x74, 0x72, 0x6f, 0x6c, 0x5f, - 0x70, 0x6c, 0x61, 0x6e, 0x65, 0x5f, 0x63, 0x65, 0x72, 0x74, 0x5f, 0x6f, 0x72, 0x5f, 0x6b, 0x65, - 0x79, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0x37, 0x0a, 0x18, 0x49, 0x73, 0x73, - 0x75, 0x65, 0x52, 0x65, 0x6a, 0x6f, 0x69, 0x6e, 0x54, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x64, 0x69, 0x73, 0x6b, 0x5f, 0x75, 0x75, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x64, 0x69, 0x73, 0x6b, 0x55, 0x75, - 0x69, 0x64, 0x22, 0x70, 0x0a, 0x19, 0x49, 0x73, 0x73, 0x75, 0x65, 0x52, 0x65, 0x6a, 0x6f, 0x69, - 0x6e, 0x54, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x24, 0x0a, 0x0e, 0x73, 0x74, 0x61, 0x74, 0x65, 0x5f, 0x64, 0x69, 0x73, 0x6b, 0x5f, 0x6b, 0x65, - 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0c, 0x73, 0x74, 0x61, 0x74, 0x65, 0x44, 0x69, - 0x73, 0x6b, 0x4b, 0x65, 0x79, 0x12, 0x2d, 0x0a, 0x12, 0x6d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, - 0x6d, 0x65, 0x6e, 0x74, 0x5f, 0x73, 0x65, 0x63, 0x72, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0c, 0x52, 0x11, 0x6d, 0x65, 0x61, 0x73, 0x75, 0x72, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x65, - 0x63, 0x72, 0x65, 0x74, 0x32, 0xab, 0x01, 0x0a, 0x03, 0x41, 0x50, 0x49, 0x12, 0x4e, 0x0a, 0x0f, - 0x49, 0x73, 0x73, 0x75, 0x65, 0x4a, 0x6f, 0x69, 0x6e, 0x54, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x12, - 0x1c, 0x2e, 0x6a, 0x6f, 0x69, 0x6e, 0x2e, 0x49, 0x73, 0x73, 0x75, 0x65, 0x4a, 0x6f, 0x69, 0x6e, - 0x54, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1d, 0x2e, - 0x6a, 0x6f, 0x69, 0x6e, 0x2e, 0x49, 0x73, 0x73, 0x75, 0x65, 0x4a, 0x6f, 0x69, 0x6e, 0x54, 0x69, - 0x63, 0x6b, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x54, 0x0a, 0x11, - 0x49, 0x73, 0x73, 0x75, 0x65, 0x52, 0x65, 0x6a, 0x6f, 0x69, 0x6e, 0x54, 0x69, 0x63, 0x6b, 0x65, - 0x74, 0x12, 0x1e, 0x2e, 0x6a, 0x6f, 0x69, 0x6e, 0x2e, 0x49, 0x73, 0x73, 0x75, 0x65, 0x52, 0x65, - 0x6a, 0x6f, 0x69, 0x6e, 0x54, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x1f, 0x2e, 0x6a, 0x6f, 0x69, 0x6e, 0x2e, 0x49, 0x73, 0x73, 0x75, 0x65, 0x52, 0x65, - 0x6a, 0x6f, 0x69, 0x6e, 0x54, 0x69, 0x63, 0x6b, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x42, 0x3f, 0x5a, 0x3d, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, - 0x2f, 0x65, 0x64, 0x67, 0x65, 0x6c, 0x65, 0x73, 0x73, 0x73, 0x79, 0x73, 0x2f, 0x63, 0x6f, 0x6e, - 0x73, 0x74, 0x65, 0x6c, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x76, 0x32, 0x2f, 0x6a, 0x6f, - 0x69, 0x6e, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x6a, 0x6f, 0x69, 0x6e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -}) +const file_joinservice_joinproto_join_proto_rawDesc = "" + + "\n" + + " joinservice/joinproto/join.proto\x12\x04join\x1a-internal/versions/components/components.proto\"\x90\x01\n" + + "\x16IssueJoinTicketRequest\x12\x1b\n" + + "\tdisk_uuid\x18\x01 \x01(\tR\bdiskUuid\x12/\n" + + "\x13certificate_request\x18\x02 \x01(\fR\x12certificateRequest\x12(\n" + + "\x10is_control_plane\x18\x03 \x01(\bR\x0eisControlPlane\"\xc7\x04\n" + + "\x17IssueJoinTicketResponse\x12$\n" + + "\x0estate_disk_key\x18\x01 \x01(\fR\fstateDiskKey\x12)\n" + + "\x10measurement_salt\x18\x02 \x01(\fR\x0fmeasurementSalt\x12-\n" + + "\x12measurement_secret\x18\x03 \x01(\fR\x11measurementSecret\x12!\n" + + "\fkubelet_cert\x18\x04 \x01(\fR\vkubeletCert\x12.\n" + + "\x13api_server_endpoint\x18\x05 \x01(\tR\x11apiServerEndpoint\x12\x14\n" + + "\x05token\x18\x06 \x01(\tR\x05token\x12>\n" + + "\x1cdiscovery_token_ca_cert_hash\x18\a \x01(\tR\x18discoveryTokenCaCertHash\x12O\n" + + "\x13control_plane_files\x18\b \x03(\v2\x1f.join.control_plane_cert_or_keyR\x11controlPlaneFiles\x12-\n" + + "\x12kubernetes_version\x18\t \x01(\tR\x11kubernetesVersion\x12J\n" + + "\x15kubernetes_components\x18\n" + + " \x03(\v2\x15.components.ComponentR\x14kubernetesComponents\x127\n" + + "\x18authorized_ca_public_key\x18\v \x01(\fR\x15authorizedCaPublicKey\"C\n" + + "\x19control_plane_cert_or_key\x12\x12\n" + + "\x04name\x18\x01 \x01(\tR\x04name\x12\x12\n" + + "\x04data\x18\x02 \x01(\fR\x04data\"7\n" + + "\x18IssueRejoinTicketRequest\x12\x1b\n" + + "\tdisk_uuid\x18\x01 \x01(\tR\bdiskUuid\"p\n" + + "\x19IssueRejoinTicketResponse\x12$\n" + + "\x0estate_disk_key\x18\x01 \x01(\fR\fstateDiskKey\x12-\n" + + "\x12measurement_secret\x18\x02 \x01(\fR\x11measurementSecret2\xab\x01\n" + + "\x03API\x12N\n" + + "\x0fIssueJoinTicket\x12\x1c.join.IssueJoinTicketRequest\x1a\x1d.join.IssueJoinTicketResponse\x12T\n" + + "\x11IssueRejoinTicket\x12\x1e.join.IssueRejoinTicketRequest\x1a\x1f.join.IssueRejoinTicketResponseB?Z=github.com/edgelesssys/constellation/v2/joinservice/joinprotob\x06proto3" var ( file_joinservice_joinproto_join_proto_rawDescOnce sync.Once diff --git a/keyservice/keyserviceproto/keyservice.pb.go b/keyservice/keyserviceproto/keyservice.pb.go index 56591b1b8..ee7a23ff2 100644 --- a/keyservice/keyserviceproto/keyservice.pb.go +++ b/keyservice/keyserviceproto/keyservice.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.36.5 +// protoc-gen-go v1.36.6 // protoc v5.29.1 // source: keyservice/keyserviceproto/keyservice.proto @@ -123,29 +123,17 @@ func (x *GetDataKeyResponse) GetDataKey() []byte { var File_keyservice_keyserviceproto_keyservice_proto protoreflect.FileDescriptor -var file_keyservice_keyserviceproto_keyservice_proto_rawDesc = string([]byte{ - 0x0a, 0x2b, 0x6b, 0x65, 0x79, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x6b, 0x65, 0x79, - 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x6b, 0x65, 0x79, - 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x03, 0x6b, - 0x6d, 0x73, 0x22, 0x4b, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x44, 0x61, 0x74, 0x61, 0x4b, 0x65, 0x79, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1e, 0x0a, 0x0b, 0x64, 0x61, 0x74, 0x61, 0x5f, - 0x6b, 0x65, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x64, 0x61, - 0x74, 0x61, 0x4b, 0x65, 0x79, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x6c, 0x65, 0x6e, 0x67, 0x74, - 0x68, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x6c, 0x65, 0x6e, 0x67, 0x74, 0x68, 0x22, - 0x2f, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x44, 0x61, 0x74, 0x61, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x6b, 0x65, - 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x64, 0x61, 0x74, 0x61, 0x4b, 0x65, 0x79, - 0x32, 0x44, 0x0a, 0x03, 0x41, 0x50, 0x49, 0x12, 0x3d, 0x0a, 0x0a, 0x47, 0x65, 0x74, 0x44, 0x61, - 0x74, 0x61, 0x4b, 0x65, 0x79, 0x12, 0x16, 0x2e, 0x6b, 0x6d, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x44, - 0x61, 0x74, 0x61, 0x4b, 0x65, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x17, 0x2e, - 0x6b, 0x6d, 0x73, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x61, 0x74, 0x61, 0x4b, 0x65, 0x79, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x44, 0x5a, 0x42, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, - 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x65, 0x64, 0x67, 0x65, 0x6c, 0x65, 0x73, 0x73, 0x73, 0x79, 0x73, - 0x2f, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x65, 0x6c, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x76, - 0x32, 0x2f, 0x6b, 0x65, 0x79, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x2f, 0x6b, 0x65, 0x79, - 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x06, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x33, -}) +const file_keyservice_keyserviceproto_keyservice_proto_rawDesc = "" + + "\n" + + "+keyservice/keyserviceproto/keyservice.proto\x12\x03kms\"K\n" + + "\x11GetDataKeyRequest\x12\x1e\n" + + "\vdata_key_id\x18\x01 \x01(\tR\tdataKeyId\x12\x16\n" + + "\x06length\x18\x02 \x01(\rR\x06length\"/\n" + + "\x12GetDataKeyResponse\x12\x19\n" + + "\bdata_key\x18\x01 \x01(\fR\adataKey2D\n" + + "\x03API\x12=\n" + + "\n" + + "GetDataKey\x12\x16.kms.GetDataKeyRequest\x1a\x17.kms.GetDataKeyResponseBDZBgithub.com/edgelesssys/constellation/v2/keyservice/keyserviceprotob\x06proto3" var ( file_keyservice_keyserviceproto_keyservice_proto_rawDescOnce sync.Once diff --git a/upgrade-agent/upgradeproto/upgrade.pb.go b/upgrade-agent/upgradeproto/upgrade.pb.go index 5375ce64a..c220690cb 100644 --- a/upgrade-agent/upgradeproto/upgrade.pb.go +++ b/upgrade-agent/upgradeproto/upgrade.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.36.5 +// protoc-gen-go v1.36.6 // protoc v5.29.1 // source: upgrade-agent/upgradeproto/upgrade.proto @@ -116,39 +116,15 @@ func (*ExecuteUpdateResponse) Descriptor() ([]byte, []int) { var File_upgrade_agent_upgradeproto_upgrade_proto protoreflect.FileDescriptor -var file_upgrade_agent_upgradeproto_upgrade_proto_rawDesc = string([]byte{ - 0x0a, 0x28, 0x75, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x2d, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x2f, - 0x75, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x75, 0x70, 0x67, - 0x72, 0x61, 0x64, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x07, 0x75, 0x70, 0x67, 0x72, - 0x61, 0x64, 0x65, 0x1a, 0x2d, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x76, 0x65, - 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, - 0x73, 0x2f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x73, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x22, 0xc5, 0x01, 0x0a, 0x14, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x55, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x3a, 0x0a, 0x19, 0x77, - 0x61, 0x6e, 0x74, 0x65, 0x64, 0x5f, 0x6b, 0x75, 0x62, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x65, 0x73, - 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x17, - 0x77, 0x61, 0x6e, 0x74, 0x65, 0x64, 0x4b, 0x75, 0x62, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x65, 0x73, - 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x4a, 0x0a, 0x15, 0x6b, 0x75, 0x62, 0x65, 0x72, - 0x6e, 0x65, 0x74, 0x65, 0x73, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x73, - 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, - 0x6e, 0x74, 0x73, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, 0x6e, 0x74, 0x52, 0x14, 0x6b, - 0x75, 0x62, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x65, 0x73, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x6e, 0x65, - 0x6e, 0x74, 0x73, 0x4a, 0x04, 0x08, 0x01, 0x10, 0x02, 0x4a, 0x04, 0x08, 0x02, 0x10, 0x03, 0x52, - 0x0b, 0x6b, 0x75, 0x62, 0x65, 0x61, 0x64, 0x6d, 0x5f, 0x75, 0x72, 0x6c, 0x52, 0x0c, 0x6b, 0x75, - 0x62, 0x65, 0x61, 0x64, 0x6d, 0x5f, 0x68, 0x61, 0x73, 0x68, 0x22, 0x17, 0x0a, 0x15, 0x45, 0x78, - 0x65, 0x63, 0x75, 0x74, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x32, 0x58, 0x0a, 0x06, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x4e, 0x0a, - 0x0d, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x12, 0x1d, - 0x2e, 0x75, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, - 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, - 0x75, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x2e, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x65, 0x55, - 0x70, 0x64, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x44, 0x5a, - 0x42, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x65, 0x64, 0x67, 0x65, - 0x6c, 0x65, 0x73, 0x73, 0x73, 0x79, 0x73, 0x2f, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x65, 0x6c, 0x6c, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x76, 0x32, 0x2f, 0x75, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, - 0x2d, 0x61, 0x67, 0x65, 0x6e, 0x74, 0x2f, 0x75, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -}) +const file_upgrade_agent_upgradeproto_upgrade_proto_rawDesc = "" + + "\n" + + "(upgrade-agent/upgradeproto/upgrade.proto\x12\aupgrade\x1a-internal/versions/components/components.proto\"\xc5\x01\n" + + "\x14ExecuteUpdateRequest\x12:\n" + + "\x19wanted_kubernetes_version\x18\x03 \x01(\tR\x17wantedKubernetesVersion\x12J\n" + + "\x15kubernetes_components\x18\x04 \x03(\v2\x15.components.ComponentR\x14kubernetesComponentsJ\x04\b\x01\x10\x02J\x04\b\x02\x10\x03R\vkubeadm_urlR\fkubeadm_hash\"\x17\n" + + "\x15ExecuteUpdateResponse2X\n" + + "\x06Update\x12N\n" + + "\rExecuteUpdate\x12\x1d.upgrade.ExecuteUpdateRequest\x1a\x1e.upgrade.ExecuteUpdateResponseBDZBgithub.com/edgelesssys/constellation/v2/upgrade-agent/upgradeprotob\x06proto3" var ( file_upgrade_agent_upgradeproto_upgrade_proto_rawDescOnce sync.Once diff --git a/verify/verifyproto/verify.pb.go b/verify/verifyproto/verify.pb.go index aaddd9395..e48755baa 100644 --- a/verify/verifyproto/verify.pb.go +++ b/verify/verifyproto/verify.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.36.5 +// protoc-gen-go v1.36.6 // protoc v5.29.1 // source: verify/verifyproto/verify.proto @@ -115,28 +115,15 @@ func (x *GetAttestationResponse) GetAttestation() []byte { var File_verify_verifyproto_verify_proto protoreflect.FileDescriptor -var file_verify_verifyproto_verify_proto_rawDesc = string([]byte{ - 0x0a, 0x1f, 0x76, 0x65, 0x72, 0x69, 0x66, 0x79, 0x2f, 0x76, 0x65, 0x72, 0x69, 0x66, 0x79, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x2f, 0x76, 0x65, 0x72, 0x69, 0x66, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x12, 0x06, 0x76, 0x65, 0x72, 0x69, 0x66, 0x79, 0x22, 0x2d, 0x0a, 0x15, 0x47, 0x65, 0x74, - 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0c, 0x52, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x22, 0x3a, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x41, - 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x61, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0b, 0x61, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x32, 0x56, 0x0a, 0x03, 0x41, 0x50, 0x49, 0x12, 0x4f, 0x0a, 0x0e, 0x47, - 0x65, 0x74, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1d, 0x2e, - 0x76, 0x65, 0x72, 0x69, 0x66, 0x79, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x1e, 0x2e, 0x76, - 0x65, 0x72, 0x69, 0x66, 0x79, 0x2e, 0x47, 0x65, 0x74, 0x41, 0x74, 0x74, 0x65, 0x73, 0x74, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x42, 0x3c, 0x5a, 0x3a, - 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x65, 0x64, 0x67, 0x65, 0x6c, - 0x65, 0x73, 0x73, 0x73, 0x79, 0x73, 0x2f, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x65, 0x6c, 0x6c, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x76, 0x32, 0x2f, 0x76, 0x65, 0x72, 0x69, 0x66, 0x79, 0x2f, 0x76, - 0x65, 0x72, 0x69, 0x66, 0x79, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x33, -}) +const file_verify_verifyproto_verify_proto_rawDesc = "" + + "\n" + + "\x1fverify/verifyproto/verify.proto\x12\x06verify\"-\n" + + "\x15GetAttestationRequest\x12\x14\n" + + "\x05nonce\x18\x02 \x01(\fR\x05nonce\":\n" + + "\x16GetAttestationResponse\x12 \n" + + "\vattestation\x18\x01 \x01(\fR\vattestation2V\n" + + "\x03API\x12O\n" + + "\x0eGetAttestation\x12\x1d.verify.GetAttestationRequest\x1a\x1e.verify.GetAttestationResponseB Date: Wed, 2 Apr 2025 16:21:19 +0200 Subject: [PATCH 192/311] dev-docs: Add guide on publishing marketplace images (#3734) Signed-off-by: Moritz Sanft <58110325+msanft@users.noreply.github.com> --- dev-docs/workflows/marketplace-publishing.md | 33 ++++++++++++++++++++ dev-docs/workflows/release.md | 10 +----- 2 files changed, 34 insertions(+), 9 deletions(-) create mode 100644 dev-docs/workflows/marketplace-publishing.md diff --git a/dev-docs/workflows/marketplace-publishing.md b/dev-docs/workflows/marketplace-publishing.md new file mode 100644 index 000000000..aa0513b2f --- /dev/null +++ b/dev-docs/workflows/marketplace-publishing.md @@ -0,0 +1,33 @@ +# Publishing Marketplace Images + +Constellation release images need to be manually published to AWS and Azure marketplaces due to the lack of automation features. +On GCP, marketplace image publishing is automated and takes place on release. + +This document explains how to perform the uploading on AWS and Azure. + +## AWS + +1. Log in to the [AWS marketplace management portal](https://aws.amazon.com/marketplace/management/) with your regular developer AWS account. +2. Select "Products -> Server -> Constellation" in the top menu. +3. Select "Versions" in the main menu and press "Add version". +4. Fill in the form. + 1. Enter the semantic version of the release (i.e. `vX.Y.Z`) as "Version title". + 2. Set the version tag in "Release notes" to the same version. + 3. For the "Amazon Machine Image (AMI) ID", enter the AMI ID of the release (SEV-SNP) image. This can be found in the regular + [AWS console](https://us-east-1.console.aws.amazon.com/ec2/home?region=us-east-1#Images:visibility=owned-by-me;search=:constellation-v;v=3;$case=tags:false%5C,client:false;$regex=tags:false%5C,client:false;sort=desc:creationDate). + 4. For "IAM access role ARN", enter `arn:aws:iam::795746500882:role/constellation-marketplace-ingest`. +5. Leave the other fields as they are and press "Add version". +6. Wait for the [request](https://aws.amazon.com/marketplace/management/requests) to be processed and available before publishing the release. + +## Azure + +1. Log in to the [Microsoft partner center](https://partner.microsoft.com/en-us/dashboard/home) with your regular developer Microsoft account. +2. Select "Marketplace offers -> Constellation -> Constellation Node" in the main menu. +3. Select "Technical configuration" in the sidebar on the left. +4. Select "Add VM Image". + 1. For the "Version number", enter the semantic version of the release without the `v` prefix. If the release version is `vX.Y.Z`, enter `X.Y.Z`. + 2. Press "Add a gallery image" and select the corresponding "Constellation_CVM" image version in the menu. + 3. Press "Save VM image". +5. **IMPORTANT**: Hit **Save draft**. Do **NOT** hit "Review and publish" directly. +6. **After** saving the draft, hit "Review and publish". +7. Go back to the [offer's home page](https://partner.microsoft.com/en-us/dashboard/commercial-marketplace/offers/a53ac90b-06f7-4a20-a845-8607ca352e61/overview) and wait for the process to complete before publishing the release. diff --git a/dev-docs/workflows/release.md b/dev-docs/workflows/release.md index be873d563..619d28744 100644 --- a/dev-docs/workflows/release.md +++ b/dev-docs/workflows/release.md @@ -86,15 +86,7 @@ Releases should be performed using [the automated release pipeline](https://gith 1. Publish the [provider release](https://github.com/edgelesssys/terraform-provider-constellation/releases) 2. Merge the automated post release PR -3. Write an email to STACKIT to inform them of the new release. For this, you require the name and UUID of the release image. You can find the email address in our internal [wiki](https://github.com/edgelesssys/wiki/blob/master/documentation/constellation/stackit.md): - - ```shell-session - export OS_CLOUD=stackit - openstack image list | grep constellation - # the output should look similar to this, where the first column is the UUID and the second column is the name - # | 25edf48d-161f-452b-b420-963c3a80abd8 | constellation-stable-v2.16.4-qemu-vtpm | active | - ``` - +3. Publish the [AWS and Azure marketplace images](./marketplace-publishing.md). 4. Close fixed "known issues" 5. Move open issues and PRs from this release's closed milestone to next milestone 6. Reset `UpgradeRequiresIAMMigration` in [`iamupgrade.go`](https://github.com/edgelesssys/constellation/blob/a88a731576184e3c5ee8527741c4a0cdaa4e9b24/cli/internal/cloudcmd/iamupgrade.go#L23). From 1079fba20016fdfc0c269710388c8d7d5e23261c Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 3 Apr 2025 07:37:51 +0200 Subject: [PATCH 193/311] deps: update dependency DeterminateSystems/nix-installer to v3.2.1 (#3736) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/reproducible-builds.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/reproducible-builds.yml b/.github/workflows/reproducible-builds.yml index 3d2255363..9c66abe57 100644 --- a/.github/workflows/reproducible-builds.yml +++ b/.github/workflows/reproducible-builds.yml @@ -57,7 +57,7 @@ jobs: chmod a+x "$HOME/.local/bin/bazel" echo "$HOME/.local/bin" >> "$GITHUB_PATH" - curl -fsSL -o "$HOME/.local/bin/nix-installer" https://github.com/DeterminateSystems/nix-installer/releases/download/v3.2.0/nix-installer-x86_64-linux # renovate:github-release + curl -fsSL -o "$HOME/.local/bin/nix-installer" https://github.com/DeterminateSystems/nix-installer/releases/download/v3.2.1/nix-installer-x86_64-linux # renovate:github-release nixVersion=$(cat .nixversion) chmod a+x "$HOME/.local/bin/nix-installer" "$HOME/.local/bin/nix-installer" install --no-confirm --nix-package-url "https://releases.nixos.org/nix/nix-$nixVersion/nix-$nixVersion-x86_64-linux.tar.xz" From ba0865706e51d2dc2fc0088d902718a9b16c8f64 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 3 Apr 2025 09:47:12 +0200 Subject: [PATCH 194/311] deps: update bazel (plugins) (#3675) * deps: update bazel (plugins) Co-Authored-By: Markus Rudy * deps: tidy all modules --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Markus Rudy Co-authored-by: edgelessci --- .../source.bzl | 8 ++++---- bazel/toolchains/container_images.bzl | 2 +- bazel/toolchains/oci_deps.bzl | 8 ++++---- terraform/infrastructure/iam/aws/alb_policy.json | 7 +++++-- 4 files changed, 14 insertions(+), 11 deletions(-) diff --git a/3rdparty/bazel/com_github_kubernetes_sigs_aws_load_balancer_controller/source.bzl b/3rdparty/bazel/com_github_kubernetes_sigs_aws_load_balancer_controller/source.bzl index 7765fefc0..e2c1e8034 100644 --- a/3rdparty/bazel/com_github_kubernetes_sigs_aws_load_balancer_controller/source.bzl +++ b/3rdparty/bazel/com_github_kubernetes_sigs_aws_load_balancer_controller/source.bzl @@ -6,10 +6,10 @@ def aws_load_balancer_controller_deps(): http_archive( name = "com_github_kubernetes_sigs_aws_load_balancer_controller", urls = [ - "https://cdn.confidential.cloud/constellation/cas/sha256/0cb78cdff9742945c9968ac12c785164a052b52260d19d218bb28a8bec04a2fd", - "https://github.com/kubernetes-sigs/aws-load-balancer-controller/archive/refs/tags/v2.11.0.tar.gz", + "https://cdn.confidential.cloud/constellation/cas/sha256/422af7c03ebc73e1be6aea563475ec9ea6396071fa03158b9a3984aa621b8cb1", + "https://github.com/kubernetes-sigs/aws-load-balancer-controller/archive/refs/tags/v2.12.0.tar.gz", ], - strip_prefix = "aws-load-balancer-controller-2.11.0", + strip_prefix = "aws-load-balancer-controller-2.12.0", build_file_content = """ filegroup( srcs = ["docs/install/iam_policy.json"], @@ -18,5 +18,5 @@ filegroup( ) """, type = "tar.gz", - sha256 = "0cb78cdff9742945c9968ac12c785164a052b52260d19d218bb28a8bec04a2fd", + sha256 = "422af7c03ebc73e1be6aea563475ec9ea6396071fa03158b9a3984aa621b8cb1", ) diff --git a/bazel/toolchains/container_images.bzl b/bazel/toolchains/container_images.bzl index f260c6bd5..eedd9279a 100644 --- a/bazel/toolchains/container_images.bzl +++ b/bazel/toolchains/container_images.bzl @@ -7,7 +7,7 @@ load("@rules_oci//oci:pull.bzl", "oci_pull") def containter_image_deps(): oci_pull( name = "distroless_static", - digest = "sha256:3f2b64ef97bd285e36132c684e6b2ae8f2723293d09aae046196cca64251acac", + digest = "sha256:3d0f463de06b7ddff27684ec3bfd0b54a425149d0f8685308b1fdf297b0265e9", image = "gcr.io/distroless/static", platforms = [ "linux/amd64", diff --git a/bazel/toolchains/oci_deps.bzl b/bazel/toolchains/oci_deps.bzl index dd1063ddc..f425e9066 100644 --- a/bazel/toolchains/oci_deps.bzl +++ b/bazel/toolchains/oci_deps.bzl @@ -7,13 +7,13 @@ def oci_deps(): # Remove this override once https://github.com/bazel-contrib/rules_oci/issues/420 is fixed. http_archive( name = "rules_oci", - strip_prefix = "rules_oci-2.2.1", + strip_prefix = "rules_oci-2.2.5", type = "tar.gz", urls = [ - "https://cdn.confidential.cloud/constellation/cas/sha256/cfea16076ebbec1faea494882ab97d94b1a62d6bcd5aceabad8f95ea0d0a1361", - "https://github.com/bazel-contrib/rules_oci/releases/download/v2.2.1/rules_oci-v2.2.1.tar.gz", + "https://cdn.confidential.cloud/constellation/cas/sha256/361c417e8c95cd7c3d8b5cf4b202e76bac8d41532131534ff8e6fa43aa161142", + "https://github.com/bazel-contrib/rules_oci/releases/download/v2.2.5/rules_oci-v2.2.5.tar.gz", ], - sha256 = "cfea16076ebbec1faea494882ab97d94b1a62d6bcd5aceabad8f95ea0d0a1361", + sha256 = "361c417e8c95cd7c3d8b5cf4b202e76bac8d41532131534ff8e6fa43aa161142", patches = ["//bazel/toolchains:0001-disable-Windows-support.patch"], patch_args = ["-p1"], ) diff --git a/terraform/infrastructure/iam/aws/alb_policy.json b/terraform/infrastructure/iam/aws/alb_policy.json index 1a5b4d614..fe1976170 100644 --- a/terraform/infrastructure/iam/aws/alb_policy.json +++ b/terraform/infrastructure/iam/aws/alb_policy.json @@ -30,6 +30,7 @@ "ec2:GetCoipPoolUsage", "ec2:DescribeCoipPools", "ec2:GetSecurityGroupsForVpc", + "ec2:DescribeIpamPools", "elasticloadbalancing:DescribeLoadBalancers", "elasticloadbalancing:DescribeLoadBalancerAttributes", "elasticloadbalancing:DescribeListeners", @@ -193,7 +194,8 @@ "elasticloadbalancing:ModifyTargetGroupAttributes", "elasticloadbalancing:DeleteTargetGroup", "elasticloadbalancing:ModifyListenerAttributes", - "elasticloadbalancing:ModifyCapacityReservation" + "elasticloadbalancing:ModifyCapacityReservation", + "elasticloadbalancing:ModifyIpPools" ], "Resource": "*", "Condition": { @@ -239,7 +241,8 @@ "elasticloadbalancing:ModifyListener", "elasticloadbalancing:AddListenerCertificates", "elasticloadbalancing:RemoveListenerCertificates", - "elasticloadbalancing:ModifyRule" + "elasticloadbalancing:ModifyRule", + "elasticloadbalancing:SetRulePriorities" ], "Resource": "*" } From ae50f8b5001049902e70628ee082d73152e91a3f Mon Sep 17 00:00:00 2001 From: edgelessci <71088502+edgelessci@users.noreply.github.com> Date: Fri, 4 Apr 2025 08:15:19 +0200 Subject: [PATCH 195/311] image: update measurements and image version (#3739) Co-authored-by: edgelessci --- .../measurements/measurements_enterprise.go | 16 ++++++++-------- internal/config/image_enterprise.go | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/internal/attestation/measurements/measurements_enterprise.go b/internal/attestation/measurements/measurements_enterprise.go index 0d1297ac4..1cb577d4f 100644 --- a/internal/attestation/measurements/measurements_enterprise.go +++ b/internal/attestation/measurements/measurements_enterprise.go @@ -19,14 +19,14 @@ package measurements // revive:disable:var-naming var ( - aws_AWSNitroTPM = M{0: {Expected: []byte{0x73, 0x7f, 0x76, 0x7a, 0x12, 0xf5, 0x4e, 0x70, 0xee, 0xcb, 0xc8, 0x68, 0x40, 0x11, 0x32, 0x3a, 0xe2, 0xfe, 0x2d, 0xd9, 0xf9, 0x07, 0x85, 0x57, 0x79, 0x69, 0xd7, 0xa2, 0x01, 0x3e, 0x8c, 0x12}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xff, 0xba, 0x72, 0x15, 0xb3, 0xca, 0x90, 0x19, 0xbb, 0x23, 0xa0, 0xcf, 0xcb, 0xfb, 0x6e, 0xb0, 0xa3, 0xc0, 0x09, 0xd9, 0xc3, 0x0e, 0x4f, 0x4c, 0xc2, 0x3e, 0xb8, 0xf7, 0x78, 0xec, 0x93, 0xe6}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x96, 0x0b, 0x27, 0xba, 0x9a, 0xb7, 0xa4, 0xad, 0x79, 0x21, 0x37, 0x14, 0x98, 0xa1, 0xa1, 0x6e, 0xf4, 0xa8, 0xac, 0x22, 0x8a, 0x43, 0xd2, 0x66, 0xd4, 0x10, 0xa3, 0xe8, 0xd3, 0x63, 0xf0, 0x41}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x46, 0x29, 0x39, 0x11, 0xea, 0x74, 0x45, 0xa8, 0x56, 0xc0, 0x7b, 0x65, 0x32, 0xf9, 0x88, 0x86, 0x5b, 0xc0, 0x8e, 0xa2, 0xde, 0x5e, 0x05, 0x9e, 0x1f, 0x52, 0xa6, 0x05, 0x2c, 0xa4, 0x22, 0xaa}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - aws_AWSSEVSNP = M{0: {Expected: []byte{0xd6, 0xdf, 0x85, 0x53, 0x58, 0xf5, 0xb1, 0x0f, 0x06, 0xf0, 0xfa, 0xb3, 0xf4, 0x08, 0xad, 0x26, 0xcd, 0x16, 0x5a, 0x29, 0x49, 0xba, 0xd6, 0x9e, 0x2c, 0xc7, 0x56, 0x92, 0x52, 0x9e, 0x66, 0x2a}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xb9, 0x7d, 0x66, 0x85, 0x9a, 0xb6, 0xff, 0x3f, 0x0a, 0xa8, 0xcb, 0x8e, 0x3f, 0x4b, 0x41, 0x35, 0x73, 0x4e, 0xa8, 0xdd, 0x3b, 0x0c, 0x52, 0x35, 0x83, 0x44, 0xef, 0x36, 0xdf, 0xda, 0xaf, 0xce}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xc1, 0x66, 0x40, 0x9b, 0xde, 0xb5, 0x0f, 0xb1, 0x39, 0xd9, 0x7e, 0x44, 0x02, 0x2e, 0xec, 0x8f, 0x02, 0x85, 0xc7, 0xfe, 0x2b, 0xc9, 0xec, 0xce, 0xdf, 0x02, 0x51, 0x58, 0x86, 0x7e, 0x0a, 0x83}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x11, 0x28, 0xf0, 0x85, 0x14, 0x8e, 0x29, 0x6c, 0x2e, 0x64, 0x8c, 0x18, 0x2c, 0x99, 0xe5, 0xfa, 0x0b, 0x21, 0xd9, 0xbe, 0xb9, 0x8b, 0xc6, 0xfe, 0xda, 0x9a, 0xad, 0x9e, 0xf7, 0x9c, 0x10, 0xf7}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - azure_AzureSEVSNP = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x89, 0x50, 0x5a, 0x26, 0x1b, 0x7a, 0xb4, 0x9e, 0x16, 0x56, 0xb1, 0xd3, 0x28, 0xfa, 0x50, 0x7d, 0x12, 0x6d, 0x48, 0x91, 0x98, 0xd5, 0xea, 0x3a, 0x20, 0xa2, 0x51, 0xe0, 0x64, 0x4b, 0xa2, 0xc3}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xc1, 0x79, 0xa3, 0x8b, 0x17, 0x25, 0xda, 0x77, 0x62, 0x64, 0x1c, 0x08, 0x80, 0x11, 0x60, 0x64, 0x09, 0xdd, 0x20, 0x69, 0xbd, 0xbe, 0x99, 0x32, 0xcc, 0x03, 0x82, 0x1d, 0x14, 0x21, 0x85, 0xa2}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x47, 0xc1, 0x82, 0xec, 0x41, 0xd4, 0xc5, 0xe0, 0x3d, 0x9a, 0x32, 0xa3, 0x89, 0x25, 0x74, 0x28, 0x76, 0x57, 0xa0, 0xc0, 0x71, 0x79, 0xcb, 0xb7, 0x7d, 0xb3, 0x67, 0x3d, 0x96, 0xa8, 0xe2, 0xc3}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - azure_AzureTDX = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xec, 0x52, 0xe8, 0x25, 0x6d, 0xfb, 0xe0, 0xf5, 0xa3, 0x64, 0x14, 0x32, 0x94, 0x26, 0x99, 0xac, 0x76, 0xca, 0x69, 0x8b, 0xc6, 0x5f, 0x71, 0xcf, 0x8e, 0x56, 0x7f, 0x12, 0xbd, 0xab, 0x1b, 0xb9}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x3d, 0x8e, 0x9e, 0x91, 0x3c, 0x53, 0x41, 0xf0, 0x5b, 0x50, 0x03, 0x47, 0xfa, 0xef, 0x89, 0xde, 0x1c, 0x56, 0xd3, 0xd7, 0x33, 0xe0, 0x33, 0x0a, 0x1b, 0xf6, 0xdd, 0x09, 0x3f, 0xea, 0xd3, 0x5f}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xe9, 0x2a, 0x6b, 0xe7, 0x86, 0x7c, 0x4d, 0x6f, 0xf4, 0x4e, 0x15, 0x7b, 0x14, 0xc9, 0xc0, 0xbc, 0x38, 0x04, 0x0c, 0xab, 0x5a, 0x7c, 0xba, 0x77, 0xac, 0x4e, 0x2c, 0xaa, 0x4d, 0x54, 0xf8, 0xda}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + aws_AWSNitroTPM = M{0: {Expected: []byte{0x73, 0x7f, 0x76, 0x7a, 0x12, 0xf5, 0x4e, 0x70, 0xee, 0xcb, 0xc8, 0x68, 0x40, 0x11, 0x32, 0x3a, 0xe2, 0xfe, 0x2d, 0xd9, 0xf9, 0x07, 0x85, 0x57, 0x79, 0x69, 0xd7, 0xa2, 0x01, 0x3e, 0x8c, 0x12}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xaa, 0x8e, 0x3d, 0xf4, 0x08, 0x73, 0xe5, 0x93, 0x73, 0x2a, 0xd5, 0xc9, 0xb4, 0x2e, 0x4f, 0xac, 0xab, 0x2a, 0xcd, 0xe8, 0x3a, 0x53, 0x35, 0x3b, 0x9f, 0xb1, 0xe6, 0xc0, 0xae, 0x7b, 0xc3, 0x08}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x6e, 0x6f, 0xf5, 0xa5, 0xdb, 0x95, 0x90, 0x0e, 0xe3, 0xad, 0x2b, 0x75, 0x5a, 0x87, 0x31, 0x47, 0x8c, 0x0d, 0x7a, 0x7d, 0x19, 0x71, 0x08, 0x97, 0x93, 0xc3, 0x41, 0x2e, 0xe6, 0x2a, 0x51, 0x57}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x49, 0x20, 0x74, 0xcc, 0x27, 0x88, 0x36, 0x8b, 0x60, 0x76, 0x11, 0xe9, 0xdf, 0x78, 0x07, 0xb3, 0xcb, 0x17, 0x4f, 0xac, 0xce, 0x66, 0x69, 0xc6, 0x03, 0x90, 0xf1, 0x5f, 0x93, 0xde, 0xf1, 0x08}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + aws_AWSSEVSNP = M{0: {Expected: []byte{0xd6, 0xdf, 0x85, 0x53, 0x58, 0xf5, 0xb1, 0x0f, 0x06, 0xf0, 0xfa, 0xb3, 0xf4, 0x08, 0xad, 0x26, 0xcd, 0x16, 0x5a, 0x29, 0x49, 0xba, 0xd6, 0x9e, 0x2c, 0xc7, 0x56, 0x92, 0x52, 0x9e, 0x66, 0x2a}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xeb, 0xc0, 0x4e, 0x60, 0x15, 0xdc, 0x14, 0x3f, 0x40, 0x04, 0x23, 0xa7, 0x0a, 0x7e, 0xcc, 0x03, 0x70, 0x61, 0xc4, 0x3b, 0x17, 0x00, 0x0c, 0x90, 0xfe, 0x70, 0xef, 0x34, 0x11, 0x46, 0x0d, 0x50}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x2f, 0xdf, 0x35, 0x5c, 0xa5, 0xcd, 0x31, 0xdb, 0x41, 0x44, 0x1a, 0xaf, 0x07, 0x88, 0x3e, 0xa5, 0x39, 0x9c, 0x22, 0x10, 0xe1, 0x95, 0x6d, 0x97, 0xed, 0xa5, 0x35, 0xbd, 0x6a, 0x12, 0xa4, 0x3f}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x52, 0x95, 0x6e, 0x48, 0x07, 0x5b, 0x7c, 0x43, 0x35, 0xe0, 0x6b, 0xa4, 0x8d, 0xb6, 0x73, 0xc7, 0x45, 0x34, 0xa4, 0xf1, 0x21, 0x87, 0x09, 0x5c, 0x7a, 0x96, 0x0a, 0xb4, 0x03, 0xd2, 0x21, 0xeb}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + azure_AzureSEVSNP = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x99, 0x51, 0x82, 0x62, 0x6f, 0xd1, 0x1a, 0x02, 0x65, 0x0d, 0x6c, 0xc9, 0x06, 0xd3, 0x9f, 0x2e, 0xd2, 0x39, 0xac, 0x07, 0x4a, 0x55, 0xa0, 0xcc, 0x60, 0x9b, 0x28, 0x44, 0xf3, 0xf1, 0x39, 0xe0}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xde, 0x1d, 0xaf, 0x0b, 0xc0, 0x9c, 0xcc, 0x77, 0x9b, 0x3c, 0x10, 0xc0, 0xff, 0xb5, 0x7b, 0x93, 0x52, 0xa6, 0x15, 0x28, 0x7e, 0xab, 0xb4, 0xdd, 0x6a, 0x97, 0xc6, 0x93, 0x96, 0xc8, 0xa6, 0xde}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x57, 0xdc, 0x86, 0x87, 0x32, 0x69, 0x73, 0xca, 0xa0, 0xcc, 0x3c, 0xdd, 0xbd, 0xff, 0x27, 0x60, 0x92, 0xb0, 0xbb, 0x6d, 0xa8, 0xc9, 0x01, 0x2e, 0xf8, 0x47, 0x34, 0x32, 0x7f, 0x8c, 0xe1, 0x17}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + azure_AzureTDX = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xc1, 0xdf, 0x6d, 0xc0, 0x27, 0x43, 0xe9, 0x0b, 0x80, 0x92, 0x18, 0xc5, 0x93, 0x0e, 0xfd, 0xdc, 0xe4, 0xd7, 0x9f, 0xc0, 0x42, 0x50, 0x83, 0xeb, 0xa4, 0xbb, 0x00, 0xa8, 0x09, 0xa2, 0x0a, 0x0e}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xb6, 0x1f, 0x0b, 0xb1, 0xdc, 0x0b, 0x8b, 0x81, 0x77, 0xad, 0xe5, 0x5c, 0x00, 0x94, 0xe0, 0x16, 0xe9, 0xf5, 0xbb, 0x0f, 0xc4, 0x95, 0xa2, 0x5d, 0xbd, 0x38, 0xb7, 0x0e, 0xe7, 0x1c, 0x10, 0xaa}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x37, 0xe0, 0xd7, 0x3f, 0x86, 0x03, 0x43, 0xa7, 0xa2, 0x2a, 0x70, 0x4b, 0x17, 0x12, 0xb4, 0x50, 0xca, 0xac, 0xb2, 0xb6, 0xe1, 0xc1, 0xed, 0xb0, 0xbd, 0xfd, 0x99, 0x65, 0xf9, 0x7a, 0x00, 0x79}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} azure_AzureTrustedLaunch M - gcp_GCPSEVES = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x39, 0xa4, 0xae, 0x08, 0x76, 0x93, 0x98, 0x81, 0x6a, 0x98, 0xab, 0xd4, 0xe9, 0xb1, 0xb9, 0xb4, 0x54, 0xdf, 0xfe, 0x6f, 0x0b, 0x5e, 0xb4, 0x96, 0xaa, 0xfa, 0xc9, 0xb1, 0x09, 0x49, 0x81, 0x63}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x6b, 0xa4, 0xf8, 0xb5, 0x68, 0x94, 0x12, 0xc8, 0xeb, 0x48, 0xd4, 0x01, 0x5c, 0xb1, 0xed, 0x68, 0xe3, 0xdb, 0xa3, 0x9c, 0x38, 0x3a, 0x92, 0x01, 0x18, 0xf2, 0x44, 0x6e, 0xfb, 0x3a, 0x3f, 0x30}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x6c, 0x5a, 0x46, 0x52, 0x12, 0xd4, 0x5d, 0x36, 0x41, 0xfe, 0x7f, 0xc5, 0xe8, 0xa4, 0x10, 0xa4, 0xcb, 0xb0, 0xd4, 0xa5, 0xeb, 0x0f, 0x50, 0x8f, 0x7b, 0xc2, 0x57, 0xf0, 0xb7, 0x61, 0xf4, 0xc1}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - gcp_GCPSEVSNP = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x1e, 0x97, 0x86, 0x46, 0x00, 0x75, 0x9c, 0x9c, 0xa6, 0xb3, 0xdc, 0x2e, 0xc9, 0x7f, 0xd0, 0xa5, 0xda, 0xb5, 0x5d, 0x50, 0x29, 0x91, 0xbf, 0x1d, 0x8c, 0x34, 0x10, 0xfb, 0x68, 0xd3, 0xf7, 0x68}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x54, 0xd1, 0xcd, 0xa3, 0x2a, 0x3d, 0x07, 0x9d, 0x8b, 0x87, 0x11, 0xae, 0x64, 0xe2, 0x85, 0x0f, 0x28, 0xd2, 0xa6, 0x2b, 0x8b, 0x55, 0x4c, 0x65, 0x52, 0x4d, 0x04, 0x47, 0x04, 0x4b, 0x7a, 0x26}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x1a, 0x03, 0x4e, 0x7b, 0x2c, 0x15, 0x72, 0xfe, 0x76, 0xb3, 0x5b, 0xf2, 0x8f, 0xb5, 0x41, 0x65, 0x86, 0x03, 0x0b, 0xbd, 0x0a, 0xa6, 0x55, 0xcd, 0x75, 0x73, 0x86, 0xf1, 0x9e, 0x0d, 0xd2, 0x9f}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - openstack_QEMUVTPM = M{4: {Expected: []byte{0x1b, 0x0c, 0xc2, 0xa9, 0x68, 0x3c, 0x9a, 0x57, 0xac, 0xbe, 0xd4, 0x95, 0x74, 0x45, 0x11, 0xd6, 0x96, 0x52, 0xa3, 0x25, 0x87, 0x25, 0xac, 0xa6, 0x48, 0x1b, 0x9d, 0x3c, 0x1f, 0x6d, 0xf7, 0xf0}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xce, 0x1d, 0x99, 0xc6, 0x2a, 0xcf, 0x46, 0x28, 0xa4, 0xcf, 0xbf, 0x2f, 0x4a, 0x52, 0xa5, 0xa1, 0x0b, 0x63, 0x64, 0x74, 0xf9, 0x2c, 0xfc, 0xd3, 0x0a, 0x6e, 0xfb, 0x37, 0x6d, 0x74, 0x1c, 0x02}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xe4, 0x34, 0x6a, 0xa6, 0x26, 0xd2, 0x94, 0x10, 0x16, 0x00, 0x0d, 0xef, 0xc6, 0xdf, 0x66, 0x3f, 0xad, 0x31, 0x9a, 0x04, 0x65, 0xa9, 0x7f, 0xaa, 0xd3, 0x49, 0x59, 0xe8, 0x78, 0x62, 0xd7, 0x7a}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + gcp_GCPSEVES = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x57, 0x9a, 0x5f, 0x7c, 0x74, 0xb1, 0x65, 0x67, 0x3b, 0x9a, 0x4a, 0x21, 0x53, 0x39, 0x09, 0x34, 0x44, 0x19, 0x74, 0x98, 0xb8, 0x05, 0x86, 0xe6, 0x29, 0x4e, 0x6d, 0x05, 0x74, 0xd3, 0xc8, 0xdf}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x2f, 0x98, 0xc6, 0x46, 0x97, 0x58, 0x90, 0xa8, 0x24, 0x47, 0x80, 0x5c, 0xea, 0xa9, 0xfe, 0x15, 0x53, 0xd1, 0xcd, 0xdc, 0xcf, 0x8d, 0xaa, 0xe4, 0x7f, 0x72, 0xa2, 0x9c, 0x45, 0x94, 0xb7, 0xb7}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x63, 0x02, 0xe3, 0x38, 0x41, 0xe8, 0x2f, 0x31, 0xa8, 0x54, 0x62, 0x80, 0x1d, 0xac, 0xdf, 0x3e, 0xac, 0x58, 0xe0, 0x56, 0x75, 0xe3, 0x44, 0xc3, 0x3f, 0x04, 0x28, 0x50, 0x93, 0x0a, 0x82, 0x97}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + gcp_GCPSEVSNP = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xdf, 0x43, 0x2f, 0x88, 0x32, 0x39, 0xf0, 0x95, 0x79, 0x51, 0x3a, 0x1a, 0xd7, 0x6b, 0xb8, 0x99, 0x41, 0x34, 0x49, 0xbd, 0x2c, 0x47, 0x32, 0x0d, 0x50, 0xf3, 0xef, 0x7c, 0xdc, 0xaa, 0x88, 0xb8}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x67, 0x20, 0x88, 0xd9, 0x1e, 0x64, 0x02, 0xa5, 0x93, 0xe6, 0xd9, 0xd8, 0x20, 0x42, 0xfa, 0xf2, 0x4b, 0x1e, 0xc5, 0xbb, 0x78, 0x42, 0xe3, 0x4d, 0x3d, 0x5a, 0x52, 0x94, 0x5c, 0xcf, 0xf4, 0xdc}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xaf, 0xf5, 0x56, 0xa8, 0xaa, 0x7c, 0x13, 0x6f, 0x85, 0x9a, 0x27, 0x84, 0x41, 0x7c, 0xec, 0x53, 0xab, 0xaf, 0xca, 0x14, 0x77, 0x0d, 0xbe, 0xd2, 0xaf, 0xf4, 0x66, 0x05, 0x06, 0x57, 0x97, 0x42}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + openstack_QEMUVTPM = M{4: {Expected: []byte{0x90, 0x87, 0x99, 0x56, 0xb2, 0xe2, 0x0f, 0xd2, 0x6a, 0xc3, 0x43, 0xcb, 0x1a, 0xaf, 0x9e, 0x1d, 0xbe, 0x98, 0x0c, 0xb4, 0xf2, 0xaf, 0xa4, 0x10, 0x8c, 0xc4, 0x14, 0x28, 0x83, 0x76, 0x50, 0xda}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x46, 0xf6, 0x85, 0x8b, 0x5a, 0xfe, 0xa0, 0x95, 0x40, 0xe7, 0x84, 0x89, 0xc7, 0x33, 0xff, 0x35, 0x3d, 0xfe, 0xb4, 0xfe, 0x32, 0xce, 0xb4, 0x66, 0x11, 0xc1, 0xdc, 0x2b, 0x77, 0xc9, 0x6f, 0xc8}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x99, 0x3a, 0xe5, 0x85, 0x6b, 0x4a, 0xe9, 0xb3, 0x70, 0xd3, 0xf2, 0x8a, 0x25, 0x7d, 0xfa, 0x79, 0x52, 0x52, 0x72, 0xc8, 0xd9, 0x90, 0xed, 0x95, 0x23, 0xfe, 0x02, 0x44, 0x77, 0x9e, 0x91, 0xf0}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} qemu_QEMUTDX M - qemu_QEMUVTPM = M{4: {Expected: []byte{0x56, 0x19, 0xa6, 0x2d, 0x9b, 0x1b, 0x50, 0xa3, 0xfe, 0x21, 0x5b, 0x2a, 0x23, 0x98, 0xbc, 0xe6, 0x82, 0xe2, 0xb8, 0xc1, 0xb9, 0x05, 0x23, 0xc7, 0x51, 0x43, 0x69, 0x5b, 0x42, 0x41, 0x86, 0x62}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xc1, 0x80, 0x14, 0xf7, 0xbb, 0x45, 0x7e, 0xfc, 0x3f, 0xe7, 0x2e, 0x8d, 0x3a, 0x0e, 0xc1, 0x9b, 0x4d, 0x38, 0xb0, 0x76, 0x8e, 0x27, 0x5b, 0x1a, 0xe2, 0xe4, 0x56, 0x3f, 0xb2, 0xcb, 0x7a, 0xf0}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x86, 0x61, 0x04, 0xb3, 0xed, 0x54, 0x6a, 0xeb, 0x9e, 0xdf, 0x2d, 0x17, 0x9f, 0x0e, 0xf2, 0x91, 0xeb, 0xa3, 0xe6, 0x69, 0xe5, 0xbb, 0x00, 0xcf, 0xa3, 0x7a, 0x43, 0x5e, 0xad, 0xff, 0x70, 0x57}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + qemu_QEMUVTPM = M{4: {Expected: []byte{0xad, 0xa5, 0xdc, 0xdd, 0x9f, 0x8e, 0x5e, 0xc9, 0x41, 0x09, 0x0c, 0x33, 0x7e, 0x6a, 0xc3, 0xc8, 0x32, 0xf2, 0x30, 0x31, 0x20, 0x68, 0xe4, 0x54, 0x52, 0x3b, 0x17, 0xb4, 0x91, 0x63, 0x0d, 0xd6}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xf5, 0x24, 0x31, 0xf7, 0xb7, 0x16, 0xb1, 0x4b, 0xc8, 0x07, 0xff, 0xa3, 0xa1, 0x02, 0x5a, 0x7c, 0xb3, 0xb6, 0xf6, 0xe5, 0xfe, 0x8c, 0x0a, 0x83, 0x05, 0x31, 0x7f, 0xd3, 0x9c, 0xeb, 0x74, 0x59}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x4b, 0xa9, 0x19, 0xd7, 0x91, 0x06, 0x35, 0xb3, 0xee, 0x3c, 0xbf, 0x82, 0x76, 0x52, 0xed, 0xaa, 0x03, 0x88, 0x41, 0xd1, 0x2a, 0x0e, 0x34, 0xbb, 0x2e, 0x31, 0xe1, 0x35, 0xb4, 0xd7, 0x63, 0x4b}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} ) diff --git a/internal/config/image_enterprise.go b/internal/config/image_enterprise.go index ab2142527..1ebcd6b86 100644 --- a/internal/config/image_enterprise.go +++ b/internal/config/image_enterprise.go @@ -10,5 +10,5 @@ package config const ( // defaultImage is the default image to use. - defaultImage = "ref/main/stream/nightly/v2.23.0-pre.0.20250401105226-700eb60614f4" + defaultImage = "ref/main/stream/nightly/v2.23.0-pre.0.20250403094712-ba0865706e51" ) From d742243cdc7dd6e826fb8dcbad5c111dfde8191e Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 4 Apr 2025 08:27:22 +0200 Subject: [PATCH 196/311] deps: update Constellation containers (#3737) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- internal/versions/versions.go | 6 +++--- s3proxy/deploy/s3proxy/values.yaml | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/internal/versions/versions.go b/internal/versions/versions.go index b8b327fec..aa0625a95 100644 --- a/internal/versions/versions.go +++ b/internal/versions/versions.go @@ -173,11 +173,11 @@ const ( // NodeMaintenanceOperatorImage is the image for the node maintenance operator. NodeMaintenanceOperatorImage = "quay.io/medik8s/node-maintenance-operator:v0.17.0@sha256:bf1c5758b3d266dd6234422d156c67ffdd47f50f70ce17d5cef1de6065030337" // renovate:container // LogstashImage is the container image of logstash, used for log collection by debugd. - LogstashImage = "ghcr.io/edgelesssys/constellation/logstash-debugd:v2.20.0-pre.0.20241128161539-b99bd53066cf@sha256:726d2e3a15d6fa83d2d64e6f0ecc9b725c5f135ff2be51d1e0e4052d3f5e784e" // renovate:container + LogstashImage = "ghcr.io/edgelesssys/constellation/logstash-debugd:v2.22.0-pre.0.20250401104011-810c8448d9ad@sha256:48d3de1c066a502ffa97b45ed39028a1e9cf0a63f5b57d29f9826c4d860f1a28" // renovate:container // FilebeatImage is the container image of filebeat, used for log collection by debugd. - FilebeatImage = "ghcr.io/edgelesssys/constellation/filebeat-debugd:v2.20.0-pre.0.20241128161539-b99bd53066cf@sha256:ab030e79c7bb93aea93f5a787c95c566cab41f4a45e2012577c1f31615f8e687" // renovate:container + FilebeatImage = "ghcr.io/edgelesssys/constellation/filebeat-debugd:v2.22.0-pre.0.20250401104011-810c8448d9ad@sha256:7dc8044f9968b9984a1a6da46ea24f7979223938ea9bf01d9847edabb1dc4c35" // renovate:container // MetricbeatImage is the container image of filebeat, used for log collection by debugd. - MetricbeatImage = "ghcr.io/edgelesssys/constellation/metricbeat-debugd:v2.20.0-pre.0.20241128161539-b99bd53066cf@sha256:f406201b3897acbaae41d75d42ebeda02ad08ddad1a3a4527a1b1d86a27ca4cb" // renovate:container + MetricbeatImage = "ghcr.io/edgelesssys/constellation/metricbeat-debugd:v2.22.0-pre.0.20250401104011-810c8448d9ad@sha256:6df163384d3a905c8a182683a551b151f324588d1fbbf410c3988447b934e597" // renovate:container // currently supported versions. //nolint:revive diff --git a/s3proxy/deploy/s3proxy/values.yaml b/s3proxy/deploy/s3proxy/values.yaml index f80d07960..31a45843a 100644 --- a/s3proxy/deploy/s3proxy/values.yaml +++ b/s3proxy/deploy/s3proxy/values.yaml @@ -3,7 +3,7 @@ awsAccessKeyID: "replaceme" awsSecretAccessKey: "replaceme" # Pod image to deploy. -image: "ghcr.io/edgelesssys/constellation/s3proxy:v2.22.0" +image: "ghcr.io/edgelesssys/constellation/s3proxy:v2.23.0-pre.0.20250403094712-ba0865706e51" # Control if multipart uploads are blocked. allowMultipart: false From 0926b82a659d488ae680b72fb43685aa6e029ca8 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 4 Apr 2025 08:37:49 +0200 Subject: [PATCH 197/311] deps: update ghcr.io/edgelesssys/gcp-guest-agent Docker tag to v20250331 (#3738) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- internal/versions/versions.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/versions/versions.go b/internal/versions/versions.go index aa0625a95..00ec517d0 100644 --- a/internal/versions/versions.go +++ b/internal/versions/versions.go @@ -169,7 +169,7 @@ const ( // GcpGuestImage image for GCP guest agent. // Check for new versions at https://github.com/GoogleCloudPlatform/guest-agent/releases and update in /.github/workflows/build-gcp-guest-agent.yml. - GcpGuestImage = "ghcr.io/edgelesssys/gcp-guest-agent:v20250324.1.0@sha256:f69408c6e64ded3df4afcc764b417697d71e955103939cc0c574cfb43ce5c156" // renovate:container + GcpGuestImage = "ghcr.io/edgelesssys/gcp-guest-agent:v20250331.0.0@sha256:25275c58c5c1719e4eb371f79eda65203122c7cfd232cd4cdf521afafeaad15e" // renovate:container // NodeMaintenanceOperatorImage is the image for the node maintenance operator. NodeMaintenanceOperatorImage = "quay.io/medik8s/node-maintenance-operator:v0.17.0@sha256:bf1c5758b3d266dd6234422d156c67ffdd47f50f70ce17d5cef1de6065030337" // renovate:container // LogstashImage is the container image of logstash, used for log collection by debugd. From e5d22ebcaf2b9e44e9a3e7618501b26172065a5a Mon Sep 17 00:00:00 2001 From: Moritz Sanft <58110325+msanft@users.noreply.github.com> Date: Fri, 4 Apr 2025 10:22:28 +0200 Subject: [PATCH 198/311] nix: boostrap "v2" tree (#3740) Signed-off-by: Moritz Sanft <58110325+msanft@users.noreply.github.com> --- flake.lock | 10 ++-- flake.nix | 55 ++++++++++++------- .../by-name/constellationRepoRoot/package.nix | 3 + .../constellationRepoRootSrc/package.nix | 12 ++++ .../by-name/constellationVersion/package.nix | 3 + nix/lib/default.nix | 8 +++ .../buildConstellationGoModule/package.nix | 26 +++++++++ .../package.nix | 19 +++++++ nix/packages/default.nix | 8 +++ 9 files changed, 119 insertions(+), 25 deletions(-) create mode 100644 nix/lib/by-name/constellationRepoRoot/package.nix create mode 100644 nix/lib/by-name/constellationRepoRootSrc/package.nix create mode 100644 nix/lib/by-name/constellationVersion/package.nix create mode 100644 nix/lib/default.nix create mode 100644 nix/packages/by-name/buildConstellationGoModule/package.nix create mode 100644 nix/packages/by-name/constellation-canonical-go-package/package.nix create mode 100644 nix/packages/default.nix diff --git a/flake.lock b/flake.lock index 8af6033f5..20317b8ab 100644 --- a/flake.lock +++ b/flake.lock @@ -18,13 +18,13 @@ "type": "github" } }, - "nixpkgsUnstable": { + "nixpkgs": { "locked": { - "lastModified": 1733376361, - "narHash": "sha256-aLJxoTDDSqB+/3orsulE6/qdlX6MzDLIITLZqdgMpqo=", + "lastModified": 1743689281, + "narHash": "sha256-y7Hg5lwWhEOgflEHRfzSH96BOt26LaYfrYWzZ+VoVdg=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "929116e316068c7318c54eb4d827f7d9756d5e9c", + "rev": "2bfc080955153be0be56724be6fa5477b4eefabb", "type": "github" }, "original": { @@ -37,7 +37,7 @@ "root": { "inputs": { "flake-utils": "flake-utils", - "nixpkgsUnstable": "nixpkgsUnstable" + "nixpkgs": "nixpkgs" } }, "systems": { diff --git a/flake.nix b/flake.nix index 16bd15b4a..d160d9852 100644 --- a/flake.nix +++ b/flake.nix @@ -2,7 +2,7 @@ description = "Constellation"; inputs = { - nixpkgsUnstable = { + nixpkgs = { url = "github:NixOS/nixpkgs/nixpkgs-unstable"; }; flake-utils = { @@ -13,21 +13,29 @@ outputs = { self, - nixpkgsUnstable, + nixpkgs, flake-utils, }: flake-utils.lib.eachDefaultSystem ( system: let - pkgsUnstable = import nixpkgsUnstable { inherit system; }; + pkgs = import nixpkgs { + inherit system; + config.allowUnfree = true; - callPackage = pkgsUnstable.callPackage; + overlays = [ + (_final: prev: (import ./nix/packages { inherit (prev) lib callPackage; })) + (_final: prev: { lib = prev.lib // (import ./nix/lib { inherit (prev) lib callPackage; }); }) + ]; + }; + + callPackage = pkgs.callPackage; mkosiDev = ( - pkgsUnstable.mkosi.overrideAttrs (oldAttrs: { + pkgs.mkosi.overrideAttrs (oldAttrs: { propagatedBuildInputs = oldAttrs.propagatedBuildInputs - ++ (with pkgsUnstable; [ + ++ (with pkgs; [ # package management dnf5 rpm @@ -52,41 +60,48 @@ ); in { + # Use `legacyPackages` instead of `packages` for the reason explained here: + # https://github.com/NixOS/nixpkgs/blob/34def00657d7c45c51b0762eb5f5309689a909a5/flake.nix#L138-L156 + # Note that it's *not* a legacy attribute. + legacyPackages = { + generate = pkgs.callPackage ./nix/generate.nix { }; + } // pkgs; + packages.mkosi = mkosiDev; - packages.uplosi = pkgsUnstable.uplosi; + packages.uplosi = pkgs.uplosi; - packages.openssl = callPackage ./nix/cc/openssl.nix { pkgs = pkgsUnstable; }; + packages.openssl = callPackage ./nix/cc/openssl.nix { pkgs = pkgs; }; packages.cryptsetup = callPackage ./nix/cc/cryptsetup.nix { - pkgs = pkgsUnstable; - pkgsLinux = import nixpkgsUnstable { system = "x86_64-linux"; }; + pkgs = pkgs; + pkgsLinux = import nixpkgs { system = "x86_64-linux"; }; }; packages.libvirt = callPackage ./nix/cc/libvirt.nix { - pkgs = pkgsUnstable; - pkgsLinux = import nixpkgsUnstable { system = "x86_64-linux"; }; + pkgs = pkgs; + pkgsLinux = import nixpkgs { system = "x86_64-linux"; }; }; packages.libvirtd_base = callPackage ./nix/container/libvirtd_base.nix { - pkgs = pkgsUnstable; - pkgsLinux = import nixpkgsUnstable { system = "x86_64-linux"; }; + pkgs = pkgs; + pkgsLinux = import nixpkgs { system = "x86_64-linux"; }; }; packages.vpn = callPackage ./nix/container/vpn/vpn.nix { - pkgs = pkgsUnstable; - pkgsLinux = import nixpkgsUnstable { system = "x86_64-linux"; }; + pkgs = pkgs; + pkgsLinux = import nixpkgs { system = "x86_64-linux"; }; }; - packages.awscli2 = pkgsUnstable.awscli2; + packages.awscli2 = pkgs.awscli2; - packages.createrepo_c = pkgsUnstable.createrepo_c; + packages.createrepo_c = pkgs.createrepo_c; - packages.dnf5 = pkgsUnstable.dnf5; + packages.dnf5 = pkgs.dnf5; devShells.default = callPackage ./nix/shells/default.nix { }; - formatter = nixpkgsUnstable.legacyPackages.${system}.nixpkgs-fmt; + formatter = nixpkgs.legacyPackages.${system}.nixpkgs-fmt; } ); } diff --git a/nix/lib/by-name/constellationRepoRoot/package.nix b/nix/lib/by-name/constellationRepoRoot/package.nix new file mode 100644 index 000000000..38c9cdefa --- /dev/null +++ b/nix/lib/by-name/constellationRepoRoot/package.nix @@ -0,0 +1,3 @@ +# Returns a reference to the root path of the Constellation repository. + +_: ../../../../. diff --git a/nix/lib/by-name/constellationRepoRootSrc/package.nix b/nix/lib/by-name/constellationRepoRootSrc/package.nix new file mode 100644 index 000000000..462df7ab1 --- /dev/null +++ b/nix/lib/by-name/constellationRepoRootSrc/package.nix @@ -0,0 +1,12 @@ +# Returns a package set originating from the root of the Constellation repository. +# The `files` attribute is a list of paths relative to the root of the repository. + +{ lib }: +files: +let + filteredFiles = lib.map (subpath: lib.path.append lib.constellationRepoRoot subpath) files; +in +lib.fileset.toSource { + root = lib.constellationRepoRoot; + fileset = lib.fileset.unions filteredFiles; +} diff --git a/nix/lib/by-name/constellationVersion/package.nix b/nix/lib/by-name/constellationVersion/package.nix new file mode 100644 index 000000000..b65ebe85e --- /dev/null +++ b/nix/lib/by-name/constellationVersion/package.nix @@ -0,0 +1,3 @@ +# Returns the current Continuum version, as defined in `version.txt`. + +{ lib }: builtins.readFile (lib.path.append lib.constellationRepoRoot "version.txt") diff --git a/nix/lib/default.nix b/nix/lib/default.nix new file mode 100644 index 000000000..bd731cbf3 --- /dev/null +++ b/nix/lib/default.nix @@ -0,0 +1,8 @@ +{ + lib, + callPackage, +}: +lib.packagesFromDirectoryRecursive { + inherit callPackage; + directory = ./by-name; +} diff --git a/nix/packages/by-name/buildConstellationGoModule/package.nix b/nix/packages/by-name/buildConstellationGoModule/package.nix new file mode 100644 index 000000000..b58d020e0 --- /dev/null +++ b/nix/packages/by-name/buildConstellationGoModule/package.nix @@ -0,0 +1,26 @@ +# A 'wrapped' Go builder for Constellation, which doesn't require a `vendorHash` to be set in each package. +# Instead, one central vendor hash is set here, and all packages inherit it. + +{ + buildGo124Module, + constellation-canonical-go-package, +}: +args: +(buildGo124Module ( + { + # We run tests in CI, so don't run them at build time. + doCheck = false; + + # Disable CGO by default. + env.CGO_ENABLED = "0"; + } + // args +)).overrideAttrs + (_oldAttrs: { + inherit (constellation-canonical-go-package) + goModules + vendorHash + proxyVendor + deleteVendor + ; + }) diff --git a/nix/packages/by-name/constellation-canonical-go-package/package.nix b/nix/packages/by-name/constellation-canonical-go-package/package.nix new file mode 100644 index 000000000..0fd299ffd --- /dev/null +++ b/nix/packages/by-name/constellation-canonical-go-package/package.nix @@ -0,0 +1,19 @@ +{ + lib, + buildGo124Module, +}: +buildGo124Module { + pname = "constellation-canonical-go-package"; + version = lib.constellationVersion; + + src = lib.constellationRepoRootSrc [ + "go.mod" + "go.sum" + ]; + + vendorHash = "sha256-McWiTTz1HTdG3x0LI87CF6oTRFtxSiV3LCCBJb9YG4U="; + + doCheck = false; + + proxyVendor = true; +} diff --git a/nix/packages/default.nix b/nix/packages/default.nix new file mode 100644 index 000000000..bd731cbf3 --- /dev/null +++ b/nix/packages/default.nix @@ -0,0 +1,8 @@ +{ + lib, + callPackage, +}: +lib.packagesFromDirectoryRecursive { + inherit callPackage; + directory = ./by-name; +} From 819ec9a22ca1411143220d859f86c2b1c6e2ae6e Mon Sep 17 00:00:00 2001 From: Moritz Sanft <58110325+msanft@users.noreply.github.com> Date: Fri, 4 Apr 2025 11:19:37 +0200 Subject: [PATCH 199/311] ci: rename nixpkgs input (#3741) Signed-off-by: Moritz Sanft <58110325+msanft@users.noreply.github.com> --- .github/actions/setup_bazel_nix/action.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/actions/setup_bazel_nix/action.yml b/.github/actions/setup_bazel_nix/action.yml index 7e6e6b5c0..97beb3a6f 100644 --- a/.github/actions/setup_bazel_nix/action.yml +++ b/.github/actions/setup_bazel_nix/action.yml @@ -221,7 +221,7 @@ runs: { tools, repository, rev }: let repoFlake = builtins.getFlake ("github:" + repository + "/" + rev); - nixpkgs = repoFlake.inputs.nixpkgsUnstable; + nixpkgs = repoFlake.inputs.nixpkgs; pkgs = import nixpkgs { system = builtins.currentSystem; }; toolPkgs = map (p: pkgs.${p}) tools; in From ad250ac78f38cf20c2cabfe12aaef4a37181e6c5 Mon Sep 17 00:00:00 2001 From: edgelessci <71088502+edgelessci@users.noreply.github.com> Date: Sun, 6 Apr 2025 10:29:53 +0200 Subject: [PATCH 200/311] image: update locked rpms (#3742) Co-authored-by: edgelessci --- image/mirror/SHA256SUMS | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/image/mirror/SHA256SUMS b/image/mirror/SHA256SUMS index 5f33fb5e4..668afb985 100644 --- a/image/mirror/SHA256SUMS +++ b/image/mirror/SHA256SUMS @@ -58,7 +58,7 @@ f7778242b3242fab35a5e0c4f0919ca9823a47c7b296f274ff312cc2c49ba6e7 elfutils-libel a322c6f44f82bc21558f3bb7afc694dbdc28a41340280d3a2c5da2656a339d2f elfutils-libs-0.192-9.fc40.i686.rpm 184235133a6873a42b72d2d88657f12dd4b4b603fd5058fbd02daa0a7308f69c elfutils-libs-0.192-9.fc40.x86_64.rpm 95cf8ee199b2e1b3471f920ebad57d3d8178f5e68d37ee35a8a94727473ec8d3 ethtool-6.11-1.fc40.x86_64.rpm -77981061416892abd7369751cbbe60c9fe3eaa2a71c4f240ccac6cec7f8d43a5 expat-2.7.0-1.fc40.x86_64.rpm +136ed00bff4d44ab7bd6d0926c4b80c2f5ee9160dc4f698be988ca3d37303b4d expat-2.7.1-1.fc40.x86_64.rpm 849feb04544096f9bbe16bc78c2198708fe658bdafa08575c911e538a7d31c18 fedora-gpg-keys-40-2.noarch.rpm 8f0a56982aa10b607bd3b8009e91bac1a7d9b7ba40eb4435ff9bd9efe7e5e76e fedora-release-40-40.noarch.rpm dde6f4b5d4415ce20df40cf1cb9ff3015aa5b1896c5b5625e49aa686cdce1d1d fedora-release-common-40-40.noarch.rpm @@ -239,7 +239,7 @@ b404c27af03bb1e43fb0dc472d5a1fa152e0563fa2e4eefa29199c47578a829b nano-default-e 8a93376ce7423bd1a649a13f4b5105f270b4603f5cf3b3e230bdbda7f25dd788 ncurses-base-6.4-12.20240127.fc40.noarch.rpm 39bba59320e6276a3b7b07bc94d319511bdd7d32ba098fd49723f4d542794d41 ncurses-libs-6.4-12.20240127.fc40.i686.rpm a18edf32e89aefd453998d5d0ec3aa1ea193dac43f80b99db195abd7e8cf1a04 ncurses-libs-6.4-12.20240127.fc40.x86_64.rpm -7ef5aebdfb3a51f6ed7ba6b9d428417a0cb5b8ad1c53515df459bc700b85da6e netavark-1.14.0-1.fc40.x86_64.rpm +60d1e0058d38ab2ea6b08f59341e7db34c8bec37a387ad5c0565bbc38d5170fd netavark-1.14.1-1.fc40.x86_64.rpm 16172412cfd45453292e18f84fc57e42a3ce92aca72b47ef7e15b44554049cfe nettle-3.9.1-6.fc40.x86_64.rpm 188ce5004e6ed764b4a619b64a4a0f36f1cc4fa919fe0a300599ff1171844144 nftables-1.0.9-3.fc40.x86_64.rpm 784e0fbc9ccb7087c10f4c41edbed13904f94244ff658f308614abe48cdf0d42 npth-1.7-1.fc40.x86_64.rpm @@ -278,9 +278,9 @@ af85755cda79959a19161ebc26a45e507003298bd97b472b9ab0d512afa5e46a protobuf-c-1.5 45ff2e9814aa059f323b23710c73309d41d36306667a3004f5fbb86b0cab4484 psmisc-23.6-6.fc40.x86_64.rpm c000cbb0a7df2c0c61559ab3f3732eacd163b171673298f4ec043cb6d223f364 publicsuffix-list-dafsa-20250116-1.fc40.noarch.rpm 7c703b431508f44c5184b5c1df052ed0f49b7439d68aa3597a9a57a5b26bd648 python-pip-wheel-23.3.2-2.fc40.noarch.rpm -15a80b975cc29fdbf3b71a0c8fa3f76a3fe722529036435b0cf7272f01a560c3 python-unversioned-command-3.12.9-1.fc40.noarch.rpm -870b11ae674851e6f9a02e650681c2e4a9fb1c91311beb944813ac6a2d4e15c9 python3-3.12.9-1.fc40.x86_64.rpm -2406c85716129d4183fcd2be8de2923770e8d6a12de270ac94cc427404a34a26 python3-libs-3.12.9-1.fc40.x86_64.rpm +4d1dbc446e23998e4ccf09bf3f0641ad7ff3166ba40958b5e8ba1bbe0f98b568 python-unversioned-command-3.12.9-3.fc40.noarch.rpm +d353f8f18224286f29b191dd07e9d0497c2284bd42229017c07b6e5101ce1136 python3-3.12.9-3.fc40.x86_64.rpm +243e05cfb49c0190dcd33d378f3c4a602cbeb48b76adfe0108553e9c2d862d75 python3-libs-3.12.9-3.fc40.x86_64.rpm b593f10e736995a0a898d37a1e595ad04bf162e7f0e7c9994e3032a9d9bc8799 qemu-user-static-8.2.9-1.fc40.x86_64.rpm 72b6185e59a7b359df273e9fe27dc014c0856341abcd1c907c7810a77cc6980e qemu-user-static-aarch64-8.2.9-1.fc40.x86_64.rpm 7eace5bc3e601266452b8356207604012542a8cd019b576e6d2ab9306c6a8e4c qemu-user-static-alpha-8.2.9-1.fc40.x86_64.rpm @@ -334,7 +334,7 @@ c8f5b5c50202965f86dc9139de3082a972e2a0222a1a426ce76a30d47cba5f32 systemd-networ 0478e12152cc3432a31dfca5ddbc80966800af437c6d7c0b26be307d5e1272e7 tpm2-tools-5.7-1.fc40.x86_64.rpm c3be8a6d0ea23b1d0bf466b19857b97f7ffde811ad7adec0599161059d84cc74 tpm2-tss-4.1.3-1.fc40.x86_64.rpm 5df98756883badf7743cdd75f5689b62606bff0b74494b20241cb9d78335c251 tpm2-tss-fapi-4.1.3-1.fc40.x86_64.rpm -1073ad5a60c424d205e1db3503816bde05931a205976da56fc1446d0c48c0f4f tzdata-2025a-1.fc40.noarch.rpm +d35ca6852dfea66d10046dd8b38a77e89443ce2006bc31782abfead826dba029 tzdata-2025b-1.fc40.noarch.rpm e1d443f7dcaec55eedc34bb66dd798ba9901dba69a169cff46f6c45671a3b3fa unbound-anchor-1.21.1-11.fc40.x86_64.rpm 8eb278cecd9f28fa4131dc402a31c74c427626aae53b2231bb452e745a9e9346 unbound-libs-1.21.1-11.fc40.x86_64.rpm 36ffa617a0dfe523424a28290241a81cd51f7d82e776e58131f16d092d49797b util-linux-2.40-0.9.rc1.fc40.i686.rpm From 934c6339ee7bdeb14accc1774d1396d0cf66c723 Mon Sep 17 00:00:00 2001 From: Moritz Sanft <58110325+msanft@users.noreply.github.com> Date: Mon, 7 Apr 2025 10:26:54 +0200 Subject: [PATCH 201/311] nix: update mkosi to v25.3 (#3726) * nix: update mkosi to v25.3 * bazel: 7.4.1 -> 7.6.0 --- .bazelversion | 2 +- MODULE.bazel.lock | 12 +++++++++--- flake.lock | 6 +++--- flake.nix | 43 ++++++++++++++++++++++++++++++++++++------- 4 files changed, 49 insertions(+), 14 deletions(-) diff --git a/.bazelversion b/.bazelversion index 815da58b7..93c8ddab9 100644 --- a/.bazelversion +++ b/.bazelversion @@ -1 +1 @@ -7.4.1 +7.6.0 diff --git a/MODULE.bazel.lock b/MODULE.bazel.lock index 0dfebe95e..271f4849b 100644 --- a/MODULE.bazel.lock +++ b/MODULE.bazel.lock @@ -1,5 +1,5 @@ { - "lockFileVersion": 11, + "lockFileVersion": 13, "registryFileHashes": { "https://bcr.bazel.build/bazel_registry.json": "8a28e4aff06ee60aed2a8c281907fb8bcbf3b753c91fb5a5c57da3215d5b3497", "https://bcr.bazel.build/modules/abseil-cpp/20210324.2/MODULE.bazel": "7cd0312e064fde87c8d1cd79ba06c876bd23630c83466e9500321be55c96ace2", @@ -565,7 +565,7 @@ }, "@@rules_python~//python/extensions:pip.bzl%pip": { "general": { - "bzlTransitiveDigest": "oxG8ogxHEbtSCgVhCDBRrjiTlucxn15T4guZ4/etTgo=", + "bzlTransitiveDigest": "t2sNZ+esCBM7KBCD9MlBA5Y3Yk5SQj8V+JMUGkiANSM=", "usagesDigest": "lABgNFDx2B8eu1/8FW60KMkCqsChEDxlIL/ERa0nIFc=", "recordedFileInputs": { "@@rules_python~//tools/publish/requirements_linux.txt": "d576e0d8542df61396a9b38deeaa183c24135ed5e8e73bb9622f298f2671811e", @@ -3352,7 +3352,13 @@ } } }, - "recordedRepoMappingEntries": [] + "recordedRepoMappingEntries": [ + [ + "rules_python~", + "platforms", + "platforms" + ] + ] } } } diff --git a/flake.lock b/flake.lock index 20317b8ab..b424b9c4a 100644 --- a/flake.lock +++ b/flake.lock @@ -20,11 +20,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1743689281, - "narHash": "sha256-y7Hg5lwWhEOgflEHRfzSH96BOt26LaYfrYWzZ+VoVdg=", + "lastModified": 1743938762, + "narHash": "sha256-UgFYn8sGv9B8PoFpUfCa43CjMZBl1x/ShQhRDHBFQdI=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "2bfc080955153be0be56724be6fa5477b4eefabb", + "rev": "74a40410369a1c35ee09b8a1abee6f4acbedc059", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index d160d9852..1e1304460 100644 --- a/flake.nix +++ b/flake.nix @@ -19,6 +19,33 @@ flake-utils.lib.eachDefaultSystem ( system: let + overlay = final: prev: { + rpm = prev.rpm.overrideAttrs (old: { + nativeBuildInputs = old.nativeBuildInputs ++ [ prev.makeWrapper ]; + postFixup = '' + wrapProgram $out/lib/rpm/sysusers.sh \ + --set PATH ${ + prev.lib.makeBinPath ( + with prev; + [ + coreutils + findutils + su.out + gnugrep + ] + ) + } + ''; + }); + + # dnf5 assumes a TTY with a very small width by default, truncating its output instead of line-wrapping + # it. Force it to use more VT columns to avoid this, and make debugging errors easier. + dnf5-stub = prev.writeScriptBin "dnf5" '' + #!/usr/bin/env bash + FORCE_COLUMNS=200 ${final.dnf5}/bin/dnf5 $@ + ''; + }; + pkgs = import nixpkgs { inherit system; config.allowUnfree = true; @@ -26,18 +53,19 @@ overlays = [ (_final: prev: (import ./nix/packages { inherit (prev) lib callPackage; })) (_final: prev: { lib = prev.lib // (import ./nix/lib { inherit (prev) lib callPackage; }); }) + overlay ]; }; callPackage = pkgs.callPackage; mkosiDev = ( - pkgs.mkosi.overrideAttrs (oldAttrs: { - propagatedBuildInputs = - oldAttrs.propagatedBuildInputs - ++ (with pkgs; [ + pkgs.mkosi.override { + extraDeps = ( + with pkgs; + [ # package management - dnf5 + dnf5-stub rpm createrepo_c @@ -55,8 +83,9 @@ # utils gnused # sed gnugrep # grep - ]); - }) + ] + ); + } ); in { From 518070ee78c812e6638140fc22293050dae289b1 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 8 Apr 2025 08:41:19 +0200 Subject: [PATCH 202/311] deps: update bufbuild/buf to v1.52.0 (#3744) * deps: update bufbuild/buf to v1.52.0 * deps: tidy all modules --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: edgelessci --- bazel/toolchains/ci_deps.bzl | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/bazel/toolchains/ci_deps.bzl b/bazel/toolchains/ci_deps.bzl index cbf9e8838..4afcdbbda 100644 --- a/bazel/toolchains/ci_deps.bzl +++ b/bazel/toolchains/ci_deps.bzl @@ -270,44 +270,44 @@ def _buf_deps(): strip_prefix = "buf/bin", build_file_content = """exports_files(["buf"], visibility = ["//visibility:public"])""", urls = [ - "https://cdn.confidential.cloud/constellation/cas/sha256/3cf4aa139b289e09f76f3b506d0f48b5d27bd4a58b510af6b976e6a0fb4a0953", - "https://github.com/bufbuild/buf/releases/download/v1.51.0/buf-Linux-x86_64.tar.gz", + "https://cdn.confidential.cloud/constellation/cas/sha256/adecbc5a41cae030cb33a7bf249e854f48aa7432132fa03cf61b8cc5bac27e06", + "https://github.com/bufbuild/buf/releases/download/v1.52.0/buf-Linux-x86_64.tar.gz", ], type = "tar.gz", - sha256 = "3cf4aa139b289e09f76f3b506d0f48b5d27bd4a58b510af6b976e6a0fb4a0953", + sha256 = "adecbc5a41cae030cb33a7bf249e854f48aa7432132fa03cf61b8cc5bac27e06", ) http_archive( name = "com_github_bufbuild_buf_linux_arm64", strip_prefix = "buf/bin", build_file_content = """exports_files(["buf"], visibility = ["//visibility:public"])""", urls = [ - "https://cdn.confidential.cloud/constellation/cas/sha256/853f91722ab06e8e7d140b9693f6f6eafd4812636f193ab5dbae99ee1612f1b6", - "https://github.com/bufbuild/buf/releases/download/v1.51.0/buf-Linux-aarch64.tar.gz", + "https://cdn.confidential.cloud/constellation/cas/sha256/c570950ab32710506ac793ec63ad07e51ca0d7e82fd41a5d9375179f4d84c45f", + "https://github.com/bufbuild/buf/releases/download/v1.52.0/buf-Linux-aarch64.tar.gz", ], type = "tar.gz", - sha256 = "853f91722ab06e8e7d140b9693f6f6eafd4812636f193ab5dbae99ee1612f1b6", + sha256 = "c570950ab32710506ac793ec63ad07e51ca0d7e82fd41a5d9375179f4d84c45f", ) http_archive( name = "com_github_bufbuild_buf_darwin_amd64", strip_prefix = "buf/bin", build_file_content = """exports_files(["buf"], visibility = ["//visibility:public"])""", urls = [ - "https://cdn.confidential.cloud/constellation/cas/sha256/ed5873b81f80d2aa95f4534b51c3a9e0d382d807902706b4aee7a61be5516461", - "https://github.com/bufbuild/buf/releases/download/v1.51.0/buf-Darwin-x86_64.tar.gz", + "https://cdn.confidential.cloud/constellation/cas/sha256/daae25f1ee3607e5abd2f17665ef30e86f4eb6e9070070920e10ce3c4d212934", + "https://github.com/bufbuild/buf/releases/download/v1.52.0/buf-Darwin-x86_64.tar.gz", ], type = "tar.gz", - sha256 = "ed5873b81f80d2aa95f4534b51c3a9e0d382d807902706b4aee7a61be5516461", + sha256 = "daae25f1ee3607e5abd2f17665ef30e86f4eb6e9070070920e10ce3c4d212934", ) http_archive( name = "com_github_bufbuild_buf_darwin_arm64", strip_prefix = "buf/bin", build_file_content = """exports_files(["buf"], visibility = ["//visibility:public"])""", urls = [ - "https://cdn.confidential.cloud/constellation/cas/sha256/fc34097ddc95533b0d8065bdf9cf368c63f040ea9d96ffda4ab2805122fddbce", - "https://github.com/bufbuild/buf/releases/download/v1.51.0/buf-Darwin-arm64.tar.gz", + "https://cdn.confidential.cloud/constellation/cas/sha256/493cb379606da7f79c0aee3904124c2543db8daff71e95cd64bdaf5c2ed0bf0e", + "https://github.com/bufbuild/buf/releases/download/v1.52.0/buf-Darwin-arm64.tar.gz", ], type = "tar.gz", - sha256 = "fc34097ddc95533b0d8065bdf9cf368c63f040ea9d96ffda4ab2805122fddbce", + sha256 = "493cb379606da7f79c0aee3904124c2543db8daff71e95cd64bdaf5c2ed0bf0e", ) def _talos_docgen_deps(): From 2fdb533798f74beda223a6fff4610a973b577b11 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 8 Apr 2025 08:43:54 +0200 Subject: [PATCH 203/311] deps: update GitHub action dependencies (#3745) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/actions/e2e_benchmark/action.yml | 2 +- .github/actions/e2e_sonobuoy/action.yml | 2 +- .github/actions/login_azure/action.yml | 2 +- .github/workflows/build-ccm-gcp.yml | 2 +- .github/workflows/build-os-image-scheduled.yml | 2 +- .github/workflows/check-links.yml | 2 +- .github/workflows/codeql.yml | 6 +++--- .github/workflows/e2e-mini.yml | 2 +- .github/workflows/e2e-test-daily.yml | 2 +- .github/workflows/e2e-test-weekly.yml | 2 +- .github/workflows/release.yml | 2 +- .github/workflows/scorecard.yml | 2 +- .github/workflows/test-operator-codegen.yml | 2 +- 13 files changed, 15 insertions(+), 15 deletions(-) diff --git a/.github/actions/e2e_benchmark/action.yml b/.github/actions/e2e_benchmark/action.yml index 4565e30bb..a760ba431 100644 --- a/.github/actions/e2e_benchmark/action.yml +++ b/.github/actions/e2e_benchmark/action.yml @@ -34,7 +34,7 @@ runs: - name: Setup python uses: actions/setup-python@8d9ed9ac5c53483de85588cdf95a591a75ab9f55 # v5.5.0 with: - python-version: "3.10" + python-version: "3.13" - name: Install kubestr shell: bash diff --git a/.github/actions/e2e_sonobuoy/action.yml b/.github/actions/e2e_sonobuoy/action.yml index d33f02059..627a2fcad 100644 --- a/.github/actions/e2e_sonobuoy/action.yml +++ b/.github/actions/e2e_sonobuoy/action.yml @@ -70,7 +70,7 @@ runs: - name: Publish test results if: (!env.ACT) && contains(inputs.sonobuoyTestSuiteCmd, '--plugin e2e') - uses: mikepenz/action-junit-report@97744eca465b8df9e6e33271cb155003f85327f1 # v5.5.0 + uses: mikepenz/action-junit-report@cf701569b05ccdd861a76b8607a66d76f6fd4857 # v5.5.1 with: report_paths: "**/junit_01.xml" fail_on_failure: true diff --git a/.github/actions/login_azure/action.yml b/.github/actions/login_azure/action.yml index c7934d19f..50ab87771 100644 --- a/.github/actions/login_azure/action.yml +++ b/.github/actions/login_azure/action.yml @@ -10,6 +10,6 @@ runs: # As described at: # https://github.com/Azure/login#configure-deployment-credentials - name: Login to Azure - uses: azure/login@a65d910e8af852a8061c627c456678983e180302 # v2.2.0 + uses: azure/login@a457da9ea143d694b1b9c7c869ebb04ebe844ef5 # v2.3.0 with: creds: ${{ inputs.azure_credentials }} diff --git a/.github/workflows/build-ccm-gcp.yml b/.github/workflows/build-ccm-gcp.yml index 4c913407e..b5f76aed0 100644 --- a/.github/workflows/build-ccm-gcp.yml +++ b/.github/workflows/build-ccm-gcp.yml @@ -31,7 +31,7 @@ jobs: - name: Setup Go environment uses: actions/setup-go@0aaccfd150d50ccaeb58ebd88d36e91967a5f35b # v5.4.0 with: - go-version: "1.24.1" + go-version: "1.24.2" cache: false - name: Install Crane diff --git a/.github/workflows/build-os-image-scheduled.yml b/.github/workflows/build-os-image-scheduled.yml index 7040e2771..60251bc5a 100644 --- a/.github/workflows/build-os-image-scheduled.yml +++ b/.github/workflows/build-os-image-scheduled.yml @@ -67,7 +67,7 @@ jobs: - name: Setup Go environment uses: actions/setup-go@0aaccfd150d50ccaeb58ebd88d36e91967a5f35b # v5.4.0 with: - go-version: "1.24.1" + go-version: "1.24.2" cache: false - name: Determine version diff --git a/.github/workflows/check-links.yml b/.github/workflows/check-links.yml index 8929f88a7..31fbbfea6 100644 --- a/.github/workflows/check-links.yml +++ b/.github/workflows/check-links.yml @@ -25,7 +25,7 @@ jobs: ref: ${{ !github.event.pull_request.head.repo.fork && github.head_ref || '' }} - name: Link Checker - uses: lycheeverse/lychee-action@f613c4a64e50d792e0b31ec34bbcbba12263c6a6 # v2.3.0 + uses: lycheeverse/lychee-action@1d97d84f0bc547f7b25f4c2170d87d810dc2fb2c # v2.4.0 with: args: "--config ./.lychee.toml './**/*.md' './**/*.html'" fail: true diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index c41514792..ba51d37d9 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -40,11 +40,11 @@ jobs: if: matrix.language == 'go' uses: actions/setup-go@0aaccfd150d50ccaeb58ebd88d36e91967a5f35b # v5.4.0 with: - go-version: "1.24.1" + go-version: "1.24.2" cache: false - name: Initialize CodeQL - uses: github/codeql-action/init@1b549b9259bda1cb5ddde3b41741a82a2d15a841 # v3.28.13 + uses: github/codeql-action/init@45775bd8235c68ba998cffa5171334d58593da47 # v3.28.15 with: languages: ${{ matrix.language }} @@ -63,6 +63,6 @@ jobs: echo "::endgroup::" - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@1b549b9259bda1cb5ddde3b41741a82a2d15a841 # v3.28.13 + uses: github/codeql-action/analyze@45775bd8235c68ba998cffa5171334d58593da47 # v3.28.15 with: category: "/language:${{ matrix.language }}" diff --git a/.github/workflows/e2e-mini.yml b/.github/workflows/e2e-mini.yml index 7e03ffd53..bf0cf1cad 100644 --- a/.github/workflows/e2e-mini.yml +++ b/.github/workflows/e2e-mini.yml @@ -34,7 +34,7 @@ jobs: ref: ${{ inputs.ref || github.event.workflow_run.head_branch || github.head_ref }} - name: Azure login OIDC - uses: azure/login@a65d910e8af852a8061c627c456678983e180302 # v2.2.0 + uses: azure/login@a457da9ea143d694b1b9c7c869ebb04ebe844ef5 # v2.3.0 with: client-id: ${{ secrets.AZURE_E2E_MINI_CLIENT_ID }} tenant-id: ${{ secrets.AZURE_TENANT_ID }} diff --git a/.github/workflows/e2e-test-daily.yml b/.github/workflows/e2e-test-daily.yml index a618b44a6..644fc6d95 100644 --- a/.github/workflows/e2e-test-daily.yml +++ b/.github/workflows/e2e-test-daily.yml @@ -164,7 +164,7 @@ jobs: ref: ${{ !github.event.pull_request.head.repo.fork && github.head_ref || '' }} - name: Azure login OIDC - uses: azure/login@a65d910e8af852a8061c627c456678983e180302 # v2.2.0 + uses: azure/login@a457da9ea143d694b1b9c7c869ebb04ebe844ef5 # v2.3.0 with: client-id: ${{ secrets.AZURE_E2E_MINI_CLIENT_ID }} tenant-id: ${{ secrets.AZURE_TENANT_ID }} diff --git a/.github/workflows/e2e-test-weekly.yml b/.github/workflows/e2e-test-weekly.yml index 906fc4eaa..e1a10a026 100644 --- a/.github/workflows/e2e-test-weekly.yml +++ b/.github/workflows/e2e-test-weekly.yml @@ -479,7 +479,7 @@ jobs: ref: ${{ !github.event.pull_request.head.repo.fork && github.head_ref || '' }} - name: Azure login OIDC - uses: azure/login@a65d910e8af852a8061c627c456678983e180302 # v2.2.0 + uses: azure/login@a457da9ea143d694b1b9c7c869ebb04ebe844ef5 # v2.3.0 with: client-id: ${{ secrets.AZURE_E2E_MINI_CLIENT_ID }} tenant-id: ${{ secrets.AZURE_TENANT_ID }} diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index a50461ee9..e1b5a0090 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -268,7 +268,7 @@ jobs: - name: Setup Go environment uses: actions/setup-go@0aaccfd150d50ccaeb58ebd88d36e91967a5f35b # v5.4.0 with: - go-version: "1.24.1" + go-version: "1.24.2" cache: true - name: Build generateMeasurements tool diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml index af7a8d415..8f1905f54 100644 --- a/.github/workflows/scorecard.yml +++ b/.github/workflows/scorecard.yml @@ -37,6 +37,6 @@ jobs: retention-days: 5 - name: Upload to code-scanning - uses: github/codeql-action/upload-sarif@1b549b9259bda1cb5ddde3b41741a82a2d15a841 # v3.28.13 + uses: github/codeql-action/upload-sarif@45775bd8235c68ba998cffa5171334d58593da47 # v3.28.15 with: sarif_file: results.sarif diff --git a/.github/workflows/test-operator-codegen.yml b/.github/workflows/test-operator-codegen.yml index 678535563..0966d1933 100644 --- a/.github/workflows/test-operator-codegen.yml +++ b/.github/workflows/test-operator-codegen.yml @@ -28,7 +28,7 @@ jobs: - name: Setup Go environment uses: actions/setup-go@0aaccfd150d50ccaeb58ebd88d36e91967a5f35b # v5.4.0 with: - go-version: "1.24.1" + go-version: "1.24.2" cache: true - name: Run code generation From bfab84ce1cb7a9b2de5303651e99f2f36a15c89b Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 8 Apr 2025 11:43:16 +0200 Subject: [PATCH 204/311] deps: update Go dependencies (#3743) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * deps: update Go dependencies * deps: keep go-tpm-tools at v0.4.4 --------- Signed-off-by: Daniel Weiße Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Daniel Weiße --- go.mod | 63 ++++++++++++----------- go.sum | 128 ++++++++++++++++++++++++---------------------- hack/tools/go.mod | 14 ++--- hack/tools/go.sum | 28 +++++----- 4 files changed, 119 insertions(+), 114 deletions(-) diff --git a/go.mod b/go.mod index 79af1de63..d8d1a48d1 100644 --- a/go.mod +++ b/go.mod @@ -35,7 +35,7 @@ require ( cloud.google.com/go/storage v1.51.0 dario.cat/mergo v1.0.1 github.com/Azure/azure-sdk-for-go v68.0.0+incompatible - github.com/Azure/azure-sdk-for-go/sdk/azcore v1.17.1 + github.com/Azure/azure-sdk-for-go/sdk/azcore v1.18.0 github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.8.2 github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v6 v6.4.0 github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/network/armnetwork/v6 v6.2.0 @@ -44,26 +44,26 @@ require ( github.com/BurntSushi/toml v1.5.0 github.com/aws/aws-sdk-go v1.55.6 github.com/aws/aws-sdk-go-v2 v1.36.3 - github.com/aws/aws-sdk-go-v2/config v1.29.12 - github.com/aws/aws-sdk-go-v2/credentials v1.17.65 + github.com/aws/aws-sdk-go-v2/config v1.29.13 + github.com/aws/aws-sdk-go-v2/credentials v1.17.66 github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.30 - github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.70 - github.com/aws/aws-sdk-go-v2/service/autoscaling v1.52.1 - github.com/aws/aws-sdk-go-v2/service/cloudfront v1.45.2 - github.com/aws/aws-sdk-go-v2/service/ec2 v1.211.0 - github.com/aws/aws-sdk-go-v2/service/elasticloadbalancingv2 v1.45.0 - github.com/aws/aws-sdk-go-v2/service/resourcegroupstaggingapi v1.26.1 - github.com/aws/aws-sdk-go-v2/service/s3 v1.79.0 - github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.35.2 + github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.71 + github.com/aws/aws-sdk-go-v2/service/autoscaling v1.52.2 + github.com/aws/aws-sdk-go-v2/service/cloudfront v1.45.3 + github.com/aws/aws-sdk-go-v2/service/ec2 v1.211.2 + github.com/aws/aws-sdk-go-v2/service/elasticloadbalancingv2 v1.45.1 + github.com/aws/aws-sdk-go-v2/service/resourcegroupstaggingapi v1.26.2 + github.com/aws/aws-sdk-go-v2/service/s3 v1.79.1 + github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.35.3 github.com/aws/smithy-go v1.22.3 - github.com/bazelbuild/buildtools v0.0.0-20250326091033-f79c8eafbddd + github.com/bazelbuild/buildtools v0.0.0-20250404141143-f963a9712147 github.com/bazelbuild/rules_go v0.53.0 github.com/coreos/go-systemd/v22 v22.5.0 github.com/docker/docker v28.0.4+incompatible github.com/edgelesssys/go-azguestattestation v0.0.0-20250212085035-c38c01af80ba github.com/edgelesssys/go-tdx-qpl v0.0.0-20250129202750-607ac61e2377 github.com/foxboron/go-uefi v0.0.0-20250207204325-69fb7dba244f - github.com/fsnotify/fsnotify v1.8.0 + github.com/fsnotify/fsnotify v1.9.0 github.com/go-playground/locales v0.14.1 github.com/go-playground/universal-translator v0.18.1 github.com/go-playground/validator/v10 v10.26.0 @@ -74,8 +74,8 @@ require ( github.com/google/go-tpm-tools v0.4.4 github.com/google/uuid v1.6.0 github.com/googleapis/gax-go/v2 v2.14.1 - github.com/gophercloud/gophercloud/v2 v2.6.0 - github.com/gophercloud/utils/v2 v2.0.0-20250212084022-725b94822eeb + github.com/gophercloud/gophercloud/v2 v2.7.0 + github.com/gophercloud/utils/v2 v2.0.0-20250404104721-4c0f6d93d3a9 github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.3.1 github.com/hashicorp/go-kms-wrapping/v2 v2.0.18 github.com/hashicorp/go-kms-wrapping/wrappers/awskms/v2 v2.0.11 @@ -95,8 +95,8 @@ require ( github.com/martinjungblut/go-cryptsetup v0.0.0-20220520180014-fd0874fd07a6 github.com/mattn/go-isatty v0.0.20 github.com/mitchellh/go-homedir v1.1.0 - github.com/onsi/ginkgo/v2 v2.23.3 - github.com/onsi/gomega v1.36.3 + github.com/onsi/ginkgo/v2 v2.23.4 + github.com/onsi/gomega v1.37.0 github.com/pkg/errors v0.9.1 github.com/regclient/regclient v0.8.2 github.com/rogpeppe/go-internal v1.14.1 @@ -110,18 +110,18 @@ require ( github.com/spf13/cobra v1.9.1 github.com/spf13/pflag v1.0.6 github.com/stretchr/testify v1.10.0 - github.com/tink-crypto/tink-go/v2 v2.3.0 + github.com/tink-crypto/tink-go/v2 v2.4.0 github.com/vincent-petithory/dataurl v1.0.0 go.etcd.io/etcd/api/v3 v3.5.21 go.etcd.io/etcd/client/pkg/v3 v3.5.21 go.etcd.io/etcd/client/v3 v3.5.21 go.uber.org/goleak v1.3.0 - golang.org/x/crypto v0.36.0 + golang.org/x/crypto v0.37.0 golang.org/x/exp v0.0.0-20250305212735-054e65f0b394 golang.org/x/mod v0.24.0 - golang.org/x/sys v0.31.0 - golang.org/x/text v0.23.0 - golang.org/x/tools v0.31.0 + golang.org/x/sys v0.32.0 + golang.org/x/text v0.24.0 + golang.org/x/tools v0.32.0 google.golang.org/api v0.228.0 google.golang.org/grpc v1.71.1 google.golang.org/protobuf v1.36.6 @@ -151,7 +151,7 @@ require ( cloud.google.com/go/longrunning v0.6.5 // indirect cloud.google.com/go/monitoring v1.24.0 // indirect github.com/AdaLogics/go-fuzz-headers v0.0.0-20230811130428-ced1acdcaa24 // indirect - github.com/Azure/azure-sdk-for-go/sdk/internal v1.10.0 // indirect + github.com/Azure/azure-sdk-for-go/sdk/internal v1.11.0 // indirect github.com/Azure/azure-sdk-for-go/sdk/keyvault/azkeys v0.10.0 // indirect github.com/Azure/azure-sdk-for-go/sdk/keyvault/internal v0.7.1 // indirect github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/internal v1.1.1 // indirect @@ -164,7 +164,7 @@ require ( github.com/Azure/go-autorest/autorest/validation v0.3.1 // indirect github.com/Azure/go-autorest/logger v0.2.1 // indirect github.com/Azure/go-autorest/tracing v0.6.0 // indirect - github.com/AzureAD/microsoft-authentication-library-for-go v1.4.1 // indirect + github.com/AzureAD/microsoft-authentication-library-for-go v1.4.2 // indirect github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.25.0 // indirect github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.51.0 // indirect github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.51.0 // indirect @@ -187,9 +187,9 @@ require ( github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.7.0 // indirect github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.15 // indirect github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.15 // indirect - github.com/aws/aws-sdk-go-v2/service/sso v1.25.2 // indirect - github.com/aws/aws-sdk-go-v2/service/ssooidc v1.30.0 // indirect - github.com/aws/aws-sdk-go-v2/service/sts v1.33.17 // indirect + github.com/aws/aws-sdk-go-v2/service/sso v1.25.3 // indirect + github.com/aws/aws-sdk-go-v2/service/ssooidc v1.30.1 // indirect + github.com/aws/aws-sdk-go-v2/service/sts v1.33.18 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/blang/semver v3.5.1+incompatible // indirect github.com/blang/semver/v4 v4.0.0 // indirect @@ -261,7 +261,7 @@ require ( github.com/google/go-tspi v0.3.0 // indirect github.com/google/gofuzz v1.2.0 // indirect github.com/google/logger v1.1.1 // indirect - github.com/google/pprof v0.0.0-20241210010833-40e02aabc2ad // indirect + github.com/google/pprof v0.0.0-20250403155104-27863c87afa6 // indirect github.com/google/s2a-go v0.1.9 // indirect github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 // indirect github.com/googleapis/enterprise-certificate-proxy v0.3.6 // indirect @@ -371,12 +371,13 @@ require ( go.opentelemetry.io/otel/sdk v1.35.0 // indirect go.opentelemetry.io/otel/sdk/metric v1.34.0 // indirect go.opentelemetry.io/otel/trace v1.35.0 // indirect + go.uber.org/automaxprocs v1.6.0 // indirect go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.27.0 // indirect - golang.org/x/net v0.38.0 // indirect + golang.org/x/net v0.39.0 // indirect golang.org/x/oauth2 v0.28.0 // indirect - golang.org/x/sync v0.12.0 // indirect - golang.org/x/term v0.30.0 // indirect + golang.org/x/sync v0.13.0 // indirect + golang.org/x/term v0.31.0 // indirect golang.org/x/time v0.11.0 // indirect gomodules.xyz/jsonpatch/v2 v2.4.0 // indirect google.golang.org/appengine v1.6.8 // indirect diff --git a/go.sum b/go.sum index 3cbd415f0..dd31804f2 100644 --- a/go.sum +++ b/go.sum @@ -36,14 +36,14 @@ github.com/AdamKorcz/go-fuzz-headers-1 v0.0.0-20230919221257-8b5d3ce2d11d h1:zjq github.com/AdamKorcz/go-fuzz-headers-1 v0.0.0-20230919221257-8b5d3ce2d11d/go.mod h1:XNqJ7hv2kY++g8XEHREpi+JqZo3+0l+CH2egBVN4yqM= github.com/Azure/azure-sdk-for-go v68.0.0+incompatible h1:fcYLmCpyNYRnvJbPerq7U0hS+6+I79yEDJBqVNcqUzU= github.com/Azure/azure-sdk-for-go v68.0.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= -github.com/Azure/azure-sdk-for-go/sdk/azcore v1.17.1 h1:DSDNVxqkoXJiko6x8a90zidoYqnYYa6c1MTzDKzKkTo= -github.com/Azure/azure-sdk-for-go/sdk/azcore v1.17.1/go.mod h1:zGqV2R4Cr/k8Uye5w+dgQ06WJtEcbQG/8J7BB6hnCr4= +github.com/Azure/azure-sdk-for-go/sdk/azcore v1.18.0 h1:Gt0j3wceWMwPmiazCa8MzMA0MfhmPIz0Qp0FJ6qcM0U= +github.com/Azure/azure-sdk-for-go/sdk/azcore v1.18.0/go.mod h1:Ot/6aikWnKWi4l9QB7qVSwa8iMphQNqkWALMoNT3rzM= github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.8.2 h1:F0gBpfdPLGsw+nsgk6aqqkZS1jiixa5WwFe3fk/T3Ys= github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.8.2/go.mod h1:SqINnQ9lVVdRlyC8cd1lCI0SdX4n2paeABd2K8ggfnE= github.com/Azure/azure-sdk-for-go/sdk/azidentity/cache v0.3.2 h1:yz1bePFlP5Vws5+8ez6T3HWXPmwOK7Yvq8QxDBD3SKY= github.com/Azure/azure-sdk-for-go/sdk/azidentity/cache v0.3.2/go.mod h1:Pa9ZNPuoNu/GztvBSKk9J1cDJW6vk/n0zLtV4mgd8N8= -github.com/Azure/azure-sdk-for-go/sdk/internal v1.10.0 h1:ywEEhmNahHBihViHepv3xPBn1663uRv2t2q/ESv9seY= -github.com/Azure/azure-sdk-for-go/sdk/internal v1.10.0/go.mod h1:iZDifYGJTIgIIkYRNWPENUnqx6bJ2xnSDFI2tjwZNuY= +github.com/Azure/azure-sdk-for-go/sdk/internal v1.11.0 h1:Bg8m3nq/X1DeePkAbCfb6ml6F3F0IunEhE8TMh+lY48= +github.com/Azure/azure-sdk-for-go/sdk/internal v1.11.0/go.mod h1:j2chePtV91HrC22tGoRX3sGY42uF13WzmmV80/OdVAA= github.com/Azure/azure-sdk-for-go/sdk/keyvault/azkeys v0.10.0 h1:m/sWOGCREuSBqg2htVQTBY8nOZpyajYztF0vUvSZTuM= github.com/Azure/azure-sdk-for-go/sdk/keyvault/azkeys v0.10.0/go.mod h1:Pu5Zksi2KrU7LPbZbNINx6fuVrUp/ffvpxdDj+i8LeE= github.com/Azure/azure-sdk-for-go/sdk/keyvault/internal v0.7.1 h1:FbH3BbSb4bvGluTesZZ+ttN/MDsnMmQP36OSnDuSXqw= @@ -88,8 +88,8 @@ github.com/Azure/go-autorest/tracing v0.6.0 h1:TYi4+3m5t6K48TGI9AUdb+IzbnSxvnvUM github.com/Azure/go-autorest/tracing v0.6.0/go.mod h1:+vhtPC754Xsa23ID7GlGsrdKBpUA79WCAKPPZVC2DeU= github.com/AzureAD/microsoft-authentication-extensions-for-go/cache v0.1.1 h1:WJTmL004Abzc5wDB5VtZG2PJk5ndYDgVacGqfirKxjM= github.com/AzureAD/microsoft-authentication-extensions-for-go/cache v0.1.1/go.mod h1:tCcJZ0uHAmvjsVYzEFivsRTN00oz5BEsRgQHu5JZ9WE= -github.com/AzureAD/microsoft-authentication-library-for-go v1.4.1 h1:8BKxhZZLX/WosEeoCvWysmKUscfa9v8LIPEEU0JjE2o= -github.com/AzureAD/microsoft-authentication-library-for-go v1.4.1/go.mod h1:wP83P5OoQ5p6ip3ScPr0BAq0BvuPAvacpEuSzyouqAI= +github.com/AzureAD/microsoft-authentication-library-for-go v1.4.2 h1:oygO0locgZJe7PpYPXT5A29ZkwJaPqcva7BVeemZOZs= +github.com/AzureAD/microsoft-authentication-library-for-go v1.4.2/go.mod h1:wP83P5OoQ5p6ip3ScPr0BAq0BvuPAvacpEuSzyouqAI= github.com/BurntSushi/toml v1.5.0 h1:W5quZX/G/csjUnuI8SUYlsHs9M38FC7znL0lIO+DvMg= github.com/BurntSushi/toml v1.5.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho= github.com/DATA-DOG/go-sqlmock v1.5.2 h1:OcvFkGmslmlZibjAjaHm3L//6LiuBgolP7OputlJIzU= @@ -140,14 +140,14 @@ github.com/aws/aws-sdk-go-v2 v1.36.3 h1:mJoei2CxPutQVxaATCzDUjcZEjVRdpsiiXi2o38y github.com/aws/aws-sdk-go-v2 v1.36.3/go.mod h1:LLXuLpgzEbD766Z5ECcRmi8AzSwfZItDtmABVkRLGzg= github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.10 h1:zAybnyUQXIZ5mok5Jqwlf58/TFE7uvd3IAsa1aF9cXs= github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.10/go.mod h1:qqvMj6gHLR/EXWZw4ZbqlPbQUyenf4h82UQUlKc+l14= -github.com/aws/aws-sdk-go-v2/config v1.29.12 h1:Y/2a+jLPrPbHpFkpAAYkVEtJmxORlXoo5k2g1fa2sUo= -github.com/aws/aws-sdk-go-v2/config v1.29.12/go.mod h1:xse1YTjmORlb/6fhkWi8qJh3cvZi4JoVNhc+NbJt4kI= -github.com/aws/aws-sdk-go-v2/credentials v1.17.65 h1:q+nV2yYegofO/SUXruT+pn4KxkxmaQ++1B/QedcKBFM= -github.com/aws/aws-sdk-go-v2/credentials v1.17.65/go.mod h1:4zyjAuGOdikpNYiSGpsGz8hLGmUzlY8pc8r9QQ/RXYQ= +github.com/aws/aws-sdk-go-v2/config v1.29.13 h1:RgdPqWoE8nPpIekpVpDJsBckbqT4Liiaq9f35pbTh1Y= +github.com/aws/aws-sdk-go-v2/config v1.29.13/go.mod h1:NI28qs/IOUIRhsR7GQ/JdexoqRN9tDxkIrYZq0SOF44= +github.com/aws/aws-sdk-go-v2/credentials v1.17.66 h1:aKpEKaTy6n4CEJeYI1MNj97oSDLi4xro3UzQfwf5RWE= +github.com/aws/aws-sdk-go-v2/credentials v1.17.66/go.mod h1:xQ5SusDmHb/fy55wU0QqTy0yNfLqxzec59YcsRZB+rI= github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.30 h1:x793wxmUWVDhshP8WW2mlnXuFrO4cOd3HLBroh1paFw= github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.30/go.mod h1:Jpne2tDnYiFascUEs2AWHJL9Yp7A5ZVy3TNyxaAjD6M= -github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.70 h1:pgaM86/BFt7dR0b/Jj+OU+taT34nkQlKPkjkYH1POAo= -github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.70/go.mod h1:vnoXXAU4FFW5JqLC/ZPF67IA5N0f8gah0t0aGI+N9+4= +github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.71 h1:s43gLuY+zGmtpx+KybfFP4IckopmTfDOPdlf/L++N5I= +github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.71/go.mod h1:KH6wWmY3O3c/jVAjHk0MGzVAFDxkOSt42Eoe4ZO4ge0= github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.34 h1:ZK5jHhnrioRkUNOc+hOgQKlUL5JeC3S6JgLxtQ+Rm0Q= github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.34/go.mod h1:p4VfIceZokChbA9FzMbRGz5OV+lekcVtHlPKEO0gSZY= github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.34 h1:SZwFm17ZUNNg5Np0ioo/gq8Mn6u9w19Mri8DnJ15Jf0= @@ -156,14 +156,14 @@ github.com/aws/aws-sdk-go-v2/internal/ini v1.8.3 h1:bIqFDwgGXXN1Kpp99pDOdKMTTb5d github.com/aws/aws-sdk-go-v2/internal/ini v1.8.3/go.mod h1:H5O/EsxDWyU+LP/V8i5sm8cxoZgc2fdNR9bxlOFrQTo= github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.34 h1:ZNTqv4nIdE/DiBfUUfXcLZ/Spcuz+RjeziUtNJackkM= github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.34/go.mod h1:zf7Vcd1ViW7cPqYWEHLHJkS50X0JS2IKz9Cgaj6ugrs= -github.com/aws/aws-sdk-go-v2/service/autoscaling v1.52.1 h1:wj4AION3NjQvjOiI8wm+TVU8y+8EsTl7fSgJAzk9cgc= -github.com/aws/aws-sdk-go-v2/service/autoscaling v1.52.1/go.mod h1:CDqMoc3KRdZJ8qziW96J35lKH01Wq3B2aihtHj2JbRs= -github.com/aws/aws-sdk-go-v2/service/cloudfront v1.45.2 h1:S3JpsBLyn/jqSJ6GgsbDQHubmop6fshQk/iOaOeotsc= -github.com/aws/aws-sdk-go-v2/service/cloudfront v1.45.2/go.mod h1:FIBJ48TS+qJb+Ne4qJ+0NeIhtPTVXItXooTeNeVI4Po= -github.com/aws/aws-sdk-go-v2/service/ec2 v1.211.0 h1:+5SxE8y8TIOYt8cwoqtd4WVpdpHHDWXD99DEAIjfBJ8= -github.com/aws/aws-sdk-go-v2/service/ec2 v1.211.0/go.mod h1:ouvGEfHbLaIlWwpDpOVWPWR+YwO0HDv3vm5tYLq8ImY= -github.com/aws/aws-sdk-go-v2/service/elasticloadbalancingv2 v1.45.0 h1:RB7V8wT9ypjE/YJVBgKjoydTOh4IFoqceGiKxFH70mY= -github.com/aws/aws-sdk-go-v2/service/elasticloadbalancingv2 v1.45.0/go.mod h1:xnCC3vFBfOKpU6PcsCKL2ktgBTZfOwTGxj6V8/X3IS4= +github.com/aws/aws-sdk-go-v2/service/autoscaling v1.52.2 h1:OA5uEC/SrjRLhNGHgF/iS6YQz1bjlrCje9sERyLlGro= +github.com/aws/aws-sdk-go-v2/service/autoscaling v1.52.2/go.mod h1:CDqMoc3KRdZJ8qziW96J35lKH01Wq3B2aihtHj2JbRs= +github.com/aws/aws-sdk-go-v2/service/cloudfront v1.45.3 h1:xQnjN34F4I3a/I3Xj0g9vmD5hAqC7u5y3SC3eC6T1E8= +github.com/aws/aws-sdk-go-v2/service/cloudfront v1.45.3/go.mod h1:FIBJ48TS+qJb+Ne4qJ+0NeIhtPTVXItXooTeNeVI4Po= +github.com/aws/aws-sdk-go-v2/service/ec2 v1.211.2 h1:KMoQ43HysbPqs1vufMn9h2UcUyc2WCMaKxYhExKJZuo= +github.com/aws/aws-sdk-go-v2/service/ec2 v1.211.2/go.mod h1:ouvGEfHbLaIlWwpDpOVWPWR+YwO0HDv3vm5tYLq8ImY= +github.com/aws/aws-sdk-go-v2/service/elasticloadbalancingv2 v1.45.1 h1:USXR7nfl+bu7HnR/M3KtnPD3wjlCXM72kYX+2PaIgEI= +github.com/aws/aws-sdk-go-v2/service/elasticloadbalancingv2 v1.45.1/go.mod h1:xnCC3vFBfOKpU6PcsCKL2ktgBTZfOwTGxj6V8/X3IS4= github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.3 h1:eAh2A4b5IzM/lum78bZ590jy36+d/aFLgKF/4Vd1xPE= github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.3/go.mod h1:0yKJC/kb8sAnmlYa6Zs3QVYqaC8ug2AbnNChv5Ox3uA= github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.7.0 h1:lguz0bmOoGzozP9XfRJR1QIayEYo+2vP/No3OfLF0pU= @@ -172,22 +172,22 @@ github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.15 h1:dM9/92u2 github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.15/go.mod h1:SwFBy2vjtA0vZbjjaFtfN045boopadnoVPhu4Fv66vY= github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.15 h1:moLQUoVq91LiqT1nbvzDukyqAlCv89ZmwaHw/ZFlFZg= github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.15/go.mod h1:ZH34PJUc8ApjBIfgQCFvkWcUDBtl/WTD+uiYHjd8igA= -github.com/aws/aws-sdk-go-v2/service/resourcegroupstaggingapi v1.26.1 h1:emvw6/2IQzFGPiAnFkRu10XwB4unT76YJnZNsUFmqDc= -github.com/aws/aws-sdk-go-v2/service/resourcegroupstaggingapi v1.26.1/go.mod h1:cgPfPTC/V3JqwCKed7Q6d0FrgarV7ltz4Bz6S4Q+Dqk= -github.com/aws/aws-sdk-go-v2/service/s3 v1.79.0 h1:OIw2nryEApESTYI5deCZGcq4Gvz8DBAt4tJlNyg3v5o= -github.com/aws/aws-sdk-go-v2/service/s3 v1.79.0/go.mod h1:U5SNqwhXB3Xe6F47kXvWihPl/ilGaEDe8HD/50Z9wxc= -github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.35.2 h1:vlYXbindmagyVA3RS2SPd47eKZ00GZZQcr+etTviHtc= -github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.35.2/go.mod h1:yGhDiLKguA3iFJYxbrQkQiNzuy+ddxesSZYWVeeEH5Q= -github.com/aws/aws-sdk-go-v2/service/sso v1.25.2 h1:pdgODsAhGo4dvzC3JAG5Ce0PX8kWXrTZGx+jxADD+5E= -github.com/aws/aws-sdk-go-v2/service/sso v1.25.2/go.mod h1:qs4a9T5EMLl/Cajiw2TcbNt2UNo/Hqlyp+GiuG4CFDI= -github.com/aws/aws-sdk-go-v2/service/ssooidc v1.30.0 h1:90uX0veLKcdHVfvxhkWUQSCi5VabtwMLFutYiRke4oo= -github.com/aws/aws-sdk-go-v2/service/ssooidc v1.30.0/go.mod h1:MlYRNmYu/fGPoxBQVvBYr9nyr948aY/WLUvwBMBJubs= -github.com/aws/aws-sdk-go-v2/service/sts v1.33.17 h1:PZV5W8yk4OtH1JAuhV2PXwwO9v5G5Aoj+eMCn4T+1Kc= -github.com/aws/aws-sdk-go-v2/service/sts v1.33.17/go.mod h1:cQnB8CUnxbMU82JvlqjKR2HBOm3fe9pWorWBza6MBJ4= +github.com/aws/aws-sdk-go-v2/service/resourcegroupstaggingapi v1.26.2 h1:SW+bplzotcNwVKph3FWsE4Zfk728edeFUCM5VmjbFy0= +github.com/aws/aws-sdk-go-v2/service/resourcegroupstaggingapi v1.26.2/go.mod h1:cgPfPTC/V3JqwCKed7Q6d0FrgarV7ltz4Bz6S4Q+Dqk= +github.com/aws/aws-sdk-go-v2/service/s3 v1.79.1 h1:2Ku1xwAohSSXHR1tpAnyVDSQSxoDMA+/NZBytW+f4qg= +github.com/aws/aws-sdk-go-v2/service/s3 v1.79.1/go.mod h1:U5SNqwhXB3Xe6F47kXvWihPl/ilGaEDe8HD/50Z9wxc= +github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.35.3 h1:9bxA21Y62N32bAo4tVYXBhJU+VtCVKPpXEIEsScM0kc= +github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.35.3/go.mod h1:yGhDiLKguA3iFJYxbrQkQiNzuy+ddxesSZYWVeeEH5Q= +github.com/aws/aws-sdk-go-v2/service/sso v1.25.3 h1:1Gw+9ajCV1jogloEv1RRnvfRFia2cL6c9cuKV2Ps+G8= +github.com/aws/aws-sdk-go-v2/service/sso v1.25.3/go.mod h1:qs4a9T5EMLl/Cajiw2TcbNt2UNo/Hqlyp+GiuG4CFDI= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.30.1 h1:hXmVKytPfTy5axZ+fYbR5d0cFmC3JvwLm5kM83luako= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.30.1/go.mod h1:MlYRNmYu/fGPoxBQVvBYr9nyr948aY/WLUvwBMBJubs= +github.com/aws/aws-sdk-go-v2/service/sts v1.33.18 h1:xz7WvTMfSStb9Y8NpCT82FXLNC3QasqBfuAFHY4Pk5g= +github.com/aws/aws-sdk-go-v2/service/sts v1.33.18/go.mod h1:cQnB8CUnxbMU82JvlqjKR2HBOm3fe9pWorWBza6MBJ4= github.com/aws/smithy-go v1.22.3 h1:Z//5NuZCSW6R4PhQ93hShNbyBbn8BWCmCVCt+Q8Io5k= github.com/aws/smithy-go v1.22.3/go.mod h1:t1ufH5HMublsJYulve2RKmHDC15xu1f26kHCp/HgceI= -github.com/bazelbuild/buildtools v0.0.0-20250326091033-f79c8eafbddd h1:IEd6eE1VADgrYwafzjlx+Zf0qsjGztL1pqWqW2/2Tfo= -github.com/bazelbuild/buildtools v0.0.0-20250326091033-f79c8eafbddd/go.mod h1:PLNUetjLa77TCCziPsz0EI8a6CUxgC+1jgmWv0H25tg= +github.com/bazelbuild/buildtools v0.0.0-20250404141143-f963a9712147 h1:ZBUNa/l43NNUF68fymW+ByWbVF1/06ZTZbIZC1g5Pxc= +github.com/bazelbuild/buildtools v0.0.0-20250404141143-f963a9712147/go.mod h1:PLNUetjLa77TCCziPsz0EI8a6CUxgC+1jgmWv0H25tg= github.com/bazelbuild/rules_go v0.53.0 h1:u160DT+RRb+Xb2aSO4piN8xhs4aZvWz2UDXCq48F4ao= github.com/bazelbuild/rules_go v0.53.0/go.mod h1:xB1jfsYHWlnZyPPxzlOSst4q2ZAwS251Mp9Iw6TPuBc= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= @@ -316,8 +316,8 @@ github.com/foxcpp/go-mockdns v1.1.0 h1:jI0rD8M0wuYAxL7r/ynTrCQQq0BVqfB99Vgk7Dlme github.com/foxcpp/go-mockdns v1.1.0/go.mod h1:IhLeSFGed3mJIAXPH2aiRQB+kqz7oqu8ld2qVbOu7Wk= github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8= github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0= -github.com/fsnotify/fsnotify v1.8.0 h1:dAwr6QBTBZIkG8roQaJjGof0pp0EeF+tNV7YBP3F/8M= -github.com/fsnotify/fsnotify v1.8.0/go.mod h1:8jBTzvmWwFyi3Pb8djgCCO5IBqzKJ/Jwo8TRcHyHii0= +github.com/fsnotify/fsnotify v1.9.0 h1:2Ml+OJNzbYCTzsxtv8vKSFD9PbJjmhYF14k/jKC7S9k= +github.com/fsnotify/fsnotify v1.9.0/go.mod h1:8jBTzvmWwFyi3Pb8djgCCO5IBqzKJ/Jwo8TRcHyHii0= github.com/fxamacker/cbor/v2 v2.7.0 h1:iM5WgngdRBanHcxugY4JySA0nk1wZorNOpTgCMedv5E= github.com/fxamacker/cbor/v2 v2.7.0/go.mod h1:pxXPTn3joSm21Gbwsv0w9OSA2y1HFR9qXEeXQVeNoDQ= github.com/gabriel-vasile/mimetype v1.4.8 h1:FfZ3gj38NjllZIeJAmMhr+qKL8Wu+nOoI3GqacKw1NM= @@ -448,8 +448,8 @@ github.com/google/logger v1.1.1 h1:+6Z2geNxc9G+4D4oDO9njjjn2d0wN5d7uOo0vOIW1NQ= github.com/google/logger v1.1.1/go.mod h1:BkeJZ+1FhQ+/d087r4dzojEg1u2ZX+ZqG1jTUrLM+zQ= github.com/google/martian/v3 v3.3.3 h1:DIhPTQrbPkgs2yJYdXU/eNACCG5DVQjySNRNlflZ9Fc= github.com/google/martian/v3 v3.3.3/go.mod h1:iEPrYcgCF7jA9OtScMFQyAlZZ4YXTKEtJ1E6RWzmBA0= -github.com/google/pprof v0.0.0-20241210010833-40e02aabc2ad h1:a6HEuzUHeKH6hwfN/ZoQgRgVIWFJljSWa/zetS2WTvg= -github.com/google/pprof v0.0.0-20241210010833-40e02aabc2ad/go.mod h1:vavhavw2zAxS5dIdcRluK6cSGGPlZynqzFM8NdvU144= +github.com/google/pprof v0.0.0-20250403155104-27863c87afa6 h1:BHT72Gu3keYf3ZEu2J0b1vyeLSOYI8bm5wbJM/8yDe8= +github.com/google/pprof v0.0.0-20250403155104-27863c87afa6/go.mod h1:boTsfXsheKC2y+lKOCMpSfarhxDeIzfZG1jqGcPl3cA= github.com/google/s2a-go v0.1.9 h1:LGD7gtMgezd8a/Xak7mEWL0PjoTQFvpRudN895yqKW0= github.com/google/s2a-go v0.1.9/go.mod h1:YA0Ei2ZQL3acow2O62kdp9UlnvMmU7kA6Eutn0dXayM= github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 h1:El6M4kTTCOh6aBiKaUGG7oYTSPP8MxqL4YI3kZKwcP4= @@ -461,10 +461,10 @@ github.com/googleapis/enterprise-certificate-proxy v0.3.6 h1:GW/XbdyBFQ8Qe+YAmFU github.com/googleapis/enterprise-certificate-proxy v0.3.6/go.mod h1:MkHOF77EYAE7qfSuSS9PU6g4Nt4e11cnsDUowfwewLA= github.com/googleapis/gax-go/v2 v2.14.1 h1:hb0FFeiPaQskmvakKu5EbCbpntQn48jyHuvrkurSS/Q= github.com/googleapis/gax-go/v2 v2.14.1/go.mod h1:Hb/NubMaVM88SrNkvl8X/o8XWwDJEPqouaLeN2IUxoA= -github.com/gophercloud/gophercloud/v2 v2.6.0 h1:XJKQ0in3iHOZHVAFMXq/OhjCuvvG+BKR0unOqRfG1EI= -github.com/gophercloud/gophercloud/v2 v2.6.0/go.mod h1:Ki/ILhYZr/5EPebrPL9Ej+tUg4lqx71/YH2JWVeU+Qk= -github.com/gophercloud/utils/v2 v2.0.0-20250212084022-725b94822eeb h1:TQTXVYXL3d0zRAybRUKKboO0z/XAsXEfU6Oax8n00kc= -github.com/gophercloud/utils/v2 v2.0.0-20250212084022-725b94822eeb/go.mod h1:tIUw/gFHOB6lFV9LhzNZg5jfCLYMxI2lC1dZUa7NlHM= +github.com/gophercloud/gophercloud/v2 v2.7.0 h1:o0m4kgVcPgHlcXiWAjoVxGd8QCmvM5VU+YM71pFbn0E= +github.com/gophercloud/gophercloud/v2 v2.7.0/go.mod h1:Ki/ILhYZr/5EPebrPL9Ej+tUg4lqx71/YH2JWVeU+Qk= +github.com/gophercloud/utils/v2 v2.0.0-20250404104721-4c0f6d93d3a9 h1:Bm0Hmif5p26LN/30JhC3PxLvnQWnnhrxBF9Ta5k3YV0= +github.com/gophercloud/utils/v2 v2.0.0-20250404104721-4c0f6d93d3a9/go.mod h1:ses/xYxYahNWlUnY/b1GjFqbHqtotVaNhVGiuJAUIoU= github.com/gorilla/handlers v1.5.1 h1:9lRY6j8DEeeBT10CvO9hGW0gmky0BprnvDI5vfhUHH4= github.com/gorilla/handlers v1.5.1/go.mod h1:t8XrUpc4KVXb7HGyJ4/cEnwQiaxrX/hz1Zv/4g96P1Q= github.com/gorilla/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY= @@ -685,10 +685,10 @@ github.com/oklog/ulid v1.3.1 h1:EGfNDEx6MqHz8B3uNV6QAib1UR2Lm97sHi3ocA6ESJ4= github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= github.com/olareg/olareg v0.1.1 h1:Ui7q93zjcoF+U9U71sgqgZWByDoZOpqHitUXEu2xV+g= github.com/olareg/olareg v0.1.1/go.mod h1:w8NP4SWrHHtxsFaUiv1lnCnYPm4sN1seCd2h7FK/dc0= -github.com/onsi/ginkgo/v2 v2.23.3 h1:edHxnszytJ4lD9D5Jjc4tiDkPBZ3siDeJJkUZJJVkp0= -github.com/onsi/ginkgo/v2 v2.23.3/go.mod h1:zXTP6xIp3U8aVuXN8ENK9IXRaTjFnpVB9mGmaSRvxnM= -github.com/onsi/gomega v1.36.3 h1:hID7cr8t3Wp26+cYnfcjR6HpJ00fdogN6dqZ1t6IylU= -github.com/onsi/gomega v1.36.3/go.mod h1:8D9+Txp43QWKhM24yyOBEdpkzN8FvJyAwecBgsU4KU0= +github.com/onsi/ginkgo/v2 v2.23.4 h1:ktYTpKJAVZnDT4VjxSbiBenUjmlL/5QkBEocaWXiQus= +github.com/onsi/ginkgo/v2 v2.23.4/go.mod h1:Bt66ApGPBFzHyR+JO10Zbt0Gsp4uWxu5mIOTusL46e8= +github.com/onsi/gomega v1.37.0 h1:CdEG8g0S133B4OswTDC/5XPSzE1OeP29QOioj2PID2Y= +github.com/onsi/gomega v1.37.0/go.mod h1:8D9+Txp43QWKhM24yyOBEdpkzN8FvJyAwecBgsU4KU0= github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= github.com/opencontainers/image-spec v1.1.0 h1:8SG7/vwALn54lVB/0yZ/MMwhFrPYtpEHQb2IpWsCzug= @@ -713,6 +713,8 @@ github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRI github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/poy/onpar v1.1.2 h1:QaNrNiZx0+Nar5dLgTVp5mXkyoVFIbepjyEoGSnhbAY= github.com/poy/onpar v1.1.2/go.mod h1:6X8FLNoxyr9kkmnlqpK6LSoiOtrO6MICtWwEuWkLjzg= +github.com/prashantv/gostub v1.1.0 h1:BTyx3RfQjRHnUWaGF9oQos79AlQ5k8WNktv7VGvVH4g= +github.com/prashantv/gostub v1.1.0/go.mod h1:A5zLQHz7ieHGG7is6LLXLz7I8+3LZzsrV0P1IAHhP5U= github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= github.com/prometheus/client_golang v1.1.0/go.mod h1:I1FGZT9+L76gKKOs5djB6ezCbFQP1xR9D75/vuwEF3g= @@ -803,8 +805,8 @@ github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOf github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/theupdateframework/go-tuf v0.7.0 h1:CqbQFrWo1ae3/I0UCblSbczevCCbS31Qvs5LdxRWqRI= github.com/theupdateframework/go-tuf v0.7.0/go.mod h1:uEB7WSY+7ZIugK6R1hiBMBjQftaFzn7ZCDJcp1tCUug= -github.com/tink-crypto/tink-go/v2 v2.3.0 h1:4/TA0lw0lA/iVKBL9f8R5eP7397bfc4antAMXF5JRhs= -github.com/tink-crypto/tink-go/v2 v2.3.0/go.mod h1:kfPOtXIadHlekBTeBtJrHWqoGL+Fm3JQg0wtltPuxLU= +github.com/tink-crypto/tink-go/v2 v2.4.0 h1:8VPZeZI4EeZ8P/vB6SIkhlStrJfivTJn+cQ4dtyHNh0= +github.com/tink-crypto/tink-go/v2 v2.4.0/go.mod h1:l//evrF2Y3MjdbpNDNGnKgCpo5zSmvUvnQ4MU+yE2sw= github.com/titanous/rocacheck v0.0.0-20171023193734-afe73141d399 h1:e/5i7d4oYZ+C1wj2THlRK+oAhjeS/TRQwMfkIuet3w0= github.com/titanous/rocacheck v0.0.0-20171023193734-afe73141d399/go.mod h1:LdwHTNJT99C5fTAzDz0ud328OgXz+gierycbcIx2fRs= github.com/transparency-dev/merkle v0.0.2 h1:Q9nBoQcZcgPamMkGn7ghV8XiTZ/kRxn1yCG81+twTK4= @@ -888,6 +890,8 @@ go.opentelemetry.io/otel/trace v1.35.0 h1:dPpEfJu1sDIqruz7BHFG3c7528f6ddfSWfFDVt go.opentelemetry.io/otel/trace v1.35.0/go.mod h1:WUk7DtFp1Aw2MkvqGdwiXYDZZNvA/1J8o6xRXLrIkyc= go.opentelemetry.io/proto/otlp v1.3.1 h1:TrMUixzpM0yuc/znrFTP9MMRh8trP93mkCiDVeXrui0= go.opentelemetry.io/proto/otlp v1.3.1/go.mod h1:0X1WI4de4ZsLrrJNLAQbFeLCm3T7yBkR0XqQ7niQU+8= +go.uber.org/automaxprocs v1.6.0 h1:O3y2/QNTOdbF+e/dpXNNW7Rx2hZ4sTIPyybbxyNqTUs= +go.uber.org/automaxprocs v1.6.0/go.mod h1:ifeIMSnPZuznNm6jmdzmU3/bfk01Fe2fotchwEFJ8r8= go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= @@ -902,8 +906,8 @@ golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5y golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.6.0/go.mod h1:OFC/31mSvZgRz0V1QTNCzfAI1aIRzbiufJtkMIlEp58= golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU= -golang.org/x/crypto v0.36.0 h1:AnAEvhDddvBdpY+uR+MyHmuZzzNqXSe/GvuDeob5L34= -golang.org/x/crypto v0.36.0/go.mod h1:Y4J0ReaxCR1IMaabaSMugxJES1EpwhBHhv2bDHklZvc= +golang.org/x/crypto v0.37.0 h1:kJNSjF/Xp7kU0iB2Z+9viTPMW4EqqsrywMXLJOOsXSE= +golang.org/x/crypto v0.37.0/go.mod h1:vg+k43peMZ0pUMhYmVAWysMK35e6ioLh3wB8ZCAfbVc= golang.org/x/exp v0.0.0-20250305212735-054e65f0b394 h1:nDVHiLt8aIbd/VzvPWN6kSOPE7+F/fNFDSXLVYkE/Iw= golang.org/x/exp v0.0.0-20250305212735-054e65f0b394/go.mod h1:sIifuuw/Yco/y6yb6+bDNfyeQ/MdPUy/hKEMYQV17cM= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= @@ -924,8 +928,8 @@ golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qx golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= -golang.org/x/net v0.38.0 h1:vRMAPTMaeGqVhG5QyLJHqNDwecKTomGeqbnfZyKlBI8= -golang.org/x/net v0.38.0/go.mod h1:ivrbrMbzFq5J41QOQh0siUuly180yBYtLp+CKbEaFx8= +golang.org/x/net v0.39.0 h1:ZCu7HMWDxpXpaiKdhzIfaltL9Lp31x/3fCP11bc6/fY= +golang.org/x/net v0.39.0/go.mod h1:X7NRbYVEA+ewNkCNyJ513WmMdQ3BineSwVtN2zD/d+E= golang.org/x/oauth2 v0.28.0 h1:CrgCKl8PPAVtLnU3c+EDw6x11699EWlsDeWNWKdIOkc= golang.org/x/oauth2 v0.28.0/go.mod h1:onh5ek6nERTohokkhCD/y2cV4Do3fxFHFuAejCkRWT8= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -936,8 +940,8 @@ golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.12.0 h1:MHc5BpPuC30uJk597Ri8TV3CNZcTLu6B6z4lJy+g6Jw= -golang.org/x/sync v0.12.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= +golang.org/x/sync v0.13.0 h1:AauUjRAJ9OSnvULf/ARrrVywoJDy0YS2AwQ98I37610= +golang.org/x/sync v0.13.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -966,15 +970,15 @@ golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.31.0 h1:ioabZlmFYtWhL+TRYpcnNlLwhyxaM9kWTDEmfnprqik= -golang.org/x/sys v0.31.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= +golang.org/x/sys v0.32.0 h1:s77OFDvIQeibCmezSnk/q6iAfkdiQaJi4VzroCFrN20= +golang.org/x/sys v0.32.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk= -golang.org/x/term v0.30.0 h1:PQ39fJZ+mfadBm0y5WlL4vlM7Sx1Hgf13sMIY2+QS9Y= -golang.org/x/term v0.30.0/go.mod h1:NYYFdzHoI5wRh/h5tDMdMqCqPJZEuNqVR5xJLd/n67g= +golang.org/x/term v0.31.0 h1:erwDkOK1Msy6offm1mOgvspSkslFnIGsFnxOKoufg3o= +golang.org/x/term v0.31.0/go.mod h1:R4BeIy7D95HzImkxGkTW1UQTtP54tio2RyHz7PwK0aw= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= @@ -983,8 +987,8 @@ golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= -golang.org/x/text v0.23.0 h1:D71I7dUrlY+VX0gQShAThNGHFxZ13dGLBHQLVl1mJlY= -golang.org/x/text v0.23.0/go.mod h1:/BLNzu4aZCJ1+kcD0DNRotWKage4q2rGVAg4o22unh4= +golang.org/x/text v0.24.0 h1:dd5Bzh4yt5KYA8f9CJHCP4FB4D51c2c6JvN37xJJkJ0= +golang.org/x/text v0.24.0/go.mod h1:L8rBsPeo2pSS+xqN0d5u2ikmjtmoJbDBT1b7nHvFCdU= golang.org/x/time v0.11.0 h1:/bpjEDfN9tkoN/ryeYHnv5hcMlc8ncjMcM4XBk5NWV0= golang.org/x/time v0.11.0/go.mod h1:CDIdPxbZBQxdj6cxyCIdrNogrJKMJ7pr37NYpMcMDSg= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -993,8 +997,8 @@ golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roY golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= -golang.org/x/tools v0.31.0 h1:0EedkvKDbh+qistFTd0Bcwe/YLh4vHwWEkiI0toFIBU= -golang.org/x/tools v0.31.0/go.mod h1:naFTU+Cev749tSJRXJlna0T3WxKvb1kWEx15xA4SdmQ= +golang.org/x/tools v0.32.0 h1:Q7N1vhpkQv7ybVzLFtTjvQya2ewbwNDZzUgfXGqtMWU= +golang.org/x/tools v0.32.0/go.mod h1:ZxrU41P/wAbZD8EDa6dDCa6XfpkhJ7HFMjHJXfBDu8s= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= diff --git a/hack/tools/go.mod b/hack/tools/go.mod index 007573137..23cf46207 100644 --- a/hack/tools/go.mod +++ b/hack/tools/go.mod @@ -6,7 +6,7 @@ require ( github.com/google/go-licenses v1.6.0 github.com/google/keep-sorted v0.6.0 github.com/katexochen/sh/v3 v3.11.0 - golang.org/x/tools v0.31.0 + golang.org/x/tools v0.32.0 golang.org/x/vuln v1.1.4 ) @@ -35,14 +35,14 @@ require ( github.com/stretchr/testify v1.8.4 // indirect github.com/xanzy/ssh-agent v0.3.3 // indirect go.opencensus.io v0.24.0 // indirect - golang.org/x/crypto v0.36.0 // indirect + golang.org/x/crypto v0.37.0 // indirect golang.org/x/mod v0.24.0 // indirect - golang.org/x/net v0.37.0 // indirect - golang.org/x/sync v0.12.0 // indirect - golang.org/x/sys v0.31.0 // indirect + golang.org/x/net v0.39.0 // indirect + golang.org/x/sync v0.13.0 // indirect + golang.org/x/sys v0.32.0 // indirect golang.org/x/telemetry v0.0.0-20240522233618-39ace7a40ae7 // indirect - golang.org/x/term v0.30.0 // indirect - golang.org/x/text v0.23.0 // indirect + golang.org/x/term v0.31.0 // indirect + golang.org/x/text v0.24.0 // indirect gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect gopkg.in/src-d/go-billy.v4 v4.3.2 // indirect gopkg.in/src-d/go-git.v4 v4.13.1 // indirect diff --git a/hack/tools/go.sum b/hack/tools/go.sum index 2bfda5470..b007f63a2 100644 --- a/hack/tools/go.sum +++ b/hack/tools/go.sum @@ -341,8 +341,8 @@ golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPh golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw= -golang.org/x/crypto v0.36.0 h1:AnAEvhDddvBdpY+uR+MyHmuZzzNqXSe/GvuDeob5L34= -golang.org/x/crypto v0.36.0/go.mod h1:Y4J0ReaxCR1IMaabaSMugxJES1EpwhBHhv2bDHklZvc= +golang.org/x/crypto v0.37.0 h1:kJNSjF/Xp7kU0iB2Z+9viTPMW4EqqsrywMXLJOOsXSE= +golang.org/x/crypto v0.37.0/go.mod h1:vg+k43peMZ0pUMhYmVAWysMK35e6ioLh3wB8ZCAfbVc= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -428,8 +428,8 @@ golang.org/x/net v0.0.0-20220624214902-1bab6f366d9e/go.mod h1:XRhObCWvk6IyKnWLug golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= golang.org/x/net v0.5.0/go.mod h1:DivGGAXEgPSlEBzxGzZI+ZLohi+xUj054jfeKui00ws= -golang.org/x/net v0.37.0 h1:1zLorHbz+LYj7MQlSf1+2tPIIgibq2eL5xkrGk6f+2c= -golang.org/x/net v0.37.0/go.mod h1:ivrbrMbzFq5J41QOQh0siUuly180yBYtLp+CKbEaFx8= +golang.org/x/net v0.39.0 h1:ZCu7HMWDxpXpaiKdhzIfaltL9Lp31x/3fCP11bc6/fY= +golang.org/x/net v0.39.0/go.mod h1:X7NRbYVEA+ewNkCNyJ513WmMdQ3BineSwVtN2zD/d+E= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -466,8 +466,8 @@ golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.12.0 h1:MHc5BpPuC30uJk597Ri8TV3CNZcTLu6B6z4lJy+g6Jw= -golang.org/x/sync v0.12.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= +golang.org/x/sync v0.13.0 h1:AauUjRAJ9OSnvULf/ARrrVywoJDy0YS2AwQ98I37610= +golang.org/x/sync v0.13.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190221075227-b4e8571b14e0/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -538,16 +538,16 @@ golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.31.0 h1:ioabZlmFYtWhL+TRYpcnNlLwhyxaM9kWTDEmfnprqik= -golang.org/x/sys v0.31.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= +golang.org/x/sys v0.32.0 h1:s77OFDvIQeibCmezSnk/q6iAfkdiQaJi4VzroCFrN20= +golang.org/x/sys v0.32.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= golang.org/x/telemetry v0.0.0-20240522233618-39ace7a40ae7 h1:FemxDzfMUcK2f3YY4H+05K9CDzbSVr2+q/JKN45pey0= golang.org/x/telemetry v0.0.0-20240522233618-39ace7a40ae7/go.mod h1:pRgIJT+bRLFKnoM1ldnzKoxTIn14Yxz928LQRYYgIN0= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.4.0/go.mod h1:9P2UbLfCdcvo3p/nzKvsmas4TnlujnuoV9hGgYzW1lQ= -golang.org/x/term v0.30.0 h1:PQ39fJZ+mfadBm0y5WlL4vlM7Sx1Hgf13sMIY2+QS9Y= -golang.org/x/term v0.30.0/go.mod h1:NYYFdzHoI5wRh/h5tDMdMqCqPJZEuNqVR5xJLd/n67g= +golang.org/x/term v0.31.0 h1:erwDkOK1Msy6offm1mOgvspSkslFnIGsFnxOKoufg3o= +golang.org/x/term v0.31.0/go.mod h1:R4BeIy7D95HzImkxGkTW1UQTtP54tio2RyHz7PwK0aw= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -559,8 +559,8 @@ golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.6.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.23.0 h1:D71I7dUrlY+VX0gQShAThNGHFxZ13dGLBHQLVl1mJlY= -golang.org/x/text v0.23.0/go.mod h1:/BLNzu4aZCJ1+kcD0DNRotWKage4q2rGVAg4o22unh4= +golang.org/x/text v0.24.0 h1:dd5Bzh4yt5KYA8f9CJHCP4FB4D51c2c6JvN37xJJkJ0= +golang.org/x/text v0.24.0/go.mod h1:L8rBsPeo2pSS+xqN0d5u2ikmjtmoJbDBT1b7nHvFCdU= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -619,8 +619,8 @@ golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/tools v0.5.0/go.mod h1:N+Kgy78s5I24c24dU8OfWNEotWjutIs8SnJvn5IDq+k= -golang.org/x/tools v0.31.0 h1:0EedkvKDbh+qistFTd0Bcwe/YLh4vHwWEkiI0toFIBU= -golang.org/x/tools v0.31.0/go.mod h1:naFTU+Cev749tSJRXJlna0T3WxKvb1kWEx15xA4SdmQ= +golang.org/x/tools v0.32.0 h1:Q7N1vhpkQv7ybVzLFtTjvQya2ewbwNDZzUgfXGqtMWU= +golang.org/x/tools v0.32.0/go.mod h1:ZxrU41P/wAbZD8EDa6dDCa6XfpkhJ7HFMjHJXfBDu8s= golang.org/x/vuln v1.1.4 h1:Ju8QsuyhX3Hk8ma3CesTbO8vfJD9EvUBgHvkxHBzj0I= golang.org/x/vuln v1.1.4/go.mod h1:F+45wmU18ym/ca5PLTPLsSzr2KppzswxPP603ldA67s= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= From a7f9561a3dddf76284737f0049e937d797e0230d Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 9 Apr 2025 10:45:43 +0200 Subject: [PATCH 205/311] deps: update bufbuild/buf to v1.52.1 (#3747) * deps: update bufbuild/buf to v1.52.1 * deps: tidy all modules --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: edgelessci --- bazel/toolchains/ci_deps.bzl | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/bazel/toolchains/ci_deps.bzl b/bazel/toolchains/ci_deps.bzl index 4afcdbbda..118580299 100644 --- a/bazel/toolchains/ci_deps.bzl +++ b/bazel/toolchains/ci_deps.bzl @@ -270,44 +270,44 @@ def _buf_deps(): strip_prefix = "buf/bin", build_file_content = """exports_files(["buf"], visibility = ["//visibility:public"])""", urls = [ - "https://cdn.confidential.cloud/constellation/cas/sha256/adecbc5a41cae030cb33a7bf249e854f48aa7432132fa03cf61b8cc5bac27e06", - "https://github.com/bufbuild/buf/releases/download/v1.52.0/buf-Linux-x86_64.tar.gz", + "https://cdn.confidential.cloud/constellation/cas/sha256/ce439b98c0e655ba1821fc529442f677135a9a44206a85cf2081a445bde02554", + "https://github.com/bufbuild/buf/releases/download/v1.52.1/buf-Linux-x86_64.tar.gz", ], type = "tar.gz", - sha256 = "adecbc5a41cae030cb33a7bf249e854f48aa7432132fa03cf61b8cc5bac27e06", + sha256 = "ce439b98c0e655ba1821fc529442f677135a9a44206a85cf2081a445bde02554", ) http_archive( name = "com_github_bufbuild_buf_linux_arm64", strip_prefix = "buf/bin", build_file_content = """exports_files(["buf"], visibility = ["//visibility:public"])""", urls = [ - "https://cdn.confidential.cloud/constellation/cas/sha256/c570950ab32710506ac793ec63ad07e51ca0d7e82fd41a5d9375179f4d84c45f", - "https://github.com/bufbuild/buf/releases/download/v1.52.0/buf-Linux-aarch64.tar.gz", + "https://cdn.confidential.cloud/constellation/cas/sha256/fb980e62f55a0d705f555124b5b250a6234deae67b3a493b1844fed8cb48f012", + "https://github.com/bufbuild/buf/releases/download/v1.52.1/buf-Linux-aarch64.tar.gz", ], type = "tar.gz", - sha256 = "c570950ab32710506ac793ec63ad07e51ca0d7e82fd41a5d9375179f4d84c45f", + sha256 = "fb980e62f55a0d705f555124b5b250a6234deae67b3a493b1844fed8cb48f012", ) http_archive( name = "com_github_bufbuild_buf_darwin_amd64", strip_prefix = "buf/bin", build_file_content = """exports_files(["buf"], visibility = ["//visibility:public"])""", urls = [ - "https://cdn.confidential.cloud/constellation/cas/sha256/daae25f1ee3607e5abd2f17665ef30e86f4eb6e9070070920e10ce3c4d212934", - "https://github.com/bufbuild/buf/releases/download/v1.52.0/buf-Darwin-x86_64.tar.gz", + "https://cdn.confidential.cloud/constellation/cas/sha256/ff3aedaa8bf53c3ae53bf863bb6141a23ef9e2ef750016ab217b0466ab3e89be", + "https://github.com/bufbuild/buf/releases/download/v1.52.1/buf-Darwin-x86_64.tar.gz", ], type = "tar.gz", - sha256 = "daae25f1ee3607e5abd2f17665ef30e86f4eb6e9070070920e10ce3c4d212934", + sha256 = "ff3aedaa8bf53c3ae53bf863bb6141a23ef9e2ef750016ab217b0466ab3e89be", ) http_archive( name = "com_github_bufbuild_buf_darwin_arm64", strip_prefix = "buf/bin", build_file_content = """exports_files(["buf"], visibility = ["//visibility:public"])""", urls = [ - "https://cdn.confidential.cloud/constellation/cas/sha256/493cb379606da7f79c0aee3904124c2543db8daff71e95cd64bdaf5c2ed0bf0e", - "https://github.com/bufbuild/buf/releases/download/v1.52.0/buf-Darwin-arm64.tar.gz", + "https://cdn.confidential.cloud/constellation/cas/sha256/b11d5afda7f58a44a6520b798902b1263aba921b0989cb156ecf2acc8eb1ce31", + "https://github.com/bufbuild/buf/releases/download/v1.52.1/buf-Darwin-arm64.tar.gz", ], type = "tar.gz", - sha256 = "493cb379606da7f79c0aee3904124c2543db8daff71e95cd64bdaf5c2ed0bf0e", + sha256 = "b11d5afda7f58a44a6520b798902b1263aba921b0989cb156ecf2acc8eb1ce31", ) def _talos_docgen_deps(): From 4e5c213b4da0702c16c4885e48d3355ce1db8c3e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Wei=C3=9Fe?= <66256922+daniel-weisse@users.noreply.github.com> Date: Wed, 9 Apr 2025 10:54:28 +0200 Subject: [PATCH 206/311] deps: update Go to v1.24.2 (#3750) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * deps: update Go to v1.24.2 * tests: replace context.Background() with t.Context() --------- Signed-off-by: Daniel Weiße --- 3rdparty/gcp-guest-agent/Dockerfile | 2 +- MODULE.bazel | 2 +- .../internal/initserver/initserver_test.go | 6 ++--- .../internal/kubernetes/kubernetes_test.go | 4 ++-- .../kubernetes/kubewaiter/kubewaiter_test.go | 2 +- cli/internal/cloudcmd/apply_test.go | 8 +++---- cli/internal/cloudcmd/iam_test.go | 6 ++--- cli/internal/cloudcmd/rollback_test.go | 5 ++--- cli/internal/cloudcmd/terminate_test.go | 2 +- cli/internal/cloudcmd/tfplan_test.go | 2 +- cli/internal/cmd/apply_test.go | 2 +- cli/internal/cmd/init_test.go | 2 +- cli/internal/cmd/recover_test.go | 4 ++-- cli/internal/cmd/upgradecheck_test.go | 6 ++--- cli/internal/cmd/verify_test.go | 4 ++-- cli/internal/terraform/terraform_test.go | 12 +++++----- csi/cryptmapper/cryptmapper_test.go | 6 ++--- csi/kms/constellation_test.go | 2 +- csi/test/mount_integration_test.go | 22 +++++++++---------- .../internal/debugd/deploy/download_test.go | 4 ++-- debugd/internal/debugd/deploy/service_test.go | 6 ++--- .../debugd/logcollector/credentials_test.go | 6 ++--- .../cloudprovider/cloudprovider_test.go | 6 ++--- .../debugd/metadata/fallback/fallback_test.go | 9 ++++---- .../debugd/metadata/scheduler_test.go | 2 +- debugd/internal/debugd/server/server_test.go | 10 ++++----- .../recoveryserver/recoveryserver_test.go | 8 +++---- .../rejoinclient/rejoinclient_test.go | 4 ++-- e2e/internal/lb/lb_test.go | 13 +++++------ e2e/internal/upgrade/upgrade.go | 4 ++-- e2e/internal/upgrade/upgrade_test.go | 20 ++++++++--------- go.mod | 2 +- go.work | 4 ++-- .../internal/mirror/mirror_test.go | 6 ++--- hack/qemu-metadata-api/server/server_test.go | 7 +++--- hack/tools/go.mod | 2 +- .../api/attestationconfigapi/fetcher_test.go | 3 +-- internal/api/versionsapi/fetcher_test.go | 3 +-- internal/atls/atls_test.go | 7 +++--- .../attestation/aws/nitrotpm/issuer_test.go | 2 +- .../aws/nitrotpm/validator_test.go | 2 +- .../attestation/aws/snp/validator_test.go | 3 +-- internal/attestation/azure/snp/issuer_test.go | 2 +- .../attestation/azure/snp/validator_test.go | 4 ++-- internal/attestation/azure/tdx/issuer_test.go | 3 +-- .../azure/trustedlaunch/trustedlaunch_test.go | 5 ++--- internal/attestation/gcp/es/issuer_test.go | 2 +- internal/attestation/gcp/es/validator_test.go | 2 +- .../measurements/fetchmeasurements_test.go | 2 +- .../measurements/measurements_test.go | 3 +-- internal/attestation/vtpm/attestation_test.go | 4 ++-- internal/cloud/aws/aws_test.go | 6 ++--- internal/cloud/azure/azure_test.go | 14 ++++++------ internal/cloud/azure/imds_test.go | 2 +- internal/cloud/gcp/gcp_test.go | 12 +++++----- internal/cloud/openstack/imds_test.go | 6 ++--- internal/cloud/openstack/openstack_test.go | 11 +++++----- internal/constellation/apply_test.go | 2 +- internal/constellation/applyinit_test.go | 4 ++-- .../constellation/helm/retryaction_test.go | 2 +- internal/constellation/kubecmd/backup_test.go | 4 ++-- .../constellation/kubecmd/kubecmd_test.go | 10 ++++----- .../atlscredentials/atlscredentials_test.go | 2 +- internal/grpc/dialer/dialer_test.go | 2 +- internal/grpc/grpclog/grpclog_test.go | 2 +- internal/imagefetcher/imagefetcher_test.go | 2 +- internal/imagefetcher/raw_test.go | 5 ++--- internal/installer/installer_test.go | 6 ++--- internal/kms/kms/cluster/cluster_test.go | 7 +++--- internal/kms/kms/internal/internal_test.go | 2 +- internal/kms/setup/setup_test.go | 5 ++--- internal/kms/storage/awss3/awss3_test.go | 6 ++--- .../kms/storage/azureblob/azureblob_test.go | 6 ++--- internal/kms/storage/gcs/gcs_test.go | 6 ++--- internal/kms/storage/memfs/memfs_test.go | 3 +-- internal/kms/test/aws_test.go | 4 ++-- internal/kms/test/azure_test.go | 6 ++--- internal/kms/test/gcp_test.go | 4 ++-- internal/kms/test/integration_test.go | 4 ++-- internal/license/checker_enterprise_test.go | 3 +-- .../integration/license_integration_test.go | 3 +-- internal/retry/retry_test.go | 2 +- internal/sigstore/rekor_integration_test.go | 5 ++--- internal/staticupload/staticupload_test.go | 16 +++++++------- .../internal/certcache/certcache_test.go | 4 ++-- joinservice/internal/kms/kms_test.go | 2 +- joinservice/internal/server/server_test.go | 4 ++-- .../internal/watcher/validator_test.go | 8 +++---- keyservice/internal/server/server_test.go | 8 +++---- .../nodeversion_controller_test.go | 8 +++---- .../controllers/nodeversion_watches_test.go | 5 ++--- .../pendingnode_controller_test.go | 4 ++-- .../cloud/aws/client/nodeimage_test.go | 8 +++---- .../cloud/aws/client/pendingnode_test.go | 3 +-- .../cloud/aws/client/scalinggroup_test.go | 7 +++--- .../cloud/azure/client/nodeimage_test.go | 20 ++++++++--------- .../cloud/azure/client/pendingnode_test.go | 3 +-- .../cloud/azure/client/scalinggroup_test.go | 7 +++--- .../cloud/gcp/client/nodeimage_test.go | 9 ++++---- .../cloud/gcp/client/pendingnode_test.go | 3 +-- .../internal/cloud/gcp/client/project_test.go | 3 +-- .../cloud/gcp/client/scalinggroup_test.go | 7 +++--- .../internal/deploy/deploy_test.go | 6 ++--- .../internal/etcd/etcd_test.go | 4 ++-- .../internal/executor/executor_test.go | 20 ++++++++--------- .../internal/poller/poller_test.go | 8 +++---- .../internal/upgrade/upgrade_test.go | 2 +- .../scalinggroup_controller_test.go | 4 ++-- s3proxy/internal/kms/kms_test.go | 2 +- .../provider/cluster_resource_test.go | 5 ++--- upgrade-agent/internal/server/server_test.go | 2 +- verify/server/server_test.go | 4 ++-- 112 files changed, 287 insertions(+), 316 deletions(-) diff --git a/3rdparty/gcp-guest-agent/Dockerfile b/3rdparty/gcp-guest-agent/Dockerfile index ab437d512..ca7fb8014 100644 --- a/3rdparty/gcp-guest-agent/Dockerfile +++ b/3rdparty/gcp-guest-agent/Dockerfile @@ -6,7 +6,7 @@ RUN apt-get update && apt-get install -y \ git # Install Go -ARG GO_VER=1.23.6 +ARG GO_VER=1.24.2 RUN wget -q https://go.dev/dl/go${GO_VER}.linux-amd64.tar.gz && \ tar -C /usr/local -xzf go${GO_VER}.linux-amd64.tar.gz && \ rm go${GO_VER}.linux-amd64.tar.gz diff --git a/MODULE.bazel b/MODULE.bazel index 9bd67e799..3648de72e 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -22,7 +22,7 @@ go_sdk = use_extension("@io_bazel_rules_go//go:extensions.bzl", "go_sdk") go_sdk.download( name = "go_sdk", patches = ["//3rdparty/bazel/org_golang:go_tls_max_handshake_size.patch"], - version = "1.23.6", + version = "1.24.2", ) python = use_extension("@rules_python//python/extensions:python.bzl", "python") diff --git a/bootstrapper/internal/initserver/initserver_test.go b/bootstrapper/internal/initserver/initserver_test.go index 0d9f25db4..878a1fe80 100644 --- a/bootstrapper/internal/initserver/initserver_test.go +++ b/bootstrapper/internal/initserver/initserver_test.go @@ -67,7 +67,7 @@ func TestNew(t *testing.T) { assert := assert.New(t) server, err := New( - context.TODO(), newFakeLock(), &stubClusterInitializer{}, atls.NewFakeIssuer(variant.Dummy{}), + t.Context(), newFakeLock(), &stubClusterInitializer{}, atls.NewFakeIssuer(variant.Dummy{}), &stubDisk{}, fh, &tc.metadata, logger.NewTest(t), ) if tc.wantErr { @@ -352,9 +352,9 @@ func TestSetupDisk(t *testing.T) { masterSecret := uri.MasterSecret{Key: tc.masterKey, Salt: tc.salt} - cloudKms, err := kmssetup.KMS(context.Background(), uri.NoStoreURI, masterSecret.EncodeToURI()) + cloudKms, err := kmssetup.KMS(t.Context(), uri.NoStoreURI, masterSecret.EncodeToURI()) require.NoError(err) - assert.NoError(server.setupDisk(context.Background(), cloudKms)) + assert.NoError(server.setupDisk(t.Context(), cloudKms)) }) } } diff --git a/bootstrapper/internal/kubernetes/kubernetes_test.go b/bootstrapper/internal/kubernetes/kubernetes_test.go index bef50253d..55d6cf676 100644 --- a/bootstrapper/internal/kubernetes/kubernetes_test.go +++ b/bootstrapper/internal/kubernetes/kubernetes_test.go @@ -201,7 +201,7 @@ func TestInitCluster(t *testing.T) { } _, err := kube.InitCluster( - context.Background(), string(tc.k8sVersion), "kubernetes", + t.Context(), string(tc.k8sVersion), "kubernetes", false, nil, nil, "", ) @@ -384,7 +384,7 @@ func TestJoinCluster(t *testing.T) { log: logger.NewTest(t), } - err := kube.JoinCluster(context.Background(), joinCommand, tc.role, tc.k8sComponents) + err := kube.JoinCluster(t.Context(), joinCommand, tc.role, tc.k8sComponents) if tc.wantErr { assert.Error(err) return diff --git a/bootstrapper/internal/kubernetes/kubewaiter/kubewaiter_test.go b/bootstrapper/internal/kubernetes/kubewaiter/kubewaiter_test.go index fe51e2dbb..97f2daa15 100644 --- a/bootstrapper/internal/kubernetes/kubewaiter/kubewaiter_test.go +++ b/bootstrapper/internal/kubernetes/kubewaiter/kubewaiter_test.go @@ -39,7 +39,7 @@ func TestCloudKubeAPIWaiter(t *testing.T) { require := require.New(t) waiter := &CloudKubeAPIWaiter{} - ctx, cancel := context.WithTimeout(context.Background(), 0) + ctx, cancel := context.WithTimeout(t.Context(), 0) defer cancel() err := waiter.Wait(ctx, tc.kubeClient) if tc.wantErr { diff --git a/cli/internal/cloudcmd/apply_test.go b/cli/internal/cloudcmd/apply_test.go index 47217362f..5fa4aa0d2 100644 --- a/cli/internal/cloudcmd/apply_test.go +++ b/cli/internal/cloudcmd/apply_test.go @@ -185,14 +185,14 @@ func TestApplier(t *testing.T) { out: &bytes.Buffer{}, } - diff, err := applier.Plan(context.Background(), tc.config) + diff, err := applier.Plan(t.Context(), tc.config) if err != nil { assert.True(tc.wantErr, "unexpected error: %s", err) return } assert.False(diff) - idFile, err := applier.Apply(context.Background(), tc.provider, tc.config.GetAttestationConfig().GetVariant(), true) + idFile, err := applier.Apply(t.Context(), tc.provider, tc.config.GetAttestationConfig().GetVariant(), true) if tc.wantErr { assert.Error(err) @@ -303,7 +303,7 @@ func TestPlan(t *testing.T) { cfg := config.Default() cfg.RemoveProviderAndAttestationExcept(cloudprovider.Azure) - diff, err := u.Plan(context.Background(), cfg) + diff, err := u.Plan(t.Context(), cfg) if tc.wantErr { require.Error(err) } else { @@ -352,7 +352,7 @@ func TestApply(t *testing.T) { out: io.Discard, } - _, err := u.Apply(context.Background(), cloudprovider.QEMU, variant.QEMUVTPM{}, WithoutRollbackOnError) + _, err := u.Apply(t.Context(), cloudprovider.QEMU, variant.QEMUVTPM{}, WithoutRollbackOnError) if tc.wantErr { assert.Error(err) } else { diff --git a/cli/internal/cloudcmd/iam_test.go b/cli/internal/cloudcmd/iam_test.go index ff198c51c..e3c23e54b 100644 --- a/cli/internal/cloudcmd/iam_test.go +++ b/cli/internal/cloudcmd/iam_test.go @@ -128,7 +128,7 @@ func TestIAMCreator(t *testing.T) { }, } - idFile, err := creator.Create(context.Background(), tc.provider, tc.config) + idFile, err := creator.Create(t.Context(), tc.provider, tc.config) if tc.wantErr { assert.Error(err) @@ -184,7 +184,7 @@ func TestDestroyIAMConfiguration(t *testing.T) { return tc.tfClient, nil }} - err := destroyer.DestroyIAMConfiguration(context.Background(), "", terraform.LogLevelNone) + err := destroyer.DestroyIAMConfiguration(t.Context(), "", terraform.LogLevelNone) if tc.wantErr { assert.Error(err) @@ -278,7 +278,7 @@ func TestGetTfstateServiceAccountKey(t *testing.T) { return tc.cl, nil }} - saKey, err := destroyer.GetTfStateServiceAccountKey(context.Background(), "") + saKey, err := destroyer.GetTfStateServiceAccountKey(t.Context(), "") if tc.wantErr { assert.Error(err) diff --git a/cli/internal/cloudcmd/rollback_test.go b/cli/internal/cloudcmd/rollback_test.go index 320dd1745..ec5c23ccf 100644 --- a/cli/internal/cloudcmd/rollback_test.go +++ b/cli/internal/cloudcmd/rollback_test.go @@ -8,7 +8,6 @@ package cloudcmd import ( "bytes" - "context" "errors" "testing" @@ -46,7 +45,7 @@ func TestRollbackTerraform(t *testing.T) { } destroyClusterErrOutput := &bytes.Buffer{} - err := rollbacker.rollback(context.Background(), destroyClusterErrOutput, terraform.LogLevelNone) + err := rollbacker.rollback(t.Context(), destroyClusterErrOutput, terraform.LogLevelNone) if tc.wantCleanupErr { assert.Error(err) if tc.tfClient.cleanUpWorkspaceErr == nil { @@ -107,7 +106,7 @@ func TestRollbackQEMU(t *testing.T) { destroyClusterErrOutput := &bytes.Buffer{} - err := rollbacker.rollback(context.Background(), destroyClusterErrOutput, terraform.LogLevelNone) + err := rollbacker.rollback(t.Context(), destroyClusterErrOutput, terraform.LogLevelNone) if tc.wantErr { assert.Error(err) if tc.tfClient.cleanUpWorkspaceErr == nil { diff --git a/cli/internal/cloudcmd/terminate_test.go b/cli/internal/cloudcmd/terminate_test.go index 1d9f0232c..30add9909 100644 --- a/cli/internal/cloudcmd/terminate_test.go +++ b/cli/internal/cloudcmd/terminate_test.go @@ -63,7 +63,7 @@ func TestTerminator(t *testing.T) { }, } - err := terminator.Terminate(context.Background(), "", terraform.LogLevelNone) + err := terminator.Terminate(t.Context(), "", terraform.LogLevelNone) if tc.wantErr { assert.Error(err) diff --git a/cli/internal/cloudcmd/tfplan_test.go b/cli/internal/cloudcmd/tfplan_test.go index 3cad299c1..e83b34a9d 100644 --- a/cli/internal/cloudcmd/tfplan_test.go +++ b/cli/internal/cloudcmd/tfplan_test.go @@ -101,7 +101,7 @@ func TestTFPlan(t *testing.T) { fs := tc.prepareFs(require.New(t)) hasDiff, planErr := plan( - context.Background(), tc.tf, fs, io.Discard, terraform.LogLevelDebug, + t.Context(), tc.tf, fs, io.Discard, terraform.LogLevelDebug, &terraform.QEMUVariables{}, templateDir, existingWorkspace, backupDir, ) diff --git a/cli/internal/cmd/apply_test.go b/cli/internal/cmd/apply_test.go index 6988da6cb..383c51125 100644 --- a/cli/internal/cmd/apply_test.go +++ b/cli/internal/cmd/apply_test.go @@ -199,7 +199,7 @@ func TestBackupHelmCharts(t *testing.T) { log: logger.NewTest(t), } - err := a.backupHelmCharts(context.Background(), tc.helmApplier, tc.includesUpgrades, "") + err := a.backupHelmCharts(t.Context(), tc.helmApplier, tc.includesUpgrades, "") if tc.wantErr { assert.Error(err) return diff --git a/cli/internal/cmd/init_test.go b/cli/internal/cmd/init_test.go index 524092783..747e180ec 100644 --- a/cli/internal/cmd/init_test.go +++ b/cli/internal/cmd/init_test.go @@ -217,7 +217,7 @@ func TestInitialize(t *testing.T) { require.NoError(fileHandler.WriteJSON(serviceAccPath, tc.serviceAccKey, file.OptNone)) } - ctx := context.Background() + ctx := t.Context() ctx, cancel := context.WithTimeout(ctx, 4*time.Second) defer cancel() cmd.SetContext(ctx) diff --git a/cli/internal/cmd/recover_test.go b/cli/internal/cmd/recover_test.go index 41ca89817..04deddc87 100644 --- a/cli/internal/cmd/recover_test.go +++ b/cli/internal/cmd/recover_test.go @@ -138,7 +138,7 @@ func TestRecover(t *testing.T) { require := require.New(t) cmd := NewRecoverCmd() - cmd.SetContext(context.Background()) + cmd.SetContext(t.Context()) out := &bytes.Buffer{} cmd.SetOut(out) cmd.SetErr(out) @@ -225,7 +225,7 @@ func TestDoRecovery(t *testing.T) { log: r.log, } - err := recoverDoer.Do(context.Background()) + err := recoverDoer.Do(t.Context()) if tc.wantErr { assert.Error(err) } else { diff --git a/cli/internal/cmd/upgradecheck_test.go b/cli/internal/cmd/upgradecheck_test.go index 5e6f8329a..0f1a83d2f 100644 --- a/cli/internal/cmd/upgradecheck_test.go +++ b/cli/internal/cmd/upgradecheck_test.go @@ -139,7 +139,7 @@ func TestGetCompatibleImageMeasurements(t *testing.T) { } }) - upgrades, err := getCompatibleImageMeasurements(context.Background(), &bytes.Buffer{}, client, &stubCosignVerifier{}, singleUUIDVerifier(), csp, attestationVariant, versionZero, logger.NewTest(t)) + upgrades, err := getCompatibleImageMeasurements(t.Context(), &bytes.Buffer{}, client, &stubCosignVerifier{}, singleUUIDVerifier(), csp, attestationVariant, versionZero, logger.NewTest(t)) assert.NoError(err) for _, measurement := range upgrades { @@ -344,7 +344,7 @@ func TestNewCLIVersions(t *testing.T) { t.Run(name, func(t *testing.T) { require := require.New(t) - _, err := tc.verCollector.newCLIVersions(context.Background()) + _, err := tc.verCollector.newCLIVersions(t.Context()) if tc.wantErr { require.Error(err) return @@ -385,7 +385,7 @@ func TestFilterCompatibleCLIVersions(t *testing.T) { t.Run(name, func(t *testing.T) { require := require.New(t) - _, err := tc.verCollector.filterCompatibleCLIVersions(context.Background(), tc.cliPatchVersions, consemver.NewFromInt(1, 24, 5, "")) + _, err := tc.verCollector.filterCompatibleCLIVersions(t.Context(), tc.cliPatchVersions, consemver.NewFromInt(1, 24, 5, "")) if tc.wantErr { require.Error(err) return diff --git a/cli/internal/cmd/verify_test.go b/cli/internal/cmd/verify_test.go index 3e161c8c8..6fa326a97 100644 --- a/cli/internal/cmd/verify_test.go +++ b/cli/internal/cmd/verify_test.go @@ -235,7 +235,7 @@ func TestFormatDefault(t *testing.T) { for name, tc := range testCases { t.Run(name, func(t *testing.T) { - _, err := formatDefault(context.Background(), tc.doc, tc.attCfg, logger.NewTest(t)) + _, err := formatDefault(t.Context(), tc.doc, tc.attCfg, logger.NewTest(t)) if tc.wantErr { assert.Error(t, err) } else { @@ -313,7 +313,7 @@ func TestVerifyClient(t *testing.T) { Nonce: tc.nonce, } - _, err = verifier.Verify(context.Background(), addr, request, atls.NewFakeValidator(variant.Dummy{})) + _, err = verifier.Verify(t.Context(), addr, request, atls.NewFakeValidator(variant.Dummy{})) if tc.wantErr { assert.Error(err) diff --git a/cli/internal/terraform/terraform_test.go b/cli/internal/terraform/terraform_test.go index 41236a4f0..8d88036c7 100644 --- a/cli/internal/terraform/terraform_test.go +++ b/cli/internal/terraform/terraform_test.go @@ -483,7 +483,7 @@ func TestCreateCluster(t *testing.T) { path := path.Join(tc.pathBase, strings.ToLower(tc.provider.String())) require.NoError(c.PrepareWorkspace(path, tc.vars)) - infraState, err := c.ApplyCluster(context.Background(), tc.provider, LogLevelDebug) + infraState, err := c.ApplyCluster(t.Context(), tc.provider, LogLevelDebug) if tc.wantErr { assert.Error(err) @@ -799,7 +799,7 @@ func TestCreateIAM(t *testing.T) { path := path.Join(tc.pathBase, strings.ToLower(tc.provider.String())) require.NoError(c.PrepareWorkspace(path, tc.vars)) - IAMoutput, err := c.ApplyIAM(context.Background(), tc.provider, LogLevelDebug) + IAMoutput, err := c.ApplyIAM(t.Context(), tc.provider, LogLevelDebug) if tc.wantErr { assert.Error(err) @@ -841,7 +841,7 @@ func TestDestroyInstances(t *testing.T) { tf: tc.tf, } - err := c.Destroy(context.Background(), LogLevelDebug) + err := c.Destroy(t.Context(), LogLevelDebug) if tc.wantErr { assert.Error(err) return @@ -1073,7 +1073,7 @@ func TestPlan(t *testing.T) { workingDir: tc.pathBase, } - _, err := c.Plan(context.Background(), LogLevelDebug) + _, err := c.Plan(t.Context(), LogLevelDebug) if tc.wantErr { require.Error(err) } else { @@ -1132,7 +1132,7 @@ func TestShowPlan(t *testing.T) { workingDir: tc.pathBase, } - err := c.ShowPlan(context.Background(), LogLevelDebug, bytes.NewBuffer(nil)) + err := c.ShowPlan(t.Context(), LogLevelDebug, bytes.NewBuffer(nil)) if tc.wantErr { require.Error(err) } else { @@ -1320,7 +1320,7 @@ func TestShowIAM(t *testing.T) { tf: tc.tf, } - _, err := c.ShowIAM(context.Background(), tc.csp) + _, err := c.ShowIAM(t.Context(), tc.csp) if tc.wantErr { assert.Error(err) return diff --git a/csi/cryptmapper/cryptmapper_test.go b/csi/cryptmapper/cryptmapper_test.go index cef34cd18..e4ca49ca7 100644 --- a/csi/cryptmapper/cryptmapper_test.go +++ b/csi/cryptmapper/cryptmapper_test.go @@ -202,7 +202,7 @@ func TestOpenCryptDevice(t *testing.T) { getDiskFormat: tc.diskInfo, } - out, err := mapper.OpenCryptDevice(context.Background(), tc.source, tc.volumeID, tc.integrity) + out, err := mapper.OpenCryptDevice(t.Context(), tc.source, tc.volumeID, tc.integrity) if tc.wantErr { assert.Error(err) } else { @@ -223,7 +223,7 @@ func TestOpenCryptDevice(t *testing.T) { kms: &fakeKMS{}, getDiskFormat: getDiskFormat, } - _, err := mapper.OpenCryptDevice(context.Background(), "/dev/some-device", "volume01", false) + _, err := mapper.OpenCryptDevice(t.Context(), "/dev/some-device", "volume01", false) assert.NoError(t, err) } @@ -270,7 +270,7 @@ func TestResizeCryptDevice(t *testing.T) { mapper: testMapper(tc.device), } - res, err := mapper.ResizeCryptDevice(context.Background(), tc.volumeID) + res, err := mapper.ResizeCryptDevice(t.Context(), tc.volumeID) if tc.wantErr { assert.Error(err) } else { diff --git a/csi/kms/constellation_test.go b/csi/kms/constellation_test.go index 3b82a8c1c..06427e672 100644 --- a/csi/kms/constellation_test.go +++ b/csi/kms/constellation_test.go @@ -57,7 +57,7 @@ func TestConstellationKMS(t *testing.T) { endpoint: listener.Addr().String(), kms: tc.kms, } - res, err := kms.GetDEK(context.Background(), "data-key", 64) + res, err := kms.GetDEK(t.Context(), "data-key", 64) if tc.wantErr { assert.Error(err) diff --git a/csi/test/mount_integration_test.go b/csi/test/mount_integration_test.go index 36e9f7b15..585677998 100644 --- a/csi/test/mount_integration_test.go +++ b/csi/test/mount_integration_test.go @@ -105,7 +105,7 @@ func TestOpenAndClose(t *testing.T) { mapper := cryptmapper.New(&fakeKMS{}) - newPath, err := mapper.OpenCryptDevice(context.Background(), devicePath, deviceName, false) + newPath, err := mapper.OpenCryptDevice(t.Context(), devicePath, deviceName, false) require.NoError(err) defer func() { _ = mapper.CloseCryptDevice(deviceName) @@ -119,14 +119,14 @@ func TestOpenAndClose(t *testing.T) { assert.True(os.IsNotExist(err)) // Opening the same device should return the same path and not error - newPath2, err := mapper.OpenCryptDevice(context.Background(), devicePath, deviceName, false) + newPath2, err := mapper.OpenCryptDevice(t.Context(), devicePath, deviceName, false) require.NoError(err) assert.Equal(newPath, newPath2) // Resize the device resize(devicePath) - resizedPath, err := mapper.ResizeCryptDevice(context.Background(), deviceName) + resizedPath, err := mapper.ResizeCryptDevice(t.Context(), deviceName) require.NoError(err) assert.Equal("/dev/mapper/"+deviceName, resizedPath) @@ -137,7 +137,7 @@ func TestOpenAndClose(t *testing.T) { assert.True(os.IsNotExist(err)) // check if we can reopen the device - _, err = mapper.OpenCryptDevice(context.Background(), devicePath, deviceName, true) + _, err = mapper.OpenCryptDevice(t.Context(), devicePath, deviceName, true) assert.NoError(err) assert.NoError(mapper.CloseCryptDevice(deviceName)) } @@ -150,7 +150,7 @@ func TestOpenAndCloseIntegrity(t *testing.T) { mapper := cryptmapper.New(&fakeKMS{}) - newPath, err := mapper.OpenCryptDevice(context.Background(), devicePath, deviceName, true) + newPath, err := mapper.OpenCryptDevice(t.Context(), devicePath, deviceName, true) require.NoError(err) assert.Equal("/dev/mapper/"+deviceName, newPath) @@ -162,13 +162,13 @@ func TestOpenAndCloseIntegrity(t *testing.T) { assert.NoError(err) // Opening the same device should return the same path and not error - newPath2, err := mapper.OpenCryptDevice(context.Background(), devicePath, deviceName, true) + newPath2, err := mapper.OpenCryptDevice(t.Context(), devicePath, deviceName, true) require.NoError(err) assert.Equal(newPath, newPath2) // integrity devices do not support resizing resize(devicePath) - _, err = mapper.ResizeCryptDevice(context.Background(), deviceName) + _, err = mapper.ResizeCryptDevice(t.Context(), deviceName) assert.Error(err) assert.NoError(mapper.CloseCryptDevice(deviceName)) @@ -181,7 +181,7 @@ func TestOpenAndCloseIntegrity(t *testing.T) { assert.True(os.IsNotExist(err)) // check if we can reopen the device - _, err = mapper.OpenCryptDevice(context.Background(), devicePath, deviceName, true) + _, err = mapper.OpenCryptDevice(t.Context(), devicePath, deviceName, true) assert.NoError(err) assert.NoError(mapper.CloseCryptDevice(deviceName)) } @@ -194,13 +194,13 @@ func TestDeviceCloning(t *testing.T) { mapper := cryptmapper.New(&dynamicKMS{}) - _, err := mapper.OpenCryptDevice(context.Background(), devicePath, deviceName, false) + _, err := mapper.OpenCryptDevice(t.Context(), devicePath, deviceName, false) assert.NoError(err) require.NoError(cp(devicePath, devicePath+"-copy")) defer teardown(devicePath + "-copy") - _, err = mapper.OpenCryptDevice(context.Background(), devicePath+"-copy", deviceName+"-copy", false) + _, err = mapper.OpenCryptDevice(t.Context(), devicePath+"-copy", deviceName+"-copy", false) assert.NoError(err) assert.NoError(mapper.CloseCryptDevice(deviceName)) @@ -220,7 +220,7 @@ func TestConcurrency(t *testing.T) { wg := sync.WaitGroup{} runTest := func(path, name string) { - newPath, err := mapper.OpenCryptDevice(context.Background(), path, name, false) + newPath, err := mapper.OpenCryptDevice(t.Context(), path, name, false) assert.NoError(err) defer func() { _ = mapper.CloseCryptDevice(name) diff --git a/debugd/internal/debugd/deploy/download_test.go b/debugd/internal/debugd/deploy/download_test.go index 8477377c5..6984f3e87 100644 --- a/debugd/internal/debugd/deploy/download_test.go +++ b/debugd/internal/debugd/deploy/download_test.go @@ -123,7 +123,7 @@ func TestDownloadDeployment(t *testing.T) { serviceManager: serviceMgr, } - err := download.DownloadDeployment(context.Background(), ip) + err := download.DownloadDeployment(t.Context(), ip) if tc.wantErr { assert.Error(err) @@ -194,7 +194,7 @@ func TestDownloadInfo(t *testing.T) { info: &tc.infoSetter, } - err := download.DownloadInfo(context.Background(), ip) + err := download.DownloadInfo(t.Context(), ip) if tc.wantErr { assert.Error(err) diff --git a/debugd/internal/debugd/deploy/service_test.go b/debugd/internal/debugd/deploy/service_test.go index f0b398333..392809f9e 100644 --- a/debugd/internal/debugd/deploy/service_test.go +++ b/debugd/internal/debugd/deploy/service_test.go @@ -108,7 +108,7 @@ func TestSystemdAction(t *testing.T) { fs: fs, systemdUnitFilewriteLock: sync.Mutex{}, } - err := manager.SystemdAction(context.Background(), ServiceManagerRequest{ + err := manager.SystemdAction(t.Context(), ServiceManagerRequest{ Unit: unitName, Action: tc.action, }) @@ -188,7 +188,7 @@ func TestWriteSystemdUnitFile(t *testing.T) { fs: fs, systemdUnitFilewriteLock: sync.Mutex{}, } - err := manager.WriteSystemdUnitFile(context.Background(), tc.unit) + err := manager.WriteSystemdUnitFile(t.Context(), tc.unit) if tc.wantErr { assert.Error(err) @@ -302,7 +302,7 @@ func TestOverrideServiceUnitExecStart(t *testing.T) { fs: fs, systemdUnitFilewriteLock: sync.Mutex{}, } - err := manager.OverrideServiceUnitExecStart(context.Background(), tc.unitName, tc.execStart) + err := manager.OverrideServiceUnitExecStart(t.Context(), tc.unitName, tc.execStart) if tc.wantErr { assert.Error(err) diff --git a/debugd/internal/debugd/logcollector/credentials_test.go b/debugd/internal/debugd/logcollector/credentials_test.go index 19d113c99..acbfee99c 100644 --- a/debugd/internal/debugd/logcollector/credentials_test.go +++ b/debugd/internal/debugd/logcollector/credentials_test.go @@ -67,7 +67,7 @@ func TestGetOpensearchCredentialsGCP(t *testing.T) { g := &gcpCloudCredentialGetter{secretsAPI: tc.gcpAPI} - gotCreds, err := g.GetOpensearchCredentials(context.Background()) + gotCreds, err := g.GetOpensearchCredentials(t.Context()) if tc.wantErr { assert.Error(err) @@ -127,7 +127,7 @@ func TestGetOpensearchCredentialsAzure(t *testing.T) { a := &azureCloudCredentialGetter{secretsAPI: tc.azureAPI} - gotCreds, err := a.GetOpensearchCredentials(context.Background()) + gotCreds, err := a.GetOpensearchCredentials(t.Context()) if tc.wantErr { assert.Error(err) @@ -184,7 +184,7 @@ func TestGetOpensearchCredentialsAWS(t *testing.T) { a := &awsCloudCredentialGetter{secretmanager: tc.awsAPI} - gotCreds, err := a.GetOpensearchCredentials(context.Background()) + gotCreds, err := a.GetOpensearchCredentials(t.Context()) if tc.wantErr { assert.Error(err) diff --git a/debugd/internal/debugd/metadata/cloudprovider/cloudprovider_test.go b/debugd/internal/debugd/metadata/cloudprovider/cloudprovider_test.go index e7cbf23e5..2785165b4 100644 --- a/debugd/internal/debugd/metadata/cloudprovider/cloudprovider_test.go +++ b/debugd/internal/debugd/metadata/cloudprovider/cloudprovider_test.go @@ -56,7 +56,7 @@ func TestRole(t *testing.T) { fetcher := Fetcher{tc.meta} - role, err := fetcher.Role(context.Background()) + role, err := fetcher.Role(t.Context()) if tc.wantErr { assert.Error(err) @@ -110,7 +110,7 @@ func TestDiscoverDebugIPs(t *testing.T) { fetcher := Fetcher{ metaAPI: &tc.meta, } - ips, err := fetcher.DiscoverDebugdIPs(context.Background()) + ips, err := fetcher.DiscoverDebugdIPs(t.Context()) if tc.wantErr { assert.Error(err) @@ -149,7 +149,7 @@ func TestDiscoverLoadBalancerIP(t *testing.T) { metaAPI: tc.metaAPI, } - ip, err := fetcher.DiscoverLoadBalancerIP(context.Background()) + ip, err := fetcher.DiscoverLoadBalancerIP(t.Context()) if tc.wantErr { assert.Error(err) diff --git a/debugd/internal/debugd/metadata/fallback/fallback_test.go b/debugd/internal/debugd/metadata/fallback/fallback_test.go index 9ec2d4e0b..62755d6e8 100644 --- a/debugd/internal/debugd/metadata/fallback/fallback_test.go +++ b/debugd/internal/debugd/metadata/fallback/fallback_test.go @@ -7,7 +7,6 @@ SPDX-License-Identifier: AGPL-3.0-only package fallback import ( - "context" "testing" "github.com/edgelesssys/constellation/v2/internal/role" @@ -23,19 +22,19 @@ func TestDiscoverDebugdIPs(t *testing.T) { assert := assert.New(t) fetcher := NewFallbackFetcher() - ips, err := fetcher.DiscoverDebugdIPs(context.Background()) + ips, err := fetcher.DiscoverDebugdIPs(t.Context()) assert.NoError(err) assert.Empty(ips) - rol, err := fetcher.Role(context.Background()) + rol, err := fetcher.Role(t.Context()) assert.NoError(err) assert.Equal(rol, role.Unknown) - uid, err := fetcher.UID(context.Background()) + uid, err := fetcher.UID(t.Context()) assert.NoError(err) assert.Empty(uid) - self, err := fetcher.Self(context.Background()) + self, err := fetcher.Self(t.Context()) assert.NoError(err) assert.Empty(self) } diff --git a/debugd/internal/debugd/metadata/scheduler_test.go b/debugd/internal/debugd/metadata/scheduler_test.go index 13f9d4707..ad543fb96 100644 --- a/debugd/internal/debugd/metadata/scheduler_test.go +++ b/debugd/internal/debugd/metadata/scheduler_test.go @@ -91,7 +91,7 @@ func TestSchedulerStart(t *testing.T) { } wg := &sync.WaitGroup{} - scheduler.Start(context.Background(), wg) + scheduler.Start(t.Context(), wg) wg.Wait() assert.Equal(tc.wantDeploymentDownloads, tc.downloader.downloadDeploymentIPs) diff --git a/debugd/internal/debugd/server/server_test.go b/debugd/internal/debugd/server/server_test.go index 30d2a2c9e..0152da7aa 100644 --- a/debugd/internal/debugd/server/server_test.go +++ b/debugd/internal/debugd/server/server_test.go @@ -79,7 +79,7 @@ func TestSetInfo(t *testing.T) { defer conn.Close() client := pb.NewDebugdClient(conn) - setInfoStatus, err := client.SetInfo(context.Background(), &pb.SetInfoRequest{Info: tc.setInfo}) + setInfoStatus, err := client.SetInfo(t.Context(), &pb.SetInfoRequest{Info: tc.setInfo}) grpcServ.GracefulStop() assert.NoError(err) @@ -137,7 +137,7 @@ func TestGetInfo(t *testing.T) { defer conn.Close() client := pb.NewDebugdClient(conn) - resp, err := client.GetInfo(context.Background(), &pb.GetInfoRequest{}) + resp, err := client.GetInfo(t.Context(), &pb.GetInfoRequest{}) grpcServ.GracefulStop() if tc.wantErr { @@ -201,7 +201,7 @@ func TestUploadFiles(t *testing.T) { require.NoError(err) defer conn.Close() client := pb.NewDebugdClient(conn) - stream, err := client.UploadFiles(context.Background()) + stream, err := client.UploadFiles(t.Context()) require.NoError(err) resp, err := stream.CloseAndRecv() @@ -245,7 +245,7 @@ func TestDownloadFiles(t *testing.T) { require.NoError(err) defer conn.Close() client := pb.NewDebugdClient(conn) - stream, err := client.DownloadFiles(context.Background(), tc.request) + stream, err := client.DownloadFiles(t.Context(), tc.request) require.NoError(err) _, recvErr := stream.Recv() if tc.wantRecvErr { @@ -324,7 +324,7 @@ func TestUploadSystemServiceUnits(t *testing.T) { require.NoError(err) defer conn.Close() client := pb.NewDebugdClient(conn) - resp, err := client.UploadSystemServiceUnits(context.Background(), tc.request) + resp, err := client.UploadSystemServiceUnits(t.Context(), tc.request) grpcServ.GracefulStop() diff --git a/disk-mapper/internal/recoveryserver/recoveryserver_test.go b/disk-mapper/internal/recoveryserver/recoveryserver_test.go index 1a7722bb7..3248c16f5 100644 --- a/disk-mapper/internal/recoveryserver/recoveryserver_test.go +++ b/disk-mapper/internal/recoveryserver/recoveryserver_test.go @@ -40,7 +40,7 @@ func TestServe(t *testing.T) { server := New(atls.NewFakeIssuer(variant.Dummy{}), newStubKMS(nil, nil), log) dialer := testdialer.NewBufconnDialer() listener := dialer.GetListener("192.0.2.1:1234") - ctx, cancel := context.WithCancel(context.Background()) + ctx, cancel := context.WithCancel(t.Context()) var wg sync.WaitGroup // Serve method returns when context is canceled @@ -62,7 +62,7 @@ func TestServe(t *testing.T) { wg.Add(1) go func() { defer wg.Done() - _, _, err := server.Serve(context.Background(), listener, uuid) + _, _, err := server.Serve(t.Context(), listener, uuid) assert.NoError(err) }() time.Sleep(100 * time.Millisecond) @@ -70,7 +70,7 @@ func TestServe(t *testing.T) { wg.Wait() // Serve method returns an error when serving is unsuccessful - _, _, err := server.Serve(context.Background(), listener, uuid) + _, _, err := server.Serve(t.Context(), listener, uuid) assert.Error(err) } @@ -104,7 +104,7 @@ func TestRecover(t *testing.T) { assert := assert.New(t) require := require.New(t) - ctx := context.Background() + ctx := t.Context() serverUUID := "uuid" server := New(atls.NewFakeIssuer(variant.Dummy{}), tc.factory, logger.NewTest(t)) netDialer := testdialer.NewBufconnDialer() diff --git a/disk-mapper/internal/rejoinclient/rejoinclient_test.go b/disk-mapper/internal/rejoinclient/rejoinclient_test.go index 18bf15df1..bd77b3643 100644 --- a/disk-mapper/internal/rejoinclient/rejoinclient_test.go +++ b/disk-mapper/internal/rejoinclient/rejoinclient_test.go @@ -71,7 +71,7 @@ func TestStartCancel(t *testing.T) { go rejoinServer.Serve(listener) defer rejoinServer.GracefulStop() - ctx, cancel := context.WithCancel(context.Background()) + ctx, cancel := context.WithCancel(t.Context()) var wg sync.WaitGroup wg.Add(1) @@ -294,7 +294,7 @@ func TestStart(t *testing.T) { client := New(dialer, tc.nodeInfo, meta, logger.NewTest(t)) - passphrase, secret := client.Start(context.Background(), "uuid") + passphrase, secret := client.Start(t.Context(), "uuid") assert.Equal(diskKey, passphrase) assert.Equal(measurementSecret, secret) }) diff --git a/e2e/internal/lb/lb_test.go b/e2e/internal/lb/lb_test.go index 94c8d2ff3..2596a800e 100644 --- a/e2e/internal/lb/lb_test.go +++ b/e2e/internal/lb/lb_test.go @@ -12,7 +12,6 @@ package lb import ( "bufio" "bytes" - "context" "fmt" "io" "net/http" @@ -70,7 +69,7 @@ func TestLoadBalancer(t *testing.T) { t.Log("Change port of service to 8044") svc.Spec.Ports[0].Port = newPort - svc, err = k.CoreV1().Services(namespaceName).Update(context.Background(), svc, metaV1.UpdateOptions{}) + svc, err = k.CoreV1().Services(namespaceName).Update(t.Context(), svc, metaV1.UpdateOptions{}) require.NoError(err) assert.Equal(newPort, svc.Spec.Ports[0].Port) @@ -93,7 +92,7 @@ func gatherDebugInfo(t *testing.T, k *kubernetes.Clientset) { t.Log("Gathering additional debug information.") - pods, err := k.CoreV1().Pods(namespaceName).List(context.Background(), metaV1.ListOptions{ + pods, err := k.CoreV1().Pods(namespaceName).List(t.Context(), metaV1.ListOptions{ LabelSelector: "app=whoami", }) if err != nil { @@ -106,7 +105,7 @@ func gatherDebugInfo(t *testing.T, k *kubernetes.Clientset) { req := k.CoreV1().Pods(namespaceName).GetLogs(pod.Name, &coreV1.PodLogOptions{ LimitBytes: func() *int64 { i := int64(1024 * 1024); return &i }(), }) - logs, err := req.Stream(context.Background()) + logs, err := req.Stream(t.Context()) if err != nil { t.Logf("fetching logs: %v", err) return @@ -155,7 +154,7 @@ func testEventuallyStatusOK(t *testing.T, url string) { require := require.New(t) assert.Eventually(func() bool { - req, err := http.NewRequestWithContext(context.Background(), http.MethodGet, url, http.NoBody) + req, err := http.NewRequestWithContext(t.Context(), http.MethodGet, url, http.NoBody) require.NoError(err) resp, err := http.DefaultClient.Do(req) @@ -183,7 +182,7 @@ func testEventuallyExternalIPAvailable(t *testing.T, k *kubernetes.Clientset) *c require.Eventually(t, func() bool { var err error - svc, err = k.CoreV1().Services(namespaceName).Get(context.Background(), serviceName, metaV1.GetOptions{}) + svc, err = k.CoreV1().Services(namespaceName).Get(t.Context(), serviceName, metaV1.GetOptions{}) if err != nil { t.Log("Getting service failed: ", err.Error()) return false @@ -212,7 +211,7 @@ func testEndpointAvailable(t *testing.T, url string, allHostnames []string, reqI assert := assert.New(t) require := require.New(t) - req, err := http.NewRequestWithContext(context.Background(), http.MethodGet, url, http.NoBody) + req, err := http.NewRequestWithContext(t.Context(), http.MethodGet, url, http.NoBody) require.NoError(err) resp, err := http.DefaultClient.Do(req) diff --git a/e2e/internal/upgrade/upgrade.go b/e2e/internal/upgrade/upgrade.go index fd2483259..046c0bf4d 100644 --- a/e2e/internal/upgrade/upgrade.go +++ b/e2e/internal/upgrade/upgrade.go @@ -90,7 +90,7 @@ func testStatusEventuallyWorks(t *testing.T, cli string, timeout time.Duration) // Show versions set in cluster. // The string after "Cluster status:" in the output might not be updated yet. // This is only updated after the operator finishes one reconcile loop. - cmd := exec.CommandContext(context.Background(), cli, "status") + cmd := exec.CommandContext(t.Context(), cli, "status") stdout, stderr, err := runCommandWithSeparateOutputs(cmd) if err != nil { log.Printf("Stdout: %s\nStderr: %s", string(stdout), string(stderr)) @@ -121,7 +121,7 @@ func testMicroservicesEventuallyHaveVersion(t *testing.T, wantMicroserviceVersio func testNodesEventuallyHaveVersion(t *testing.T, k *kubernetes.Clientset, targetVersions VersionContainer, totalNodeCount int, timeout time.Duration) { require.Eventually(t, func() bool { - nodes, err := k.CoreV1().Nodes().List(context.Background(), metaV1.ListOptions{}) + nodes, err := k.CoreV1().Nodes().List(t.Context(), metaV1.ListOptions{}) if err != nil { log.Println(err) return false diff --git a/e2e/internal/upgrade/upgrade_test.go b/e2e/internal/upgrade/upgrade_test.go index be47bb197..7d24b1fde 100644 --- a/e2e/internal/upgrade/upgrade_test.go +++ b/e2e/internal/upgrade/upgrade_test.go @@ -72,7 +72,7 @@ func TestUpgrade(t *testing.T) { targetVersions := WriteUpgradeConfig(require, *targetImage, *targetKubernetes, *targetMicroservices, constants.ConfigFilename) log.Println("Fetching measurements for new image.") - cmd := exec.CommandContext(context.Background(), cli, "config", "fetch-measurements", "--insecure", "--debug") + cmd := exec.CommandContext(t.Context(), cli, "config", "fetch-measurements", "--insecure", "--debug") stdout, stderr, err := runCommandWithSeparateOutputs(cmd) require.NoError(err, "Stdout: %s\nStderr: %s", string(stdout), string(stderr)) log.Println(string(stdout)) @@ -83,10 +83,10 @@ func TestUpgrade(t *testing.T) { log.Println("Checking upgrade.") assert := assert.New(t) // use assert because this part is more brittle and should not fail the entire test - runUpgradeCheck(assert, cli, *targetKubernetes) + runUpgradeCheck(t.Context(), assert, cli, *targetKubernetes) log.Println("Triggering upgrade.") - runUpgradeApply(require, cli) + runUpgradeApply(t.Context(), require, cli) AssertUpgradeSuccessful(t, cli, targetVersions, k, *wantControl, *wantWorker, *timeout) } @@ -96,7 +96,7 @@ func TestUpgrade(t *testing.T) { // 2) all pods have good status conditions. func testPodsEventuallyReady(t *testing.T, k *kubernetes.Clientset, namespace string) { require.Eventually(t, func() bool { - pods, err := k.CoreV1().Pods(namespace).List(context.Background(), metaV1.ListOptions{}) + pods, err := k.CoreV1().Pods(namespace).List(t.Context(), metaV1.ListOptions{}) if err != nil { log.Println(err) return false @@ -127,7 +127,7 @@ func testPodsEventuallyReady(t *testing.T, k *kubernetes.Clientset, namespace st // 2) the expected number of nodes have joined the cluster. func testNodesEventuallyAvailable(t *testing.T, k *kubernetes.Clientset, wantControlNodeCount, wantWorkerNodeCount int) { require.Eventually(t, func() bool { - nodes, err := k.CoreV1().Nodes().List(context.Background(), metaV1.ListOptions{}) + nodes, err := k.CoreV1().Nodes().List(t.Context(), metaV1.ListOptions{}) if err != nil { log.Println(err) return false @@ -172,8 +172,8 @@ func testNodesEventuallyAvailable(t *testing.T, k *kubernetes.Clientset, wantCon // runUpgradeCheck executes 'upgrade check' and does basic checks on the output. // We can not check images upgrades because we might use unpublished images. CLI uses public CDN to check for available images. -func runUpgradeCheck(assert *assert.Assertions, cli, targetKubernetes string) { - cmd := exec.CommandContext(context.Background(), cli, "upgrade", "check", "--debug") +func runUpgradeCheck(ctx context.Context, assert *assert.Assertions, cli, targetKubernetes string) { + cmd := exec.CommandContext(ctx, cli, "upgrade", "check", "--debug") stdout, stderr, err := runCommandWithSeparateOutputs(cmd) assert.NoError(err, "Stdout: %s\nStderr: %s", string(stdout), string(stderr)) @@ -204,16 +204,16 @@ func containsAny(text string, substrs []string) bool { return false } -func runUpgradeApply(require *require.Assertions, cli string) { +func runUpgradeApply(ctx context.Context, require *require.Assertions, cli string) { tfLogFlag := "" - cmd := exec.CommandContext(context.Background(), cli, "--help") + cmd := exec.CommandContext(ctx, cli, "--help") stdout, stderr, err := runCommandWithSeparateOutputs(cmd) require.NoError(err, "Stdout: %s\nStderr: %s", string(stdout), string(stderr)) if strings.Contains(string(stdout), "--tf-log") { tfLogFlag = "--tf-log=DEBUG" } - cmd = exec.CommandContext(context.Background(), cli, "apply", "--debug", "--yes", tfLogFlag) + cmd = exec.CommandContext(ctx, cli, "apply", "--debug", "--yes", tfLogFlag) stdout, stderr, err = runCommandWithSeparateOutputs(cmd) require.NoError(err, "Stdout: %s\nStderr: %s", string(stdout), string(stderr)) require.NoError(containsUnexepectedMsg(string(stdout))) diff --git a/go.mod b/go.mod index d8d1a48d1..2146205fa 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,6 @@ module github.com/edgelesssys/constellation/v2 -go 1.23.6 +go 1.24.2 // TODO(daniel-weisse): revert after merging https://github.com/martinjungblut/go-cryptsetup/pull/16. replace github.com/martinjungblut/go-cryptsetup => github.com/daniel-weisse/go-cryptsetup v0.0.0-20230705150314-d8c07bd1723c diff --git a/go.work b/go.work index 799457415..c137fb60c 100644 --- a/go.work +++ b/go.work @@ -1,6 +1,6 @@ -go 1.23.6 +go 1.24.2 -toolchain go1.23.6 +toolchain go1.24.2 use ( . diff --git a/hack/bazel-deps-mirror/internal/mirror/mirror_test.go b/hack/bazel-deps-mirror/internal/mirror/mirror_test.go index 541c1fa52..d6cb7b91d 100644 --- a/hack/bazel-deps-mirror/internal/mirror/mirror_test.go +++ b/hack/bazel-deps-mirror/internal/mirror/mirror_test.go @@ -137,7 +137,7 @@ func TestMirror(t *testing.T) { unauthenticated: tc.unauthenticated, log: logger.NewTest(t), } - err := m.Mirror(context.Background(), tc.hash, []string{tc.upstreamURL}) + err := m.Mirror(t.Context(), tc.hash, []string{tc.upstreamURL}) if tc.wantErr { assert.Error(t, err) } else { @@ -180,7 +180,7 @@ func TestLearn(t *testing.T) { }, log: logger.NewTest(t), } - gotHash, err := m.Learn(context.Background(), []string{"https://example.com/foo"}) + gotHash, err := m.Learn(t.Context(), []string{"https://example.com/foo"}) if tc.wantErr { assert.Error(err) return @@ -274,7 +274,7 @@ func TestCheck(t *testing.T) { }, log: logger.NewTest(t), } - err := m.Check(context.Background(), tc.hash) + err := m.Check(t.Context(), tc.hash) if tc.wantErr { assert.Error(t, err) } else { diff --git a/hack/qemu-metadata-api/server/server_test.go b/hack/qemu-metadata-api/server/server_test.go index 363cb3ed2..376af51fc 100644 --- a/hack/qemu-metadata-api/server/server_test.go +++ b/hack/qemu-metadata-api/server/server_test.go @@ -7,7 +7,6 @@ SPDX-License-Identifier: AGPL-3.0-only package server import ( - "context" "encoding/json" "io" "net/http" @@ -127,7 +126,7 @@ func TestListSelf(t *testing.T) { server := New(logger.NewTest(t), "test", "initSecretHash", tc.stubLeaseGetter) - req, err := http.NewRequestWithContext(context.Background(), http.MethodGet, "http://192.0.0.1/self", nil) + req, err := http.NewRequestWithContext(t.Context(), http.MethodGet, "http://192.0.0.1/self", nil) require.NoError(err) req.RemoteAddr = tc.remoteAddr @@ -187,7 +186,7 @@ func TestListPeers(t *testing.T) { server := New(logger.NewTest(t), "test", "initSecretHash", tc.stubNetworkGetter) - req, err := http.NewRequestWithContext(context.Background(), http.MethodGet, "http://192.0.0.1/peers", nil) + req, err := http.NewRequestWithContext(t.Context(), http.MethodGet, "http://192.0.0.1/peers", nil) require.NoError(err) req.RemoteAddr = tc.remoteAddr @@ -243,7 +242,7 @@ func TestInitSecretHash(t *testing.T) { server := New(logger.NewTest(t), "test", tc.wantHash, defaultConnect) - req, err := http.NewRequestWithContext(context.Background(), tc.method, "http://192.0.0.1/initsecrethash", nil) + req, err := http.NewRequestWithContext(t.Context(), tc.method, "http://192.0.0.1/initsecrethash", nil) require.NoError(err) w := httptest.NewRecorder() diff --git a/hack/tools/go.mod b/hack/tools/go.mod index 23cf46207..e11330aed 100644 --- a/hack/tools/go.mod +++ b/hack/tools/go.mod @@ -1,6 +1,6 @@ module github.com/edgelesssys/constellation/v2/hack/tools -go 1.23.6 +go 1.24.2 require ( github.com/google/go-licenses v1.6.0 diff --git a/internal/api/attestationconfigapi/fetcher_test.go b/internal/api/attestationconfigapi/fetcher_test.go index b3d737f54..21802aea6 100644 --- a/internal/api/attestationconfigapi/fetcher_test.go +++ b/internal/api/attestationconfigapi/fetcher_test.go @@ -7,7 +7,6 @@ package attestationconfigapi import ( "bytes" - "context" "encoding/json" "errors" "fmt" @@ -103,7 +102,7 @@ func TestFetchLatestSEVSNPVersion(t *testing.T) { }, } fetcher := newFetcherWithClientAndVerifier(client, stubVerifier{}, constants.CDNRepositoryURL) - res, err := fetcher.FetchLatestVersion(context.Background(), tc.attestation) + res, err := fetcher.FetchLatestVersion(t.Context(), tc.attestation) assert := assert.New(t) if tc.wantErr { assert.Error(err) diff --git a/internal/api/versionsapi/fetcher_test.go b/internal/api/versionsapi/fetcher_test.go index ff00ebdb6..bf200795d 100644 --- a/internal/api/versionsapi/fetcher_test.go +++ b/internal/api/versionsapi/fetcher_test.go @@ -8,7 +8,6 @@ package versionsapi import ( "bytes" - "context" "encoding/json" "io" "net/http" @@ -192,7 +191,7 @@ func TestFetchVersionList(t *testing.T) { fetcher := Fetcher{client, constants.CDNRepositoryURL} - list, err := fetcher.FetchVersionList(context.Background(), tc.list) + list, err := fetcher.FetchVersionList(t.Context(), tc.list) if tc.wantErr { assert.Error(err) diff --git a/internal/atls/atls_test.go b/internal/atls/atls_test.go index db315b3a1..a28a8d714 100644 --- a/internal/atls/atls_test.go +++ b/internal/atls/atls_test.go @@ -7,7 +7,6 @@ SPDX-License-Identifier: AGPL-3.0-only package atls import ( - "context" "encoding/asn1" "errors" "io" @@ -162,7 +161,7 @@ func TestTLSConfig(t *testing.T) { server.StartTLS() defer server.Close() - req, err := http.NewRequestWithContext(context.Background(), http.MethodGet, server.URL, http.NoBody) + req, err := http.NewRequestWithContext(t.Context(), http.MethodGet, server.URL, http.NoBody) require.NoError(err) resp, err := client.Do(req) if tc.wantErr { @@ -221,7 +220,7 @@ func TestClientConnectionConcurrency(t *testing.T) { var reqs []*http.Request for _, url := range urls { - req, err := http.NewRequestWithContext(context.Background(), http.MethodGet, url, http.NoBody) + req, err := http.NewRequestWithContext(t.Context(), http.MethodGet, url, http.NoBody) require.NoError(err) reqs = append(reqs, req) } @@ -295,7 +294,7 @@ func TestServerConnectionConcurrency(t *testing.T) { var reqs []*http.Request for _, url := range urls { - req, err := http.NewRequestWithContext(context.Background(), http.MethodGet, url, http.NoBody) + req, err := http.NewRequestWithContext(t.Context(), http.MethodGet, url, http.NoBody) require.NoError(err) reqs = append(reqs, req) } diff --git a/internal/attestation/aws/nitrotpm/issuer_test.go b/internal/attestation/aws/nitrotpm/issuer_test.go index 59b5b7e47..0477dd4e5 100644 --- a/internal/attestation/aws/nitrotpm/issuer_test.go +++ b/internal/attestation/aws/nitrotpm/issuer_test.go @@ -100,7 +100,7 @@ func TestGetInstanceInfo(t *testing.T) { instanceInfoFunc := getInstanceInfo(&tc.client) assert.NotNil(instanceInfoFunc) - info, err := instanceInfoFunc(context.Background(), tpm, nil) + info, err := instanceInfoFunc(t.Context(), tpm, nil) if tc.wantErr { assert.Error(err) assert.Nil(info) diff --git a/internal/attestation/aws/nitrotpm/validator_test.go b/internal/attestation/aws/nitrotpm/validator_test.go index 0e6d086cd..e53d14210 100644 --- a/internal/attestation/aws/nitrotpm/validator_test.go +++ b/internal/attestation/aws/nitrotpm/validator_test.go @@ -42,7 +42,7 @@ func TestGeTrustedKey(t *testing.T) { t.Run(name, func(t *testing.T) { assert := assert.New(t) out, err := getTrustedKey( - context.Background(), + t.Context(), vtpm.AttestationDocument{ Attestation: &attest.Attestation{ AkPub: tc.akPub, diff --git a/internal/attestation/aws/snp/validator_test.go b/internal/attestation/aws/snp/validator_test.go index 84804a886..8abc98f44 100644 --- a/internal/attestation/aws/snp/validator_test.go +++ b/internal/attestation/aws/snp/validator_test.go @@ -8,7 +8,6 @@ package snp import ( "bytes" - "context" "crypto" "crypto/x509" "encoding/base64" @@ -67,7 +66,7 @@ func TestGetTrustedKey(t *testing.T) { t.Run(name, func(t *testing.T) { assert := assert.New(t) out, err := validator().getTrustedKey( - context.Background(), + t.Context(), vtpm.AttestationDocument{ Attestation: &attest.Attestation{ AkPub: tc.akPub, diff --git a/internal/attestation/azure/snp/issuer_test.go b/internal/attestation/azure/snp/issuer_test.go index 224937be2..52147a9c0 100644 --- a/internal/attestation/azure/snp/issuer_test.go +++ b/internal/attestation/azure/snp/issuer_test.go @@ -82,7 +82,7 @@ func TestGetSNPAttestation(t *testing.T) { data := []byte("data") - attestationJSON, err := issuer.getInstanceInfo(context.Background(), nil, data) + attestationJSON, err := issuer.getInstanceInfo(t.Context(), nil, data) if tc.wantErr { assert.Error(err) return diff --git a/internal/attestation/azure/snp/validator_test.go b/internal/attestation/azure/snp/validator_test.go index 95f9678b5..59510d444 100644 --- a/internal/attestation/azure/snp/validator_test.go +++ b/internal/attestation/azure/snp/validator_test.go @@ -182,7 +182,7 @@ func TestCheckIDKeyDigest(t *testing.T) { report := reportWithIDKeyDigest(tc.idKeyDigest) validator := newTestValidator(cfg, tc.validateMaaTokenErr) - err := validator.checkIDKeyDigest(context.Background(), report, "", nil) + err := validator.checkIDKeyDigest(t.Context(), report, "", nil) if tc.wantErr { require.Error(err) } else { @@ -650,7 +650,7 @@ func TestTrustedKeyFromSNP(t *testing.T) { attestationValidator: tc.validator, } - key, err := validator.getTrustedKey(context.Background(), attDoc, nil) + key, err := validator.getTrustedKey(t.Context(), attDoc, nil) if tc.wantErr { assert.Error(err) if tc.assertion != nil { diff --git a/internal/attestation/azure/tdx/issuer_test.go b/internal/attestation/azure/tdx/issuer_test.go index e57e63aa0..ed2eec9f4 100644 --- a/internal/attestation/azure/tdx/issuer_test.go +++ b/internal/attestation/azure/tdx/issuer_test.go @@ -8,7 +8,6 @@ package tdx import ( "bytes" - "context" "encoding/binary" "encoding/json" "io" @@ -135,7 +134,7 @@ func TestIMDSGetQuote(t *testing.T) { client: tc.client, } - _, err := quoteGetter.getQuote(context.Background(), []byte("test")) + _, err := quoteGetter.getQuote(t.Context(), []byte("test")) if tc.wantErr { assert.Error(err) } else { diff --git a/internal/attestation/azure/trustedlaunch/trustedlaunch_test.go b/internal/attestation/azure/trustedlaunch/trustedlaunch_test.go index a3bef9ed9..af50566b7 100644 --- a/internal/attestation/azure/trustedlaunch/trustedlaunch_test.go +++ b/internal/attestation/azure/trustedlaunch/trustedlaunch_test.go @@ -8,7 +8,6 @@ package trustedlaunch import ( "bytes" - "context" "crypto/rand" "crypto/rsa" "crypto/x509" @@ -192,7 +191,7 @@ func TestGetAttestationCert(t *testing.T) { issuer := NewIssuer(logger.NewTest(t)) issuer.hClient = newTestClient(tc.crlServer) - certs, err := issuer.getAttestationCert(context.Background(), tpm, nil) + certs, err := issuer.getAttestationCert(t.Context(), tpm, nil) if tc.wantIssueErr { assert.Error(err) return @@ -213,7 +212,7 @@ func TestGetAttestationCert(t *testing.T) { roots.AddCert(cert) validator.roots = roots - key, err := validator.verifyAttestationKey(context.Background(), attDoc, nil) + key, err := validator.verifyAttestationKey(t.Context(), attDoc, nil) if tc.wantValidateErr { assert.Error(err) return diff --git a/internal/attestation/gcp/es/issuer_test.go b/internal/attestation/gcp/es/issuer_test.go index d8d0075de..09cdc1cca 100644 --- a/internal/attestation/gcp/es/issuer_test.go +++ b/internal/attestation/gcp/es/issuer_test.go @@ -67,7 +67,7 @@ func TestGetGCEInstanceInfo(t *testing.T) { require := require.New(t) var tpm io.ReadWriteCloser - out, err := gcp.GCEInstanceInfo(tc.client)(context.Background(), tpm, nil) + out, err := gcp.GCEInstanceInfo(tc.client)(t.Context(), tpm, nil) if tc.wantErr { assert.Error(err) } else { diff --git a/internal/attestation/gcp/es/validator_test.go b/internal/attestation/gcp/es/validator_test.go index 3fa35da7e..46efaf13f 100644 --- a/internal/attestation/gcp/es/validator_test.go +++ b/internal/attestation/gcp/es/validator_test.go @@ -153,7 +153,7 @@ Y+t5OxL3kL15VzY1Ob0d5cMCAwEAAQ== getTrustedKey, err := gcp.TrustedKeyGetter(variant.GCPSEVES{}, tc.getClient) require.NoError(t, err) - out, err := getTrustedKey(context.Background(), attDoc, nil) + out, err := getTrustedKey(t.Context(), attDoc, nil) if tc.wantErr { assert.Error(err) diff --git a/internal/attestation/measurements/fetchmeasurements_test.go b/internal/attestation/measurements/fetchmeasurements_test.go index d79a77a41..ec445962c 100644 --- a/internal/attestation/measurements/fetchmeasurements_test.go +++ b/internal/attestation/measurements/fetchmeasurements_test.go @@ -141,7 +141,7 @@ func TestFetchMeasurements(t *testing.T) { t.Run(name, func(t *testing.T) { assert := assert.New(t) sut := NewVerifyFetcher(tc.cosign, tc.rekor, client) - m, err := sut.FetchAndVerifyMeasurements(context.Background(), "v999.999.999", cloudprovider.GCP, variant.GCPSEVES{}, tc.noVerify) + m, err := sut.FetchAndVerifyMeasurements(t.Context(), "v999.999.999", cloudprovider.GCP, variant.GCPSEVES{}, tc.noVerify) if tc.wantErr { assert.Error(err) if tc.asRekorErr { diff --git a/internal/attestation/measurements/measurements_test.go b/internal/attestation/measurements/measurements_test.go index 73cee7479..f1b6ea58f 100644 --- a/internal/attestation/measurements/measurements_test.go +++ b/internal/attestation/measurements/measurements_test.go @@ -8,7 +8,6 @@ package measurements import ( "bytes" - "context" "encoding/json" "io" "net/http" @@ -458,7 +457,7 @@ func TestMeasurementsFetchAndVerify(t *testing.T) { require.NoError(err) hash, err := m.fetchAndVerify( - context.Background(), client, verifier, + t.Context(), client, verifier, measurementsURL, signatureURL, tc.imageVersion, tc.csp, diff --git a/internal/attestation/vtpm/attestation_test.go b/internal/attestation/vtpm/attestation_test.go index 311b9ebad..703531a21 100644 --- a/internal/attestation/vtpm/attestation_test.go +++ b/internal/attestation/vtpm/attestation_test.go @@ -90,7 +90,7 @@ func TestValidate(t *testing.T) { nonce := []byte{1, 2, 3, 4} challenge := []byte("Constellation") - ctx := context.Background() + ctx := t.Context() attDocRaw, err := issuer.Issue(ctx, challenge, nonce) require.NoError(err) @@ -347,7 +347,7 @@ func TestFailIssuer(t *testing.T) { tc.issuer.log = logger.NewTest(t) - _, err := tc.issuer.Issue(context.Background(), tc.userData, tc.nonce) + _, err := tc.issuer.Issue(t.Context(), tc.userData, tc.nonce) assert.Error(err) }) } diff --git a/internal/cloud/aws/aws_test.go b/internal/cloud/aws/aws_test.go index e1b05ee88..ed08070b1 100644 --- a/internal/cloud/aws/aws_test.go +++ b/internal/cloud/aws/aws_test.go @@ -185,7 +185,7 @@ func TestSelf(t *testing.T) { ec2: tc.ec2API, } - self, err := m.Self(context.Background()) + self, err := m.Self(t.Context()) if tc.wantErr { assert.Error(err) return @@ -431,7 +431,7 @@ func TestList(t *testing.T) { ec2: tc.ec2, } - list, err := m.List(context.Background()) + list, err := m.List(t.Context()) if tc.wantErr { assert.Error(err) return @@ -694,7 +694,7 @@ func TestGetLoadBalancerEndpoint(t *testing.T) { ec2: successfulEC2, } - gotHost, gotPort, err := m.GetLoadBalancerEndpoint(context.Background()) + gotHost, gotPort, err := m.GetLoadBalancerEndpoint(t.Context()) if tc.wantErr { assert.Error(err) return diff --git a/internal/cloud/azure/azure_test.go b/internal/cloud/azure/azure_test.go index 2b1daaab7..c62a01d20 100644 --- a/internal/cloud/azure/azure_test.go +++ b/internal/cloud/azure/azure_test.go @@ -150,7 +150,7 @@ func TestGetInstance(t *testing.T) { scaleSetsVMAPI: tc.scaleSetsVMAPI, netIfacAPI: tc.networkInterfacesAPI, } - instance, err := metadata.getInstance(context.Background(), tc.providerID) + instance, err := metadata.getInstance(t.Context(), tc.providerID) if tc.wantErr { assert.Error(err) return @@ -186,7 +186,7 @@ func TestUID(t *testing.T) { cloud := &Cloud{ imds: tc.imdsAPI, } - uid, err := cloud.UID(context.Background()) + uid, err := cloud.UID(t.Context()) if tc.wantErr { assert.Error(err) return @@ -222,7 +222,7 @@ func TestInitSecretHash(t *testing.T) { cloud := &Cloud{ imds: tc.imdsAPI, } - initSecretHash, err := cloud.InitSecretHash(context.Background()) + initSecretHash, err := cloud.InitSecretHash(t.Context()) if tc.wantErr { assert.Error(err) return @@ -410,7 +410,7 @@ func TestList(t *testing.T) { scaleSetsAPI: tc.scaleSetsAPI, scaleSetsVMAPI: tc.scaleSetsVMAPI, } - instances, err := azureMetadata.List(context.Background()) + instances, err := azureMetadata.List(t.Context()) if tc.wantErr { assert.Error(err) @@ -473,7 +473,7 @@ func TestGetNetworkSecurityGroupName(t *testing.T) { metadata := Cloud{ secGroupAPI: tc.securityGroupsAPI, } - name, err := metadata.getNetworkSecurityGroupName(context.Background(), "resource-group", "uid") + name, err := metadata.getNetworkSecurityGroupName(t.Context(), "resource-group", "uid") if tc.wantErr { assert.Error(err) return @@ -547,7 +547,7 @@ func TestGetSubnetworkCIDR(t *testing.T) { imds: tc.imdsAPI, virtNetAPI: tc.virtualNetworksAPI, } - subnetworkCIDR, err := metadata.getSubnetworkCIDR(context.Background()) + subnetworkCIDR, err := metadata.getSubnetworkCIDR(t.Context()) if tc.wantErr { assert.Error(err) return @@ -708,7 +708,7 @@ func TestGetLoadBalancerEndpoint(t *testing.T) { loadBalancerAPI: tc.loadBalancerAPI, pubIPAPI: tc.publicIPAddressesAPI, } - gotHost, gotPort, err := metadata.GetLoadBalancerEndpoint(context.Background()) + gotHost, gotPort, err := metadata.GetLoadBalancerEndpoint(t.Context()) if tc.wantErr { assert.Error(err) return diff --git a/internal/cloud/azure/imds_test.go b/internal/cloud/azure/imds_test.go index 242a052e7..903d890c0 100644 --- a/internal/cloud/azure/imds_test.go +++ b/internal/cloud/azure/imds_test.go @@ -214,7 +214,7 @@ func TestIMDSClient(t *testing.T) { } iClient := IMDSClient{client: &hClient} - ctx := context.Background() + ctx := t.Context() id, err := iClient.providerID(ctx) if tc.wantProviderIDErr { diff --git a/internal/cloud/gcp/gcp_test.go b/internal/cloud/gcp/gcp_test.go index fa2179163..4e6cf982c 100644 --- a/internal/cloud/gcp/gcp_test.go +++ b/internal/cloud/gcp/gcp_test.go @@ -172,7 +172,7 @@ func TestGetInstance(t *testing.T) { instanceAPI: &tc.instanceAPI, subnetAPI: &tc.subnetAPI, } - instance, err := cloud.getInstance(context.Background(), tc.projectID, tc.zone, tc.instanceName) + instance, err := cloud.getInstance(t.Context(), tc.projectID, tc.zone, tc.instanceName) if tc.wantErr { assert.Error(err) @@ -474,7 +474,7 @@ func TestGetLoadbalancerEndpoint(t *testing.T) { regionalForwardingRulesAPI: &tc.regionalForwardingRulesAPI, } - gotHost, gotPort, err := cloud.GetLoadBalancerEndpoint(context.Background()) + gotHost, gotPort, err := cloud.GetLoadBalancerEndpoint(t.Context()) if tc.wantErr { assert.Error(err) return @@ -810,7 +810,7 @@ func TestList(t *testing.T) { zoneAPI: &tc.zoneAPI, } - instances, err := cloud.List(context.Background()) + instances, err := cloud.List(t.Context()) if tc.wantErr { assert.Error(err) return @@ -915,7 +915,7 @@ func TestZones(t *testing.T) { assert.Empty(cloud.zoneCache) - gotZones, err := cloud.zones(context.Background(), "someProject", "someregion-west3") + gotZones, err := cloud.zones(t.Context(), "someProject", "someregion-west3") if tc.wantErr { assert.Error(err) return @@ -1066,7 +1066,7 @@ func TestUID(t *testing.T) { instanceAPI: &tc.instanceAPI, } - uid, err := cloud.UID(context.Background()) + uid, err := cloud.UID(t.Context()) if tc.wantErr { assert.Error(err) return @@ -1170,7 +1170,7 @@ func TestInitSecretHash(t *testing.T) { instanceAPI: &tc.instanceAPI, } - initSecretHash, err := cloud.InitSecretHash(context.Background()) + initSecretHash, err := cloud.InitSecretHash(t.Context()) if tc.wantErr { assert.Error(err) return diff --git a/internal/cloud/openstack/imds_test.go b/internal/cloud/openstack/imds_test.go index ce45dbd3d..18e857726 100644 --- a/internal/cloud/openstack/imds_test.go +++ b/internal/cloud/openstack/imds_test.go @@ -176,7 +176,7 @@ func TestProviderID(t *testing.T) { cacheTime: tc.cacheTime, } - result, err := tu.method(imds, context.Background()) + result, err := tu.method(imds, t.Context()) if tc.wantErr { assert.Error(err) @@ -264,7 +264,7 @@ func TestRole(t *testing.T) { cacheTime: tc.cacheTime, } - result, err := imds.role(context.Background()) + result, err := imds.role(t.Context()) if tc.wantErr { assert.Error(err) @@ -336,7 +336,7 @@ func TestVPCIP(t *testing.T) { vpcIPCacheTime: tc.cacheTime, } - result, err := imds.vpcIP(context.Background()) + result, err := imds.vpcIP(t.Context()) if tc.wantErr { assert.Error(err) diff --git a/internal/cloud/openstack/openstack_test.go b/internal/cloud/openstack/openstack_test.go index 33835b243..fbf8328f4 100644 --- a/internal/cloud/openstack/openstack_test.go +++ b/internal/cloud/openstack/openstack_test.go @@ -7,7 +7,6 @@ SPDX-License-Identifier: AGPL-3.0-only package openstack import ( - "context" "errors" "fmt" "testing" @@ -88,7 +87,7 @@ func TestSelf(t *testing.T) { c := &MetadataClient{imds: tc.imds} - got, err := c.Self(context.Background()) + got, err := c.Self(t.Context()) if tc.wantErr { assert.Error(err) @@ -384,7 +383,7 @@ func TestList(t *testing.T) { c := &MetadataClient{imds: tc.imds, api: tc.api} - got, err := c.List(context.Background()) + got, err := c.List(t.Context()) if tc.wantErr { assert.Error(err) @@ -418,7 +417,7 @@ func TestUID(t *testing.T) { c := &MetadataClient{imds: tc.imds} - got, err := c.UID(context.Background()) + got, err := c.UID(t.Context()) if tc.wantErr { assert.Error(err) @@ -452,7 +451,7 @@ func TestInitSecretHash(t *testing.T) { c := &MetadataClient{imds: tc.imds} - got, err := c.InitSecretHash(context.Background()) + got, err := c.InitSecretHash(t.Context()) if tc.wantErr { assert.Error(err) @@ -486,7 +485,7 @@ func TestGetLoadBalancerEndpoint(t *testing.T) { c := &MetadataClient{imds: tc.imds} - got, _, err := c.GetLoadBalancerEndpoint(context.Background()) + got, _, err := c.GetLoadBalancerEndpoint(t.Context()) if tc.wantErr { assert.Error(err) diff --git a/internal/constellation/apply_test.go b/internal/constellation/apply_test.go index 54e845033..47c28295e 100644 --- a/internal/constellation/apply_test.go +++ b/internal/constellation/apply_test.go @@ -38,7 +38,7 @@ func TestCheckLicense(t *testing.T) { require := require.New(t) a := &Applier{licenseChecker: tc.licenseChecker, log: logger.NewTest(t)} - _, err := a.CheckLicense(context.Background(), cloudprovider.Unknown, true, license.CommunityLicense) + _, err := a.CheckLicense(t.Context(), cloudprovider.Unknown, true, license.CommunityLicense) if tc.wantErr { require.Error(err) } else { diff --git a/internal/constellation/applyinit_test.go b/internal/constellation/applyinit_test.go index 7d16d5fe7..27ae31561 100644 --- a/internal/constellation/applyinit_test.go +++ b/internal/constellation/applyinit_test.go @@ -214,7 +214,7 @@ func TestInit(t *testing.T) { } clusterLogs := &bytes.Buffer{} - ctx, cancel := context.WithTimeout(context.Background(), time.Second*4) + ctx, cancel := context.WithTimeout(t.Context(), time.Second*4) defer cancel() _, err := a.Init(ctx, nil, tc.state, clusterLogs, InitPayload{ MasterSecret: uri.MasterSecret{}, @@ -280,7 +280,7 @@ func TestAttestation(t *testing.T) { } state := &state.State{Version: state.Version1, Infrastructure: state.Infrastructure{ClusterEndpoint: "192.0.2.4"}} - ctx := context.Background() + ctx := t.Context() ctx, cancel := context.WithTimeout(ctx, 4*time.Second) defer cancel() diff --git a/internal/constellation/helm/retryaction_test.go b/internal/constellation/helm/retryaction_test.go index 6a39d7cb2..7d02cd722 100644 --- a/internal/constellation/helm/retryaction_test.go +++ b/internal/constellation/helm/retryaction_test.go @@ -64,7 +64,7 @@ func TestRetryApply(t *testing.T) { t.Run(name, func(t *testing.T) { assert := assert.New(t) - err := retryApply(context.Background(), tc.applier, time.Millisecond, logger.NewTest(t)) + err := retryApply(t.Context(), tc.applier, time.Millisecond, logger.NewTest(t)) if tc.wantErr { assert.Error(err) } else { diff --git a/internal/constellation/kubecmd/backup_test.go b/internal/constellation/kubecmd/backup_test.go index a95c26be5..bafa59bb5 100644 --- a/internal/constellation/kubecmd/backup_test.go +++ b/internal/constellation/kubecmd/backup_test.go @@ -57,7 +57,7 @@ func TestBackupCRDs(t *testing.T) { log: stubLog{}, } - _, err = client.BackupCRDs(context.Background(), file.NewHandler(memFs), tc.upgradeID) + _, err = client.BackupCRDs(t.Context(), file.NewHandler(memFs), tc.upgradeID) if tc.wantError { assert.Error(err) return @@ -146,7 +146,7 @@ func TestBackupCRs(t *testing.T) { log: stubLog{}, } - err := client.BackupCRs(context.Background(), file.NewHandler(memFs), []apiextensionsv1.CustomResourceDefinition{tc.crd}, tc.upgradeID) + err := client.BackupCRs(t.Context(), file.NewHandler(memFs), []apiextensionsv1.CustomResourceDefinition{tc.crd}, tc.upgradeID) if tc.wantError { assert.Error(err) return diff --git a/internal/constellation/kubecmd/kubecmd_test.go b/internal/constellation/kubecmd/kubecmd_test.go index c88dab9bd..08c9e7e92 100644 --- a/internal/constellation/kubecmd/kubecmd_test.go +++ b/internal/constellation/kubecmd/kubecmd_test.go @@ -180,7 +180,7 @@ func TestUpgradeNodeImage(t *testing.T) { log: logger.NewTest(t), } - err = upgrader.UpgradeNodeImage(context.Background(), tc.newImageVersion, fmt.Sprintf("/path/to/image:%s", tc.newImageVersion.String()), tc.force) + err = upgrader.UpgradeNodeImage(t.Context(), tc.newImageVersion, fmt.Sprintf("/path/to/image:%s", tc.newImageVersion.String()), tc.force) // Check upgrades first because if we checked err first, UpgradeImage may error due to other reasons and still trigger an upgrade. if tc.wantUpdate { assert.NotNil(unstructuredClient.updatedObject) @@ -296,7 +296,7 @@ func TestUpgradeKubernetesVersion(t *testing.T) { log: logger.NewTest(t), } - err = upgrader.UpgradeKubernetesVersion(context.Background(), tc.newKubernetesVersion, tc.force) + err = upgrader.UpgradeKubernetesVersion(t.Context(), tc.newKubernetesVersion, tc.force) // Check upgrades first because if we checked err first, UpgradeImage may error due to other reasons and still trigger an upgrade. if tc.wantUpdate { assert.NotNil(unstructuredClient.updatedObject) @@ -603,7 +603,7 @@ func TestApplyJoinConfig(t *testing.T) { maxAttempts: 5, } - err := cmd.ApplyJoinConfig(context.Background(), tc.newAttestationCfg, []byte{0x11}) + err := cmd.ApplyJoinConfig(t.Context(), tc.newAttestationCfg, []byte{0x11}) if tc.wantErr { assert.Error(err) return @@ -667,7 +667,7 @@ func TestRetryAction(t *testing.T) { return errs[failureCtr] } - err := k.retryAction(context.Background(), action) + err := k.retryAction(t.Context(), action) if tc.wantErr { assert.Error(err) assert.Equal(min(tc.failures, maxAttempts), failureCtr) @@ -680,7 +680,7 @@ func TestRetryAction(t *testing.T) { } func TestExtendClusterConfigCertSANs(t *testing.T) { - ctx := context.Background() + ctx := t.Context() testCases := map[string]struct { clusterConfig string diff --git a/internal/grpc/atlscredentials/atlscredentials_test.go b/internal/grpc/atlscredentials/atlscredentials_test.go index 5753eb631..71a73e997 100644 --- a/internal/grpc/atlscredentials/atlscredentials_test.go +++ b/internal/grpc/atlscredentials/atlscredentials_test.go @@ -73,7 +73,7 @@ func TestATLSCredentials(t *testing.T) { defer conn.Close() client := initproto.NewAPIClient(conn) - _, err = client.Init(context.Background(), &initproto.InitRequest{}) + _, err = client.Init(t.Context(), &initproto.InitRequest{}) }() } diff --git a/internal/grpc/dialer/dialer_test.go b/internal/grpc/dialer/dialer_test.go index 6c93c64f9..dd926b489 100644 --- a/internal/grpc/dialer/dialer_test.go +++ b/internal/grpc/dialer/dialer_test.go @@ -86,7 +86,7 @@ func TestDial(t *testing.T) { defer conn.Close() client := grpc_testing.NewTestServiceClient(conn) - _, err = client.EmptyCall(context.Background(), &grpc_testing.Empty{}) + _, err = client.EmptyCall(t.Context(), &grpc_testing.Empty{}) if tc.wantErr { assert.Error(err) diff --git a/internal/grpc/grpclog/grpclog_test.go b/internal/grpc/grpclog/grpclog_test.go index eb912521f..73578fb66 100644 --- a/internal/grpc/grpclog/grpclog_test.go +++ b/internal/grpc/grpclog/grpclog_test.go @@ -76,7 +76,7 @@ func TestLogStateChanges(t *testing.T) { var wg sync.WaitGroup isReadyCallbackCalled := false - LogStateChangesUntilReady(context.Background(), tc.conn, logger, &wg, func() { isReadyCallbackCalled = true }) + LogStateChangesUntilReady(t.Context(), tc.conn, logger, &wg, func() { isReadyCallbackCalled = true }) wg.Wait() tc.assert(t, logger, isReadyCallbackCalled) }) diff --git a/internal/imagefetcher/imagefetcher_test.go b/internal/imagefetcher/imagefetcher_test.go index 1397c4fb4..af30f1c85 100644 --- a/internal/imagefetcher/imagefetcher_test.go +++ b/internal/imagefetcher/imagefetcher_test.go @@ -256,7 +256,7 @@ func TestFetchReference(t *testing.T) { fs: af, } - reference, err := fetcher.FetchReference(context.Background(), tc.provider, variant.Dummy{}, + reference, err := fetcher.FetchReference(t.Context(), tc.provider, variant.Dummy{}, tc.image, "someRegion", false) if tc.wantErr { diff --git a/internal/imagefetcher/raw_test.go b/internal/imagefetcher/raw_test.go index e2bbd8b9d..4e597ce6d 100644 --- a/internal/imagefetcher/raw_test.go +++ b/internal/imagefetcher/raw_test.go @@ -8,7 +8,6 @@ package imagefetcher import ( "bytes" - "context" "io" "net/http" "os" @@ -91,7 +90,7 @@ func TestDownloadWithProgress(t *testing.T) { fs: fs, } var outBuffer bytes.Buffer - err := downloader.downloadWithProgress(context.Background(), &outBuffer, false, tc.source, "someVersion.raw") + err := downloader.downloadWithProgress(t.Context(), &outBuffer, false, tc.source, "someVersion.raw") if tc.wantErr { assert.Error(err) return @@ -167,7 +166,7 @@ func TestDownload(t *testing.T) { fs: fs, } var outBuffer bytes.Buffer - gotDestination, err := downloader.Download(context.Background(), &outBuffer, false, tc.source, "someVersion") + gotDestination, err := downloader.Download(t.Context(), &outBuffer, false, tc.source, "someVersion") if tc.wantErr { assert.Error(err) return diff --git a/internal/installer/installer_test.go b/internal/installer/installer_test.go index 1e346f434..1cbd09c4a 100644 --- a/internal/installer/installer_test.go +++ b/internal/installer/installer_test.go @@ -132,7 +132,7 @@ func TestInstall(t *testing.T) { retriable: func(_ error) bool { return false }, } - err := inst.Install(context.Background(), tc.component) + err := inst.Install(t.Context(), tc.component) if tc.wantErr { assert.Error(err) return @@ -340,7 +340,7 @@ func TestRetryDownloadToTempDir(t *testing.T) { } // abort retryDownloadToTempDir in some test cases by using the context - ctx, cancel := context.WithCancel(context.Background()) + ctx, cancel := context.WithCancel(t.Context()) defer cancel() wg := sync.WaitGroup{} @@ -429,7 +429,7 @@ func TestDownloadToTempDir(t *testing.T) { fs: &afero.Afero{Fs: afs}, hClient: &hClient, } - path, err := inst.downloadToTempDir(context.Background(), "http://server/path") + path, err := inst.downloadToTempDir(t.Context(), "http://server/path") if tc.wantErr { assert.Error(err) return diff --git a/internal/kms/kms/cluster/cluster_test.go b/internal/kms/kms/cluster/cluster_test.go index d9ec6d7a1..0bfc5331a 100644 --- a/internal/kms/kms/cluster/cluster_test.go +++ b/internal/kms/kms/cluster/cluster_test.go @@ -7,7 +7,6 @@ SPDX-License-Identifier: AGPL-3.0-only package cluster import ( - "context" "strings" "testing" @@ -29,7 +28,7 @@ func TestClusterKMS(t *testing.T) { require.NoError(err) keyLower, err := kms.GetDEK( - context.Background(), + t.Context(), strings.ToLower(testVector.InfoPrefix+testVector.Info), int(testVector.Length), ) @@ -38,7 +37,7 @@ func TestClusterKMS(t *testing.T) { // output of the KMS should be case sensitive keyUpper, err := kms.GetDEK( - context.Background(), + t.Context(), strings.ToUpper(testVector.InfoPrefix+testVector.Info), int(testVector.Length), ) @@ -105,7 +104,7 @@ func TestVectorsHKDF(t *testing.T) { } require.NoError(err) - out, err := kms.GetDEK(context.Background(), tc.dekID, int(tc.dekSize)) + out, err := kms.GetDEK(t.Context(), tc.dekID, int(tc.dekSize)) require.NoError(err) assert.Equal(tc.wantKey, out) }) diff --git a/internal/kms/kms/internal/internal_test.go b/internal/kms/kms/internal/internal_test.go index a7fc25ca6..0ac6cd163 100644 --- a/internal/kms/kms/internal/internal_test.go +++ b/internal/kms/kms/internal/internal_test.go @@ -135,7 +135,7 @@ func TestGetDEK(t *testing.T) { Storage: tc.storage, } - dek, err := client.GetDEK(context.Background(), "volume-01", 32) + dek, err := client.GetDEK(t.Context(), "volume-01", 32) if tc.wantErr { assert.Error(err) } else { diff --git a/internal/kms/setup/setup_test.go b/internal/kms/setup/setup_test.go index 73bb29565..8b88191e3 100644 --- a/internal/kms/setup/setup_test.go +++ b/internal/kms/setup/setup_test.go @@ -7,7 +7,6 @@ SPDX-License-Identifier: AGPL-3.0-only package setup import ( - "context" "testing" "github.com/edgelesssys/constellation/v2/internal/kms/uri" @@ -26,12 +25,12 @@ func TestMain(m *testing.M) { func TestSetUpKMS(t *testing.T) { assert := assert.New(t) - kms, err := KMS(context.Background(), "storage://unknown", "kms://unknown") + kms, err := KMS(t.Context(), "storage://unknown", "kms://unknown") assert.Error(err) assert.Nil(kms) masterSecret := uri.MasterSecret{Key: []byte("key"), Salt: []byte("salt")} - kms, err = KMS(context.Background(), "storage://no-store", masterSecret.EncodeToURI()) + kms, err = KMS(t.Context(), "storage://no-store", masterSecret.EncodeToURI()) assert.NoError(err) assert.NotNil(kms) } diff --git a/internal/kms/storage/awss3/awss3_test.go b/internal/kms/storage/awss3/awss3_test.go index 4e07ab84d..14c84f7be 100644 --- a/internal/kms/storage/awss3/awss3_test.go +++ b/internal/kms/storage/awss3/awss3_test.go @@ -80,7 +80,7 @@ func TestAWSS3Get(t *testing.T) { client: tc.client, } - out, err := store.Get(context.Background(), "test-key") + out, err := store.Get(t.Context(), "test-key") if tc.wantErr { assert.Error(err) @@ -122,7 +122,7 @@ func TestAWSS3Put(t *testing.T) { testData := []byte{0x1, 0x2, 0x3} - err := store.Put(context.Background(), "test-key", testData) + err := store.Put(t.Context(), "test-key", testData) if tc.wantErr { assert.Error(err) } else { @@ -163,7 +163,7 @@ func TestAWSS3CreateBucket(t *testing.T) { client: tc.client, } - err := store.createBucket(context.Background(), "test-bucket", "test-region") + err := store.createBucket(t.Context(), "test-bucket", "test-region") if tc.wantErr { assert.Error(err) } else { diff --git a/internal/kms/storage/azureblob/azureblob_test.go b/internal/kms/storage/azureblob/azureblob_test.go index 93a5f2987..fb78fa0b8 100644 --- a/internal/kms/storage/azureblob/azureblob_test.go +++ b/internal/kms/storage/azureblob/azureblob_test.go @@ -51,7 +51,7 @@ func TestAzureGet(t *testing.T) { container: "test", } - out, err := client.Get(context.Background(), "test-key") + out, err := client.Get(t.Context(), "test-key") if tc.wantErr { assert.Error(err) @@ -93,7 +93,7 @@ func TestAzurePut(t *testing.T) { container: "test", } - err := client.Put(context.Background(), "test-key", testData) + err := client.Put(t.Context(), "test-key", testData) if tc.wantErr { assert.Error(err) return @@ -130,7 +130,7 @@ func TestCreateContainerOrContinue(t *testing.T) { container: "test", } - err := client.createContainerOrContinue(context.Background()) + err := client.createContainerOrContinue(t.Context()) if tc.wantErr { assert.Error(err) } else { diff --git a/internal/kms/storage/gcs/gcs_test.go b/internal/kms/storage/gcs/gcs_test.go index 5678afee5..b4be5f08f 100644 --- a/internal/kms/storage/gcs/gcs_test.go +++ b/internal/kms/storage/gcs/gcs_test.go @@ -103,7 +103,7 @@ func TestGCPGet(t *testing.T) { bucketName: "test", } - out, err := client.Get(context.Background(), "test-key") + out, err := client.Get(t.Context(), "test-key") if tc.wantErr { assert.Error(err) @@ -160,7 +160,7 @@ func TestGCPPut(t *testing.T) { } testData := []byte{0x1, 0x2, 0x3} - err := client.Put(context.Background(), "test-key", testData) + err := client.Put(t.Context(), "test-key", testData) if tc.wantErr { assert.Error(err) } else { @@ -211,7 +211,7 @@ func TestGCPCreateContainerOrContinue(t *testing.T) { bucketName: "test", } - err := client.createContainerOrContinue(context.Background(), "project") + err := client.createContainerOrContinue(t.Context(), "project") if tc.wantErr { assert.Error(err) } else { diff --git a/internal/kms/storage/memfs/memfs_test.go b/internal/kms/storage/memfs/memfs_test.go index 98d246d1b..3aeb894e6 100644 --- a/internal/kms/storage/memfs/memfs_test.go +++ b/internal/kms/storage/memfs/memfs_test.go @@ -7,7 +7,6 @@ SPDX-License-Identifier: AGPL-3.0-only package memfs import ( - "context" "testing" "github.com/edgelesssys/constellation/v2/internal/kms/storage" @@ -30,7 +29,7 @@ func TestMemMapStorage(t *testing.T) { testDEK1 := []byte("test DEK") testDEK2 := []byte("more test DEK") - ctx := context.Background() + ctx := t.Context() // request unset value _, err := store.Get(ctx, "test:input") diff --git a/internal/kms/test/aws_test.go b/internal/kms/test/aws_test.go index 073a80946..e295a3bbe 100644 --- a/internal/kms/test/aws_test.go +++ b/internal/kms/test/aws_test.go @@ -34,7 +34,7 @@ func TestAwsStorage(t *testing.T) { } require := require.New(t) - ctx, cancel := context.WithTimeout(context.Background(), time.Second*30) + ctx, cancel := context.WithTimeout(t.Context(), time.Second*30) defer cancel() // create bucket @@ -105,7 +105,7 @@ func TestAwsKms(t *testing.T) { require := require.New(t) store := memfs.New() - ctx, cancel := context.WithTimeout(context.Background(), time.Second*30) + ctx, cancel := context.WithTimeout(t.Context(), time.Second*30) defer cancel() cfg := uri.AWSConfig{ diff --git a/internal/kms/test/azure_test.go b/internal/kms/test/azure_test.go index 855b4dd54..1022db09f 100644 --- a/internal/kms/test/azure_test.go +++ b/internal/kms/test/azure_test.go @@ -31,7 +31,7 @@ func TestAzureStorage(t *testing.T) { } require := require.New(t) - ctx, cancel := context.WithTimeout(context.Background(), time.Second*30) + ctx, cancel := context.WithTimeout(t.Context(), time.Second*30) defer cancel() cfg := uri.AzureBlobConfig{ @@ -59,7 +59,7 @@ func TestAzureKeyKMS(t *testing.T) { require := require.New(t) store := memfs.New() - ctx, cancel := context.WithTimeout(context.Background(), time.Second*30) + ctx, cancel := context.WithTimeout(t.Context(), time.Second*30) defer cancel() cfg := uri.AzureConfig{ @@ -88,7 +88,7 @@ func TestAzureKeyHSM(t *testing.T) { require := require.New(t) store := memfs.New() - ctx, cancel := context.WithTimeout(context.Background(), time.Second*30) + ctx, cancel := context.WithTimeout(t.Context(), time.Second*30) defer cancel() cfg := uri.AzureConfig{ diff --git a/internal/kms/test/gcp_test.go b/internal/kms/test/gcp_test.go index 35162e0f1..0e8c66b74 100644 --- a/internal/kms/test/gcp_test.go +++ b/internal/kms/test/gcp_test.go @@ -32,7 +32,7 @@ func TestGCPKMS(t *testing.T) { require := require.New(t) store := memfs.New() - ctx, cancel := context.WithTimeout(context.Background(), time.Second*30) + ctx, cancel := context.WithTimeout(t.Context(), time.Second*30) defer cancel() cfg := uri.GCPConfig{ @@ -59,7 +59,7 @@ func TestGcpStorage(t *testing.T) { } require := require.New(t) - ctx, cancel := context.WithTimeout(context.Background(), time.Second*30) + ctx, cancel := context.WithTimeout(t.Context(), time.Second*30) defer cancel() cfg := uri.GoogleCloudStorageConfig{ diff --git a/internal/kms/test/integration_test.go b/internal/kms/test/integration_test.go index bd6dccd80..3a8217c6e 100644 --- a/internal/kms/test/integration_test.go +++ b/internal/kms/test/integration_test.go @@ -64,7 +64,7 @@ func runKMSTest(t *testing.T, kms kms.CloudKMS) { dekName := "test-dek" - ctx, cancel := context.WithTimeout(context.Background(), time.Second*30) + ctx, cancel := context.WithTimeout(t.Context(), time.Second*30) defer cancel() res, err := kms.GetDEK(ctx, dekName, config.SymmetricKeyLength) @@ -90,7 +90,7 @@ func runStorageTest(t *testing.T, store kms.Storage) { testData := []byte("Constellation test data") testName := "constellation-test" - ctx, cancel := context.WithTimeout(context.Background(), time.Second*30) + ctx, cancel := context.WithTimeout(t.Context(), time.Second*30) defer cancel() err := store.Put(ctx, testName, testData) diff --git a/internal/license/checker_enterprise_test.go b/internal/license/checker_enterprise_test.go index 1443ef2f1..6ab66d61a 100644 --- a/internal/license/checker_enterprise_test.go +++ b/internal/license/checker_enterprise_test.go @@ -10,7 +10,6 @@ package license import ( "bytes" - "context" "io" "net/http" "testing" @@ -83,7 +82,7 @@ func TestQuotaCheck(t *testing.T) { }), } - quota, err := client.CheckLicense(context.Background(), cloudprovider.Unknown, Init, tc.license) + quota, err := client.CheckLicense(t.Context(), cloudprovider.Unknown, Init, tc.license) if tc.wantError { assert.Error(err) diff --git a/internal/license/integration/license_integration_test.go b/internal/license/integration/license_integration_test.go index f4b67f00d..16997f2ca 100644 --- a/internal/license/integration/license_integration_test.go +++ b/internal/license/integration/license_integration_test.go @@ -9,7 +9,6 @@ SPDX-License-Identifier: AGPL-3.0-only package integration import ( - "context" "testing" "github.com/edgelesssys/constellation/v2/internal/cloud/cloudprovider" @@ -39,7 +38,7 @@ func TestQuotaCheckIntegration(t *testing.T) { client := license.NewChecker() - quota, err := client.CheckLicense(context.Background(), cloudprovider.Unknown, "test", tc.license) + quota, err := client.CheckLicense(t.Context(), cloudprovider.Unknown, "test", tc.license) if tc.wantError { assert.Error(err) diff --git a/internal/retry/retry_test.go b/internal/retry/retry_test.go index 8885ac715..4f636e8b2 100644 --- a/internal/retry/retry_test.go +++ b/internal/retry/retry_test.go @@ -71,7 +71,7 @@ func TestDo(t *testing.T) { retriable: isRetriable, } retrierResult := make(chan error, 1) - ctx, cancel := context.WithCancel(context.Background()) + ctx, cancel := context.WithCancel(t.Context()) defer cancel() go func() { retrierResult <- retrier.Do(ctx) }() diff --git a/internal/sigstore/rekor_integration_test.go b/internal/sigstore/rekor_integration_test.go index 4870109fb..8d85e21da 100644 --- a/internal/sigstore/rekor_integration_test.go +++ b/internal/sigstore/rekor_integration_test.go @@ -9,7 +9,6 @@ SPDX-License-Identifier: AGPL-3.0-only package sigstore import ( - "context" "testing" "github.com/stretchr/testify/assert" @@ -43,7 +42,7 @@ func TestRekorSearchByHash(t *testing.T) { rekor, err := NewRekor() require.NoError(err) - uuids, err := rekor.SearchByHash(context.Background(), tc.hash) + uuids, err := rekor.SearchByHash(t.Context(), tc.hash) assert.NoError(err) if tc.wantEmpty { @@ -85,7 +84,7 @@ func TestVerifyEntry(t *testing.T) { rekor, err := NewRekor() require.NoError(err) - err = rekor.VerifyEntry(context.Background(), tc.uuid, tc.pubKey) + err = rekor.VerifyEntry(t.Context(), tc.uuid, tc.pubKey) if tc.wantError { assert.Error(err) return diff --git a/internal/staticupload/staticupload_test.go b/internal/staticupload/staticupload_test.go index eace5cc1a..3bf30f07f 100644 --- a/internal/staticupload/staticupload_test.go +++ b/internal/staticupload/staticupload_test.go @@ -108,7 +108,7 @@ func TestUpload(t *testing.T) { cacheInvalidationWaitTimeout: tc.cacheInvalidationWaitTimeout, logger: logger.NewTest(t), } - _, err := client.Upload(context.Background(), tc.in) + _, err := client.Upload(t.Context(), tc.in) var invalidationErr *InvalidationError if tc.wantCacheInvalidationErr { @@ -220,7 +220,7 @@ func TestDeleteObject(t *testing.T) { cacheInvalidationWaitTimeout: tc.cacheInvalidationWaitTimeout, logger: logger.NewTest(t), } - _, err := client.DeleteObject(context.Background(), newObjectInput(tc.nilInput, tc.nilKey)) + _, err := client.DeleteObject(t.Context(), newObjectInput(tc.nilInput, tc.nilKey)) var invalidationErr *InvalidationError if tc.wantCacheInvalidationErr { @@ -259,7 +259,7 @@ func TestDeleteObject(t *testing.T) { cacheInvalidationWaitTimeout: tc.cacheInvalidationWaitTimeout, logger: logger.NewTest(t), } - _, err := client.DeleteObjects(context.Background(), newObjectsInput(tc.nilInput, tc.nilKey)) + _, err := client.DeleteObjects(t.Context(), newObjectsInput(tc.nilInput, tc.nilKey)) var invalidationErr *InvalidationError if tc.wantCacheInvalidationErr { @@ -401,7 +401,7 @@ func TestFlush(t *testing.T) { invalidationIDs: tc.invalidationIDs, logger: logger.NewTest(t), } - err := client.Flush(context.Background()) + err := client.Flush(t.Context()) if tc.wantCacheInvalidationErr { var invalidationErr *InvalidationError @@ -444,18 +444,18 @@ func TestConcurrency(t *testing.T) { upload := func() { defer wg.Done() - _, _ = client.Upload(context.Background(), newInput()) + _, _ = client.Upload(t.Context(), newInput()) } deleteObject := func() { defer wg.Done() - _, _ = client.DeleteObject(context.Background(), &s3.DeleteObjectInput{ + _, _ = client.DeleteObject(t.Context(), &s3.DeleteObjectInput{ Bucket: ptr("test-bucket"), Key: ptr("test-key"), }) } deleteObjects := func() { defer wg.Done() - _, _ = client.DeleteObjects(context.Background(), &s3.DeleteObjectsInput{ + _, _ = client.DeleteObjects(t.Context(), &s3.DeleteObjectsInput{ Bucket: ptr("test-bucket"), Delete: &s3types.Delete{ Objects: []s3types.ObjectIdentifier{ @@ -466,7 +466,7 @@ func TestConcurrency(t *testing.T) { } flushClient := func() { defer wg.Done() - _ = client.Flush(context.Background()) + _ = client.Flush(t.Context()) } for i := 0; i < 100; i++ { diff --git a/joinservice/internal/certcache/certcache_test.go b/joinservice/internal/certcache/certcache_test.go index a742d43c6..e1e60beba 100644 --- a/joinservice/internal/certcache/certcache_test.go +++ b/joinservice/internal/certcache/certcache_test.go @@ -116,7 +116,7 @@ func TestCreateCertChainCache(t *testing.T) { assert := assert.New(t) require := require.New(t) - ctx := context.Background() + ctx := t.Context() c := &Client{ attVariant: variant.Dummy{}, @@ -204,7 +204,7 @@ func TestGetCertChainCache(t *testing.T) { t.Run(name, func(t *testing.T) { assert := assert.New(t) - ctx := context.Background() + ctx := t.Context() c := NewClient(logger.NewTest(t), tc.kubeClient, variant.Dummy{}) diff --git a/joinservice/internal/kms/kms_test.go b/joinservice/internal/kms/kms_test.go index cd831ddc4..f506d0a42 100644 --- a/joinservice/internal/kms/kms_test.go +++ b/joinservice/internal/kms/kms_test.go @@ -60,7 +60,7 @@ func TestGetDataKey(t *testing.T) { client.grpc = tc.client - res, err := client.GetDataKey(context.Background(), "disk-uuid", 32) + res, err := client.GetDataKey(t.Context(), "disk-uuid", 32) if tc.wantErr { assert.Error(err) } else { diff --git a/joinservice/internal/server/server_test.go b/joinservice/internal/server/server_test.go index 2834a4640..4fbf0c5b6 100644 --- a/joinservice/internal/server/server_test.go +++ b/joinservice/internal/server/server_test.go @@ -201,7 +201,7 @@ func TestIssueJoinTicket(t *testing.T) { DiskUuid: "uuid", IsControlPlane: tc.isControlPlane, } - resp, err := api.IssueJoinTicket(context.Background(), req) + resp, err := api.IssueJoinTicket(t.Context(), req) if tc.wantErr { assert.Error(err) return @@ -265,7 +265,7 @@ func TestIssueRejoinTicker(t *testing.T) { req := &joinproto.IssueRejoinTicketRequest{ DiskUuid: uuid, } - resp, err := api.IssueRejoinTicket(context.Background(), req) + resp, err := api.IssueRejoinTicket(t.Context(), req) if tc.wantErr { assert.Error(err) return diff --git a/joinservice/internal/watcher/validator_test.go b/joinservice/internal/watcher/validator_test.go index efada4028..2fb99e3e1 100644 --- a/joinservice/internal/watcher/validator_test.go +++ b/joinservice/internal/watcher/validator_test.go @@ -147,7 +147,7 @@ func TestUpdate(t *testing.T) { // test connection to server clientOID := variant.Dummy{} - resp, err := testConnection(require, server.URL, clientOID) + resp, err := testConnection(t.Context(), require, server.URL, clientOID) require.NoError(err) defer resp.Body.Close() body, err := io.ReadAll(resp.Body) @@ -159,7 +159,7 @@ func TestUpdate(t *testing.T) { require.NoError(validator.Update()) // client connection should fail now, since the server's validator expects a different OID from the client - resp, err = testConnection(require, server.URL, clientOID) + resp, err = testConnection(t.Context(), require, server.URL, clientOID) if err == nil { defer resp.Body.Close() } @@ -230,12 +230,12 @@ func TestUpdateConcurrency(t *testing.T) { wg.Wait() } -func testConnection(require *require.Assertions, url string, oid variant.Getter) (*http.Response, error) { +func testConnection(ctx context.Context, require *require.Assertions, url string, oid variant.Getter) (*http.Response, error) { clientConfig, err := atls.CreateAttestationClientTLSConfig(fakeIssuer{oid}, nil) require.NoError(err) client := http.Client{Transport: &http.Transport{TLSClientConfig: clientConfig}} - req, err := http.NewRequestWithContext(context.Background(), http.MethodGet, url, http.NoBody) + req, err := http.NewRequestWithContext(ctx, http.MethodGet, url, http.NoBody) require.NoError(err) return client.Do(req) } diff --git a/keyservice/internal/server/server_test.go b/keyservice/internal/server/server_test.go index f5c2b2d3b..203a9f939 100644 --- a/keyservice/internal/server/server_test.go +++ b/keyservice/internal/server/server_test.go @@ -32,23 +32,23 @@ func TestGetDataKey(t *testing.T) { kms := &stubKMS{derivedKey: []byte{0x0, 0x1, 0x2, 0x3, 0x4, 0x5}} api := New(log, kms) - res, err := api.GetDataKey(context.Background(), &keyserviceproto.GetDataKeyRequest{DataKeyId: "1", Length: 32}) + res, err := api.GetDataKey(t.Context(), &keyserviceproto.GetDataKeyRequest{DataKeyId: "1", Length: 32}) require.NoError(err) assert.Equal(kms.derivedKey, res.DataKey) // Test no data key id - res, err = api.GetDataKey(context.Background(), &keyserviceproto.GetDataKeyRequest{Length: 32}) + res, err = api.GetDataKey(t.Context(), &keyserviceproto.GetDataKeyRequest{Length: 32}) require.Error(err) assert.Nil(res) // Test no / zero key length - res, err = api.GetDataKey(context.Background(), &keyserviceproto.GetDataKeyRequest{DataKeyId: "1"}) + res, err = api.GetDataKey(t.Context(), &keyserviceproto.GetDataKeyRequest{DataKeyId: "1"}) require.Error(err) assert.Nil(res) // Test derive key error api = New(log, &stubKMS{deriveKeyErr: errors.New("error")}) - res, err = api.GetDataKey(context.Background(), &keyserviceproto.GetDataKeyRequest{DataKeyId: "1", Length: 32}) + res, err = api.GetDataKey(t.Context(), &keyserviceproto.GetDataKeyRequest{DataKeyId: "1", Length: 32}) assert.Error(err) assert.Nil(res) } diff --git a/operators/constellation-node-operator/controllers/nodeversion_controller_test.go b/operators/constellation-node-operator/controllers/nodeversion_controller_test.go index 6b8531851..e3df48e57 100644 --- a/operators/constellation-node-operator/controllers/nodeversion_controller_test.go +++ b/operators/constellation-node-operator/controllers/nodeversion_controller_test.go @@ -123,7 +123,7 @@ func TestAnnotateNodes(t *testing.T) { }, }, } - annotated, invalid := reconciler.annotateNodes(context.Background(), []corev1.Node{tc.node}) + annotated, invalid := reconciler.annotateNodes(t.Context(), []corev1.Node{tc.node}) if tc.wantAnnotated == nil { assert.Len(annotated, 0) assert.Len(invalid, 1) @@ -226,7 +226,7 @@ func TestPairDonorsAndHeirs(t *testing.T) { }, } nodeImage := updatev1alpha1.NodeVersion{} - pairs := reconciler.pairDonorsAndHeirs(context.Background(), &nodeImage, []corev1.Node{tc.outdatedNode}, []mintNode{tc.mintNode}) + pairs := reconciler.pairDonorsAndHeirs(t.Context(), &nodeImage, []corev1.Node{tc.outdatedNode}, []mintNode{tc.mintNode}) if tc.wantPair == nil { assert.Len(pairs, 0) return @@ -315,7 +315,7 @@ func TestMatchDonorsAndHeirs(t *testing.T) { stubReaderClient: *newStubReaderClient(t, []runtime.Object{&tc.donor, &tc.heir}, nil, nil), }, } - pairs := reconciler.matchDonorsAndHeirs(context.Background(), nil, []corev1.Node{tc.donor}, []corev1.Node{tc.heir}) + pairs := reconciler.matchDonorsAndHeirs(t.Context(), nil, []corev1.Node{tc.donor}, []corev1.Node{tc.heir}) if tc.wantPair == nil { assert.Len(pairs, 0) return @@ -693,7 +693,7 @@ func TestCreateNewNodes(t *testing.T) { Scheme: getScheme(t), } newNodeConfig := newNodeConfig{desiredNodeImage, tc.outdatedNodes, tc.donors, tc.pendingNodes, tc.scalingGroupByID, tc.budget} - err := reconciler.createNewNodes(context.Background(), newNodeConfig) + err := reconciler.createNewNodes(t.Context(), newNodeConfig) require.NoError(err) assert.Equal(tc.wantCreateCalls, reconciler.nodeReplacer.(*stubNodeReplacerWriter).createCalls) }) diff --git a/operators/constellation-node-operator/controllers/nodeversion_watches_test.go b/operators/constellation-node-operator/controllers/nodeversion_watches_test.go index 690c1d2c4..cdc75450f 100644 --- a/operators/constellation-node-operator/controllers/nodeversion_watches_test.go +++ b/operators/constellation-node-operator/controllers/nodeversion_watches_test.go @@ -7,7 +7,6 @@ SPDX-License-Identifier: AGPL-3.0-only package controllers import ( - "context" "errors" "testing" @@ -250,7 +249,7 @@ func TestFindObjectsForScalingGroup(t *testing.T) { } assert := assert.New(t) reconciler := NodeVersionReconciler{} - requests := reconciler.findObjectsForScalingGroup(context.TODO(), &scalingGroup) + requests := reconciler.findObjectsForScalingGroup(t.Context(), &scalingGroup) assert.ElementsMatch(wantRequests, requests) } @@ -284,7 +283,7 @@ func TestFindAllNodeVersions(t *testing.T) { reconciler := NodeVersionReconciler{ Client: newStubReaderClient(t, []runtime.Object{tc.nodeVersion}, nil, tc.listNodeVersionsErr), } - requests := reconciler.findAllNodeVersions(context.TODO(), nil) + requests := reconciler.findAllNodeVersions(t.Context(), nil) assert.ElementsMatch(tc.wantRequests, requests) }) } diff --git a/operators/constellation-node-operator/controllers/pendingnode_controller_test.go b/operators/constellation-node-operator/controllers/pendingnode_controller_test.go index 1a564af76..949d7d8f2 100644 --- a/operators/constellation-node-operator/controllers/pendingnode_controller_test.go +++ b/operators/constellation-node-operator/controllers/pendingnode_controller_test.go @@ -137,7 +137,7 @@ func TestFindObjectsForNode(t *testing.T) { reconciler := PendingNodeReconciler{ Client: newStubReaderClient(t, []runtime.Object{tc.pendingNode}, nil, tc.listPendingNodesErr), } - requests := reconciler.findObjectsForNode(context.TODO(), &corev1.Node{ + requests := reconciler.findObjectsForNode(t.Context(), &corev1.Node{ ObjectMeta: metav1.ObjectMeta{ Name: "pending-node", }, @@ -218,7 +218,7 @@ func TestReachedGoal(t *testing.T) { reconciler := PendingNodeReconciler{ Client: newStubReaderClient(t, []runtime.Object{&tc.pendingNode}, tc.getPendingNodeErr, nil), } - reachedGoal, err := reconciler.reachedGoal(context.Background(), tc.pendingNode, tc.nodeState) + reachedGoal, err := reconciler.reachedGoal(t.Context(), tc.pendingNode, tc.nodeState) if tc.wantErr { assert.Error(err) return diff --git a/operators/constellation-node-operator/internal/cloud/aws/client/nodeimage_test.go b/operators/constellation-node-operator/internal/cloud/aws/client/nodeimage_test.go index d939f2029..2a75ee1ea 100644 --- a/operators/constellation-node-operator/internal/cloud/aws/client/nodeimage_test.go +++ b/operators/constellation-node-operator/internal/cloud/aws/client/nodeimage_test.go @@ -91,7 +91,7 @@ func TestGetNodeImage(t *testing.T) { describeInstancesErr: tc.describeInstancesErr, }, } - gotImage, err := client.GetNodeImage(context.Background(), tc.providerID) + gotImage, err := client.GetNodeImage(t.Context(), tc.providerID) if tc.wantErr { assert.Error(err) return @@ -199,7 +199,7 @@ func TestGetScalingGroupID(t *testing.T) { describeInstancesErr: tc.describeInstancesErr, }, } - gotScalingID, err := client.GetScalingGroupID(context.Background(), tc.providerID) + gotScalingID, err := client.GetScalingGroupID(t.Context(), tc.providerID) if tc.wantErr { assert.Error(err) return @@ -357,7 +357,7 @@ func TestCreateNode(t *testing.T) { setDesiredCapacityErr: tc.setDesiredCapacityErr, }, } - nodeName, providerID, err := client.CreateNode(context.Background(), tc.providerID) + nodeName, providerID, err := client.CreateNode(t.Context(), tc.providerID) if tc.wantErr { assert.Error(err) return @@ -398,7 +398,7 @@ func TestDeleteNode(t *testing.T) { terminateInstanceErr: tc.terminateInstanceErr, }, } - err := client.DeleteNode(context.Background(), tc.providerID) + err := client.DeleteNode(t.Context(), tc.providerID) if tc.wantErr { assert.Error(err) return diff --git a/operators/constellation-node-operator/internal/cloud/aws/client/pendingnode_test.go b/operators/constellation-node-operator/internal/cloud/aws/client/pendingnode_test.go index b2745358f..fdf11100c 100644 --- a/operators/constellation-node-operator/internal/cloud/aws/client/pendingnode_test.go +++ b/operators/constellation-node-operator/internal/cloud/aws/client/pendingnode_test.go @@ -7,7 +7,6 @@ SPDX-License-Identifier: AGPL-3.0-only package client import ( - "context" "errors" "testing" @@ -161,7 +160,7 @@ func TestGetNodeState(t *testing.T) { describeInstanceStatusErr: tc.describeInstanceStatusErr, }, } - nodeState, err := client.GetNodeState(context.Background(), tc.providerID) + nodeState, err := client.GetNodeState(t.Context(), tc.providerID) assert.Equal(tc.wantState, nodeState) if tc.wantErr { assert.Error(err) diff --git a/operators/constellation-node-operator/internal/cloud/aws/client/scalinggroup_test.go b/operators/constellation-node-operator/internal/cloud/aws/client/scalinggroup_test.go index b5e4f60ce..dc3144f6c 100644 --- a/operators/constellation-node-operator/internal/cloud/aws/client/scalinggroup_test.go +++ b/operators/constellation-node-operator/internal/cloud/aws/client/scalinggroup_test.go @@ -7,7 +7,6 @@ SPDX-License-Identifier: AGPL-3.0-only package client import ( - "context" "testing" "github.com/aws/aws-sdk-go-v2/service/autoscaling" @@ -91,7 +90,7 @@ func TestGetScalingGroupImage(t *testing.T) { }, }, } - scalingGroupImage, err := client.GetScalingGroupImage(context.Background(), tc.providerID) + scalingGroupImage, err := client.GetScalingGroupImage(t.Context(), tc.providerID) if tc.wantErr { assert.Error(err) return @@ -216,7 +215,7 @@ func TestSetScalingGroupImage(t *testing.T) { }, }, } - err := client.SetScalingGroupImage(context.Background(), tc.providerID, tc.imageURI) + err := client.SetScalingGroupImage(t.Context(), tc.providerID, tc.imageURI) if tc.wantErr { assert.Error(err) return @@ -319,7 +318,7 @@ func TestListScalingGroups(t *testing.T) { describeAutoScalingGroupsErr: tc.describeAutoScalingGroupsErr, }, } - gotGroups, err := client.ListScalingGroups(context.Background(), tc.providerID) + gotGroups, err := client.ListScalingGroups(t.Context(), tc.providerID) if tc.wantErr { assert.Error(err) return diff --git a/operators/constellation-node-operator/internal/cloud/azure/client/nodeimage_test.go b/operators/constellation-node-operator/internal/cloud/azure/client/nodeimage_test.go index 866cf535f..61fa6b2ed 100644 --- a/operators/constellation-node-operator/internal/cloud/azure/client/nodeimage_test.go +++ b/operators/constellation-node-operator/internal/cloud/azure/client/nodeimage_test.go @@ -98,7 +98,7 @@ func TestGetNodeImage(t *testing.T) { getErr: tc.getScaleSetVMErr, }, } - gotImage, err := client.GetNodeImage(context.Background(), tc.providerID) + gotImage, err := client.GetNodeImage(t.Context(), tc.providerID) if tc.wantErr { assert.Error(err) return @@ -131,7 +131,7 @@ func TestGetScalingGroupID(t *testing.T) { require := require.New(t) client := Client{} - gotScalingGroupID, err := client.GetScalingGroupID(context.Background(), tc.providerID) + gotScalingGroupID, err := client.GetScalingGroupID(t.Context(), tc.providerID) if tc.wantErr { assert.Error(err) return @@ -262,7 +262,7 @@ func TestCreateNode(t *testing.T) { var createErr error go func() { defer wg.Done() - gotNodeName, gotProviderID, createErr = client.CreateNode(context.Background(), tc.scalingGroupID) + gotNodeName, gotProviderID, createErr = client.CreateNode(t.Context(), tc.scalingGroupID) }() // want error before PollUntilDone is called @@ -319,7 +319,7 @@ func TestDeleteNode(t *testing.T) { client := Client{ scaleSetsAPI: &stubScaleSetsAPI{deleteErr: tc.deleteErr}, } - err := client.DeleteNode(context.Background(), tc.providerID) + err := client.DeleteNode(t.Context(), tc.providerID) if tc.wantErr { assert.Error(err) return @@ -343,25 +343,25 @@ func TestCapacityPollingHandler(t *testing.T) { }, wantedCapacity: wantCapacity, } - assert.NoError(handler.Poll(context.Background())) + assert.NoError(handler.Poll(t.Context())) assert.False(handler.Done()) // Calling Result early should error - assert.Error(handler.Result(context.Background(), &gotCapacity)) + assert.Error(handler.Result(t.Context(), &gotCapacity)) // let scaleSet API error handler.scaleSetsAPI.(*stubScaleSetsAPI).getErr = errors.New("get error") - assert.Error(handler.Poll(context.Background())) + assert.Error(handler.Poll(t.Context())) handler.scaleSetsAPI.(*stubScaleSetsAPI).getErr = nil // let scaleSet API return invalid SKU handler.scaleSetsAPI.(*stubScaleSetsAPI).scaleSet.SKU = nil - assert.Error(handler.Poll(context.Background())) + assert.Error(handler.Poll(t.Context())) // let Poll finish handler.scaleSetsAPI.(*stubScaleSetsAPI).scaleSet.SKU = &armcompute.SKU{Capacity: to.Ptr(wantCapacity)} - assert.NoError(handler.Poll(context.Background())) + assert.NoError(handler.Poll(t.Context())) assert.True(handler.Done()) - assert.NoError(handler.Result(context.Background(), &gotCapacity)) + assert.NoError(handler.Result(t.Context(), &gotCapacity)) assert.Equal(wantCapacity, gotCapacity) } diff --git a/operators/constellation-node-operator/internal/cloud/azure/client/pendingnode_test.go b/operators/constellation-node-operator/internal/cloud/azure/client/pendingnode_test.go index 7c12ed749..70cb9df6b 100644 --- a/operators/constellation-node-operator/internal/cloud/azure/client/pendingnode_test.go +++ b/operators/constellation-node-operator/internal/cloud/azure/client/pendingnode_test.go @@ -7,7 +7,6 @@ SPDX-License-Identifier: AGPL-3.0-only package client import ( - "context" "errors" "net/http" "testing" @@ -67,7 +66,7 @@ func TestGetNodeState(t *testing.T) { instanceViewErr: tc.getInstanceViewErr, }, } - gotState, err := client.GetNodeState(context.Background(), tc.providerID) + gotState, err := client.GetNodeState(t.Context(), tc.providerID) if tc.wantErr { assert.Error(err) return diff --git a/operators/constellation-node-operator/internal/cloud/azure/client/scalinggroup_test.go b/operators/constellation-node-operator/internal/cloud/azure/client/scalinggroup_test.go index 1f9e1516d..2bef88541 100644 --- a/operators/constellation-node-operator/internal/cloud/azure/client/scalinggroup_test.go +++ b/operators/constellation-node-operator/internal/cloud/azure/client/scalinggroup_test.go @@ -7,7 +7,6 @@ SPDX-License-Identifier: AGPL-3.0-only package client import ( - "context" "errors" "testing" @@ -103,7 +102,7 @@ func TestGetScalingGroupImage(t *testing.T) { getErr: tc.getScaleSetErr, }, } - gotImage, err := client.GetScalingGroupImage(context.Background(), tc.scalingGroupID) + gotImage, err := client.GetScalingGroupImage(t.Context(), tc.scalingGroupID) if tc.wantErr { assert.Error(err) return @@ -155,7 +154,7 @@ func TestSetScalingGroupImage(t *testing.T) { resultErr: tc.resultErr, }, } - err := client.SetScalingGroupImage(context.Background(), tc.scalingGroupID, tc.imageURI) + err := client.SetScalingGroupImage(t.Context(), tc.scalingGroupID, tc.imageURI) if tc.wantErr { assert.Error(err) return @@ -291,7 +290,7 @@ func TestListScalingGroups(t *testing.T) { }, }, } - gotGroups, err := client.ListScalingGroups(context.Background(), "uid") + gotGroups, err := client.ListScalingGroups(t.Context(), "uid") if tc.wantErr { assert.Error(err) return diff --git a/operators/constellation-node-operator/internal/cloud/gcp/client/nodeimage_test.go b/operators/constellation-node-operator/internal/cloud/gcp/client/nodeimage_test.go index 8ce178dca..0aff94c6e 100644 --- a/operators/constellation-node-operator/internal/cloud/gcp/client/nodeimage_test.go +++ b/operators/constellation-node-operator/internal/cloud/gcp/client/nodeimage_test.go @@ -7,7 +7,6 @@ SPDX-License-Identifier: AGPL-3.0-only package client import ( - "context" "errors" "math/rand" "testing" @@ -101,7 +100,7 @@ func TestGetNodeImage(t *testing.T) { disk: tc.disk, }, } - gotImage, err := client.GetNodeImage(context.Background(), tc.providerID) + gotImage, err := client.GetNodeImage(t.Context(), tc.providerID) if tc.wantErr { assert.Error(err) return @@ -162,7 +161,7 @@ func TestGetScalingGroupID(t *testing.T) { instance: &instance, }, } - gotScalingGroupID, err := client.GetScalingGroupID(context.Background(), tc.providerID) + gotScalingGroupID, err := client.GetScalingGroupID(t.Context(), tc.providerID) if tc.wantErr { assert.Error(err) return @@ -221,7 +220,7 @@ func TestCreateNode(t *testing.T) { }, prng: rand.New(rand.NewSource(int64(time.Now().Nanosecond()))), } - instanceName, providerID, err := client.CreateNode(context.Background(), tc.scalingGroupID) + instanceName, providerID, err := client.CreateNode(t.Context(), tc.scalingGroupID) if tc.wantErr { assert.Error(err) return @@ -287,7 +286,7 @@ func TestDeleteNode(t *testing.T) { }, }, } - err := client.DeleteNode(context.Background(), tc.providerID) + err := client.DeleteNode(t.Context(), tc.providerID) if tc.wantErr { assert.Error(err) return diff --git a/operators/constellation-node-operator/internal/cloud/gcp/client/pendingnode_test.go b/operators/constellation-node-operator/internal/cloud/gcp/client/pendingnode_test.go index 5791d7fd4..e201d965a 100644 --- a/operators/constellation-node-operator/internal/cloud/gcp/client/pendingnode_test.go +++ b/operators/constellation-node-operator/internal/cloud/gcp/client/pendingnode_test.go @@ -7,7 +7,6 @@ SPDX-License-Identifier: AGPL-3.0-only package client import ( - "context" "errors" "net/http" "testing" @@ -108,7 +107,7 @@ func TestGetNodeState(t *testing.T) { }, }, } - nodeState, err := client.GetNodeState(context.Background(), tc.providerID) + nodeState, err := client.GetNodeState(t.Context(), tc.providerID) if tc.wantErr { assert.Error(err) return diff --git a/operators/constellation-node-operator/internal/cloud/gcp/client/project_test.go b/operators/constellation-node-operator/internal/cloud/gcp/client/project_test.go index cd0c90326..d3e9b64e0 100644 --- a/operators/constellation-node-operator/internal/cloud/gcp/client/project_test.go +++ b/operators/constellation-node-operator/internal/cloud/gcp/client/project_test.go @@ -7,7 +7,6 @@ SPDX-License-Identifier: AGPL-3.0-only package client import ( - "context" "errors" "testing" @@ -57,7 +56,7 @@ func TestCanonicalProjectID(t *testing.T) { getErr: tc.getProjectErr, }, } - gotID, err := client.canonicalProjectID(context.Background(), tc.projectID) + gotID, err := client.canonicalProjectID(t.Context(), tc.projectID) if tc.wantErr { assert.Error(err) return diff --git a/operators/constellation-node-operator/internal/cloud/gcp/client/scalinggroup_test.go b/operators/constellation-node-operator/internal/cloud/gcp/client/scalinggroup_test.go index 5fd3b1170..d6d3a8325 100644 --- a/operators/constellation-node-operator/internal/cloud/gcp/client/scalinggroup_test.go +++ b/operators/constellation-node-operator/internal/cloud/gcp/client/scalinggroup_test.go @@ -7,7 +7,6 @@ SPDX-License-Identifier: AGPL-3.0-only package client import ( - "context" "errors" "testing" @@ -96,7 +95,7 @@ func TestGetScalingGroupImage(t *testing.T) { template: tc.instanceTemplate, }, } - gotImage, err := client.GetScalingGroupImage(context.Background(), tc.scalingGroupID) + gotImage, err := client.GetScalingGroupImage(t.Context(), tc.scalingGroupID) if tc.wantErr { assert.Error(err) return @@ -281,7 +280,7 @@ func TestSetScalingGroupImage(t *testing.T) { template: tc.instanceTemplate, }, } - err := client.SetScalingGroupImage(context.Background(), tc.scalingGroupID, tc.imageURI) + err := client.SetScalingGroupImage(t.Context(), tc.scalingGroupID, tc.imageURI) if tc.wantErr { assert.Error(err) return @@ -456,7 +455,7 @@ func TestListScalingGroups(t *testing.T) { getErr: tc.templateGetErr, }, } - gotGroups, err := client.ListScalingGroups(context.Background(), "uid") + gotGroups, err := client.ListScalingGroups(t.Context(), "uid") if tc.wantErr { assert.Error(err) return diff --git a/operators/constellation-node-operator/internal/deploy/deploy_test.go b/operators/constellation-node-operator/internal/deploy/deploy_test.go index d091714ae..505071ce5 100644 --- a/operators/constellation-node-operator/internal/deploy/deploy_test.go +++ b/operators/constellation-node-operator/internal/deploy/deploy_test.go @@ -86,7 +86,7 @@ func TestInitialResources(t *testing.T) { }, } scalingGroupGetter := newScalingGroupGetter(tc.items, tc.imageErr, tc.nameErr, tc.listErr) - err := InitialResources(context.Background(), k8sClient, &stubImageInfo{}, scalingGroupGetter, "uid") + err := InitialResources(t.Context(), k8sClient, &stubImageInfo{}, scalingGroupGetter, "uid") if tc.wantErr { assert.Error(err) return @@ -156,7 +156,7 @@ func TestCreateAutoscalingStrategy(t *testing.T) { require := require.New(t) k8sClient := &fakeK8sClient{createErr: tc.createErr} - err := createAutoscalingStrategy(context.Background(), k8sClient, "stub") + err := createAutoscalingStrategy(t.Context(), k8sClient, "stub") if tc.wantErr { assert.Error(err) return @@ -246,7 +246,7 @@ func TestCreateNodeVersion(t *testing.T) { if tc.existingNodeVersion != nil { k8sClient.createdObjects = append(k8sClient.createdObjects, tc.existingNodeVersion) } - err := createNodeVersion(context.Background(), k8sClient, "image-reference", "image-version") + err := createNodeVersion(t.Context(), k8sClient, "image-reference", "image-version") if tc.wantErr { assert.Error(err) return diff --git a/operators/constellation-node-operator/internal/etcd/etcd_test.go b/operators/constellation-node-operator/internal/etcd/etcd_test.go index 5775140cb..2edd97452 100644 --- a/operators/constellation-node-operator/internal/etcd/etcd_test.go +++ b/operators/constellation-node-operator/internal/etcd/etcd_test.go @@ -54,7 +54,7 @@ func TestRemoveEtcdMemberFromCluster(t *testing.T) { }, listErr: tc.memberListErr, }} - err := client.RemoveEtcdMemberFromCluster(context.Background(), tc.vpcIP) + err := client.RemoveEtcdMemberFromCluster(t.Context(), tc.vpcIP) if tc.wantErr { assert.Error(err) return @@ -98,7 +98,7 @@ func TestGetMemberID(t *testing.T) { members: tc.members, listErr: tc.memberListErr, }} - gotMemberID, err := client.getMemberID(context.Background(), "192.0.2.1") + gotMemberID, err := client.getMemberID(t.Context(), "192.0.2.1") if tc.wantErr { assert.Error(err) return diff --git a/operators/constellation-node-operator/internal/executor/executor_test.go b/operators/constellation-node-operator/internal/executor/executor_test.go index 328425f26..adb14546f 100644 --- a/operators/constellation-node-operator/internal/executor/executor_test.go +++ b/operators/constellation-node-operator/internal/executor/executor_test.go @@ -29,7 +29,7 @@ func TestStartTriggersImmediateReconciliation(t *testing.T) { } exec := New(ctrl, cfg) // on start, the executor should trigger a reconciliation - stopAndWait := exec.Start(context.Background()) + stopAndWait := exec.Start(t.Context()) <-ctrl.waitUntilReconciled // makes sure to wait until reconcile was called ctrl.stop <- struct{}{} @@ -48,10 +48,10 @@ func TestStartMultipleTimesIsCoalesced(t *testing.T) { } exec := New(ctrl, cfg) // start once - stopAndWait := exec.Start(context.Background()) + stopAndWait := exec.Start(t.Context()) // start again multiple times for i := 0; i < 10; i++ { - _ = exec.Start(context.Background()) + _ = exec.Start(t.Context()) } <-ctrl.waitUntilReconciled // makes sure to wait until reconcile was called @@ -72,7 +72,7 @@ func TestErrorTriggersImmediateReconciliation(t *testing.T) { RateLimiter: &stubRateLimiter{}, // no rate limiting } exec := New(ctrl, cfg) - stopAndWait := exec.Start(context.Background()) + stopAndWait := exec.Start(t.Context()) for i := 0; i < 10; i++ { <-ctrl.waitUntilReconciled // makes sure to wait until reconcile was called } @@ -96,7 +96,7 @@ func TestErrorTriggersRateLimiting(t *testing.T) { }, } exec := New(ctrl, cfg) - stopAndWait := exec.Start(context.Background()) + stopAndWait := exec.Start(t.Context()) <-ctrl.waitUntilReconciled // makes sure to wait until reconcile was called once to trigger rate limiting ctrl.stop <- struct{}{} @@ -120,7 +120,7 @@ func TestRequeueAfterResultRequeueInterval(t *testing.T) { }, } exec := New(ctrl, cfg) - stopAndWait := exec.Start(context.Background()) + stopAndWait := exec.Start(t.Context()) for i := 0; i < 10; i++ { <-ctrl.waitUntilReconciled // makes sure to wait until reconcile was called } @@ -143,7 +143,7 @@ func TestExternalTrigger(t *testing.T) { }, } exec := New(ctrl, cfg) - stopAndWait := exec.Start(context.Background()) + stopAndWait := exec.Start(t.Context()) <-ctrl.waitUntilReconciled // initial trigger for i := 0; i < 10; i++ { exec.Trigger() @@ -167,7 +167,7 @@ func TestSimultaneousExternalTriggers(t *testing.T) { }, } exec := New(ctrl, cfg) - stopAndWait := exec.Start(context.Background()) + stopAndWait := exec.Start(t.Context()) <-ctrl.waitUntilReconciled // initial trigger for i := 0; i < 100; i++ { exec.Trigger() // extra trigger calls are coalesced @@ -184,7 +184,7 @@ func TestSimultaneousExternalTriggers(t *testing.T) { func TestContextCancel(t *testing.T) { assert := assert.New(t) - ctx, cancel := context.WithCancel(context.Background()) + ctx, cancel := context.WithCancel(t.Context()) ctrl := newStubController(Result{}, nil) cfg := Config{ PollingFrequency: time.Hour * 24 * 365, // 1 year. Should be high enough to not trigger the timer in the test. @@ -219,7 +219,7 @@ func TestRequeueAfterPollingFrequency(t *testing.T) { }, } exec := New(ctrl, cfg) - stopAndWait := exec.Start(context.Background()) + stopAndWait := exec.Start(t.Context()) for i := 0; i < 10; i++ { <-ctrl.waitUntilReconciled // makes sure to wait until reconcile was called } diff --git a/operators/constellation-node-operator/internal/poller/poller_test.go b/operators/constellation-node-operator/internal/poller/poller_test.go index e60564150..a51edd03b 100644 --- a/operators/constellation-node-operator/internal/poller/poller_test.go +++ b/operators/constellation-node-operator/internal/poller/poller_test.go @@ -49,17 +49,17 @@ func TestResult(t *testing.T) { pollErr: tc.pollErr, resultErr: tc.resultErr, }) - _, firstErr := poller.Result(context.Background()) + _, firstErr := poller.Result(t.Context()) if tc.wantErr { assert.Error(firstErr) // calling Result again should return the same error - _, secondErr := poller.Result(context.Background()) + _, secondErr := poller.Result(t.Context()) assert.Equal(firstErr, secondErr) return } assert.NoError(firstErr) // calling Result again should still not return an error - _, secondErr := poller.Result(context.Background()) + _, secondErr := poller.Result(t.Context()) assert.NoError(secondErr) }) } @@ -136,7 +136,7 @@ func TestPollUntilDone(t *testing.T) { wg.Add(1) go func() { defer wg.Done() - gotResult, gotErr = poller.PollUntilDone(context.Background(), &PollUntilDoneOptions{ + gotResult, gotErr = poller.PollUntilDone(t.Context(), &PollUntilDoneOptions{ MaxBackoff: tc.maxBackoff, Clock: clock, }) diff --git a/operators/constellation-node-operator/internal/upgrade/upgrade_test.go b/operators/constellation-node-operator/internal/upgrade/upgrade_test.go index 394ffc54d..417e2fd3d 100644 --- a/operators/constellation-node-operator/internal/upgrade/upgrade_test.go +++ b/operators/constellation-node-operator/internal/upgrade/upgrade_test.go @@ -40,7 +40,7 @@ func TestGRPCDialer(t *testing.T) { require.Equal(os.ModeSocket, fileInfo.Mode()&os.ModeType) upgradeClient := newClientWithAddress(sockAddr) - require.NoError(upgradeClient.Upgrade(context.Background(), []*components.Component{}, "v1.29.6")) + require.NoError(upgradeClient.Upgrade(t.Context(), []*components.Component{}, "v1.29.6")) } type fakeUpgradeAgent struct { diff --git a/operators/constellation-node-operator/sgreconciler/scalinggroup_controller_test.go b/operators/constellation-node-operator/sgreconciler/scalinggroup_controller_test.go index 5f312d97b..df90901c9 100644 --- a/operators/constellation-node-operator/sgreconciler/scalinggroup_controller_test.go +++ b/operators/constellation-node-operator/sgreconciler/scalinggroup_controller_test.go @@ -88,7 +88,7 @@ func TestCreateScalingGroupIfNotExists(t *testing.T) { autoscalingGroupName: "autoscaling-group-name", role: updatev1alpha1.WorkerRole, } - err := createScalingGroupIfNotExists(context.Background(), newScalingGroupConfig) + err := createScalingGroupIfNotExists(t.Context(), newScalingGroupConfig) if tc.wantErr { assert.Error(err) return @@ -184,7 +184,7 @@ func TestPatchNodeGroupName(t *testing.T) { getErr: tc.getErr, updateErr: tc.updateErr, } - gotExists, gotErr := patchNodeGroupName(context.Background(), k8sClient, "resource-name", "node-group-name") + gotExists, gotErr := patchNodeGroupName(t.Context(), k8sClient, "resource-name", "node-group-name") if tc.wantErr { assert.Error(gotErr) return diff --git a/s3proxy/internal/kms/kms_test.go b/s3proxy/internal/kms/kms_test.go index cd831ddc4..f506d0a42 100644 --- a/s3proxy/internal/kms/kms_test.go +++ b/s3proxy/internal/kms/kms_test.go @@ -60,7 +60,7 @@ func TestGetDataKey(t *testing.T) { client.grpc = tc.client - res, err := client.GetDataKey(context.Background(), "disk-uuid", 32) + res, err := client.GetDataKey(t.Context(), "disk-uuid", 32) if tc.wantErr { assert.Error(err) } else { diff --git a/terraform-provider-constellation/internal/provider/cluster_resource_test.go b/terraform-provider-constellation/internal/provider/cluster_resource_test.go index fb1b5c4fc..f8cea33ef 100644 --- a/terraform-provider-constellation/internal/provider/cluster_resource_test.go +++ b/terraform-provider-constellation/internal/provider/cluster_resource_test.go @@ -7,7 +7,6 @@ SPDX-License-Identifier: AGPL-3.0-only package provider import ( - "context" "fmt" "regexp" "testing" @@ -96,14 +95,14 @@ func TestViolatedImageConstraint(t *testing.T) { Version: tc.version, } - input, diags := basetypes.NewObjectValueFrom(context.Background(), map[string]attr.Type{ + input, diags := basetypes.NewObjectValueFrom(t.Context(), map[string]attr.Type{ "version": basetypes.StringType{}, "reference": basetypes.StringType{}, "short_path": basetypes.StringType{}, "marketplace_image": basetypes.BoolType{}, }, img) require.Equal(t, 0, diags.ErrorsCount()) - _, _, diags2 := sut.getImageVersion(context.Background(), &ClusterResourceModel{ + _, _, diags2 := sut.getImageVersion(t.Context(), &ClusterResourceModel{ Image: input, }) require.Equal(t, tc.expectedErrorCount, diags2.ErrorsCount()) diff --git a/upgrade-agent/internal/server/server_test.go b/upgrade-agent/internal/server/server_test.go index f7ff13e49..b01885fa6 100644 --- a/upgrade-agent/internal/server/server_test.go +++ b/upgrade-agent/internal/server/server_test.go @@ -125,7 +125,7 @@ func TestPrepareUpdate(t *testing.T) { require := require.New(t) assert := assert.New(t) - err := prepareUpdate(context.Background(), tc.installer, tc.updateRequest) + err := prepareUpdate(t.Context(), tc.installer, tc.updateRequest) if tc.wantErr { assert.Error(err) return diff --git a/verify/server/server_test.go b/verify/server/server_test.go index 288a06399..9af5dbed3 100644 --- a/verify/server/server_test.go +++ b/verify/server/server_test.go @@ -108,7 +108,7 @@ func TestGetAttestationGRPC(t *testing.T) { issuer: tc.issuer, } - resp, err := server.GetAttestation(context.Background(), tc.request) + resp, err := server.GetAttestation(t.Context(), tc.request) if tc.wantErr { assert.Error(err) } else { @@ -164,7 +164,7 @@ func TestGetAttestationHTTP(t *testing.T) { httpServer := httptest.NewServer(http.HandlerFunc(server.getAttestationHTTP)) defer httpServer.Close() - req, err := http.NewRequestWithContext(context.Background(), http.MethodGet, httpServer.URL+tc.request, nil) + req, err := http.NewRequestWithContext(t.Context(), http.MethodGet, httpServer.URL+tc.request, nil) require.NoError(err) resp, err := http.DefaultClient.Do(req) require.NoError(err) From 667da042bca24e62d324859682ff203059cee1e7 Mon Sep 17 00:00:00 2001 From: edgelessci <71088502+edgelessci@users.noreply.github.com> Date: Wed, 9 Apr 2025 11:33:03 +0200 Subject: [PATCH 207/311] image: update measurements and image version (#3748) Co-authored-by: edgelessci --- .../measurements/measurements_enterprise.go | 16 ++++++++-------- internal/config/image_enterprise.go | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/internal/attestation/measurements/measurements_enterprise.go b/internal/attestation/measurements/measurements_enterprise.go index 1cb577d4f..95eb21aab 100644 --- a/internal/attestation/measurements/measurements_enterprise.go +++ b/internal/attestation/measurements/measurements_enterprise.go @@ -19,14 +19,14 @@ package measurements // revive:disable:var-naming var ( - aws_AWSNitroTPM = M{0: {Expected: []byte{0x73, 0x7f, 0x76, 0x7a, 0x12, 0xf5, 0x4e, 0x70, 0xee, 0xcb, 0xc8, 0x68, 0x40, 0x11, 0x32, 0x3a, 0xe2, 0xfe, 0x2d, 0xd9, 0xf9, 0x07, 0x85, 0x57, 0x79, 0x69, 0xd7, 0xa2, 0x01, 0x3e, 0x8c, 0x12}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xaa, 0x8e, 0x3d, 0xf4, 0x08, 0x73, 0xe5, 0x93, 0x73, 0x2a, 0xd5, 0xc9, 0xb4, 0x2e, 0x4f, 0xac, 0xab, 0x2a, 0xcd, 0xe8, 0x3a, 0x53, 0x35, 0x3b, 0x9f, 0xb1, 0xe6, 0xc0, 0xae, 0x7b, 0xc3, 0x08}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x6e, 0x6f, 0xf5, 0xa5, 0xdb, 0x95, 0x90, 0x0e, 0xe3, 0xad, 0x2b, 0x75, 0x5a, 0x87, 0x31, 0x47, 0x8c, 0x0d, 0x7a, 0x7d, 0x19, 0x71, 0x08, 0x97, 0x93, 0xc3, 0x41, 0x2e, 0xe6, 0x2a, 0x51, 0x57}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x49, 0x20, 0x74, 0xcc, 0x27, 0x88, 0x36, 0x8b, 0x60, 0x76, 0x11, 0xe9, 0xdf, 0x78, 0x07, 0xb3, 0xcb, 0x17, 0x4f, 0xac, 0xce, 0x66, 0x69, 0xc6, 0x03, 0x90, 0xf1, 0x5f, 0x93, 0xde, 0xf1, 0x08}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - aws_AWSSEVSNP = M{0: {Expected: []byte{0xd6, 0xdf, 0x85, 0x53, 0x58, 0xf5, 0xb1, 0x0f, 0x06, 0xf0, 0xfa, 0xb3, 0xf4, 0x08, 0xad, 0x26, 0xcd, 0x16, 0x5a, 0x29, 0x49, 0xba, 0xd6, 0x9e, 0x2c, 0xc7, 0x56, 0x92, 0x52, 0x9e, 0x66, 0x2a}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xeb, 0xc0, 0x4e, 0x60, 0x15, 0xdc, 0x14, 0x3f, 0x40, 0x04, 0x23, 0xa7, 0x0a, 0x7e, 0xcc, 0x03, 0x70, 0x61, 0xc4, 0x3b, 0x17, 0x00, 0x0c, 0x90, 0xfe, 0x70, 0xef, 0x34, 0x11, 0x46, 0x0d, 0x50}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x2f, 0xdf, 0x35, 0x5c, 0xa5, 0xcd, 0x31, 0xdb, 0x41, 0x44, 0x1a, 0xaf, 0x07, 0x88, 0x3e, 0xa5, 0x39, 0x9c, 0x22, 0x10, 0xe1, 0x95, 0x6d, 0x97, 0xed, 0xa5, 0x35, 0xbd, 0x6a, 0x12, 0xa4, 0x3f}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x52, 0x95, 0x6e, 0x48, 0x07, 0x5b, 0x7c, 0x43, 0x35, 0xe0, 0x6b, 0xa4, 0x8d, 0xb6, 0x73, 0xc7, 0x45, 0x34, 0xa4, 0xf1, 0x21, 0x87, 0x09, 0x5c, 0x7a, 0x96, 0x0a, 0xb4, 0x03, 0xd2, 0x21, 0xeb}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - azure_AzureSEVSNP = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x99, 0x51, 0x82, 0x62, 0x6f, 0xd1, 0x1a, 0x02, 0x65, 0x0d, 0x6c, 0xc9, 0x06, 0xd3, 0x9f, 0x2e, 0xd2, 0x39, 0xac, 0x07, 0x4a, 0x55, 0xa0, 0xcc, 0x60, 0x9b, 0x28, 0x44, 0xf3, 0xf1, 0x39, 0xe0}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xde, 0x1d, 0xaf, 0x0b, 0xc0, 0x9c, 0xcc, 0x77, 0x9b, 0x3c, 0x10, 0xc0, 0xff, 0xb5, 0x7b, 0x93, 0x52, 0xa6, 0x15, 0x28, 0x7e, 0xab, 0xb4, 0xdd, 0x6a, 0x97, 0xc6, 0x93, 0x96, 0xc8, 0xa6, 0xde}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x57, 0xdc, 0x86, 0x87, 0x32, 0x69, 0x73, 0xca, 0xa0, 0xcc, 0x3c, 0xdd, 0xbd, 0xff, 0x27, 0x60, 0x92, 0xb0, 0xbb, 0x6d, 0xa8, 0xc9, 0x01, 0x2e, 0xf8, 0x47, 0x34, 0x32, 0x7f, 0x8c, 0xe1, 0x17}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - azure_AzureTDX = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xc1, 0xdf, 0x6d, 0xc0, 0x27, 0x43, 0xe9, 0x0b, 0x80, 0x92, 0x18, 0xc5, 0x93, 0x0e, 0xfd, 0xdc, 0xe4, 0xd7, 0x9f, 0xc0, 0x42, 0x50, 0x83, 0xeb, 0xa4, 0xbb, 0x00, 0xa8, 0x09, 0xa2, 0x0a, 0x0e}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xb6, 0x1f, 0x0b, 0xb1, 0xdc, 0x0b, 0x8b, 0x81, 0x77, 0xad, 0xe5, 0x5c, 0x00, 0x94, 0xe0, 0x16, 0xe9, 0xf5, 0xbb, 0x0f, 0xc4, 0x95, 0xa2, 0x5d, 0xbd, 0x38, 0xb7, 0x0e, 0xe7, 0x1c, 0x10, 0xaa}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x37, 0xe0, 0xd7, 0x3f, 0x86, 0x03, 0x43, 0xa7, 0xa2, 0x2a, 0x70, 0x4b, 0x17, 0x12, 0xb4, 0x50, 0xca, 0xac, 0xb2, 0xb6, 0xe1, 0xc1, 0xed, 0xb0, 0xbd, 0xfd, 0x99, 0x65, 0xf9, 0x7a, 0x00, 0x79}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + aws_AWSNitroTPM = M{0: {Expected: []byte{0x73, 0x7f, 0x76, 0x7a, 0x12, 0xf5, 0x4e, 0x70, 0xee, 0xcb, 0xc8, 0x68, 0x40, 0x11, 0x32, 0x3a, 0xe2, 0xfe, 0x2d, 0xd9, 0xf9, 0x07, 0x85, 0x57, 0x79, 0x69, 0xd7, 0xa2, 0x01, 0x3e, 0x8c, 0x12}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xad, 0x5e, 0x0b, 0x65, 0x8d, 0x1d, 0x89, 0xa6, 0x4c, 0xba, 0x29, 0x39, 0x19, 0x59, 0x19, 0x1c, 0x59, 0x3f, 0xa6, 0xf5, 0xf7, 0x2d, 0x7f, 0x9d, 0xc0, 0xeb, 0x50, 0xcf, 0xd4, 0xc6, 0x50, 0x49}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x4f, 0xcd, 0x6c, 0x24, 0xf7, 0x54, 0xff, 0x1a, 0xdf, 0xc6, 0xc6, 0xff, 0x98, 0x53, 0xcf, 0x45, 0x44, 0xb6, 0x34, 0x04, 0xeb, 0x1f, 0x67, 0xcd, 0x2a, 0x40, 0x51, 0xff, 0xc7, 0x4d, 0x51, 0xb5}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xac, 0x4f, 0xdf, 0x33, 0xbd, 0x75, 0x90, 0xd0, 0x9f, 0x59, 0x28, 0xb8, 0x56, 0x43, 0xab, 0x81, 0xd4, 0xd6, 0x40, 0x93, 0xaf, 0xab, 0x68, 0xe7, 0x39, 0x69, 0x43, 0xee, 0x95, 0x32, 0x01, 0x1d}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + aws_AWSSEVSNP = M{0: {Expected: []byte{0xd6, 0xdf, 0x85, 0x53, 0x58, 0xf5, 0xb1, 0x0f, 0x06, 0xf0, 0xfa, 0xb3, 0xf4, 0x08, 0xad, 0x26, 0xcd, 0x16, 0x5a, 0x29, 0x49, 0xba, 0xd6, 0x9e, 0x2c, 0xc7, 0x56, 0x92, 0x52, 0x9e, 0x66, 0x2a}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xb4, 0x75, 0x00, 0xf6, 0x30, 0xb4, 0x54, 0x70, 0x0c, 0x87, 0xca, 0xec, 0x86, 0xc1, 0x25, 0xeb, 0x79, 0x34, 0xaa, 0x17, 0x4f, 0x9c, 0x35, 0x4d, 0x46, 0xca, 0xe3, 0x47, 0xe1, 0x40, 0xec, 0xde}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x6b, 0xe2, 0xed, 0xee, 0xc9, 0xd5, 0x7a, 0x49, 0x8b, 0x6d, 0xa6, 0x9b, 0x4b, 0x96, 0xcb, 0x75, 0xc0, 0x0c, 0x38, 0x3a, 0x55, 0x36, 0x89, 0xd0, 0x39, 0xc2, 0xa1, 0xde, 0xb2, 0xb4, 0x0f, 0xe6}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xf6, 0x4e, 0x2c, 0xc6, 0xdc, 0x91, 0xb0, 0x1a, 0x0c, 0x27, 0xaf, 0x0e, 0x54, 0x66, 0x27, 0x48, 0x00, 0xc8, 0xe9, 0x38, 0xac, 0x3b, 0x65, 0x41, 0x1b, 0x48, 0x92, 0x65, 0xdc, 0x55, 0x56, 0xe2}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + azure_AzureSEVSNP = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x98, 0x32, 0x19, 0x32, 0x89, 0x53, 0xfa, 0x2b, 0x75, 0x67, 0xb9, 0x3a, 0x79, 0x3d, 0x44, 0xe4, 0xdf, 0xed, 0xf6, 0xbe, 0x9c, 0xbe, 0x50, 0x08, 0x3e, 0x52, 0xa7, 0xc6, 0xcb, 0xb4, 0xd7, 0x96}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xd7, 0x25, 0x4c, 0xc4, 0xe6, 0x9e, 0x04, 0x0b, 0x67, 0xf2, 0x65, 0x0c, 0xb9, 0xb8, 0xc5, 0x17, 0xcf, 0x0e, 0xcd, 0x0b, 0x55, 0x21, 0xb8, 0xb3, 0x01, 0x9a, 0x51, 0x2c, 0x19, 0xe6, 0xf4, 0x86}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xda, 0x7c, 0x69, 0x6e, 0xcf, 0x06, 0x08, 0xfd, 0x6d, 0x71, 0xef, 0x86, 0x19, 0x9b, 0x69, 0x5b, 0x38, 0x21, 0x6c, 0xb8, 0xe3, 0x3a, 0x83, 0x57, 0x78, 0x0c, 0xef, 0x2b, 0x39, 0xb9, 0x9d, 0x25}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + azure_AzureTDX = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x75, 0xe6, 0x04, 0x4a, 0x09, 0x6b, 0x95, 0x34, 0xa5, 0xde, 0x69, 0x2d, 0xfa, 0xbc, 0x07, 0xaf, 0xf8, 0xb4, 0x46, 0xf1, 0x93, 0x9d, 0xb5, 0xa9, 0xb3, 0x21, 0x20, 0x29, 0x1d, 0xb5, 0x3f, 0xdf}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x04, 0x20, 0x5c, 0x22, 0x11, 0x80, 0x26, 0xee, 0x3d, 0xa0, 0x31, 0xb7, 0xcc, 0x5b, 0x89, 0x68, 0xef, 0x24, 0x9b, 0x43, 0x88, 0x20, 0x0b, 0xa2, 0xe4, 0xdf, 0xaa, 0x0c, 0xe4, 0x90, 0x95, 0x3c}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xd8, 0x8e, 0x86, 0xd3, 0x34, 0xce, 0x8b, 0xc7, 0x96, 0x30, 0x47, 0x4e, 0xfc, 0x10, 0x7b, 0x31, 0x48, 0x67, 0xab, 0xf3, 0x41, 0xa2, 0xb4, 0x7f, 0xf5, 0x23, 0x0b, 0x45, 0x33, 0x04, 0x15, 0x5e}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} azure_AzureTrustedLaunch M - gcp_GCPSEVES = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x57, 0x9a, 0x5f, 0x7c, 0x74, 0xb1, 0x65, 0x67, 0x3b, 0x9a, 0x4a, 0x21, 0x53, 0x39, 0x09, 0x34, 0x44, 0x19, 0x74, 0x98, 0xb8, 0x05, 0x86, 0xe6, 0x29, 0x4e, 0x6d, 0x05, 0x74, 0xd3, 0xc8, 0xdf}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x2f, 0x98, 0xc6, 0x46, 0x97, 0x58, 0x90, 0xa8, 0x24, 0x47, 0x80, 0x5c, 0xea, 0xa9, 0xfe, 0x15, 0x53, 0xd1, 0xcd, 0xdc, 0xcf, 0x8d, 0xaa, 0xe4, 0x7f, 0x72, 0xa2, 0x9c, 0x45, 0x94, 0xb7, 0xb7}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x63, 0x02, 0xe3, 0x38, 0x41, 0xe8, 0x2f, 0x31, 0xa8, 0x54, 0x62, 0x80, 0x1d, 0xac, 0xdf, 0x3e, 0xac, 0x58, 0xe0, 0x56, 0x75, 0xe3, 0x44, 0xc3, 0x3f, 0x04, 0x28, 0x50, 0x93, 0x0a, 0x82, 0x97}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - gcp_GCPSEVSNP = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xdf, 0x43, 0x2f, 0x88, 0x32, 0x39, 0xf0, 0x95, 0x79, 0x51, 0x3a, 0x1a, 0xd7, 0x6b, 0xb8, 0x99, 0x41, 0x34, 0x49, 0xbd, 0x2c, 0x47, 0x32, 0x0d, 0x50, 0xf3, 0xef, 0x7c, 0xdc, 0xaa, 0x88, 0xb8}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x67, 0x20, 0x88, 0xd9, 0x1e, 0x64, 0x02, 0xa5, 0x93, 0xe6, 0xd9, 0xd8, 0x20, 0x42, 0xfa, 0xf2, 0x4b, 0x1e, 0xc5, 0xbb, 0x78, 0x42, 0xe3, 0x4d, 0x3d, 0x5a, 0x52, 0x94, 0x5c, 0xcf, 0xf4, 0xdc}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xaf, 0xf5, 0x56, 0xa8, 0xaa, 0x7c, 0x13, 0x6f, 0x85, 0x9a, 0x27, 0x84, 0x41, 0x7c, 0xec, 0x53, 0xab, 0xaf, 0xca, 0x14, 0x77, 0x0d, 0xbe, 0xd2, 0xaf, 0xf4, 0x66, 0x05, 0x06, 0x57, 0x97, 0x42}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - openstack_QEMUVTPM = M{4: {Expected: []byte{0x90, 0x87, 0x99, 0x56, 0xb2, 0xe2, 0x0f, 0xd2, 0x6a, 0xc3, 0x43, 0xcb, 0x1a, 0xaf, 0x9e, 0x1d, 0xbe, 0x98, 0x0c, 0xb4, 0xf2, 0xaf, 0xa4, 0x10, 0x8c, 0xc4, 0x14, 0x28, 0x83, 0x76, 0x50, 0xda}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x46, 0xf6, 0x85, 0x8b, 0x5a, 0xfe, 0xa0, 0x95, 0x40, 0xe7, 0x84, 0x89, 0xc7, 0x33, 0xff, 0x35, 0x3d, 0xfe, 0xb4, 0xfe, 0x32, 0xce, 0xb4, 0x66, 0x11, 0xc1, 0xdc, 0x2b, 0x77, 0xc9, 0x6f, 0xc8}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x99, 0x3a, 0xe5, 0x85, 0x6b, 0x4a, 0xe9, 0xb3, 0x70, 0xd3, 0xf2, 0x8a, 0x25, 0x7d, 0xfa, 0x79, 0x52, 0x52, 0x72, 0xc8, 0xd9, 0x90, 0xed, 0x95, 0x23, 0xfe, 0x02, 0x44, 0x77, 0x9e, 0x91, 0xf0}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + gcp_GCPSEVES = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x77, 0x0a, 0x48, 0x26, 0x6b, 0xca, 0x94, 0xfe, 0xd6, 0x82, 0x39, 0x33, 0xed, 0x2c, 0xf2, 0x7c, 0xe2, 0xc7, 0xad, 0x18, 0xc7, 0xb9, 0xba, 0x2d, 0x80, 0x32, 0x58, 0x2f, 0x4d, 0xae, 0x2f, 0x18}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xf6, 0x4f, 0x15, 0xfb, 0x8f, 0xeb, 0x57, 0xbf, 0xfc, 0xb1, 0x8a, 0xa8, 0xf0, 0xfc, 0x2b, 0x0d, 0x63, 0x12, 0x24, 0x38, 0x73, 0xe2, 0x00, 0x50, 0xfc, 0x8a, 0x46, 0x60, 0x90, 0x96, 0xd1, 0x3b}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x7c, 0xb7, 0x64, 0x20, 0x8a, 0xd3, 0x55, 0xb1, 0x76, 0x25, 0x55, 0xd6, 0xe6, 0xd4, 0x88, 0x9e, 0x29, 0xc8, 0x27, 0x34, 0xb1, 0xe8, 0xd4, 0x33, 0x0b, 0x40, 0xdd, 0xcb, 0x44, 0x82, 0x1b, 0xdb}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + gcp_GCPSEVSNP = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xc4, 0x0f, 0x5b, 0x30, 0x51, 0x2d, 0x43, 0x3d, 0x16, 0x2b, 0xac, 0x11, 0x71, 0x61, 0xe0, 0x4e, 0xd3, 0xae, 0xb5, 0x65, 0xe1, 0x4c, 0xbb, 0x11, 0x56, 0xd4, 0x30, 0x1b, 0x14, 0xac, 0x61, 0x5d}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xda, 0x0e, 0x94, 0xaf, 0x2e, 0xbc, 0xb6, 0x0e, 0x9e, 0x5f, 0x40, 0x4f, 0x28, 0x90, 0x78, 0xba, 0xdf, 0x2a, 0x31, 0x5c, 0xb5, 0x6b, 0x40, 0x2a, 0x6d, 0xc4, 0xbb, 0xcf, 0x21, 0x61, 0xbb, 0x55}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xea, 0x26, 0x71, 0x11, 0x2a, 0xb4, 0x00, 0xe5, 0x07, 0x94, 0x50, 0x50, 0x84, 0x63, 0xf1, 0x47, 0x61, 0x5e, 0xed, 0x97, 0xc0, 0xf8, 0x03, 0xf8, 0x01, 0xf7, 0x2f, 0xed, 0x56, 0x59, 0xe7, 0x1f}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + openstack_QEMUVTPM = M{4: {Expected: []byte{0x0d, 0xb0, 0x94, 0x5c, 0x51, 0x98, 0xab, 0x89, 0xb8, 0x25, 0xd5, 0xcb, 0x4e, 0xd8, 0x34, 0x53, 0x20, 0x2b, 0x7a, 0xe9, 0x2e, 0x71, 0x90, 0xd7, 0x6d, 0x90, 0xd5, 0xc0, 0x8a, 0x1d, 0xbd, 0xa0}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x71, 0x3e, 0x9d, 0xe0, 0x2a, 0xa3, 0x6b, 0xe0, 0xf9, 0x69, 0x49, 0x82, 0x1c, 0xb4, 0xc7, 0x15, 0xec, 0xd7, 0x8d, 0x51, 0xeb, 0xc7, 0x11, 0x80, 0x29, 0xbc, 0xd7, 0xbc, 0xed, 0xf6, 0x4d, 0xa8}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xb4, 0x4e, 0x33, 0xd0, 0xc2, 0x57, 0x9f, 0xa0, 0x9a, 0x73, 0x40, 0x8b, 0x2a, 0x2f, 0xfd, 0x31, 0x30, 0x92, 0x76, 0x6e, 0x1d, 0xb0, 0x7a, 0xfd, 0x40, 0xc9, 0x50, 0xb7, 0xe4, 0xff, 0x25, 0x4c}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} qemu_QEMUTDX M - qemu_QEMUVTPM = M{4: {Expected: []byte{0xad, 0xa5, 0xdc, 0xdd, 0x9f, 0x8e, 0x5e, 0xc9, 0x41, 0x09, 0x0c, 0x33, 0x7e, 0x6a, 0xc3, 0xc8, 0x32, 0xf2, 0x30, 0x31, 0x20, 0x68, 0xe4, 0x54, 0x52, 0x3b, 0x17, 0xb4, 0x91, 0x63, 0x0d, 0xd6}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xf5, 0x24, 0x31, 0xf7, 0xb7, 0x16, 0xb1, 0x4b, 0xc8, 0x07, 0xff, 0xa3, 0xa1, 0x02, 0x5a, 0x7c, 0xb3, 0xb6, 0xf6, 0xe5, 0xfe, 0x8c, 0x0a, 0x83, 0x05, 0x31, 0x7f, 0xd3, 0x9c, 0xeb, 0x74, 0x59}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x4b, 0xa9, 0x19, 0xd7, 0x91, 0x06, 0x35, 0xb3, 0xee, 0x3c, 0xbf, 0x82, 0x76, 0x52, 0xed, 0xaa, 0x03, 0x88, 0x41, 0xd1, 0x2a, 0x0e, 0x34, 0xbb, 0x2e, 0x31, 0xe1, 0x35, 0xb4, 0xd7, 0x63, 0x4b}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + qemu_QEMUVTPM = M{4: {Expected: []byte{0x20, 0x4a, 0x80, 0xbf, 0x33, 0xf5, 0xa4, 0x1e, 0x7c, 0x02, 0x30, 0x73, 0xb5, 0xc1, 0xae, 0xfc, 0x92, 0x75, 0x69, 0x0f, 0x07, 0x9b, 0xf3, 0xf5, 0x1b, 0xf7, 0xd2, 0xa4, 0x89, 0xce, 0x68, 0x87}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x9e, 0xeb, 0x56, 0x6a, 0xb6, 0xf4, 0x84, 0x5d, 0xae, 0xb2, 0xc8, 0xed, 0x78, 0x2c, 0xb3, 0x00, 0xac, 0x22, 0xe2, 0x05, 0x10, 0xc9, 0x9f, 0x08, 0xfe, 0x2e, 0xf2, 0x78, 0xb8, 0xd7, 0x85, 0xd9}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x8d, 0x1b, 0x12, 0xf2, 0x55, 0x93, 0xb7, 0x22, 0xca, 0xc0, 0xed, 0xb3, 0xa6, 0xd0, 0x86, 0x69, 0xc0, 0x06, 0xd5, 0x71, 0x09, 0xed, 0x47, 0xbd, 0x74, 0xcf, 0x12, 0x5e, 0x95, 0xeb, 0x8d, 0xb3}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} ) diff --git a/internal/config/image_enterprise.go b/internal/config/image_enterprise.go index 1ebcd6b86..f54d5e248 100644 --- a/internal/config/image_enterprise.go +++ b/internal/config/image_enterprise.go @@ -10,5 +10,5 @@ package config const ( // defaultImage is the default image to use. - defaultImage = "ref/main/stream/nightly/v2.23.0-pre.0.20250403094712-ba0865706e51" + defaultImage = "ref/main/stream/nightly/v2.23.0-pre.0.20250408114316-bfab84ce1cb7" ) From 8e6c9347414931dadf3ac343f26dd66b998ff37a Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 9 Apr 2025 15:01:10 +0200 Subject: [PATCH 208/311] deps: update ubuntu:24.04 Docker digest to 1e622c5 (#3751) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- 3rdparty/gcp-guest-agent/Dockerfile | 2 +- docs/screencasts/docker/Dockerfile | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/3rdparty/gcp-guest-agent/Dockerfile b/3rdparty/gcp-guest-agent/Dockerfile index ca7fb8014..0afa19e2c 100644 --- a/3rdparty/gcp-guest-agent/Dockerfile +++ b/3rdparty/gcp-guest-agent/Dockerfile @@ -1,4 +1,4 @@ -FROM ubuntu:24.04@sha256:72297848456d5d37d1262630108ab308d3e9ec7ed1c3286a32fe09856619a782 as build +FROM ubuntu:24.04@sha256:1e622c5f073b4f6bfad6632f2616c7f59ef256e96fe78bf6a595d1dc4376ac02 as build # Install packages RUN apt-get update && apt-get install -y \ diff --git a/docs/screencasts/docker/Dockerfile b/docs/screencasts/docker/Dockerfile index a2e32adc1..d524ff7e2 100644 --- a/docs/screencasts/docker/Dockerfile +++ b/docs/screencasts/docker/Dockerfile @@ -1,4 +1,4 @@ -FROM ubuntu:24.04@sha256:72297848456d5d37d1262630108ab308d3e9ec7ed1c3286a32fe09856619a782 +FROM ubuntu:24.04@sha256:1e622c5f073b4f6bfad6632f2616c7f59ef256e96fe78bf6a595d1dc4376ac02 # Install requirements RUN apt-get update && apt-get install -y software-properties-common &&\ From 55ffe967e40ef9a0ed4bb2fdf49afab328f0cf12 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 10 Apr 2025 09:26:36 +0200 Subject: [PATCH 209/311] deps: update GitHub action dependencies (major) (#3746) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * deps: update GitHub action dependencies * allow unrestricted namespaces when building on ubuntu 24.04 --------- Signed-off-by: Daniel Weiße Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Daniel Weiße --- .../check_measurements_reproducibility/action.yml | 10 ++++++++-- .github/actions/setup_bazel_nix/action.yml | 2 +- .github/workflows/aws-snp-launchmeasurement.yml | 2 +- .../workflows/check-measurements-reproducibility.yml | 2 +- .github/workflows/e2e-windows.yml | 2 +- 5 files changed, 12 insertions(+), 6 deletions(-) diff --git a/.github/actions/check_measurements_reproducibility/action.yml b/.github/actions/check_measurements_reproducibility/action.yml index ea2407115..184e1221f 100644 --- a/.github/actions/check_measurements_reproducibility/action.yml +++ b/.github/actions/check_measurements_reproducibility/action.yml @@ -30,6 +30,12 @@ runs: jd-diff-patch moreutils + - name: Allow unrestricted user namespaces + shell: bash + run: | + sudo sysctl --ignore --write kernel.apparmor_restrict_unprivileged_unconfined=0 + sudo sysctl --ignore --write kernel.apparmor_restrict_unprivileged_userns=0 + - name: Build images id: build-images shell: bash @@ -46,12 +52,12 @@ runs: shell: bash run: | curl -fsLO https://cdn.confidential.cloud/constellation/v2/ref/-/stream/stable/${{ inputs.version }}/image/measurements.json - + - name: Cleanup release measurements and generate our own shell: bash run: | ${{ github.action_path }}/create_measurements.sh "${{ steps.build-images.outputs.buildPath }}" - + - name: Compare measurements shell: bash run: | diff --git a/.github/actions/setup_bazel_nix/action.yml b/.github/actions/setup_bazel_nix/action.yml index 97beb3a6f..b1981c7a8 100644 --- a/.github/actions/setup_bazel_nix/action.yml +++ b/.github/actions/setup_bazel_nix/action.yml @@ -114,7 +114,7 @@ runs: - name: Install nix if: steps.check_inputs.outputs.nixPreinstalled == 'false' - uses: cachix/install-nix-action@08dcb3a5e62fa31e2da3d490afc4176ef55ecd72 # v30 + uses: cachix/install-nix-action@d1ca217b388ee87b2507a9a93bf01368bde7cec2 # v31 with: install_url: "https://releases.nixos.org/nix/nix-${{ steps.check_inputs.outputs.nixVersion }}/install" diff --git a/.github/workflows/aws-snp-launchmeasurement.yml b/.github/workflows/aws-snp-launchmeasurement.yml index 5f923de2f..0f0cc0220 100644 --- a/.github/workflows/aws-snp-launchmeasurement.yml +++ b/.github/workflows/aws-snp-launchmeasurement.yml @@ -17,7 +17,7 @@ jobs: path: constellation - name: Install Nix - uses: cachix/install-nix-action@08dcb3a5e62fa31e2da3d490afc4176ef55ecd72 # v30 + uses: cachix/install-nix-action@d1ca217b388ee87b2507a9a93bf01368bde7cec2 # v31 - name: Download Firmware release id: download-firmware diff --git a/.github/workflows/check-measurements-reproducibility.yml b/.github/workflows/check-measurements-reproducibility.yml index dede0918a..ce8093c38 100644 --- a/.github/workflows/check-measurements-reproducibility.yml +++ b/.github/workflows/check-measurements-reproducibility.yml @@ -13,7 +13,7 @@ on: jobs: check-reproducibility: - runs-on: ubuntu-22.04 + runs-on: ubuntu-24.04 steps: - name: Checkout uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 diff --git a/.github/workflows/e2e-windows.yml b/.github/workflows/e2e-windows.yml index 856048fab..c4c28c1be 100644 --- a/.github/workflows/e2e-windows.yml +++ b/.github/workflows/e2e-windows.yml @@ -52,7 +52,7 @@ jobs: e2e-test: name: E2E Test Windows - runs-on: windows-2022 + runs-on: windows-2025 needs: build-cli steps: - name: Checkout From db63cd16594b060efaf07a5598bcbd6358782d29 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 10 Apr 2025 11:45:21 +0200 Subject: [PATCH 210/311] deps: update Terraform dependencies (#3749) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .../vpn/on-prem-terraform/.terraform.lock.hcl | 48 +++++----- dev-docs/howto/vpn/on-prem-terraform/main.tf | 2 +- .../azure-terraform/.terraform.lock.hcl | 48 +++++----- .../miniconstellation/azure-terraform/main.tf | 2 +- e2e/miniconstellation/.terraform.lock.hcl | 48 +++++----- e2e/miniconstellation/main.tf | 2 +- .../infrastructure/aws/.terraform.lock.hcl | 60 ++++++------ terraform/infrastructure/aws/main.tf | 2 +- .../aws/modules/instance_group/main.tf | 2 +- .../aws/modules/jump_host/main.tf | 2 +- .../aws/modules/load_balancer_target/main.tf | 2 +- .../aws/modules/public_private_subnet/main.tf | 2 +- .../infrastructure/azure/.terraform.lock.hcl | 48 +++++----- terraform/infrastructure/azure/main.tf | 2 +- .../modules/load_balancer_backend/main.tf | 2 +- .../azure/modules/scale_set/main.tf | 2 +- .../infrastructure/gcp/.terraform.lock.hcl | 48 +++++----- terraform/infrastructure/gcp/main.tf | 2 +- .../gcp/modules/instance_group/main.tf | 2 +- .../modules/internal_load_balancer/main.tf | 2 +- .../gcp/modules/jump_host/main.tf | 2 +- .../gcp/modules/loadbalancer/main.tf | 2 +- .../iam/aws/.terraform.lock.hcl | 60 ++++++------ terraform/infrastructure/iam/aws/main.tf | 2 +- .../iam/azure/.terraform.lock.hcl | 96 +++++++++---------- terraform/infrastructure/iam/azure/main.tf | 4 +- .../iam/gcp/.terraform.lock.hcl | 48 +++++----- terraform/infrastructure/iam/gcp/main.tf | 2 +- .../openstack/.terraform.lock.hcl | 60 ++++++------ terraform/infrastructure/openstack/main.tf | 2 +- .../modules/stackit_loadbalancer/main.tf | 2 +- 31 files changed, 304 insertions(+), 304 deletions(-) diff --git a/dev-docs/howto/vpn/on-prem-terraform/.terraform.lock.hcl b/dev-docs/howto/vpn/on-prem-terraform/.terraform.lock.hcl index cdcf1b084..2a0f14ac0 100644 --- a/dev-docs/howto/vpn/on-prem-terraform/.terraform.lock.hcl +++ b/dev-docs/howto/vpn/on-prem-terraform/.terraform.lock.hcl @@ -2,31 +2,31 @@ # Manual edits may be lost in future updates. provider "registry.terraform.io/hashicorp/azurerm" { - version = "4.25.0" - constraints = "4.25.0" + version = "4.26.0" + constraints = "4.26.0" hashes = [ - "h1:0ngEPvgsbXdQ6feo/6WqVkxDj1zsDx2jdsB2bl+R1Rg=", - "h1:3ZxcyUNfYBb49d6tw584RWmYbYozgqueZLHaJi9BLDA=", - "h1:6dUCvh+kYsKRVeqIEtcVdMgInojZqVV86R7DHkVXHq4=", - "h1:F0sulaJhPHnLbwWcKlsXP7DDAVQi9+93fFxjEoZQaKo=", - "h1:RvLXu5xam1B4u5TWEPdvKIc2lLNUekACXxl3OnplvLw=", - "h1:SG57DX+kbbsSlLr1y9Z/n/2F57aPlzSBi9tP+Y4ltD4=", - "h1:UMRdLJ+HHUIxHYrbguIJrsRUN3xGrf92Q53UGZi3fM4=", - "h1:fKYoZJBpyKMkoN46eGto3qG+IvD/SP2cjTD4AxGxJxg=", - "h1:kTMYggdpy3ozYocnK7SI6217nh8FAJQEVP8+93nVjEs=", - "h1:r3wbLuv+ZOTFgYna274nvJD41bUBrIEq3XrvzeZar5c=", - "h1:xNXSfbZ3U4IIYp9ttN+uDQqptNM7Ynk19283z0+2pww=", - "zh:05e9243872f174ec7e7bd58c92b986464d516d9281e28e6abe4b57fa9fd58b3c", - "zh:1b124540c947410e9334e64912bce4e3b5b164ae7734927fb093178081e67011", - "zh:2daaeadd33305a1e700682a1d369d52b1376c64a44e680c2fccdc3e58cd86edb", - "zh:3767cfeeaae01a5c263d863d1c8b58eca9a4fa8ada8dbdf41222d1b143694065", - "zh:3c69f63583468366fb641f606c23a269fd04b6f1603e06c20568ffc28e6581bd", - "zh:7b3afd2827ed6def9ce46dcb9ce8603db493606d1d2b50da9c09f8ef44b2545c", - "zh:8d37210d2a738c755da60dbdf26f6cb2d719ce8711aeea838bc961257d921e0e", - "zh:9096e89a61d1d04123075a4ef429fb52d2d22b9786f82c1d52db172c9a67e563", - "zh:9fcf345164043fd8147b5f8ec084a57e50ebdf0a5c48c2d49660ce461db650ae", - "zh:cbb5738bca019d8539432cb20b680781c3870d60a4e057ad178bc2ddc6f40e67", - "zh:ed49bf0d5875fcfb39dd739b79877ba2738bfb61c39546b02d5d0278f960da9e", + "h1:4u1kyA8Osv6H0LGarotaTHYYoLzA6pppkDe3r7WfiGk=", + "h1:5H50iSplSH5MTm3bYhus5iLK16MfXrSk7du854A+DGA=", + "h1:Bh70KRHeGuPkrJB764Xq9ikJOZmNSa8j/GehiMlHWSs=", + "h1:IZrN6ykVO4aiCjvKHwF4vKHkWpqjGNREKO2iPs4kO1w=", + "h1:VXqu52kAZEQXxly8+RoXrdpzfxlp+yJA2GBrRXrpenY=", + "h1:Vdylhj5W0M+J62bOOdvVUlmGB7M5TfaNRcThdb8ydcc=", + "h1:aDlCe/5J3dYrHZXURQxZM9mdCr29rJemJee6BdWTg94=", + "h1:hUD8zA28MYrlbtAa1Wyz9HINt0OD5PxiRF86hjHZ5HM=", + "h1:sIOsHg7I0ZS3QBR1OrFH7RHQMxo0E0udsl2Ii59O2Js=", + "h1:v5WNL753ytgJoMMZqsA4pVyRPUMipAPXHsinP9WYZ9g=", + "h1:vpOwIlkeCbbLItUkgHGgl9qDkKFWzRadXLfy5BlEraE=", + "zh:0e381bace81028596d60e253bc320bf62d00ae2ec207d7c7e70cdbec5f543334", + "zh:32c8cf70e476a4d0e0a2d4cb94b4a4e95c287c5972ca1e8c0f37dc629fbe31cb", + "zh:568ebaa4c66fc668dc14c8ff323e47fc7b2ac3b5a5d9eec612de2b6a30164f4c", + "zh:596c218810ffb85bc7224574b6ba6dbab9295bfa7490eac98c5ff88beae75710", + "zh:75a0e5b60f24684d62944714deb1c790b17c8d4acc93b5cdb45a8187d887b7f1", + "zh:7d2abea6ab66a08fed7d1ab8d4f3a8344fe7e2ac76d7409a3e40e8c066df6f22", + "zh:7f4db75991fd610b2c0306226e5e1916d4b633cdb0126bc78951dce2365b3418", + "zh:95fe307defb6e0dc172855fa597140f3da96655b3c558c140ae51a4a6077f58d", + "zh:ae07cdd3c658c0e24d45f1cfadf8b085b18981bcd72a20093ce3f042ed0adf3f", + "zh:d2a471b9e42499a7247f873aebd5cbc8df0c6691f02a5c9b556aa00045c06869", + "zh:e0299c0f6eae2b1c935f552f76fc49a2e61975eeda9410e3920a004b74d9e750", "zh:f569b65999264a9416862bca5cd2a6177d94ccb0424f3a4ef424428912b9cb3c", ] } diff --git a/dev-docs/howto/vpn/on-prem-terraform/main.tf b/dev-docs/howto/vpn/on-prem-terraform/main.tf index ca1457fae..b42d0769e 100644 --- a/dev-docs/howto/vpn/on-prem-terraform/main.tf +++ b/dev-docs/howto/vpn/on-prem-terraform/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { azurerm = { source = "hashicorp/azurerm" - version = "4.25.0" + version = "4.26.0" } random = { source = "hashicorp/random" diff --git a/dev-docs/miniconstellation/azure-terraform/.terraform.lock.hcl b/dev-docs/miniconstellation/azure-terraform/.terraform.lock.hcl index 63f51d59d..ec303f8a8 100644 --- a/dev-docs/miniconstellation/azure-terraform/.terraform.lock.hcl +++ b/dev-docs/miniconstellation/azure-terraform/.terraform.lock.hcl @@ -2,31 +2,31 @@ # Manual edits may be lost in future updates. provider "registry.terraform.io/hashicorp/azurerm" { - version = "4.25.0" - constraints = "4.25.0" + version = "4.26.0" + constraints = "4.26.0" hashes = [ - "h1:0ngEPvgsbXdQ6feo/6WqVkxDj1zsDx2jdsB2bl+R1Rg=", - "h1:3ZxcyUNfYBb49d6tw584RWmYbYozgqueZLHaJi9BLDA=", - "h1:6dUCvh+kYsKRVeqIEtcVdMgInojZqVV86R7DHkVXHq4=", - "h1:F0sulaJhPHnLbwWcKlsXP7DDAVQi9+93fFxjEoZQaKo=", - "h1:RvLXu5xam1B4u5TWEPdvKIc2lLNUekACXxl3OnplvLw=", - "h1:SG57DX+kbbsSlLr1y9Z/n/2F57aPlzSBi9tP+Y4ltD4=", - "h1:UMRdLJ+HHUIxHYrbguIJrsRUN3xGrf92Q53UGZi3fM4=", - "h1:fKYoZJBpyKMkoN46eGto3qG+IvD/SP2cjTD4AxGxJxg=", - "h1:kTMYggdpy3ozYocnK7SI6217nh8FAJQEVP8+93nVjEs=", - "h1:r3wbLuv+ZOTFgYna274nvJD41bUBrIEq3XrvzeZar5c=", - "h1:xNXSfbZ3U4IIYp9ttN+uDQqptNM7Ynk19283z0+2pww=", - "zh:05e9243872f174ec7e7bd58c92b986464d516d9281e28e6abe4b57fa9fd58b3c", - "zh:1b124540c947410e9334e64912bce4e3b5b164ae7734927fb093178081e67011", - "zh:2daaeadd33305a1e700682a1d369d52b1376c64a44e680c2fccdc3e58cd86edb", - "zh:3767cfeeaae01a5c263d863d1c8b58eca9a4fa8ada8dbdf41222d1b143694065", - "zh:3c69f63583468366fb641f606c23a269fd04b6f1603e06c20568ffc28e6581bd", - "zh:7b3afd2827ed6def9ce46dcb9ce8603db493606d1d2b50da9c09f8ef44b2545c", - "zh:8d37210d2a738c755da60dbdf26f6cb2d719ce8711aeea838bc961257d921e0e", - "zh:9096e89a61d1d04123075a4ef429fb52d2d22b9786f82c1d52db172c9a67e563", - "zh:9fcf345164043fd8147b5f8ec084a57e50ebdf0a5c48c2d49660ce461db650ae", - "zh:cbb5738bca019d8539432cb20b680781c3870d60a4e057ad178bc2ddc6f40e67", - "zh:ed49bf0d5875fcfb39dd739b79877ba2738bfb61c39546b02d5d0278f960da9e", + "h1:4u1kyA8Osv6H0LGarotaTHYYoLzA6pppkDe3r7WfiGk=", + "h1:5H50iSplSH5MTm3bYhus5iLK16MfXrSk7du854A+DGA=", + "h1:Bh70KRHeGuPkrJB764Xq9ikJOZmNSa8j/GehiMlHWSs=", + "h1:IZrN6ykVO4aiCjvKHwF4vKHkWpqjGNREKO2iPs4kO1w=", + "h1:VXqu52kAZEQXxly8+RoXrdpzfxlp+yJA2GBrRXrpenY=", + "h1:Vdylhj5W0M+J62bOOdvVUlmGB7M5TfaNRcThdb8ydcc=", + "h1:aDlCe/5J3dYrHZXURQxZM9mdCr29rJemJee6BdWTg94=", + "h1:hUD8zA28MYrlbtAa1Wyz9HINt0OD5PxiRF86hjHZ5HM=", + "h1:sIOsHg7I0ZS3QBR1OrFH7RHQMxo0E0udsl2Ii59O2Js=", + "h1:v5WNL753ytgJoMMZqsA4pVyRPUMipAPXHsinP9WYZ9g=", + "h1:vpOwIlkeCbbLItUkgHGgl9qDkKFWzRadXLfy5BlEraE=", + "zh:0e381bace81028596d60e253bc320bf62d00ae2ec207d7c7e70cdbec5f543334", + "zh:32c8cf70e476a4d0e0a2d4cb94b4a4e95c287c5972ca1e8c0f37dc629fbe31cb", + "zh:568ebaa4c66fc668dc14c8ff323e47fc7b2ac3b5a5d9eec612de2b6a30164f4c", + "zh:596c218810ffb85bc7224574b6ba6dbab9295bfa7490eac98c5ff88beae75710", + "zh:75a0e5b60f24684d62944714deb1c790b17c8d4acc93b5cdb45a8187d887b7f1", + "zh:7d2abea6ab66a08fed7d1ab8d4f3a8344fe7e2ac76d7409a3e40e8c066df6f22", + "zh:7f4db75991fd610b2c0306226e5e1916d4b633cdb0126bc78951dce2365b3418", + "zh:95fe307defb6e0dc172855fa597140f3da96655b3c558c140ae51a4a6077f58d", + "zh:ae07cdd3c658c0e24d45f1cfadf8b085b18981bcd72a20093ce3f042ed0adf3f", + "zh:d2a471b9e42499a7247f873aebd5cbc8df0c6691f02a5c9b556aa00045c06869", + "zh:e0299c0f6eae2b1c935f552f76fc49a2e61975eeda9410e3920a004b74d9e750", "zh:f569b65999264a9416862bca5cd2a6177d94ccb0424f3a4ef424428912b9cb3c", ] } diff --git a/dev-docs/miniconstellation/azure-terraform/main.tf b/dev-docs/miniconstellation/azure-terraform/main.tf index ff9010158..36e92affb 100644 --- a/dev-docs/miniconstellation/azure-terraform/main.tf +++ b/dev-docs/miniconstellation/azure-terraform/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { azurerm = { source = "hashicorp/azurerm" - version = "4.25.0" + version = "4.26.0" } random = { source = "hashicorp/random" diff --git a/e2e/miniconstellation/.terraform.lock.hcl b/e2e/miniconstellation/.terraform.lock.hcl index 587a3fdbd..3ac9144c9 100644 --- a/e2e/miniconstellation/.terraform.lock.hcl +++ b/e2e/miniconstellation/.terraform.lock.hcl @@ -2,31 +2,31 @@ # Manual edits may be lost in future updates. provider "registry.terraform.io/hashicorp/azurerm" { - version = "4.25.0" - constraints = "4.25.0" + version = "4.26.0" + constraints = "4.26.0" hashes = [ - "h1:0ngEPvgsbXdQ6feo/6WqVkxDj1zsDx2jdsB2bl+R1Rg=", - "h1:3ZxcyUNfYBb49d6tw584RWmYbYozgqueZLHaJi9BLDA=", - "h1:6dUCvh+kYsKRVeqIEtcVdMgInojZqVV86R7DHkVXHq4=", - "h1:F0sulaJhPHnLbwWcKlsXP7DDAVQi9+93fFxjEoZQaKo=", - "h1:RvLXu5xam1B4u5TWEPdvKIc2lLNUekACXxl3OnplvLw=", - "h1:SG57DX+kbbsSlLr1y9Z/n/2F57aPlzSBi9tP+Y4ltD4=", - "h1:UMRdLJ+HHUIxHYrbguIJrsRUN3xGrf92Q53UGZi3fM4=", - "h1:fKYoZJBpyKMkoN46eGto3qG+IvD/SP2cjTD4AxGxJxg=", - "h1:kTMYggdpy3ozYocnK7SI6217nh8FAJQEVP8+93nVjEs=", - "h1:r3wbLuv+ZOTFgYna274nvJD41bUBrIEq3XrvzeZar5c=", - "h1:xNXSfbZ3U4IIYp9ttN+uDQqptNM7Ynk19283z0+2pww=", - "zh:05e9243872f174ec7e7bd58c92b986464d516d9281e28e6abe4b57fa9fd58b3c", - "zh:1b124540c947410e9334e64912bce4e3b5b164ae7734927fb093178081e67011", - "zh:2daaeadd33305a1e700682a1d369d52b1376c64a44e680c2fccdc3e58cd86edb", - "zh:3767cfeeaae01a5c263d863d1c8b58eca9a4fa8ada8dbdf41222d1b143694065", - "zh:3c69f63583468366fb641f606c23a269fd04b6f1603e06c20568ffc28e6581bd", - "zh:7b3afd2827ed6def9ce46dcb9ce8603db493606d1d2b50da9c09f8ef44b2545c", - "zh:8d37210d2a738c755da60dbdf26f6cb2d719ce8711aeea838bc961257d921e0e", - "zh:9096e89a61d1d04123075a4ef429fb52d2d22b9786f82c1d52db172c9a67e563", - "zh:9fcf345164043fd8147b5f8ec084a57e50ebdf0a5c48c2d49660ce461db650ae", - "zh:cbb5738bca019d8539432cb20b680781c3870d60a4e057ad178bc2ddc6f40e67", - "zh:ed49bf0d5875fcfb39dd739b79877ba2738bfb61c39546b02d5d0278f960da9e", + "h1:4u1kyA8Osv6H0LGarotaTHYYoLzA6pppkDe3r7WfiGk=", + "h1:5H50iSplSH5MTm3bYhus5iLK16MfXrSk7du854A+DGA=", + "h1:Bh70KRHeGuPkrJB764Xq9ikJOZmNSa8j/GehiMlHWSs=", + "h1:IZrN6ykVO4aiCjvKHwF4vKHkWpqjGNREKO2iPs4kO1w=", + "h1:VXqu52kAZEQXxly8+RoXrdpzfxlp+yJA2GBrRXrpenY=", + "h1:Vdylhj5W0M+J62bOOdvVUlmGB7M5TfaNRcThdb8ydcc=", + "h1:aDlCe/5J3dYrHZXURQxZM9mdCr29rJemJee6BdWTg94=", + "h1:hUD8zA28MYrlbtAa1Wyz9HINt0OD5PxiRF86hjHZ5HM=", + "h1:sIOsHg7I0ZS3QBR1OrFH7RHQMxo0E0udsl2Ii59O2Js=", + "h1:v5WNL753ytgJoMMZqsA4pVyRPUMipAPXHsinP9WYZ9g=", + "h1:vpOwIlkeCbbLItUkgHGgl9qDkKFWzRadXLfy5BlEraE=", + "zh:0e381bace81028596d60e253bc320bf62d00ae2ec207d7c7e70cdbec5f543334", + "zh:32c8cf70e476a4d0e0a2d4cb94b4a4e95c287c5972ca1e8c0f37dc629fbe31cb", + "zh:568ebaa4c66fc668dc14c8ff323e47fc7b2ac3b5a5d9eec612de2b6a30164f4c", + "zh:596c218810ffb85bc7224574b6ba6dbab9295bfa7490eac98c5ff88beae75710", + "zh:75a0e5b60f24684d62944714deb1c790b17c8d4acc93b5cdb45a8187d887b7f1", + "zh:7d2abea6ab66a08fed7d1ab8d4f3a8344fe7e2ac76d7409a3e40e8c066df6f22", + "zh:7f4db75991fd610b2c0306226e5e1916d4b633cdb0126bc78951dce2365b3418", + "zh:95fe307defb6e0dc172855fa597140f3da96655b3c558c140ae51a4a6077f58d", + "zh:ae07cdd3c658c0e24d45f1cfadf8b085b18981bcd72a20093ce3f042ed0adf3f", + "zh:d2a471b9e42499a7247f873aebd5cbc8df0c6691f02a5c9b556aa00045c06869", + "zh:e0299c0f6eae2b1c935f552f76fc49a2e61975eeda9410e3920a004b74d9e750", "zh:f569b65999264a9416862bca5cd2a6177d94ccb0424f3a4ef424428912b9cb3c", ] } diff --git a/e2e/miniconstellation/main.tf b/e2e/miniconstellation/main.tf index a510c2a50..91dbc5439 100644 --- a/e2e/miniconstellation/main.tf +++ b/e2e/miniconstellation/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { azurerm = { source = "hashicorp/azurerm" - version = "4.25.0" + version = "4.26.0" } tls = { source = "hashicorp/tls" diff --git a/terraform/infrastructure/aws/.terraform.lock.hcl b/terraform/infrastructure/aws/.terraform.lock.hcl index 269149541..19b0327c6 100644 --- a/terraform/infrastructure/aws/.terraform.lock.hcl +++ b/terraform/infrastructure/aws/.terraform.lock.hcl @@ -2,38 +2,38 @@ # Manual edits may be lost in future updates. provider "registry.terraform.io/hashicorp/aws" { - version = "5.93.0" - constraints = "5.93.0" + version = "5.94.1" + constraints = "5.94.1" hashes = [ - "h1:4K1FdUEbgICLEwA5k20n/nWEFwIJQXeCjUshFjJN0RU=", - "h1:6/ezzfnV1mbibGSb3Bts9rbmE/Fp8BUTYkW73lBMORM=", - "h1:8v3mNLg29p+pqnGd5P7qxINrT8NvwS3j+4PlvUyVr+U=", - "h1:BoaXR7Iba6O0PiTRmIpQFAPH9IeUIZ0f2Y+kJZwKDjI=", - "h1:Gix6sLHGKwqKg4L1V/gBa5tcjIj5UrqH4kW9AX/agl0=", - "h1:IxIllFrinmbRNRRMg2ZIpQBbpFO2plSOPMXQEjtRc5k=", - "h1:M1reAJwL5XOzznMU3LL+PEp6Ps4XUO7HjT2qPcqG7Dk=", - "h1:ODfuqpsLGW3WShNNPgImLOOXlphVs4u/fFdLkScqi8U=", - "h1:OOAfaIREMxRhe2minsNofE7gn8VDA0XQ659/Eq2hJAc=", - "h1:SbzGotY1leY5nnLo/PJOcwIlNTHdZpAErxJSrfr2tTg=", - "h1:Uz5TSid6XzojWT8BHTu2IIP2gy1utfymurqxFB0UNDk=", - "h1:oOThSM1UKrEfKT2KIjKWQF+QeA/cqqlAalKcSFlNiHs=", - "h1:u1r9qfTvAeoGAb4Rwh4nxI7w4JjFayempELiEGoHgJY=", - "h1:zcGenKa+3ZRmcHPWwXrvUx1472tpeaQntT4ShJfWMKE=", - "zh:00e1b15e6f02cdc788fe855232b63ccce6652930080eac3ba4b8a2e35db02b23", - "zh:3a77ee12e4f5ab2e7b320a0f507389c9171ab82c50d39ae7caa5a1fb2bd95cb3", - "zh:3e32d58e139d098d867eef37914fef01fffb08504d828e0f384c2ffc18d71f80", - "zh:41cf69a525f0fbe0fdb71d26be7ff5e20bb90ccdf5af32c83ed53f0ca2f071b5", - "zh:43055bdd0786855cf7242638a74b579f74f4f1a8e7c7e5e0e50230c8f6b908cb", - "zh:4ac4c29aa0de842ad91145c5a5fba21338531ffca13a510927d445e007a24938", - "zh:57e510498b3aeb6d6155c10fa195e1d5502e763899251057e59e73f653d1e262", - "zh:8f749645b27dba1a07d06aaf9d5596fc4213123f12f3808d68539e78ab16996e", + "h1:/BQk0OxJ3bsdISapaAe+AKeEH/ZUr1BBZo41qUvJ81c=", + "h1:CwOiakQRR4e5jO4vE1p2GjfsfO0XiR2uh1qvcSyi51w=", + "h1:QpZ6MYiJqSlB6zA7YnnAAXKeImVduxxiBkJe+NCsWkQ=", + "h1:WlF6NHa5yRgvbDWx6x+/sWwAJdi4Pefo/hN8m7/FK2M=", + "h1:dYdnGlaCJONFyGk/t3Y4iJzQ8EiJr2DaDdZ/2JV5PZU=", + "h1:dmSoVB6wlQ8H2VOc6CMs/d0VbEtkyGJ21qROaXkrdSg=", + "h1:eqxPYFl9Gl+iutDyYTZKteN5v0YFDzDI7eyfoIwh/3U=", + "h1:flqrGxt30tS2dKz1ebDVb4R9KETEj7hIw4q4apnVl4s=", + "h1:i8BJ9vzsFh23FZ5BXmziCCnnXt7TIVCnVhLbvQVhHKs=", + "h1:nJV7laVkjYOSlL4MYAi7m567QgCp7I3e3SLwB5dGHPY=", + "h1:oBzQAl63ITG9mOt8qGI1WmdBo5iIwIBsnzLXttXZe14=", + "h1:pm3uoaQYHaavwE83zsEzAFn/LKD1EWGiYRfzVxNCaIA=", + "h1:tUooQrvUBOca6k+8CDZHB/8mwSq6BDlCiLwR9FyiEHA=", + "h1:zRdb9dsuAP9K4Qjj9CkaNxO39L2DErawTpkMKWgxRyQ=", + "zh:14fb41e50219660d5f02b977e6f786d8ce78766cce8c2f6b8131411b087ae945", + "zh:3bc5d12acd5e1a5f1cf78a7f05d0d63f988b57485e7d20c47e80a0b723a99d26", + "zh:4835e49377f80a37c6191a092f636e227a9f086e3cc3f0c9e1b554da8793cfe8", + "zh:605971275adae25096dca30a94e29931039133c667c1d9b38778a09594312964", + "zh:8ae46b4a9a67815facf59da0c56d74ef71bcc77ae79e8bfbac504fa43f267f8e", + "zh:913f3f371c3e6d1f040d6284406204b049977c13cb75aae71edb0ef8361da7dd", + "zh:91f85ae8c73932547ad7139ce0b047a6a7c7be2fd944e51db13231cc80ce6d8e", + "zh:96352ae4323ce137903b9fe879941f894a3ce9ef30df1018a0f29f285a448793", "zh:9b12af85486a96aedd8d7984b0ff811a4b42e3d88dad1a3fb4c0b580d04fa425", - "zh:aaca5934ac6273d48922ad7685c5fc2aa7ef5275346a9e70366b7a180a788d41", - "zh:b7585b720a97467302f2e29f0688a5a746778f7b73c30eb085c25831decba1e1", - "zh:c16ae0a46d796858c49a89dd90e5ca92f793e646474fadeafaf701def4a4aa83", - "zh:d66bdc9cd5108452d9dba44082e504ff5e3a3001c8f853bbcaff850cb2127a21", - "zh:ee1aec6c44b117a6c8b7159ee7dc82f1ddac6ba434b4e6c493717738326f0a99", - "zh:f0da48692e00ecacea72d7104714d9721f6be40ba094490c442bb3e68d2e2604", + "zh:9b51922c9201b1dc3d05b39f9972715db5f67297deee088793d02dea1832564b", + "zh:a689e82112aa71e15647b06502d5b585980cd9002c3cc8458f092e8c8a667696", + "zh:c3723fa3e6aff3c1cc0088bdcb1edee168fe60020f2f77161d135bf473f45ab2", + "zh:d6a2052b864dd394b01ad1bae32d0a7d257940ee47908d02df7fa7873981d619", + "zh:dda4c9c0406cc54ad8ee4f19173a32de7c6e73abb5a948ea0f342d567df26a1d", + "zh:f42e0fe592b97cbdf70612f0fbe2bab851835e2d1aaf8cbb87c3ab0f2c96bb27", ] } diff --git a/terraform/infrastructure/aws/main.tf b/terraform/infrastructure/aws/main.tf index 0b8ed0059..e4c06d91e 100644 --- a/terraform/infrastructure/aws/main.tf +++ b/terraform/infrastructure/aws/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { aws = { source = "hashicorp/aws" - version = "5.93.0" + version = "5.94.1" } random = { source = "hashicorp/random" diff --git a/terraform/infrastructure/aws/modules/instance_group/main.tf b/terraform/infrastructure/aws/modules/instance_group/main.tf index 8aa0f774b..788b06bce 100644 --- a/terraform/infrastructure/aws/modules/instance_group/main.tf +++ b/terraform/infrastructure/aws/modules/instance_group/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { aws = { source = "hashicorp/aws" - version = "5.93.0" + version = "5.94.1" } random = { source = "hashicorp/random" diff --git a/terraform/infrastructure/aws/modules/jump_host/main.tf b/terraform/infrastructure/aws/modules/jump_host/main.tf index 2e58d3199..fc1017bfd 100644 --- a/terraform/infrastructure/aws/modules/jump_host/main.tf +++ b/terraform/infrastructure/aws/modules/jump_host/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { aws = { source = "hashicorp/aws" - version = "5.93.0" + version = "5.94.1" } } } diff --git a/terraform/infrastructure/aws/modules/load_balancer_target/main.tf b/terraform/infrastructure/aws/modules/load_balancer_target/main.tf index d1f2eb112..e0fab8730 100644 --- a/terraform/infrastructure/aws/modules/load_balancer_target/main.tf +++ b/terraform/infrastructure/aws/modules/load_balancer_target/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { aws = { source = "hashicorp/aws" - version = "5.93.0" + version = "5.94.1" } } } diff --git a/terraform/infrastructure/aws/modules/public_private_subnet/main.tf b/terraform/infrastructure/aws/modules/public_private_subnet/main.tf index 56708857d..47e1e07e7 100644 --- a/terraform/infrastructure/aws/modules/public_private_subnet/main.tf +++ b/terraform/infrastructure/aws/modules/public_private_subnet/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { aws = { source = "hashicorp/aws" - version = "5.93.0" + version = "5.94.1" } } } diff --git a/terraform/infrastructure/azure/.terraform.lock.hcl b/terraform/infrastructure/azure/.terraform.lock.hcl index cdcf1b084..2a0f14ac0 100644 --- a/terraform/infrastructure/azure/.terraform.lock.hcl +++ b/terraform/infrastructure/azure/.terraform.lock.hcl @@ -2,31 +2,31 @@ # Manual edits may be lost in future updates. provider "registry.terraform.io/hashicorp/azurerm" { - version = "4.25.0" - constraints = "4.25.0" + version = "4.26.0" + constraints = "4.26.0" hashes = [ - "h1:0ngEPvgsbXdQ6feo/6WqVkxDj1zsDx2jdsB2bl+R1Rg=", - "h1:3ZxcyUNfYBb49d6tw584RWmYbYozgqueZLHaJi9BLDA=", - "h1:6dUCvh+kYsKRVeqIEtcVdMgInojZqVV86R7DHkVXHq4=", - "h1:F0sulaJhPHnLbwWcKlsXP7DDAVQi9+93fFxjEoZQaKo=", - "h1:RvLXu5xam1B4u5TWEPdvKIc2lLNUekACXxl3OnplvLw=", - "h1:SG57DX+kbbsSlLr1y9Z/n/2F57aPlzSBi9tP+Y4ltD4=", - "h1:UMRdLJ+HHUIxHYrbguIJrsRUN3xGrf92Q53UGZi3fM4=", - "h1:fKYoZJBpyKMkoN46eGto3qG+IvD/SP2cjTD4AxGxJxg=", - "h1:kTMYggdpy3ozYocnK7SI6217nh8FAJQEVP8+93nVjEs=", - "h1:r3wbLuv+ZOTFgYna274nvJD41bUBrIEq3XrvzeZar5c=", - "h1:xNXSfbZ3U4IIYp9ttN+uDQqptNM7Ynk19283z0+2pww=", - "zh:05e9243872f174ec7e7bd58c92b986464d516d9281e28e6abe4b57fa9fd58b3c", - "zh:1b124540c947410e9334e64912bce4e3b5b164ae7734927fb093178081e67011", - "zh:2daaeadd33305a1e700682a1d369d52b1376c64a44e680c2fccdc3e58cd86edb", - "zh:3767cfeeaae01a5c263d863d1c8b58eca9a4fa8ada8dbdf41222d1b143694065", - "zh:3c69f63583468366fb641f606c23a269fd04b6f1603e06c20568ffc28e6581bd", - "zh:7b3afd2827ed6def9ce46dcb9ce8603db493606d1d2b50da9c09f8ef44b2545c", - "zh:8d37210d2a738c755da60dbdf26f6cb2d719ce8711aeea838bc961257d921e0e", - "zh:9096e89a61d1d04123075a4ef429fb52d2d22b9786f82c1d52db172c9a67e563", - "zh:9fcf345164043fd8147b5f8ec084a57e50ebdf0a5c48c2d49660ce461db650ae", - "zh:cbb5738bca019d8539432cb20b680781c3870d60a4e057ad178bc2ddc6f40e67", - "zh:ed49bf0d5875fcfb39dd739b79877ba2738bfb61c39546b02d5d0278f960da9e", + "h1:4u1kyA8Osv6H0LGarotaTHYYoLzA6pppkDe3r7WfiGk=", + "h1:5H50iSplSH5MTm3bYhus5iLK16MfXrSk7du854A+DGA=", + "h1:Bh70KRHeGuPkrJB764Xq9ikJOZmNSa8j/GehiMlHWSs=", + "h1:IZrN6ykVO4aiCjvKHwF4vKHkWpqjGNREKO2iPs4kO1w=", + "h1:VXqu52kAZEQXxly8+RoXrdpzfxlp+yJA2GBrRXrpenY=", + "h1:Vdylhj5W0M+J62bOOdvVUlmGB7M5TfaNRcThdb8ydcc=", + "h1:aDlCe/5J3dYrHZXURQxZM9mdCr29rJemJee6BdWTg94=", + "h1:hUD8zA28MYrlbtAa1Wyz9HINt0OD5PxiRF86hjHZ5HM=", + "h1:sIOsHg7I0ZS3QBR1OrFH7RHQMxo0E0udsl2Ii59O2Js=", + "h1:v5WNL753ytgJoMMZqsA4pVyRPUMipAPXHsinP9WYZ9g=", + "h1:vpOwIlkeCbbLItUkgHGgl9qDkKFWzRadXLfy5BlEraE=", + "zh:0e381bace81028596d60e253bc320bf62d00ae2ec207d7c7e70cdbec5f543334", + "zh:32c8cf70e476a4d0e0a2d4cb94b4a4e95c287c5972ca1e8c0f37dc629fbe31cb", + "zh:568ebaa4c66fc668dc14c8ff323e47fc7b2ac3b5a5d9eec612de2b6a30164f4c", + "zh:596c218810ffb85bc7224574b6ba6dbab9295bfa7490eac98c5ff88beae75710", + "zh:75a0e5b60f24684d62944714deb1c790b17c8d4acc93b5cdb45a8187d887b7f1", + "zh:7d2abea6ab66a08fed7d1ab8d4f3a8344fe7e2ac76d7409a3e40e8c066df6f22", + "zh:7f4db75991fd610b2c0306226e5e1916d4b633cdb0126bc78951dce2365b3418", + "zh:95fe307defb6e0dc172855fa597140f3da96655b3c558c140ae51a4a6077f58d", + "zh:ae07cdd3c658c0e24d45f1cfadf8b085b18981bcd72a20093ce3f042ed0adf3f", + "zh:d2a471b9e42499a7247f873aebd5cbc8df0c6691f02a5c9b556aa00045c06869", + "zh:e0299c0f6eae2b1c935f552f76fc49a2e61975eeda9410e3920a004b74d9e750", "zh:f569b65999264a9416862bca5cd2a6177d94ccb0424f3a4ef424428912b9cb3c", ] } diff --git a/terraform/infrastructure/azure/main.tf b/terraform/infrastructure/azure/main.tf index 3ba15e746..9cf067547 100644 --- a/terraform/infrastructure/azure/main.tf +++ b/terraform/infrastructure/azure/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { azurerm = { source = "hashicorp/azurerm" - version = "4.25.0" + version = "4.26.0" } random = { source = "hashicorp/random" diff --git a/terraform/infrastructure/azure/modules/load_balancer_backend/main.tf b/terraform/infrastructure/azure/modules/load_balancer_backend/main.tf index 830f7a202..c4ca0792e 100644 --- a/terraform/infrastructure/azure/modules/load_balancer_backend/main.tf +++ b/terraform/infrastructure/azure/modules/load_balancer_backend/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { azurerm = { source = "hashicorp/azurerm" - version = "4.25.0" + version = "4.26.0" } } } diff --git a/terraform/infrastructure/azure/modules/scale_set/main.tf b/terraform/infrastructure/azure/modules/scale_set/main.tf index b61b0b66c..a9bc71173 100644 --- a/terraform/infrastructure/azure/modules/scale_set/main.tf +++ b/terraform/infrastructure/azure/modules/scale_set/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { azurerm = { source = "hashicorp/azurerm" - version = "4.25.0" + version = "4.26.0" } random = { source = "hashicorp/random" diff --git a/terraform/infrastructure/gcp/.terraform.lock.hcl b/terraform/infrastructure/gcp/.terraform.lock.hcl index eb96aff3e..d0071baf0 100644 --- a/terraform/infrastructure/gcp/.terraform.lock.hcl +++ b/terraform/infrastructure/gcp/.terraform.lock.hcl @@ -2,32 +2,32 @@ # Manual edits may be lost in future updates. provider "registry.terraform.io/hashicorp/google" { - version = "6.28.0" - constraints = "6.28.0" + version = "6.29.0" + constraints = "6.29.0" hashes = [ - "h1:8FLr1ZsOobsrFAiiwGQzuqzVjBj5mYYWkMN0Y09Qjq8=", - "h1:DGPyFrIRVTigrTsVQV6r9qoiCX7OcGfieDjnk+TcXB8=", - "h1:G2D9+1cuLBLMkeOHUXHrV1WQdddkogA5q3anL0Xr2TI=", - "h1:S9knFeidlUtcNO+mhizWU9ibt6L0mSz5dgLV6TIA0m4=", - "h1:dTcCD7AJBI1mAKZODNtwtdPwfF7kqd641O+NNUS1WHw=", - "h1:dU734u/u9hk/RHDDj39246xwiczNx3esgivjOudMOs0=", - "h1:hWvkPXL2I2rd7EqvaVPisY471myaTrNiFopIjExFXfQ=", - "h1:kdykym1DNqAwgPjz4qtiNiQ4gHDrctsWvIvNDQTnQrU=", - "h1:oOYYQJYDlh7UoQx7t7y2DUsM8puXMBOJ+CWd6JaYCro=", - "h1:s/EZB00Y4Mct8G43Vp/X1BpDNGq9j7AbIPBj4icIv0A=", - "h1:v1WgDN2R+XUky0itOG0bf6E+m+w+d3Mh8tZVP/XBKnQ=", - "zh:2528b47d20d378283478feafdf16aade01d56d42c3283d7c904fd7a108f150f0", - "zh:36ef5e5b960375a166434f5836b5b957d760c34edfa256133c575e865ff4ee3c", - "zh:5fb97ca9465379dc5b965e407c5ccaa6c41fc1984214497fbf5b2bb49a585297", - "zh:78d2adcf6623f170aab3956d26d115032fecea11db4f62ee9ee76b67389546f3", - "zh:832bb0a957d4d1e664391186791af1cea14e0af878ea12d1b0ce5bb0a5dc98ef", - "zh:8c1eee42fd21b64596b72b4808595b6b1e07c3c614990e22b347c35a42360fed", - "zh:8fcb3165c29944d4465ce9db93daf2b9c816223bf6fcbd95818814525a706038", - "zh:931d05f9ba329942e6888873022e31c458048a8c2a3e42a6d1952337d2f9b240", - "zh:b78472cd5750b6d2d363c735a5e8d2a7bb98d0979ab7e42b8c5f9d17a2e5bbb6", - "zh:d203df11df368d2316894c481d34be2de9e54d1f90cec0056ef5154d06a9edc7", + "h1:2j9Sb1fQ+94t40D6IJ+w0B7+4NLz/MmRBFa+dkML3nA=", + "h1:9wdjAnNx+K1l3gOzB683Neg5CII8ME5bo2AlqrS3uWQ=", + "h1:E+nXAl8krGxH+AtEYiyNannu+Viv1aoft1U0V/ZCSso=", + "h1:GwAhWJn/McO2ZpaIGPl7s63znCT2SNt1CRiE8YlawNQ=", + "h1:NkmMp6XYTXABLcIqTgIwRUgo/DzPCCPNrVpwYeWvd1U=", + "h1:U0Ca/+zZMMuea+r80qu9SRzWu8Waxny5aWGZXn+kVhc=", + "h1:khB3X7tH8vh6aLdxCWGkZtskwD06bucR2VWfFV1rxFg=", + "h1:t0wH2/d/Y91IZ8EFXjefYhi5H7xUpjx3DPnUFch4QwM=", + "h1:t4KEm4kHO0m50ffAUCM3MHbXX9fs8/WQfnTbIDnOKrE=", + "h1:vqURFeaR56i808INF5o+IC3anxqT+13dgIr3zzTmr9s=", + "h1:z0M8BOzrrFSo2x3MeRZGchFsCAqJIHJV8dj4IOI+CK8=", + "zh:01a501df2fb9ecbf0935b27e588bc7b6bcaf4ab0043747f4229c25e4ba47dadb", + "zh:056f8ab2b73755cf5a67228ab4a07882e76265fa25b07f2794d9939288164f48", + "zh:0dbdfa564f7db8a2e6f7e76437a9850b6101450120c08e87cf9846330736c0c6", + "zh:3c3e4ee801de22812bd07cb3d36b227f8057d7825998fb4d97051764a565b89b", + "zh:4e440eb4c60da9cd7d23b3b99be54c869472fd70006c39639a04b9a51248929c", + "zh:659490efd20b3e98e4166b2925baa18549d82e4c16751bc92baed0185d22d108", + "zh:9ae24b98a3a3346b8004c6b87e3b59decba2f64c7407e106263859c275105ef8", + "zh:c64cff9c17e302236bb9e0a6d5eff4c92540ce3947269f3db94e2b9a1b1a3f4e", + "zh:d2fd0aecbbbba463bcb0640f54c8df5e7a63918bdd44236dcd36dff33bb8de09", + "zh:f022316369ea676f5f9d11768b4c621abd3304c1e6d1f0c2361e4e2620c4b65d", "zh:f569b65999264a9416862bca5cd2a6177d94ccb0424f3a4ef424428912b9cb3c", - "zh:fecb0db6ab81777a0f48d315838f911753e9c5d66e22eebd491abd83c49fde2c", + "zh:feb7d4fdbebdfabac2aaa73376f754736ccf089fa90adf6388701f89801188e6", ] } diff --git a/terraform/infrastructure/gcp/main.tf b/terraform/infrastructure/gcp/main.tf index 3a9dde574..9067e1611 100644 --- a/terraform/infrastructure/gcp/main.tf +++ b/terraform/infrastructure/gcp/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { google = { source = "hashicorp/google" - version = "6.28.0" + version = "6.29.0" } random = { diff --git a/terraform/infrastructure/gcp/modules/instance_group/main.tf b/terraform/infrastructure/gcp/modules/instance_group/main.tf index 3235b82b3..ca670d5c4 100644 --- a/terraform/infrastructure/gcp/modules/instance_group/main.tf +++ b/terraform/infrastructure/gcp/modules/instance_group/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { google = { source = "hashicorp/google" - version = "6.28.0" + version = "6.29.0" } random = { diff --git a/terraform/infrastructure/gcp/modules/internal_load_balancer/main.tf b/terraform/infrastructure/gcp/modules/internal_load_balancer/main.tf index f36781518..bda3f7b25 100644 --- a/terraform/infrastructure/gcp/modules/internal_load_balancer/main.tf +++ b/terraform/infrastructure/gcp/modules/internal_load_balancer/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { google = { source = "hashicorp/google" - version = "6.28.0" + version = "6.29.0" } } } diff --git a/terraform/infrastructure/gcp/modules/jump_host/main.tf b/terraform/infrastructure/gcp/modules/jump_host/main.tf index aae592239..12923034b 100644 --- a/terraform/infrastructure/gcp/modules/jump_host/main.tf +++ b/terraform/infrastructure/gcp/modules/jump_host/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { google = { source = "hashicorp/google" - version = "6.28.0" + version = "6.29.0" } } } diff --git a/terraform/infrastructure/gcp/modules/loadbalancer/main.tf b/terraform/infrastructure/gcp/modules/loadbalancer/main.tf index 781088fa3..462f2f335 100644 --- a/terraform/infrastructure/gcp/modules/loadbalancer/main.tf +++ b/terraform/infrastructure/gcp/modules/loadbalancer/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { google = { source = "hashicorp/google" - version = "6.28.0" + version = "6.29.0" } } } diff --git a/terraform/infrastructure/iam/aws/.terraform.lock.hcl b/terraform/infrastructure/iam/aws/.terraform.lock.hcl index 7375c12ea..cd0517d59 100644 --- a/terraform/infrastructure/iam/aws/.terraform.lock.hcl +++ b/terraform/infrastructure/iam/aws/.terraform.lock.hcl @@ -2,38 +2,38 @@ # Manual edits may be lost in future updates. provider "registry.terraform.io/hashicorp/aws" { - version = "5.93.0" - constraints = "5.93.0" + version = "5.94.1" + constraints = "5.94.1" hashes = [ - "h1:4K1FdUEbgICLEwA5k20n/nWEFwIJQXeCjUshFjJN0RU=", - "h1:6/ezzfnV1mbibGSb3Bts9rbmE/Fp8BUTYkW73lBMORM=", - "h1:8v3mNLg29p+pqnGd5P7qxINrT8NvwS3j+4PlvUyVr+U=", - "h1:BoaXR7Iba6O0PiTRmIpQFAPH9IeUIZ0f2Y+kJZwKDjI=", - "h1:Gix6sLHGKwqKg4L1V/gBa5tcjIj5UrqH4kW9AX/agl0=", - "h1:IxIllFrinmbRNRRMg2ZIpQBbpFO2plSOPMXQEjtRc5k=", - "h1:M1reAJwL5XOzznMU3LL+PEp6Ps4XUO7HjT2qPcqG7Dk=", - "h1:ODfuqpsLGW3WShNNPgImLOOXlphVs4u/fFdLkScqi8U=", - "h1:OOAfaIREMxRhe2minsNofE7gn8VDA0XQ659/Eq2hJAc=", - "h1:SbzGotY1leY5nnLo/PJOcwIlNTHdZpAErxJSrfr2tTg=", - "h1:Uz5TSid6XzojWT8BHTu2IIP2gy1utfymurqxFB0UNDk=", - "h1:oOThSM1UKrEfKT2KIjKWQF+QeA/cqqlAalKcSFlNiHs=", - "h1:u1r9qfTvAeoGAb4Rwh4nxI7w4JjFayempELiEGoHgJY=", - "h1:zcGenKa+3ZRmcHPWwXrvUx1472tpeaQntT4ShJfWMKE=", - "zh:00e1b15e6f02cdc788fe855232b63ccce6652930080eac3ba4b8a2e35db02b23", - "zh:3a77ee12e4f5ab2e7b320a0f507389c9171ab82c50d39ae7caa5a1fb2bd95cb3", - "zh:3e32d58e139d098d867eef37914fef01fffb08504d828e0f384c2ffc18d71f80", - "zh:41cf69a525f0fbe0fdb71d26be7ff5e20bb90ccdf5af32c83ed53f0ca2f071b5", - "zh:43055bdd0786855cf7242638a74b579f74f4f1a8e7c7e5e0e50230c8f6b908cb", - "zh:4ac4c29aa0de842ad91145c5a5fba21338531ffca13a510927d445e007a24938", - "zh:57e510498b3aeb6d6155c10fa195e1d5502e763899251057e59e73f653d1e262", - "zh:8f749645b27dba1a07d06aaf9d5596fc4213123f12f3808d68539e78ab16996e", + "h1:/BQk0OxJ3bsdISapaAe+AKeEH/ZUr1BBZo41qUvJ81c=", + "h1:CwOiakQRR4e5jO4vE1p2GjfsfO0XiR2uh1qvcSyi51w=", + "h1:QpZ6MYiJqSlB6zA7YnnAAXKeImVduxxiBkJe+NCsWkQ=", + "h1:WlF6NHa5yRgvbDWx6x+/sWwAJdi4Pefo/hN8m7/FK2M=", + "h1:dYdnGlaCJONFyGk/t3Y4iJzQ8EiJr2DaDdZ/2JV5PZU=", + "h1:dmSoVB6wlQ8H2VOc6CMs/d0VbEtkyGJ21qROaXkrdSg=", + "h1:eqxPYFl9Gl+iutDyYTZKteN5v0YFDzDI7eyfoIwh/3U=", + "h1:flqrGxt30tS2dKz1ebDVb4R9KETEj7hIw4q4apnVl4s=", + "h1:i8BJ9vzsFh23FZ5BXmziCCnnXt7TIVCnVhLbvQVhHKs=", + "h1:nJV7laVkjYOSlL4MYAi7m567QgCp7I3e3SLwB5dGHPY=", + "h1:oBzQAl63ITG9mOt8qGI1WmdBo5iIwIBsnzLXttXZe14=", + "h1:pm3uoaQYHaavwE83zsEzAFn/LKD1EWGiYRfzVxNCaIA=", + "h1:tUooQrvUBOca6k+8CDZHB/8mwSq6BDlCiLwR9FyiEHA=", + "h1:zRdb9dsuAP9K4Qjj9CkaNxO39L2DErawTpkMKWgxRyQ=", + "zh:14fb41e50219660d5f02b977e6f786d8ce78766cce8c2f6b8131411b087ae945", + "zh:3bc5d12acd5e1a5f1cf78a7f05d0d63f988b57485e7d20c47e80a0b723a99d26", + "zh:4835e49377f80a37c6191a092f636e227a9f086e3cc3f0c9e1b554da8793cfe8", + "zh:605971275adae25096dca30a94e29931039133c667c1d9b38778a09594312964", + "zh:8ae46b4a9a67815facf59da0c56d74ef71bcc77ae79e8bfbac504fa43f267f8e", + "zh:913f3f371c3e6d1f040d6284406204b049977c13cb75aae71edb0ef8361da7dd", + "zh:91f85ae8c73932547ad7139ce0b047a6a7c7be2fd944e51db13231cc80ce6d8e", + "zh:96352ae4323ce137903b9fe879941f894a3ce9ef30df1018a0f29f285a448793", "zh:9b12af85486a96aedd8d7984b0ff811a4b42e3d88dad1a3fb4c0b580d04fa425", - "zh:aaca5934ac6273d48922ad7685c5fc2aa7ef5275346a9e70366b7a180a788d41", - "zh:b7585b720a97467302f2e29f0688a5a746778f7b73c30eb085c25831decba1e1", - "zh:c16ae0a46d796858c49a89dd90e5ca92f793e646474fadeafaf701def4a4aa83", - "zh:d66bdc9cd5108452d9dba44082e504ff5e3a3001c8f853bbcaff850cb2127a21", - "zh:ee1aec6c44b117a6c8b7159ee7dc82f1ddac6ba434b4e6c493717738326f0a99", - "zh:f0da48692e00ecacea72d7104714d9721f6be40ba094490c442bb3e68d2e2604", + "zh:9b51922c9201b1dc3d05b39f9972715db5f67297deee088793d02dea1832564b", + "zh:a689e82112aa71e15647b06502d5b585980cd9002c3cc8458f092e8c8a667696", + "zh:c3723fa3e6aff3c1cc0088bdcb1edee168fe60020f2f77161d135bf473f45ab2", + "zh:d6a2052b864dd394b01ad1bae32d0a7d257940ee47908d02df7fa7873981d619", + "zh:dda4c9c0406cc54ad8ee4f19173a32de7c6e73abb5a948ea0f342d567df26a1d", + "zh:f42e0fe592b97cbdf70612f0fbe2bab851835e2d1aaf8cbb87c3ab0f2c96bb27", ] } diff --git a/terraform/infrastructure/iam/aws/main.tf b/terraform/infrastructure/iam/aws/main.tf index af4c45c13..945f01a00 100644 --- a/terraform/infrastructure/iam/aws/main.tf +++ b/terraform/infrastructure/iam/aws/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { aws = { source = "hashicorp/aws" - version = "5.93.0" + version = "5.94.1" } random = { source = "hashicorp/random" diff --git a/terraform/infrastructure/iam/azure/.terraform.lock.hcl b/terraform/infrastructure/iam/azure/.terraform.lock.hcl index 7de49d782..700ad74d5 100644 --- a/terraform/infrastructure/iam/azure/.terraform.lock.hcl +++ b/terraform/infrastructure/iam/azure/.terraform.lock.hcl @@ -2,61 +2,61 @@ # Manual edits may be lost in future updates. provider "registry.terraform.io/hashicorp/azuread" { - version = "3.2.0" - constraints = "3.2.0" + version = "3.3.0" + constraints = "3.3.0" hashes = [ - "h1:35w1gIXyoEkMb2iBNOpI0gJPkQlReEBfaNTEJo3BACI=", - "h1:DciAAiQWGJK0FR+2Qe/O/NwukMs6nLtVqv19BQY6hU4=", - "h1:F/l/I8q+C2bjxSqbXbM3tPCAkhi1IiJp65wV8x00HZE=", - "h1:Lc2vU3wSiGOqdXy91GUE+wyVgFnb123cAv0AX+QOzL4=", - "h1:NwTNmg71vw2qmJEh7UQLoSXdY8YJR/IQVVo3jXYusL8=", - "h1:jA5FZRPbN4CCB5gkMs/kQayEnkxIC/QfsDErnxsQDhI=", - "h1:kl1+Y4vo0TyT5UTmtjtdLu+tJrLgrWjM/aw9dAtiquY=", - "h1:oDAibUp9yw303PSvQErfo+J6UIKNYw5mXDWhfD/69O4=", - "h1:sY7AJiMpXjIkoXGHbh/4PUxW+4xZNHUwdonCS/Sjzv0=", - "h1:u/P26g3e4j5QM2i6VkYLFbmMhHlj76kvGfhJQ23BT9Q=", - "h1:wvXGU1TWdZFvPy6fJTjJEDwRe13a496hZouLsUkt5po=", - "zh:063897b38fd6231577c21a751ccd955716bca0e3abcf800a90dd1dd50fb24875", - "zh:19704c38c0cf229dc663e36a3ea53649780b7b5ec3953febbc95d7cb5e1cde27", + "h1:/wmoU/Z8L3uRe8+VNCSpEosDSawIRW6maw8a+dvyY1M=", + "h1:0YbXRJRN1x5O4gunTzqArmGzNvhwOd1LFMPv1absUx4=", + "h1:0w7nznGwAYU1QK8bBRbL+/gG6Fsd4ed4DsJCM7iz6YQ=", + "h1:7b5PAtdKnfmIZ8RpzcmM92BXuwfn/tEbdfqkt2IBScE=", + "h1:8hJQ0UGYYl799mdFm5HOhVPw3CsZCOg7ZWg4jXW8Ye4=", + "h1:Ad7fZUA3pJkgJ4d37JN3MWChgtTUpO8Deil56hNv3ro=", + "h1:CmjUkS5xnsVJ6QHzooWNYg2iowb++EcGIWSCoMiUlbM=", + "h1:IrIdxafjoENorektWrxmz9jx8uzH0OrGdUtt7vvHbJk=", + "h1:bX9NNrxI01bzrr+6tLaO8dGFtVjj+mANKVnplitfOyA=", + "h1:t05I6gITCFA5DV+2k/iomK/Me80bGXq/v58AbjOM8PY=", + "h1:tBMyj2ufCNi1ljs4kdm9K1VF32R7k5cLj/JkLs343Qw=", "zh:1c3e89cf19118fc07d7b04257251fc9897e722c16e0a0df7b07fcd261f8c12e7", - "zh:463c9351c86d161b6c81efd3109d45acec45f4269bf0180a589073eb5ab6b3e1", - "zh:54a1962e9f998f3725d801274fb8e0a1a6ad194e50f599d586aca265ed193934", - "zh:64fafb076204728168a3c369b9412a0c58ee44ac3175d79611626725e812e73a", - "zh:7283c00ca13c7e1a5d2976884a314daed6dea7e5e99e33d8f99eda28b277c12a", - "zh:95a564a55d2ed8cac1299577f7b1671e0f9d13c0429f5e321deabadb0740efed", - "zh:a325b5c5ea1a8188ad51c4d3ffea76362895bc4749c613e2ec5ac807b3ede902", - "zh:b3d58bb47fdb747734fdefef8bb7d08ae45fd8634792d839043ae326f333b33e", - "zh:da1b6043e5615f767b9685ab4cfdffc04e1b5ca808c7c004d83bac75cbc8f465", - "zh:fd5eb49039b7787a1133cbb9f2ba6b0183de10e7ba95aaaaebdee7b50e40c6d9", + "zh:2cb6dcfa5a3fd04f14b1976455b73f14a15f9f45069fa5fa198f87625df5751a", + "zh:3de1c29f4eb1a176a7f3039a470f26281228f9527a81ebedb86820dd9d5b0007", + "zh:498ef951e158caf10365b39cd95789f5a034c3ef6fca288b37520af0cc2f81e5", + "zh:7b8c8bda91a2b28b9371ac60c2c87a3967d0ca232ab868203062599fca4c832f", + "zh:9b109748e2ccad027d710548491bc8cc0399b69a9b779ac59d53745a95129e3a", + "zh:9d38831a614f67e09ca4bf2377a06e6dda9130a60437f4d73aa422d982b9f17f", + "zh:b6fa6920334e7495118784d15500d676fda4e9c924a03fb5e333faf6646fd15f", + "zh:c01171e3c1b1a6bcc9516f5fc44e4880c67a30541ae66ecf18d3aa0eb92457ad", + "zh:cd3bda1e87953a5288808a10ca9383baa14b4dee623e21a43048f95179bf0323", + "zh:df06f222c38fc37a074e00650e7699927b11a64b1f4170bfa7d823029662a778", + "zh:df502d004558a92808450fc9a7b6f17700d918e3037d21cba73d61e56466e785", ] } provider "registry.terraform.io/hashicorp/azurerm" { - version = "4.25.0" - constraints = "4.25.0" + version = "4.26.0" + constraints = "4.26.0" hashes = [ - "h1:0ngEPvgsbXdQ6feo/6WqVkxDj1zsDx2jdsB2bl+R1Rg=", - "h1:3ZxcyUNfYBb49d6tw584RWmYbYozgqueZLHaJi9BLDA=", - "h1:6dUCvh+kYsKRVeqIEtcVdMgInojZqVV86R7DHkVXHq4=", - "h1:F0sulaJhPHnLbwWcKlsXP7DDAVQi9+93fFxjEoZQaKo=", - "h1:RvLXu5xam1B4u5TWEPdvKIc2lLNUekACXxl3OnplvLw=", - "h1:SG57DX+kbbsSlLr1y9Z/n/2F57aPlzSBi9tP+Y4ltD4=", - "h1:UMRdLJ+HHUIxHYrbguIJrsRUN3xGrf92Q53UGZi3fM4=", - "h1:fKYoZJBpyKMkoN46eGto3qG+IvD/SP2cjTD4AxGxJxg=", - "h1:kTMYggdpy3ozYocnK7SI6217nh8FAJQEVP8+93nVjEs=", - "h1:r3wbLuv+ZOTFgYna274nvJD41bUBrIEq3XrvzeZar5c=", - "h1:xNXSfbZ3U4IIYp9ttN+uDQqptNM7Ynk19283z0+2pww=", - "zh:05e9243872f174ec7e7bd58c92b986464d516d9281e28e6abe4b57fa9fd58b3c", - "zh:1b124540c947410e9334e64912bce4e3b5b164ae7734927fb093178081e67011", - "zh:2daaeadd33305a1e700682a1d369d52b1376c64a44e680c2fccdc3e58cd86edb", - "zh:3767cfeeaae01a5c263d863d1c8b58eca9a4fa8ada8dbdf41222d1b143694065", - "zh:3c69f63583468366fb641f606c23a269fd04b6f1603e06c20568ffc28e6581bd", - "zh:7b3afd2827ed6def9ce46dcb9ce8603db493606d1d2b50da9c09f8ef44b2545c", - "zh:8d37210d2a738c755da60dbdf26f6cb2d719ce8711aeea838bc961257d921e0e", - "zh:9096e89a61d1d04123075a4ef429fb52d2d22b9786f82c1d52db172c9a67e563", - "zh:9fcf345164043fd8147b5f8ec084a57e50ebdf0a5c48c2d49660ce461db650ae", - "zh:cbb5738bca019d8539432cb20b680781c3870d60a4e057ad178bc2ddc6f40e67", - "zh:ed49bf0d5875fcfb39dd739b79877ba2738bfb61c39546b02d5d0278f960da9e", + "h1:4u1kyA8Osv6H0LGarotaTHYYoLzA6pppkDe3r7WfiGk=", + "h1:5H50iSplSH5MTm3bYhus5iLK16MfXrSk7du854A+DGA=", + "h1:Bh70KRHeGuPkrJB764Xq9ikJOZmNSa8j/GehiMlHWSs=", + "h1:IZrN6ykVO4aiCjvKHwF4vKHkWpqjGNREKO2iPs4kO1w=", + "h1:VXqu52kAZEQXxly8+RoXrdpzfxlp+yJA2GBrRXrpenY=", + "h1:Vdylhj5W0M+J62bOOdvVUlmGB7M5TfaNRcThdb8ydcc=", + "h1:aDlCe/5J3dYrHZXURQxZM9mdCr29rJemJee6BdWTg94=", + "h1:hUD8zA28MYrlbtAa1Wyz9HINt0OD5PxiRF86hjHZ5HM=", + "h1:sIOsHg7I0ZS3QBR1OrFH7RHQMxo0E0udsl2Ii59O2Js=", + "h1:v5WNL753ytgJoMMZqsA4pVyRPUMipAPXHsinP9WYZ9g=", + "h1:vpOwIlkeCbbLItUkgHGgl9qDkKFWzRadXLfy5BlEraE=", + "zh:0e381bace81028596d60e253bc320bf62d00ae2ec207d7c7e70cdbec5f543334", + "zh:32c8cf70e476a4d0e0a2d4cb94b4a4e95c287c5972ca1e8c0f37dc629fbe31cb", + "zh:568ebaa4c66fc668dc14c8ff323e47fc7b2ac3b5a5d9eec612de2b6a30164f4c", + "zh:596c218810ffb85bc7224574b6ba6dbab9295bfa7490eac98c5ff88beae75710", + "zh:75a0e5b60f24684d62944714deb1c790b17c8d4acc93b5cdb45a8187d887b7f1", + "zh:7d2abea6ab66a08fed7d1ab8d4f3a8344fe7e2ac76d7409a3e40e8c066df6f22", + "zh:7f4db75991fd610b2c0306226e5e1916d4b633cdb0126bc78951dce2365b3418", + "zh:95fe307defb6e0dc172855fa597140f3da96655b3c558c140ae51a4a6077f58d", + "zh:ae07cdd3c658c0e24d45f1cfadf8b085b18981bcd72a20093ce3f042ed0adf3f", + "zh:d2a471b9e42499a7247f873aebd5cbc8df0c6691f02a5c9b556aa00045c06869", + "zh:e0299c0f6eae2b1c935f552f76fc49a2e61975eeda9410e3920a004b74d9e750", "zh:f569b65999264a9416862bca5cd2a6177d94ccb0424f3a4ef424428912b9cb3c", ] } diff --git a/terraform/infrastructure/iam/azure/main.tf b/terraform/infrastructure/iam/azure/main.tf index 8b18aa5da..ecd6a448f 100644 --- a/terraform/infrastructure/iam/azure/main.tf +++ b/terraform/infrastructure/iam/azure/main.tf @@ -2,11 +2,11 @@ terraform { required_providers { azurerm = { source = "hashicorp/azurerm" - version = "4.25.0" + version = "4.26.0" } azuread = { source = "hashicorp/azuread" - version = "3.2.0" + version = "3.3.0" } } } diff --git a/terraform/infrastructure/iam/gcp/.terraform.lock.hcl b/terraform/infrastructure/iam/gcp/.terraform.lock.hcl index 532c950c8..4753737a4 100644 --- a/terraform/infrastructure/iam/gcp/.terraform.lock.hcl +++ b/terraform/infrastructure/iam/gcp/.terraform.lock.hcl @@ -2,32 +2,32 @@ # Manual edits may be lost in future updates. provider "registry.terraform.io/hashicorp/google" { - version = "6.28.0" - constraints = "6.28.0" + version = "6.29.0" + constraints = "6.29.0" hashes = [ - "h1:8FLr1ZsOobsrFAiiwGQzuqzVjBj5mYYWkMN0Y09Qjq8=", - "h1:DGPyFrIRVTigrTsVQV6r9qoiCX7OcGfieDjnk+TcXB8=", - "h1:G2D9+1cuLBLMkeOHUXHrV1WQdddkogA5q3anL0Xr2TI=", - "h1:S9knFeidlUtcNO+mhizWU9ibt6L0mSz5dgLV6TIA0m4=", - "h1:dTcCD7AJBI1mAKZODNtwtdPwfF7kqd641O+NNUS1WHw=", - "h1:dU734u/u9hk/RHDDj39246xwiczNx3esgivjOudMOs0=", - "h1:hWvkPXL2I2rd7EqvaVPisY471myaTrNiFopIjExFXfQ=", - "h1:kdykym1DNqAwgPjz4qtiNiQ4gHDrctsWvIvNDQTnQrU=", - "h1:oOYYQJYDlh7UoQx7t7y2DUsM8puXMBOJ+CWd6JaYCro=", - "h1:s/EZB00Y4Mct8G43Vp/X1BpDNGq9j7AbIPBj4icIv0A=", - "h1:v1WgDN2R+XUky0itOG0bf6E+m+w+d3Mh8tZVP/XBKnQ=", - "zh:2528b47d20d378283478feafdf16aade01d56d42c3283d7c904fd7a108f150f0", - "zh:36ef5e5b960375a166434f5836b5b957d760c34edfa256133c575e865ff4ee3c", - "zh:5fb97ca9465379dc5b965e407c5ccaa6c41fc1984214497fbf5b2bb49a585297", - "zh:78d2adcf6623f170aab3956d26d115032fecea11db4f62ee9ee76b67389546f3", - "zh:832bb0a957d4d1e664391186791af1cea14e0af878ea12d1b0ce5bb0a5dc98ef", - "zh:8c1eee42fd21b64596b72b4808595b6b1e07c3c614990e22b347c35a42360fed", - "zh:8fcb3165c29944d4465ce9db93daf2b9c816223bf6fcbd95818814525a706038", - "zh:931d05f9ba329942e6888873022e31c458048a8c2a3e42a6d1952337d2f9b240", - "zh:b78472cd5750b6d2d363c735a5e8d2a7bb98d0979ab7e42b8c5f9d17a2e5bbb6", - "zh:d203df11df368d2316894c481d34be2de9e54d1f90cec0056ef5154d06a9edc7", + "h1:2j9Sb1fQ+94t40D6IJ+w0B7+4NLz/MmRBFa+dkML3nA=", + "h1:9wdjAnNx+K1l3gOzB683Neg5CII8ME5bo2AlqrS3uWQ=", + "h1:E+nXAl8krGxH+AtEYiyNannu+Viv1aoft1U0V/ZCSso=", + "h1:GwAhWJn/McO2ZpaIGPl7s63znCT2SNt1CRiE8YlawNQ=", + "h1:NkmMp6XYTXABLcIqTgIwRUgo/DzPCCPNrVpwYeWvd1U=", + "h1:U0Ca/+zZMMuea+r80qu9SRzWu8Waxny5aWGZXn+kVhc=", + "h1:khB3X7tH8vh6aLdxCWGkZtskwD06bucR2VWfFV1rxFg=", + "h1:t0wH2/d/Y91IZ8EFXjefYhi5H7xUpjx3DPnUFch4QwM=", + "h1:t4KEm4kHO0m50ffAUCM3MHbXX9fs8/WQfnTbIDnOKrE=", + "h1:vqURFeaR56i808INF5o+IC3anxqT+13dgIr3zzTmr9s=", + "h1:z0M8BOzrrFSo2x3MeRZGchFsCAqJIHJV8dj4IOI+CK8=", + "zh:01a501df2fb9ecbf0935b27e588bc7b6bcaf4ab0043747f4229c25e4ba47dadb", + "zh:056f8ab2b73755cf5a67228ab4a07882e76265fa25b07f2794d9939288164f48", + "zh:0dbdfa564f7db8a2e6f7e76437a9850b6101450120c08e87cf9846330736c0c6", + "zh:3c3e4ee801de22812bd07cb3d36b227f8057d7825998fb4d97051764a565b89b", + "zh:4e440eb4c60da9cd7d23b3b99be54c869472fd70006c39639a04b9a51248929c", + "zh:659490efd20b3e98e4166b2925baa18549d82e4c16751bc92baed0185d22d108", + "zh:9ae24b98a3a3346b8004c6b87e3b59decba2f64c7407e106263859c275105ef8", + "zh:c64cff9c17e302236bb9e0a6d5eff4c92540ce3947269f3db94e2b9a1b1a3f4e", + "zh:d2fd0aecbbbba463bcb0640f54c8df5e7a63918bdd44236dcd36dff33bb8de09", + "zh:f022316369ea676f5f9d11768b4c621abd3304c1e6d1f0c2361e4e2620c4b65d", "zh:f569b65999264a9416862bca5cd2a6177d94ccb0424f3a4ef424428912b9cb3c", - "zh:fecb0db6ab81777a0f48d315838f911753e9c5d66e22eebd491abd83c49fde2c", + "zh:feb7d4fdbebdfabac2aaa73376f754736ccf089fa90adf6388701f89801188e6", ] } diff --git a/terraform/infrastructure/iam/gcp/main.tf b/terraform/infrastructure/iam/gcp/main.tf index f85c92b62..2aaca1f08 100644 --- a/terraform/infrastructure/iam/gcp/main.tf +++ b/terraform/infrastructure/iam/gcp/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { google = { source = "hashicorp/google" - version = "6.28.0" + version = "6.29.0" } } } diff --git a/terraform/infrastructure/openstack/.terraform.lock.hcl b/terraform/infrastructure/openstack/.terraform.lock.hcl index 3e97fb6a6..5a350813d 100644 --- a/terraform/infrastructure/openstack/.terraform.lock.hcl +++ b/terraform/infrastructure/openstack/.terraform.lock.hcl @@ -26,38 +26,38 @@ provider "registry.terraform.io/hashicorp/random" { } provider "registry.terraform.io/stackitcloud/stackit" { - version = "0.47.0" - constraints = "0.47.0" + version = "0.49.0" + constraints = "0.49.0" hashes = [ - "h1:+cKr3G+gi+pFKEpFVlvOaXwnWKBzTV9Bi0UixBzww9k=", - "h1:+fHFWKJf+knfbisZiTgtiZi9CRGzC/Lu5HGkmcMP7XE=", - "h1:/XS26Hk7bbkzTR2uG+dh/QQKhauFyRpuzpmHyY8zrjA=", - "h1:1KPUd8qbrdP+eY86R/vbDJJDPkYKLUIUPeqHjbn3xo8=", - "h1:8/nJFwePAR79D9Kj3YoGXgpRvo604LzgWpvncP6knuE=", - "h1:ByfFdkFHqzplso2+AbW3N83t4Ebgc7S1IB4t9ti4i5I=", - "h1:FXs2h1UoxkzTDPrQIeFxzmDgf1Ir1xK1GoLN2RvugdU=", - "h1:HjELOengNwXYM3K/Rk4oDTymmuC3t/I1I/0mZ7oG9sk=", - "h1:PQNUx7ZwQapOquh0bLa7r4HCqjcS84vTXe5bnliHKPY=", - "h1:iSicwqvx7QvGdM91OV1Sb8XkC22LzTOgIaduAWL0Ofo=", - "h1:icStaeN3GR75mpJrYiAgF6qgni79dUX2t5Pt+b6brmk=", - "h1:lCDze2ajl55ROR0XFw6jPN8Z+AASWJdOJ9sExo9XaTg=", - "h1:nnppmOpaX8vKk5vd0nDS5Q0IE4+giurP+F7+ti0nJco=", - "h1:yGwWjdraf5Gr77lreJs2eld8P0RegnJ7cEmEXCQs9tY=", + "h1:/s7eJQ2kwEhS4JrTVoig4BF+9M1ZU4etBP4MQevv5mo=", + "h1:5m1Q6Ik4BQOmmXRboxAWnyUoiU/44AQqx1o8mYNG4Tc=", + "h1:6WK69n5NcE/8wL64PY4ruuS6Rc0vGW/Vw2321W37nWY=", + "h1:9AzHxIXcoqJpdo5ZNUrUNYbgUrtZ5e25IAtX9sELu64=", + "h1:LjK6VuFY0KkqIr8WYprixTUbSvSCUdhCksr/1a3O7lE=", + "h1:XP/frfawbZEWXogeWYVcwPSV8bgiVKvpxXfD2mIP/g8=", + "h1:cPTeaaafAwwRJ71rx2VcJXKuJjQvpm5xmvQ+UOw8VU8=", + "h1:eBVz6TwhCFY7MyF6vN/sJz2nad34frDSyxfB5IjCjWc=", + "h1:etIxS6rIk0Q6me1wSoKVCgISsBgqQp2RDg+Twx6CKy4=", + "h1:ijPAUB1QoRTg8NqLhOvJbj//0K/ws0P5ohDZa9dW/zA=", + "h1:l80vMcTSgpeJMpfzTTp6uk44ETgF4qJhx/v5TxjXu/k=", + "h1:l9nUked91YVufzQZKYBJ3Y/VvXn2dvKQH3W7o7VLtR4=", + "h1:lo6TN1J+eRJPclLsB/y2smBJH5Qcxa5/Dlr8lKpQFxw=", + "h1:nFNlbrQJeZSYlpTX/dhFCaFzWPA5Ibrowzjy4MaxyC0=", + "zh:06c69806e42c59f37cfa3509c2f421a1918432fcb73ca02f9660e1850b08ac88", + "zh:0cb122d4ae2ad6f5eac213eae3892ad7200b06e1ceacbfab358596e6184dc6b4", "zh:0dde99e7b343fa01f8eefc378171fb8621bedb20f59157d6cc8e3d46c738105f", - "zh:1813b57d07c5301fe7acd2ac74c032eb8437d1855fc6d076e2d198dcb53f093f", - "zh:1d6cfef67c5ee1f571db294219aa3aa1fa8159716b61a816b019fed150e8ce8c", - "zh:2051158758a179d82c8c448903ac5429173d3c2740b0e020b1c79bc8c4da8348", - "zh:5a06b5a877388eeb217e1683714fd219ab80a61322ea990989e548fd5fb61d19", - "zh:6b9d367d52bf5c67d65e4ab5db59b74cebf6aab960d4dd674b848ab07260d376", - "zh:7ca6862cda9986b6879b8f7b1991fd6e704dc1e34290f8b40e3a6d1688e78c32", - "zh:83ac62268fdd7e139774f1f379df07d55a19a14a3eedd516b0b1877087adedb4", - "zh:87ffe33e157394650310979bd041294781b84b202d2fffbe49246cf886b77279", - "zh:9e18e0b5cd905d4a6dd8fd176a450a92eaf618866394ef7463a8b8643666ca7c", - "zh:a3cca93d8406359d4eab1ac8e02ad2ddf2cabfe3753e44f710244a87ab2d7826", - "zh:a6ae6ca5372bd36dfd30bdfbfbf6906f8d40875fdc502867d8bea9536540b0f9", - "zh:a7a5697016e5d76c5a1fccdd5d9b6bd26593cdcbd972c6386f11476f4adc6fed", - "zh:b51086beac083f989098df8eab0930f4146e829e23afa7f28ba3360ad8369dc4", - "zh:d11ccef52dd3fbb07379169f29c2ea9c099d92b840152ba7e935108196f3e86b", + "zh:227540ecef8bd0c4bae0b858774919449a64cd07741a2fc8f5a14b869593ceae", + "zh:2949164716a61f98afcf4539c5b32b0f0c2a334b55ac56d4f8a168badd0aa564", + "zh:339ff27ee01b8336184f30a29982cdfe032ebb068e1edbc861a565992c665573", + "zh:37896bbd2269426530c4c5e1b82ba20b098636e8884019e23b155d548d074be7", + "zh:969c2c2fe89db496a34d58b9f07e736804cb6dfa94432bef70b663a5f5c62e54", + "zh:ab164d1d4db8cf692862825566c1e644b6762ae4c2109becd3d348140b840f03", + "zh:ad7d12a8ffa02e6081a349e7edb0c46d84d00541f118d86066efccbe02ac3d59", + "zh:ae1362a0ac1cc816be5fc7c3ed4bbc4ee210d27df30026ceb5ecfe7bd610706f", + "zh:b62796fc8c4182242257ef206e5f2f06bb5c2d02c1f87cffec4508c98aa63cea", + "zh:d28bd026adba37dbb2ed2554cb1bf69da49cf48d4d1e2938353d0323cfb0bdf2", + "zh:dbfbf093716bda804294ced9f7132cac316638a2ae84aaaa959fc60a61bf8b67", + "zh:f2322da7d892b0e12ea5c8871b5bfcfb7b259ad96a63124a680111139428ec94", ] } diff --git a/terraform/infrastructure/openstack/main.tf b/terraform/infrastructure/openstack/main.tf index aae314990..e3688d9ce 100644 --- a/terraform/infrastructure/openstack/main.tf +++ b/terraform/infrastructure/openstack/main.tf @@ -7,7 +7,7 @@ terraform { stackit = { source = "stackitcloud/stackit" - version = "0.47.0" + version = "0.49.0" } random = { diff --git a/terraform/infrastructure/openstack/modules/stackit_loadbalancer/main.tf b/terraform/infrastructure/openstack/modules/stackit_loadbalancer/main.tf index 49e638b27..058614a1b 100644 --- a/terraform/infrastructure/openstack/modules/stackit_loadbalancer/main.tf +++ b/terraform/infrastructure/openstack/modules/stackit_loadbalancer/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { stackit = { source = "stackitcloud/stackit" - version = "0.47.0" + version = "0.49.0" } } } From 4db767d89acb83b270d6a78d8f7fe4fd196158c2 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 10 Apr 2025 12:05:03 +0200 Subject: [PATCH 211/311] deps: update Constellation containers (#3752) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- bazel/toolchains/container_images.bzl | 2 +- internal/versions/versions.go | 2 +- s3proxy/deploy/s3proxy/values.yaml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/bazel/toolchains/container_images.bzl b/bazel/toolchains/container_images.bzl index eedd9279a..f73b2f769 100644 --- a/bazel/toolchains/container_images.bzl +++ b/bazel/toolchains/container_images.bzl @@ -16,6 +16,6 @@ def containter_image_deps(): ) oci_pull( name = "libvirtd_base", - digest = "sha256:48ba2401ea66490ca1997b9d3e72b4bef7557ffbcdb1c95651fb3308f32fda58", + digest = "sha256:10bc5281807d06e333f363dd27ccc8159884d706a6d738d6f54a925c483bdce3", image = "ghcr.io/edgelesssys/constellation/libvirtd-base", ) diff --git a/internal/versions/versions.go b/internal/versions/versions.go index 00ec517d0..c414e3cb2 100644 --- a/internal/versions/versions.go +++ b/internal/versions/versions.go @@ -169,7 +169,7 @@ const ( // GcpGuestImage image for GCP guest agent. // Check for new versions at https://github.com/GoogleCloudPlatform/guest-agent/releases and update in /.github/workflows/build-gcp-guest-agent.yml. - GcpGuestImage = "ghcr.io/edgelesssys/gcp-guest-agent:v20250331.0.0@sha256:25275c58c5c1719e4eb371f79eda65203122c7cfd232cd4cdf521afafeaad15e" // renovate:container + GcpGuestImage = "ghcr.io/edgelesssys/gcp-guest-agent:v20250331.0.0@sha256:89bf155b7ae723bcdcde604e0aa0f5aa98b549c86026504f140755d01a44bc07" // renovate:container // NodeMaintenanceOperatorImage is the image for the node maintenance operator. NodeMaintenanceOperatorImage = "quay.io/medik8s/node-maintenance-operator:v0.17.0@sha256:bf1c5758b3d266dd6234422d156c67ffdd47f50f70ce17d5cef1de6065030337" // renovate:container // LogstashImage is the container image of logstash, used for log collection by debugd. diff --git a/s3proxy/deploy/s3proxy/values.yaml b/s3proxy/deploy/s3proxy/values.yaml index 31a45843a..7beedbbd7 100644 --- a/s3proxy/deploy/s3proxy/values.yaml +++ b/s3proxy/deploy/s3proxy/values.yaml @@ -3,7 +3,7 @@ awsAccessKeyID: "replaceme" awsSecretAccessKey: "replaceme" # Pod image to deploy. -image: "ghcr.io/edgelesssys/constellation/s3proxy:v2.23.0-pre.0.20250403094712-ba0865706e51" +image: "ghcr.io/edgelesssys/constellation/s3proxy:v2.23.0-pre.0.20250409150110-8e6c93474149" # Control if multipart uploads are blocked. allowMultipart: false From 620b4c7da401df17d63d74c0322fadb4d955b241 Mon Sep 17 00:00:00 2001 From: Moritz Sanft <58110325+msanft@users.noreply.github.com> Date: Thu, 10 Apr 2025 14:53:00 +0200 Subject: [PATCH 212/311] terraform: rename deprecated field for STACKIT (#3753) --- terraform/infrastructure/openstack/main.tf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/terraform/infrastructure/openstack/main.tf b/terraform/infrastructure/openstack/main.tf index e3688d9ce..3e6f733e1 100644 --- a/terraform/infrastructure/openstack/main.tf +++ b/terraform/infrastructure/openstack/main.tf @@ -22,7 +22,7 @@ provider "openstack" { } provider "stackit" { - region = "eu01" + default_region = "eu01" } From 9efaf7efe1a61804389940e5680ab5012e4484cc Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 11 Apr 2025 08:40:04 +0200 Subject: [PATCH 213/311] deps: update module helm.sh/helm/v3 to v3.17.3 [SECURITY] (#3754) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 2146205fa..4e64852ef 100644 --- a/go.mod +++ b/go.mod @@ -126,7 +126,7 @@ require ( google.golang.org/grpc v1.71.1 google.golang.org/protobuf v1.36.6 gopkg.in/yaml.v3 v3.0.1 - helm.sh/helm/v3 v3.17.2 + helm.sh/helm/v3 v3.17.3 k8s.io/api v0.32.3 k8s.io/apiextensions-apiserver v0.32.3 k8s.io/apimachinery v0.32.3 diff --git a/go.sum b/go.sum index dd31804f2..1f2bf87bc 100644 --- a/go.sum +++ b/go.sum @@ -1044,8 +1044,8 @@ gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gotest.tools/v3 v3.4.0 h1:ZazjZUfuVeZGLAmlKKuyv3IKP5orXcwtOwDQH6YVr6o= gotest.tools/v3 v3.4.0/go.mod h1:CtbdzLSsqVhDgMtKsx03ird5YTGB3ar27v0u/yKBW5g= -helm.sh/helm/v3 v3.17.2 h1:agYQ5ew2jq5vdx2K7q5W44KyKQrnSubUMCQsjkiv3/o= -helm.sh/helm/v3 v3.17.2/go.mod h1:+uJKMH/UiMzZQOALR3XUf3BLIoczI2RKKD6bMhPh4G8= +helm.sh/helm/v3 v3.17.3 h1:3n5rW3D0ArjFl0p4/oWO8IbY/HKaNNwJtOQFdH2AZHg= +helm.sh/helm/v3 v3.17.3/go.mod h1:+uJKMH/UiMzZQOALR3XUf3BLIoczI2RKKD6bMhPh4G8= k8s.io/api v0.32.3 h1:Hw7KqxRusq+6QSplE3NYG4MBxZw1BZnq4aP4cJVINls= k8s.io/api v0.32.3/go.mod h1:2wEDTXADtm/HA7CCMD8D8bK4yuBUptzaRhYcYEEYA3k= k8s.io/apiextensions-apiserver v0.32.3 h1:4D8vy+9GWerlErCwVIbcQjsWunF9SUGNu7O7hiQTyPY= From 97a313ae0da60e07f464ddc68ee0342e5fa7e358 Mon Sep 17 00:00:00 2001 From: edgelessci <71088502+edgelessci@users.noreply.github.com> Date: Fri, 11 Apr 2025 09:12:48 +0200 Subject: [PATCH 214/311] image: update measurements and image version (#3755) Co-authored-by: edgelessci --- .../measurements/measurements_enterprise.go | 16 ++++++++-------- internal/config/image_enterprise.go | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/internal/attestation/measurements/measurements_enterprise.go b/internal/attestation/measurements/measurements_enterprise.go index 95eb21aab..4f5d89c0e 100644 --- a/internal/attestation/measurements/measurements_enterprise.go +++ b/internal/attestation/measurements/measurements_enterprise.go @@ -19,14 +19,14 @@ package measurements // revive:disable:var-naming var ( - aws_AWSNitroTPM = M{0: {Expected: []byte{0x73, 0x7f, 0x76, 0x7a, 0x12, 0xf5, 0x4e, 0x70, 0xee, 0xcb, 0xc8, 0x68, 0x40, 0x11, 0x32, 0x3a, 0xe2, 0xfe, 0x2d, 0xd9, 0xf9, 0x07, 0x85, 0x57, 0x79, 0x69, 0xd7, 0xa2, 0x01, 0x3e, 0x8c, 0x12}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xad, 0x5e, 0x0b, 0x65, 0x8d, 0x1d, 0x89, 0xa6, 0x4c, 0xba, 0x29, 0x39, 0x19, 0x59, 0x19, 0x1c, 0x59, 0x3f, 0xa6, 0xf5, 0xf7, 0x2d, 0x7f, 0x9d, 0xc0, 0xeb, 0x50, 0xcf, 0xd4, 0xc6, 0x50, 0x49}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x4f, 0xcd, 0x6c, 0x24, 0xf7, 0x54, 0xff, 0x1a, 0xdf, 0xc6, 0xc6, 0xff, 0x98, 0x53, 0xcf, 0x45, 0x44, 0xb6, 0x34, 0x04, 0xeb, 0x1f, 0x67, 0xcd, 0x2a, 0x40, 0x51, 0xff, 0xc7, 0x4d, 0x51, 0xb5}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xac, 0x4f, 0xdf, 0x33, 0xbd, 0x75, 0x90, 0xd0, 0x9f, 0x59, 0x28, 0xb8, 0x56, 0x43, 0xab, 0x81, 0xd4, 0xd6, 0x40, 0x93, 0xaf, 0xab, 0x68, 0xe7, 0x39, 0x69, 0x43, 0xee, 0x95, 0x32, 0x01, 0x1d}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - aws_AWSSEVSNP = M{0: {Expected: []byte{0xd6, 0xdf, 0x85, 0x53, 0x58, 0xf5, 0xb1, 0x0f, 0x06, 0xf0, 0xfa, 0xb3, 0xf4, 0x08, 0xad, 0x26, 0xcd, 0x16, 0x5a, 0x29, 0x49, 0xba, 0xd6, 0x9e, 0x2c, 0xc7, 0x56, 0x92, 0x52, 0x9e, 0x66, 0x2a}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xb4, 0x75, 0x00, 0xf6, 0x30, 0xb4, 0x54, 0x70, 0x0c, 0x87, 0xca, 0xec, 0x86, 0xc1, 0x25, 0xeb, 0x79, 0x34, 0xaa, 0x17, 0x4f, 0x9c, 0x35, 0x4d, 0x46, 0xca, 0xe3, 0x47, 0xe1, 0x40, 0xec, 0xde}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x6b, 0xe2, 0xed, 0xee, 0xc9, 0xd5, 0x7a, 0x49, 0x8b, 0x6d, 0xa6, 0x9b, 0x4b, 0x96, 0xcb, 0x75, 0xc0, 0x0c, 0x38, 0x3a, 0x55, 0x36, 0x89, 0xd0, 0x39, 0xc2, 0xa1, 0xde, 0xb2, 0xb4, 0x0f, 0xe6}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xf6, 0x4e, 0x2c, 0xc6, 0xdc, 0x91, 0xb0, 0x1a, 0x0c, 0x27, 0xaf, 0x0e, 0x54, 0x66, 0x27, 0x48, 0x00, 0xc8, 0xe9, 0x38, 0xac, 0x3b, 0x65, 0x41, 0x1b, 0x48, 0x92, 0x65, 0xdc, 0x55, 0x56, 0xe2}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - azure_AzureSEVSNP = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x98, 0x32, 0x19, 0x32, 0x89, 0x53, 0xfa, 0x2b, 0x75, 0x67, 0xb9, 0x3a, 0x79, 0x3d, 0x44, 0xe4, 0xdf, 0xed, 0xf6, 0xbe, 0x9c, 0xbe, 0x50, 0x08, 0x3e, 0x52, 0xa7, 0xc6, 0xcb, 0xb4, 0xd7, 0x96}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xd7, 0x25, 0x4c, 0xc4, 0xe6, 0x9e, 0x04, 0x0b, 0x67, 0xf2, 0x65, 0x0c, 0xb9, 0xb8, 0xc5, 0x17, 0xcf, 0x0e, 0xcd, 0x0b, 0x55, 0x21, 0xb8, 0xb3, 0x01, 0x9a, 0x51, 0x2c, 0x19, 0xe6, 0xf4, 0x86}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xda, 0x7c, 0x69, 0x6e, 0xcf, 0x06, 0x08, 0xfd, 0x6d, 0x71, 0xef, 0x86, 0x19, 0x9b, 0x69, 0x5b, 0x38, 0x21, 0x6c, 0xb8, 0xe3, 0x3a, 0x83, 0x57, 0x78, 0x0c, 0xef, 0x2b, 0x39, 0xb9, 0x9d, 0x25}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - azure_AzureTDX = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x75, 0xe6, 0x04, 0x4a, 0x09, 0x6b, 0x95, 0x34, 0xa5, 0xde, 0x69, 0x2d, 0xfa, 0xbc, 0x07, 0xaf, 0xf8, 0xb4, 0x46, 0xf1, 0x93, 0x9d, 0xb5, 0xa9, 0xb3, 0x21, 0x20, 0x29, 0x1d, 0xb5, 0x3f, 0xdf}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x04, 0x20, 0x5c, 0x22, 0x11, 0x80, 0x26, 0xee, 0x3d, 0xa0, 0x31, 0xb7, 0xcc, 0x5b, 0x89, 0x68, 0xef, 0x24, 0x9b, 0x43, 0x88, 0x20, 0x0b, 0xa2, 0xe4, 0xdf, 0xaa, 0x0c, 0xe4, 0x90, 0x95, 0x3c}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xd8, 0x8e, 0x86, 0xd3, 0x34, 0xce, 0x8b, 0xc7, 0x96, 0x30, 0x47, 0x4e, 0xfc, 0x10, 0x7b, 0x31, 0x48, 0x67, 0xab, 0xf3, 0x41, 0xa2, 0xb4, 0x7f, 0xf5, 0x23, 0x0b, 0x45, 0x33, 0x04, 0x15, 0x5e}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + aws_AWSNitroTPM = M{0: {Expected: []byte{0x73, 0x7f, 0x76, 0x7a, 0x12, 0xf5, 0x4e, 0x70, 0xee, 0xcb, 0xc8, 0x68, 0x40, 0x11, 0x32, 0x3a, 0xe2, 0xfe, 0x2d, 0xd9, 0xf9, 0x07, 0x85, 0x57, 0x79, 0x69, 0xd7, 0xa2, 0x01, 0x3e, 0x8c, 0x12}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x89, 0x32, 0x5d, 0xdd, 0x91, 0x04, 0x5b, 0x2f, 0xf5, 0x2e, 0xbe, 0x5e, 0x7c, 0xde, 0x17, 0x4c, 0x4d, 0xc7, 0x18, 0x2e, 0x5a, 0xb4, 0xa6, 0x3a, 0x09, 0x28, 0x15, 0x97, 0x69, 0x5c, 0xfe, 0xa2}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xf9, 0xa7, 0x91, 0x53, 0x68, 0x55, 0x6d, 0x6b, 0x42, 0x2e, 0x47, 0x0a, 0x0a, 0xc3, 0x6a, 0x9b, 0x43, 0xdc, 0x31, 0xb6, 0x1e, 0xfd, 0xea, 0x78, 0x69, 0xbd, 0x88, 0xb5, 0x1d, 0x87, 0x63, 0xd1}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xcf, 0x6b, 0x2f, 0xad, 0xfa, 0xea, 0x99, 0xdc, 0x54, 0x01, 0x67, 0x34, 0x9d, 0x83, 0x74, 0xc9, 0x6c, 0x29, 0x05, 0xfd, 0xab, 0xe4, 0x5f, 0x30, 0xae, 0x12, 0xe3, 0xe3, 0x67, 0xca, 0x26, 0x78}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + aws_AWSSEVSNP = M{0: {Expected: []byte{0xd6, 0xdf, 0x85, 0x53, 0x58, 0xf5, 0xb1, 0x0f, 0x06, 0xf0, 0xfa, 0xb3, 0xf4, 0x08, 0xad, 0x26, 0xcd, 0x16, 0x5a, 0x29, 0x49, 0xba, 0xd6, 0x9e, 0x2c, 0xc7, 0x56, 0x92, 0x52, 0x9e, 0x66, 0x2a}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xb7, 0x63, 0x0b, 0x40, 0x63, 0x49, 0x5a, 0x47, 0xa9, 0xf7, 0xc6, 0xdb, 0x15, 0xa0, 0xd7, 0x77, 0x6b, 0x54, 0xf3, 0x18, 0x88, 0x55, 0x9e, 0xc3, 0xcc, 0x20, 0xf4, 0xce, 0x19, 0xb7, 0x64, 0x44}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x3c, 0x5c, 0xbc, 0xd8, 0x9d, 0x9c, 0xda, 0xe3, 0x70, 0x29, 0x77, 0x1f, 0xc6, 0x93, 0x00, 0x04, 0x30, 0x55, 0x20, 0x89, 0x43, 0x50, 0x1c, 0x82, 0x37, 0x02, 0x33, 0xf6, 0x47, 0x86, 0x12, 0xa3}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x0b, 0xf8, 0x4c, 0xb2, 0xaf, 0x9e, 0x8b, 0x84, 0x1d, 0xf2, 0xc9, 0x64, 0x60, 0x3f, 0x9a, 0x8b, 0x3d, 0x59, 0x39, 0xf7, 0xf4, 0x37, 0xf3, 0x54, 0xba, 0xe7, 0x38, 0xbf, 0xef, 0x03, 0x4a, 0x19}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + azure_AzureSEVSNP = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x4f, 0xd9, 0x10, 0xf9, 0x0d, 0x69, 0x04, 0x66, 0xc2, 0x08, 0x8a, 0xce, 0x6a, 0xb4, 0x29, 0x76, 0x69, 0xf6, 0xef, 0x7b, 0x05, 0xf5, 0x03, 0xd2, 0x09, 0x0b, 0x66, 0xee, 0x22, 0x4a, 0x28, 0x34}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x67, 0x8b, 0xcc, 0x11, 0x64, 0x26, 0xc1, 0x42, 0x5c, 0x0a, 0x9d, 0x4e, 0xee, 0xfe, 0x6c, 0x9c, 0x1b, 0x33, 0x4c, 0x93, 0xe8, 0xe6, 0xd1, 0xaa, 0xa5, 0xfc, 0xcd, 0x36, 0x13, 0x34, 0x0a, 0xc6}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x91, 0x57, 0xa4, 0x12, 0x26, 0x09, 0x6c, 0x74, 0x40, 0x98, 0xd2, 0x1d, 0x4d, 0x91, 0xd2, 0xdd, 0x84, 0xe8, 0x1a, 0xd1, 0x7c, 0xf1, 0x73, 0x11, 0xcc, 0xc6, 0xeb, 0x8c, 0xaa, 0x40, 0xa2, 0xf6}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + azure_AzureTDX = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x22, 0x79, 0x63, 0x53, 0x43, 0xce, 0x03, 0xc8, 0xe1, 0xcd, 0x4b, 0x62, 0x93, 0xb7, 0x43, 0xbf, 0xea, 0xfb, 0xe1, 0x4e, 0x65, 0xaf, 0x59, 0x33, 0xe5, 0x3b, 0x02, 0x35, 0x27, 0x41, 0x92, 0xe8}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xe1, 0x50, 0xcb, 0x1b, 0x9b, 0x95, 0x6f, 0x84, 0x67, 0xdd, 0x65, 0x12, 0x91, 0x6c, 0x7c, 0x84, 0x39, 0x24, 0xaf, 0x29, 0xb6, 0x7a, 0xff, 0x8e, 0x1a, 0xcc, 0xb9, 0xb4, 0x03, 0xbe, 0x1e, 0x87}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x00, 0xa4, 0x39, 0xd3, 0xca, 0x1d, 0x23, 0x67, 0xd2, 0x8c, 0x8f, 0x7e, 0x99, 0x7a, 0xb6, 0x52, 0x1a, 0x53, 0x79, 0x5b, 0x79, 0xf9, 0x8e, 0x35, 0x44, 0x63, 0xb9, 0xb1, 0x7a, 0x49, 0x2c, 0xcf}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} azure_AzureTrustedLaunch M - gcp_GCPSEVES = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x77, 0x0a, 0x48, 0x26, 0x6b, 0xca, 0x94, 0xfe, 0xd6, 0x82, 0x39, 0x33, 0xed, 0x2c, 0xf2, 0x7c, 0xe2, 0xc7, 0xad, 0x18, 0xc7, 0xb9, 0xba, 0x2d, 0x80, 0x32, 0x58, 0x2f, 0x4d, 0xae, 0x2f, 0x18}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xf6, 0x4f, 0x15, 0xfb, 0x8f, 0xeb, 0x57, 0xbf, 0xfc, 0xb1, 0x8a, 0xa8, 0xf0, 0xfc, 0x2b, 0x0d, 0x63, 0x12, 0x24, 0x38, 0x73, 0xe2, 0x00, 0x50, 0xfc, 0x8a, 0x46, 0x60, 0x90, 0x96, 0xd1, 0x3b}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x7c, 0xb7, 0x64, 0x20, 0x8a, 0xd3, 0x55, 0xb1, 0x76, 0x25, 0x55, 0xd6, 0xe6, 0xd4, 0x88, 0x9e, 0x29, 0xc8, 0x27, 0x34, 0xb1, 0xe8, 0xd4, 0x33, 0x0b, 0x40, 0xdd, 0xcb, 0x44, 0x82, 0x1b, 0xdb}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - gcp_GCPSEVSNP = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xc4, 0x0f, 0x5b, 0x30, 0x51, 0x2d, 0x43, 0x3d, 0x16, 0x2b, 0xac, 0x11, 0x71, 0x61, 0xe0, 0x4e, 0xd3, 0xae, 0xb5, 0x65, 0xe1, 0x4c, 0xbb, 0x11, 0x56, 0xd4, 0x30, 0x1b, 0x14, 0xac, 0x61, 0x5d}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xda, 0x0e, 0x94, 0xaf, 0x2e, 0xbc, 0xb6, 0x0e, 0x9e, 0x5f, 0x40, 0x4f, 0x28, 0x90, 0x78, 0xba, 0xdf, 0x2a, 0x31, 0x5c, 0xb5, 0x6b, 0x40, 0x2a, 0x6d, 0xc4, 0xbb, 0xcf, 0x21, 0x61, 0xbb, 0x55}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xea, 0x26, 0x71, 0x11, 0x2a, 0xb4, 0x00, 0xe5, 0x07, 0x94, 0x50, 0x50, 0x84, 0x63, 0xf1, 0x47, 0x61, 0x5e, 0xed, 0x97, 0xc0, 0xf8, 0x03, 0xf8, 0x01, 0xf7, 0x2f, 0xed, 0x56, 0x59, 0xe7, 0x1f}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - openstack_QEMUVTPM = M{4: {Expected: []byte{0x0d, 0xb0, 0x94, 0x5c, 0x51, 0x98, 0xab, 0x89, 0xb8, 0x25, 0xd5, 0xcb, 0x4e, 0xd8, 0x34, 0x53, 0x20, 0x2b, 0x7a, 0xe9, 0x2e, 0x71, 0x90, 0xd7, 0x6d, 0x90, 0xd5, 0xc0, 0x8a, 0x1d, 0xbd, 0xa0}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x71, 0x3e, 0x9d, 0xe0, 0x2a, 0xa3, 0x6b, 0xe0, 0xf9, 0x69, 0x49, 0x82, 0x1c, 0xb4, 0xc7, 0x15, 0xec, 0xd7, 0x8d, 0x51, 0xeb, 0xc7, 0x11, 0x80, 0x29, 0xbc, 0xd7, 0xbc, 0xed, 0xf6, 0x4d, 0xa8}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xb4, 0x4e, 0x33, 0xd0, 0xc2, 0x57, 0x9f, 0xa0, 0x9a, 0x73, 0x40, 0x8b, 0x2a, 0x2f, 0xfd, 0x31, 0x30, 0x92, 0x76, 0x6e, 0x1d, 0xb0, 0x7a, 0xfd, 0x40, 0xc9, 0x50, 0xb7, 0xe4, 0xff, 0x25, 0x4c}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + gcp_GCPSEVES = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xa9, 0x47, 0x45, 0x44, 0xe0, 0x42, 0xca, 0x41, 0xc1, 0x2a, 0x0f, 0x42, 0xff, 0x55, 0x9a, 0x58, 0xf7, 0x5b, 0x51, 0x17, 0xb9, 0x57, 0x29, 0x0c, 0xf9, 0x0d, 0x4b, 0x68, 0xbd, 0xe5, 0x35, 0x7e}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xc3, 0xd1, 0xa8, 0x9b, 0x19, 0x58, 0x22, 0xbb, 0x59, 0x97, 0x1e, 0x9c, 0x76, 0xa0, 0xe9, 0x29, 0x3a, 0x9d, 0x9e, 0x15, 0x05, 0xc9, 0xf6, 0xbe, 0xf1, 0x6a, 0xf0, 0xae, 0x23, 0x80, 0x22, 0xad}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x53, 0xc0, 0xd3, 0xad, 0xc8, 0x8d, 0x06, 0xb9, 0x97, 0x88, 0xa4, 0x95, 0x62, 0xa7, 0xd3, 0x80, 0x2d, 0x68, 0xb8, 0x75, 0xff, 0x8d, 0x84, 0x78, 0x6d, 0x77, 0x73, 0x6e, 0x57, 0xbc, 0x92, 0xe0}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + gcp_GCPSEVSNP = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xa1, 0xbe, 0x33, 0x1a, 0xcf, 0x7d, 0xd9, 0xb8, 0x95, 0x84, 0x9d, 0xa2, 0xce, 0x63, 0xe7, 0xed, 0xb5, 0x49, 0x89, 0x0e, 0x14, 0x3d, 0xb6, 0x6e, 0xee, 0x4d, 0x10, 0x08, 0x49, 0x34, 0x90, 0x71}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x72, 0xc7, 0x9f, 0xf0, 0x68, 0x94, 0xb8, 0x4d, 0x25, 0x37, 0xfa, 0x12, 0x61, 0xb5, 0x68, 0xd2, 0x41, 0xcf, 0x67, 0xe7, 0xa9, 0xd4, 0x5a, 0xb0, 0xeb, 0x18, 0x02, 0xa5, 0xfe, 0x52, 0x15, 0x47}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x2f, 0xa9, 0xea, 0xfa, 0x16, 0x2e, 0x49, 0xbb, 0x85, 0x7f, 0x6d, 0xdc, 0x77, 0x64, 0x02, 0x42, 0x86, 0xbd, 0xad, 0xe9, 0x64, 0x14, 0x08, 0x49, 0x47, 0xe6, 0x64, 0x77, 0x88, 0xac, 0x5d, 0x1d}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + openstack_QEMUVTPM = M{4: {Expected: []byte{0x08, 0x50, 0x3d, 0xed, 0xda, 0x2e, 0xef, 0x16, 0x7f, 0xf9, 0xe6, 0x58, 0xf1, 0x74, 0xe0, 0x03, 0x30, 0x26, 0xba, 0xe6, 0x90, 0xa7, 0x3f, 0x65, 0xfa, 0x16, 0x77, 0x6d, 0x64, 0x15, 0xaf, 0xfc}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x40, 0xf7, 0xa2, 0x74, 0xe5, 0xfa, 0xb3, 0x81, 0x84, 0xbb, 0x63, 0xbf, 0xe0, 0xaf, 0xf2, 0xb9, 0x2c, 0x5e, 0x47, 0xcf, 0xfa, 0xf1, 0x41, 0x28, 0xe2, 0x81, 0xd0, 0x68, 0xac, 0xca, 0x15, 0xac}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x52, 0x4c, 0x96, 0x87, 0xf7, 0x36, 0x86, 0x50, 0xfc, 0x17, 0x36, 0x33, 0x04, 0x90, 0xfe, 0x1e, 0x1d, 0xab, 0x95, 0xd5, 0x53, 0x4f, 0xa3, 0xb2, 0x39, 0x9d, 0xbd, 0xd3, 0x69, 0x10, 0xcb, 0x25}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} qemu_QEMUTDX M - qemu_QEMUVTPM = M{4: {Expected: []byte{0x20, 0x4a, 0x80, 0xbf, 0x33, 0xf5, 0xa4, 0x1e, 0x7c, 0x02, 0x30, 0x73, 0xb5, 0xc1, 0xae, 0xfc, 0x92, 0x75, 0x69, 0x0f, 0x07, 0x9b, 0xf3, 0xf5, 0x1b, 0xf7, 0xd2, 0xa4, 0x89, 0xce, 0x68, 0x87}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x9e, 0xeb, 0x56, 0x6a, 0xb6, 0xf4, 0x84, 0x5d, 0xae, 0xb2, 0xc8, 0xed, 0x78, 0x2c, 0xb3, 0x00, 0xac, 0x22, 0xe2, 0x05, 0x10, 0xc9, 0x9f, 0x08, 0xfe, 0x2e, 0xf2, 0x78, 0xb8, 0xd7, 0x85, 0xd9}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x8d, 0x1b, 0x12, 0xf2, 0x55, 0x93, 0xb7, 0x22, 0xca, 0xc0, 0xed, 0xb3, 0xa6, 0xd0, 0x86, 0x69, 0xc0, 0x06, 0xd5, 0x71, 0x09, 0xed, 0x47, 0xbd, 0x74, 0xcf, 0x12, 0x5e, 0x95, 0xeb, 0x8d, 0xb3}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + qemu_QEMUVTPM = M{4: {Expected: []byte{0x6c, 0x47, 0xfe, 0x5d, 0x2f, 0xd6, 0x60, 0x20, 0xab, 0xaf, 0x6e, 0xa6, 0x0c, 0x9c, 0xf6, 0xba, 0xbe, 0x81, 0x6b, 0x8c, 0x09, 0x1c, 0x01, 0x78, 0xd9, 0x76, 0x46, 0x12, 0xfa, 0x59, 0x32, 0x17}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x41, 0x19, 0x8f, 0x06, 0x79, 0xa4, 0xd6, 0xe3, 0x7d, 0x81, 0x58, 0x1d, 0xab, 0xcc, 0x9f, 0x66, 0x96, 0xd1, 0xa0, 0xad, 0xf4, 0xc0, 0xad, 0xa2, 0x11, 0xa5, 0xc8, 0x85, 0x7b, 0xc0, 0x77, 0x61}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x12, 0x5f, 0xdf, 0xc5, 0x77, 0x82, 0x28, 0xa3, 0x9f, 0x54, 0x2a, 0x32, 0x65, 0x43, 0x80, 0x22, 0xf2, 0x14, 0xb7, 0xfc, 0x4e, 0x58, 0x41, 0xbf, 0xd1, 0x57, 0xfe, 0x83, 0xa9, 0xa3, 0x68, 0x87}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} ) diff --git a/internal/config/image_enterprise.go b/internal/config/image_enterprise.go index f54d5e248..1e0858d6c 100644 --- a/internal/config/image_enterprise.go +++ b/internal/config/image_enterprise.go @@ -10,5 +10,5 @@ package config const ( // defaultImage is the default image to use. - defaultImage = "ref/main/stream/nightly/v2.23.0-pre.0.20250408114316-bfab84ce1cb7" + defaultImage = "ref/main/stream/nightly/v2.23.0-pre.0.20250410145300-620b4c7da401" ) From e46726cf131aa9f6094ed306d936e3a1313df8f1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Wei=C3=9Fe?= <66256922+daniel-weisse@users.noreply.github.com> Date: Fri, 11 Apr 2025 14:09:37 +0200 Subject: [PATCH 215/311] mini-constellation: pin swtpm to v0.8.2 (#3756) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * mini-constellation: pin swtpm to v0.8.2 * containers: update libvirtd_base image --------- Signed-off-by: Daniel Weiße --- bazel/toolchains/container_images.bzl | 2 +- nix/container/libvirtd_base.nix | 14 ++++++++++++-- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/bazel/toolchains/container_images.bzl b/bazel/toolchains/container_images.bzl index f73b2f769..1c405484f 100644 --- a/bazel/toolchains/container_images.bzl +++ b/bazel/toolchains/container_images.bzl @@ -16,6 +16,6 @@ def containter_image_deps(): ) oci_pull( name = "libvirtd_base", - digest = "sha256:10bc5281807d06e333f363dd27ccc8159884d706a6d738d6f54a925c483bdce3", + digest = "sha256:f23e0f587860c841adde25b1b4f0d99aa4fbce1c92b01b5b46ab5fa35980a135", image = "ghcr.io/edgelesssys/constellation/libvirtd-base", ) diff --git a/nix/container/libvirtd_base.nix b/nix/container/libvirtd_base.nix index 5ebaf3e91..f58a2366a 100644 --- a/nix/container/libvirtd_base.nix +++ b/nix/container/libvirtd_base.nix @@ -62,12 +62,22 @@ let ''; startScript = pkgsLinux.writeShellApplication { name = "start.sh"; - runtimeInputs = with pkgsLinux; [ + runtimeInputs = let nixpkgs24_11 = import "${pkgs.fetchFromGitHub { + # Pinned release which contains swtpm v0.8.2 + # Newer versions of NixOS package swtpm v0.10.0 with https://github.com/stefanberger/swtpm/pull/896 + # This release breaks MiniConstellation since either libvirt, or the Terraform libvirt provider + # tries to apply the TPM config twice, resulting in an error during the setup phase + owner = "NixOS"; + repo = "nixpkgs"; + tag = "24.11"; + hash = "sha256-CqCX4JG7UiHvkrBTpYC3wcEurvbtTADLbo3Ns2CEoL8="; + }}"{system = "x86_64-linux";}; in + with pkgsLinux; [ shadow coreutils libvirt qemu - swtpm + nixpkgs24_11.swtpm ]; text = '' set -euo pipefail From 5ea950305ca3a5674f6c31046ca835835aaa4b48 Mon Sep 17 00:00:00 2001 From: edgelessci <71088502+edgelessci@users.noreply.github.com> Date: Mon, 14 Apr 2025 08:31:43 +0200 Subject: [PATCH 216/311] image: update locked rpms (#3760) Co-authored-by: edgelessci --- image/mirror/SHA256SUMS | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/image/mirror/SHA256SUMS b/image/mirror/SHA256SUMS index 668afb985..2415784e7 100644 --- a/image/mirror/SHA256SUMS +++ b/image/mirror/SHA256SUMS @@ -17,7 +17,7 @@ db246f6445469b5a71e965a081685471768393cf04181e7250ce0ddcb8a9c3d4 conmon-2.1.12- adf4b75cdd9fae9d2d37fb71d9f0bf625a6705c0f0a7784569ab21463fe22152 conntrack-tools-1.4.7-7.fc40.x86_64.rpm b84841f98b3c14d68da5a4021f10973eb5fa6566e63f4933e40a0c91aa134ce4 container-selinux-2.236.0-1.fc40.noarch.rpm bbe29e0c7b4ca076d50b4ac3954eb383459230d96b13f353ee71ebd5de33b6d1 containerd-1.6.23-5.fc40.x86_64.rpm -0705251ea64b1558098016b2120f202c5aba77470093cb8f89ce6adb2a0b46b6 containernetworking-plugins-1.5.1-1.fc40.x86_64.rpm +46f035201c84f65f6b9fd549adbe1c4aeb5f5972e69bf6537c05e7cc20587a4a containernetworking-plugins-1.5.1-2.fc40.x86_64.rpm fd81f5d57a5feba4658d3ab1c6ab0a1a9551cff5c73263acf960bd7d41acaf25 containers-common-0.62.0-1.fc40.noarch.rpm 1472f71479fed6eb2103bd9653845609c7523523d06c36565a37d818fc144284 containers-common-extra-0.62.0-1.fc40.noarch.rpm 299d3e7e1cbc110d9ae8a47f6ca95142c3e3783cb1464bfbd6bc550c414b97ec coreutils-single-9.4-9.fc40.x86_64.rpm @@ -208,7 +208,7 @@ c8bbfa2762cc601f8a97d8d5a39a658f0e91ba477ebebd798b30f7fc8ffdd457 libss-1.47.0-5 e5d150d23f95e4a23288b84145af442607a88bf457c0e04b325b1d1e8e708c2b libtool-ltdl-2.4.7-10.fc40.x86_64.rpm e541a1c8397dccf159b3602eb6bbb381ba21c544db337a3b3bfc49ccc2ef5c21 libunistring-1.1-7.fc40.i686.rpm 58719c2f205b23598e31b72144ab55215947ad8fca96af46a641288692c159d2 libunistring-1.1-7.fc40.x86_64.rpm -4a04211756b779128d1599b6a334ed69ed05d7190e347545d65177fdd484ee55 libusb1-1.0.27-6.fc40.x86_64.rpm +0fa1b7d1f6f5bcd1c2f2785e6571a7c3e63662efd50ba32fd1996dac9dbb4de9 libusb1-1.0.28-2.fc40.x86_64.rpm 896d671852ed3f28e8c778dca361c5b5c57a89855df11755e6be1d088f64d43a libutempter-1.2.1-13.fc40.i686.rpm 0093a8d3f490fbbbc71b01e0c8f9b083040dbf7513be31a91a0769d846198c1b libutempter-1.2.1-13.fc40.x86_64.rpm 5aaa12bba361ae29b2a6b35c4b21da935423bc2ad763eaa8267008c7a533cb3c libuuid-2.40-0.9.rc1.fc40.i686.rpm @@ -244,7 +244,7 @@ a18edf32e89aefd453998d5d0ec3aa1ea193dac43f80b99db195abd7e8cf1a04 ncurses-libs-6 188ce5004e6ed764b4a619b64a4a0f36f1cc4fa919fe0a300599ff1171844144 nftables-1.0.9-3.fc40.x86_64.rpm 784e0fbc9ccb7087c10f4c41edbed13904f94244ff658f308614abe48cdf0d42 npth-1.7-1.fc40.x86_64.rpm f814bc09b50daaab468715088ec056373dbc209a5075306e4ce76f5c55eb2b42 nvme-cli-2.8-1.fc40.x86_64.rpm -ecc7bc53e45b304272ed047ef681aec637eddae7a7ff0bc851665f3ac164f8ac openldap-2.6.8-2.fc40.x86_64.rpm +a0eecb082db491d57bfab6047b2611a10150d47a8f50fd05f98ad2f01b0dee54 openldap-2.6.9-1.fc40.x86_64.rpm 49e3e1c7d82ab28b1ab79bb2655a95cadeae2295f5543db8a07d74e090bcb90d openssh-9.6p1-2.fc40.x86_64.rpm 369b4d6e159a53afe9d2803d927f0523ceeae0822353aa8f0d81d0e3211b0788 openssh-server-9.6p1-2.fc40.x86_64.rpm bffa85f8feadf0bf5f7a8cea9ff9f5e49266959df6ae4d61cf929054c09ec2f8 openssl-libs-3.2.4-1.fc40.i686.rpm @@ -341,17 +341,17 @@ e1d443f7dcaec55eedc34bb66dd798ba9901dba69a169cff46f6c45671a3b3fa unbound-anchor 945aa536bc30050abc1870cef167cb944cf78d6628923476db43201a0054574b util-linux-2.40.2-1.fc40.x86_64.rpm 7ec1b5df780c5a30f8e901179480125a6ea87f1f7bad3b69da7f4b351b88c3dd util-linux-core-2.40-0.9.rc1.fc40.x86_64.rpm b1aa4e816c01c08c18924865640f214f717cdfc66837e53a24b8edfb80a86f9d util-linux-core-2.40.2-1.fc40.x86_64.rpm -7c738289068791356ac633f968512021d125c7d2a858bf5493e14b4ce00c3f52 vim-common-9.1.1227-1.fc40.x86_64.rpm -80766fd967a7c24a543871996a0a857c38d3e7ac205fb3f6403ae9cb5529c424 vim-data-9.1.1227-1.fc40.noarch.rpm -d0f66fbd4e87a9245dd907a19ff90eb88bc60d312f3adfcd189eaf32884480c5 vim-enhanced-9.1.1227-1.fc40.x86_64.rpm -501d0bc28c36c713448570aa4a8a35789bc11c490f93ba4269767043251cd326 vim-filesystem-9.1.1227-1.fc40.noarch.rpm +673532a506dff0ca46cd4bb5fbf772d2039e4c11e648eafa221f207139ebb798 vim-common-9.1.1275-1.fc40.x86_64.rpm +d32e2c404e54d75fb7c7c4cd3dece12123418f1798a964047fe5ca70221db002 vim-data-9.1.1275-1.fc40.noarch.rpm +968283f6290df2cbf2dd699411b1cca450769b30f28b8b8a9a9f4a4916d5ae4f vim-enhanced-9.1.1275-1.fc40.x86_64.rpm +80194d554770c211bd7c3fa368b3fbb94f7021504d4c87ddae4544a6eb183342 vim-filesystem-9.1.1275-1.fc40.noarch.rpm 69fd53fe41a8811e904b5429b1934a413d88978ec54d5c9e64370be32cbfc2ef wget2-2.2.0-2.fc40.x86_64.rpm a00cc0a87c60ffbf5495a9796ac7074e6a47e0bebbb8c137d902014cd7ff5a30 wget2-libs-2.2.0-2.fc40.x86_64.rpm 09822d8d386dc81619639415a211b34592b0c5d43f7be288691cc4d933a0542c wget2-wget-2.2.0-2.fc40.x86_64.rpm cf0306ceed1c6b3be39060d85f16b1953b464d3a625488b170d3b7aadf600645 which-2.21-41.fc40.x86_64.rpm 4ede95a2fa3bc0ae617c8bf3a375b800163d58733b4829b15d9f038505d79fee whois-nls-5.5.20-3.fc40.noarch.rpm e2195010e857f56b19246f8b821f9391922880b7691b3728a413f540edc890a6 xkeyboard-config-2.41-1.fc40.noarch.rpm -a9f84423ade79c3577ac2fa302e5e290f01a7432f86d48ba168256cf31fc2807 xxd-9.1.1227-1.fc40.x86_64.rpm +69b64249d3c26a5efbd0ffa5802aa08033822c2d4378a4f44261618de6d38e4d xxd-9.1.1275-1.fc40.x86_64.rpm ee599a1c4d7ee635e54ec137af4dded83f433b9c8a5976f75ecdcd000b5246e3 xz-5.4.6-3.fc40.x86_64.rpm b92ef78d8ab424c22130e457d0ef691d8197bff61c3b8852205d1b02baba3819 xz-libs-5.4.6-3.fc40.i686.rpm b6ee44b3d7e494b0364f26b7d0b169a8092180af787423cd5e8a47dc0f738a66 xz-libs-5.4.6-3.fc40.x86_64.rpm From 54876024c380c31942671645620948aa92635dbf Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 14 Apr 2025 08:38:10 +0200 Subject: [PATCH 217/311] deps: update golangci/golangci-lint to v2.1.0 (#3758) * deps: update golangci/golangci-lint to v2.1.0 * deps: tidy all modules --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: edgelessci --- bazel/toolchains/ci_deps.bzl | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/bazel/toolchains/ci_deps.bzl b/bazel/toolchains/ci_deps.bzl index 118580299..ab6741dc0 100644 --- a/bazel/toolchains/ci_deps.bzl +++ b/bazel/toolchains/ci_deps.bzl @@ -223,45 +223,45 @@ def _golangci_lint_deps(): name = "com_github_golangci_golangci_lint_linux_amd64", build_file = "//bazel/toolchains:BUILD.golangci.bazel", urls = [ - "https://cdn.confidential.cloud/constellation/cas/sha256/89cc8a7810dc63b9a37900da03e37c3601caf46d42265d774e0f1a5d883d53e2", - "https://github.com/golangci/golangci-lint/releases/download/v2.0.2/golangci-lint-2.0.2-linux-amd64.tar.gz", + "https://cdn.confidential.cloud/constellation/cas/sha256/ef8211a45a23c067f6ef4d9cf8cb4dd9db165c3586e2472b5f499177b6e784b1", + "https://github.com/golangci/golangci-lint/releases/download/v2.1.0/golangci-lint-2.1.0-linux-amd64.tar.gz", ], - strip_prefix = "golangci-lint-2.0.2-linux-amd64", + strip_prefix = "golangci-lint-2.1.0-linux-amd64", type = "tar.gz", - sha256 = "89cc8a7810dc63b9a37900da03e37c3601caf46d42265d774e0f1a5d883d53e2", + sha256 = "ef8211a45a23c067f6ef4d9cf8cb4dd9db165c3586e2472b5f499177b6e784b1", ) http_archive( name = "com_github_golangci_golangci_lint_linux_arm64", build_file = "//bazel/toolchains:BUILD.golangci.bazel", urls = [ - "https://cdn.confidential.cloud/constellation/cas/sha256/789d5b91219ac68c2336f77d41cd7e33a910420594780f455893f8453d09595b", - "https://github.com/golangci/golangci-lint/releases/download/v2.0.2/golangci-lint-2.0.2-linux-arm64.tar.gz", + "https://cdn.confidential.cloud/constellation/cas/sha256/7594d8d92f6c61ca3e812cc4b149c0c73c731c63a06466bb045bf17cb97292b1", + "https://github.com/golangci/golangci-lint/releases/download/v2.1.0/golangci-lint-2.1.0-linux-arm64.tar.gz", ], - strip_prefix = "golangci-lint-2.0.2-linux-arm64", + strip_prefix = "golangci-lint-2.1.0-linux-arm64", type = "tar.gz", - sha256 = "789d5b91219ac68c2336f77d41cd7e33a910420594780f455893f8453d09595b", + sha256 = "7594d8d92f6c61ca3e812cc4b149c0c73c731c63a06466bb045bf17cb97292b1", ) http_archive( name = "com_github_golangci_golangci_lint_darwin_amd64", build_file = "//bazel/toolchains:BUILD.golangci.bazel", urls = [ - "https://cdn.confidential.cloud/constellation/cas/sha256/a88cbdc86b483fe44e90bf2dcc3fec2af8c754116e6edf0aa6592cac5baa7a0e", - "https://github.com/golangci/golangci-lint/releases/download/v2.0.2/golangci-lint-2.0.2-darwin-amd64.tar.gz", + "https://cdn.confidential.cloud/constellation/cas/sha256/fbaa61cee903fb030c968ae8c4a714d32aa6ea57ba941585f46168e4d7ba0d6c", + "https://github.com/golangci/golangci-lint/releases/download/v2.1.0/golangci-lint-2.1.0-darwin-amd64.tar.gz", ], - strip_prefix = "golangci-lint-2.0.2-darwin-amd64", + strip_prefix = "golangci-lint-2.1.0-darwin-amd64", type = "tar.gz", - sha256 = "a88cbdc86b483fe44e90bf2dcc3fec2af8c754116e6edf0aa6592cac5baa7a0e", + sha256 = "fbaa61cee903fb030c968ae8c4a714d32aa6ea57ba941585f46168e4d7ba0d6c", ) http_archive( name = "com_github_golangci_golangci_lint_darwin_arm64", build_file = "//bazel/toolchains:BUILD.golangci.bazel", urls = [ - "https://cdn.confidential.cloud/constellation/cas/sha256/664550e7954f5f4451aae99b4f7382c1a47039c66f39ca605f5d9af1a0d32b49", - "https://github.com/golangci/golangci-lint/releases/download/v2.0.2/golangci-lint-2.0.2-darwin-arm64.tar.gz", + "https://cdn.confidential.cloud/constellation/cas/sha256/88eb4d7d1761fc39e6cc4e90e12fa8167739354507a137cac678c8246a8f5888", + "https://github.com/golangci/golangci-lint/releases/download/v2.1.0/golangci-lint-2.1.0-darwin-arm64.tar.gz", ], - strip_prefix = "golangci-lint-2.0.2-darwin-arm64", + strip_prefix = "golangci-lint-2.1.0-darwin-arm64", type = "tar.gz", - sha256 = "664550e7954f5f4451aae99b4f7382c1a47039c66f39ca605f5d9af1a0d32b49", + sha256 = "88eb4d7d1761fc39e6cc4e90e12fa8167739354507a137cac678c8246a8f5888", ) def _buf_deps(): From 36049f9a5d81544044031ccf808761c0a8690ce7 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 14 Apr 2025 08:41:08 +0200 Subject: [PATCH 218/311] deps: update dependency Pillow to v11.2.1 (#3759) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/actions/e2e_benchmark/evaluate/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/actions/e2e_benchmark/evaluate/requirements.txt b/.github/actions/e2e_benchmark/evaluate/requirements.txt index 22a46ab7f..598e2ec34 100644 --- a/.github/actions/e2e_benchmark/evaluate/requirements.txt +++ b/.github/actions/e2e_benchmark/evaluate/requirements.txt @@ -1,3 +1,3 @@ numpy ==2.2.4 matplotlib ==3.10.1 -Pillow ==11.1.0 \ No newline at end of file +Pillow ==11.2.1 \ No newline at end of file From 69e9e54ae39c1a22e564168418f2a620fbac2b94 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 14 Apr 2025 09:08:46 +0200 Subject: [PATCH 219/311] deps: update golangci/golangci-lint to v2.1.1 (#3761) * deps: update golangci/golangci-lint to v2.1.1 * deps: tidy all modules --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: edgelessci --- bazel/toolchains/ci_deps.bzl | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/bazel/toolchains/ci_deps.bzl b/bazel/toolchains/ci_deps.bzl index ab6741dc0..e565a1b40 100644 --- a/bazel/toolchains/ci_deps.bzl +++ b/bazel/toolchains/ci_deps.bzl @@ -223,45 +223,45 @@ def _golangci_lint_deps(): name = "com_github_golangci_golangci_lint_linux_amd64", build_file = "//bazel/toolchains:BUILD.golangci.bazel", urls = [ - "https://cdn.confidential.cloud/constellation/cas/sha256/ef8211a45a23c067f6ef4d9cf8cb4dd9db165c3586e2472b5f499177b6e784b1", - "https://github.com/golangci/golangci-lint/releases/download/v2.1.0/golangci-lint-2.1.0-linux-amd64.tar.gz", + "https://cdn.confidential.cloud/constellation/cas/sha256/7167df345d0146d662b12ba068306f843d0eba408f9dc8f4d3ebb239786e87da", + "https://github.com/golangci/golangci-lint/releases/download/v2.1.1/golangci-lint-2.1.1-linux-amd64.tar.gz", ], - strip_prefix = "golangci-lint-2.1.0-linux-amd64", + strip_prefix = "golangci-lint-2.1.1-linux-amd64", type = "tar.gz", - sha256 = "ef8211a45a23c067f6ef4d9cf8cb4dd9db165c3586e2472b5f499177b6e784b1", + sha256 = "7167df345d0146d662b12ba068306f843d0eba408f9dc8f4d3ebb239786e87da", ) http_archive( name = "com_github_golangci_golangci_lint_linux_arm64", build_file = "//bazel/toolchains:BUILD.golangci.bazel", urls = [ - "https://cdn.confidential.cloud/constellation/cas/sha256/7594d8d92f6c61ca3e812cc4b149c0c73c731c63a06466bb045bf17cb97292b1", - "https://github.com/golangci/golangci-lint/releases/download/v2.1.0/golangci-lint-2.1.0-linux-arm64.tar.gz", + "https://cdn.confidential.cloud/constellation/cas/sha256/0b3e2dd07ca0cf0339805cd7cc0a2d5698ef25f32a0a298ba1edf3d14d67597f", + "https://github.com/golangci/golangci-lint/releases/download/v2.1.1/golangci-lint-2.1.1-linux-arm64.tar.gz", ], - strip_prefix = "golangci-lint-2.1.0-linux-arm64", + strip_prefix = "golangci-lint-2.1.1-linux-arm64", type = "tar.gz", - sha256 = "7594d8d92f6c61ca3e812cc4b149c0c73c731c63a06466bb045bf17cb97292b1", + sha256 = "0b3e2dd07ca0cf0339805cd7cc0a2d5698ef25f32a0a298ba1edf3d14d67597f", ) http_archive( name = "com_github_golangci_golangci_lint_darwin_amd64", build_file = "//bazel/toolchains:BUILD.golangci.bazel", urls = [ - "https://cdn.confidential.cloud/constellation/cas/sha256/fbaa61cee903fb030c968ae8c4a714d32aa6ea57ba941585f46168e4d7ba0d6c", - "https://github.com/golangci/golangci-lint/releases/download/v2.1.0/golangci-lint-2.1.0-darwin-amd64.tar.gz", + "https://cdn.confidential.cloud/constellation/cas/sha256/dc02e375a6de8b1f9ff00ce7a4c1fe59dd10f9ff4790ec876c41b28454e5facb", + "https://github.com/golangci/golangci-lint/releases/download/v2.1.1/golangci-lint-2.1.1-darwin-amd64.tar.gz", ], - strip_prefix = "golangci-lint-2.1.0-darwin-amd64", + strip_prefix = "golangci-lint-2.1.1-darwin-amd64", type = "tar.gz", - sha256 = "fbaa61cee903fb030c968ae8c4a714d32aa6ea57ba941585f46168e4d7ba0d6c", + sha256 = "dc02e375a6de8b1f9ff00ce7a4c1fe59dd10f9ff4790ec876c41b28454e5facb", ) http_archive( name = "com_github_golangci_golangci_lint_darwin_arm64", build_file = "//bazel/toolchains:BUILD.golangci.bazel", urls = [ - "https://cdn.confidential.cloud/constellation/cas/sha256/88eb4d7d1761fc39e6cc4e90e12fa8167739354507a137cac678c8246a8f5888", - "https://github.com/golangci/golangci-lint/releases/download/v2.1.0/golangci-lint-2.1.0-darwin-arm64.tar.gz", + "https://cdn.confidential.cloud/constellation/cas/sha256/cbd615f108a5e83c873c2dd84b84c9990360f1b60250372ea3c226ba3f7a5a1b", + "https://github.com/golangci/golangci-lint/releases/download/v2.1.1/golangci-lint-2.1.1-darwin-arm64.tar.gz", ], - strip_prefix = "golangci-lint-2.1.0-darwin-arm64", + strip_prefix = "golangci-lint-2.1.1-darwin-arm64", type = "tar.gz", - sha256 = "88eb4d7d1761fc39e6cc4e90e12fa8167739354507a137cac678c8246a8f5888", + sha256 = "cbd615f108a5e83c873c2dd84b84c9990360f1b60250372ea3c226ba3f7a5a1b", ) def _buf_deps(): From 129d745fc426ce19c86038908540c29059a06b56 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 14 Apr 2025 11:34:21 +0200 Subject: [PATCH 220/311] deps: update mvdan/gofumpt to v0.8.0 (#3763) * deps: update mvdan/gofumpt to v0.8.0 * deps: tidy all modules --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: edgelessci --- bazel/toolchains/ci_deps.bzl | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/bazel/toolchains/ci_deps.bzl b/bazel/toolchains/ci_deps.bzl index e565a1b40..f7404ed97 100644 --- a/bazel/toolchains/ci_deps.bzl +++ b/bazel/toolchains/ci_deps.bzl @@ -138,42 +138,42 @@ def _gofumpt_deps(): http_file( name = "com_github_mvdan_gofumpt_linux_amd64", urls = [ - "https://cdn.confidential.cloud/constellation/cas/sha256/6ff459c1dcae3b0b00844c1a5a4a5b0f547237d8a4f3624aaea8d424aeef24c6", - "https://github.com/mvdan/gofumpt/releases/download/v0.7.0/gofumpt_v0.7.0_linux_amd64", + "https://cdn.confidential.cloud/constellation/cas/sha256/11604bbaf7321abcc2fca2c6a37b7e9198bb1e76e5a86f297c07201e8ab1fda9", + "https://github.com/mvdan/gofumpt/releases/download/v0.8.0/gofumpt_v0.8.0_linux_amd64", ], executable = True, downloaded_file_path = "gofumpt", - sha256 = "6ff459c1dcae3b0b00844c1a5a4a5b0f547237d8a4f3624aaea8d424aeef24c6", + sha256 = "11604bbaf7321abcc2fca2c6a37b7e9198bb1e76e5a86f297c07201e8ab1fda9", ) http_file( name = "com_github_mvdan_gofumpt_linux_arm64", urls = [ - "https://cdn.confidential.cloud/constellation/cas/sha256/00c18c88ef50437629626ba20d677f4648684cb280952814cdd887677d42cbd3", - "https://github.com/mvdan/gofumpt/releases/download/v0.7.0/gofumpt_v0.7.0_linux_arm64", + "https://cdn.confidential.cloud/constellation/cas/sha256/787c1d3d4d20e6fe2b0bf06a5a913ac0f50343dbf9a71540724a2b8092a0e6ca", + "https://github.com/mvdan/gofumpt/releases/download/v0.8.0/gofumpt_v0.8.0_linux_arm64", ], executable = True, downloaded_file_path = "gofumpt", - sha256 = "00c18c88ef50437629626ba20d677f4648684cb280952814cdd887677d42cbd3", + sha256 = "787c1d3d4d20e6fe2b0bf06a5a913ac0f50343dbf9a71540724a2b8092a0e6ca", ) http_file( name = "com_github_mvdan_gofumpt_darwin_amd64", urls = [ - "https://cdn.confidential.cloud/constellation/cas/sha256/b7d05e092da45c5ec96344ab635b1d6547c3e27c840ba39bc76989934efd7ce3", - "https://github.com/mvdan/gofumpt/releases/download/v0.7.0/gofumpt_v0.7.0_darwin_amd64", + "https://cdn.confidential.cloud/constellation/cas/sha256/0dda6600cf263b703a5ad93e792b06180c36afdee9638617a91dd552f2c6fb3e", + "https://github.com/mvdan/gofumpt/releases/download/v0.8.0/gofumpt_v0.8.0_darwin_amd64", ], executable = True, downloaded_file_path = "gofumpt", - sha256 = "b7d05e092da45c5ec96344ab635b1d6547c3e27c840ba39bc76989934efd7ce3", + sha256 = "0dda6600cf263b703a5ad93e792b06180c36afdee9638617a91dd552f2c6fb3e", ) http_file( name = "com_github_mvdan_gofumpt_darwin_arm64", urls = [ - "https://cdn.confidential.cloud/constellation/cas/sha256/08f23114760a090b090706d92b8c52b9875b9eb352d76c77aa354d6aa20b045a", - "https://github.com/mvdan/gofumpt/releases/download/v0.7.0/gofumpt_v0.7.0_darwin_arm64", + "https://cdn.confidential.cloud/constellation/cas/sha256/7e66e92b7a67d1d12839ab030fb7ae38e5e2273474af3762e67bc7fe9471fcd9", + "https://github.com/mvdan/gofumpt/releases/download/v0.8.0/gofumpt_v0.8.0_darwin_arm64", ], executable = True, downloaded_file_path = "gofumpt", - sha256 = "08f23114760a090b090706d92b8c52b9875b9eb352d76c77aa354d6aa20b045a", + sha256 = "7e66e92b7a67d1d12839ab030fb7ae38e5e2273474af3762e67bc7fe9471fcd9", ) def _tfsec_deps(): From 19b8705a0135b1997311c475b4779b2295717109 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 14 Apr 2025 14:06:39 +0200 Subject: [PATCH 221/311] deps: update Go dependencies (#3762) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * deps: update Go dependencies --------- Signed-off-by: Daniel Weiße Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Daniel Weiße --- go.mod | 54 +++++++++--------- go.sum | 139 +++++++++++++++++++++++----------------------- hack/tools/go.mod | 2 +- hack/tools/go.sum | 4 +- 4 files changed, 100 insertions(+), 99 deletions(-) diff --git a/go.mod b/go.mod index 4e64852ef..9b7b01627 100644 --- a/go.mod +++ b/go.mod @@ -36,7 +36,7 @@ require ( dario.cat/mergo v1.0.1 github.com/Azure/azure-sdk-for-go v68.0.0+incompatible github.com/Azure/azure-sdk-for-go/sdk/azcore v1.18.0 - github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.8.2 + github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.9.0 github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v6 v6.4.0 github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/network/armnetwork/v6 v6.2.0 github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/azsecrets v1.3.1 @@ -44,23 +44,23 @@ require ( github.com/BurntSushi/toml v1.5.0 github.com/aws/aws-sdk-go v1.55.6 github.com/aws/aws-sdk-go-v2 v1.36.3 - github.com/aws/aws-sdk-go-v2/config v1.29.13 - github.com/aws/aws-sdk-go-v2/credentials v1.17.66 + github.com/aws/aws-sdk-go-v2/config v1.29.14 + github.com/aws/aws-sdk-go-v2/credentials v1.17.67 github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.30 - github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.71 - github.com/aws/aws-sdk-go-v2/service/autoscaling v1.52.2 + github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.72 + github.com/aws/aws-sdk-go-v2/service/autoscaling v1.52.3 github.com/aws/aws-sdk-go-v2/service/cloudfront v1.45.3 - github.com/aws/aws-sdk-go-v2/service/ec2 v1.211.2 - github.com/aws/aws-sdk-go-v2/service/elasticloadbalancingv2 v1.45.1 - github.com/aws/aws-sdk-go-v2/service/resourcegroupstaggingapi v1.26.2 - github.com/aws/aws-sdk-go-v2/service/s3 v1.79.1 + github.com/aws/aws-sdk-go-v2/service/ec2 v1.211.3 + github.com/aws/aws-sdk-go-v2/service/elasticloadbalancingv2 v1.45.2 + github.com/aws/aws-sdk-go-v2/service/resourcegroupstaggingapi v1.26.3 + github.com/aws/aws-sdk-go-v2/service/s3 v1.79.2 github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.35.3 github.com/aws/smithy-go v1.22.3 - github.com/bazelbuild/buildtools v0.0.0-20250404141143-f963a9712147 + github.com/bazelbuild/buildtools v0.0.0-20250410144851-f37c35dc3237 github.com/bazelbuild/rules_go v0.53.0 github.com/coreos/go-systemd/v22 v22.5.0 github.com/docker/docker v28.0.4+incompatible - github.com/edgelesssys/go-azguestattestation v0.0.0-20250212085035-c38c01af80ba + github.com/edgelesssys/go-azguestattestation v0.0.0-20250408071817-8c4457b235ff github.com/edgelesssys/go-tdx-qpl v0.0.0-20250129202750-607ac61e2377 github.com/foxboron/go-uefi v0.0.0-20250207204325-69fb7dba244f github.com/fsnotify/fsnotify v1.9.0 @@ -82,9 +82,9 @@ require ( github.com/hashicorp/go-kms-wrapping/wrappers/azurekeyvault/v2 v2.0.14 github.com/hashicorp/go-kms-wrapping/wrappers/gcpckms/v2 v2.0.13 github.com/hashicorp/go-version v1.7.0 - github.com/hashicorp/hc-install v0.9.1 + github.com/hashicorp/hc-install v0.9.2 github.com/hashicorp/hcl/v2 v2.23.0 - github.com/hashicorp/terraform-exec v0.22.0 + github.com/hashicorp/terraform-exec v0.23.0 github.com/hashicorp/terraform-json v0.24.0 github.com/hashicorp/terraform-plugin-framework v1.14.1 github.com/hashicorp/terraform-plugin-framework-validators v0.17.0 @@ -104,8 +104,8 @@ require ( github.com/schollz/progressbar/v3 v3.18.0 github.com/secure-systems-lab/go-securesystemslib v0.9.0 github.com/siderolabs/talos/pkg/machinery v1.9.5 - github.com/sigstore/rekor v1.3.9 - github.com/sigstore/sigstore v1.9.1 + github.com/sigstore/rekor v1.3.10 + github.com/sigstore/sigstore v1.9.3 github.com/spf13/afero v1.14.0 github.com/spf13/cobra v1.9.1 github.com/spf13/pflag v1.0.6 @@ -117,7 +117,7 @@ require ( go.etcd.io/etcd/client/v3 v3.5.21 go.uber.org/goleak v1.3.0 golang.org/x/crypto v0.37.0 - golang.org/x/exp v0.0.0-20250305212735-054e65f0b394 + golang.org/x/exp v0.0.0-20250408133849-7e4ce0ab07d0 golang.org/x/mod v0.24.0 golang.org/x/sys v0.32.0 golang.org/x/text v0.24.0 @@ -151,7 +151,7 @@ require ( cloud.google.com/go/longrunning v0.6.5 // indirect cloud.google.com/go/monitoring v1.24.0 // indirect github.com/AdaLogics/go-fuzz-headers v0.0.0-20230811130428-ced1acdcaa24 // indirect - github.com/Azure/azure-sdk-for-go/sdk/internal v1.11.0 // indirect + github.com/Azure/azure-sdk-for-go/sdk/internal v1.11.1 // indirect github.com/Azure/azure-sdk-for-go/sdk/keyvault/azkeys v0.10.0 // indirect github.com/Azure/azure-sdk-for-go/sdk/keyvault/internal v0.7.1 // indirect github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/internal v1.1.1 // indirect @@ -174,7 +174,7 @@ require ( github.com/Masterminds/sprig/v3 v3.3.0 // indirect github.com/Masterminds/squirrel v1.5.4 // indirect github.com/Microsoft/go-winio v0.6.2 // indirect - github.com/ProtonMail/go-crypto v1.1.3 // indirect + github.com/ProtonMail/go-crypto v1.1.6 // indirect github.com/agext/levenshtein v1.2.2 // indirect github.com/apparentlymart/go-textseg/v15 v15.0.0 // indirect github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 // indirect @@ -189,13 +189,13 @@ require ( github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.15 // indirect github.com/aws/aws-sdk-go-v2/service/sso v1.25.3 // indirect github.com/aws/aws-sdk-go-v2/service/ssooidc v1.30.1 // indirect - github.com/aws/aws-sdk-go-v2/service/sts v1.33.18 // indirect + github.com/aws/aws-sdk-go-v2/service/sts v1.33.19 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/blang/semver v3.5.1+incompatible // indirect github.com/blang/semver/v4 v4.0.0 // indirect github.com/cespare/xxhash/v2 v2.3.0 // indirect github.com/chai2010/gettext-go v1.0.2 // indirect - github.com/cloudflare/circl v1.5.0 // indirect + github.com/cloudflare/circl v1.6.0 // indirect github.com/cncf/xds/go v0.0.0-20250121191232-2f005788dc42 // indirect github.com/containerd/containerd v1.7.27 // indirect github.com/containerd/errdefs v0.3.0 // indirect @@ -206,7 +206,7 @@ require ( github.com/coreos/go-semver v0.3.1 // indirect github.com/cpuguy83/go-md2man/v2 v2.0.6 // indirect github.com/cyberphone/json-canonicalization v0.0.0-20220623050100-57a0ce2678a7 // indirect - github.com/cyphar/filepath-securejoin v0.3.6 // indirect + github.com/cyphar/filepath-securejoin v0.4.1 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/distribution/reference v0.6.0 // indirect github.com/docker/cli v27.5.0+incompatible // indirect @@ -235,14 +235,14 @@ require ( github.com/go-logr/stdr v1.2.2 // indirect github.com/go-logr/zapr v1.3.0 // indirect github.com/go-openapi/analysis v0.23.0 // indirect - github.com/go-openapi/errors v0.22.0 // indirect + github.com/go-openapi/errors v0.22.1 // indirect github.com/go-openapi/jsonpointer v0.21.0 // indirect github.com/go-openapi/jsonreference v0.21.0 // indirect github.com/go-openapi/loads v0.22.0 // indirect github.com/go-openapi/runtime v0.28.0 // indirect github.com/go-openapi/spec v0.21.0 // indirect github.com/go-openapi/strfmt v0.23.0 // indirect - github.com/go-openapi/swag v0.23.0 // indirect + github.com/go-openapi/swag v0.23.1 // indirect github.com/go-openapi/validate v0.24.0 // indirect github.com/go-task/slim-sprig/v3 v3.0.0 // indirect github.com/gobwas/glob v0.2.3 // indirect @@ -303,7 +303,7 @@ require ( github.com/lib/pq v1.10.9 // indirect github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de // indirect github.com/lithammer/dedent v1.1.0 // indirect - github.com/mailru/easyjson v0.7.7 // indirect + github.com/mailru/easyjson v0.9.0 // indirect github.com/mattn/go-colorable v0.1.13 // indirect github.com/mattn/go-runewidth v0.0.16 // indirect github.com/mitchellh/colorstring v0.0.0-20190213212951-d06e56a500db // indirect @@ -332,9 +332,9 @@ require ( github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c // indirect github.com/planetscale/vtprotobuf v0.6.1-0.20241121165744-79df5c4772f2 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect - github.com/prometheus/client_golang v1.20.5 // indirect + github.com/prometheus/client_golang v1.21.1 // indirect github.com/prometheus/client_model v0.6.1 // indirect - github.com/prometheus/common v0.55.0 // indirect + github.com/prometheus/common v0.62.0 // indirect github.com/prometheus/procfs v0.15.1 // indirect github.com/rivo/uniseg v0.4.7 // indirect github.com/rubenv/sql-migrate v1.7.1 // indirect @@ -343,7 +343,7 @@ require ( github.com/samber/lo v1.49.1 // indirect github.com/sassoftware/relic v7.2.1+incompatible // indirect github.com/shopspring/decimal v1.4.0 // indirect - github.com/sigstore/protobuf-specs v0.4.0 // indirect + github.com/sigstore/protobuf-specs v0.4.1 // indirect github.com/sirupsen/logrus v1.9.3 // indirect github.com/spf13/cast v1.7.0 // indirect github.com/stretchr/objx v0.5.2 // indirect diff --git a/go.sum b/go.sum index 1f2bf87bc..1bf998234 100644 --- a/go.sum +++ b/go.sum @@ -38,12 +38,12 @@ github.com/Azure/azure-sdk-for-go v68.0.0+incompatible h1:fcYLmCpyNYRnvJbPerq7U0 github.com/Azure/azure-sdk-for-go v68.0.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= github.com/Azure/azure-sdk-for-go/sdk/azcore v1.18.0 h1:Gt0j3wceWMwPmiazCa8MzMA0MfhmPIz0Qp0FJ6qcM0U= github.com/Azure/azure-sdk-for-go/sdk/azcore v1.18.0/go.mod h1:Ot/6aikWnKWi4l9QB7qVSwa8iMphQNqkWALMoNT3rzM= -github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.8.2 h1:F0gBpfdPLGsw+nsgk6aqqkZS1jiixa5WwFe3fk/T3Ys= -github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.8.2/go.mod h1:SqINnQ9lVVdRlyC8cd1lCI0SdX4n2paeABd2K8ggfnE= +github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.9.0 h1:OVoM452qUFBrX+URdH3VpR299ma4kfom0yB0URYky9g= +github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.9.0/go.mod h1:kUjrAo8bgEwLeZ/CmHqNl3Z/kPm7y6FKfxxK0izYUg4= github.com/Azure/azure-sdk-for-go/sdk/azidentity/cache v0.3.2 h1:yz1bePFlP5Vws5+8ez6T3HWXPmwOK7Yvq8QxDBD3SKY= github.com/Azure/azure-sdk-for-go/sdk/azidentity/cache v0.3.2/go.mod h1:Pa9ZNPuoNu/GztvBSKk9J1cDJW6vk/n0zLtV4mgd8N8= -github.com/Azure/azure-sdk-for-go/sdk/internal v1.11.0 h1:Bg8m3nq/X1DeePkAbCfb6ml6F3F0IunEhE8TMh+lY48= -github.com/Azure/azure-sdk-for-go/sdk/internal v1.11.0/go.mod h1:j2chePtV91HrC22tGoRX3sGY42uF13WzmmV80/OdVAA= +github.com/Azure/azure-sdk-for-go/sdk/internal v1.11.1 h1:FPKJS1T+clwv+OLGt13a8UjqeRuh0O4SJ3lUriThc+4= +github.com/Azure/azure-sdk-for-go/sdk/internal v1.11.1/go.mod h1:j2chePtV91HrC22tGoRX3sGY42uF13WzmmV80/OdVAA= github.com/Azure/azure-sdk-for-go/sdk/keyvault/azkeys v0.10.0 h1:m/sWOGCREuSBqg2htVQTBY8nOZpyajYztF0vUvSZTuM= github.com/Azure/azure-sdk-for-go/sdk/keyvault/azkeys v0.10.0/go.mod h1:Pu5Zksi2KrU7LPbZbNINx6fuVrUp/ffvpxdDj+i8LeE= github.com/Azure/azure-sdk-for-go/sdk/keyvault/internal v0.7.1 h1:FbH3BbSb4bvGluTesZZ+ttN/MDsnMmQP36OSnDuSXqw= @@ -116,8 +116,8 @@ github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERo github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU= github.com/Microsoft/hcsshim v0.11.7 h1:vl/nj3Bar/CvJSYo7gIQPyRWc9f3c6IeSNavBTSZNZQ= github.com/Microsoft/hcsshim v0.11.7/go.mod h1:MV8xMfmECjl5HdO7U/3/hFVnkmSBjAjmA09d4bExKcU= -github.com/ProtonMail/go-crypto v1.1.3 h1:nRBOetoydLeUb4nHajyO2bKqMLfWQ/ZPwkXqXxPxCFk= -github.com/ProtonMail/go-crypto v1.1.3/go.mod h1:rA3QumHc/FZ8pAHreoekgiAbzpNsfQAosU5td4SnOrE= +github.com/ProtonMail/go-crypto v1.1.6 h1:ZcV+Ropw6Qn0AX9brlQLAUXfqLBc7Bl+f/DmNxpLfdw= +github.com/ProtonMail/go-crypto v1.1.6/go.mod h1:rA3QumHc/FZ8pAHreoekgiAbzpNsfQAosU5td4SnOrE= github.com/Shopify/logrus-bugsnag v0.0.0-20171204204709-577dee27f20d h1:UrqY+r/OJnIp5u0s1SbQ8dVfLCZJsnvazdBP5hS4iRs= github.com/Shopify/logrus-bugsnag v0.0.0-20171204204709-577dee27f20d/go.mod h1:HI8ITrYtUY+O+ZhtlqUnD8+KwNPOyugEhfP9fdUIaEQ= github.com/agext/levenshtein v1.2.2 h1:0S/Yg6LYmFJ5stwQeRp6EeOcCbj7xiqQSdNelsXvaqE= @@ -140,14 +140,14 @@ github.com/aws/aws-sdk-go-v2 v1.36.3 h1:mJoei2CxPutQVxaATCzDUjcZEjVRdpsiiXi2o38y github.com/aws/aws-sdk-go-v2 v1.36.3/go.mod h1:LLXuLpgzEbD766Z5ECcRmi8AzSwfZItDtmABVkRLGzg= github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.10 h1:zAybnyUQXIZ5mok5Jqwlf58/TFE7uvd3IAsa1aF9cXs= github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.10/go.mod h1:qqvMj6gHLR/EXWZw4ZbqlPbQUyenf4h82UQUlKc+l14= -github.com/aws/aws-sdk-go-v2/config v1.29.13 h1:RgdPqWoE8nPpIekpVpDJsBckbqT4Liiaq9f35pbTh1Y= -github.com/aws/aws-sdk-go-v2/config v1.29.13/go.mod h1:NI28qs/IOUIRhsR7GQ/JdexoqRN9tDxkIrYZq0SOF44= -github.com/aws/aws-sdk-go-v2/credentials v1.17.66 h1:aKpEKaTy6n4CEJeYI1MNj97oSDLi4xro3UzQfwf5RWE= -github.com/aws/aws-sdk-go-v2/credentials v1.17.66/go.mod h1:xQ5SusDmHb/fy55wU0QqTy0yNfLqxzec59YcsRZB+rI= +github.com/aws/aws-sdk-go-v2/config v1.29.14 h1:f+eEi/2cKCg9pqKBoAIwRGzVb70MRKqWX4dg1BDcSJM= +github.com/aws/aws-sdk-go-v2/config v1.29.14/go.mod h1:wVPHWcIFv3WO89w0rE10gzf17ZYy+UVS1Geq8Iei34g= +github.com/aws/aws-sdk-go-v2/credentials v1.17.67 h1:9KxtdcIA/5xPNQyZRgUSpYOE6j9Bc4+D7nZua0KGYOM= +github.com/aws/aws-sdk-go-v2/credentials v1.17.67/go.mod h1:p3C44m+cfnbv763s52gCqrjaqyPikj9Sg47kUVaNZQQ= github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.30 h1:x793wxmUWVDhshP8WW2mlnXuFrO4cOd3HLBroh1paFw= github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.30/go.mod h1:Jpne2tDnYiFascUEs2AWHJL9Yp7A5ZVy3TNyxaAjD6M= -github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.71 h1:s43gLuY+zGmtpx+KybfFP4IckopmTfDOPdlf/L++N5I= -github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.71/go.mod h1:KH6wWmY3O3c/jVAjHk0MGzVAFDxkOSt42Eoe4ZO4ge0= +github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.72 h1:PcKMOZfp+kNtJTw2HF2op6SjDvwPBYRvz0Y24PQLUR4= +github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.72/go.mod h1:vq7/m7dahFXcdzWVOvvjasDI9RcsD3RsTfHmDundJYg= github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.34 h1:ZK5jHhnrioRkUNOc+hOgQKlUL5JeC3S6JgLxtQ+Rm0Q= github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.34/go.mod h1:p4VfIceZokChbA9FzMbRGz5OV+lekcVtHlPKEO0gSZY= github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.34 h1:SZwFm17ZUNNg5Np0ioo/gq8Mn6u9w19Mri8DnJ15Jf0= @@ -156,14 +156,14 @@ github.com/aws/aws-sdk-go-v2/internal/ini v1.8.3 h1:bIqFDwgGXXN1Kpp99pDOdKMTTb5d github.com/aws/aws-sdk-go-v2/internal/ini v1.8.3/go.mod h1:H5O/EsxDWyU+LP/V8i5sm8cxoZgc2fdNR9bxlOFrQTo= github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.34 h1:ZNTqv4nIdE/DiBfUUfXcLZ/Spcuz+RjeziUtNJackkM= github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.34/go.mod h1:zf7Vcd1ViW7cPqYWEHLHJkS50X0JS2IKz9Cgaj6ugrs= -github.com/aws/aws-sdk-go-v2/service/autoscaling v1.52.2 h1:OA5uEC/SrjRLhNGHgF/iS6YQz1bjlrCje9sERyLlGro= -github.com/aws/aws-sdk-go-v2/service/autoscaling v1.52.2/go.mod h1:CDqMoc3KRdZJ8qziW96J35lKH01Wq3B2aihtHj2JbRs= +github.com/aws/aws-sdk-go-v2/service/autoscaling v1.52.3 h1:QsKdBxtC8csnKt5BbV7D1op4Nf13p2YkTJIkppaCakw= +github.com/aws/aws-sdk-go-v2/service/autoscaling v1.52.3/go.mod h1:CDqMoc3KRdZJ8qziW96J35lKH01Wq3B2aihtHj2JbRs= github.com/aws/aws-sdk-go-v2/service/cloudfront v1.45.3 h1:xQnjN34F4I3a/I3Xj0g9vmD5hAqC7u5y3SC3eC6T1E8= github.com/aws/aws-sdk-go-v2/service/cloudfront v1.45.3/go.mod h1:FIBJ48TS+qJb+Ne4qJ+0NeIhtPTVXItXooTeNeVI4Po= -github.com/aws/aws-sdk-go-v2/service/ec2 v1.211.2 h1:KMoQ43HysbPqs1vufMn9h2UcUyc2WCMaKxYhExKJZuo= -github.com/aws/aws-sdk-go-v2/service/ec2 v1.211.2/go.mod h1:ouvGEfHbLaIlWwpDpOVWPWR+YwO0HDv3vm5tYLq8ImY= -github.com/aws/aws-sdk-go-v2/service/elasticloadbalancingv2 v1.45.1 h1:USXR7nfl+bu7HnR/M3KtnPD3wjlCXM72kYX+2PaIgEI= -github.com/aws/aws-sdk-go-v2/service/elasticloadbalancingv2 v1.45.1/go.mod h1:xnCC3vFBfOKpU6PcsCKL2ktgBTZfOwTGxj6V8/X3IS4= +github.com/aws/aws-sdk-go-v2/service/ec2 v1.211.3 h1:4dPHqFVVvFG+ntkVUXrMrY55+E5dzFfEpjFWdkdSxnc= +github.com/aws/aws-sdk-go-v2/service/ec2 v1.211.3/go.mod h1:ouvGEfHbLaIlWwpDpOVWPWR+YwO0HDv3vm5tYLq8ImY= +github.com/aws/aws-sdk-go-v2/service/elasticloadbalancingv2 v1.45.2 h1:vX70Z4lNSr7XsioU0uJq5yvxgI50sB66MvD+V/3buS4= +github.com/aws/aws-sdk-go-v2/service/elasticloadbalancingv2 v1.45.2/go.mod h1:xnCC3vFBfOKpU6PcsCKL2ktgBTZfOwTGxj6V8/X3IS4= github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.3 h1:eAh2A4b5IzM/lum78bZ590jy36+d/aFLgKF/4Vd1xPE= github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.3/go.mod h1:0yKJC/kb8sAnmlYa6Zs3QVYqaC8ug2AbnNChv5Ox3uA= github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.7.0 h1:lguz0bmOoGzozP9XfRJR1QIayEYo+2vP/No3OfLF0pU= @@ -172,22 +172,22 @@ github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.15 h1:dM9/92u2 github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.15/go.mod h1:SwFBy2vjtA0vZbjjaFtfN045boopadnoVPhu4Fv66vY= github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.15 h1:moLQUoVq91LiqT1nbvzDukyqAlCv89ZmwaHw/ZFlFZg= github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.15/go.mod h1:ZH34PJUc8ApjBIfgQCFvkWcUDBtl/WTD+uiYHjd8igA= -github.com/aws/aws-sdk-go-v2/service/resourcegroupstaggingapi v1.26.2 h1:SW+bplzotcNwVKph3FWsE4Zfk728edeFUCM5VmjbFy0= -github.com/aws/aws-sdk-go-v2/service/resourcegroupstaggingapi v1.26.2/go.mod h1:cgPfPTC/V3JqwCKed7Q6d0FrgarV7ltz4Bz6S4Q+Dqk= -github.com/aws/aws-sdk-go-v2/service/s3 v1.79.1 h1:2Ku1xwAohSSXHR1tpAnyVDSQSxoDMA+/NZBytW+f4qg= -github.com/aws/aws-sdk-go-v2/service/s3 v1.79.1/go.mod h1:U5SNqwhXB3Xe6F47kXvWihPl/ilGaEDe8HD/50Z9wxc= +github.com/aws/aws-sdk-go-v2/service/resourcegroupstaggingapi v1.26.3 h1:P87jejqS8WvQvRWyXlHUylt99VXt0y/WUIFuU6gBU7A= +github.com/aws/aws-sdk-go-v2/service/resourcegroupstaggingapi v1.26.3/go.mod h1:cgPfPTC/V3JqwCKed7Q6d0FrgarV7ltz4Bz6S4Q+Dqk= +github.com/aws/aws-sdk-go-v2/service/s3 v1.79.2 h1:tWUG+4wZqdMl/znThEk9tcCy8tTMxq8dW0JTgamohrY= +github.com/aws/aws-sdk-go-v2/service/s3 v1.79.2/go.mod h1:U5SNqwhXB3Xe6F47kXvWihPl/ilGaEDe8HD/50Z9wxc= github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.35.3 h1:9bxA21Y62N32bAo4tVYXBhJU+VtCVKPpXEIEsScM0kc= github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.35.3/go.mod h1:yGhDiLKguA3iFJYxbrQkQiNzuy+ddxesSZYWVeeEH5Q= github.com/aws/aws-sdk-go-v2/service/sso v1.25.3 h1:1Gw+9ajCV1jogloEv1RRnvfRFia2cL6c9cuKV2Ps+G8= github.com/aws/aws-sdk-go-v2/service/sso v1.25.3/go.mod h1:qs4a9T5EMLl/Cajiw2TcbNt2UNo/Hqlyp+GiuG4CFDI= github.com/aws/aws-sdk-go-v2/service/ssooidc v1.30.1 h1:hXmVKytPfTy5axZ+fYbR5d0cFmC3JvwLm5kM83luako= github.com/aws/aws-sdk-go-v2/service/ssooidc v1.30.1/go.mod h1:MlYRNmYu/fGPoxBQVvBYr9nyr948aY/WLUvwBMBJubs= -github.com/aws/aws-sdk-go-v2/service/sts v1.33.18 h1:xz7WvTMfSStb9Y8NpCT82FXLNC3QasqBfuAFHY4Pk5g= -github.com/aws/aws-sdk-go-v2/service/sts v1.33.18/go.mod h1:cQnB8CUnxbMU82JvlqjKR2HBOm3fe9pWorWBza6MBJ4= +github.com/aws/aws-sdk-go-v2/service/sts v1.33.19 h1:1XuUZ8mYJw9B6lzAkXhqHlJd/XvaX32evhproijJEZY= +github.com/aws/aws-sdk-go-v2/service/sts v1.33.19/go.mod h1:cQnB8CUnxbMU82JvlqjKR2HBOm3fe9pWorWBza6MBJ4= github.com/aws/smithy-go v1.22.3 h1:Z//5NuZCSW6R4PhQ93hShNbyBbn8BWCmCVCt+Q8Io5k= github.com/aws/smithy-go v1.22.3/go.mod h1:t1ufH5HMublsJYulve2RKmHDC15xu1f26kHCp/HgceI= -github.com/bazelbuild/buildtools v0.0.0-20250404141143-f963a9712147 h1:ZBUNa/l43NNUF68fymW+ByWbVF1/06ZTZbIZC1g5Pxc= -github.com/bazelbuild/buildtools v0.0.0-20250404141143-f963a9712147/go.mod h1:PLNUetjLa77TCCziPsz0EI8a6CUxgC+1jgmWv0H25tg= +github.com/bazelbuild/buildtools v0.0.0-20250410144851-f37c35dc3237 h1:C89DTMD6dcAnRfQot1V0jMlFPkkypSD1xQBzrzJfknY= +github.com/bazelbuild/buildtools v0.0.0-20250410144851-f37c35dc3237/go.mod h1:PLNUetjLa77TCCziPsz0EI8a6CUxgC+1jgmWv0H25tg= github.com/bazelbuild/rules_go v0.53.0 h1:u160DT+RRb+Xb2aSO4piN8xhs4aZvWz2UDXCq48F4ao= github.com/bazelbuild/rules_go v0.53.0/go.mod h1:xB1jfsYHWlnZyPPxzlOSst4q2ZAwS251Mp9Iw6TPuBc= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= @@ -216,8 +216,8 @@ github.com/chai2010/gettext-go v1.0.2 h1:1Lwwip6Q2QGsAdl/ZKPCwTe9fe0CjlUbqj5bFNS github.com/chai2010/gettext-go v1.0.2/go.mod h1:y+wnP2cHYaVj19NZhYKAwEMH2CI1gNHeQQ+5AjwawxA= github.com/chengxilo/virtualterm v1.0.4 h1:Z6IpERbRVlfB8WkOmtbHiDbBANU7cimRIof7mk9/PwM= github.com/chengxilo/virtualterm v1.0.4/go.mod h1:DyxxBZz/x1iqJjFxTFcr6/x+jSpqN0iwWCOK1q10rlY= -github.com/cloudflare/circl v1.5.0 h1:hxIWksrX6XN5a1L2TI/h53AGPhNHoUBo+TD1ms9+pys= -github.com/cloudflare/circl v1.5.0/go.mod h1:uddAzsPgqdMAYatqJ0lsjX1oECcQLIlRpzZh3pJrofs= +github.com/cloudflare/circl v1.6.0 h1:cr5JKic4HI+LkINy2lg3W2jF8sHCVTBncJr5gIIq7qk= +github.com/cloudflare/circl v1.6.0/go.mod h1:uddAzsPgqdMAYatqJ0lsjX1oECcQLIlRpzZh3pJrofs= github.com/cncf/xds/go v0.0.0-20250121191232-2f005788dc42 h1:Om6kYQYDUk5wWbT0t0q6pvyM49i9XZAv9dDrkDA7gjk= github.com/cncf/xds/go v0.0.0-20250121191232-2f005788dc42/go.mod h1:W+zGtBO5Y1IgJhy4+A9GOqVhqLpfZi+vwmdNXUehLA8= github.com/containerd/cgroups v1.1.0 h1:v8rEWFl6EoqHB+swVNjVoCJE8o3jX7e8nqBGPLaDFBM= @@ -247,8 +247,8 @@ github.com/creack/pty v1.1.21 h1:1/QdRyBaHHJP61QkWMXlOIBfsgdDeeKfK8SYVUWJKf0= github.com/creack/pty v1.1.21/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4= github.com/cyberphone/json-canonicalization v0.0.0-20220623050100-57a0ce2678a7 h1:vU+EP9ZuFUCYE0NYLwTSob+3LNEJATzNfP/DC7SWGWI= github.com/cyberphone/json-canonicalization v0.0.0-20220623050100-57a0ce2678a7/go.mod h1:uzvlm1mxhHkdfqitSA92i7Se+S9ksOn3a3qmv/kyOCw= -github.com/cyphar/filepath-securejoin v0.3.6 h1:4d9N5ykBnSp5Xn2JkhocYDkOpURL/18CYMpo6xB9uWM= -github.com/cyphar/filepath-securejoin v0.3.6/go.mod h1:Sdj7gXlvMcPZsbhwhQ33GguGLDGQL7h7bg04C/+u9jI= +github.com/cyphar/filepath-securejoin v0.4.1 h1:JyxxyPEaktOD+GAnqIqTf9A8tHyAG22rowi7HkoSU1s= +github.com/cyphar/filepath-securejoin v0.4.1/go.mod h1:Sdj7gXlvMcPZsbhwhQ33GguGLDGQL7h7bg04C/+u9jI= github.com/daniel-weisse/go-cryptsetup v0.0.0-20230705150314-d8c07bd1723c h1:ToajP6trZoiqlZ3Z4uoG1P02/wtqSw1AcowOXOYjATk= github.com/daniel-weisse/go-cryptsetup v0.0.0-20230705150314-d8c07bd1723c/go.mod h1:gZoZ0+POlM1ge/VUxWpMmZVNPzzMJ7l436CgkQ5+qzU= github.com/danieljoos/wincred v1.2.1 h1:dl9cBrupW8+r5250DYkYxocLeZ1Y4vB1kxgtjxw8GQs= @@ -281,8 +281,8 @@ github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4 github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= github.com/docker/libtrust v0.0.0-20160708172513-aabc10ec26b7 h1:UhxFibDNY/bfvqU5CAUmr9zpesgbU6SWc8/B4mflAE4= github.com/docker/libtrust v0.0.0-20160708172513-aabc10ec26b7/go.mod h1:cyGadeNEkKy96OOhEzfZl+yxihPEzKnqJwvfuSUqbZE= -github.com/edgelesssys/go-azguestattestation v0.0.0-20250212085035-c38c01af80ba h1:3eLZZbCil066H3RIC7a++C4jDTJSQ4NsOQnvvra+ELA= -github.com/edgelesssys/go-azguestattestation v0.0.0-20250212085035-c38c01af80ba/go.mod h1:Lz4QaomI4wU2YbatD4/W7vatW2Q35tnkoJezB1clscc= +github.com/edgelesssys/go-azguestattestation v0.0.0-20250408071817-8c4457b235ff h1:V6A5kD0+c1Qg4X72Lg+zxhCZk+par436sQdgLvMCBBc= +github.com/edgelesssys/go-azguestattestation v0.0.0-20250408071817-8c4457b235ff/go.mod h1:Lz4QaomI4wU2YbatD4/W7vatW2Q35tnkoJezB1clscc= github.com/edgelesssys/go-tdx-qpl v0.0.0-20250129202750-607ac61e2377 h1:5JMJiBhvOUUR7EZ0UyeSy7a1WrqB2eM+DX3odLSHAh4= github.com/edgelesssys/go-tdx-qpl v0.0.0-20250129202750-607ac61e2377/go.mod h1:IC72qyykUIWl0ZmSk53L4xbLCFDBEGZVaujUmPQOEyw= github.com/emicklei/go-restful/v3 v3.11.0 h1:rAQeMHw1c7zTmncogyy8VvRZwtkmkZ4FxERmMY4rD+g= @@ -328,10 +328,10 @@ github.com/go-errors/errors v1.4.2 h1:J6MZopCL4uSllY1OfXM374weqZFFItUbrImctkmUxI github.com/go-errors/errors v1.4.2/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og= github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 h1:+zs/tPmkDkHx3U66DAb0lQFJrpS6731Oaa12ikc+DiI= github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376/go.mod h1:an3vInlBmSxCcxctByoQdvwPiA7DTK7jaaFDBTtu0ic= -github.com/go-git/go-billy/v5 v5.6.0 h1:w2hPNtoehvJIxR00Vb4xX94qHQi/ApZfX+nBE2Cjio8= -github.com/go-git/go-billy/v5 v5.6.0/go.mod h1:sFDq7xD3fn3E0GOwUSZqHo9lrkmx8xJhA0ZrfvjBRGM= -github.com/go-git/go-git/v5 v5.13.0 h1:vLn5wlGIh/X78El6r3Jr+30W16Blk0CTcxTYcYPWi5E= -github.com/go-git/go-git/v5 v5.13.0/go.mod h1:Wjo7/JyVKtQgUNdXYXIepzWfJQkUEIGvkvVkiXRR/zw= +github.com/go-git/go-billy/v5 v5.6.2 h1:6Q86EsPXMa7c3YZ3aLAQsMA0VlWmy43r6FHqa/UNbRM= +github.com/go-git/go-billy/v5 v5.6.2/go.mod h1:rcFC2rAsp/erv7CMz9GczHcuD0D32fWzH+MJAU+jaUU= +github.com/go-git/go-git/v5 v5.14.0 h1:/MD3lCrGjCen5WfEAzKg00MJJffKhC8gzS80ycmCi60= +github.com/go-git/go-git/v5 v5.14.0/go.mod h1:Z5Xhoia5PcWA3NF8vRLURn9E5FRhSl7dGj9ItW3Wk5k= github.com/go-gorp/gorp/v3 v3.1.0 h1:ItKF/Vbuj31dmV4jxA1qblpSwkl9g1typ24xoe70IGs= github.com/go-gorp/gorp/v3 v3.1.0/go.mod h1:dLEjIyyRNiXvNZ8PSmzpt1GsWAUK8kjVhEpjH8TixEw= github.com/go-jose/go-jose/v3 v3.0.4 h1:Wp5HA7bLQcKnf6YYao/4kpRpVMp/yf6+pJKV8WFSaNY= @@ -350,8 +350,8 @@ github.com/go-logr/zapr v1.3.0 h1:XGdV8XW8zdwFiwOA2Dryh1gj2KRQyOOoNmBy4EplIcQ= github.com/go-logr/zapr v1.3.0/go.mod h1:YKepepNBd1u/oyhd/yQmtjVXmm9uML4IXUgMOwR8/Gg= github.com/go-openapi/analysis v0.23.0 h1:aGday7OWupfMs+LbmLZG4k0MYXIANxcuBTYUC03zFCU= github.com/go-openapi/analysis v0.23.0/go.mod h1:9mz9ZWaSlV8TvjQHLl2mUW2PbZtemkE8yA5v22ohupo= -github.com/go-openapi/errors v0.22.0 h1:c4xY/OLxUBSTiepAg3j/MHuAv5mJhnf53LLMWFB+u/w= -github.com/go-openapi/errors v0.22.0/go.mod h1:J3DmZScxCDufmIMsdOuDHxJbdOGC0xtUynjIx092vXE= +github.com/go-openapi/errors v0.22.1 h1:kslMRRnK7NCb/CvR1q1VWuEQCEIsBGn5GgKD9e+HYhU= +github.com/go-openapi/errors v0.22.1/go.mod h1:+n/5UdIqdVnLIJ6Q9Se8HNGUXYaY6CN8ImWzfi/Gzp0= github.com/go-openapi/jsonpointer v0.21.0 h1:YgdVicSA9vH5RiHs9TZW5oyafXZFc6+2Vc1rr/O9oNQ= github.com/go-openapi/jsonpointer v0.21.0/go.mod h1:IUyH9l/+uyhIYQ/PXVA41Rexl+kOkAPDdXEYns6fzUY= github.com/go-openapi/jsonreference v0.21.0 h1:Rs+Y7hSXT83Jacb7kFyjn4ijOuVGSvOdF2+tg1TRrwQ= @@ -364,8 +364,8 @@ github.com/go-openapi/spec v0.21.0 h1:LTVzPc3p/RzRnkQqLRndbAzjY0d0BCL72A6j3CdL9Z github.com/go-openapi/spec v0.21.0/go.mod h1:78u6VdPw81XU44qEWGhtr982gJ5BWg2c0I5XwVMotYk= github.com/go-openapi/strfmt v0.23.0 h1:nlUS6BCqcnAk0pyhi9Y+kdDVZdZMHfEKQiS4HaMgO/c= github.com/go-openapi/strfmt v0.23.0/go.mod h1:NrtIpfKtWIygRkKVsxh7XQMDQW5HKQl6S5ik2elW+K4= -github.com/go-openapi/swag v0.23.0 h1:vsEVJDUo2hPJ2tu0/Xc+4noaxyEffXNIs3cOULZ+GrE= -github.com/go-openapi/swag v0.23.0/go.mod h1:esZ8ITTYEsH1V2trKHjAN8Ai7xHb8RV+YSZ577vPjgQ= +github.com/go-openapi/swag v0.23.1 h1:lpsStH0n2ittzTnbaSloVZLuB5+fvSY/+hnagBjSNZU= +github.com/go-openapi/swag v0.23.1/go.mod h1:STZs8TbRvEQQKUA+JZNAm3EWlgaOBGpyFDqQnDHMef0= github.com/go-openapi/validate v0.24.0 h1:LdfDKwNbpB6Vn40xhTdNZAnfLECL81w+VX3BumrGD58= github.com/go-openapi/validate v0.24.0/go.mod h1:iyeX1sEufmv3nPbBdX3ieNviWnOZaJ1+zquzJEf2BAQ= github.com/go-playground/assert/v2 v2.2.0 h1:JvknZsQTYeFEAhQwI4qEt9cyV5ONwRHC+lYKSsYSR8s= @@ -377,8 +377,9 @@ github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91 github.com/go-playground/validator/v10 v10.26.0 h1:SP05Nqhjcvz81uJaRfEV0YBSSSGMc/iMaVtFbr3Sw2k= github.com/go-playground/validator/v10 v10.26.0/go.mod h1:I5QpIEbmr8On7W0TktmJAumgzX4CA1XNl4ZmDuVHKKo= github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= -github.com/go-sql-driver/mysql v1.8.1 h1:LedoTUt/eveggdHS9qUFC1EFSa8bU2+1pZjSRpvNJ1Y= github.com/go-sql-driver/mysql v1.8.1/go.mod h1:wEBSXgmK//2ZFJyE+qWnIsVGmvmEKlqwuVSjsCm7DZg= +github.com/go-sql-driver/mysql v1.9.1 h1:FrjNGn/BsJQjVRuSa8CBrM5BWA9BWoXXat3KrtSb/iI= +github.com/go-sql-driver/mysql v1.9.1/go.mod h1:qn46aNg1333BRMNU69Lq93t8du/dwxI64Gl8i5p1WMU= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/go-task/slim-sprig/v3 v3.0.0 h1:sUs3vkvUymDpBKi3qH1YSqBQk9+9D/8M2mN1vB6EwHI= github.com/go-task/slim-sprig/v3 v3.0.0/go.mod h1:W848ghGpv3Qj3dhTPRyJypKRiqCdHZiAzKg9hl15HA8= @@ -400,8 +401,8 @@ github.com/golang-jwt/jwt/v4 v4.5.1 h1:JdqV9zKUdtaa9gdPlywC3aeoEsR681PlKC+4F5gQg github.com/golang-jwt/jwt/v4 v4.5.1/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= github.com/golang-jwt/jwt/v5 v5.2.2 h1:Rl4B7itRWVtYIHFrSNd7vhTiz9UpLdi6gZhZ3wEeDy8= github.com/golang-jwt/jwt/v5 v5.2.2/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk= -github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE= -github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8 h1:f+oWsMOmNPc8JmEHVZIycC7hBoQxHH9pNKQORJNozsQ= +github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8/go.mod h1:wcDNUvekVysuuOpQKo3191zZyTpiI6se1N1ULghS0sw= github.com/golang/protobuf v1.1.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= @@ -522,14 +523,14 @@ github.com/hashicorp/go-version v1.7.0 h1:5tqGy27NaOTB8yJKUZELlFAS/LTKJkrmONwQKe github.com/hashicorp/go-version v1.7.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/hashicorp/golang-lru v0.5.4 h1:YDjusn29QI/Das2iO9M0BHnIbxPeyuCHsjMW+lJfyTc= github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= -github.com/hashicorp/hc-install v0.9.1 h1:gkqTfE3vVbafGQo6VZXcy2v5yoz2bE0+nhZXruCuODQ= -github.com/hashicorp/hc-install v0.9.1/go.mod h1:pWWvN/IrfeBK4XPeXXYkL6EjMufHkCK5DvwxeLKuBf0= +github.com/hashicorp/hc-install v0.9.2 h1:v80EtNX4fCVHqzL9Lg/2xkp62bbvQMnvPQ0G+OmtO24= +github.com/hashicorp/hc-install v0.9.2/go.mod h1:XUqBQNnuT4RsxoxiM9ZaUk0NX8hi2h+Lb6/c0OZnC/I= github.com/hashicorp/hcl/v2 v2.23.0 h1:Fphj1/gCylPxHutVSEOf2fBOh1VE4AuLV7+kbJf3qos= github.com/hashicorp/hcl/v2 v2.23.0/go.mod h1:62ZYHrXgPoX8xBnzl8QzbWq4dyDsDtfCRgIq1rbJEvA= github.com/hashicorp/logutils v1.0.0 h1:dLEQVugN8vlakKOUE3ihGLTZJRB4j+M2cdTm/ORI65Y= github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64= -github.com/hashicorp/terraform-exec v0.22.0 h1:G5+4Sz6jYZfRYUCg6eQgDsqTzkNXV+fP8l+uRmZHj64= -github.com/hashicorp/terraform-exec v0.22.0/go.mod h1:bjVbsncaeh8jVdhttWYZuBGj21FcYw6Ia/XfHcNO7lQ= +github.com/hashicorp/terraform-exec v0.23.0 h1:MUiBM1s0CNlRFsCLJuM5wXZrzA3MnPYEsiXmzATMW/I= +github.com/hashicorp/terraform-exec v0.23.0/go.mod h1:mA+qnx1R8eePycfwKkCRk3Wy65mwInvlpAeOwmA7vlY= github.com/hashicorp/terraform-json v0.24.0 h1:rUiyF+x1kYawXeRth6fKFm/MdfBS6+lW4NbeATsYz8Q= github.com/hashicorp/terraform-json v0.24.0/go.mod h1:Nfj5ubo9xbu9uiAoZVBsNOjvNKB66Oyrvtit74kC7ow= github.com/hashicorp/terraform-plugin-framework v1.14.1 h1:jaT1yvU/kEKEsxnbrn4ZHlgcxyIfjvZ41BLdlLk52fY= @@ -582,8 +583,8 @@ github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHm github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/kevinburke/ssh_config v1.2.0 h1:x584FjTGwHzMwvHx18PXxbBVzfnxogHaAReU4gf13a4= github.com/kevinburke/ssh_config v1.2.0/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= -github.com/keybase/go-keychain v0.0.0-20231219164618-57a3676c3af6 h1:IsMZxCuZqKuao2vNdfD82fjjgPLfyHLpR41Z88viRWs= -github.com/keybase/go-keychain v0.0.0-20231219164618-57a3676c3af6/go.mod h1:3VeWNIJaW+O5xpRQbPp0Ybqu1vJd/pm7s2F473HRrkw= +github.com/keybase/go-keychain v0.0.1 h1:way+bWYa6lDppZoZcgMbYsvC7GxljxrskdNInRtuthU= +github.com/keybase/go-keychain v0.0.1/go.mod h1:PdEILRW3i9D8JcdM+FmY6RwkHGnhHxXwkPPMeUgOK1k= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/klauspost/compress v1.17.11 h1:In6xLpyWOi1+C7tXUUWv2ot1QvBjxevKAaI6IXrJmUc= @@ -614,8 +615,8 @@ github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de h1:9TO3cAIGXtEhn github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de/go.mod h1:zAbeS9B/r2mtpb6U+EI2rYA5OAXxsYw6wTamcNW+zcE= github.com/lithammer/dedent v1.1.0 h1:VNzHMVCBNG1j0fh3OrsFRkVUwStdDArbgBWoPAffktY= github.com/lithammer/dedent v1.1.0/go.mod h1:jrXYCQtgg0nJiN+StA2KgR7w6CiQNv9Fd/Z9BP0jIOc= -github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0= -github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= +github.com/mailru/easyjson v0.9.0 h1:PrnmzHw7262yW8sTBwxi1PdJA3Iw/EKBa8psRf7d9a4= +github.com/mailru/easyjson v0.9.0/go.mod h1:1+xMtQp2MRNVL/V1bOzuP3aP8VNwRW55fQUto+XFtTU= github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= @@ -699,8 +700,8 @@ github.com/peterbourgon/diskv v2.0.1+incompatible h1:UBdAOUP5p4RWqPBg048CAvpKN+v github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5 h1:Ii+DKncOVM8Cu1Hc+ETb5K+23HdAMvESYE3ZJ5b5cMI= github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5/go.mod h1:iIss55rKnNBTvrwdmkUpLnDpZoAHvWaiq5+iMmen4AE= -github.com/pjbgf/sha1cd v0.3.0 h1:4D5XXmUUBUl/xQ6IjCkEAbqXskkq/4O7LmGn0AqMDs4= -github.com/pjbgf/sha1cd v0.3.0/go.mod h1:nZ1rrWOcGJ5uZgEEVL1VUM9iRQiZvWdbZjkKyFzPPsI= +github.com/pjbgf/sha1cd v0.3.2 h1:a9wb0bp1oC2TGwStyn0Umc/IGKQnEgF0vVaZ8QF8eo4= +github.com/pjbgf/sha1cd v0.3.2/go.mod h1:zQWigSxVmsHEZow5qaLtPYxpcKMMQpa09ixqBxuCS6A= github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c h1:+mdjkGKdHQG3305AYmdv1U2eRNDiU2ErMBj1gwrq8eQ= github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c/go.mod h1:7rwL4CYBLnjLxUqIJNnCWiEdr3bn6IUYi15bNlnbCCU= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= @@ -718,23 +719,23 @@ github.com/prashantv/gostub v1.1.0/go.mod h1:A5zLQHz7ieHGG7is6LLXLz7I8+3LZzsrV0P github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= github.com/prometheus/client_golang v1.1.0/go.mod h1:I1FGZT9+L76gKKOs5djB6ezCbFQP1xR9D75/vuwEF3g= -github.com/prometheus/client_golang v1.20.5 h1:cxppBPuYhUnsO6yo/aoRol4L7q7UFfdm+bR9r+8l63Y= -github.com/prometheus/client_golang v1.20.5/go.mod h1:PIEt8X02hGcP8JWbeHyeZ53Y/jReSnHgO035n//V5WE= +github.com/prometheus/client_golang v1.21.1 h1:DOvXXTqVzvkIewV/CDPFdejpMCGeMcbGCQ8YOmu+Ibk= +github.com/prometheus/client_golang v1.21.1/go.mod h1:U9NM32ykUErtVBxdvD3zfi+EuFkkaBvMb09mIfe0Zgg= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E= github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY= github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.6.0/go.mod h1:eBmuwkDJBwy6iBfxCBob6t6dR6ENT/y+J+Zk0j9GMYc= -github.com/prometheus/common v0.55.0 h1:KEi6DK7lXW/m7Ig5i47x0vRzuBsHuvJdi5ee6Y3G1dc= -github.com/prometheus/common v0.55.0/go.mod h1:2SECS4xJG1kd8XF9IcM1gMX6510RAEL65zxzNImwdc8= +github.com/prometheus/common v0.62.0 h1:xasJaQlnWAeyHdUBeGjXmutelfJHWMRr+Fg4QszZ2Io= +github.com/prometheus/common v0.62.0/go.mod h1:vyBcEuLSvWos9B1+CyL7JZ2up+uFzXhkqml0W5zIY1I= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/procfs v0.0.3/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ= github.com/prometheus/procfs v0.15.1 h1:YagwOFzUgYfKKHX6Dr+sHT7km/hxC76UB0learggepc= github.com/prometheus/procfs v0.15.1/go.mod h1:fB45yRUv8NstnjriLhBQLuOUt+WW4BsoGhij/e3PBqk= -github.com/redis/go-redis/v9 v9.7.0 h1:HhLSs+B6O021gwzl+locl0zEDnyNkxMtf/Z3NNBMa9E= -github.com/redis/go-redis/v9 v9.7.0/go.mod h1:f6zhXITC7JUJIlPEiBOTXxJgPLdZcA93GewI7inzyWw= +github.com/redis/go-redis/v9 v9.7.3 h1:YpPyAayJV+XErNsatSElgRZZVCwXX9QzkKYNvO7x0wM= +github.com/redis/go-redis/v9 v9.7.3/go.mod h1:bGUrSggJ9X9GUmZpZNEOQKaANxSGgOEBRltRTZHSvrA= github.com/regclient/regclient v0.8.2 h1:23BQ3jWgKYHHIXUhp/S9laVJDHDoOQaQCzXMJ4undVE= github.com/regclient/regclient v0.8.2/go.mod h1:uGyetv0o6VLyRDjtfeBqp/QBwRLJ3Hcn07/+8QbhNcM= github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= @@ -767,17 +768,17 @@ github.com/shopspring/decimal v1.4.0 h1:bxl37RwXBklmTi0C79JfXCEBD1cqqHt0bbgBAGFp github.com/shopspring/decimal v1.4.0/go.mod h1:gawqmDU56v4yIKSwfBSFip1HdCCXN8/+DMd9qYNcwME= github.com/siderolabs/talos/pkg/machinery v1.9.5 h1:hH+f48MLNoDUeyny1zR/i2fLqReK64Fq9WmIizL8GEs= github.com/siderolabs/talos/pkg/machinery v1.9.5/go.mod h1:yLkJ5ZvIpshDRhUVWjuSyTN6YAQiusSJF4/zj2/XfpY= -github.com/sigstore/protobuf-specs v0.4.0 h1:yoZbdh0kZYKOSiVbYyA8J3f2wLh5aUk2SQB7LgAfIdU= -github.com/sigstore/protobuf-specs v0.4.0/go.mod h1:FKW5NYhnnFQ/Vb9RKtQk91iYd0MKJ9AxyqInEwU6+OI= -github.com/sigstore/rekor v1.3.9 h1:sUjRpKVh/hhgqGMs0t+TubgYsksArZ6poLEC3MsGAzU= -github.com/sigstore/rekor v1.3.9/go.mod h1:xThNUhm6eNEmkJ/SiU/FVU7pLY2f380fSDZFsdDWlcM= -github.com/sigstore/sigstore v1.9.1 h1:bNMsfFATsMPaagcf+uppLk4C9rQZ2dh5ysmCxQBYWaw= -github.com/sigstore/sigstore v1.9.1/go.mod h1:zUoATYzR1J3rLNp3jmp4fzIJtWdhC3ZM6MnpcBtnsE4= +github.com/sigstore/protobuf-specs v0.4.1 h1:5SsMqZbdkcO/DNHudaxuCUEjj6x29tS2Xby1BxGU7Zc= +github.com/sigstore/protobuf-specs v0.4.1/go.mod h1:+gXR+38nIa2oEupqDdzg4qSBT0Os+sP7oYv6alWewWc= +github.com/sigstore/rekor v1.3.10 h1:/mSvRo4MZ/59ECIlARhyykAlQlkmeAQpvBPlmJtZOCU= +github.com/sigstore/rekor v1.3.10/go.mod h1:JvryKJ40O0XA48MdzYUPu0y4fyvqt0C4iSY7ri9iu3A= +github.com/sigstore/sigstore v1.9.3 h1:y2qlTj+vh+Or3ictKuR3JUFawZPdDxAjrWkeFhon0OQ= +github.com/sigstore/sigstore v1.9.3/go.mod h1:VwYkiw0G0dRtwL25KSs04hCyVFF6CYMd/qvNeYrl7EQ= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ= github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= -github.com/skeema/knownhosts v1.3.0 h1:AM+y0rI04VksttfwjkSTNQorvGqmwATnvnAHpSgc0LY= -github.com/skeema/knownhosts v1.3.0/go.mod h1:sPINvnADmT/qYH1kfv+ePMmOBTH6Tbl7b5LvTDjFK7M= +github.com/skeema/knownhosts v1.3.1 h1:X2osQ+RAjK76shCbvhHHHVl3ZlgDm8apHEHFqRjnBY8= +github.com/skeema/knownhosts v1.3.1/go.mod h1:r7KTdC8l4uxWRyK2TpQZ/1o5HaSzh06ePQNxPwTcfiY= github.com/spf13/afero v1.14.0 h1:9tH6MapGnn/j0eb0yIXiLjERO8RB6xIVZRDCX7PtqWA= github.com/spf13/afero v1.14.0/go.mod h1:acJQ8t0ohCGuMN3O+Pv0V0hgMxNYDlvdk+VTfyZmbYo= github.com/spf13/cast v1.7.0 h1:ntdiHjuueXFgm5nzDRdOS4yfT43P5Fnud6DH50rz/7w= @@ -908,8 +909,8 @@ golang.org/x/crypto v0.6.0/go.mod h1:OFC/31mSvZgRz0V1QTNCzfAI1aIRzbiufJtkMIlEp58 golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU= golang.org/x/crypto v0.37.0 h1:kJNSjF/Xp7kU0iB2Z+9viTPMW4EqqsrywMXLJOOsXSE= golang.org/x/crypto v0.37.0/go.mod h1:vg+k43peMZ0pUMhYmVAWysMK35e6ioLh3wB8ZCAfbVc= -golang.org/x/exp v0.0.0-20250305212735-054e65f0b394 h1:nDVHiLt8aIbd/VzvPWN6kSOPE7+F/fNFDSXLVYkE/Iw= -golang.org/x/exp v0.0.0-20250305212735-054e65f0b394/go.mod h1:sIifuuw/Yco/y6yb6+bDNfyeQ/MdPUy/hKEMYQV17cM= +golang.org/x/exp v0.0.0-20250408133849-7e4ce0ab07d0 h1:R84qjqJb5nVJMxqWYb3np9L5ZsaDtB+a39EqjV0JSUM= +golang.org/x/exp v0.0.0-20250408133849-7e4ce0ab07d0/go.mod h1:S9Xr4PYopiDyqSyp5NjCrhFrqg6A5zA2E/iPHPhqnS8= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= diff --git a/hack/tools/go.mod b/hack/tools/go.mod index e11330aed..cf34698bb 100644 --- a/hack/tools/go.mod +++ b/hack/tools/go.mod @@ -4,7 +4,7 @@ go 1.24.2 require ( github.com/google/go-licenses v1.6.0 - github.com/google/keep-sorted v0.6.0 + github.com/google/keep-sorted v0.6.1 github.com/katexochen/sh/v3 v3.11.0 golang.org/x/tools v0.32.0 golang.org/x/vuln v1.1.4 diff --git a/hack/tools/go.sum b/hack/tools/go.sum index b007f63a2..d94463da2 100644 --- a/hack/tools/go.sum +++ b/hack/tools/go.sum @@ -180,8 +180,8 @@ github.com/google/go-licenses v1.6.0 h1:MM+VCXf0slYkpWO0mECvdYDVCxZXIQNal5wqUIXE github.com/google/go-licenses v1.6.0/go.mod h1:Z8jgz2isEhdenOqd/00pq7I4y4k1xVVQJv415otjclo= github.com/google/go-replayers/httpreplay v1.1.1 h1:H91sIMlt1NZzN7R+/ASswyouLJfW0WLW7fhyUFvDEkY= github.com/google/go-replayers/httpreplay v1.1.1/go.mod h1:gN9GeLIs7l6NUoVaSSnv2RiqK1NiwAmD0MrKeC9IIks= -github.com/google/keep-sorted v0.6.0 h1:mrDMFnTUxsLatnYBBIJA/1j/Z3ZXTub/pCzbKvA2Ga8= -github.com/google/keep-sorted v0.6.0/go.mod h1:JYy9vljs7P8b3QdPOQkywA+4u36FUHwsNITZIpJyPkE= +github.com/google/keep-sorted v0.6.1 h1:LNEdDKYxoXOrn4ZXC+FdUfJCVbUjhb2QPIBs5XISXCI= +github.com/google/keep-sorted v0.6.1/go.mod h1:JYy9vljs7P8b3QdPOQkywA+4u36FUHwsNITZIpJyPkE= github.com/google/licenseclassifier v0.0.0-20210722185704-3043a050f148 h1:TJsAqW6zLRMDTyGmc9TPosfn9OyVlHs8Hrn3pY6ONSY= github.com/google/licenseclassifier v0.0.0-20210722185704-3043a050f148/go.mod h1:rq9F0RSpNKlrefnf6ZYMHKUnEJBCNzf6AcCXMYBeYvE= github.com/google/martian v2.1.0+incompatible h1:/CP5g8u/VJHijgedC/Legn3BAbAaWPgecwXBIDzw5no= From 4a93870d1d37fbba1b648b5dbe4c181807489645 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 15 Apr 2025 08:27:41 +0200 Subject: [PATCH 222/311] deps: update marocchino/sticky-pull-request-comment action to v2.9.2 (#3765) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/test-unittest.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test-unittest.yml b/.github/workflows/test-unittest.yml index 4226db3d3..9a99831f0 100644 --- a/.github/workflows/test-unittest.yml +++ b/.github/workflows/test-unittest.yml @@ -69,7 +69,7 @@ jobs: - name: Comment coverage if: steps.coverage.outputs.uploadable == 'true' && github.event_name == 'pull_request' - uses: marocchino/sticky-pull-request-comment@52423e01640425a022ef5fd42c6fb5f633a02728 # v2.9.1 + uses: marocchino/sticky-pull-request-comment@67d0dec7b07ed060a405f9b2a64b8ab319fdd7db # v2.9.2 with: header: coverage path: coverage_diff.md From abac61b577b686e797a7e1e8e0fbb889d464bf86 Mon Sep 17 00:00:00 2001 From: edgelessci <71088502+edgelessci@users.noreply.github.com> Date: Wed, 16 Apr 2025 07:35:05 +0200 Subject: [PATCH 223/311] image: update measurements and image version (#3768) Co-authored-by: edgelessci --- .../measurements/measurements_enterprise.go | 16 ++++++++-------- internal/config/image_enterprise.go | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/internal/attestation/measurements/measurements_enterprise.go b/internal/attestation/measurements/measurements_enterprise.go index 4f5d89c0e..2476b297a 100644 --- a/internal/attestation/measurements/measurements_enterprise.go +++ b/internal/attestation/measurements/measurements_enterprise.go @@ -19,14 +19,14 @@ package measurements // revive:disable:var-naming var ( - aws_AWSNitroTPM = M{0: {Expected: []byte{0x73, 0x7f, 0x76, 0x7a, 0x12, 0xf5, 0x4e, 0x70, 0xee, 0xcb, 0xc8, 0x68, 0x40, 0x11, 0x32, 0x3a, 0xe2, 0xfe, 0x2d, 0xd9, 0xf9, 0x07, 0x85, 0x57, 0x79, 0x69, 0xd7, 0xa2, 0x01, 0x3e, 0x8c, 0x12}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x89, 0x32, 0x5d, 0xdd, 0x91, 0x04, 0x5b, 0x2f, 0xf5, 0x2e, 0xbe, 0x5e, 0x7c, 0xde, 0x17, 0x4c, 0x4d, 0xc7, 0x18, 0x2e, 0x5a, 0xb4, 0xa6, 0x3a, 0x09, 0x28, 0x15, 0x97, 0x69, 0x5c, 0xfe, 0xa2}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xf9, 0xa7, 0x91, 0x53, 0x68, 0x55, 0x6d, 0x6b, 0x42, 0x2e, 0x47, 0x0a, 0x0a, 0xc3, 0x6a, 0x9b, 0x43, 0xdc, 0x31, 0xb6, 0x1e, 0xfd, 0xea, 0x78, 0x69, 0xbd, 0x88, 0xb5, 0x1d, 0x87, 0x63, 0xd1}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xcf, 0x6b, 0x2f, 0xad, 0xfa, 0xea, 0x99, 0xdc, 0x54, 0x01, 0x67, 0x34, 0x9d, 0x83, 0x74, 0xc9, 0x6c, 0x29, 0x05, 0xfd, 0xab, 0xe4, 0x5f, 0x30, 0xae, 0x12, 0xe3, 0xe3, 0x67, 0xca, 0x26, 0x78}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - aws_AWSSEVSNP = M{0: {Expected: []byte{0xd6, 0xdf, 0x85, 0x53, 0x58, 0xf5, 0xb1, 0x0f, 0x06, 0xf0, 0xfa, 0xb3, 0xf4, 0x08, 0xad, 0x26, 0xcd, 0x16, 0x5a, 0x29, 0x49, 0xba, 0xd6, 0x9e, 0x2c, 0xc7, 0x56, 0x92, 0x52, 0x9e, 0x66, 0x2a}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xb7, 0x63, 0x0b, 0x40, 0x63, 0x49, 0x5a, 0x47, 0xa9, 0xf7, 0xc6, 0xdb, 0x15, 0xa0, 0xd7, 0x77, 0x6b, 0x54, 0xf3, 0x18, 0x88, 0x55, 0x9e, 0xc3, 0xcc, 0x20, 0xf4, 0xce, 0x19, 0xb7, 0x64, 0x44}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x3c, 0x5c, 0xbc, 0xd8, 0x9d, 0x9c, 0xda, 0xe3, 0x70, 0x29, 0x77, 0x1f, 0xc6, 0x93, 0x00, 0x04, 0x30, 0x55, 0x20, 0x89, 0x43, 0x50, 0x1c, 0x82, 0x37, 0x02, 0x33, 0xf6, 0x47, 0x86, 0x12, 0xa3}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x0b, 0xf8, 0x4c, 0xb2, 0xaf, 0x9e, 0x8b, 0x84, 0x1d, 0xf2, 0xc9, 0x64, 0x60, 0x3f, 0x9a, 0x8b, 0x3d, 0x59, 0x39, 0xf7, 0xf4, 0x37, 0xf3, 0x54, 0xba, 0xe7, 0x38, 0xbf, 0xef, 0x03, 0x4a, 0x19}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - azure_AzureSEVSNP = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x4f, 0xd9, 0x10, 0xf9, 0x0d, 0x69, 0x04, 0x66, 0xc2, 0x08, 0x8a, 0xce, 0x6a, 0xb4, 0x29, 0x76, 0x69, 0xf6, 0xef, 0x7b, 0x05, 0xf5, 0x03, 0xd2, 0x09, 0x0b, 0x66, 0xee, 0x22, 0x4a, 0x28, 0x34}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x67, 0x8b, 0xcc, 0x11, 0x64, 0x26, 0xc1, 0x42, 0x5c, 0x0a, 0x9d, 0x4e, 0xee, 0xfe, 0x6c, 0x9c, 0x1b, 0x33, 0x4c, 0x93, 0xe8, 0xe6, 0xd1, 0xaa, 0xa5, 0xfc, 0xcd, 0x36, 0x13, 0x34, 0x0a, 0xc6}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x91, 0x57, 0xa4, 0x12, 0x26, 0x09, 0x6c, 0x74, 0x40, 0x98, 0xd2, 0x1d, 0x4d, 0x91, 0xd2, 0xdd, 0x84, 0xe8, 0x1a, 0xd1, 0x7c, 0xf1, 0x73, 0x11, 0xcc, 0xc6, 0xeb, 0x8c, 0xaa, 0x40, 0xa2, 0xf6}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - azure_AzureTDX = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x22, 0x79, 0x63, 0x53, 0x43, 0xce, 0x03, 0xc8, 0xe1, 0xcd, 0x4b, 0x62, 0x93, 0xb7, 0x43, 0xbf, 0xea, 0xfb, 0xe1, 0x4e, 0x65, 0xaf, 0x59, 0x33, 0xe5, 0x3b, 0x02, 0x35, 0x27, 0x41, 0x92, 0xe8}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xe1, 0x50, 0xcb, 0x1b, 0x9b, 0x95, 0x6f, 0x84, 0x67, 0xdd, 0x65, 0x12, 0x91, 0x6c, 0x7c, 0x84, 0x39, 0x24, 0xaf, 0x29, 0xb6, 0x7a, 0xff, 0x8e, 0x1a, 0xcc, 0xb9, 0xb4, 0x03, 0xbe, 0x1e, 0x87}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x00, 0xa4, 0x39, 0xd3, 0xca, 0x1d, 0x23, 0x67, 0xd2, 0x8c, 0x8f, 0x7e, 0x99, 0x7a, 0xb6, 0x52, 0x1a, 0x53, 0x79, 0x5b, 0x79, 0xf9, 0x8e, 0x35, 0x44, 0x63, 0xb9, 0xb1, 0x7a, 0x49, 0x2c, 0xcf}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + aws_AWSNitroTPM = M{0: {Expected: []byte{0x73, 0x7f, 0x76, 0x7a, 0x12, 0xf5, 0x4e, 0x70, 0xee, 0xcb, 0xc8, 0x68, 0x40, 0x11, 0x32, 0x3a, 0xe2, 0xfe, 0x2d, 0xd9, 0xf9, 0x07, 0x85, 0x57, 0x79, 0x69, 0xd7, 0xa2, 0x01, 0x3e, 0x8c, 0x12}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xee, 0x8a, 0xf2, 0x74, 0x96, 0x52, 0x06, 0x90, 0xd2, 0xfc, 0x79, 0x9e, 0xbe, 0x23, 0xf1, 0xaa, 0x1f, 0x6d, 0xd1, 0x87, 0x21, 0xcb, 0x33, 0xb4, 0x33, 0xf0, 0x5c, 0xcb, 0x7f, 0xc3, 0x5a, 0x1c}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xa2, 0x5c, 0xb7, 0x08, 0x52, 0x4d, 0x13, 0x33, 0xd4, 0x50, 0x04, 0xd4, 0x35, 0xad, 0xc2, 0x55, 0x91, 0x4b, 0x40, 0xa1, 0x64, 0xed, 0x88, 0x00, 0xfc, 0x9f, 0x62, 0x6a, 0x65, 0x1c, 0x79, 0xe9}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x02, 0x99, 0xb9, 0xc6, 0xa8, 0x3a, 0x4a, 0xf2, 0xf3, 0xd8, 0xb1, 0x97, 0x89, 0xd0, 0x8f, 0x99, 0x8f, 0xa8, 0x87, 0x3f, 0xc2, 0xdb, 0xd0, 0x3e, 0xaa, 0xf3, 0x44, 0x29, 0x65, 0xbf, 0xbd, 0xbd}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + aws_AWSSEVSNP = M{0: {Expected: []byte{0xd6, 0xdf, 0x85, 0x53, 0x58, 0xf5, 0xb1, 0x0f, 0x06, 0xf0, 0xfa, 0xb3, 0xf4, 0x08, 0xad, 0x26, 0xcd, 0x16, 0x5a, 0x29, 0x49, 0xba, 0xd6, 0x9e, 0x2c, 0xc7, 0x56, 0x92, 0x52, 0x9e, 0x66, 0x2a}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x5f, 0xa7, 0x36, 0x11, 0xd7, 0x4a, 0xd4, 0x22, 0xe8, 0x29, 0x9f, 0x83, 0xef, 0xa6, 0x17, 0xc6, 0x94, 0x5a, 0x5e, 0x20, 0xce, 0x82, 0x7c, 0x6a, 0xfd, 0x87, 0x29, 0x78, 0x90, 0xf4, 0xcb, 0x3f}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x8a, 0x03, 0xe7, 0xec, 0x3d, 0xa6, 0xdd, 0xd0, 0xdd, 0xde, 0xae, 0xc6, 0x3d, 0x76, 0x80, 0x5c, 0x25, 0x60, 0x34, 0x29, 0x0a, 0x52, 0xe2, 0xd0, 0x58, 0xf5, 0xf4, 0x42, 0xea, 0x8f, 0xef, 0xb2}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x12, 0xbd, 0x8e, 0x7c, 0x64, 0x5a, 0xd5, 0xa5, 0x0c, 0xb2, 0x15, 0xf4, 0x3c, 0x01, 0xbe, 0x55, 0x3d, 0x8d, 0x67, 0x52, 0xd4, 0xa2, 0x1a, 0xcc, 0x3f, 0x7f, 0xac, 0xd6, 0x1d, 0x37, 0xe8, 0xfc}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + azure_AzureSEVSNP = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x3e, 0x7d, 0x9f, 0x13, 0xb8, 0xdb, 0x7f, 0x66, 0xfe, 0x33, 0xa1, 0xb1, 0xf1, 0xfc, 0x70, 0xe5, 0x42, 0x6e, 0x34, 0x38, 0x7a, 0x03, 0xb5, 0x1b, 0x17, 0x97, 0x55, 0x27, 0x0d, 0x3d, 0x42, 0x21}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xde, 0x1d, 0xed, 0xce, 0x6a, 0x78, 0x0c, 0xf5, 0x58, 0xdd, 0x1c, 0xaf, 0x6e, 0xb4, 0x05, 0xcf, 0x74, 0x35, 0x87, 0xe9, 0x4f, 0x32, 0x89, 0x6e, 0xfb, 0xb1, 0x6b, 0x34, 0x52, 0xc9, 0xd5, 0x76}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x1a, 0x4e, 0x11, 0x9e, 0x54, 0x0a, 0x24, 0x05, 0x64, 0x72, 0xa9, 0x27, 0x04, 0x89, 0x0c, 0x96, 0x62, 0x53, 0xcd, 0x55, 0x1c, 0xf8, 0xf0, 0x8a, 0x8a, 0x7c, 0xbd, 0xff, 0x5b, 0xdc, 0x4f, 0x33}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + azure_AzureTDX = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xd2, 0xaa, 0x12, 0x86, 0x0b, 0xa3, 0xe0, 0xb4, 0xb0, 0xc3, 0x2d, 0xf8, 0x39, 0x35, 0xe5, 0x3e, 0xe5, 0x51, 0x85, 0xb6, 0x41, 0x51, 0xba, 0x88, 0x28, 0x43, 0x44, 0x0c, 0x04, 0x60, 0x2a, 0x40}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xae, 0x33, 0xf5, 0x07, 0xc8, 0xfb, 0xf2, 0xf0, 0x9b, 0x5f, 0x24, 0xb6, 0x62, 0x50, 0x45, 0xe2, 0xed, 0x69, 0xd5, 0x13, 0x83, 0x97, 0x9f, 0x4d, 0xd3, 0x8a, 0x5c, 0xe4, 0xdd, 0xed, 0x3b, 0x34}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x0b, 0x34, 0x49, 0xd3, 0x21, 0x35, 0xc1, 0x80, 0xce, 0x88, 0xc6, 0x8a, 0x9c, 0x92, 0x7b, 0xf7, 0x9f, 0xf0, 0x22, 0xc5, 0x96, 0x42, 0xec, 0xc9, 0x84, 0x93, 0x42, 0x3e, 0x54, 0xd7, 0xc8, 0x7b}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} azure_AzureTrustedLaunch M - gcp_GCPSEVES = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xa9, 0x47, 0x45, 0x44, 0xe0, 0x42, 0xca, 0x41, 0xc1, 0x2a, 0x0f, 0x42, 0xff, 0x55, 0x9a, 0x58, 0xf7, 0x5b, 0x51, 0x17, 0xb9, 0x57, 0x29, 0x0c, 0xf9, 0x0d, 0x4b, 0x68, 0xbd, 0xe5, 0x35, 0x7e}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xc3, 0xd1, 0xa8, 0x9b, 0x19, 0x58, 0x22, 0xbb, 0x59, 0x97, 0x1e, 0x9c, 0x76, 0xa0, 0xe9, 0x29, 0x3a, 0x9d, 0x9e, 0x15, 0x05, 0xc9, 0xf6, 0xbe, 0xf1, 0x6a, 0xf0, 0xae, 0x23, 0x80, 0x22, 0xad}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x53, 0xc0, 0xd3, 0xad, 0xc8, 0x8d, 0x06, 0xb9, 0x97, 0x88, 0xa4, 0x95, 0x62, 0xa7, 0xd3, 0x80, 0x2d, 0x68, 0xb8, 0x75, 0xff, 0x8d, 0x84, 0x78, 0x6d, 0x77, 0x73, 0x6e, 0x57, 0xbc, 0x92, 0xe0}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - gcp_GCPSEVSNP = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xa1, 0xbe, 0x33, 0x1a, 0xcf, 0x7d, 0xd9, 0xb8, 0x95, 0x84, 0x9d, 0xa2, 0xce, 0x63, 0xe7, 0xed, 0xb5, 0x49, 0x89, 0x0e, 0x14, 0x3d, 0xb6, 0x6e, 0xee, 0x4d, 0x10, 0x08, 0x49, 0x34, 0x90, 0x71}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x72, 0xc7, 0x9f, 0xf0, 0x68, 0x94, 0xb8, 0x4d, 0x25, 0x37, 0xfa, 0x12, 0x61, 0xb5, 0x68, 0xd2, 0x41, 0xcf, 0x67, 0xe7, 0xa9, 0xd4, 0x5a, 0xb0, 0xeb, 0x18, 0x02, 0xa5, 0xfe, 0x52, 0x15, 0x47}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x2f, 0xa9, 0xea, 0xfa, 0x16, 0x2e, 0x49, 0xbb, 0x85, 0x7f, 0x6d, 0xdc, 0x77, 0x64, 0x02, 0x42, 0x86, 0xbd, 0xad, 0xe9, 0x64, 0x14, 0x08, 0x49, 0x47, 0xe6, 0x64, 0x77, 0x88, 0xac, 0x5d, 0x1d}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - openstack_QEMUVTPM = M{4: {Expected: []byte{0x08, 0x50, 0x3d, 0xed, 0xda, 0x2e, 0xef, 0x16, 0x7f, 0xf9, 0xe6, 0x58, 0xf1, 0x74, 0xe0, 0x03, 0x30, 0x26, 0xba, 0xe6, 0x90, 0xa7, 0x3f, 0x65, 0xfa, 0x16, 0x77, 0x6d, 0x64, 0x15, 0xaf, 0xfc}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x40, 0xf7, 0xa2, 0x74, 0xe5, 0xfa, 0xb3, 0x81, 0x84, 0xbb, 0x63, 0xbf, 0xe0, 0xaf, 0xf2, 0xb9, 0x2c, 0x5e, 0x47, 0xcf, 0xfa, 0xf1, 0x41, 0x28, 0xe2, 0x81, 0xd0, 0x68, 0xac, 0xca, 0x15, 0xac}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x52, 0x4c, 0x96, 0x87, 0xf7, 0x36, 0x86, 0x50, 0xfc, 0x17, 0x36, 0x33, 0x04, 0x90, 0xfe, 0x1e, 0x1d, 0xab, 0x95, 0xd5, 0x53, 0x4f, 0xa3, 0xb2, 0x39, 0x9d, 0xbd, 0xd3, 0x69, 0x10, 0xcb, 0x25}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + gcp_GCPSEVES = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x89, 0xf2, 0x11, 0xb5, 0x17, 0xb7, 0x94, 0x75, 0xa3, 0xca, 0x5f, 0x3c, 0xa3, 0x11, 0x8d, 0x66, 0x34, 0xf6, 0xde, 0xc4, 0xc8, 0x67, 0xb1, 0x82, 0xae, 0xef, 0xaf, 0xc9, 0x6b, 0x4a, 0x3c, 0x33}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xa0, 0x05, 0xd8, 0xe0, 0xd6, 0x93, 0x95, 0x01, 0x8c, 0xab, 0x12, 0x83, 0xc0, 0xce, 0x02, 0x30, 0x84, 0xc2, 0xd7, 0x70, 0x78, 0x03, 0xa1, 0xae, 0x21, 0xeb, 0x18, 0x9a, 0x36, 0xcb, 0x7b, 0xe1}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x08, 0x95, 0x7e, 0x53, 0x83, 0xa2, 0xa8, 0x56, 0x0b, 0x5d, 0x48, 0x23, 0x0f, 0x2e, 0xce, 0xd5, 0x75, 0x26, 0x06, 0x40, 0xb4, 0x64, 0xed, 0x07, 0xc0, 0x6c, 0x37, 0xcb, 0xce, 0xe5, 0x51, 0x97}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + gcp_GCPSEVSNP = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x9b, 0xd5, 0x92, 0x53, 0xb4, 0x85, 0x36, 0x37, 0x8e, 0xe4, 0xb8, 0x7f, 0x4a, 0x16, 0x32, 0x33, 0xc3, 0x0f, 0x36, 0x23, 0xf6, 0x76, 0x3d, 0x7b, 0x46, 0x38, 0x5b, 0x87, 0x3d, 0x35, 0xdd, 0xa9}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xbb, 0x72, 0xa6, 0x93, 0x9d, 0x66, 0x9e, 0x41, 0x14, 0x2f, 0x58, 0x4d, 0x18, 0xd8, 0x6e, 0xd0, 0xef, 0x6e, 0x6f, 0x80, 0x73, 0x70, 0x5a, 0x67, 0x93, 0xb5, 0x93, 0x2b, 0x95, 0x15, 0x0b, 0x1c}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x6c, 0x8a, 0xc7, 0x75, 0xfe, 0x71, 0x88, 0xcf, 0x6f, 0x94, 0x84, 0x52, 0x2d, 0x70, 0xf4, 0xa6, 0x44, 0x7c, 0x2b, 0xca, 0x76, 0xe8, 0x05, 0x61, 0x66, 0xd3, 0xa7, 0x28, 0x99, 0x01, 0x73, 0x5d}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + openstack_QEMUVTPM = M{4: {Expected: []byte{0x6f, 0x85, 0xf2, 0xea, 0x27, 0xf5, 0x82, 0x42, 0x51, 0xf0, 0x37, 0xa6, 0x59, 0x98, 0xe8, 0x09, 0x35, 0x9e, 0x16, 0xf9, 0x23, 0x9e, 0x21, 0x55, 0x95, 0xa2, 0xc6, 0x9b, 0xfa, 0x37, 0x67, 0x82}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x58, 0x24, 0x6a, 0x8d, 0xd1, 0xd8, 0x57, 0x7b, 0x7a, 0x3d, 0x96, 0xbe, 0xee, 0xe7, 0xb7, 0x49, 0xcc, 0x24, 0xd6, 0xea, 0x47, 0xb7, 0x07, 0x41, 0x11, 0x2d, 0x76, 0xd0, 0x26, 0x4e, 0x54, 0x24}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x28, 0x89, 0xa5, 0xde, 0xb4, 0x03, 0x7a, 0xae, 0x5d, 0x50, 0xa0, 0xf9, 0x35, 0xbe, 0xcc, 0x77, 0xb8, 0x3e, 0xb0, 0x03, 0x7a, 0xd5, 0x25, 0xcc, 0xb2, 0x5a, 0x56, 0x17, 0xb1, 0x32, 0xf8, 0x1e}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} qemu_QEMUTDX M - qemu_QEMUVTPM = M{4: {Expected: []byte{0x6c, 0x47, 0xfe, 0x5d, 0x2f, 0xd6, 0x60, 0x20, 0xab, 0xaf, 0x6e, 0xa6, 0x0c, 0x9c, 0xf6, 0xba, 0xbe, 0x81, 0x6b, 0x8c, 0x09, 0x1c, 0x01, 0x78, 0xd9, 0x76, 0x46, 0x12, 0xfa, 0x59, 0x32, 0x17}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x41, 0x19, 0x8f, 0x06, 0x79, 0xa4, 0xd6, 0xe3, 0x7d, 0x81, 0x58, 0x1d, 0xab, 0xcc, 0x9f, 0x66, 0x96, 0xd1, 0xa0, 0xad, 0xf4, 0xc0, 0xad, 0xa2, 0x11, 0xa5, 0xc8, 0x85, 0x7b, 0xc0, 0x77, 0x61}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x12, 0x5f, 0xdf, 0xc5, 0x77, 0x82, 0x28, 0xa3, 0x9f, 0x54, 0x2a, 0x32, 0x65, 0x43, 0x80, 0x22, 0xf2, 0x14, 0xb7, 0xfc, 0x4e, 0x58, 0x41, 0xbf, 0xd1, 0x57, 0xfe, 0x83, 0xa9, 0xa3, 0x68, 0x87}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + qemu_QEMUVTPM = M{4: {Expected: []byte{0x41, 0x53, 0x2a, 0x63, 0xb6, 0xde, 0x92, 0x8b, 0x04, 0xcd, 0xba, 0xa1, 0xec, 0xef, 0x3b, 0x11, 0x0e, 0x40, 0xee, 0xd2, 0x32, 0x07, 0xf9, 0x2b, 0xbe, 0x50, 0x4e, 0xa1, 0x8d, 0x98, 0x4e, 0x53}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xaa, 0x8f, 0xee, 0xe6, 0x96, 0xa0, 0xd0, 0x9e, 0xf4, 0x11, 0x51, 0x5d, 0x41, 0x34, 0xce, 0x78, 0x81, 0xf1, 0xb1, 0xae, 0x90, 0x97, 0x51, 0xd2, 0x9f, 0xc8, 0xbd, 0x28, 0x26, 0x41, 0xc9, 0x07}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xc5, 0xd8, 0xeb, 0xfa, 0x0e, 0xb2, 0x5a, 0xe0, 0x65, 0xb1, 0x25, 0x64, 0x66, 0x90, 0xfd, 0x96, 0x85, 0xc9, 0x7c, 0x1d, 0xab, 0x81, 0xd6, 0xee, 0xd8, 0x72, 0x67, 0x74, 0xd3, 0x69, 0x8c, 0xf1}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} ) diff --git a/internal/config/image_enterprise.go b/internal/config/image_enterprise.go index 1e0858d6c..e67ad6972 100644 --- a/internal/config/image_enterprise.go +++ b/internal/config/image_enterprise.go @@ -10,5 +10,5 @@ package config const ( // defaultImage is the default image to use. - defaultImage = "ref/main/stream/nightly/v2.23.0-pre.0.20250410145300-620b4c7da401" + defaultImage = "ref/main/stream/nightly/v2.23.0-pre.0.20250415082741-4a93870d1d37" ) From 532f39755e512e432731b98e2aa01157511ddf47 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 16 Apr 2025 09:11:40 +0200 Subject: [PATCH 224/311] deps: update golangci/golangci-lint to v2.1.2 (#3767) * deps: update golangci/golangci-lint to v2.1.2 * deps: tidy all modules --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: edgelessci --- bazel/toolchains/ci_deps.bzl | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/bazel/toolchains/ci_deps.bzl b/bazel/toolchains/ci_deps.bzl index f7404ed97..cd2012e60 100644 --- a/bazel/toolchains/ci_deps.bzl +++ b/bazel/toolchains/ci_deps.bzl @@ -223,45 +223,45 @@ def _golangci_lint_deps(): name = "com_github_golangci_golangci_lint_linux_amd64", build_file = "//bazel/toolchains:BUILD.golangci.bazel", urls = [ - "https://cdn.confidential.cloud/constellation/cas/sha256/7167df345d0146d662b12ba068306f843d0eba408f9dc8f4d3ebb239786e87da", - "https://github.com/golangci/golangci-lint/releases/download/v2.1.1/golangci-lint-2.1.1-linux-amd64.tar.gz", + "https://cdn.confidential.cloud/constellation/cas/sha256/bc16fd1ef25bce2c600de0122600100ab26d6d75388cc5369c5bb916cb2b82e3", + "https://github.com/golangci/golangci-lint/releases/download/v2.1.2/golangci-lint-2.1.2-linux-amd64.tar.gz", ], - strip_prefix = "golangci-lint-2.1.1-linux-amd64", + strip_prefix = "golangci-lint-2.1.2-linux-amd64", type = "tar.gz", - sha256 = "7167df345d0146d662b12ba068306f843d0eba408f9dc8f4d3ebb239786e87da", + sha256 = "bc16fd1ef25bce2c600de0122600100ab26d6d75388cc5369c5bb916cb2b82e3", ) http_archive( name = "com_github_golangci_golangci_lint_linux_arm64", build_file = "//bazel/toolchains:BUILD.golangci.bazel", urls = [ - "https://cdn.confidential.cloud/constellation/cas/sha256/0b3e2dd07ca0cf0339805cd7cc0a2d5698ef25f32a0a298ba1edf3d14d67597f", - "https://github.com/golangci/golangci-lint/releases/download/v2.1.1/golangci-lint-2.1.1-linux-arm64.tar.gz", + "https://cdn.confidential.cloud/constellation/cas/sha256/46e86f1c4a94236e4d0bb35252c72939bed9f749897aaad54b576d430b1bb6d4", + "https://github.com/golangci/golangci-lint/releases/download/v2.1.2/golangci-lint-2.1.2-linux-arm64.tar.gz", ], - strip_prefix = "golangci-lint-2.1.1-linux-arm64", + strip_prefix = "golangci-lint-2.1.2-linux-arm64", type = "tar.gz", - sha256 = "0b3e2dd07ca0cf0339805cd7cc0a2d5698ef25f32a0a298ba1edf3d14d67597f", + sha256 = "46e86f1c4a94236e4d0bb35252c72939bed9f749897aaad54b576d430b1bb6d4", ) http_archive( name = "com_github_golangci_golangci_lint_darwin_amd64", build_file = "//bazel/toolchains:BUILD.golangci.bazel", urls = [ - "https://cdn.confidential.cloud/constellation/cas/sha256/dc02e375a6de8b1f9ff00ce7a4c1fe59dd10f9ff4790ec876c41b28454e5facb", - "https://github.com/golangci/golangci-lint/releases/download/v2.1.1/golangci-lint-2.1.1-darwin-amd64.tar.gz", + "https://cdn.confidential.cloud/constellation/cas/sha256/ed02ba3ad28466d61d2ae2b80cc95671713fa842c353da37842b1b89e36cb3ce", + "https://github.com/golangci/golangci-lint/releases/download/v2.1.2/golangci-lint-2.1.2-darwin-amd64.tar.gz", ], - strip_prefix = "golangci-lint-2.1.1-darwin-amd64", + strip_prefix = "golangci-lint-2.1.2-darwin-amd64", type = "tar.gz", - sha256 = "dc02e375a6de8b1f9ff00ce7a4c1fe59dd10f9ff4790ec876c41b28454e5facb", + sha256 = "ed02ba3ad28466d61d2ae2b80cc95671713fa842c353da37842b1b89e36cb3ce", ) http_archive( name = "com_github_golangci_golangci_lint_darwin_arm64", build_file = "//bazel/toolchains:BUILD.golangci.bazel", urls = [ - "https://cdn.confidential.cloud/constellation/cas/sha256/cbd615f108a5e83c873c2dd84b84c9990360f1b60250372ea3c226ba3f7a5a1b", - "https://github.com/golangci/golangci-lint/releases/download/v2.1.1/golangci-lint-2.1.1-darwin-arm64.tar.gz", + "https://cdn.confidential.cloud/constellation/cas/sha256/1cff60651d7c95a4248fa72f0dd020bffed1d2dc4dd8c2c77aee89a0731fa615", + "https://github.com/golangci/golangci-lint/releases/download/v2.1.2/golangci-lint-2.1.2-darwin-arm64.tar.gz", ], - strip_prefix = "golangci-lint-2.1.1-darwin-arm64", + strip_prefix = "golangci-lint-2.1.2-darwin-arm64", type = "tar.gz", - sha256 = "cbd615f108a5e83c873c2dd84b84c9990360f1b60250372ea3c226ba3f7a5a1b", + sha256 = "1cff60651d7c95a4248fa72f0dd020bffed1d2dc4dd8c2c77aee89a0731fa615", ) def _buf_deps(): From 3489b6d77282f6c8b48cae6846fde4500a7fb943 Mon Sep 17 00:00:00 2001 From: Moritz Sanft <58110325+msanft@users.noreply.github.com> Date: Wed, 16 Apr 2025 10:06:37 +0200 Subject: [PATCH 225/311] terraform: add missing GCP IAM permission to VM SA (#3770) --- terraform/infrastructure/iam/gcp/main.tf | 1 + 1 file changed, 1 insertion(+) diff --git a/terraform/infrastructure/iam/gcp/main.tf b/terraform/infrastructure/iam/gcp/main.tf index 2aaca1f08..79534472c 100644 --- a/terraform/infrastructure/iam/gcp/main.tf +++ b/terraform/infrastructure/iam/gcp/main.tf @@ -87,6 +87,7 @@ resource "google_project_iam_custom_role" "vm" { "compute.subnetworks.get", "compute.globalForwardingRules.list", "compute.zones.list", + "compute.forwardingRules.list", ] } From a5a7cec11bb8acb9df753bcce0470346a5edd6ca Mon Sep 17 00:00:00 2001 From: Thomas Tendyck Date: Wed, 16 Apr 2025 11:17:31 +0200 Subject: [PATCH 226/311] docs: change exemplary GCP zones to ones that provide SNP machines --- docs/docs/getting-started/first-steps.md | 4 ++-- docs/docs/workflows/config.md | 8 ++++---- .../version-2.0/getting-started/first-steps.md | 4 ++-- .../version-2.1/getting-started/first-steps.md | 4 ++-- .../version-2.10/getting-started/first-steps.md | 4 ++-- docs/versioned_docs/version-2.10/workflows/config.md | 8 ++++---- .../version-2.11/getting-started/first-steps.md | 4 ++-- docs/versioned_docs/version-2.11/workflows/config.md | 8 ++++---- .../version-2.12/getting-started/first-steps.md | 4 ++-- docs/versioned_docs/version-2.12/workflows/config.md | 8 ++++---- .../version-2.13/getting-started/first-steps.md | 4 ++-- docs/versioned_docs/version-2.13/workflows/config.md | 8 ++++---- .../version-2.13/workflows/terraform-module.md | 6 +++--- .../version-2.14/getting-started/first-steps.md | 4 ++-- docs/versioned_docs/version-2.14/workflows/config.md | 8 ++++---- .../version-2.15/getting-started/first-steps.md | 4 ++-- docs/versioned_docs/version-2.15/workflows/config.md | 8 ++++---- .../version-2.16/getting-started/first-steps.md | 4 ++-- docs/versioned_docs/version-2.16/workflows/config.md | 8 ++++---- .../version-2.17/getting-started/first-steps.md | 4 ++-- docs/versioned_docs/version-2.17/workflows/config.md | 8 ++++---- .../version-2.18/getting-started/first-steps.md | 4 ++-- docs/versioned_docs/version-2.18/workflows/config.md | 8 ++++---- .../version-2.19/getting-started/first-steps.md | 4 ++-- docs/versioned_docs/version-2.19/workflows/config.md | 8 ++++---- .../version-2.2/getting-started/first-steps.md | 4 ++-- .../version-2.20/getting-started/first-steps.md | 4 ++-- docs/versioned_docs/version-2.20/workflows/config.md | 8 ++++---- .../version-2.21/getting-started/first-steps.md | 4 ++-- docs/versioned_docs/version-2.21/workflows/config.md | 8 ++++---- .../version-2.22/getting-started/first-steps.md | 4 ++-- docs/versioned_docs/version-2.22/workflows/config.md | 8 ++++---- .../version-2.3/getting-started/first-steps.md | 4 ++-- docs/versioned_docs/version-2.3/workflows/config.md | 8 ++++---- .../version-2.4/getting-started/first-steps.md | 4 ++-- docs/versioned_docs/version-2.4/workflows/config.md | 8 ++++---- .../version-2.5/getting-started/first-steps.md | 4 ++-- docs/versioned_docs/version-2.5/workflows/config.md | 8 ++++---- .../version-2.6/getting-started/first-steps.md | 4 ++-- docs/versioned_docs/version-2.6/workflows/config.md | 8 ++++---- .../version-2.7/getting-started/first-steps.md | 4 ++-- docs/versioned_docs/version-2.7/workflows/config.md | 8 ++++---- .../version-2.8/getting-started/first-steps.md | 4 ++-- docs/versioned_docs/version-2.8/workflows/config.md | 8 ++++---- .../version-2.9/getting-started/first-steps.md | 4 ++-- docs/versioned_docs/version-2.9/workflows/config.md | 8 ++++---- 46 files changed, 135 insertions(+), 135 deletions(-) diff --git a/docs/docs/getting-started/first-steps.md b/docs/docs/getting-started/first-steps.md index a6ef2908b..fb8437a06 100644 --- a/docs/docs/getting-started/first-steps.md +++ b/docs/docs/getting-started/first-steps.md @@ -102,10 +102,10 @@ If you encounter any problem with the following steps, make sure to use the [lat ```bash - constellation iam create gcp --projectID=yourproject-12345 --zone=europe-west2-a --prefix=constell-test --update-config + constellation iam create gcp --projectID=yourproject-12345 --zone=europe-west3-a --prefix=constell-test --update-config ``` - This command creates IAM configuration in the GCP project `yourproject-12345` on the GCP zone `europe-west2-a` creating a new service account `constell-test`. It also updates the configuration file `constellation-conf.yaml` in your current directory with the IAM values filled in. + This command creates IAM configuration in the GCP project `yourproject-12345` on the GCP zone `europe-west3-a` creating a new service account `constell-test`. It also updates the configuration file `constellation-conf.yaml` in your current directory with the IAM values filled in. Note that only regions offering CVMs of the `C2D` or `N2D` series are supported. You can find a [list of all regions in Google's documentation](https://cloud.google.com/compute/docs/regions-zones#available), which you can filter by machine type `C2D` or `N2D`. diff --git a/docs/docs/workflows/config.md b/docs/docs/workflows/config.md index 35ed98302..7868ff1be 100644 --- a/docs/docs/workflows/config.md +++ b/docs/docs/workflows/config.md @@ -210,10 +210,10 @@ Paste the output into the corresponding fields of the `constellation-conf.yaml` You must be authenticated with the [GCP CLI](https://cloud.google.com/sdk/gcloud) in the shell session with a user that has the [required permissions for IAM creation](../getting-started/install.md#set-up-cloud-credentials). ```bash -constellation iam create gcp --projectID=yourproject-12345 --zone=europe-west2-a --prefix=constell-test +constellation iam create gcp --projectID=yourproject-12345 --zone=europe-west3-a --prefix=constell-test ``` -This command creates IAM configuration in the GCP project `yourproject-12345` on the GCP zone `europe-west2-a` creating a new service account `constell-test`. +This command creates IAM configuration in the GCP project `yourproject-12345` on the GCP zone `europe-west3-a` creating a new service account `constell-test`. Note that only regions offering CVMs of the `C2D` or `N2D` series are supported. You can find a [list of all regions in Google's documentation](https://cloud.google.com/compute/docs/regions-zones#available), which you can filter by machine type `N2D`. @@ -308,11 +308,11 @@ The following describes the configuration fields and how you obtain the required You can find it on the [welcome screen of your GCP project](https://console.cloud.google.com/welcome). For more information refer to [Google's documentation](https://support.google.com/googleapi/answer/7014113). -* **region**: The GCP region you want to deploy your cluster in, e.g., `us-west1`. +* **region**: The GCP region you want to deploy your cluster in, e.g., `us-central1`. You can find a [list of all regions in Google's documentation](https://cloud.google.com/compute/docs/regions-zones#available). -* **zone**: The GCP zone you want to deploy your cluster in, e.g., `us-west1-a`. +* **zone**: The GCP zone you want to deploy your cluster in, e.g., `us-central1-a`. You can find a [list of all zones in Google's documentation](https://cloud.google.com/compute/docs/regions-zones#available). diff --git a/docs/versioned_docs/version-2.0/getting-started/first-steps.md b/docs/versioned_docs/version-2.0/getting-started/first-steps.md index 08adfbd12..caec42ded 100644 --- a/docs/versioned_docs/version-2.0/getting-started/first-steps.md +++ b/docs/versioned_docs/version-2.0/getting-started/first-steps.md @@ -137,11 +137,11 @@ The following steps guide you through the process of creating a cluster and depl You can find it on the [welcome screen of your GCP project](https://console.cloud.google.com/welcome). For more information refer to [Google's documentation](https://support.google.com/googleapi/answer/7014113). - * **region**: The GCP region you want to deploy your cluster in, e.g., `us-west1`. + * **region**: The GCP region you want to deploy your cluster in, e.g., `us-central1`. You can find a [list of all regions in Google's documentation](https://cloud.google.com/compute/docs/regions-zones#available). - * **zone**: The GCP zone you want to deploy your cluster in, e.g., `us-west1-a`. + * **zone**: The GCP zone you want to deploy your cluster in, e.g., `us-central1-a`. You can find a [list of all zones in Google's documentation](https://cloud.google.com/compute/docs/regions-zones#available). diff --git a/docs/versioned_docs/version-2.1/getting-started/first-steps.md b/docs/versioned_docs/version-2.1/getting-started/first-steps.md index d729fd0cf..10cf3d7b9 100644 --- a/docs/versioned_docs/version-2.1/getting-started/first-steps.md +++ b/docs/versioned_docs/version-2.1/getting-started/first-steps.md @@ -142,11 +142,11 @@ If you don't have a cloud subscription, check out [MiniConstellation](first-step You can find it on the [welcome screen of your GCP project](https://console.cloud.google.com/welcome). For more information refer to [Google's documentation](https://support.google.com/googleapi/answer/7014113). - * **region**: The GCP region you want to deploy your cluster in, e.g., `us-west1`. + * **region**: The GCP region you want to deploy your cluster in, e.g., `us-central1`. You can find a [list of all regions in Google's documentation](https://cloud.google.com/compute/docs/regions-zones#available). - * **zone**: The GCP zone you want to deploy your cluster in, e.g., `us-west1-a`. + * **zone**: The GCP zone you want to deploy your cluster in, e.g., `us-central1-a`. You can find a [list of all zones in Google's documentation](https://cloud.google.com/compute/docs/regions-zones#available). diff --git a/docs/versioned_docs/version-2.10/getting-started/first-steps.md b/docs/versioned_docs/version-2.10/getting-started/first-steps.md index 9f6034e6b..4420eb708 100644 --- a/docs/versioned_docs/version-2.10/getting-started/first-steps.md +++ b/docs/versioned_docs/version-2.10/getting-started/first-steps.md @@ -67,10 +67,10 @@ If you encounter any problem with the following steps, make sure to use the [lat ```bash - constellation iam create gcp --projectID=yourproject-12345 --zone=europe-west2-a --serviceAccountID=constell-test --update-config + constellation iam create gcp --projectID=yourproject-12345 --zone=europe-west3-a --serviceAccountID=constell-test --update-config ``` - This command creates IAM configuration in the GCP project `yourproject-12345` on the GCP zone `europe-west2-a` creating a new service account `constell-test`. It also updates the configuration file `constellation-conf.yaml` in your current directory with the IAM values filled in. + This command creates IAM configuration in the GCP project `yourproject-12345` on the GCP zone `europe-west3-a` creating a new service account `constell-test`. It also updates the configuration file `constellation-conf.yaml` in your current directory with the IAM values filled in. Note that only regions offering CVMs of the `C2D` or `N2D` series are supported. You can find a [list of all regions in Google's documentation](https://cloud.google.com/compute/docs/regions-zones#available), which you can filter by machine type `C2D` or `N2D`. diff --git a/docs/versioned_docs/version-2.10/workflows/config.md b/docs/versioned_docs/version-2.10/workflows/config.md index 4dab6bd50..edc3c9091 100644 --- a/docs/versioned_docs/version-2.10/workflows/config.md +++ b/docs/versioned_docs/version-2.10/workflows/config.md @@ -160,10 +160,10 @@ Paste the output into the corresponding fields of the `constellation-conf.yaml` You must be authenticated with the [GCP CLI](https://cloud.google.com/sdk/gcloud) in the shell session with a user that has the [required permissions for IAM creation](../getting-started/install.md#set-up-cloud-credentials). ```bash -constellation iam create gcp --projectID=yourproject-12345 --zone=europe-west2-a --serviceAccountID=constell-test +constellation iam create gcp --projectID=yourproject-12345 --zone=europe-west3-a --serviceAccountID=constell-test ``` -This command creates IAM configuration in the GCP project `yourproject-12345` on the GCP zone `europe-west2-a` creating a new service account `constell-test`. +This command creates IAM configuration in the GCP project `yourproject-12345` on the GCP zone `europe-west3-a` creating a new service account `constell-test`. Note that only regions offering CVMs of the `C2D` or `N2D` series are supported. You can find a [list of all regions in Google's documentation](https://cloud.google.com/compute/docs/regions-zones#available), which you can filter by machine type `N2D`. @@ -240,11 +240,11 @@ The following describes the configuration fields and how you obtain the required You can find it on the [welcome screen of your GCP project](https://console.cloud.google.com/welcome). For more information refer to [Google's documentation](https://support.google.com/googleapi/answer/7014113). -* **region**: The GCP region you want to deploy your cluster in, e.g., `us-west1`. +* **region**: The GCP region you want to deploy your cluster in, e.g., `us-central1`. You can find a [list of all regions in Google's documentation](https://cloud.google.com/compute/docs/regions-zones#available). -* **zone**: The GCP zone you want to deploy your cluster in, e.g., `us-west1-a`. +* **zone**: The GCP zone you want to deploy your cluster in, e.g., `us-central1-a`. You can find a [list of all zones in Google's documentation](https://cloud.google.com/compute/docs/regions-zones#available). diff --git a/docs/versioned_docs/version-2.11/getting-started/first-steps.md b/docs/versioned_docs/version-2.11/getting-started/first-steps.md index 9811597e6..9ebe21701 100644 --- a/docs/versioned_docs/version-2.11/getting-started/first-steps.md +++ b/docs/versioned_docs/version-2.11/getting-started/first-steps.md @@ -67,10 +67,10 @@ If you encounter any problem with the following steps, make sure to use the [lat ```bash - constellation iam create gcp --projectID=yourproject-12345 --zone=europe-west2-a --serviceAccountID=constell-test --update-config + constellation iam create gcp --projectID=yourproject-12345 --zone=europe-west3-a --serviceAccountID=constell-test --update-config ``` - This command creates IAM configuration in the GCP project `yourproject-12345` on the GCP zone `europe-west2-a` creating a new service account `constell-test`. It also updates the configuration file `constellation-conf.yaml` in your current directory with the IAM values filled in. + This command creates IAM configuration in the GCP project `yourproject-12345` on the GCP zone `europe-west3-a` creating a new service account `constell-test`. It also updates the configuration file `constellation-conf.yaml` in your current directory with the IAM values filled in. Note that only regions offering CVMs of the `C2D` or `N2D` series are supported. You can find a [list of all regions in Google's documentation](https://cloud.google.com/compute/docs/regions-zones#available), which you can filter by machine type `C2D` or `N2D`. diff --git a/docs/versioned_docs/version-2.11/workflows/config.md b/docs/versioned_docs/version-2.11/workflows/config.md index 4dab6bd50..edc3c9091 100644 --- a/docs/versioned_docs/version-2.11/workflows/config.md +++ b/docs/versioned_docs/version-2.11/workflows/config.md @@ -160,10 +160,10 @@ Paste the output into the corresponding fields of the `constellation-conf.yaml` You must be authenticated with the [GCP CLI](https://cloud.google.com/sdk/gcloud) in the shell session with a user that has the [required permissions for IAM creation](../getting-started/install.md#set-up-cloud-credentials). ```bash -constellation iam create gcp --projectID=yourproject-12345 --zone=europe-west2-a --serviceAccountID=constell-test +constellation iam create gcp --projectID=yourproject-12345 --zone=europe-west3-a --serviceAccountID=constell-test ``` -This command creates IAM configuration in the GCP project `yourproject-12345` on the GCP zone `europe-west2-a` creating a new service account `constell-test`. +This command creates IAM configuration in the GCP project `yourproject-12345` on the GCP zone `europe-west3-a` creating a new service account `constell-test`. Note that only regions offering CVMs of the `C2D` or `N2D` series are supported. You can find a [list of all regions in Google's documentation](https://cloud.google.com/compute/docs/regions-zones#available), which you can filter by machine type `N2D`. @@ -240,11 +240,11 @@ The following describes the configuration fields and how you obtain the required You can find it on the [welcome screen of your GCP project](https://console.cloud.google.com/welcome). For more information refer to [Google's documentation](https://support.google.com/googleapi/answer/7014113). -* **region**: The GCP region you want to deploy your cluster in, e.g., `us-west1`. +* **region**: The GCP region you want to deploy your cluster in, e.g., `us-central1`. You can find a [list of all regions in Google's documentation](https://cloud.google.com/compute/docs/regions-zones#available). -* **zone**: The GCP zone you want to deploy your cluster in, e.g., `us-west1-a`. +* **zone**: The GCP zone you want to deploy your cluster in, e.g., `us-central1-a`. You can find a [list of all zones in Google's documentation](https://cloud.google.com/compute/docs/regions-zones#available). diff --git a/docs/versioned_docs/version-2.12/getting-started/first-steps.md b/docs/versioned_docs/version-2.12/getting-started/first-steps.md index 9811597e6..9ebe21701 100644 --- a/docs/versioned_docs/version-2.12/getting-started/first-steps.md +++ b/docs/versioned_docs/version-2.12/getting-started/first-steps.md @@ -67,10 +67,10 @@ If you encounter any problem with the following steps, make sure to use the [lat ```bash - constellation iam create gcp --projectID=yourproject-12345 --zone=europe-west2-a --serviceAccountID=constell-test --update-config + constellation iam create gcp --projectID=yourproject-12345 --zone=europe-west3-a --serviceAccountID=constell-test --update-config ``` - This command creates IAM configuration in the GCP project `yourproject-12345` on the GCP zone `europe-west2-a` creating a new service account `constell-test`. It also updates the configuration file `constellation-conf.yaml` in your current directory with the IAM values filled in. + This command creates IAM configuration in the GCP project `yourproject-12345` on the GCP zone `europe-west3-a` creating a new service account `constell-test`. It also updates the configuration file `constellation-conf.yaml` in your current directory with the IAM values filled in. Note that only regions offering CVMs of the `C2D` or `N2D` series are supported. You can find a [list of all regions in Google's documentation](https://cloud.google.com/compute/docs/regions-zones#available), which you can filter by machine type `C2D` or `N2D`. diff --git a/docs/versioned_docs/version-2.12/workflows/config.md b/docs/versioned_docs/version-2.12/workflows/config.md index 4dab6bd50..edc3c9091 100644 --- a/docs/versioned_docs/version-2.12/workflows/config.md +++ b/docs/versioned_docs/version-2.12/workflows/config.md @@ -160,10 +160,10 @@ Paste the output into the corresponding fields of the `constellation-conf.yaml` You must be authenticated with the [GCP CLI](https://cloud.google.com/sdk/gcloud) in the shell session with a user that has the [required permissions for IAM creation](../getting-started/install.md#set-up-cloud-credentials). ```bash -constellation iam create gcp --projectID=yourproject-12345 --zone=europe-west2-a --serviceAccountID=constell-test +constellation iam create gcp --projectID=yourproject-12345 --zone=europe-west3-a --serviceAccountID=constell-test ``` -This command creates IAM configuration in the GCP project `yourproject-12345` on the GCP zone `europe-west2-a` creating a new service account `constell-test`. +This command creates IAM configuration in the GCP project `yourproject-12345` on the GCP zone `europe-west3-a` creating a new service account `constell-test`. Note that only regions offering CVMs of the `C2D` or `N2D` series are supported. You can find a [list of all regions in Google's documentation](https://cloud.google.com/compute/docs/regions-zones#available), which you can filter by machine type `N2D`. @@ -240,11 +240,11 @@ The following describes the configuration fields and how you obtain the required You can find it on the [welcome screen of your GCP project](https://console.cloud.google.com/welcome). For more information refer to [Google's documentation](https://support.google.com/googleapi/answer/7014113). -* **region**: The GCP region you want to deploy your cluster in, e.g., `us-west1`. +* **region**: The GCP region you want to deploy your cluster in, e.g., `us-central1`. You can find a [list of all regions in Google's documentation](https://cloud.google.com/compute/docs/regions-zones#available). -* **zone**: The GCP zone you want to deploy your cluster in, e.g., `us-west1-a`. +* **zone**: The GCP zone you want to deploy your cluster in, e.g., `us-central1-a`. You can find a [list of all zones in Google's documentation](https://cloud.google.com/compute/docs/regions-zones#available). diff --git a/docs/versioned_docs/version-2.13/getting-started/first-steps.md b/docs/versioned_docs/version-2.13/getting-started/first-steps.md index 287e0737a..3ec110064 100644 --- a/docs/versioned_docs/version-2.13/getting-started/first-steps.md +++ b/docs/versioned_docs/version-2.13/getting-started/first-steps.md @@ -67,10 +67,10 @@ If you encounter any problem with the following steps, make sure to use the [lat ```bash - constellation iam create gcp --projectID=yourproject-12345 --zone=europe-west2-a --serviceAccountID=constell-test --update-config + constellation iam create gcp --projectID=yourproject-12345 --zone=europe-west3-a --serviceAccountID=constell-test --update-config ``` - This command creates IAM configuration in the GCP project `yourproject-12345` on the GCP zone `europe-west2-a` creating a new service account `constell-test`. It also updates the configuration file `constellation-conf.yaml` in your current directory with the IAM values filled in. + This command creates IAM configuration in the GCP project `yourproject-12345` on the GCP zone `europe-west3-a` creating a new service account `constell-test`. It also updates the configuration file `constellation-conf.yaml` in your current directory with the IAM values filled in. Note that only regions offering CVMs of the `C2D` or `N2D` series are supported. You can find a [list of all regions in Google's documentation](https://cloud.google.com/compute/docs/regions-zones#available), which you can filter by machine type `C2D` or `N2D`. diff --git a/docs/versioned_docs/version-2.13/workflows/config.md b/docs/versioned_docs/version-2.13/workflows/config.md index 4dab6bd50..edc3c9091 100644 --- a/docs/versioned_docs/version-2.13/workflows/config.md +++ b/docs/versioned_docs/version-2.13/workflows/config.md @@ -160,10 +160,10 @@ Paste the output into the corresponding fields of the `constellation-conf.yaml` You must be authenticated with the [GCP CLI](https://cloud.google.com/sdk/gcloud) in the shell session with a user that has the [required permissions for IAM creation](../getting-started/install.md#set-up-cloud-credentials). ```bash -constellation iam create gcp --projectID=yourproject-12345 --zone=europe-west2-a --serviceAccountID=constell-test +constellation iam create gcp --projectID=yourproject-12345 --zone=europe-west3-a --serviceAccountID=constell-test ``` -This command creates IAM configuration in the GCP project `yourproject-12345` on the GCP zone `europe-west2-a` creating a new service account `constell-test`. +This command creates IAM configuration in the GCP project `yourproject-12345` on the GCP zone `europe-west3-a` creating a new service account `constell-test`. Note that only regions offering CVMs of the `C2D` or `N2D` series are supported. You can find a [list of all regions in Google's documentation](https://cloud.google.com/compute/docs/regions-zones#available), which you can filter by machine type `N2D`. @@ -240,11 +240,11 @@ The following describes the configuration fields and how you obtain the required You can find it on the [welcome screen of your GCP project](https://console.cloud.google.com/welcome). For more information refer to [Google's documentation](https://support.google.com/googleapi/answer/7014113). -* **region**: The GCP region you want to deploy your cluster in, e.g., `us-west1`. +* **region**: The GCP region you want to deploy your cluster in, e.g., `us-central1`. You can find a [list of all regions in Google's documentation](https://cloud.google.com/compute/docs/regions-zones#available). -* **zone**: The GCP zone you want to deploy your cluster in, e.g., `us-west1-a`. +* **zone**: The GCP zone you want to deploy your cluster in, e.g., `us-central1-a`. You can find a [list of all zones in Google's documentation](https://cloud.google.com/compute/docs/regions-zones#available). diff --git a/docs/versioned_docs/version-2.13/workflows/terraform-module.md b/docs/versioned_docs/version-2.13/workflows/terraform-module.md index 07525cd27..e38a4cc2c 100644 --- a/docs/versioned_docs/version-2.13/workflows/terraform-module.md +++ b/docs/versioned_docs/version-2.13/workflows/terraform-module.md @@ -100,11 +100,11 @@ The files are deleted on `terraform destroy`. name = "constell" project = "constell-proj" // replace with your project id service_account_id = "constid" - zone = "europe-west2-a" + zone = "europe-west3-a" node_groups = { control_plane_default = { role = "control-plane" - zone = "europe-west2-a" + zone = "europe-west3-a" instance_type = "n2d-standard-4" disk_size = 30 disk_type = "pd-ssd" @@ -112,7 +112,7 @@ The files are deleted on `terraform destroy`. }, worker_default = { role = "worker" - zone = "europe-west2-a" + zone = "europe-west3-a" instance_type = "n2d-standard-4" disk_size = 30 disk_type = "pd-ssd" diff --git a/docs/versioned_docs/version-2.14/getting-started/first-steps.md b/docs/versioned_docs/version-2.14/getting-started/first-steps.md index a1f6cba25..e4e6c8e48 100644 --- a/docs/versioned_docs/version-2.14/getting-started/first-steps.md +++ b/docs/versioned_docs/version-2.14/getting-started/first-steps.md @@ -67,10 +67,10 @@ If you encounter any problem with the following steps, make sure to use the [lat ```bash - constellation iam create gcp --projectID=yourproject-12345 --zone=europe-west2-a --serviceAccountID=constell-test --update-config + constellation iam create gcp --projectID=yourproject-12345 --zone=europe-west3-a --serviceAccountID=constell-test --update-config ``` - This command creates IAM configuration in the GCP project `yourproject-12345` on the GCP zone `europe-west2-a` creating a new service account `constell-test`. It also updates the configuration file `constellation-conf.yaml` in your current directory with the IAM values filled in. + This command creates IAM configuration in the GCP project `yourproject-12345` on the GCP zone `europe-west3-a` creating a new service account `constell-test`. It also updates the configuration file `constellation-conf.yaml` in your current directory with the IAM values filled in. Note that only regions offering CVMs of the `C2D` or `N2D` series are supported. You can find a [list of all regions in Google's documentation](https://cloud.google.com/compute/docs/regions-zones#available), which you can filter by machine type `C2D` or `N2D`. diff --git a/docs/versioned_docs/version-2.14/workflows/config.md b/docs/versioned_docs/version-2.14/workflows/config.md index 81d2b49fd..5e938c29c 100644 --- a/docs/versioned_docs/version-2.14/workflows/config.md +++ b/docs/versioned_docs/version-2.14/workflows/config.md @@ -152,10 +152,10 @@ Paste the output into the corresponding fields of the `constellation-conf.yaml` You must be authenticated with the [GCP CLI](https://cloud.google.com/sdk/gcloud) in the shell session with a user that has the [required permissions for IAM creation](../getting-started/install.md#set-up-cloud-credentials). ```bash -constellation iam create gcp --projectID=yourproject-12345 --zone=europe-west2-a --serviceAccountID=constell-test +constellation iam create gcp --projectID=yourproject-12345 --zone=europe-west3-a --serviceAccountID=constell-test ``` -This command creates IAM configuration in the GCP project `yourproject-12345` on the GCP zone `europe-west2-a` creating a new service account `constell-test`. +This command creates IAM configuration in the GCP project `yourproject-12345` on the GCP zone `europe-west3-a` creating a new service account `constell-test`. Note that only regions offering CVMs of the `C2D` or `N2D` series are supported. You can find a [list of all regions in Google's documentation](https://cloud.google.com/compute/docs/regions-zones#available), which you can filter by machine type `N2D`. @@ -232,11 +232,11 @@ The following describes the configuration fields and how you obtain the required You can find it on the [welcome screen of your GCP project](https://console.cloud.google.com/welcome). For more information refer to [Google's documentation](https://support.google.com/googleapi/answer/7014113). -* **region**: The GCP region you want to deploy your cluster in, e.g., `us-west1`. +* **region**: The GCP region you want to deploy your cluster in, e.g., `us-central1`. You can find a [list of all regions in Google's documentation](https://cloud.google.com/compute/docs/regions-zones#available). -* **zone**: The GCP zone you want to deploy your cluster in, e.g., `us-west1-a`. +* **zone**: The GCP zone you want to deploy your cluster in, e.g., `us-central1-a`. You can find a [list of all zones in Google's documentation](https://cloud.google.com/compute/docs/regions-zones#available). diff --git a/docs/versioned_docs/version-2.15/getting-started/first-steps.md b/docs/versioned_docs/version-2.15/getting-started/first-steps.md index a6efd758f..8618fb843 100644 --- a/docs/versioned_docs/version-2.15/getting-started/first-steps.md +++ b/docs/versioned_docs/version-2.15/getting-started/first-steps.md @@ -73,10 +73,10 @@ If you encounter any problem with the following steps, make sure to use the [lat ```bash - constellation iam create gcp --projectID=yourproject-12345 --zone=europe-west2-a --serviceAccountID=constell-test --update-config + constellation iam create gcp --projectID=yourproject-12345 --zone=europe-west3-a --serviceAccountID=constell-test --update-config ``` - This command creates IAM configuration in the GCP project `yourproject-12345` on the GCP zone `europe-west2-a` creating a new service account `constell-test`. It also updates the configuration file `constellation-conf.yaml` in your current directory with the IAM values filled in. + This command creates IAM configuration in the GCP project `yourproject-12345` on the GCP zone `europe-west3-a` creating a new service account `constell-test`. It also updates the configuration file `constellation-conf.yaml` in your current directory with the IAM values filled in. Note that only regions offering CVMs of the `C2D` or `N2D` series are supported. You can find a [list of all regions in Google's documentation](https://cloud.google.com/compute/docs/regions-zones#available), which you can filter by machine type `C2D` or `N2D`. diff --git a/docs/versioned_docs/version-2.15/workflows/config.md b/docs/versioned_docs/version-2.15/workflows/config.md index 92ff9d040..be9cc6a98 100644 --- a/docs/versioned_docs/version-2.15/workflows/config.md +++ b/docs/versioned_docs/version-2.15/workflows/config.md @@ -157,10 +157,10 @@ Paste the output into the corresponding fields of the `constellation-conf.yaml` You must be authenticated with the [GCP CLI](https://cloud.google.com/sdk/gcloud) in the shell session with a user that has the [required permissions for IAM creation](../getting-started/install.md#set-up-cloud-credentials). ```bash -constellation iam create gcp --projectID=yourproject-12345 --zone=europe-west2-a --serviceAccountID=constell-test +constellation iam create gcp --projectID=yourproject-12345 --zone=europe-west3-a --serviceAccountID=constell-test ``` -This command creates IAM configuration in the GCP project `yourproject-12345` on the GCP zone `europe-west2-a` creating a new service account `constell-test`. +This command creates IAM configuration in the GCP project `yourproject-12345` on the GCP zone `europe-west3-a` creating a new service account `constell-test`. Note that only regions offering CVMs of the `C2D` or `N2D` series are supported. You can find a [list of all regions in Google's documentation](https://cloud.google.com/compute/docs/regions-zones#available), which you can filter by machine type `N2D`. @@ -244,11 +244,11 @@ The following describes the configuration fields and how you obtain the required You can find it on the [welcome screen of your GCP project](https://console.cloud.google.com/welcome). For more information refer to [Google's documentation](https://support.google.com/googleapi/answer/7014113). -* **region**: The GCP region you want to deploy your cluster in, e.g., `us-west1`. +* **region**: The GCP region you want to deploy your cluster in, e.g., `us-central1`. You can find a [list of all regions in Google's documentation](https://cloud.google.com/compute/docs/regions-zones#available). -* **zone**: The GCP zone you want to deploy your cluster in, e.g., `us-west1-a`. +* **zone**: The GCP zone you want to deploy your cluster in, e.g., `us-central1-a`. You can find a [list of all zones in Google's documentation](https://cloud.google.com/compute/docs/regions-zones#available). diff --git a/docs/versioned_docs/version-2.16/getting-started/first-steps.md b/docs/versioned_docs/version-2.16/getting-started/first-steps.md index d82d93836..738868551 100644 --- a/docs/versioned_docs/version-2.16/getting-started/first-steps.md +++ b/docs/versioned_docs/version-2.16/getting-started/first-steps.md @@ -102,10 +102,10 @@ If you encounter any problem with the following steps, make sure to use the [lat ```bash - constellation iam create gcp --projectID=yourproject-12345 --zone=europe-west2-a --serviceAccountID=constell-test --update-config + constellation iam create gcp --projectID=yourproject-12345 --zone=europe-west3-a --serviceAccountID=constell-test --update-config ``` - This command creates IAM configuration in the GCP project `yourproject-12345` on the GCP zone `europe-west2-a` creating a new service account `constell-test`. It also updates the configuration file `constellation-conf.yaml` in your current directory with the IAM values filled in. + This command creates IAM configuration in the GCP project `yourproject-12345` on the GCP zone `europe-west3-a` creating a new service account `constell-test`. It also updates the configuration file `constellation-conf.yaml` in your current directory with the IAM values filled in. Note that only regions offering CVMs of the `C2D` or `N2D` series are supported. You can find a [list of all regions in Google's documentation](https://cloud.google.com/compute/docs/regions-zones#available), which you can filter by machine type `C2D` or `N2D`. diff --git a/docs/versioned_docs/version-2.16/workflows/config.md b/docs/versioned_docs/version-2.16/workflows/config.md index 120bf8ed7..11cf31cbd 100644 --- a/docs/versioned_docs/version-2.16/workflows/config.md +++ b/docs/versioned_docs/version-2.16/workflows/config.md @@ -210,10 +210,10 @@ Paste the output into the corresponding fields of the `constellation-conf.yaml` You must be authenticated with the [GCP CLI](https://cloud.google.com/sdk/gcloud) in the shell session with a user that has the [required permissions for IAM creation](../getting-started/install.md#set-up-cloud-credentials). ```bash -constellation iam create gcp --projectID=yourproject-12345 --zone=europe-west2-a --serviceAccountID=constell-test +constellation iam create gcp --projectID=yourproject-12345 --zone=europe-west3-a --serviceAccountID=constell-test ``` -This command creates IAM configuration in the GCP project `yourproject-12345` on the GCP zone `europe-west2-a` creating a new service account `constell-test`. +This command creates IAM configuration in the GCP project `yourproject-12345` on the GCP zone `europe-west3-a` creating a new service account `constell-test`. Note that only regions offering CVMs of the `C2D` or `N2D` series are supported. You can find a [list of all regions in Google's documentation](https://cloud.google.com/compute/docs/regions-zones#available), which you can filter by machine type `N2D`. @@ -308,11 +308,11 @@ The following describes the configuration fields and how you obtain the required You can find it on the [welcome screen of your GCP project](https://console.cloud.google.com/welcome). For more information refer to [Google's documentation](https://support.google.com/googleapi/answer/7014113). -* **region**: The GCP region you want to deploy your cluster in, e.g., `us-west1`. +* **region**: The GCP region you want to deploy your cluster in, e.g., `us-central1`. You can find a [list of all regions in Google's documentation](https://cloud.google.com/compute/docs/regions-zones#available). -* **zone**: The GCP zone you want to deploy your cluster in, e.g., `us-west1-a`. +* **zone**: The GCP zone you want to deploy your cluster in, e.g., `us-central1-a`. You can find a [list of all zones in Google's documentation](https://cloud.google.com/compute/docs/regions-zones#available). diff --git a/docs/versioned_docs/version-2.17/getting-started/first-steps.md b/docs/versioned_docs/version-2.17/getting-started/first-steps.md index 9b37efa64..c31263ed3 100644 --- a/docs/versioned_docs/version-2.17/getting-started/first-steps.md +++ b/docs/versioned_docs/version-2.17/getting-started/first-steps.md @@ -102,10 +102,10 @@ If you encounter any problem with the following steps, make sure to use the [lat ```bash - constellation iam create gcp --projectID=yourproject-12345 --zone=europe-west2-a --serviceAccountID=constell-test --update-config + constellation iam create gcp --projectID=yourproject-12345 --zone=europe-west3-a --serviceAccountID=constell-test --update-config ``` - This command creates IAM configuration in the GCP project `yourproject-12345` on the GCP zone `europe-west2-a` creating a new service account `constell-test`. It also updates the configuration file `constellation-conf.yaml` in your current directory with the IAM values filled in. + This command creates IAM configuration in the GCP project `yourproject-12345` on the GCP zone `europe-west3-a` creating a new service account `constell-test`. It also updates the configuration file `constellation-conf.yaml` in your current directory with the IAM values filled in. Note that only regions offering CVMs of the `C2D` or `N2D` series are supported. You can find a [list of all regions in Google's documentation](https://cloud.google.com/compute/docs/regions-zones#available), which you can filter by machine type `C2D` or `N2D`. diff --git a/docs/versioned_docs/version-2.17/workflows/config.md b/docs/versioned_docs/version-2.17/workflows/config.md index 120bf8ed7..11cf31cbd 100644 --- a/docs/versioned_docs/version-2.17/workflows/config.md +++ b/docs/versioned_docs/version-2.17/workflows/config.md @@ -210,10 +210,10 @@ Paste the output into the corresponding fields of the `constellation-conf.yaml` You must be authenticated with the [GCP CLI](https://cloud.google.com/sdk/gcloud) in the shell session with a user that has the [required permissions for IAM creation](../getting-started/install.md#set-up-cloud-credentials). ```bash -constellation iam create gcp --projectID=yourproject-12345 --zone=europe-west2-a --serviceAccountID=constell-test +constellation iam create gcp --projectID=yourproject-12345 --zone=europe-west3-a --serviceAccountID=constell-test ``` -This command creates IAM configuration in the GCP project `yourproject-12345` on the GCP zone `europe-west2-a` creating a new service account `constell-test`. +This command creates IAM configuration in the GCP project `yourproject-12345` on the GCP zone `europe-west3-a` creating a new service account `constell-test`. Note that only regions offering CVMs of the `C2D` or `N2D` series are supported. You can find a [list of all regions in Google's documentation](https://cloud.google.com/compute/docs/regions-zones#available), which you can filter by machine type `N2D`. @@ -308,11 +308,11 @@ The following describes the configuration fields and how you obtain the required You can find it on the [welcome screen of your GCP project](https://console.cloud.google.com/welcome). For more information refer to [Google's documentation](https://support.google.com/googleapi/answer/7014113). -* **region**: The GCP region you want to deploy your cluster in, e.g., `us-west1`. +* **region**: The GCP region you want to deploy your cluster in, e.g., `us-central1`. You can find a [list of all regions in Google's documentation](https://cloud.google.com/compute/docs/regions-zones#available). -* **zone**: The GCP zone you want to deploy your cluster in, e.g., `us-west1-a`. +* **zone**: The GCP zone you want to deploy your cluster in, e.g., `us-central1-a`. You can find a [list of all zones in Google's documentation](https://cloud.google.com/compute/docs/regions-zones#available). diff --git a/docs/versioned_docs/version-2.18/getting-started/first-steps.md b/docs/versioned_docs/version-2.18/getting-started/first-steps.md index 128ac2849..18b723565 100644 --- a/docs/versioned_docs/version-2.18/getting-started/first-steps.md +++ b/docs/versioned_docs/version-2.18/getting-started/first-steps.md @@ -102,10 +102,10 @@ If you encounter any problem with the following steps, make sure to use the [lat ```bash - constellation iam create gcp --projectID=yourproject-12345 --zone=europe-west2-a --serviceAccountID=constell-test --update-config + constellation iam create gcp --projectID=yourproject-12345 --zone=europe-west3-a --serviceAccountID=constell-test --update-config ``` - This command creates IAM configuration in the GCP project `yourproject-12345` on the GCP zone `europe-west2-a` creating a new service account `constell-test`. It also updates the configuration file `constellation-conf.yaml` in your current directory with the IAM values filled in. + This command creates IAM configuration in the GCP project `yourproject-12345` on the GCP zone `europe-west3-a` creating a new service account `constell-test`. It also updates the configuration file `constellation-conf.yaml` in your current directory with the IAM values filled in. Note that only regions offering CVMs of the `C2D` or `N2D` series are supported. You can find a [list of all regions in Google's documentation](https://cloud.google.com/compute/docs/regions-zones#available), which you can filter by machine type `C2D` or `N2D`. diff --git a/docs/versioned_docs/version-2.18/workflows/config.md b/docs/versioned_docs/version-2.18/workflows/config.md index 95f791acd..a8a52980e 100644 --- a/docs/versioned_docs/version-2.18/workflows/config.md +++ b/docs/versioned_docs/version-2.18/workflows/config.md @@ -210,10 +210,10 @@ Paste the output into the corresponding fields of the `constellation-conf.yaml` You must be authenticated with the [GCP CLI](https://cloud.google.com/sdk/gcloud) in the shell session with a user that has the [required permissions for IAM creation](../getting-started/install.md#set-up-cloud-credentials). ```bash -constellation iam create gcp --projectID=yourproject-12345 --zone=europe-west2-a --serviceAccountID=constell-test +constellation iam create gcp --projectID=yourproject-12345 --zone=europe-west3-a --serviceAccountID=constell-test ``` -This command creates IAM configuration in the GCP project `yourproject-12345` on the GCP zone `europe-west2-a` creating a new service account `constell-test`. +This command creates IAM configuration in the GCP project `yourproject-12345` on the GCP zone `europe-west3-a` creating a new service account `constell-test`. Note that only regions offering CVMs of the `C2D` or `N2D` series are supported. You can find a [list of all regions in Google's documentation](https://cloud.google.com/compute/docs/regions-zones#available), which you can filter by machine type `N2D`. @@ -308,11 +308,11 @@ The following describes the configuration fields and how you obtain the required You can find it on the [welcome screen of your GCP project](https://console.cloud.google.com/welcome). For more information refer to [Google's documentation](https://support.google.com/googleapi/answer/7014113). -* **region**: The GCP region you want to deploy your cluster in, e.g., `us-west1`. +* **region**: The GCP region you want to deploy your cluster in, e.g., `us-central1`. You can find a [list of all regions in Google's documentation](https://cloud.google.com/compute/docs/regions-zones#available). -* **zone**: The GCP zone you want to deploy your cluster in, e.g., `us-west1-a`. +* **zone**: The GCP zone you want to deploy your cluster in, e.g., `us-central1-a`. You can find a [list of all zones in Google's documentation](https://cloud.google.com/compute/docs/regions-zones#available). diff --git a/docs/versioned_docs/version-2.19/getting-started/first-steps.md b/docs/versioned_docs/version-2.19/getting-started/first-steps.md index b197f659d..2afe95635 100644 --- a/docs/versioned_docs/version-2.19/getting-started/first-steps.md +++ b/docs/versioned_docs/version-2.19/getting-started/first-steps.md @@ -102,10 +102,10 @@ If you encounter any problem with the following steps, make sure to use the [lat ```bash - constellation iam create gcp --projectID=yourproject-12345 --zone=europe-west2-a --serviceAccountID=constell-test --update-config + constellation iam create gcp --projectID=yourproject-12345 --zone=europe-west3-a --serviceAccountID=constell-test --update-config ``` - This command creates IAM configuration in the GCP project `yourproject-12345` on the GCP zone `europe-west2-a` creating a new service account `constell-test`. It also updates the configuration file `constellation-conf.yaml` in your current directory with the IAM values filled in. + This command creates IAM configuration in the GCP project `yourproject-12345` on the GCP zone `europe-west3-a` creating a new service account `constell-test`. It also updates the configuration file `constellation-conf.yaml` in your current directory with the IAM values filled in. Note that only regions offering CVMs of the `C2D` or `N2D` series are supported. You can find a [list of all regions in Google's documentation](https://cloud.google.com/compute/docs/regions-zones#available), which you can filter by machine type `C2D` or `N2D`. diff --git a/docs/versioned_docs/version-2.19/workflows/config.md b/docs/versioned_docs/version-2.19/workflows/config.md index 95f791acd..a8a52980e 100644 --- a/docs/versioned_docs/version-2.19/workflows/config.md +++ b/docs/versioned_docs/version-2.19/workflows/config.md @@ -210,10 +210,10 @@ Paste the output into the corresponding fields of the `constellation-conf.yaml` You must be authenticated with the [GCP CLI](https://cloud.google.com/sdk/gcloud) in the shell session with a user that has the [required permissions for IAM creation](../getting-started/install.md#set-up-cloud-credentials). ```bash -constellation iam create gcp --projectID=yourproject-12345 --zone=europe-west2-a --serviceAccountID=constell-test +constellation iam create gcp --projectID=yourproject-12345 --zone=europe-west3-a --serviceAccountID=constell-test ``` -This command creates IAM configuration in the GCP project `yourproject-12345` on the GCP zone `europe-west2-a` creating a new service account `constell-test`. +This command creates IAM configuration in the GCP project `yourproject-12345` on the GCP zone `europe-west3-a` creating a new service account `constell-test`. Note that only regions offering CVMs of the `C2D` or `N2D` series are supported. You can find a [list of all regions in Google's documentation](https://cloud.google.com/compute/docs/regions-zones#available), which you can filter by machine type `N2D`. @@ -308,11 +308,11 @@ The following describes the configuration fields and how you obtain the required You can find it on the [welcome screen of your GCP project](https://console.cloud.google.com/welcome). For more information refer to [Google's documentation](https://support.google.com/googleapi/answer/7014113). -* **region**: The GCP region you want to deploy your cluster in, e.g., `us-west1`. +* **region**: The GCP region you want to deploy your cluster in, e.g., `us-central1`. You can find a [list of all regions in Google's documentation](https://cloud.google.com/compute/docs/regions-zones#available). -* **zone**: The GCP zone you want to deploy your cluster in, e.g., `us-west1-a`. +* **zone**: The GCP zone you want to deploy your cluster in, e.g., `us-central1-a`. You can find a [list of all zones in Google's documentation](https://cloud.google.com/compute/docs/regions-zones#available). diff --git a/docs/versioned_docs/version-2.2/getting-started/first-steps.md b/docs/versioned_docs/version-2.2/getting-started/first-steps.md index 3dcb4f6c5..ef4861cbe 100644 --- a/docs/versioned_docs/version-2.2/getting-started/first-steps.md +++ b/docs/versioned_docs/version-2.2/getting-started/first-steps.md @@ -149,11 +149,11 @@ If you don't have a cloud subscription, check out [MiniConstellation](first-step You can find it on the [welcome screen of your GCP project](https://console.cloud.google.com/welcome). For more information refer to [Google's documentation](https://support.google.com/googleapi/answer/7014113). - * **region**: The GCP region you want to deploy your cluster in, e.g., `us-west1`. + * **region**: The GCP region you want to deploy your cluster in, e.g., `us-central1`. You can find a [list of all regions in Google's documentation](https://cloud.google.com/compute/docs/regions-zones#available). - * **zone**: The GCP zone you want to deploy your cluster in, e.g., `us-west1-a`. + * **zone**: The GCP zone you want to deploy your cluster in, e.g., `us-central1-a`. You can find a [list of all zones in Google's documentation](https://cloud.google.com/compute/docs/regions-zones#available). diff --git a/docs/versioned_docs/version-2.20/getting-started/first-steps.md b/docs/versioned_docs/version-2.20/getting-started/first-steps.md index b197f659d..2afe95635 100644 --- a/docs/versioned_docs/version-2.20/getting-started/first-steps.md +++ b/docs/versioned_docs/version-2.20/getting-started/first-steps.md @@ -102,10 +102,10 @@ If you encounter any problem with the following steps, make sure to use the [lat ```bash - constellation iam create gcp --projectID=yourproject-12345 --zone=europe-west2-a --serviceAccountID=constell-test --update-config + constellation iam create gcp --projectID=yourproject-12345 --zone=europe-west3-a --serviceAccountID=constell-test --update-config ``` - This command creates IAM configuration in the GCP project `yourproject-12345` on the GCP zone `europe-west2-a` creating a new service account `constell-test`. It also updates the configuration file `constellation-conf.yaml` in your current directory with the IAM values filled in. + This command creates IAM configuration in the GCP project `yourproject-12345` on the GCP zone `europe-west3-a` creating a new service account `constell-test`. It also updates the configuration file `constellation-conf.yaml` in your current directory with the IAM values filled in. Note that only regions offering CVMs of the `C2D` or `N2D` series are supported. You can find a [list of all regions in Google's documentation](https://cloud.google.com/compute/docs/regions-zones#available), which you can filter by machine type `C2D` or `N2D`. diff --git a/docs/versioned_docs/version-2.20/workflows/config.md b/docs/versioned_docs/version-2.20/workflows/config.md index 95f791acd..a8a52980e 100644 --- a/docs/versioned_docs/version-2.20/workflows/config.md +++ b/docs/versioned_docs/version-2.20/workflows/config.md @@ -210,10 +210,10 @@ Paste the output into the corresponding fields of the `constellation-conf.yaml` You must be authenticated with the [GCP CLI](https://cloud.google.com/sdk/gcloud) in the shell session with a user that has the [required permissions for IAM creation](../getting-started/install.md#set-up-cloud-credentials). ```bash -constellation iam create gcp --projectID=yourproject-12345 --zone=europe-west2-a --serviceAccountID=constell-test +constellation iam create gcp --projectID=yourproject-12345 --zone=europe-west3-a --serviceAccountID=constell-test ``` -This command creates IAM configuration in the GCP project `yourproject-12345` on the GCP zone `europe-west2-a` creating a new service account `constell-test`. +This command creates IAM configuration in the GCP project `yourproject-12345` on the GCP zone `europe-west3-a` creating a new service account `constell-test`. Note that only regions offering CVMs of the `C2D` or `N2D` series are supported. You can find a [list of all regions in Google's documentation](https://cloud.google.com/compute/docs/regions-zones#available), which you can filter by machine type `N2D`. @@ -308,11 +308,11 @@ The following describes the configuration fields and how you obtain the required You can find it on the [welcome screen of your GCP project](https://console.cloud.google.com/welcome). For more information refer to [Google's documentation](https://support.google.com/googleapi/answer/7014113). -* **region**: The GCP region you want to deploy your cluster in, e.g., `us-west1`. +* **region**: The GCP region you want to deploy your cluster in, e.g., `us-central1`. You can find a [list of all regions in Google's documentation](https://cloud.google.com/compute/docs/regions-zones#available). -* **zone**: The GCP zone you want to deploy your cluster in, e.g., `us-west1-a`. +* **zone**: The GCP zone you want to deploy your cluster in, e.g., `us-central1-a`. You can find a [list of all zones in Google's documentation](https://cloud.google.com/compute/docs/regions-zones#available). diff --git a/docs/versioned_docs/version-2.21/getting-started/first-steps.md b/docs/versioned_docs/version-2.21/getting-started/first-steps.md index b197f659d..2afe95635 100644 --- a/docs/versioned_docs/version-2.21/getting-started/first-steps.md +++ b/docs/versioned_docs/version-2.21/getting-started/first-steps.md @@ -102,10 +102,10 @@ If you encounter any problem with the following steps, make sure to use the [lat ```bash - constellation iam create gcp --projectID=yourproject-12345 --zone=europe-west2-a --serviceAccountID=constell-test --update-config + constellation iam create gcp --projectID=yourproject-12345 --zone=europe-west3-a --serviceAccountID=constell-test --update-config ``` - This command creates IAM configuration in the GCP project `yourproject-12345` on the GCP zone `europe-west2-a` creating a new service account `constell-test`. It also updates the configuration file `constellation-conf.yaml` in your current directory with the IAM values filled in. + This command creates IAM configuration in the GCP project `yourproject-12345` on the GCP zone `europe-west3-a` creating a new service account `constell-test`. It also updates the configuration file `constellation-conf.yaml` in your current directory with the IAM values filled in. Note that only regions offering CVMs of the `C2D` or `N2D` series are supported. You can find a [list of all regions in Google's documentation](https://cloud.google.com/compute/docs/regions-zones#available), which you can filter by machine type `C2D` or `N2D`. diff --git a/docs/versioned_docs/version-2.21/workflows/config.md b/docs/versioned_docs/version-2.21/workflows/config.md index 95f791acd..a8a52980e 100644 --- a/docs/versioned_docs/version-2.21/workflows/config.md +++ b/docs/versioned_docs/version-2.21/workflows/config.md @@ -210,10 +210,10 @@ Paste the output into the corresponding fields of the `constellation-conf.yaml` You must be authenticated with the [GCP CLI](https://cloud.google.com/sdk/gcloud) in the shell session with a user that has the [required permissions for IAM creation](../getting-started/install.md#set-up-cloud-credentials). ```bash -constellation iam create gcp --projectID=yourproject-12345 --zone=europe-west2-a --serviceAccountID=constell-test +constellation iam create gcp --projectID=yourproject-12345 --zone=europe-west3-a --serviceAccountID=constell-test ``` -This command creates IAM configuration in the GCP project `yourproject-12345` on the GCP zone `europe-west2-a` creating a new service account `constell-test`. +This command creates IAM configuration in the GCP project `yourproject-12345` on the GCP zone `europe-west3-a` creating a new service account `constell-test`. Note that only regions offering CVMs of the `C2D` or `N2D` series are supported. You can find a [list of all regions in Google's documentation](https://cloud.google.com/compute/docs/regions-zones#available), which you can filter by machine type `N2D`. @@ -308,11 +308,11 @@ The following describes the configuration fields and how you obtain the required You can find it on the [welcome screen of your GCP project](https://console.cloud.google.com/welcome). For more information refer to [Google's documentation](https://support.google.com/googleapi/answer/7014113). -* **region**: The GCP region you want to deploy your cluster in, e.g., `us-west1`. +* **region**: The GCP region you want to deploy your cluster in, e.g., `us-central1`. You can find a [list of all regions in Google's documentation](https://cloud.google.com/compute/docs/regions-zones#available). -* **zone**: The GCP zone you want to deploy your cluster in, e.g., `us-west1-a`. +* **zone**: The GCP zone you want to deploy your cluster in, e.g., `us-central1-a`. You can find a [list of all zones in Google's documentation](https://cloud.google.com/compute/docs/regions-zones#available). diff --git a/docs/versioned_docs/version-2.22/getting-started/first-steps.md b/docs/versioned_docs/version-2.22/getting-started/first-steps.md index a6ef2908b..fb8437a06 100644 --- a/docs/versioned_docs/version-2.22/getting-started/first-steps.md +++ b/docs/versioned_docs/version-2.22/getting-started/first-steps.md @@ -102,10 +102,10 @@ If you encounter any problem with the following steps, make sure to use the [lat ```bash - constellation iam create gcp --projectID=yourproject-12345 --zone=europe-west2-a --prefix=constell-test --update-config + constellation iam create gcp --projectID=yourproject-12345 --zone=europe-west3-a --prefix=constell-test --update-config ``` - This command creates IAM configuration in the GCP project `yourproject-12345` on the GCP zone `europe-west2-a` creating a new service account `constell-test`. It also updates the configuration file `constellation-conf.yaml` in your current directory with the IAM values filled in. + This command creates IAM configuration in the GCP project `yourproject-12345` on the GCP zone `europe-west3-a` creating a new service account `constell-test`. It also updates the configuration file `constellation-conf.yaml` in your current directory with the IAM values filled in. Note that only regions offering CVMs of the `C2D` or `N2D` series are supported. You can find a [list of all regions in Google's documentation](https://cloud.google.com/compute/docs/regions-zones#available), which you can filter by machine type `C2D` or `N2D`. diff --git a/docs/versioned_docs/version-2.22/workflows/config.md b/docs/versioned_docs/version-2.22/workflows/config.md index 35ed98302..7868ff1be 100644 --- a/docs/versioned_docs/version-2.22/workflows/config.md +++ b/docs/versioned_docs/version-2.22/workflows/config.md @@ -210,10 +210,10 @@ Paste the output into the corresponding fields of the `constellation-conf.yaml` You must be authenticated with the [GCP CLI](https://cloud.google.com/sdk/gcloud) in the shell session with a user that has the [required permissions for IAM creation](../getting-started/install.md#set-up-cloud-credentials). ```bash -constellation iam create gcp --projectID=yourproject-12345 --zone=europe-west2-a --prefix=constell-test +constellation iam create gcp --projectID=yourproject-12345 --zone=europe-west3-a --prefix=constell-test ``` -This command creates IAM configuration in the GCP project `yourproject-12345` on the GCP zone `europe-west2-a` creating a new service account `constell-test`. +This command creates IAM configuration in the GCP project `yourproject-12345` on the GCP zone `europe-west3-a` creating a new service account `constell-test`. Note that only regions offering CVMs of the `C2D` or `N2D` series are supported. You can find a [list of all regions in Google's documentation](https://cloud.google.com/compute/docs/regions-zones#available), which you can filter by machine type `N2D`. @@ -308,11 +308,11 @@ The following describes the configuration fields and how you obtain the required You can find it on the [welcome screen of your GCP project](https://console.cloud.google.com/welcome). For more information refer to [Google's documentation](https://support.google.com/googleapi/answer/7014113). -* **region**: The GCP region you want to deploy your cluster in, e.g., `us-west1`. +* **region**: The GCP region you want to deploy your cluster in, e.g., `us-central1`. You can find a [list of all regions in Google's documentation](https://cloud.google.com/compute/docs/regions-zones#available). -* **zone**: The GCP zone you want to deploy your cluster in, e.g., `us-west1-a`. +* **zone**: The GCP zone you want to deploy your cluster in, e.g., `us-central1-a`. You can find a [list of all zones in Google's documentation](https://cloud.google.com/compute/docs/regions-zones#available). diff --git a/docs/versioned_docs/version-2.3/getting-started/first-steps.md b/docs/versioned_docs/version-2.3/getting-started/first-steps.md index 02fbdb696..d1cd06cf6 100644 --- a/docs/versioned_docs/version-2.3/getting-started/first-steps.md +++ b/docs/versioned_docs/version-2.3/getting-started/first-steps.md @@ -62,10 +62,10 @@ If you don't have a cloud subscription, check out [MiniConstellation](first-step ```bash - constellation iam create gcp --projectID=yourproject-12345 --zone=europe-west2-a --serviceAccountID=constell-test + constellation iam create gcp --projectID=yourproject-12345 --zone=europe-west3-a --serviceAccountID=constell-test ``` - This command creates IAM configuration in the GCP project `yourproject-12345` on the GCP zone `europe-west2-a` creating a new service account `constell-test`. + This command creates IAM configuration in the GCP project `yourproject-12345` on the GCP zone `europe-west3-a` creating a new service account `constell-test`. Note that only regions offering CVMs of the `N2D` series are supported. You can find a [list of all regions in Google's documentation](https://cloud.google.com/compute/docs/regions-zones#available), which you can filter by machine type `N2D`. diff --git a/docs/versioned_docs/version-2.3/workflows/config.md b/docs/versioned_docs/version-2.3/workflows/config.md index 652e58a38..20aa0dada 100644 --- a/docs/versioned_docs/version-2.3/workflows/config.md +++ b/docs/versioned_docs/version-2.3/workflows/config.md @@ -90,10 +90,10 @@ Since `clientSecretValue` is a sensitive value, you can leave it empty in the co You must be authenticated with the [GCP CLI](https://cloud.google.com/sdk/gcloud) in the shell session. ```bash -constellation iam create gcp --projectID=yourproject-12345 --zone=europe-west2-a --serviceAccountID=constell-test +constellation iam create gcp --projectID=yourproject-12345 --zone=europe-west3-a --serviceAccountID=constell-test ``` -This command creates IAM configuration in the GCP project `yourproject-12345` on the GCP zone `europe-west2-a` creating a new service account `constell-test`. +This command creates IAM configuration in the GCP project `yourproject-12345` on the GCP zone `europe-west3-a` creating a new service account `constell-test`. Note that only regions offering CVMs of the `N2D` series are supported. You can find a [list of all regions in Google's documentation](https://cloud.google.com/compute/docs/regions-zones#available), which you can filter by machine type `N2D`. @@ -183,11 +183,11 @@ The following describes the configuration fields and how you obtain the required You can find it on the [welcome screen of your GCP project](https://console.cloud.google.com/welcome). For more information refer to [Google's documentation](https://support.google.com/googleapi/answer/7014113). -* **region**: The GCP region you want to deploy your cluster in, e.g., `us-west1`. +* **region**: The GCP region you want to deploy your cluster in, e.g., `us-central1`. You can find a [list of all regions in Google's documentation](https://cloud.google.com/compute/docs/regions-zones#available). -* **zone**: The GCP zone you want to deploy your cluster in, e.g., `us-west1-a`. +* **zone**: The GCP zone you want to deploy your cluster in, e.g., `us-central1-a`. You can find a [list of all zones in Google's documentation](https://cloud.google.com/compute/docs/regions-zones#available). diff --git a/docs/versioned_docs/version-2.4/getting-started/first-steps.md b/docs/versioned_docs/version-2.4/getting-started/first-steps.md index d277b9e09..44e66ea95 100644 --- a/docs/versioned_docs/version-2.4/getting-started/first-steps.md +++ b/docs/versioned_docs/version-2.4/getting-started/first-steps.md @@ -62,10 +62,10 @@ If you don't have a cloud subscription, check out [MiniConstellation](first-step ```bash - constellation iam create gcp --projectID=yourproject-12345 --zone=europe-west2-a --serviceAccountID=constell-test + constellation iam create gcp --projectID=yourproject-12345 --zone=europe-west3-a --serviceAccountID=constell-test ``` - This command creates IAM configuration in the GCP project `yourproject-12345` on the GCP zone `europe-west2-a` creating a new service account `constell-test`. + This command creates IAM configuration in the GCP project `yourproject-12345` on the GCP zone `europe-west3-a` creating a new service account `constell-test`. Note that only regions offering CVMs of the `N2D` series are supported. You can find a [list of all regions in Google's documentation](https://cloud.google.com/compute/docs/regions-zones#available), which you can filter by machine type `N2D`. diff --git a/docs/versioned_docs/version-2.4/workflows/config.md b/docs/versioned_docs/version-2.4/workflows/config.md index 652e58a38..20aa0dada 100644 --- a/docs/versioned_docs/version-2.4/workflows/config.md +++ b/docs/versioned_docs/version-2.4/workflows/config.md @@ -90,10 +90,10 @@ Since `clientSecretValue` is a sensitive value, you can leave it empty in the co You must be authenticated with the [GCP CLI](https://cloud.google.com/sdk/gcloud) in the shell session. ```bash -constellation iam create gcp --projectID=yourproject-12345 --zone=europe-west2-a --serviceAccountID=constell-test +constellation iam create gcp --projectID=yourproject-12345 --zone=europe-west3-a --serviceAccountID=constell-test ``` -This command creates IAM configuration in the GCP project `yourproject-12345` on the GCP zone `europe-west2-a` creating a new service account `constell-test`. +This command creates IAM configuration in the GCP project `yourproject-12345` on the GCP zone `europe-west3-a` creating a new service account `constell-test`. Note that only regions offering CVMs of the `N2D` series are supported. You can find a [list of all regions in Google's documentation](https://cloud.google.com/compute/docs/regions-zones#available), which you can filter by machine type `N2D`. @@ -183,11 +183,11 @@ The following describes the configuration fields and how you obtain the required You can find it on the [welcome screen of your GCP project](https://console.cloud.google.com/welcome). For more information refer to [Google's documentation](https://support.google.com/googleapi/answer/7014113). -* **region**: The GCP region you want to deploy your cluster in, e.g., `us-west1`. +* **region**: The GCP region you want to deploy your cluster in, e.g., `us-central1`. You can find a [list of all regions in Google's documentation](https://cloud.google.com/compute/docs/regions-zones#available). -* **zone**: The GCP zone you want to deploy your cluster in, e.g., `us-west1-a`. +* **zone**: The GCP zone you want to deploy your cluster in, e.g., `us-central1-a`. You can find a [list of all zones in Google's documentation](https://cloud.google.com/compute/docs/regions-zones#available). diff --git a/docs/versioned_docs/version-2.5/getting-started/first-steps.md b/docs/versioned_docs/version-2.5/getting-started/first-steps.md index 02b60d45a..9ce1d6be2 100644 --- a/docs/versioned_docs/version-2.5/getting-started/first-steps.md +++ b/docs/versioned_docs/version-2.5/getting-started/first-steps.md @@ -34,10 +34,10 @@ If you don't have a cloud subscription, check out [MiniConstellation](first-step ```bash - constellation iam create gcp --projectID=yourproject-12345 --zone=europe-west2-a --serviceAccountID=constell-test --generate-config + constellation iam create gcp --projectID=yourproject-12345 --zone=europe-west3-a --serviceAccountID=constell-test --generate-config ``` - This command creates IAM configuration in the GCP project `yourproject-12345` on the GCP zone `europe-west2-a` creating a new service account `constell-test`. It also creates the configuration file `constellation-conf.yaml` in your current directory with the IAM values filled in. + This command creates IAM configuration in the GCP project `yourproject-12345` on the GCP zone `europe-west3-a` creating a new service account `constell-test`. It also creates the configuration file `constellation-conf.yaml` in your current directory with the IAM values filled in. Note that only regions offering CVMs of the `N2D` series are supported. You can find a [list of all regions in Google's documentation](https://cloud.google.com/compute/docs/regions-zones#available), which you can filter by machine type `N2D`. diff --git a/docs/versioned_docs/version-2.5/workflows/config.md b/docs/versioned_docs/version-2.5/workflows/config.md index 2edf3bdf6..71f2d019d 100644 --- a/docs/versioned_docs/version-2.5/workflows/config.md +++ b/docs/versioned_docs/version-2.5/workflows/config.md @@ -96,10 +96,10 @@ Since `clientSecretValue` is a sensitive value, you can leave it empty in the co You must be authenticated with the [GCP CLI](https://cloud.google.com/sdk/gcloud) in the shell session. ```bash -constellation iam create gcp --projectID=yourproject-12345 --zone=europe-west2-a --serviceAccountID=constell-test +constellation iam create gcp --projectID=yourproject-12345 --zone=europe-west3-a --serviceAccountID=constell-test ``` -This command creates IAM configuration in the GCP project `yourproject-12345` on the GCP zone `europe-west2-a` creating a new service account `constell-test`. +This command creates IAM configuration in the GCP project `yourproject-12345` on the GCP zone `europe-west3-a` creating a new service account `constell-test`. Note that only regions offering CVMs of the `N2D` series are supported. You can find a [list of all regions in Google's documentation](https://cloud.google.com/compute/docs/regions-zones#available), which you can filter by machine type `N2D`. @@ -189,11 +189,11 @@ The following describes the configuration fields and how you obtain the required You can find it on the [welcome screen of your GCP project](https://console.cloud.google.com/welcome). For more information refer to [Google's documentation](https://support.google.com/googleapi/answer/7014113). -* **region**: The GCP region you want to deploy your cluster in, e.g., `us-west1`. +* **region**: The GCP region you want to deploy your cluster in, e.g., `us-central1`. You can find a [list of all regions in Google's documentation](https://cloud.google.com/compute/docs/regions-zones#available). -* **zone**: The GCP zone you want to deploy your cluster in, e.g., `us-west1-a`. +* **zone**: The GCP zone you want to deploy your cluster in, e.g., `us-central1-a`. You can find a [list of all zones in Google's documentation](https://cloud.google.com/compute/docs/regions-zones#available). diff --git a/docs/versioned_docs/version-2.6/getting-started/first-steps.md b/docs/versioned_docs/version-2.6/getting-started/first-steps.md index aba09f5c7..df489f52a 100644 --- a/docs/versioned_docs/version-2.6/getting-started/first-steps.md +++ b/docs/versioned_docs/version-2.6/getting-started/first-steps.md @@ -38,10 +38,10 @@ If you encounter any problem with the following steps, make sure to use the [lat ```bash - constellation iam create gcp --projectID=yourproject-12345 --zone=europe-west2-a --serviceAccountID=constell-test --generate-config + constellation iam create gcp --projectID=yourproject-12345 --zone=europe-west3-a --serviceAccountID=constell-test --generate-config ``` - This command creates IAM configuration in the GCP project `yourproject-12345` on the GCP zone `europe-west2-a` creating a new service account `constell-test`. It also creates the configuration file `constellation-conf.yaml` in your current directory with the IAM values filled in. + This command creates IAM configuration in the GCP project `yourproject-12345` on the GCP zone `europe-west3-a` creating a new service account `constell-test`. It also creates the configuration file `constellation-conf.yaml` in your current directory with the IAM values filled in. Note that only regions offering CVMs of the `C2D` or `N2D` series are supported. You can find a [list of all regions in Google's documentation](https://cloud.google.com/compute/docs/regions-zones#available), which you can filter by machine type `C2D` or `N2D`. diff --git a/docs/versioned_docs/version-2.6/workflows/config.md b/docs/versioned_docs/version-2.6/workflows/config.md index 5a1ba92d1..56979ee13 100644 --- a/docs/versioned_docs/version-2.6/workflows/config.md +++ b/docs/versioned_docs/version-2.6/workflows/config.md @@ -109,10 +109,10 @@ Since `clientSecretValue` is a sensitive value, you can leave it empty in the co You must be authenticated with the [GCP CLI](https://cloud.google.com/sdk/gcloud) in the shell session. ```bash -constellation iam create gcp --projectID=yourproject-12345 --zone=europe-west2-a --serviceAccountID=constell-test +constellation iam create gcp --projectID=yourproject-12345 --zone=europe-west3-a --serviceAccountID=constell-test ``` -This command creates IAM configuration in the GCP project `yourproject-12345` on the GCP zone `europe-west2-a` creating a new service account `constell-test`. +This command creates IAM configuration in the GCP project `yourproject-12345` on the GCP zone `europe-west3-a` creating a new service account `constell-test`. Note that only regions offering CVMs of the `C2D` or `N2D` series are supported. You can find a [list of all regions in Google's documentation](https://cloud.google.com/compute/docs/regions-zones#available), which you can filter by machine type `N2D`. @@ -202,11 +202,11 @@ The following describes the configuration fields and how you obtain the required You can find it on the [welcome screen of your GCP project](https://console.cloud.google.com/welcome). For more information refer to [Google's documentation](https://support.google.com/googleapi/answer/7014113). -* **region**: The GCP region you want to deploy your cluster in, e.g., `us-west1`. +* **region**: The GCP region you want to deploy your cluster in, e.g., `us-central1`. You can find a [list of all regions in Google's documentation](https://cloud.google.com/compute/docs/regions-zones#available). -* **zone**: The GCP zone you want to deploy your cluster in, e.g., `us-west1-a`. +* **zone**: The GCP zone you want to deploy your cluster in, e.g., `us-central1-a`. You can find a [list of all zones in Google's documentation](https://cloud.google.com/compute/docs/regions-zones#available). diff --git a/docs/versioned_docs/version-2.7/getting-started/first-steps.md b/docs/versioned_docs/version-2.7/getting-started/first-steps.md index eca497438..c1c3a3fe0 100644 --- a/docs/versioned_docs/version-2.7/getting-started/first-steps.md +++ b/docs/versioned_docs/version-2.7/getting-started/first-steps.md @@ -38,10 +38,10 @@ If you encounter any problem with the following steps, make sure to use the [lat ```bash - constellation iam create gcp --projectID=yourproject-12345 --zone=europe-west2-a --serviceAccountID=constell-test --generate-config + constellation iam create gcp --projectID=yourproject-12345 --zone=europe-west3-a --serviceAccountID=constell-test --generate-config ``` - This command creates IAM configuration in the GCP project `yourproject-12345` on the GCP zone `europe-west2-a` creating a new service account `constell-test`. It also creates the configuration file `constellation-conf.yaml` in your current directory with the IAM values filled in. + This command creates IAM configuration in the GCP project `yourproject-12345` on the GCP zone `europe-west3-a` creating a new service account `constell-test`. It also creates the configuration file `constellation-conf.yaml` in your current directory with the IAM values filled in. Note that only regions offering CVMs of the `C2D` or `N2D` series are supported. You can find a [list of all regions in Google's documentation](https://cloud.google.com/compute/docs/regions-zones#available), which you can filter by machine type `C2D` or `N2D`. diff --git a/docs/versioned_docs/version-2.7/workflows/config.md b/docs/versioned_docs/version-2.7/workflows/config.md index 5640bfd7d..032b22943 100644 --- a/docs/versioned_docs/version-2.7/workflows/config.md +++ b/docs/versioned_docs/version-2.7/workflows/config.md @@ -109,10 +109,10 @@ Since `clientSecretValue` is a sensitive value, you can leave it empty in the co You must be authenticated with the [GCP CLI](https://cloud.google.com/sdk/gcloud) in the shell session with a user that has the [required permissions for IAM creation](../getting-started/install.md#set-up-cloud-credentials). ```bash -constellation iam create gcp --projectID=yourproject-12345 --zone=europe-west2-a --serviceAccountID=constell-test +constellation iam create gcp --projectID=yourproject-12345 --zone=europe-west3-a --serviceAccountID=constell-test ``` -This command creates IAM configuration in the GCP project `yourproject-12345` on the GCP zone `europe-west2-a` creating a new service account `constell-test`. +This command creates IAM configuration in the GCP project `yourproject-12345` on the GCP zone `europe-west3-a` creating a new service account `constell-test`. Note that only regions offering CVMs of the `C2D` or `N2D` series are supported. You can find a [list of all regions in Google's documentation](https://cloud.google.com/compute/docs/regions-zones#available), which you can filter by machine type `N2D`. @@ -204,11 +204,11 @@ The following describes the configuration fields and how you obtain the required You can find it on the [welcome screen of your GCP project](https://console.cloud.google.com/welcome). For more information refer to [Google's documentation](https://support.google.com/googleapi/answer/7014113). -* **region**: The GCP region you want to deploy your cluster in, e.g., `us-west1`. +* **region**: The GCP region you want to deploy your cluster in, e.g., `us-central1`. You can find a [list of all regions in Google's documentation](https://cloud.google.com/compute/docs/regions-zones#available). -* **zone**: The GCP zone you want to deploy your cluster in, e.g., `us-west1-a`. +* **zone**: The GCP zone you want to deploy your cluster in, e.g., `us-central1-a`. You can find a [list of all zones in Google's documentation](https://cloud.google.com/compute/docs/regions-zones#available). diff --git a/docs/versioned_docs/version-2.8/getting-started/first-steps.md b/docs/versioned_docs/version-2.8/getting-started/first-steps.md index 43ed0f923..8d5cc5cbb 100644 --- a/docs/versioned_docs/version-2.8/getting-started/first-steps.md +++ b/docs/versioned_docs/version-2.8/getting-started/first-steps.md @@ -39,10 +39,10 @@ If you encounter any problem with the following steps, make sure to use the [lat ```bash - constellation iam create gcp --projectID=yourproject-12345 --zone=europe-west2-a --serviceAccountID=constell-test --generate-config + constellation iam create gcp --projectID=yourproject-12345 --zone=europe-west3-a --serviceAccountID=constell-test --generate-config ``` - This command creates IAM configuration in the GCP project `yourproject-12345` on the GCP zone `europe-west2-a` creating a new service account `constell-test`. It also creates the configuration file `constellation-conf.yaml` in your current directory with the IAM values filled in. + This command creates IAM configuration in the GCP project `yourproject-12345` on the GCP zone `europe-west3-a` creating a new service account `constell-test`. It also creates the configuration file `constellation-conf.yaml` in your current directory with the IAM values filled in. Note that only regions offering CVMs of the `C2D` or `N2D` series are supported. You can find a [list of all regions in Google's documentation](https://cloud.google.com/compute/docs/regions-zones#available), which you can filter by machine type `C2D` or `N2D`. diff --git a/docs/versioned_docs/version-2.8/workflows/config.md b/docs/versioned_docs/version-2.8/workflows/config.md index 3330abe8a..f10ba14ec 100644 --- a/docs/versioned_docs/version-2.8/workflows/config.md +++ b/docs/versioned_docs/version-2.8/workflows/config.md @@ -110,10 +110,10 @@ Since `clientSecretValue` is a sensitive value, you can leave it empty in the co You must be authenticated with the [GCP CLI](https://cloud.google.com/sdk/gcloud) in the shell session with a user that has the [required permissions for IAM creation](../getting-started/install.md#set-up-cloud-credentials). ```bash -constellation iam create gcp --projectID=yourproject-12345 --zone=europe-west2-a --serviceAccountID=constell-test +constellation iam create gcp --projectID=yourproject-12345 --zone=europe-west3-a --serviceAccountID=constell-test ``` -This command creates IAM configuration in the GCP project `yourproject-12345` on the GCP zone `europe-west2-a` creating a new service account `constell-test`. +This command creates IAM configuration in the GCP project `yourproject-12345` on the GCP zone `europe-west3-a` creating a new service account `constell-test`. Note that only regions offering CVMs of the `C2D` or `N2D` series are supported. You can find a [list of all regions in Google's documentation](https://cloud.google.com/compute/docs/regions-zones#available), which you can filter by machine type `N2D`. @@ -206,11 +206,11 @@ The following describes the configuration fields and how you obtain the required You can find it on the [welcome screen of your GCP project](https://console.cloud.google.com/welcome). For more information refer to [Google's documentation](https://support.google.com/googleapi/answer/7014113). -* **region**: The GCP region you want to deploy your cluster in, e.g., `us-west1`. +* **region**: The GCP region you want to deploy your cluster in, e.g., `us-central1`. You can find a [list of all regions in Google's documentation](https://cloud.google.com/compute/docs/regions-zones#available). -* **zone**: The GCP zone you want to deploy your cluster in, e.g., `us-west1-a`. +* **zone**: The GCP zone you want to deploy your cluster in, e.g., `us-central1-a`. You can find a [list of all zones in Google's documentation](https://cloud.google.com/compute/docs/regions-zones#available). diff --git a/docs/versioned_docs/version-2.9/getting-started/first-steps.md b/docs/versioned_docs/version-2.9/getting-started/first-steps.md index a29ff276c..6b0a06a06 100644 --- a/docs/versioned_docs/version-2.9/getting-started/first-steps.md +++ b/docs/versioned_docs/version-2.9/getting-started/first-steps.md @@ -67,10 +67,10 @@ If you encounter any problem with the following steps, make sure to use the [lat ```bash - constellation iam create gcp --projectID=yourproject-12345 --zone=europe-west2-a --serviceAccountID=constell-test --update-config + constellation iam create gcp --projectID=yourproject-12345 --zone=europe-west3-a --serviceAccountID=constell-test --update-config ``` - This command creates IAM configuration in the GCP project `yourproject-12345` on the GCP zone `europe-west2-a` creating a new service account `constell-test`. It also updates the configuration file `constellation-conf.yaml` in your current directory with the IAM values filled in. + This command creates IAM configuration in the GCP project `yourproject-12345` on the GCP zone `europe-west3-a` creating a new service account `constell-test`. It also updates the configuration file `constellation-conf.yaml` in your current directory with the IAM values filled in. Note that only regions offering CVMs of the `C2D` or `N2D` series are supported. You can find a [list of all regions in Google's documentation](https://cloud.google.com/compute/docs/regions-zones#available), which you can filter by machine type `C2D` or `N2D`. diff --git a/docs/versioned_docs/version-2.9/workflows/config.md b/docs/versioned_docs/version-2.9/workflows/config.md index 43313d88e..22a2821d8 100644 --- a/docs/versioned_docs/version-2.9/workflows/config.md +++ b/docs/versioned_docs/version-2.9/workflows/config.md @@ -117,10 +117,10 @@ Paste the output into the corresponding fields of the `constellation-conf.yaml` You must be authenticated with the [GCP CLI](https://cloud.google.com/sdk/gcloud) in the shell session with a user that has the [required permissions for IAM creation](../getting-started/install.md#set-up-cloud-credentials). ```bash -constellation iam create gcp --projectID=yourproject-12345 --zone=europe-west2-a --serviceAccountID=constell-test +constellation iam create gcp --projectID=yourproject-12345 --zone=europe-west3-a --serviceAccountID=constell-test ``` -This command creates IAM configuration in the GCP project `yourproject-12345` on the GCP zone `europe-west2-a` creating a new service account `constell-test`. +This command creates IAM configuration in the GCP project `yourproject-12345` on the GCP zone `europe-west3-a` creating a new service account `constell-test`. Note that only regions offering CVMs of the `C2D` or `N2D` series are supported. You can find a [list of all regions in Google's documentation](https://cloud.google.com/compute/docs/regions-zones#available), which you can filter by machine type `N2D`. @@ -197,11 +197,11 @@ The following describes the configuration fields and how you obtain the required You can find it on the [welcome screen of your GCP project](https://console.cloud.google.com/welcome). For more information refer to [Google's documentation](https://support.google.com/googleapi/answer/7014113). -* **region**: The GCP region you want to deploy your cluster in, e.g., `us-west1`. +* **region**: The GCP region you want to deploy your cluster in, e.g., `us-central1`. You can find a [list of all regions in Google's documentation](https://cloud.google.com/compute/docs/regions-zones#available). -* **zone**: The GCP zone you want to deploy your cluster in, e.g., `us-west1-a`. +* **zone**: The GCP zone you want to deploy your cluster in, e.g., `us-central1-a`. You can find a [list of all zones in Google's documentation](https://cloud.google.com/compute/docs/regions-zones#available). From d6567ec52d2d81312743cbd607e1751736feb540 Mon Sep 17 00:00:00 2001 From: Thomas Tendyck Date: Wed, 16 Apr 2025 11:05:32 +0200 Subject: [PATCH 227/311] cli: support http proxy --- cli/internal/cmd/apply.go | 3 +-- cli/internal/cmd/recover.go | 3 +-- cli/internal/cmd/verify.go | 2 +- internal/grpc/dialer/dialer.go | 3 +++ .../internal/provider/cluster_resource.go | 3 +-- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/cli/internal/cmd/apply.go b/cli/internal/cmd/apply.go index 199cc1d3b..439bf5708 100644 --- a/cli/internal/cmd/apply.go +++ b/cli/internal/cmd/apply.go @@ -14,7 +14,6 @@ import ( "io" "io/fs" "log/slog" - "net" "os" "path/filepath" "slices" @@ -229,7 +228,7 @@ func runApply(cmd *cobra.Command, _ []string) error { } newDialer := func(validator atls.Validator) *dialer.Dialer { - return dialer.New(nil, validator, &net.Dialer{}) + return dialer.New(nil, validator, nil) } upgradeID := generateUpgradeID(upgradeCmdKindApply) diff --git a/cli/internal/cmd/recover.go b/cli/internal/cmd/recover.go index 17ffa4c32..e8c9f83a6 100644 --- a/cli/internal/cmd/recover.go +++ b/cli/internal/cmd/recover.go @@ -11,7 +11,6 @@ import ( "errors" "fmt" "io" - "net" "sync" "time" @@ -78,7 +77,7 @@ func runRecover(cmd *cobra.Command, _ []string) error { } fileHandler := file.NewHandler(afero.NewOsFs()) newDialer := func(validator atls.Validator) *dialer.Dialer { - return dialer.New(nil, validator, &net.Dialer{}) + return dialer.New(nil, validator, nil) } r := &recoverCmd{log: log, configFetcher: attestationconfigapi.NewFetcher()} if err := r.flags.parse(cmd.Flags()); err != nil { diff --git a/cli/internal/cmd/verify.go b/cli/internal/cmd/verify.go index 523920a20..264e794c2 100644 --- a/cli/internal/cmd/verify.go +++ b/cli/internal/cmd/verify.go @@ -108,7 +108,7 @@ func runVerify(cmd *cobra.Command, _ []string) error { fileHandler := file.NewHandler(afero.NewOsFs()) verifyClient := &constellationVerifier{ - dialer: dialer.New(nil, nil, &net.Dialer{}), + dialer: dialer.New(nil, nil, nil), log: log, } diff --git a/internal/grpc/dialer/dialer.go b/internal/grpc/dialer/dialer.go index 44bf33d87..a04e56310 100644 --- a/internal/grpc/dialer/dialer.go +++ b/internal/grpc/dialer/dialer.go @@ -67,6 +67,9 @@ func (d *Dialer) DialNoVerify(target string) (*grpc.ClientConn, error) { } func (d *Dialer) grpcWithDialer() grpc.DialOption { + if d.netDialer == nil { + return grpc.EmptyDialOption{} + } return grpc.WithContextDialer(func(ctx context.Context, addr string) (net.Conn, error) { return d.netDialer.DialContext(ctx, "tcp", addr) }) diff --git a/terraform-provider-constellation/internal/provider/cluster_resource.go b/terraform-provider-constellation/internal/provider/cluster_resource.go index 978771e83..c002ccad5 100644 --- a/terraform-provider-constellation/internal/provider/cluster_resource.go +++ b/terraform-provider-constellation/internal/provider/cluster_resource.go @@ -15,7 +15,6 @@ import ( "errors" "fmt" "io" - "net" "net/url" "regexp" "strings" @@ -550,7 +549,7 @@ func (r *ClusterResource) Configure(_ context.Context, req resource.ConfigureReq } newDialer := func(validator atls.Validator) *dialer.Dialer { - return dialer.New(nil, validator, &net.Dialer{}) + return dialer.New(nil, validator, nil) } r.newApplier = func(ctx context.Context, _ atls.Validator) *constellation.Applier { From 0fb43e03b1fafefdcb134f6087bf6dd0e9fdde51 Mon Sep 17 00:00:00 2001 From: Moritz Sanft <58110325+msanft@users.noreply.github.com> Date: Wed, 16 Apr 2025 18:39:47 +0200 Subject: [PATCH 228/311] bazel: update kernel to 6.6.87 (#3771) --- bazel/toolchains/linux_kernel.bzl | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/bazel/toolchains/linux_kernel.bzl b/bazel/toolchains/linux_kernel.bzl index b4aab0fa5..d34d15324 100644 --- a/bazel/toolchains/linux_kernel.bzl +++ b/bazel/toolchains/linux_kernel.bzl @@ -9,38 +9,38 @@ def kernel_rpms(): http_file( name = "kernel_lts", urls = [ - "https://cdn.confidential.cloud/constellation/cas/sha256/c87995e19c04e2f033e6db5e92bfcb845ac015722e776c09a7af4c82c86cd273", - "https://cdn.confidential.cloud/constellation/kernel/6.6.30-100.constellation/kernel-6.6.30-100.constellation.fc40.x86_64.rpm", + "https://cdn.confidential.cloud/constellation/cas/sha256/7834bc4bc7e088c98505956382884bdc670ab9a9283288b7fef04a43df31356e", + "https://cdn.confidential.cloud/constellation/kernel/6.6.87-100.constellation/kernel-6.6.87-100.constellation.fc40.x86_64.rpm", ], downloaded_file_path = "kernel-lts.rpm", - sha256 = "c87995e19c04e2f033e6db5e92bfcb845ac015722e776c09a7af4c82c86cd273", + sha256 = "7834bc4bc7e088c98505956382884bdc670ab9a9283288b7fef04a43df31356e", ) http_file( name = "kernel_core_lts", urls = [ - "https://cdn.confidential.cloud/constellation/cas/sha256/5692d862b0cc0c442c581e5f3dc9f3c36cabda0c29d3f62e9b6313a6ec88b140", - "https://cdn.confidential.cloud/constellation/kernel/6.6.30-100.constellation/kernel-core-6.6.30-100.constellation.fc40.x86_64.rpm", + "https://cdn.confidential.cloud/constellation/cas/sha256/2763c699d1e2f9810421ac7af2e9c94c6f98533e83f2938c26f1d824e3559b97", + "https://cdn.confidential.cloud/constellation/kernel/6.6.87-100.constellation/kernel-core-6.6.87-100.constellation.fc40.x86_64.rpm", ], downloaded_file_path = "kernel-core-lts.rpm", - sha256 = "5692d862b0cc0c442c581e5f3dc9f3c36cabda0c29d3f62e9b6313a6ec88b140", + sha256 = "2763c699d1e2f9810421ac7af2e9c94c6f98533e83f2938c26f1d824e3559b97", ) http_file( name = "kernel_modules_lts", urls = [ - "https://cdn.confidential.cloud/constellation/cas/sha256/e1b697343b4f8ed8e992cd92860208dc1c28eb8b25a88f42f426326a0bbc307f", - "https://cdn.confidential.cloud/constellation/kernel/6.6.30-100.constellation/kernel-modules-6.6.30-100.constellation.fc40.x86_64.rpm", + "https://cdn.confidential.cloud/constellation/cas/sha256/a7604eec263f190db573d809d20336bbf75e46c51f5977f5db95bb88bfec56d3", + "https://cdn.confidential.cloud/constellation/kernel/6.6.87-100.constellation/kernel-modules-6.6.87-100.constellation.fc40.x86_64.rpm", ], downloaded_file_path = "kernel-modules-lts.rpm", - sha256 = "e1b697343b4f8ed8e992cd92860208dc1c28eb8b25a88f42f426326a0bbc307f", + sha256 = "a7604eec263f190db573d809d20336bbf75e46c51f5977f5db95bb88bfec56d3", ) http_file( name = "kernel_modules_core_lts", urls = [ - "https://cdn.confidential.cloud/constellation/cas/sha256/448c6b10d9ed02aed078ff77223f5e495b2041be12d92eb0e5ca5726a08e0626", - "https://cdn.confidential.cloud/constellation/kernel/6.6.30-100.constellation/kernel-modules-core-6.6.30-100.constellation.fc40.x86_64.rpm", + "https://cdn.confidential.cloud/constellation/cas/sha256/648fd503d7d54608fbd62ace87c4da098f72abbaac1ab7e343327fc24ccef7f8", + "https://cdn.confidential.cloud/constellation/kernel/6.6.87-100.constellation/kernel-modules-core-6.6.87-100.constellation.fc40.x86_64.rpm", ], downloaded_file_path = "kernel-modules-core-lts.rpm", - sha256 = "448c6b10d9ed02aed078ff77223f5e495b2041be12d92eb0e5ca5726a08e0626", + sha256 = "648fd503d7d54608fbd62ace87c4da098f72abbaac1ab7e343327fc24ccef7f8", ) # mainline kernel From 61e61b0b6e2580fe92b63ffb63ea6cbfc4affb06 Mon Sep 17 00:00:00 2001 From: edgelessci <71088502+edgelessci@users.noreply.github.com> Date: Sun, 20 Apr 2025 16:20:46 +0200 Subject: [PATCH 229/311] image: update locked rpms (#3775) Co-authored-by: edgelessci --- image/mirror/SHA256SUMS | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/image/mirror/SHA256SUMS b/image/mirror/SHA256SUMS index 2415784e7..052c616d4 100644 --- a/image/mirror/SHA256SUMS +++ b/image/mirror/SHA256SUMS @@ -18,8 +18,8 @@ adf4b75cdd9fae9d2d37fb71d9f0bf625a6705c0f0a7784569ab21463fe22152 conntrack-tool b84841f98b3c14d68da5a4021f10973eb5fa6566e63f4933e40a0c91aa134ce4 container-selinux-2.236.0-1.fc40.noarch.rpm bbe29e0c7b4ca076d50b4ac3954eb383459230d96b13f353ee71ebd5de33b6d1 containerd-1.6.23-5.fc40.x86_64.rpm 46f035201c84f65f6b9fd549adbe1c4aeb5f5972e69bf6537c05e7cc20587a4a containernetworking-plugins-1.5.1-2.fc40.x86_64.rpm -fd81f5d57a5feba4658d3ab1c6ab0a1a9551cff5c73263acf960bd7d41acaf25 containers-common-0.62.0-1.fc40.noarch.rpm -1472f71479fed6eb2103bd9653845609c7523523d06c36565a37d818fc144284 containers-common-extra-0.62.0-1.fc40.noarch.rpm +8c6676fd3d9cb966e68da46dc8bc3a81ea6f2ccb697f75a284a9c9b868489789 containers-common-0.62.2-1.fc40.noarch.rpm +70956b80c95cd582f6d5410c555a1f7468b13c1f022bb25856a6a1a59f4279e3 containers-common-extra-0.62.2-1.fc40.noarch.rpm 299d3e7e1cbc110d9ae8a47f6ca95142c3e3783cb1464bfbd6bc550c414b97ec coreutils-single-9.4-9.fc40.x86_64.rpm d941a78ffb6e2e0b4c24d0097d0351ced8796edde90208b4bddee459bce0a949 cpio-2.15-1.fc40.x86_64.rpm faa23cb6a7a612c0a6e874c788c5add967c5e193bd38c2e6093b82b38a162f81 cracklib-2.9.11-5.fc40.i686.rpm @@ -217,8 +217,8 @@ e541a1c8397dccf159b3602eb6bbb381ba21c544db337a3b3bfc49ccc2ef5c21 libunistring-1 b6db3e72ae6575127216145c1f65414ea94acd9db26d08c5081cb5d786101c1f libuuid-2.40.2-1.fc40.x86_64.rpm bea578631618692ba5e302beadfdf6d5894e23e5bddaea4b4fca2f377dd1aaac libverto-0.3.2-8.fc40.i686.rpm fadf7dd93c5eee57ba78e0628bf041dbd2ea037ace52f0a5cbac55b363234d27 libverto-0.3.2-8.fc40.x86_64.rpm -3b9287a2eebaaa4993a86c441888a7f0f7d4f35f01e0aeb071cfd918fa6e06b3 libxcrypt-4.4.38-6.fc40.i686.rpm -103da3ce282f675c8bae6ddce0f42dd826b44058204bf76a2c21581c9a22da08 libxcrypt-4.4.38-6.fc40.x86_64.rpm +c87a32fd07fd5be227320177ddf61b89c9f14f06d0895e9ecb9a9977b8f6495b libxcrypt-4.4.38-7.fc40.i686.rpm +27f89188ec9f4b1e1e96275f7d2760c342b4cf0a28e7cbccd893d98418d1d060 libxcrypt-4.4.38-7.fc40.x86_64.rpm a17f9a8894a00ee97a42219b3b21d64bfb850d74059d89ae299210bc477e8967 libxkbcommon-1.6.0-2.fc40.i686.rpm 1f1d0c1e1132016735acc6fc3390102b35f9eb257244547c7b61c32a9c2314cc libxkbcommon-1.6.0-2.fc40.x86_64.rpm 12fa7bdef4a5d95b78a38152a0c90b42c0cfc1a1b7c80fa25f4ccdb7c13cf849 libxml2-2.12.10-1.fc40.i686.rpm @@ -267,7 +267,7 @@ f796a31cad58f4ebea8787020868581d9a721297ee0ef6a7c63a7f8444f60c17 pcsc-lite-libs 5443db8875acc0c1c436dbe1ed62b776543e049b8d9c7e33198379d367814093 pigz-2.8-4.fc40.x86_64.rpm cb7c5036f1d25c696de23a6670cb64caec9945116fb0c9a93555414746ecf253 pinentry-1.3.0-2.fc40.x86_64.rpm bbb4abafa9f7664e21350b56d49af2c928288e6d4dd68c304c4ab5d45b2c8ad7 pkcs11-provider-0.3-2.fc40.x86_64.rpm -2c13ac126020af45d70894275935320d6d786995d3b8056f6b95c05162fc207f podman-5.4.0-1.fc40.x86_64.rpm +ecdf5f33e98a3c94426efc2176d382899d08d632e05dafc2e7fd18549337ef75 podman-5.4.2-1.fc40.x86_64.rpm f6291fc1fd3ececcd23c9e693ae0d309d66d57cc2de5d3d389235604804c1c2a policycoreutils-3.7-7.fc40.x86_64.rpm 30a4f9d3631aaa1280c93ce4305847a9773973aa312e1802d1cd676cb2421689 polkit-124-2.fc40.x86_64.rpm f47bc65177a8b160916c00df9c84442afa1dd353880b3c0503d5a0b052d4956c polkit-libs-124-2.fc40.x86_64.rpm From 81952fa67d968f8e95cfe726dec6f5e54f1ce8c0 Mon Sep 17 00:00:00 2001 From: Moritz Sanft <58110325+msanft@users.noreply.github.com> Date: Tue, 22 Apr 2025 09:54:23 +0200 Subject: [PATCH 230/311] terraform: make GCP SA id optional (#3777) --- terraform/infrastructure/iam/gcp/variables.tf | 1 + 1 file changed, 1 insertion(+) diff --git a/terraform/infrastructure/iam/gcp/variables.tf b/terraform/infrastructure/iam/gcp/variables.tf index b1895f0fc..37dc35144 100644 --- a/terraform/infrastructure/iam/gcp/variables.tf +++ b/terraform/infrastructure/iam/gcp/variables.tf @@ -5,6 +5,7 @@ variable "project_id" { variable "service_account_id" { type = string + default = null description = "[DEPRECATED use var.name_prefix] ID for the service account being created. Must match ^[a-z](?:[-a-z0-9]{4,28}[a-z0-9])$." } From a9999c3d4bac48533020df70642147dfdd31e987 Mon Sep 17 00:00:00 2001 From: edgelessci <71088502+edgelessci@users.noreply.github.com> Date: Wed, 23 Apr 2025 08:37:44 +0200 Subject: [PATCH 231/311] image: update measurements and image version (#3779) Co-authored-by: edgelessci --- .../measurements/measurements_enterprise.go | 16 ++++++++-------- internal/config/image_enterprise.go | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/internal/attestation/measurements/measurements_enterprise.go b/internal/attestation/measurements/measurements_enterprise.go index 2476b297a..20f59ead4 100644 --- a/internal/attestation/measurements/measurements_enterprise.go +++ b/internal/attestation/measurements/measurements_enterprise.go @@ -19,14 +19,14 @@ package measurements // revive:disable:var-naming var ( - aws_AWSNitroTPM = M{0: {Expected: []byte{0x73, 0x7f, 0x76, 0x7a, 0x12, 0xf5, 0x4e, 0x70, 0xee, 0xcb, 0xc8, 0x68, 0x40, 0x11, 0x32, 0x3a, 0xe2, 0xfe, 0x2d, 0xd9, 0xf9, 0x07, 0x85, 0x57, 0x79, 0x69, 0xd7, 0xa2, 0x01, 0x3e, 0x8c, 0x12}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xee, 0x8a, 0xf2, 0x74, 0x96, 0x52, 0x06, 0x90, 0xd2, 0xfc, 0x79, 0x9e, 0xbe, 0x23, 0xf1, 0xaa, 0x1f, 0x6d, 0xd1, 0x87, 0x21, 0xcb, 0x33, 0xb4, 0x33, 0xf0, 0x5c, 0xcb, 0x7f, 0xc3, 0x5a, 0x1c}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xa2, 0x5c, 0xb7, 0x08, 0x52, 0x4d, 0x13, 0x33, 0xd4, 0x50, 0x04, 0xd4, 0x35, 0xad, 0xc2, 0x55, 0x91, 0x4b, 0x40, 0xa1, 0x64, 0xed, 0x88, 0x00, 0xfc, 0x9f, 0x62, 0x6a, 0x65, 0x1c, 0x79, 0xe9}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x02, 0x99, 0xb9, 0xc6, 0xa8, 0x3a, 0x4a, 0xf2, 0xf3, 0xd8, 0xb1, 0x97, 0x89, 0xd0, 0x8f, 0x99, 0x8f, 0xa8, 0x87, 0x3f, 0xc2, 0xdb, 0xd0, 0x3e, 0xaa, 0xf3, 0x44, 0x29, 0x65, 0xbf, 0xbd, 0xbd}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - aws_AWSSEVSNP = M{0: {Expected: []byte{0xd6, 0xdf, 0x85, 0x53, 0x58, 0xf5, 0xb1, 0x0f, 0x06, 0xf0, 0xfa, 0xb3, 0xf4, 0x08, 0xad, 0x26, 0xcd, 0x16, 0x5a, 0x29, 0x49, 0xba, 0xd6, 0x9e, 0x2c, 0xc7, 0x56, 0x92, 0x52, 0x9e, 0x66, 0x2a}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x5f, 0xa7, 0x36, 0x11, 0xd7, 0x4a, 0xd4, 0x22, 0xe8, 0x29, 0x9f, 0x83, 0xef, 0xa6, 0x17, 0xc6, 0x94, 0x5a, 0x5e, 0x20, 0xce, 0x82, 0x7c, 0x6a, 0xfd, 0x87, 0x29, 0x78, 0x90, 0xf4, 0xcb, 0x3f}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x8a, 0x03, 0xe7, 0xec, 0x3d, 0xa6, 0xdd, 0xd0, 0xdd, 0xde, 0xae, 0xc6, 0x3d, 0x76, 0x80, 0x5c, 0x25, 0x60, 0x34, 0x29, 0x0a, 0x52, 0xe2, 0xd0, 0x58, 0xf5, 0xf4, 0x42, 0xea, 0x8f, 0xef, 0xb2}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x12, 0xbd, 0x8e, 0x7c, 0x64, 0x5a, 0xd5, 0xa5, 0x0c, 0xb2, 0x15, 0xf4, 0x3c, 0x01, 0xbe, 0x55, 0x3d, 0x8d, 0x67, 0x52, 0xd4, 0xa2, 0x1a, 0xcc, 0x3f, 0x7f, 0xac, 0xd6, 0x1d, 0x37, 0xe8, 0xfc}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - azure_AzureSEVSNP = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x3e, 0x7d, 0x9f, 0x13, 0xb8, 0xdb, 0x7f, 0x66, 0xfe, 0x33, 0xa1, 0xb1, 0xf1, 0xfc, 0x70, 0xe5, 0x42, 0x6e, 0x34, 0x38, 0x7a, 0x03, 0xb5, 0x1b, 0x17, 0x97, 0x55, 0x27, 0x0d, 0x3d, 0x42, 0x21}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xde, 0x1d, 0xed, 0xce, 0x6a, 0x78, 0x0c, 0xf5, 0x58, 0xdd, 0x1c, 0xaf, 0x6e, 0xb4, 0x05, 0xcf, 0x74, 0x35, 0x87, 0xe9, 0x4f, 0x32, 0x89, 0x6e, 0xfb, 0xb1, 0x6b, 0x34, 0x52, 0xc9, 0xd5, 0x76}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x1a, 0x4e, 0x11, 0x9e, 0x54, 0x0a, 0x24, 0x05, 0x64, 0x72, 0xa9, 0x27, 0x04, 0x89, 0x0c, 0x96, 0x62, 0x53, 0xcd, 0x55, 0x1c, 0xf8, 0xf0, 0x8a, 0x8a, 0x7c, 0xbd, 0xff, 0x5b, 0xdc, 0x4f, 0x33}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - azure_AzureTDX = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xd2, 0xaa, 0x12, 0x86, 0x0b, 0xa3, 0xe0, 0xb4, 0xb0, 0xc3, 0x2d, 0xf8, 0x39, 0x35, 0xe5, 0x3e, 0xe5, 0x51, 0x85, 0xb6, 0x41, 0x51, 0xba, 0x88, 0x28, 0x43, 0x44, 0x0c, 0x04, 0x60, 0x2a, 0x40}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xae, 0x33, 0xf5, 0x07, 0xc8, 0xfb, 0xf2, 0xf0, 0x9b, 0x5f, 0x24, 0xb6, 0x62, 0x50, 0x45, 0xe2, 0xed, 0x69, 0xd5, 0x13, 0x83, 0x97, 0x9f, 0x4d, 0xd3, 0x8a, 0x5c, 0xe4, 0xdd, 0xed, 0x3b, 0x34}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x0b, 0x34, 0x49, 0xd3, 0x21, 0x35, 0xc1, 0x80, 0xce, 0x88, 0xc6, 0x8a, 0x9c, 0x92, 0x7b, 0xf7, 0x9f, 0xf0, 0x22, 0xc5, 0x96, 0x42, 0xec, 0xc9, 0x84, 0x93, 0x42, 0x3e, 0x54, 0xd7, 0xc8, 0x7b}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + aws_AWSNitroTPM = M{0: {Expected: []byte{0x73, 0x7f, 0x76, 0x7a, 0x12, 0xf5, 0x4e, 0x70, 0xee, 0xcb, 0xc8, 0x68, 0x40, 0x11, 0x32, 0x3a, 0xe2, 0xfe, 0x2d, 0xd9, 0xf9, 0x07, 0x85, 0x57, 0x79, 0x69, 0xd7, 0xa2, 0x01, 0x3e, 0x8c, 0x12}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xf4, 0x81, 0x50, 0x35, 0x97, 0x40, 0x48, 0x6a, 0x9f, 0xd9, 0x2c, 0xcc, 0xf8, 0x45, 0xfc, 0x06, 0x2f, 0x57, 0x67, 0x46, 0x8c, 0x9d, 0xa4, 0xae, 0xda, 0xc4, 0x47, 0x5c, 0x06, 0x52, 0x0a, 0x40}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xa3, 0x0a, 0x6f, 0x79, 0x46, 0x4e, 0x40, 0x31, 0x5c, 0xbe, 0x28, 0x26, 0xac, 0x1e, 0x9a, 0x16, 0x9d, 0x7e, 0x56, 0x86, 0x7c, 0x2c, 0xaf, 0x7e, 0x09, 0xc1, 0xd6, 0x54, 0x48, 0x31, 0x0c, 0x5a}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x83, 0xb1, 0xb8, 0xff, 0x82, 0x39, 0x1b, 0x79, 0x07, 0x3f, 0xc5, 0xfe, 0x3f, 0x16, 0x0b, 0x72, 0xc2, 0xa3, 0xae, 0xfd, 0xeb, 0xc9, 0x1e, 0x48, 0xdf, 0x10, 0x23, 0xc4, 0xde, 0x61, 0xa1, 0xa1}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + aws_AWSSEVSNP = M{0: {Expected: []byte{0xd6, 0xdf, 0x85, 0x53, 0x58, 0xf5, 0xb1, 0x0f, 0x06, 0xf0, 0xfa, 0xb3, 0xf4, 0x08, 0xad, 0x26, 0xcd, 0x16, 0x5a, 0x29, 0x49, 0xba, 0xd6, 0x9e, 0x2c, 0xc7, 0x56, 0x92, 0x52, 0x9e, 0x66, 0x2a}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x78, 0xea, 0xe8, 0x90, 0xcc, 0x34, 0x06, 0xdf, 0xeb, 0xf3, 0x22, 0xd3, 0xf0, 0x5d, 0xe6, 0x35, 0xcd, 0xd6, 0x94, 0xb8, 0xe8, 0x5a, 0xba, 0x61, 0x68, 0x94, 0xaf, 0x91, 0x54, 0x00, 0x99, 0xc3}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x66, 0x3b, 0x13, 0xb7, 0x0c, 0xd7, 0x8f, 0x05, 0x24, 0xe4, 0x5a, 0x29, 0xae, 0xc1, 0x50, 0x24, 0xa5, 0xcc, 0xfb, 0x59, 0xed, 0x65, 0x22, 0xb8, 0x1f, 0x87, 0x58, 0x9f, 0x30, 0xd2, 0xae, 0xc0}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xd7, 0x29, 0x5a, 0xab, 0x79, 0xa9, 0xc1, 0x9a, 0xfb, 0x6f, 0xff, 0x09, 0x14, 0x09, 0x9a, 0xaf, 0x6e, 0x3d, 0xd9, 0x1d, 0x5e, 0xe4, 0xfb, 0x80, 0x15, 0xc1, 0xf9, 0xaf, 0x36, 0x00, 0x49, 0xa4}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + azure_AzureSEVSNP = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x30, 0x28, 0x87, 0xd9, 0xc5, 0x4a, 0x4a, 0x90, 0x06, 0x26, 0x09, 0x6b, 0xa8, 0x64, 0x1d, 0x0e, 0x36, 0x52, 0x43, 0x6e, 0x99, 0x63, 0x63, 0x18, 0xe9, 0xed, 0xe0, 0xc2, 0x3c, 0x3e, 0xb9, 0x4a}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x2e, 0x49, 0x93, 0x1c, 0x95, 0x7e, 0x85, 0x73, 0x7f, 0xe2, 0x5d, 0x58, 0x57, 0x3a, 0xa1, 0x4c, 0x31, 0x83, 0x8f, 0x0b, 0xd0, 0x23, 0x42, 0x15, 0xd0, 0x23, 0x5a, 0x91, 0x0f, 0xd5, 0x27, 0x54}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xb6, 0xa1, 0xc8, 0x8f, 0xc8, 0xbf, 0x79, 0xe7, 0xcc, 0x24, 0xe8, 0xf4, 0xbf, 0x61, 0xbd, 0xff, 0x40, 0x2f, 0x3b, 0x25, 0x89, 0x3b, 0x28, 0xb7, 0xa7, 0x7a, 0x3e, 0x9c, 0xd3, 0x47, 0x50, 0x7a}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + azure_AzureTDX = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xcc, 0x3d, 0x79, 0xee, 0x97, 0x44, 0x34, 0xdc, 0x6d, 0x50, 0x32, 0x4a, 0xd3, 0xc1, 0xfd, 0x52, 0x04, 0x52, 0xc5, 0xa4, 0x20, 0x7e, 0xe0, 0x75, 0x70, 0xc6, 0xf0, 0xdd, 0x8a, 0x85, 0x16, 0x06}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xbd, 0x91, 0x4c, 0x56, 0xea, 0x44, 0x65, 0x5a, 0x66, 0x24, 0x19, 0xbc, 0xb7, 0x54, 0x98, 0x44, 0x7a, 0xc6, 0x0e, 0xb4, 0x3f, 0xb6, 0x76, 0x77, 0x42, 0xda, 0x7e, 0x26, 0x05, 0x3a, 0x50, 0x7e}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xaa, 0x38, 0x8e, 0xae, 0x09, 0x5f, 0xb9, 0x55, 0xb9, 0xf1, 0xaa, 0x38, 0xef, 0x8d, 0x3e, 0x83, 0x6e, 0xea, 0x73, 0x01, 0xbe, 0x83, 0xcf, 0x2c, 0x98, 0x8c, 0x8b, 0x8f, 0x98, 0x4c, 0x26, 0xd6}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} azure_AzureTrustedLaunch M - gcp_GCPSEVES = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x89, 0xf2, 0x11, 0xb5, 0x17, 0xb7, 0x94, 0x75, 0xa3, 0xca, 0x5f, 0x3c, 0xa3, 0x11, 0x8d, 0x66, 0x34, 0xf6, 0xde, 0xc4, 0xc8, 0x67, 0xb1, 0x82, 0xae, 0xef, 0xaf, 0xc9, 0x6b, 0x4a, 0x3c, 0x33}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xa0, 0x05, 0xd8, 0xe0, 0xd6, 0x93, 0x95, 0x01, 0x8c, 0xab, 0x12, 0x83, 0xc0, 0xce, 0x02, 0x30, 0x84, 0xc2, 0xd7, 0x70, 0x78, 0x03, 0xa1, 0xae, 0x21, 0xeb, 0x18, 0x9a, 0x36, 0xcb, 0x7b, 0xe1}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x08, 0x95, 0x7e, 0x53, 0x83, 0xa2, 0xa8, 0x56, 0x0b, 0x5d, 0x48, 0x23, 0x0f, 0x2e, 0xce, 0xd5, 0x75, 0x26, 0x06, 0x40, 0xb4, 0x64, 0xed, 0x07, 0xc0, 0x6c, 0x37, 0xcb, 0xce, 0xe5, 0x51, 0x97}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - gcp_GCPSEVSNP = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x9b, 0xd5, 0x92, 0x53, 0xb4, 0x85, 0x36, 0x37, 0x8e, 0xe4, 0xb8, 0x7f, 0x4a, 0x16, 0x32, 0x33, 0xc3, 0x0f, 0x36, 0x23, 0xf6, 0x76, 0x3d, 0x7b, 0x46, 0x38, 0x5b, 0x87, 0x3d, 0x35, 0xdd, 0xa9}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xbb, 0x72, 0xa6, 0x93, 0x9d, 0x66, 0x9e, 0x41, 0x14, 0x2f, 0x58, 0x4d, 0x18, 0xd8, 0x6e, 0xd0, 0xef, 0x6e, 0x6f, 0x80, 0x73, 0x70, 0x5a, 0x67, 0x93, 0xb5, 0x93, 0x2b, 0x95, 0x15, 0x0b, 0x1c}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x6c, 0x8a, 0xc7, 0x75, 0xfe, 0x71, 0x88, 0xcf, 0x6f, 0x94, 0x84, 0x52, 0x2d, 0x70, 0xf4, 0xa6, 0x44, 0x7c, 0x2b, 0xca, 0x76, 0xe8, 0x05, 0x61, 0x66, 0xd3, 0xa7, 0x28, 0x99, 0x01, 0x73, 0x5d}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - openstack_QEMUVTPM = M{4: {Expected: []byte{0x6f, 0x85, 0xf2, 0xea, 0x27, 0xf5, 0x82, 0x42, 0x51, 0xf0, 0x37, 0xa6, 0x59, 0x98, 0xe8, 0x09, 0x35, 0x9e, 0x16, 0xf9, 0x23, 0x9e, 0x21, 0x55, 0x95, 0xa2, 0xc6, 0x9b, 0xfa, 0x37, 0x67, 0x82}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x58, 0x24, 0x6a, 0x8d, 0xd1, 0xd8, 0x57, 0x7b, 0x7a, 0x3d, 0x96, 0xbe, 0xee, 0xe7, 0xb7, 0x49, 0xcc, 0x24, 0xd6, 0xea, 0x47, 0xb7, 0x07, 0x41, 0x11, 0x2d, 0x76, 0xd0, 0x26, 0x4e, 0x54, 0x24}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x28, 0x89, 0xa5, 0xde, 0xb4, 0x03, 0x7a, 0xae, 0x5d, 0x50, 0xa0, 0xf9, 0x35, 0xbe, 0xcc, 0x77, 0xb8, 0x3e, 0xb0, 0x03, 0x7a, 0xd5, 0x25, 0xcc, 0xb2, 0x5a, 0x56, 0x17, 0xb1, 0x32, 0xf8, 0x1e}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + gcp_GCPSEVES = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x41, 0xf1, 0x14, 0x24, 0xd2, 0xaa, 0xda, 0x48, 0x62, 0xd9, 0x1f, 0x9d, 0xb7, 0x30, 0x47, 0x3d, 0x63, 0x5b, 0x8d, 0xde, 0x73, 0x0e, 0xf1, 0x76, 0xba, 0xb7, 0xd0, 0x9b, 0xe4, 0x5c, 0xad, 0x89}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x06, 0x72, 0xc9, 0xec, 0xe6, 0x37, 0x34, 0xae, 0x7f, 0x81, 0xcb, 0x63, 0x4f, 0x93, 0x60, 0x6e, 0xf0, 0xba, 0x47, 0x69, 0x53, 0xe2, 0xa3, 0x9b, 0x46, 0x7b, 0x01, 0x33, 0xd4, 0xee, 0x38, 0xbb}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x59, 0xef, 0xdc, 0xc5, 0x7f, 0x14, 0xc6, 0xe8, 0x0c, 0xfd, 0xd2, 0x02, 0x64, 0xd0, 0xc6, 0x1f, 0xdd, 0x7a, 0xa4, 0xff, 0x94, 0x34, 0xfd, 0xe5, 0x81, 0x36, 0x60, 0x33, 0xdc, 0xfc, 0xd3, 0x81}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + gcp_GCPSEVSNP = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x4e, 0x0a, 0x81, 0x9d, 0x72, 0xf5, 0x0c, 0xdb, 0x80, 0xab, 0xad, 0x9b, 0x03, 0x95, 0xe0, 0x10, 0xb4, 0xea, 0xc5, 0x32, 0xee, 0xca, 0x7f, 0x32, 0xd3, 0x90, 0x59, 0x2c, 0x64, 0xe0, 0x8d, 0x38}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x02, 0x35, 0xa2, 0xdc, 0x2f, 0x06, 0x3f, 0x9d, 0xe6, 0xcc, 0xad, 0xd5, 0x2b, 0x97, 0xd4, 0x69, 0x67, 0x17, 0x35, 0x86, 0xe5, 0x03, 0xa9, 0xca, 0x28, 0xbf, 0x00, 0x40, 0x74, 0x4b, 0x65, 0xc3}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xce, 0x2a, 0xe1, 0x4f, 0x5b, 0x7a, 0x16, 0xcc, 0xb4, 0x2f, 0x63, 0x86, 0x28, 0x9f, 0xf2, 0xd9, 0x60, 0x92, 0x78, 0x7b, 0x2a, 0x29, 0x44, 0x45, 0xeb, 0xec, 0x7c, 0xdb, 0x11, 0x5c, 0x8b, 0x48}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + openstack_QEMUVTPM = M{4: {Expected: []byte{0xb4, 0xd3, 0x63, 0x5c, 0x3b, 0x32, 0x12, 0xd0, 0xab, 0xb6, 0x90, 0x45, 0x20, 0xd1, 0x80, 0x21, 0x69, 0x13, 0x4a, 0x5c, 0x10, 0x92, 0x92, 0xf1, 0x4b, 0x46, 0x79, 0x66, 0x0b, 0x46, 0x9b, 0xb2}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x46, 0xc6, 0x74, 0x42, 0x3f, 0x9a, 0xeb, 0x5b, 0x24, 0x0a, 0x6a, 0x81, 0xc0, 0x3c, 0x17, 0xaf, 0xb7, 0xf2, 0x6d, 0xcf, 0x6d, 0x06, 0x6e, 0x42, 0x40, 0x1e, 0xda, 0xc6, 0xc0, 0x6e, 0x2a, 0x47}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x0c, 0xc3, 0xfc, 0x1e, 0x39, 0x6a, 0x80, 0x90, 0xe5, 0x45, 0x66, 0x07, 0xb4, 0xba, 0x60, 0x96, 0x05, 0x97, 0xa1, 0x1a, 0x7a, 0xc9, 0x6c, 0x06, 0x5f, 0xa7, 0x3a, 0x2c, 0x91, 0x73, 0x2a, 0x6c}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} qemu_QEMUTDX M - qemu_QEMUVTPM = M{4: {Expected: []byte{0x41, 0x53, 0x2a, 0x63, 0xb6, 0xde, 0x92, 0x8b, 0x04, 0xcd, 0xba, 0xa1, 0xec, 0xef, 0x3b, 0x11, 0x0e, 0x40, 0xee, 0xd2, 0x32, 0x07, 0xf9, 0x2b, 0xbe, 0x50, 0x4e, 0xa1, 0x8d, 0x98, 0x4e, 0x53}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xaa, 0x8f, 0xee, 0xe6, 0x96, 0xa0, 0xd0, 0x9e, 0xf4, 0x11, 0x51, 0x5d, 0x41, 0x34, 0xce, 0x78, 0x81, 0xf1, 0xb1, 0xae, 0x90, 0x97, 0x51, 0xd2, 0x9f, 0xc8, 0xbd, 0x28, 0x26, 0x41, 0xc9, 0x07}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xc5, 0xd8, 0xeb, 0xfa, 0x0e, 0xb2, 0x5a, 0xe0, 0x65, 0xb1, 0x25, 0x64, 0x66, 0x90, 0xfd, 0x96, 0x85, 0xc9, 0x7c, 0x1d, 0xab, 0x81, 0xd6, 0xee, 0xd8, 0x72, 0x67, 0x74, 0xd3, 0x69, 0x8c, 0xf1}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + qemu_QEMUVTPM = M{4: {Expected: []byte{0x1b, 0xb8, 0x37, 0x03, 0xad, 0xc5, 0x3b, 0x77, 0x1f, 0x7e, 0x66, 0x8b, 0xdc, 0x4e, 0xe8, 0x03, 0x6d, 0x08, 0xe2, 0x97, 0x15, 0x63, 0x9a, 0xce, 0x80, 0x1a, 0xe6, 0xe2, 0x1d, 0xdf, 0xc3, 0x56}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xfc, 0x90, 0x35, 0xec, 0x80, 0x71, 0x36, 0xaf, 0xe3, 0x39, 0x00, 0xf2, 0x0d, 0xab, 0x82, 0x5b, 0x47, 0xfa, 0xa0, 0xde, 0x2c, 0x46, 0x4f, 0x33, 0x4b, 0x1d, 0x6a, 0x2f, 0xec, 0xdc, 0xdc, 0x11}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x24, 0xe4, 0x9a, 0xd1, 0xb7, 0x69, 0xab, 0xd0, 0xd9, 0xdd, 0x13, 0x2f, 0x68, 0x69, 0xc5, 0xbd, 0x13, 0xd8, 0x57, 0x24, 0x54, 0x4c, 0x6d, 0xd8, 0x9f, 0xd6, 0x34, 0x63, 0x20, 0x3a, 0x1e, 0xe4}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} ) diff --git a/internal/config/image_enterprise.go b/internal/config/image_enterprise.go index e67ad6972..075d8ee35 100644 --- a/internal/config/image_enterprise.go +++ b/internal/config/image_enterprise.go @@ -10,5 +10,5 @@ package config const ( // defaultImage is the default image to use. - defaultImage = "ref/main/stream/nightly/v2.23.0-pre.0.20250415082741-4a93870d1d37" + defaultImage = "ref/main/stream/nightly/v2.23.0-pre.0.20250422095423-81952fa67d96" ) From 66de14b9a45432ef071a06c7bcc661014e07545f Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 23 Apr 2025 10:43:14 +0200 Subject: [PATCH 232/311] deps: update Terraform dependencies (#3769) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * deps: update Terraform dependencies * terraform: fix provider lock file entries --------- Signed-off-by: Daniel Weiße Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Daniel Weiße --- .github/actions/terraform_apply/action.yml | 2 +- .../vpn/on-prem-terraform/.terraform.lock.hcl | 48 ++++---- dev-docs/howto/vpn/on-prem-terraform/main.tf | 2 +- .../azure-terraform/.terraform.lock.hcl | 96 ++++++++-------- .../miniconstellation/azure-terraform/main.tf | 4 +- e2e/miniconstellation/.terraform.lock.hcl | 48 ++++---- e2e/miniconstellation/main.tf | 2 +- .../examples/full/aws/main.tf | 2 +- .../examples/full/azure/main.tf | 2 +- .../examples/full/gcp/main.tf | 2 +- .../examples/full/stackit/main.tf | 2 +- .../infrastructure/aws/.terraform.lock.hcl | 102 +++++++++-------- terraform/infrastructure/aws/main.tf | 4 +- .../aws/modules/instance_group/main.tf | 4 +- .../aws/modules/jump_host/main.tf | 2 +- .../aws/modules/load_balancer_target/main.tf | 2 +- .../aws/modules/public_private_subnet/main.tf | 2 +- .../infrastructure/azure/.terraform.lock.hcl | 48 ++++---- terraform/infrastructure/azure/main.tf | 2 +- .../azure/modules/scale_set/main.tf | 2 +- .../infrastructure/gcp/.terraform.lock.hcl | 90 ++++++++------- terraform/infrastructure/gcp/main.tf | 4 +- .../gcp/modules/instance_group/main.tf | 4 +- .../modules/internal_load_balancer/main.tf | 2 +- .../gcp/modules/jump_host/main.tf | 2 +- .../gcp/modules/loadbalancer/main.tf | 2 +- .../iam/aws/.terraform.lock.hcl | 108 +++++++++--------- terraform/infrastructure/iam/aws/main.tf | 4 +- .../iam/gcp/.terraform.lock.hcl | 48 ++++---- terraform/infrastructure/iam/gcp/main.tf | 2 +- .../openstack/.terraform.lock.hcl | 102 +++++++++-------- terraform/infrastructure/openstack/main.tf | 4 +- .../modules/stackit_loadbalancer/main.tf | 2 +- .../infrastructure/qemu/.terraform.lock.hcl | 90 +++++++-------- terraform/infrastructure/qemu/main.tf | 4 +- .../qemu/modules/instance_group/main.tf | 2 +- 36 files changed, 433 insertions(+), 415 deletions(-) diff --git a/.github/actions/terraform_apply/action.yml b/.github/actions/terraform_apply/action.yml index 5bca12f60..edf4fb26f 100644 --- a/.github/actions/terraform_apply/action.yml +++ b/.github/actions/terraform_apply/action.yml @@ -47,7 +47,7 @@ runs: } random = { source = "hashicorp/random" - version = "3.7.1" + version = "3.7.2" } } } diff --git a/dev-docs/howto/vpn/on-prem-terraform/.terraform.lock.hcl b/dev-docs/howto/vpn/on-prem-terraform/.terraform.lock.hcl index 2a0f14ac0..f769b5b5c 100644 --- a/dev-docs/howto/vpn/on-prem-terraform/.terraform.lock.hcl +++ b/dev-docs/howto/vpn/on-prem-terraform/.terraform.lock.hcl @@ -32,32 +32,32 @@ provider "registry.terraform.io/hashicorp/azurerm" { } provider "registry.terraform.io/hashicorp/random" { - version = "3.7.1" - constraints = "3.7.1" + version = "3.7.2" + constraints = "3.7.2" hashes = [ - "h1:/qtweZW2sk0kBNiQM02RvBXmlVdI9oYqRMCyBZ8XA98=", - "h1:0XCd0Y9HVdDcEbwxF18e49HB+YRO+QQ24H3jDgmFPEE=", - "h1:2tp72AGbuQyxyDYaaoxJk1el0AQ81Gjy2RWlVxS4BKw=", - "h1:4zid4G8d3tiQThQGwOcFk+EAyvpSkq2bFKSQ1vzfmKU=", - "h1:FMjX0VzHGDmqmz1TNQsq1W2Cfn/H/IR81YmIotHh5uY=", - "h1:Jvr+8mqBJlxSOF8R862ZtezBlCb9pVwNMNc1sYsDeYg=", - "h1:aNMs1vK7xE3QjsSDTTWTwNeNsbSCgOW2valnbyc9TIw=", - "h1:g+mDU6wEJJOSI7/tPh0Tc4i2XjrXAfqKXuiVM9Di194=", - "h1:ji/JgTChmJj8a9PaXja2PiYJhR4iZBX34FDfxnqeZIA=", - "h1:t+sEwSvzYaq0d3FNuzdn7snQPZqmbn3q5uwF7TSDNXQ=", - "h1:t152MY0tQH4a8fLzTtEWx70ITd3azVOrFDn/pQblbto=", - "zh:3193b89b43bf5805493e290374cdda5132578de6535f8009547c8b5d7a351585", - "zh:3218320de4be943e5812ed3de995946056db86eb8d03aa3f074e0c7316599bef", - "zh:419861805a37fa443e7d63b69fb3279926ccf98a79d256c422d5d82f0f387d1d", - "zh:4df9bd9d839b8fc11a3b8098a604b9b46e2235eb65ef15f4432bde0e175f9ca6", - "zh:5814be3f9c9cc39d2955d6f083bae793050d75c572e70ca11ccceb5517ced6b1", - "zh:63c6548a06de1231c8ee5570e42ca09c4b3db336578ded39b938f2156f06dd2e", - "zh:697e434c6bdee0502cc3deb098263b8dcd63948e8a96d61722811628dce2eba1", + "h1:0hcNr59VEJbhZYwuDE/ysmyTS0evkfcLarlni+zATPM=", + "h1:356j/3XnXEKr9nyicLUufzoF4Yr6hRy481KIxRVpK0c=", + "h1:Def/iHM4HihJCIxQ8AYoxtoVL5lVlYx0V7bX91pxwgM=", + "h1:KG4NuIBl1mRWU0KD/BGfCi1YN/j3F7H4YgeeM7iSdNs=", + "h1:Lmv2TxyKKm9Vt4uxcPZHw1uf0Ax/yYizJlilbLSZN8E=", + "h1:hkKSY5xI4R1H4Yrg10HHbtOoxZif2dXa9HFPSbaVg5o=", + "h1:khu3pu9zeUMd6Ev+yH6cQ1S4+xpzx8wqwwFwADYGeRI=", + "h1:l35vnL76rzaOjhhJQiaWviW0noK2YzHeHN0/vIXJnHk=", + "h1:nWZjMYzp+nsqD3xslcihzq1Enxv33a7iC8/I8CTBcHA=", + "h1:pSMn/cwmyHB6V67lToGmCHfJFfzA711vV+E1cGP0LBg=", + "h1:w+NoF7vNMFS+qrU2XUEm0/wnuIZxPC733qOOfLVOdfk=", + "zh:14829603a32e4bc4d05062f059e545a91e27ff033756b48afbae6b3c835f508f", + "zh:1527fb07d9fea400d70e9e6eb4a2b918d5060d604749b6f1c361518e7da546dc", + "zh:1e86bcd7ebec85ba336b423ba1db046aeaa3c0e5f921039b3f1a6fc2f978feab", + "zh:24536dec8bde66753f4b4030b8f3ef43c196d69cccbea1c382d01b222478c7a3", + "zh:29f1786486759fad9b0ce4fdfbbfece9343ad47cd50119045075e05afe49d212", + "zh:4d701e978c2dd8604ba1ce962b047607701e65c078cb22e97171513e9e57491f", "zh:78d5eefdd9e494defcb3c68d282b8f96630502cac21d1ea161f53cfe9bb483b3", - "zh:a0b8e44927e6327852bbfdc9d408d802569367f1e22a95bcdd7181b1c3b07601", - "zh:b7d3af018683ef22794eea9c218bc72d7c35a2b3ede9233b69653b3c782ee436", - "zh:d63b911d618a6fe446c65bfc21e793a7663e934b2fef833d42d3ccd38dd8d68d", - "zh:fa985cd0b11e6d651f47cff3055f0a9fd085ec190b6dbe99bf5448174434cdea", + "zh:7b8434212eef0f8c83f5a90c6d76feaf850f6502b61b53c329e85b3b281cba34", + "zh:ac8a23c212258b7976e1621275e3af7099e7e4a3d4478cf8d5d2a27f3bc3e967", + "zh:b516ca74431f3df4c6cf90ddcdb4042c626e026317a33c53f0b445a3d93b720d", + "zh:dc76e4326aec2490c1600d6871a95e78f9050f9ce427c71707ea412a2f2f1a62", + "zh:eac7b63e86c749c7d48f527671c7aee5b4e26c10be6ad7232d6860167f99dbb0", ] } diff --git a/dev-docs/howto/vpn/on-prem-terraform/main.tf b/dev-docs/howto/vpn/on-prem-terraform/main.tf index b42d0769e..f4c24a8ff 100644 --- a/dev-docs/howto/vpn/on-prem-terraform/main.tf +++ b/dev-docs/howto/vpn/on-prem-terraform/main.tf @@ -6,7 +6,7 @@ terraform { } random = { source = "hashicorp/random" - version = "3.7.1" + version = "3.7.2" } } } diff --git a/dev-docs/miniconstellation/azure-terraform/.terraform.lock.hcl b/dev-docs/miniconstellation/azure-terraform/.terraform.lock.hcl index ec303f8a8..9d811884b 100644 --- a/dev-docs/miniconstellation/azure-terraform/.terraform.lock.hcl +++ b/dev-docs/miniconstellation/azure-terraform/.terraform.lock.hcl @@ -32,62 +32,62 @@ provider "registry.terraform.io/hashicorp/azurerm" { } provider "registry.terraform.io/hashicorp/cloudinit" { - version = "2.3.6" - constraints = "2.3.6" + version = "2.3.7" + constraints = "2.3.7" hashes = [ - "h1:AGxDD7sJme9Adr3ThgBSkbbQLDLkEDLAH1bsmS6T/m0=", - "h1:ET4K0kdtPzOEr2M4hmA26jkAHbqN8YTSpcKtPDJxgyU=", - "h1:NlviM1ykkj49VzgN1Vw8THQIjwKbtiJik6axXfsfQNQ=", - "h1:OSlOCrwRWkNpWlfG7u+ZBSIskEELqHEqzfb5aXUo/fM=", - "h1:PTPDNobmkvWZu6U7k/s5yFXOSktFK5iwu67HAkPJ4t8=", - "h1:VK29UjlU8sEa8jaETUVsAXx1+R9Hgkb46IBBoYwzB1c=", - "h1:WvwTnAb57u948QLW0tvDyIb8Llv1udEChTtNH/A2whQ=", - "h1:YIF4q13C/LX4y4M2gpZxcAKMLiLPJmC1NLYNKw0HX2s=", - "h1:afnqn3XPnO40laFt+SVHPPKsg1j3HXT0VAO0xBVvmrY=", - "h1:sFAf8Tov1SGOrhv7g8J3w+LGhMgGtMN16FkIjfazudY=", - "h1:x5ospIpvJh5jr1gLQi0rkNGdHqfEbvPDimdmKjnngzU=", - "zh:1321b5ddede56be3f9b35bf75d7cda79adcb357fad62eb8677b6595e0baaa6cd", - "zh:265d66e61b9cd16ca1182ebf094cc0a08fb3687e8193a1dbac6899b16c237151", - "zh:3875c3a20e082ac55d5ff24bcaf7133ebc90c7f999fd0fb37cf0f0003474c94c", - "zh:68ce41ccd07757c451682703840cae1ec270ed5275cd491bbf8279782dfcbb73", + "h1:/hny5kXmhcnuJDD1V+5XCrZOYDIqja2U47VM4DPEnBA=", + "h1:A9COAUjeBJ+fgYAI/PKtDs4Wzs50srFSY+KkfpSVGLw=", + "h1:Lt8lqrdNgZRlkOTwSXZTyuJkiVXnpwTsWAqHQPL6sIY=", + "h1:M9TpQxKAE/hyOwytdX9MUNZw30HoD/OXqYIug5fkqH8=", + "h1:coZHiZww6hWZoOoWw0p+6oeYb/tMh1uTvX1Y2ZzzXqE=", + "h1:dgBaiMxxU61piW30emM6251LMFW66TbKR+p5ylPZvqc=", + "h1:h1Pr6uNwq+iDEGrnQJEHzOTz+yVTW0AJgZrGXuoO4Qs=", + "h1:ht83gEvyri0BD3sata7BDhx31N/KbCECIozG7UM/kC8=", + "h1:iZ27qylcH/2bs685LJTKOKcQ+g7cF3VwN3kHMrzm4Ow=", + "h1:ll35IR++uaXwfwqZFFRWrvS0idO1mX43Y/embsaOe4k=", + "h1:rafNPmTutVTO2Horq45DG9Pjqrs+vx42oc7b/3aVGEc=", + "zh:06f1c54e919425c3139f8aeb8fcf9bceca7e560d48c9f0c1e3bb0a8ad9d9da1e", + "zh:0e1e4cf6fd98b019e764c28586a386dc136129fef50af8c7165a067e7e4a31d5", + "zh:1871f4337c7c57287d4d67396f633d224b8938708b772abfc664d1f80bd67edd", + "zh:2b9269d91b742a71b2248439d5e9824f0447e6d261bfb86a8a88528609b136d1", + "zh:3d8ae039af21426072c66d6a59a467d51f2d9189b8198616888c1b7fc42addc7", + "zh:3ef4e2db5bcf3e2d915921adced43929214e0946a6fb11793085d9a48995ae01", + "zh:42ae54381147437c83cbb8790cc68935d71b6357728a154109d3220b1beb4dc9", + "zh:4496b362605ae4cbc9ef7995d102351e2fe311897586ffc7a4a262ccca0c782a", + "zh:652a2401257a12706d32842f66dac05a735693abcb3e6517d6b5e2573729ba13", + "zh:7406c30806f5979eaed5f50c548eced2ea18ea121e01801d2f0d4d87a04f6a14", + "zh:7848429fd5a5bcf35f6fee8487df0fb64b09ec071330f3ff240c0343fe2a5224", "zh:78d5eefdd9e494defcb3c68d282b8f96630502cac21d1ea161f53cfe9bb483b3", - "zh:8dca3bb3f85ff8ac4d1b3f93975dcb751ed788396c56ebf0c3737ce1a4c60492", - "zh:9339bdaa99939291cedf543861353c8e7171ec5231c0dfacaa9bdb3338978dab", - "zh:a8510c2256e9a78697910bb5542aeca457c81225ea88130335f6d14a36a36c74", - "zh:af7ed71b8fceb60a5e3b7fa663be171e0bd41bb0af30e0e1f06a004c7b584e4a", - "zh:bc9de0f921b69d07f5fc1ea65f8af71d8d1a7053aafb500788b30bfce64b8fbe", - "zh:bccd0a49f161a91660d7d30dd6b389e6820f29752ccf351f10a3297c96973823", - "zh:c69321caca20009abead617f888a67aca990276cb7388b738b19157b88749190", ] } provider "registry.terraform.io/hashicorp/random" { - version = "3.7.1" - constraints = "3.7.1" + version = "3.7.2" + constraints = "3.7.2" hashes = [ - "h1:/qtweZW2sk0kBNiQM02RvBXmlVdI9oYqRMCyBZ8XA98=", - "h1:0XCd0Y9HVdDcEbwxF18e49HB+YRO+QQ24H3jDgmFPEE=", - "h1:2tp72AGbuQyxyDYaaoxJk1el0AQ81Gjy2RWlVxS4BKw=", - "h1:4zid4G8d3tiQThQGwOcFk+EAyvpSkq2bFKSQ1vzfmKU=", - "h1:FMjX0VzHGDmqmz1TNQsq1W2Cfn/H/IR81YmIotHh5uY=", - "h1:Jvr+8mqBJlxSOF8R862ZtezBlCb9pVwNMNc1sYsDeYg=", - "h1:aNMs1vK7xE3QjsSDTTWTwNeNsbSCgOW2valnbyc9TIw=", - "h1:g+mDU6wEJJOSI7/tPh0Tc4i2XjrXAfqKXuiVM9Di194=", - "h1:ji/JgTChmJj8a9PaXja2PiYJhR4iZBX34FDfxnqeZIA=", - "h1:t+sEwSvzYaq0d3FNuzdn7snQPZqmbn3q5uwF7TSDNXQ=", - "h1:t152MY0tQH4a8fLzTtEWx70ITd3azVOrFDn/pQblbto=", - "zh:3193b89b43bf5805493e290374cdda5132578de6535f8009547c8b5d7a351585", - "zh:3218320de4be943e5812ed3de995946056db86eb8d03aa3f074e0c7316599bef", - "zh:419861805a37fa443e7d63b69fb3279926ccf98a79d256c422d5d82f0f387d1d", - "zh:4df9bd9d839b8fc11a3b8098a604b9b46e2235eb65ef15f4432bde0e175f9ca6", - "zh:5814be3f9c9cc39d2955d6f083bae793050d75c572e70ca11ccceb5517ced6b1", - "zh:63c6548a06de1231c8ee5570e42ca09c4b3db336578ded39b938f2156f06dd2e", - "zh:697e434c6bdee0502cc3deb098263b8dcd63948e8a96d61722811628dce2eba1", + "h1:0hcNr59VEJbhZYwuDE/ysmyTS0evkfcLarlni+zATPM=", + "h1:356j/3XnXEKr9nyicLUufzoF4Yr6hRy481KIxRVpK0c=", + "h1:Def/iHM4HihJCIxQ8AYoxtoVL5lVlYx0V7bX91pxwgM=", + "h1:KG4NuIBl1mRWU0KD/BGfCi1YN/j3F7H4YgeeM7iSdNs=", + "h1:Lmv2TxyKKm9Vt4uxcPZHw1uf0Ax/yYizJlilbLSZN8E=", + "h1:hkKSY5xI4R1H4Yrg10HHbtOoxZif2dXa9HFPSbaVg5o=", + "h1:khu3pu9zeUMd6Ev+yH6cQ1S4+xpzx8wqwwFwADYGeRI=", + "h1:l35vnL76rzaOjhhJQiaWviW0noK2YzHeHN0/vIXJnHk=", + "h1:nWZjMYzp+nsqD3xslcihzq1Enxv33a7iC8/I8CTBcHA=", + "h1:pSMn/cwmyHB6V67lToGmCHfJFfzA711vV+E1cGP0LBg=", + "h1:w+NoF7vNMFS+qrU2XUEm0/wnuIZxPC733qOOfLVOdfk=", + "zh:14829603a32e4bc4d05062f059e545a91e27ff033756b48afbae6b3c835f508f", + "zh:1527fb07d9fea400d70e9e6eb4a2b918d5060d604749b6f1c361518e7da546dc", + "zh:1e86bcd7ebec85ba336b423ba1db046aeaa3c0e5f921039b3f1a6fc2f978feab", + "zh:24536dec8bde66753f4b4030b8f3ef43c196d69cccbea1c382d01b222478c7a3", + "zh:29f1786486759fad9b0ce4fdfbbfece9343ad47cd50119045075e05afe49d212", + "zh:4d701e978c2dd8604ba1ce962b047607701e65c078cb22e97171513e9e57491f", "zh:78d5eefdd9e494defcb3c68d282b8f96630502cac21d1ea161f53cfe9bb483b3", - "zh:a0b8e44927e6327852bbfdc9d408d802569367f1e22a95bcdd7181b1c3b07601", - "zh:b7d3af018683ef22794eea9c218bc72d7c35a2b3ede9233b69653b3c782ee436", - "zh:d63b911d618a6fe446c65bfc21e793a7663e934b2fef833d42d3ccd38dd8d68d", - "zh:fa985cd0b11e6d651f47cff3055f0a9fd085ec190b6dbe99bf5448174434cdea", + "zh:7b8434212eef0f8c83f5a90c6d76feaf850f6502b61b53c329e85b3b281cba34", + "zh:ac8a23c212258b7976e1621275e3af7099e7e4a3d4478cf8d5d2a27f3bc3e967", + "zh:b516ca74431f3df4c6cf90ddcdb4042c626e026317a33c53f0b445a3d93b720d", + "zh:dc76e4326aec2490c1600d6871a95e78f9050f9ce427c71707ea412a2f2f1a62", + "zh:eac7b63e86c749c7d48f527671c7aee5b4e26c10be6ad7232d6860167f99dbb0", ] } diff --git a/dev-docs/miniconstellation/azure-terraform/main.tf b/dev-docs/miniconstellation/azure-terraform/main.tf index 36e92affb..5afd7e48b 100644 --- a/dev-docs/miniconstellation/azure-terraform/main.tf +++ b/dev-docs/miniconstellation/azure-terraform/main.tf @@ -6,7 +6,7 @@ terraform { } random = { source = "hashicorp/random" - version = "3.7.1" + version = "3.7.2" } tls = { source = "hashicorp/tls" @@ -14,7 +14,7 @@ terraform { } cloudinit = { source = "hashicorp/cloudinit" - version = "2.3.6" + version = "2.3.7" } } } diff --git a/e2e/miniconstellation/.terraform.lock.hcl b/e2e/miniconstellation/.terraform.lock.hcl index 3ac9144c9..ba8895a2d 100644 --- a/e2e/miniconstellation/.terraform.lock.hcl +++ b/e2e/miniconstellation/.terraform.lock.hcl @@ -32,32 +32,32 @@ provider "registry.terraform.io/hashicorp/azurerm" { } provider "registry.terraform.io/hashicorp/cloudinit" { - version = "2.3.6" - constraints = "2.3.6" + version = "2.3.7" + constraints = "2.3.7" hashes = [ - "h1:AGxDD7sJme9Adr3ThgBSkbbQLDLkEDLAH1bsmS6T/m0=", - "h1:ET4K0kdtPzOEr2M4hmA26jkAHbqN8YTSpcKtPDJxgyU=", - "h1:NlviM1ykkj49VzgN1Vw8THQIjwKbtiJik6axXfsfQNQ=", - "h1:OSlOCrwRWkNpWlfG7u+ZBSIskEELqHEqzfb5aXUo/fM=", - "h1:PTPDNobmkvWZu6U7k/s5yFXOSktFK5iwu67HAkPJ4t8=", - "h1:VK29UjlU8sEa8jaETUVsAXx1+R9Hgkb46IBBoYwzB1c=", - "h1:WvwTnAb57u948QLW0tvDyIb8Llv1udEChTtNH/A2whQ=", - "h1:YIF4q13C/LX4y4M2gpZxcAKMLiLPJmC1NLYNKw0HX2s=", - "h1:afnqn3XPnO40laFt+SVHPPKsg1j3HXT0VAO0xBVvmrY=", - "h1:sFAf8Tov1SGOrhv7g8J3w+LGhMgGtMN16FkIjfazudY=", - "h1:x5ospIpvJh5jr1gLQi0rkNGdHqfEbvPDimdmKjnngzU=", - "zh:1321b5ddede56be3f9b35bf75d7cda79adcb357fad62eb8677b6595e0baaa6cd", - "zh:265d66e61b9cd16ca1182ebf094cc0a08fb3687e8193a1dbac6899b16c237151", - "zh:3875c3a20e082ac55d5ff24bcaf7133ebc90c7f999fd0fb37cf0f0003474c94c", - "zh:68ce41ccd07757c451682703840cae1ec270ed5275cd491bbf8279782dfcbb73", + "h1:/hny5kXmhcnuJDD1V+5XCrZOYDIqja2U47VM4DPEnBA=", + "h1:A9COAUjeBJ+fgYAI/PKtDs4Wzs50srFSY+KkfpSVGLw=", + "h1:Lt8lqrdNgZRlkOTwSXZTyuJkiVXnpwTsWAqHQPL6sIY=", + "h1:M9TpQxKAE/hyOwytdX9MUNZw30HoD/OXqYIug5fkqH8=", + "h1:coZHiZww6hWZoOoWw0p+6oeYb/tMh1uTvX1Y2ZzzXqE=", + "h1:dgBaiMxxU61piW30emM6251LMFW66TbKR+p5ylPZvqc=", + "h1:h1Pr6uNwq+iDEGrnQJEHzOTz+yVTW0AJgZrGXuoO4Qs=", + "h1:ht83gEvyri0BD3sata7BDhx31N/KbCECIozG7UM/kC8=", + "h1:iZ27qylcH/2bs685LJTKOKcQ+g7cF3VwN3kHMrzm4Ow=", + "h1:ll35IR++uaXwfwqZFFRWrvS0idO1mX43Y/embsaOe4k=", + "h1:rafNPmTutVTO2Horq45DG9Pjqrs+vx42oc7b/3aVGEc=", + "zh:06f1c54e919425c3139f8aeb8fcf9bceca7e560d48c9f0c1e3bb0a8ad9d9da1e", + "zh:0e1e4cf6fd98b019e764c28586a386dc136129fef50af8c7165a067e7e4a31d5", + "zh:1871f4337c7c57287d4d67396f633d224b8938708b772abfc664d1f80bd67edd", + "zh:2b9269d91b742a71b2248439d5e9824f0447e6d261bfb86a8a88528609b136d1", + "zh:3d8ae039af21426072c66d6a59a467d51f2d9189b8198616888c1b7fc42addc7", + "zh:3ef4e2db5bcf3e2d915921adced43929214e0946a6fb11793085d9a48995ae01", + "zh:42ae54381147437c83cbb8790cc68935d71b6357728a154109d3220b1beb4dc9", + "zh:4496b362605ae4cbc9ef7995d102351e2fe311897586ffc7a4a262ccca0c782a", + "zh:652a2401257a12706d32842f66dac05a735693abcb3e6517d6b5e2573729ba13", + "zh:7406c30806f5979eaed5f50c548eced2ea18ea121e01801d2f0d4d87a04f6a14", + "zh:7848429fd5a5bcf35f6fee8487df0fb64b09ec071330f3ff240c0343fe2a5224", "zh:78d5eefdd9e494defcb3c68d282b8f96630502cac21d1ea161f53cfe9bb483b3", - "zh:8dca3bb3f85ff8ac4d1b3f93975dcb751ed788396c56ebf0c3737ce1a4c60492", - "zh:9339bdaa99939291cedf543861353c8e7171ec5231c0dfacaa9bdb3338978dab", - "zh:a8510c2256e9a78697910bb5542aeca457c81225ea88130335f6d14a36a36c74", - "zh:af7ed71b8fceb60a5e3b7fa663be171e0bd41bb0af30e0e1f06a004c7b584e4a", - "zh:bc9de0f921b69d07f5fc1ea65f8af71d8d1a7053aafb500788b30bfce64b8fbe", - "zh:bccd0a49f161a91660d7d30dd6b389e6820f29752ccf351f10a3297c96973823", - "zh:c69321caca20009abead617f888a67aca990276cb7388b738b19157b88749190", ] } diff --git a/e2e/miniconstellation/main.tf b/e2e/miniconstellation/main.tf index 91dbc5439..0007d12ac 100644 --- a/e2e/miniconstellation/main.tf +++ b/e2e/miniconstellation/main.tf @@ -10,7 +10,7 @@ terraform { } cloudinit = { source = "hashicorp/cloudinit" - version = "2.3.6" + version = "2.3.7" } } } diff --git a/terraform-provider-constellation/examples/full/aws/main.tf b/terraform-provider-constellation/examples/full/aws/main.tf index 6d5b498d1..51bccc71f 100644 --- a/terraform-provider-constellation/examples/full/aws/main.tf +++ b/terraform-provider-constellation/examples/full/aws/main.tf @@ -6,7 +6,7 @@ terraform { } random = { source = "hashicorp/random" - version = "3.7.1" + version = "3.7.2" } } } diff --git a/terraform-provider-constellation/examples/full/azure/main.tf b/terraform-provider-constellation/examples/full/azure/main.tf index 1e87874dc..817a12db0 100644 --- a/terraform-provider-constellation/examples/full/azure/main.tf +++ b/terraform-provider-constellation/examples/full/azure/main.tf @@ -6,7 +6,7 @@ terraform { } random = { source = "hashicorp/random" - version = "3.7.1" + version = "3.7.2" } } } diff --git a/terraform-provider-constellation/examples/full/gcp/main.tf b/terraform-provider-constellation/examples/full/gcp/main.tf index 874ba658e..cc11c85eb 100644 --- a/terraform-provider-constellation/examples/full/gcp/main.tf +++ b/terraform-provider-constellation/examples/full/gcp/main.tf @@ -6,7 +6,7 @@ terraform { } random = { source = "hashicorp/random" - version = "3.7.1" + version = "3.7.2" } } } diff --git a/terraform-provider-constellation/examples/full/stackit/main.tf b/terraform-provider-constellation/examples/full/stackit/main.tf index 5cc8b8b85..577dc29bb 100644 --- a/terraform-provider-constellation/examples/full/stackit/main.tf +++ b/terraform-provider-constellation/examples/full/stackit/main.tf @@ -6,7 +6,7 @@ terraform { } random = { source = "hashicorp/random" - version = "3.7.1" + version = "3.7.2" } } } diff --git a/terraform/infrastructure/aws/.terraform.lock.hcl b/terraform/infrastructure/aws/.terraform.lock.hcl index 19b0327c6..1ff8d5682 100644 --- a/terraform/infrastructure/aws/.terraform.lock.hcl +++ b/terraform/infrastructure/aws/.terraform.lock.hcl @@ -2,61 +2,67 @@ # Manual edits may be lost in future updates. provider "registry.terraform.io/hashicorp/aws" { - version = "5.94.1" - constraints = "5.94.1" + version = "5.95.0" + constraints = "5.95.0" hashes = [ - "h1:/BQk0OxJ3bsdISapaAe+AKeEH/ZUr1BBZo41qUvJ81c=", - "h1:CwOiakQRR4e5jO4vE1p2GjfsfO0XiR2uh1qvcSyi51w=", - "h1:QpZ6MYiJqSlB6zA7YnnAAXKeImVduxxiBkJe+NCsWkQ=", - "h1:WlF6NHa5yRgvbDWx6x+/sWwAJdi4Pefo/hN8m7/FK2M=", - "h1:dYdnGlaCJONFyGk/t3Y4iJzQ8EiJr2DaDdZ/2JV5PZU=", - "h1:dmSoVB6wlQ8H2VOc6CMs/d0VbEtkyGJ21qROaXkrdSg=", - "h1:eqxPYFl9Gl+iutDyYTZKteN5v0YFDzDI7eyfoIwh/3U=", - "h1:flqrGxt30tS2dKz1ebDVb4R9KETEj7hIw4q4apnVl4s=", - "h1:i8BJ9vzsFh23FZ5BXmziCCnnXt7TIVCnVhLbvQVhHKs=", - "h1:nJV7laVkjYOSlL4MYAi7m567QgCp7I3e3SLwB5dGHPY=", - "h1:oBzQAl63ITG9mOt8qGI1WmdBo5iIwIBsnzLXttXZe14=", - "h1:pm3uoaQYHaavwE83zsEzAFn/LKD1EWGiYRfzVxNCaIA=", - "h1:tUooQrvUBOca6k+8CDZHB/8mwSq6BDlCiLwR9FyiEHA=", - "h1:zRdb9dsuAP9K4Qjj9CkaNxO39L2DErawTpkMKWgxRyQ=", - "zh:14fb41e50219660d5f02b977e6f786d8ce78766cce8c2f6b8131411b087ae945", - "zh:3bc5d12acd5e1a5f1cf78a7f05d0d63f988b57485e7d20c47e80a0b723a99d26", - "zh:4835e49377f80a37c6191a092f636e227a9f086e3cc3f0c9e1b554da8793cfe8", - "zh:605971275adae25096dca30a94e29931039133c667c1d9b38778a09594312964", - "zh:8ae46b4a9a67815facf59da0c56d74ef71bcc77ae79e8bfbac504fa43f267f8e", - "zh:913f3f371c3e6d1f040d6284406204b049977c13cb75aae71edb0ef8361da7dd", - "zh:91f85ae8c73932547ad7139ce0b047a6a7c7be2fd944e51db13231cc80ce6d8e", - "zh:96352ae4323ce137903b9fe879941f894a3ce9ef30df1018a0f29f285a448793", + "h1:5TSx6DqOf1wDl94VnmFBd0LS7rj9WeNLzhEH5OR91lQ=", + "h1:6a/u1G0pYpKuXlYd4rBiY1MOf/2/u+lsXrqVKX+cyWw=", + "h1:EKaysIz3TwN9w2m1qzkYcv0zXjY0poZIb5LqfJ46MYo=", + "h1:Ewpt0MOWXnzzSTurMzbPUrx8aks4AZd0UCPlshpTvAg=", + "h1:M8cw3yigrk0C73kOegK8QUNWl07tt6N5wrMXrcXvklY=", + "h1:PUug/LLWa4GM08rXqnmCVUXj8ibCTvQxgvawhat3bMo=", + "h1:jRq8sU+/pFJX179VHfTXeZP+AfjWboeS0T1RgalPTrs=", + "h1:lvkTzjc/hlMC55xL+3H2yhRCnrlUCij9gejKOAm62OQ=", + "h1:ncMkoXvHvWQqgH1hTdsc+rEmdgcldezZvc1/uVuCOnE=", + "h1:pus7tQ5/UchkIkCRh9FriM9AtTIn1k7ZbN0lr7xXCio=", + "h1:uMhXkw9xETFOHIPc0IYKK6KAMyX3oet2QyJuzBWKlKk=", + "h1:vWiNRFP91pk3d8cbm9JHBwCG3MDqYVXClH9TpT3bh+U=", + "h1:wTc87U018nb3IUMvnKeYOZh8zFU2qGPAzHE4Yww4weo=", + "h1:wiDMUsumuHQ8CynAX9BPkHmSwG24vZ/3noX/NtVlg7k=", + "zh:20aac8c95edd444e659f235d19fa6af9b259c5a70fce19d400539ee88687e7d4", + "zh:29c55846fadd19dde0c5108f74d507c296d6c37cabdd466a96d3721a7c261743", + "zh:325fa5cb42d58c9203c279450863c49e534672f7101c067af465f9d7f4be3be5", + "zh:4f18c643584f7ba554399c0db3dd1c81629dfc2508a8777890f9f3b80b5213b7", + "zh:561e38e9cc6f0be5470c187ea8d51047c4133d9cb74cc1c364a9ebe41f40a06b", + "zh:6ec2cceed96ca5e47591ef11686614c663b05e112a814d24246a2739066577b6", + "zh:710a227c02b8a50f75a82a7f063d2416e85783e02ed91bb22cc12e7a8e11a3cf", + "zh:97a2f5e9bf4cf9a38274eddb7967e1cb4e5b04960c7da3603d9b1c15e18b8626", "zh:9b12af85486a96aedd8d7984b0ff811a4b42e3d88dad1a3fb4c0b580d04fa425", - "zh:9b51922c9201b1dc3d05b39f9972715db5f67297deee088793d02dea1832564b", - "zh:a689e82112aa71e15647b06502d5b585980cd9002c3cc8458f092e8c8a667696", - "zh:c3723fa3e6aff3c1cc0088bdcb1edee168fe60020f2f77161d135bf473f45ab2", - "zh:d6a2052b864dd394b01ad1bae32d0a7d257940ee47908d02df7fa7873981d619", - "zh:dda4c9c0406cc54ad8ee4f19173a32de7c6e73abb5a948ea0f342d567df26a1d", - "zh:f42e0fe592b97cbdf70612f0fbe2bab851835e2d1aaf8cbb87c3ab0f2c96bb27", + "zh:bf6bfb01fff8226d86c1b219d67cd96f37bb9312b17d00340e6ff00dda2dbe82", + "zh:cba74d606149cbaaa8dfb69f369f2496b851643a879adc24b11515fcece42b66", + "zh:d5a2c36739cab677a48f4856958c96be6f018ff0da50d233ca93a3a21aaceca1", + "zh:df5d1466144852fe5da4af0628db6f02b5186c59f683e5085705d9b90cacfbc0", + "zh:f82d96b45983b3c73b78dced9e344512b7a9adb06e8c1e3e4f422605efbb756d", + "zh:fb523f787077270059a8f3ab52c0fc56257c0b3a06f0219be247c8b15ff0ca2a", ] } provider "registry.terraform.io/hashicorp/random" { - version = "3.7.1" - constraints = "3.7.1" + version = "3.7.2" + constraints = "3.7.2" hashes = [ - "h1:/qtweZW2sk0kBNiQM02RvBXmlVdI9oYqRMCyBZ8XA98=", - "h1:0XCd0Y9HVdDcEbwxF18e49HB+YRO+QQ24H3jDgmFPEE=", - "h1:Jvr+8mqBJlxSOF8R862ZtezBlCb9pVwNMNc1sYsDeYg=", - "h1:ji/JgTChmJj8a9PaXja2PiYJhR4iZBX34FDfxnqeZIA=", - "h1:t152MY0tQH4a8fLzTtEWx70ITd3azVOrFDn/pQblbto=", - "zh:3193b89b43bf5805493e290374cdda5132578de6535f8009547c8b5d7a351585", - "zh:3218320de4be943e5812ed3de995946056db86eb8d03aa3f074e0c7316599bef", - "zh:419861805a37fa443e7d63b69fb3279926ccf98a79d256c422d5d82f0f387d1d", - "zh:4df9bd9d839b8fc11a3b8098a604b9b46e2235eb65ef15f4432bde0e175f9ca6", - "zh:5814be3f9c9cc39d2955d6f083bae793050d75c572e70ca11ccceb5517ced6b1", - "zh:63c6548a06de1231c8ee5570e42ca09c4b3db336578ded39b938f2156f06dd2e", - "zh:697e434c6bdee0502cc3deb098263b8dcd63948e8a96d61722811628dce2eba1", + "h1:0hcNr59VEJbhZYwuDE/ysmyTS0evkfcLarlni+zATPM=", + "h1:356j/3XnXEKr9nyicLUufzoF4Yr6hRy481KIxRVpK0c=", + "h1:Def/iHM4HihJCIxQ8AYoxtoVL5lVlYx0V7bX91pxwgM=", + "h1:KG4NuIBl1mRWU0KD/BGfCi1YN/j3F7H4YgeeM7iSdNs=", + "h1:Lmv2TxyKKm9Vt4uxcPZHw1uf0Ax/yYizJlilbLSZN8E=", + "h1:hkKSY5xI4R1H4Yrg10HHbtOoxZif2dXa9HFPSbaVg5o=", + "h1:khu3pu9zeUMd6Ev+yH6cQ1S4+xpzx8wqwwFwADYGeRI=", + "h1:l35vnL76rzaOjhhJQiaWviW0noK2YzHeHN0/vIXJnHk=", + "h1:nWZjMYzp+nsqD3xslcihzq1Enxv33a7iC8/I8CTBcHA=", + "h1:pSMn/cwmyHB6V67lToGmCHfJFfzA711vV+E1cGP0LBg=", + "h1:w+NoF7vNMFS+qrU2XUEm0/wnuIZxPC733qOOfLVOdfk=", + "zh:14829603a32e4bc4d05062f059e545a91e27ff033756b48afbae6b3c835f508f", + "zh:1527fb07d9fea400d70e9e6eb4a2b918d5060d604749b6f1c361518e7da546dc", + "zh:1e86bcd7ebec85ba336b423ba1db046aeaa3c0e5f921039b3f1a6fc2f978feab", + "zh:24536dec8bde66753f4b4030b8f3ef43c196d69cccbea1c382d01b222478c7a3", + "zh:29f1786486759fad9b0ce4fdfbbfece9343ad47cd50119045075e05afe49d212", + "zh:4d701e978c2dd8604ba1ce962b047607701e65c078cb22e97171513e9e57491f", "zh:78d5eefdd9e494defcb3c68d282b8f96630502cac21d1ea161f53cfe9bb483b3", - "zh:a0b8e44927e6327852bbfdc9d408d802569367f1e22a95bcdd7181b1c3b07601", - "zh:b7d3af018683ef22794eea9c218bc72d7c35a2b3ede9233b69653b3c782ee436", - "zh:d63b911d618a6fe446c65bfc21e793a7663e934b2fef833d42d3ccd38dd8d68d", - "zh:fa985cd0b11e6d651f47cff3055f0a9fd085ec190b6dbe99bf5448174434cdea", + "zh:7b8434212eef0f8c83f5a90c6d76feaf850f6502b61b53c329e85b3b281cba34", + "zh:ac8a23c212258b7976e1621275e3af7099e7e4a3d4478cf8d5d2a27f3bc3e967", + "zh:b516ca74431f3df4c6cf90ddcdb4042c626e026317a33c53f0b445a3d93b720d", + "zh:dc76e4326aec2490c1600d6871a95e78f9050f9ce427c71707ea412a2f2f1a62", + "zh:eac7b63e86c749c7d48f527671c7aee5b4e26c10be6ad7232d6860167f99dbb0", ] } diff --git a/terraform/infrastructure/aws/main.tf b/terraform/infrastructure/aws/main.tf index e4c06d91e..4e2f43ddb 100644 --- a/terraform/infrastructure/aws/main.tf +++ b/terraform/infrastructure/aws/main.tf @@ -2,11 +2,11 @@ terraform { required_providers { aws = { source = "hashicorp/aws" - version = "5.94.1" + version = "5.95.0" } random = { source = "hashicorp/random" - version = "3.7.1" + version = "3.7.2" } } } diff --git a/terraform/infrastructure/aws/modules/instance_group/main.tf b/terraform/infrastructure/aws/modules/instance_group/main.tf index 788b06bce..7510f358b 100644 --- a/terraform/infrastructure/aws/modules/instance_group/main.tf +++ b/terraform/infrastructure/aws/modules/instance_group/main.tf @@ -2,11 +2,11 @@ terraform { required_providers { aws = { source = "hashicorp/aws" - version = "5.94.1" + version = "5.95.0" } random = { source = "hashicorp/random" - version = "3.7.1" + version = "3.7.2" } } } diff --git a/terraform/infrastructure/aws/modules/jump_host/main.tf b/terraform/infrastructure/aws/modules/jump_host/main.tf index fc1017bfd..f88f1ecc6 100644 --- a/terraform/infrastructure/aws/modules/jump_host/main.tf +++ b/terraform/infrastructure/aws/modules/jump_host/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { aws = { source = "hashicorp/aws" - version = "5.94.1" + version = "5.95.0" } } } diff --git a/terraform/infrastructure/aws/modules/load_balancer_target/main.tf b/terraform/infrastructure/aws/modules/load_balancer_target/main.tf index e0fab8730..02dc2f08f 100644 --- a/terraform/infrastructure/aws/modules/load_balancer_target/main.tf +++ b/terraform/infrastructure/aws/modules/load_balancer_target/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { aws = { source = "hashicorp/aws" - version = "5.94.1" + version = "5.95.0" } } } diff --git a/terraform/infrastructure/aws/modules/public_private_subnet/main.tf b/terraform/infrastructure/aws/modules/public_private_subnet/main.tf index 47e1e07e7..c3e8b19ee 100644 --- a/terraform/infrastructure/aws/modules/public_private_subnet/main.tf +++ b/terraform/infrastructure/aws/modules/public_private_subnet/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { aws = { source = "hashicorp/aws" - version = "5.94.1" + version = "5.95.0" } } } diff --git a/terraform/infrastructure/azure/.terraform.lock.hcl b/terraform/infrastructure/azure/.terraform.lock.hcl index 2a0f14ac0..f769b5b5c 100644 --- a/terraform/infrastructure/azure/.terraform.lock.hcl +++ b/terraform/infrastructure/azure/.terraform.lock.hcl @@ -32,32 +32,32 @@ provider "registry.terraform.io/hashicorp/azurerm" { } provider "registry.terraform.io/hashicorp/random" { - version = "3.7.1" - constraints = "3.7.1" + version = "3.7.2" + constraints = "3.7.2" hashes = [ - "h1:/qtweZW2sk0kBNiQM02RvBXmlVdI9oYqRMCyBZ8XA98=", - "h1:0XCd0Y9HVdDcEbwxF18e49HB+YRO+QQ24H3jDgmFPEE=", - "h1:2tp72AGbuQyxyDYaaoxJk1el0AQ81Gjy2RWlVxS4BKw=", - "h1:4zid4G8d3tiQThQGwOcFk+EAyvpSkq2bFKSQ1vzfmKU=", - "h1:FMjX0VzHGDmqmz1TNQsq1W2Cfn/H/IR81YmIotHh5uY=", - "h1:Jvr+8mqBJlxSOF8R862ZtezBlCb9pVwNMNc1sYsDeYg=", - "h1:aNMs1vK7xE3QjsSDTTWTwNeNsbSCgOW2valnbyc9TIw=", - "h1:g+mDU6wEJJOSI7/tPh0Tc4i2XjrXAfqKXuiVM9Di194=", - "h1:ji/JgTChmJj8a9PaXja2PiYJhR4iZBX34FDfxnqeZIA=", - "h1:t+sEwSvzYaq0d3FNuzdn7snQPZqmbn3q5uwF7TSDNXQ=", - "h1:t152MY0tQH4a8fLzTtEWx70ITd3azVOrFDn/pQblbto=", - "zh:3193b89b43bf5805493e290374cdda5132578de6535f8009547c8b5d7a351585", - "zh:3218320de4be943e5812ed3de995946056db86eb8d03aa3f074e0c7316599bef", - "zh:419861805a37fa443e7d63b69fb3279926ccf98a79d256c422d5d82f0f387d1d", - "zh:4df9bd9d839b8fc11a3b8098a604b9b46e2235eb65ef15f4432bde0e175f9ca6", - "zh:5814be3f9c9cc39d2955d6f083bae793050d75c572e70ca11ccceb5517ced6b1", - "zh:63c6548a06de1231c8ee5570e42ca09c4b3db336578ded39b938f2156f06dd2e", - "zh:697e434c6bdee0502cc3deb098263b8dcd63948e8a96d61722811628dce2eba1", + "h1:0hcNr59VEJbhZYwuDE/ysmyTS0evkfcLarlni+zATPM=", + "h1:356j/3XnXEKr9nyicLUufzoF4Yr6hRy481KIxRVpK0c=", + "h1:Def/iHM4HihJCIxQ8AYoxtoVL5lVlYx0V7bX91pxwgM=", + "h1:KG4NuIBl1mRWU0KD/BGfCi1YN/j3F7H4YgeeM7iSdNs=", + "h1:Lmv2TxyKKm9Vt4uxcPZHw1uf0Ax/yYizJlilbLSZN8E=", + "h1:hkKSY5xI4R1H4Yrg10HHbtOoxZif2dXa9HFPSbaVg5o=", + "h1:khu3pu9zeUMd6Ev+yH6cQ1S4+xpzx8wqwwFwADYGeRI=", + "h1:l35vnL76rzaOjhhJQiaWviW0noK2YzHeHN0/vIXJnHk=", + "h1:nWZjMYzp+nsqD3xslcihzq1Enxv33a7iC8/I8CTBcHA=", + "h1:pSMn/cwmyHB6V67lToGmCHfJFfzA711vV+E1cGP0LBg=", + "h1:w+NoF7vNMFS+qrU2XUEm0/wnuIZxPC733qOOfLVOdfk=", + "zh:14829603a32e4bc4d05062f059e545a91e27ff033756b48afbae6b3c835f508f", + "zh:1527fb07d9fea400d70e9e6eb4a2b918d5060d604749b6f1c361518e7da546dc", + "zh:1e86bcd7ebec85ba336b423ba1db046aeaa3c0e5f921039b3f1a6fc2f978feab", + "zh:24536dec8bde66753f4b4030b8f3ef43c196d69cccbea1c382d01b222478c7a3", + "zh:29f1786486759fad9b0ce4fdfbbfece9343ad47cd50119045075e05afe49d212", + "zh:4d701e978c2dd8604ba1ce962b047607701e65c078cb22e97171513e9e57491f", "zh:78d5eefdd9e494defcb3c68d282b8f96630502cac21d1ea161f53cfe9bb483b3", - "zh:a0b8e44927e6327852bbfdc9d408d802569367f1e22a95bcdd7181b1c3b07601", - "zh:b7d3af018683ef22794eea9c218bc72d7c35a2b3ede9233b69653b3c782ee436", - "zh:d63b911d618a6fe446c65bfc21e793a7663e934b2fef833d42d3ccd38dd8d68d", - "zh:fa985cd0b11e6d651f47cff3055f0a9fd085ec190b6dbe99bf5448174434cdea", + "zh:7b8434212eef0f8c83f5a90c6d76feaf850f6502b61b53c329e85b3b281cba34", + "zh:ac8a23c212258b7976e1621275e3af7099e7e4a3d4478cf8d5d2a27f3bc3e967", + "zh:b516ca74431f3df4c6cf90ddcdb4042c626e026317a33c53f0b445a3d93b720d", + "zh:dc76e4326aec2490c1600d6871a95e78f9050f9ce427c71707ea412a2f2f1a62", + "zh:eac7b63e86c749c7d48f527671c7aee5b4e26c10be6ad7232d6860167f99dbb0", ] } diff --git a/terraform/infrastructure/azure/main.tf b/terraform/infrastructure/azure/main.tf index 9cf067547..1fbf09e0b 100644 --- a/terraform/infrastructure/azure/main.tf +++ b/terraform/infrastructure/azure/main.tf @@ -6,7 +6,7 @@ terraform { } random = { source = "hashicorp/random" - version = "3.7.1" + version = "3.7.2" } } } diff --git a/terraform/infrastructure/azure/modules/scale_set/main.tf b/terraform/infrastructure/azure/modules/scale_set/main.tf index a9bc71173..bd491e73e 100644 --- a/terraform/infrastructure/azure/modules/scale_set/main.tf +++ b/terraform/infrastructure/azure/modules/scale_set/main.tf @@ -6,7 +6,7 @@ terraform { } random = { source = "hashicorp/random" - version = "3.7.1" + version = "3.7.2" } } } diff --git a/terraform/infrastructure/gcp/.terraform.lock.hcl b/terraform/infrastructure/gcp/.terraform.lock.hcl index d0071baf0..efea701fe 100644 --- a/terraform/infrastructure/gcp/.terraform.lock.hcl +++ b/terraform/infrastructure/gcp/.terraform.lock.hcl @@ -2,55 +2,61 @@ # Manual edits may be lost in future updates. provider "registry.terraform.io/hashicorp/google" { - version = "6.29.0" - constraints = "6.29.0" + version = "6.31.0" + constraints = "6.31.0" hashes = [ - "h1:2j9Sb1fQ+94t40D6IJ+w0B7+4NLz/MmRBFa+dkML3nA=", - "h1:9wdjAnNx+K1l3gOzB683Neg5CII8ME5bo2AlqrS3uWQ=", - "h1:E+nXAl8krGxH+AtEYiyNannu+Viv1aoft1U0V/ZCSso=", - "h1:GwAhWJn/McO2ZpaIGPl7s63znCT2SNt1CRiE8YlawNQ=", - "h1:NkmMp6XYTXABLcIqTgIwRUgo/DzPCCPNrVpwYeWvd1U=", - "h1:U0Ca/+zZMMuea+r80qu9SRzWu8Waxny5aWGZXn+kVhc=", - "h1:khB3X7tH8vh6aLdxCWGkZtskwD06bucR2VWfFV1rxFg=", - "h1:t0wH2/d/Y91IZ8EFXjefYhi5H7xUpjx3DPnUFch4QwM=", - "h1:t4KEm4kHO0m50ffAUCM3MHbXX9fs8/WQfnTbIDnOKrE=", - "h1:vqURFeaR56i808INF5o+IC3anxqT+13dgIr3zzTmr9s=", - "h1:z0M8BOzrrFSo2x3MeRZGchFsCAqJIHJV8dj4IOI+CK8=", - "zh:01a501df2fb9ecbf0935b27e588bc7b6bcaf4ab0043747f4229c25e4ba47dadb", - "zh:056f8ab2b73755cf5a67228ab4a07882e76265fa25b07f2794d9939288164f48", - "zh:0dbdfa564f7db8a2e6f7e76437a9850b6101450120c08e87cf9846330736c0c6", - "zh:3c3e4ee801de22812bd07cb3d36b227f8057d7825998fb4d97051764a565b89b", - "zh:4e440eb4c60da9cd7d23b3b99be54c869472fd70006c39639a04b9a51248929c", - "zh:659490efd20b3e98e4166b2925baa18549d82e4c16751bc92baed0185d22d108", - "zh:9ae24b98a3a3346b8004c6b87e3b59decba2f64c7407e106263859c275105ef8", - "zh:c64cff9c17e302236bb9e0a6d5eff4c92540ce3947269f3db94e2b9a1b1a3f4e", - "zh:d2fd0aecbbbba463bcb0640f54c8df5e7a63918bdd44236dcd36dff33bb8de09", - "zh:f022316369ea676f5f9d11768b4c621abd3304c1e6d1f0c2361e4e2620c4b65d", + "h1:37jDrJfbBxQP2NVp1bwFrnh2JJvOusqAX4AQIdVheDw=", + "h1:5wON4dRQ/EGNj7SnFdHJbwZ5AUvRBnTI0S9MqTIcTQQ=", + "h1:6dqiR31kt8b6NnTEv24P02hTRKiTpCbKj9EewHjhQnQ=", + "h1:BIXjetIoq8O5bUh5rr6gWInLu0tLvsXJMa71TfUfvz8=", + "h1:Lx6Orp2Z7j+vvw6p+2y8FyzXEeFIshdwEh56jVGXqfk=", + "h1:WLPBPwWmIptudvmZonYyhfCJrHgcw89U8s5ZnikNtbM=", + "h1:YQ9TakehBet+sOpSRdNTnHiRYdZwGUj4015jy9rff4w=", + "h1:e3Ee2h+EWrozdCGgzm6Eq+b4gGe6grrGW37hcLk0S9k=", + "h1:mThKn3jf6kXsHUxevQLUGWD7wXBpopCLMKMI+FlNDow=", + "h1:zE7iocw7XB0EFkh/fOJf9FcPwtw/7JCDfQovev9mtP4=", + "h1:zf3pGXLZTJAe+VP54+hMsCtFF/Nl7MdWOmPMHBdm7eA=", + "zh:030dffef5b97ceb63dc6e48f14287e04ff3ebd468a570977b672fd267859756c", + "zh:2d569126f1fa6bca212c0199de856492f2f2bf55cea3fc2a5b128ad8183332db", + "zh:4ceb4fb9a3b57a696225dda1cb75cc6f211ced1b54fd62471ea8774d3c153be5", + "zh:4cfc47f6e7fe36497eafa81d90f0dbe871f637bc8f4deea3a07e23abdd4072de", + "zh:61c55ba8d382fa92716ff26ffa3ef7549386bd1dd2d27f52d169ebbdc40b2ccf", + "zh:7204c774e6b34651c410a333ec6217aa6976c6b88db0cdf58a486aaf4827d1e6", + "zh:82974bf17ea5036a2ae1b045459e7bc485372e3aeb2b7369b6e8b57b3b632aaa", + "zh:8da1cffc3ccc44e2bee2c8a9137cab9369e2e0ee7dc8a530672a37e25971d545", + "zh:c60ebe0e8a074bc679b13a9cf2a1b2e53daffa81eee41d68b9a2dcb9587a2eb9", + "zh:c7ae96c4f57bc1d197faac57913f52c5f5d3d5217bcb21f748cdb245037e0104", + "zh:e24b5bd749ade5089693514509ca95e3e188d9a1d0ee0fb28daf80fd945355ef", "zh:f569b65999264a9416862bca5cd2a6177d94ccb0424f3a4ef424428912b9cb3c", - "zh:feb7d4fdbebdfabac2aaa73376f754736ccf089fa90adf6388701f89801188e6", ] } provider "registry.terraform.io/hashicorp/random" { - version = "3.7.1" - constraints = "3.7.1" + version = "3.7.2" + constraints = "3.7.2" hashes = [ - "h1:/qtweZW2sk0kBNiQM02RvBXmlVdI9oYqRMCyBZ8XA98=", - "h1:0XCd0Y9HVdDcEbwxF18e49HB+YRO+QQ24H3jDgmFPEE=", - "h1:Jvr+8mqBJlxSOF8R862ZtezBlCb9pVwNMNc1sYsDeYg=", - "h1:ji/JgTChmJj8a9PaXja2PiYJhR4iZBX34FDfxnqeZIA=", - "h1:t152MY0tQH4a8fLzTtEWx70ITd3azVOrFDn/pQblbto=", - "zh:3193b89b43bf5805493e290374cdda5132578de6535f8009547c8b5d7a351585", - "zh:3218320de4be943e5812ed3de995946056db86eb8d03aa3f074e0c7316599bef", - "zh:419861805a37fa443e7d63b69fb3279926ccf98a79d256c422d5d82f0f387d1d", - "zh:4df9bd9d839b8fc11a3b8098a604b9b46e2235eb65ef15f4432bde0e175f9ca6", - "zh:5814be3f9c9cc39d2955d6f083bae793050d75c572e70ca11ccceb5517ced6b1", - "zh:63c6548a06de1231c8ee5570e42ca09c4b3db336578ded39b938f2156f06dd2e", - "zh:697e434c6bdee0502cc3deb098263b8dcd63948e8a96d61722811628dce2eba1", + "h1:0hcNr59VEJbhZYwuDE/ysmyTS0evkfcLarlni+zATPM=", + "h1:356j/3XnXEKr9nyicLUufzoF4Yr6hRy481KIxRVpK0c=", + "h1:Def/iHM4HihJCIxQ8AYoxtoVL5lVlYx0V7bX91pxwgM=", + "h1:KG4NuIBl1mRWU0KD/BGfCi1YN/j3F7H4YgeeM7iSdNs=", + "h1:Lmv2TxyKKm9Vt4uxcPZHw1uf0Ax/yYizJlilbLSZN8E=", + "h1:hkKSY5xI4R1H4Yrg10HHbtOoxZif2dXa9HFPSbaVg5o=", + "h1:khu3pu9zeUMd6Ev+yH6cQ1S4+xpzx8wqwwFwADYGeRI=", + "h1:l35vnL76rzaOjhhJQiaWviW0noK2YzHeHN0/vIXJnHk=", + "h1:nWZjMYzp+nsqD3xslcihzq1Enxv33a7iC8/I8CTBcHA=", + "h1:pSMn/cwmyHB6V67lToGmCHfJFfzA711vV+E1cGP0LBg=", + "h1:w+NoF7vNMFS+qrU2XUEm0/wnuIZxPC733qOOfLVOdfk=", + "zh:14829603a32e4bc4d05062f059e545a91e27ff033756b48afbae6b3c835f508f", + "zh:1527fb07d9fea400d70e9e6eb4a2b918d5060d604749b6f1c361518e7da546dc", + "zh:1e86bcd7ebec85ba336b423ba1db046aeaa3c0e5f921039b3f1a6fc2f978feab", + "zh:24536dec8bde66753f4b4030b8f3ef43c196d69cccbea1c382d01b222478c7a3", + "zh:29f1786486759fad9b0ce4fdfbbfece9343ad47cd50119045075e05afe49d212", + "zh:4d701e978c2dd8604ba1ce962b047607701e65c078cb22e97171513e9e57491f", "zh:78d5eefdd9e494defcb3c68d282b8f96630502cac21d1ea161f53cfe9bb483b3", - "zh:a0b8e44927e6327852bbfdc9d408d802569367f1e22a95bcdd7181b1c3b07601", - "zh:b7d3af018683ef22794eea9c218bc72d7c35a2b3ede9233b69653b3c782ee436", - "zh:d63b911d618a6fe446c65bfc21e793a7663e934b2fef833d42d3ccd38dd8d68d", - "zh:fa985cd0b11e6d651f47cff3055f0a9fd085ec190b6dbe99bf5448174434cdea", + "zh:7b8434212eef0f8c83f5a90c6d76feaf850f6502b61b53c329e85b3b281cba34", + "zh:ac8a23c212258b7976e1621275e3af7099e7e4a3d4478cf8d5d2a27f3bc3e967", + "zh:b516ca74431f3df4c6cf90ddcdb4042c626e026317a33c53f0b445a3d93b720d", + "zh:dc76e4326aec2490c1600d6871a95e78f9050f9ce427c71707ea412a2f2f1a62", + "zh:eac7b63e86c749c7d48f527671c7aee5b4e26c10be6ad7232d6860167f99dbb0", ] } diff --git a/terraform/infrastructure/gcp/main.tf b/terraform/infrastructure/gcp/main.tf index 9067e1611..74b4a7499 100644 --- a/terraform/infrastructure/gcp/main.tf +++ b/terraform/infrastructure/gcp/main.tf @@ -2,12 +2,12 @@ terraform { required_providers { google = { source = "hashicorp/google" - version = "6.29.0" + version = "6.31.0" } random = { source = "hashicorp/random" - version = "3.7.1" + version = "3.7.2" } } } diff --git a/terraform/infrastructure/gcp/modules/instance_group/main.tf b/terraform/infrastructure/gcp/modules/instance_group/main.tf index ca670d5c4..7b1e9da44 100644 --- a/terraform/infrastructure/gcp/modules/instance_group/main.tf +++ b/terraform/infrastructure/gcp/modules/instance_group/main.tf @@ -2,12 +2,12 @@ terraform { required_providers { google = { source = "hashicorp/google" - version = "6.29.0" + version = "6.31.0" } random = { source = "hashicorp/random" - version = "3.7.1" + version = "3.7.2" } } } diff --git a/terraform/infrastructure/gcp/modules/internal_load_balancer/main.tf b/terraform/infrastructure/gcp/modules/internal_load_balancer/main.tf index bda3f7b25..26556c07b 100644 --- a/terraform/infrastructure/gcp/modules/internal_load_balancer/main.tf +++ b/terraform/infrastructure/gcp/modules/internal_load_balancer/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { google = { source = "hashicorp/google" - version = "6.29.0" + version = "6.31.0" } } } diff --git a/terraform/infrastructure/gcp/modules/jump_host/main.tf b/terraform/infrastructure/gcp/modules/jump_host/main.tf index 12923034b..f9a733456 100644 --- a/terraform/infrastructure/gcp/modules/jump_host/main.tf +++ b/terraform/infrastructure/gcp/modules/jump_host/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { google = { source = "hashicorp/google" - version = "6.29.0" + version = "6.31.0" } } } diff --git a/terraform/infrastructure/gcp/modules/loadbalancer/main.tf b/terraform/infrastructure/gcp/modules/loadbalancer/main.tf index 462f2f335..64bf74f5c 100644 --- a/terraform/infrastructure/gcp/modules/loadbalancer/main.tf +++ b/terraform/infrastructure/gcp/modules/loadbalancer/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { google = { source = "hashicorp/google" - version = "6.29.0" + version = "6.31.0" } } } diff --git a/terraform/infrastructure/iam/aws/.terraform.lock.hcl b/terraform/infrastructure/iam/aws/.terraform.lock.hcl index cd0517d59..1ff8d5682 100644 --- a/terraform/infrastructure/iam/aws/.terraform.lock.hcl +++ b/terraform/infrastructure/iam/aws/.terraform.lock.hcl @@ -2,67 +2,67 @@ # Manual edits may be lost in future updates. provider "registry.terraform.io/hashicorp/aws" { - version = "5.94.1" - constraints = "5.94.1" + version = "5.95.0" + constraints = "5.95.0" hashes = [ - "h1:/BQk0OxJ3bsdISapaAe+AKeEH/ZUr1BBZo41qUvJ81c=", - "h1:CwOiakQRR4e5jO4vE1p2GjfsfO0XiR2uh1qvcSyi51w=", - "h1:QpZ6MYiJqSlB6zA7YnnAAXKeImVduxxiBkJe+NCsWkQ=", - "h1:WlF6NHa5yRgvbDWx6x+/sWwAJdi4Pefo/hN8m7/FK2M=", - "h1:dYdnGlaCJONFyGk/t3Y4iJzQ8EiJr2DaDdZ/2JV5PZU=", - "h1:dmSoVB6wlQ8H2VOc6CMs/d0VbEtkyGJ21qROaXkrdSg=", - "h1:eqxPYFl9Gl+iutDyYTZKteN5v0YFDzDI7eyfoIwh/3U=", - "h1:flqrGxt30tS2dKz1ebDVb4R9KETEj7hIw4q4apnVl4s=", - "h1:i8BJ9vzsFh23FZ5BXmziCCnnXt7TIVCnVhLbvQVhHKs=", - "h1:nJV7laVkjYOSlL4MYAi7m567QgCp7I3e3SLwB5dGHPY=", - "h1:oBzQAl63ITG9mOt8qGI1WmdBo5iIwIBsnzLXttXZe14=", - "h1:pm3uoaQYHaavwE83zsEzAFn/LKD1EWGiYRfzVxNCaIA=", - "h1:tUooQrvUBOca6k+8CDZHB/8mwSq6BDlCiLwR9FyiEHA=", - "h1:zRdb9dsuAP9K4Qjj9CkaNxO39L2DErawTpkMKWgxRyQ=", - "zh:14fb41e50219660d5f02b977e6f786d8ce78766cce8c2f6b8131411b087ae945", - "zh:3bc5d12acd5e1a5f1cf78a7f05d0d63f988b57485e7d20c47e80a0b723a99d26", - "zh:4835e49377f80a37c6191a092f636e227a9f086e3cc3f0c9e1b554da8793cfe8", - "zh:605971275adae25096dca30a94e29931039133c667c1d9b38778a09594312964", - "zh:8ae46b4a9a67815facf59da0c56d74ef71bcc77ae79e8bfbac504fa43f267f8e", - "zh:913f3f371c3e6d1f040d6284406204b049977c13cb75aae71edb0ef8361da7dd", - "zh:91f85ae8c73932547ad7139ce0b047a6a7c7be2fd944e51db13231cc80ce6d8e", - "zh:96352ae4323ce137903b9fe879941f894a3ce9ef30df1018a0f29f285a448793", + "h1:5TSx6DqOf1wDl94VnmFBd0LS7rj9WeNLzhEH5OR91lQ=", + "h1:6a/u1G0pYpKuXlYd4rBiY1MOf/2/u+lsXrqVKX+cyWw=", + "h1:EKaysIz3TwN9w2m1qzkYcv0zXjY0poZIb5LqfJ46MYo=", + "h1:Ewpt0MOWXnzzSTurMzbPUrx8aks4AZd0UCPlshpTvAg=", + "h1:M8cw3yigrk0C73kOegK8QUNWl07tt6N5wrMXrcXvklY=", + "h1:PUug/LLWa4GM08rXqnmCVUXj8ibCTvQxgvawhat3bMo=", + "h1:jRq8sU+/pFJX179VHfTXeZP+AfjWboeS0T1RgalPTrs=", + "h1:lvkTzjc/hlMC55xL+3H2yhRCnrlUCij9gejKOAm62OQ=", + "h1:ncMkoXvHvWQqgH1hTdsc+rEmdgcldezZvc1/uVuCOnE=", + "h1:pus7tQ5/UchkIkCRh9FriM9AtTIn1k7ZbN0lr7xXCio=", + "h1:uMhXkw9xETFOHIPc0IYKK6KAMyX3oet2QyJuzBWKlKk=", + "h1:vWiNRFP91pk3d8cbm9JHBwCG3MDqYVXClH9TpT3bh+U=", + "h1:wTc87U018nb3IUMvnKeYOZh8zFU2qGPAzHE4Yww4weo=", + "h1:wiDMUsumuHQ8CynAX9BPkHmSwG24vZ/3noX/NtVlg7k=", + "zh:20aac8c95edd444e659f235d19fa6af9b259c5a70fce19d400539ee88687e7d4", + "zh:29c55846fadd19dde0c5108f74d507c296d6c37cabdd466a96d3721a7c261743", + "zh:325fa5cb42d58c9203c279450863c49e534672f7101c067af465f9d7f4be3be5", + "zh:4f18c643584f7ba554399c0db3dd1c81629dfc2508a8777890f9f3b80b5213b7", + "zh:561e38e9cc6f0be5470c187ea8d51047c4133d9cb74cc1c364a9ebe41f40a06b", + "zh:6ec2cceed96ca5e47591ef11686614c663b05e112a814d24246a2739066577b6", + "zh:710a227c02b8a50f75a82a7f063d2416e85783e02ed91bb22cc12e7a8e11a3cf", + "zh:97a2f5e9bf4cf9a38274eddb7967e1cb4e5b04960c7da3603d9b1c15e18b8626", "zh:9b12af85486a96aedd8d7984b0ff811a4b42e3d88dad1a3fb4c0b580d04fa425", - "zh:9b51922c9201b1dc3d05b39f9972715db5f67297deee088793d02dea1832564b", - "zh:a689e82112aa71e15647b06502d5b585980cd9002c3cc8458f092e8c8a667696", - "zh:c3723fa3e6aff3c1cc0088bdcb1edee168fe60020f2f77161d135bf473f45ab2", - "zh:d6a2052b864dd394b01ad1bae32d0a7d257940ee47908d02df7fa7873981d619", - "zh:dda4c9c0406cc54ad8ee4f19173a32de7c6e73abb5a948ea0f342d567df26a1d", - "zh:f42e0fe592b97cbdf70612f0fbe2bab851835e2d1aaf8cbb87c3ab0f2c96bb27", + "zh:bf6bfb01fff8226d86c1b219d67cd96f37bb9312b17d00340e6ff00dda2dbe82", + "zh:cba74d606149cbaaa8dfb69f369f2496b851643a879adc24b11515fcece42b66", + "zh:d5a2c36739cab677a48f4856958c96be6f018ff0da50d233ca93a3a21aaceca1", + "zh:df5d1466144852fe5da4af0628db6f02b5186c59f683e5085705d9b90cacfbc0", + "zh:f82d96b45983b3c73b78dced9e344512b7a9adb06e8c1e3e4f422605efbb756d", + "zh:fb523f787077270059a8f3ab52c0fc56257c0b3a06f0219be247c8b15ff0ca2a", ] } provider "registry.terraform.io/hashicorp/random" { - version = "3.7.1" - constraints = "3.7.1" + version = "3.7.2" + constraints = "3.7.2" hashes = [ - "h1:/qtweZW2sk0kBNiQM02RvBXmlVdI9oYqRMCyBZ8XA98=", - "h1:0XCd0Y9HVdDcEbwxF18e49HB+YRO+QQ24H3jDgmFPEE=", - "h1:2tp72AGbuQyxyDYaaoxJk1el0AQ81Gjy2RWlVxS4BKw=", - "h1:4zid4G8d3tiQThQGwOcFk+EAyvpSkq2bFKSQ1vzfmKU=", - "h1:FMjX0VzHGDmqmz1TNQsq1W2Cfn/H/IR81YmIotHh5uY=", - "h1:Jvr+8mqBJlxSOF8R862ZtezBlCb9pVwNMNc1sYsDeYg=", - "h1:aNMs1vK7xE3QjsSDTTWTwNeNsbSCgOW2valnbyc9TIw=", - "h1:g+mDU6wEJJOSI7/tPh0Tc4i2XjrXAfqKXuiVM9Di194=", - "h1:ji/JgTChmJj8a9PaXja2PiYJhR4iZBX34FDfxnqeZIA=", - "h1:t+sEwSvzYaq0d3FNuzdn7snQPZqmbn3q5uwF7TSDNXQ=", - "h1:t152MY0tQH4a8fLzTtEWx70ITd3azVOrFDn/pQblbto=", - "zh:3193b89b43bf5805493e290374cdda5132578de6535f8009547c8b5d7a351585", - "zh:3218320de4be943e5812ed3de995946056db86eb8d03aa3f074e0c7316599bef", - "zh:419861805a37fa443e7d63b69fb3279926ccf98a79d256c422d5d82f0f387d1d", - "zh:4df9bd9d839b8fc11a3b8098a604b9b46e2235eb65ef15f4432bde0e175f9ca6", - "zh:5814be3f9c9cc39d2955d6f083bae793050d75c572e70ca11ccceb5517ced6b1", - "zh:63c6548a06de1231c8ee5570e42ca09c4b3db336578ded39b938f2156f06dd2e", - "zh:697e434c6bdee0502cc3deb098263b8dcd63948e8a96d61722811628dce2eba1", + "h1:0hcNr59VEJbhZYwuDE/ysmyTS0evkfcLarlni+zATPM=", + "h1:356j/3XnXEKr9nyicLUufzoF4Yr6hRy481KIxRVpK0c=", + "h1:Def/iHM4HihJCIxQ8AYoxtoVL5lVlYx0V7bX91pxwgM=", + "h1:KG4NuIBl1mRWU0KD/BGfCi1YN/j3F7H4YgeeM7iSdNs=", + "h1:Lmv2TxyKKm9Vt4uxcPZHw1uf0Ax/yYizJlilbLSZN8E=", + "h1:hkKSY5xI4R1H4Yrg10HHbtOoxZif2dXa9HFPSbaVg5o=", + "h1:khu3pu9zeUMd6Ev+yH6cQ1S4+xpzx8wqwwFwADYGeRI=", + "h1:l35vnL76rzaOjhhJQiaWviW0noK2YzHeHN0/vIXJnHk=", + "h1:nWZjMYzp+nsqD3xslcihzq1Enxv33a7iC8/I8CTBcHA=", + "h1:pSMn/cwmyHB6V67lToGmCHfJFfzA711vV+E1cGP0LBg=", + "h1:w+NoF7vNMFS+qrU2XUEm0/wnuIZxPC733qOOfLVOdfk=", + "zh:14829603a32e4bc4d05062f059e545a91e27ff033756b48afbae6b3c835f508f", + "zh:1527fb07d9fea400d70e9e6eb4a2b918d5060d604749b6f1c361518e7da546dc", + "zh:1e86bcd7ebec85ba336b423ba1db046aeaa3c0e5f921039b3f1a6fc2f978feab", + "zh:24536dec8bde66753f4b4030b8f3ef43c196d69cccbea1c382d01b222478c7a3", + "zh:29f1786486759fad9b0ce4fdfbbfece9343ad47cd50119045075e05afe49d212", + "zh:4d701e978c2dd8604ba1ce962b047607701e65c078cb22e97171513e9e57491f", "zh:78d5eefdd9e494defcb3c68d282b8f96630502cac21d1ea161f53cfe9bb483b3", - "zh:a0b8e44927e6327852bbfdc9d408d802569367f1e22a95bcdd7181b1c3b07601", - "zh:b7d3af018683ef22794eea9c218bc72d7c35a2b3ede9233b69653b3c782ee436", - "zh:d63b911d618a6fe446c65bfc21e793a7663e934b2fef833d42d3ccd38dd8d68d", - "zh:fa985cd0b11e6d651f47cff3055f0a9fd085ec190b6dbe99bf5448174434cdea", + "zh:7b8434212eef0f8c83f5a90c6d76feaf850f6502b61b53c329e85b3b281cba34", + "zh:ac8a23c212258b7976e1621275e3af7099e7e4a3d4478cf8d5d2a27f3bc3e967", + "zh:b516ca74431f3df4c6cf90ddcdb4042c626e026317a33c53f0b445a3d93b720d", + "zh:dc76e4326aec2490c1600d6871a95e78f9050f9ce427c71707ea412a2f2f1a62", + "zh:eac7b63e86c749c7d48f527671c7aee5b4e26c10be6ad7232d6860167f99dbb0", ] } diff --git a/terraform/infrastructure/iam/aws/main.tf b/terraform/infrastructure/iam/aws/main.tf index 945f01a00..56b274d5f 100644 --- a/terraform/infrastructure/iam/aws/main.tf +++ b/terraform/infrastructure/iam/aws/main.tf @@ -2,11 +2,11 @@ terraform { required_providers { aws = { source = "hashicorp/aws" - version = "5.94.1" + version = "5.95.0" } random = { source = "hashicorp/random" - version = "3.7.1" + version = "3.7.2" } } } diff --git a/terraform/infrastructure/iam/gcp/.terraform.lock.hcl b/terraform/infrastructure/iam/gcp/.terraform.lock.hcl index 4753737a4..d3693a98b 100644 --- a/terraform/infrastructure/iam/gcp/.terraform.lock.hcl +++ b/terraform/infrastructure/iam/gcp/.terraform.lock.hcl @@ -2,32 +2,32 @@ # Manual edits may be lost in future updates. provider "registry.terraform.io/hashicorp/google" { - version = "6.29.0" - constraints = "6.29.0" + version = "6.31.0" + constraints = "6.31.0" hashes = [ - "h1:2j9Sb1fQ+94t40D6IJ+w0B7+4NLz/MmRBFa+dkML3nA=", - "h1:9wdjAnNx+K1l3gOzB683Neg5CII8ME5bo2AlqrS3uWQ=", - "h1:E+nXAl8krGxH+AtEYiyNannu+Viv1aoft1U0V/ZCSso=", - "h1:GwAhWJn/McO2ZpaIGPl7s63znCT2SNt1CRiE8YlawNQ=", - "h1:NkmMp6XYTXABLcIqTgIwRUgo/DzPCCPNrVpwYeWvd1U=", - "h1:U0Ca/+zZMMuea+r80qu9SRzWu8Waxny5aWGZXn+kVhc=", - "h1:khB3X7tH8vh6aLdxCWGkZtskwD06bucR2VWfFV1rxFg=", - "h1:t0wH2/d/Y91IZ8EFXjefYhi5H7xUpjx3DPnUFch4QwM=", - "h1:t4KEm4kHO0m50ffAUCM3MHbXX9fs8/WQfnTbIDnOKrE=", - "h1:vqURFeaR56i808INF5o+IC3anxqT+13dgIr3zzTmr9s=", - "h1:z0M8BOzrrFSo2x3MeRZGchFsCAqJIHJV8dj4IOI+CK8=", - "zh:01a501df2fb9ecbf0935b27e588bc7b6bcaf4ab0043747f4229c25e4ba47dadb", - "zh:056f8ab2b73755cf5a67228ab4a07882e76265fa25b07f2794d9939288164f48", - "zh:0dbdfa564f7db8a2e6f7e76437a9850b6101450120c08e87cf9846330736c0c6", - "zh:3c3e4ee801de22812bd07cb3d36b227f8057d7825998fb4d97051764a565b89b", - "zh:4e440eb4c60da9cd7d23b3b99be54c869472fd70006c39639a04b9a51248929c", - "zh:659490efd20b3e98e4166b2925baa18549d82e4c16751bc92baed0185d22d108", - "zh:9ae24b98a3a3346b8004c6b87e3b59decba2f64c7407e106263859c275105ef8", - "zh:c64cff9c17e302236bb9e0a6d5eff4c92540ce3947269f3db94e2b9a1b1a3f4e", - "zh:d2fd0aecbbbba463bcb0640f54c8df5e7a63918bdd44236dcd36dff33bb8de09", - "zh:f022316369ea676f5f9d11768b4c621abd3304c1e6d1f0c2361e4e2620c4b65d", + "h1:37jDrJfbBxQP2NVp1bwFrnh2JJvOusqAX4AQIdVheDw=", + "h1:5wON4dRQ/EGNj7SnFdHJbwZ5AUvRBnTI0S9MqTIcTQQ=", + "h1:6dqiR31kt8b6NnTEv24P02hTRKiTpCbKj9EewHjhQnQ=", + "h1:BIXjetIoq8O5bUh5rr6gWInLu0tLvsXJMa71TfUfvz8=", + "h1:Lx6Orp2Z7j+vvw6p+2y8FyzXEeFIshdwEh56jVGXqfk=", + "h1:WLPBPwWmIptudvmZonYyhfCJrHgcw89U8s5ZnikNtbM=", + "h1:YQ9TakehBet+sOpSRdNTnHiRYdZwGUj4015jy9rff4w=", + "h1:e3Ee2h+EWrozdCGgzm6Eq+b4gGe6grrGW37hcLk0S9k=", + "h1:mThKn3jf6kXsHUxevQLUGWD7wXBpopCLMKMI+FlNDow=", + "h1:zE7iocw7XB0EFkh/fOJf9FcPwtw/7JCDfQovev9mtP4=", + "h1:zf3pGXLZTJAe+VP54+hMsCtFF/Nl7MdWOmPMHBdm7eA=", + "zh:030dffef5b97ceb63dc6e48f14287e04ff3ebd468a570977b672fd267859756c", + "zh:2d569126f1fa6bca212c0199de856492f2f2bf55cea3fc2a5b128ad8183332db", + "zh:4ceb4fb9a3b57a696225dda1cb75cc6f211ced1b54fd62471ea8774d3c153be5", + "zh:4cfc47f6e7fe36497eafa81d90f0dbe871f637bc8f4deea3a07e23abdd4072de", + "zh:61c55ba8d382fa92716ff26ffa3ef7549386bd1dd2d27f52d169ebbdc40b2ccf", + "zh:7204c774e6b34651c410a333ec6217aa6976c6b88db0cdf58a486aaf4827d1e6", + "zh:82974bf17ea5036a2ae1b045459e7bc485372e3aeb2b7369b6e8b57b3b632aaa", + "zh:8da1cffc3ccc44e2bee2c8a9137cab9369e2e0ee7dc8a530672a37e25971d545", + "zh:c60ebe0e8a074bc679b13a9cf2a1b2e53daffa81eee41d68b9a2dcb9587a2eb9", + "zh:c7ae96c4f57bc1d197faac57913f52c5f5d3d5217bcb21f748cdb245037e0104", + "zh:e24b5bd749ade5089693514509ca95e3e188d9a1d0ee0fb28daf80fd945355ef", "zh:f569b65999264a9416862bca5cd2a6177d94ccb0424f3a4ef424428912b9cb3c", - "zh:feb7d4fdbebdfabac2aaa73376f754736ccf089fa90adf6388701f89801188e6", ] } diff --git a/terraform/infrastructure/iam/gcp/main.tf b/terraform/infrastructure/iam/gcp/main.tf index 79534472c..965bb52d3 100644 --- a/terraform/infrastructure/iam/gcp/main.tf +++ b/terraform/infrastructure/iam/gcp/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { google = { source = "hashicorp/google" - version = "6.29.0" + version = "6.31.0" } } } diff --git a/terraform/infrastructure/openstack/.terraform.lock.hcl b/terraform/infrastructure/openstack/.terraform.lock.hcl index 5a350813d..fdae001ed 100644 --- a/terraform/infrastructure/openstack/.terraform.lock.hcl +++ b/terraform/infrastructure/openstack/.terraform.lock.hcl @@ -2,62 +2,68 @@ # Manual edits may be lost in future updates. provider "registry.terraform.io/hashicorp/random" { - version = "3.7.1" - constraints = "3.7.1" + version = "3.7.2" + constraints = "3.7.2" hashes = [ - "h1:/qtweZW2sk0kBNiQM02RvBXmlVdI9oYqRMCyBZ8XA98=", - "h1:0XCd0Y9HVdDcEbwxF18e49HB+YRO+QQ24H3jDgmFPEE=", - "h1:Jvr+8mqBJlxSOF8R862ZtezBlCb9pVwNMNc1sYsDeYg=", - "h1:ji/JgTChmJj8a9PaXja2PiYJhR4iZBX34FDfxnqeZIA=", - "h1:t152MY0tQH4a8fLzTtEWx70ITd3azVOrFDn/pQblbto=", - "zh:3193b89b43bf5805493e290374cdda5132578de6535f8009547c8b5d7a351585", - "zh:3218320de4be943e5812ed3de995946056db86eb8d03aa3f074e0c7316599bef", - "zh:419861805a37fa443e7d63b69fb3279926ccf98a79d256c422d5d82f0f387d1d", - "zh:4df9bd9d839b8fc11a3b8098a604b9b46e2235eb65ef15f4432bde0e175f9ca6", - "zh:5814be3f9c9cc39d2955d6f083bae793050d75c572e70ca11ccceb5517ced6b1", - "zh:63c6548a06de1231c8ee5570e42ca09c4b3db336578ded39b938f2156f06dd2e", - "zh:697e434c6bdee0502cc3deb098263b8dcd63948e8a96d61722811628dce2eba1", + "h1:0hcNr59VEJbhZYwuDE/ysmyTS0evkfcLarlni+zATPM=", + "h1:356j/3XnXEKr9nyicLUufzoF4Yr6hRy481KIxRVpK0c=", + "h1:Def/iHM4HihJCIxQ8AYoxtoVL5lVlYx0V7bX91pxwgM=", + "h1:KG4NuIBl1mRWU0KD/BGfCi1YN/j3F7H4YgeeM7iSdNs=", + "h1:Lmv2TxyKKm9Vt4uxcPZHw1uf0Ax/yYizJlilbLSZN8E=", + "h1:hkKSY5xI4R1H4Yrg10HHbtOoxZif2dXa9HFPSbaVg5o=", + "h1:khu3pu9zeUMd6Ev+yH6cQ1S4+xpzx8wqwwFwADYGeRI=", + "h1:l35vnL76rzaOjhhJQiaWviW0noK2YzHeHN0/vIXJnHk=", + "h1:nWZjMYzp+nsqD3xslcihzq1Enxv33a7iC8/I8CTBcHA=", + "h1:pSMn/cwmyHB6V67lToGmCHfJFfzA711vV+E1cGP0LBg=", + "h1:w+NoF7vNMFS+qrU2XUEm0/wnuIZxPC733qOOfLVOdfk=", + "zh:14829603a32e4bc4d05062f059e545a91e27ff033756b48afbae6b3c835f508f", + "zh:1527fb07d9fea400d70e9e6eb4a2b918d5060d604749b6f1c361518e7da546dc", + "zh:1e86bcd7ebec85ba336b423ba1db046aeaa3c0e5f921039b3f1a6fc2f978feab", + "zh:24536dec8bde66753f4b4030b8f3ef43c196d69cccbea1c382d01b222478c7a3", + "zh:29f1786486759fad9b0ce4fdfbbfece9343ad47cd50119045075e05afe49d212", + "zh:4d701e978c2dd8604ba1ce962b047607701e65c078cb22e97171513e9e57491f", "zh:78d5eefdd9e494defcb3c68d282b8f96630502cac21d1ea161f53cfe9bb483b3", - "zh:a0b8e44927e6327852bbfdc9d408d802569367f1e22a95bcdd7181b1c3b07601", - "zh:b7d3af018683ef22794eea9c218bc72d7c35a2b3ede9233b69653b3c782ee436", - "zh:d63b911d618a6fe446c65bfc21e793a7663e934b2fef833d42d3ccd38dd8d68d", - "zh:fa985cd0b11e6d651f47cff3055f0a9fd085ec190b6dbe99bf5448174434cdea", + "zh:7b8434212eef0f8c83f5a90c6d76feaf850f6502b61b53c329e85b3b281cba34", + "zh:ac8a23c212258b7976e1621275e3af7099e7e4a3d4478cf8d5d2a27f3bc3e967", + "zh:b516ca74431f3df4c6cf90ddcdb4042c626e026317a33c53f0b445a3d93b720d", + "zh:dc76e4326aec2490c1600d6871a95e78f9050f9ce427c71707ea412a2f2f1a62", + "zh:eac7b63e86c749c7d48f527671c7aee5b4e26c10be6ad7232d6860167f99dbb0", ] } provider "registry.terraform.io/stackitcloud/stackit" { - version = "0.49.0" - constraints = "0.49.0" + version = "0.50.0" + constraints = "0.50.0" hashes = [ - "h1:/s7eJQ2kwEhS4JrTVoig4BF+9M1ZU4etBP4MQevv5mo=", - "h1:5m1Q6Ik4BQOmmXRboxAWnyUoiU/44AQqx1o8mYNG4Tc=", - "h1:6WK69n5NcE/8wL64PY4ruuS6Rc0vGW/Vw2321W37nWY=", - "h1:9AzHxIXcoqJpdo5ZNUrUNYbgUrtZ5e25IAtX9sELu64=", - "h1:LjK6VuFY0KkqIr8WYprixTUbSvSCUdhCksr/1a3O7lE=", - "h1:XP/frfawbZEWXogeWYVcwPSV8bgiVKvpxXfD2mIP/g8=", - "h1:cPTeaaafAwwRJ71rx2VcJXKuJjQvpm5xmvQ+UOw8VU8=", - "h1:eBVz6TwhCFY7MyF6vN/sJz2nad34frDSyxfB5IjCjWc=", - "h1:etIxS6rIk0Q6me1wSoKVCgISsBgqQp2RDg+Twx6CKy4=", - "h1:ijPAUB1QoRTg8NqLhOvJbj//0K/ws0P5ohDZa9dW/zA=", - "h1:l80vMcTSgpeJMpfzTTp6uk44ETgF4qJhx/v5TxjXu/k=", - "h1:l9nUked91YVufzQZKYBJ3Y/VvXn2dvKQH3W7o7VLtR4=", - "h1:lo6TN1J+eRJPclLsB/y2smBJH5Qcxa5/Dlr8lKpQFxw=", - "h1:nFNlbrQJeZSYlpTX/dhFCaFzWPA5Ibrowzjy4MaxyC0=", - "zh:06c69806e42c59f37cfa3509c2f421a1918432fcb73ca02f9660e1850b08ac88", - "zh:0cb122d4ae2ad6f5eac213eae3892ad7200b06e1ceacbfab358596e6184dc6b4", + "h1:+nxd0zpfc9FzjlWbOqhnjK1NUN1BBivHG5Dk1oCXJmc=", + "h1:2mqbDIA2B6g+TswUk0kI0IqqA7K3pH4L00pyvslqpnc=", + "h1:6dj8W79RUBSJ9wvp+jRa47nWpmKS5B3sqZ6vvi4lpPA=", + "h1:Grtnz3cvRDpgNjg8Q/FtpJEu+lyVxvX/REsnR6q46Po=", + "h1:SqOlaf5eXgXSzoqk3D1KXOSG7hJbtJD6MQarUJgzn2w=", + "h1:TiHjMD5U8HWlHOGIIKNaSdhbrh6kxiYYUseB3HGgVtw=", + "h1:YXQK4Vox0nzIw6u6TTSFLZUqUz+mNHNATh+POwMiI1w=", + "h1:ZScVuJEiFEkTgmS9UY2y2DdUOH9KkElRxD5u8aDR0Ms=", + "h1:eROOJ6WhLgbg8Hhh93Di6wJCBEypA+ZX655mHouj2W8=", + "h1:ew63OYuFkEWEJc22UmbXKh2mPhg+pwbyt+34vDUcTpw=", + "h1:fiMDB8xpgW98hJX2Zf/NNV2miK66po1I4/bHY8UmQ30=", + "h1:iOOaM9RM/fiVhr5p4HWblIDnDrQ6CziirI9ErA5FCTA=", + "h1:uU8/DLvW8tEty0PI2sUMem43IDNSrncHuLaXaEYdGFk=", + "h1:uX+O/0ITKWlfSU5DcZP5p7ofjht/Pyfyf10lpMxsbY0=", "zh:0dde99e7b343fa01f8eefc378171fb8621bedb20f59157d6cc8e3d46c738105f", - "zh:227540ecef8bd0c4bae0b858774919449a64cd07741a2fc8f5a14b869593ceae", - "zh:2949164716a61f98afcf4539c5b32b0f0c2a334b55ac56d4f8a168badd0aa564", - "zh:339ff27ee01b8336184f30a29982cdfe032ebb068e1edbc861a565992c665573", - "zh:37896bbd2269426530c4c5e1b82ba20b098636e8884019e23b155d548d074be7", - "zh:969c2c2fe89db496a34d58b9f07e736804cb6dfa94432bef70b663a5f5c62e54", - "zh:ab164d1d4db8cf692862825566c1e644b6762ae4c2109becd3d348140b840f03", - "zh:ad7d12a8ffa02e6081a349e7edb0c46d84d00541f118d86066efccbe02ac3d59", - "zh:ae1362a0ac1cc816be5fc7c3ed4bbc4ee210d27df30026ceb5ecfe7bd610706f", - "zh:b62796fc8c4182242257ef206e5f2f06bb5c2d02c1f87cffec4508c98aa63cea", - "zh:d28bd026adba37dbb2ed2554cb1bf69da49cf48d4d1e2938353d0323cfb0bdf2", - "zh:dbfbf093716bda804294ced9f7132cac316638a2ae84aaaa959fc60a61bf8b67", - "zh:f2322da7d892b0e12ea5c8871b5bfcfb7b259ad96a63124a680111139428ec94", + "zh:219d678bc471b3f5030724dcdde6be3f3fa63e911b7c7a0f446b0a0b4e5f48e7", + "zh:4cd09155a09e320b0b68db4ba2971564f3d147c19ad991d6b7e731e26034d91c", + "zh:507c1e24432f0d455ac8b628c37ee20db62e89a6e85508568c2820ba52404786", + "zh:5aa10bfc4baad277a2bc746c83fca19911bb95a5e8821dd46f333bc621cbb453", + "zh:67b55ad1135ca12997b0928cb67973b11ea196299e0cf66e3e0145faec762644", + "zh:6d1d108edcd6794a8839d849e6ea48699875e22afeea7edd38bee3dd56dea7e8", + "zh:7473c28b3781c0d00294d985bd067e753a419ca8e379f91a8f6f2ce4663566ee", + "zh:8d234b24734f950f986322a5f084ca23bfd9b3d9fb7742b54404171cfcabc99e", + "zh:af0804ea918648600cc6300dffce8a7b9115d30dc88db10f962b8e596d1465e1", + "zh:b557940dc6387dc4cce8b100981ccaadac6bc4e6b50c566baf148d67939f8f2e", + "zh:d477f77ce6f807d60069c1efcfa20607088ae7ab91d22805331a7634d84c2d1c", + "zh:d95086e2338ceed511e798a2acc6d5cefdfff1a14f7b47b2d29b4ebc36b77a3a", + "zh:ea0d8d5c9cf7d5871a54dd4786c378dfd9d10416f3c4d0ea4776465e8c562e10", + "zh:f96af7b89dc99745f6a22c0ca2aedb18e10273251b8cbac9e2b1011c68c3c3f9", ] } diff --git a/terraform/infrastructure/openstack/main.tf b/terraform/infrastructure/openstack/main.tf index 3e6f733e1..91e812554 100644 --- a/terraform/infrastructure/openstack/main.tf +++ b/terraform/infrastructure/openstack/main.tf @@ -7,12 +7,12 @@ terraform { stackit = { source = "stackitcloud/stackit" - version = "0.49.0" + version = "0.50.0" } random = { source = "hashicorp/random" - version = "3.7.1" + version = "3.7.2" } } } diff --git a/terraform/infrastructure/openstack/modules/stackit_loadbalancer/main.tf b/terraform/infrastructure/openstack/modules/stackit_loadbalancer/main.tf index 058614a1b..6532b2f27 100644 --- a/terraform/infrastructure/openstack/modules/stackit_loadbalancer/main.tf +++ b/terraform/infrastructure/openstack/modules/stackit_loadbalancer/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { stackit = { source = "stackitcloud/stackit" - version = "0.49.0" + version = "0.50.0" } } } diff --git a/terraform/infrastructure/qemu/.terraform.lock.hcl b/terraform/infrastructure/qemu/.terraform.lock.hcl index 25c91852f..da68ce2c4 100644 --- a/terraform/infrastructure/qemu/.terraform.lock.hcl +++ b/terraform/infrastructure/qemu/.terraform.lock.hcl @@ -37,57 +37,57 @@ provider "registry.terraform.io/dmacvicar/libvirt" { } provider "registry.terraform.io/hashicorp/random" { - version = "3.7.1" - constraints = "3.7.1" + version = "3.7.2" + constraints = "3.7.2" hashes = [ - "h1:/qtweZW2sk0kBNiQM02RvBXmlVdI9oYqRMCyBZ8XA98=", - "h1:0XCd0Y9HVdDcEbwxF18e49HB+YRO+QQ24H3jDgmFPEE=", - "h1:2tp72AGbuQyxyDYaaoxJk1el0AQ81Gjy2RWlVxS4BKw=", - "h1:4zid4G8d3tiQThQGwOcFk+EAyvpSkq2bFKSQ1vzfmKU=", - "h1:FMjX0VzHGDmqmz1TNQsq1W2Cfn/H/IR81YmIotHh5uY=", - "h1:Jvr+8mqBJlxSOF8R862ZtezBlCb9pVwNMNc1sYsDeYg=", - "h1:aNMs1vK7xE3QjsSDTTWTwNeNsbSCgOW2valnbyc9TIw=", - "h1:g+mDU6wEJJOSI7/tPh0Tc4i2XjrXAfqKXuiVM9Di194=", - "h1:ji/JgTChmJj8a9PaXja2PiYJhR4iZBX34FDfxnqeZIA=", - "h1:t+sEwSvzYaq0d3FNuzdn7snQPZqmbn3q5uwF7TSDNXQ=", - "h1:t152MY0tQH4a8fLzTtEWx70ITd3azVOrFDn/pQblbto=", - "zh:3193b89b43bf5805493e290374cdda5132578de6535f8009547c8b5d7a351585", - "zh:3218320de4be943e5812ed3de995946056db86eb8d03aa3f074e0c7316599bef", - "zh:419861805a37fa443e7d63b69fb3279926ccf98a79d256c422d5d82f0f387d1d", - "zh:4df9bd9d839b8fc11a3b8098a604b9b46e2235eb65ef15f4432bde0e175f9ca6", - "zh:5814be3f9c9cc39d2955d6f083bae793050d75c572e70ca11ccceb5517ced6b1", - "zh:63c6548a06de1231c8ee5570e42ca09c4b3db336578ded39b938f2156f06dd2e", - "zh:697e434c6bdee0502cc3deb098263b8dcd63948e8a96d61722811628dce2eba1", + "h1:0hcNr59VEJbhZYwuDE/ysmyTS0evkfcLarlni+zATPM=", + "h1:356j/3XnXEKr9nyicLUufzoF4Yr6hRy481KIxRVpK0c=", + "h1:Def/iHM4HihJCIxQ8AYoxtoVL5lVlYx0V7bX91pxwgM=", + "h1:KG4NuIBl1mRWU0KD/BGfCi1YN/j3F7H4YgeeM7iSdNs=", + "h1:Lmv2TxyKKm9Vt4uxcPZHw1uf0Ax/yYizJlilbLSZN8E=", + "h1:hkKSY5xI4R1H4Yrg10HHbtOoxZif2dXa9HFPSbaVg5o=", + "h1:khu3pu9zeUMd6Ev+yH6cQ1S4+xpzx8wqwwFwADYGeRI=", + "h1:l35vnL76rzaOjhhJQiaWviW0noK2YzHeHN0/vIXJnHk=", + "h1:nWZjMYzp+nsqD3xslcihzq1Enxv33a7iC8/I8CTBcHA=", + "h1:pSMn/cwmyHB6V67lToGmCHfJFfzA711vV+E1cGP0LBg=", + "h1:w+NoF7vNMFS+qrU2XUEm0/wnuIZxPC733qOOfLVOdfk=", + "zh:14829603a32e4bc4d05062f059e545a91e27ff033756b48afbae6b3c835f508f", + "zh:1527fb07d9fea400d70e9e6eb4a2b918d5060d604749b6f1c361518e7da546dc", + "zh:1e86bcd7ebec85ba336b423ba1db046aeaa3c0e5f921039b3f1a6fc2f978feab", + "zh:24536dec8bde66753f4b4030b8f3ef43c196d69cccbea1c382d01b222478c7a3", + "zh:29f1786486759fad9b0ce4fdfbbfece9343ad47cd50119045075e05afe49d212", + "zh:4d701e978c2dd8604ba1ce962b047607701e65c078cb22e97171513e9e57491f", "zh:78d5eefdd9e494defcb3c68d282b8f96630502cac21d1ea161f53cfe9bb483b3", - "zh:a0b8e44927e6327852bbfdc9d408d802569367f1e22a95bcdd7181b1c3b07601", - "zh:b7d3af018683ef22794eea9c218bc72d7c35a2b3ede9233b69653b3c782ee436", - "zh:d63b911d618a6fe446c65bfc21e793a7663e934b2fef833d42d3ccd38dd8d68d", - "zh:fa985cd0b11e6d651f47cff3055f0a9fd085ec190b6dbe99bf5448174434cdea", + "zh:7b8434212eef0f8c83f5a90c6d76feaf850f6502b61b53c329e85b3b281cba34", + "zh:ac8a23c212258b7976e1621275e3af7099e7e4a3d4478cf8d5d2a27f3bc3e967", + "zh:b516ca74431f3df4c6cf90ddcdb4042c626e026317a33c53f0b445a3d93b720d", + "zh:dc76e4326aec2490c1600d6871a95e78f9050f9ce427c71707ea412a2f2f1a62", + "zh:eac7b63e86c749c7d48f527671c7aee5b4e26c10be6ad7232d6860167f99dbb0", ] } provider "registry.terraform.io/kreuzwerker/docker" { - version = "3.0.2" - constraints = "3.0.2" + version = "3.3.0" + constraints = "3.3.0" hashes = [ - "h1:DcRxJArfX6EiATluWeCBW7HoD6usz9fMoTK2U3dmyPk=", - "h1:XjdpVL61KtTsuPE8swok3GY8A+Bu3TZs8T2DOEpyiXo=", - "h1:cT2ccWOtlfKYBUE60/v2/4Q6Stk1KYTNnhxSck+VPlU=", - "h1:os8pBi4rbtFJJtzNWlcGhOVsz5V9UPJvo+L0wNQFYE8=", - "h1:tMiDR/3WQYAwE4Z7Xr1iqJN23z2GNr1ARis9yutVgjw=", - "zh:15b0a2b2b563d8d40f62f83057d91acb02cd0096f207488d8b4298a59203d64f", - "zh:23d919de139f7cd5ebfd2ff1b94e6d9913f0977fcfc2ca02e1573be53e269f95", - "zh:38081b3fe317c7e9555b2aaad325ad3fa516a886d2dfa8605ae6a809c1072138", - "zh:4a9c5065b178082f79ad8160243369c185214d874ff5048556d48d3edd03c4da", - "zh:5438ef6afe057945f28bce43d76c4401254073de01a774760169ac1058830ac2", - "zh:60b7fadc287166e5c9873dfe53a7976d98244979e0ab66428ea0dea1ebf33e06", - "zh:61c5ec1cb94e4c4a4fb1e4a24576d5f39a955f09afb17dab982de62b70a9bdd1", - "zh:a38fe9016ace5f911ab00c88e64b156ebbbbfb72a51a44da3c13d442cd214710", - "zh:c2c4d2b1fd9ebb291c57f524b3bf9d0994ff3e815c0cd9c9bcb87166dc687005", - "zh:d567bb8ce483ab2cf0602e07eae57027a1a53994aba470fa76095912a505533d", - "zh:e83bf05ab6a19dd8c43547ce9a8a511f8c331a124d11ac64687c764ab9d5a792", - "zh:e90c934b5cd65516fbcc454c89a150bfa726e7cf1fe749790c7480bbeb19d387", - "zh:f05f167d2eaf913045d8e7b88c13757e3cf595dd5cd333057fdafc7c4b7fed62", - "zh:fcc9c1cea5ce85e8bcb593862e699a881bd36dffd29e2e367f82d15368659c3d", + "h1:Shj2aIWKcuEoq/Zp+M7FF/CoKaqyFo0reNk8qssIOck=", + "h1:euoAPO6NJDr/fiqOP2DF9MgjhnT/niSZVFrVlJ1PRiU=", + "h1:k8GXhkwSf8Z9v3qtTly08YG0g34Ba/z/91NG7c96HI8=", + "h1:nYVos7Yi+uJj43VWjikg6OjxuFT9MJsEHFN+1NPJZ1Y=", + "h1:vjqJBJhmppkQDLuvSXru3vNxvyw5Dzj02OHU7Ok9UC4=", + "zh:020dafbe84cb7cf2a6bc8a331a45197cf3f09ac9ba1386e8d40aa422144dfd1e", + "zh:0927127ae0b51232b9d2fa24242786b506fcbb51cebf19a3ed3bc4ab27a0ab77", + "zh:111dcf8617aac71f28d9bdda9c201f0a1c9bc12038944caefd0e200e7efea5eb", + "zh:12f431b2485f60477ebf68529de6d019425a16580a84f19369e164be8f309e46", + "zh:16be6f3841e7e1c38e254be0ecdf5cb890bf270c3a14cf0ed507d66519de860f", + "zh:31a10c5f99902c4a635f79d25d24c3fe0ebc5808776f9f469e979dabaae02e63", + "zh:4a5561a8c45e4171f820d165828bee1313b358a459202efba20a9ee3fda53596", + "zh:73157332ceb69175562407bc87a8150f29c68bfa1e96e8542ae4449f281f0837", + "zh:7a376f0dfd81df8612eb829532802e23a84cd9b2905cfc4ed0e38eb81b92400f", + "zh:89c3b4f2cb51738111ea49a1ec7c157dfadcd4589619eca4c71e6070deadffc4", + "zh:b2ad62be31ff5aafecdef76db75dc6521ff2374ef3c54cac5edd0c121488eaba", + "zh:bf2eb6659c5db904bad46e0c34f37c2e37eb0cac8294e5831ab091c8b5909d35", + "zh:c97c63343d0368171f9090b724f37e6b24cf061e91db0b4bf008b8e00974544a", + "zh:cf34a8b522bb8c4857dc9b728dbd931729f58b62b5f68a756e16f77cf0e5155e", ] } diff --git a/terraform/infrastructure/qemu/main.tf b/terraform/infrastructure/qemu/main.tf index db9ccaaa5..beabd7fe4 100644 --- a/terraform/infrastructure/qemu/main.tf +++ b/terraform/infrastructure/qemu/main.tf @@ -6,11 +6,11 @@ terraform { } docker = { source = "kreuzwerker/docker" - version = "3.0.2" + version = "3.3.0" } random = { source = "hashicorp/random" - version = "3.7.1" + version = "3.7.2" } } } diff --git a/terraform/infrastructure/qemu/modules/instance_group/main.tf b/terraform/infrastructure/qemu/modules/instance_group/main.tf index 61c9b1d0a..00c83c6df 100644 --- a/terraform/infrastructure/qemu/modules/instance_group/main.tf +++ b/terraform/infrastructure/qemu/modules/instance_group/main.tf @@ -6,7 +6,7 @@ terraform { } random = { source = "hashicorp/random" - version = "3.7.1" + version = "3.7.2" } } } From 01164025ec3c5da0ef137178cbf837c30342f653 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 23 Apr 2025 16:35:26 +0200 Subject: [PATCH 233/311] deps: update K8s constrained Azure versions (#3780) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- internal/versions/versions.go | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/internal/versions/versions.go b/internal/versions/versions.go index c414e3cb2..8a6540a86 100644 --- a/internal/versions/versions.go +++ b/internal/versions/versions.go @@ -252,10 +252,10 @@ var VersionConfigs = map[ValidK8sVersion]KubernetesVersion{ CloudControllerManagerImageAWS: "registry.k8s.io/provider-aws/cloud-controller-manager:v1.29.8@sha256:3f8e7be967f76b328123d53846c21dcd930b60094f9f4abd8bf5ab0fe108e6e4", // renovate:container // CloudControllerManagerImageAzure is the CCM image used on Azure. // Check for newer versions at https://github.com/kubernetes-sigs/cloud-provider-azure/blob/master/README.md. - CloudControllerManagerImageAzure: "mcr.microsoft.com/oss/kubernetes/azure-cloud-controller-manager:v1.29.13@sha256:aa3d83f3f1b8dc22a9b2d4e35d417292bffc6eac2c6a2e22a04ebbd6561148b2", // renovate:container + CloudControllerManagerImageAzure: "mcr.microsoft.com/oss/kubernetes/azure-cloud-controller-manager:v1.29.14@sha256:42c22d1f403770565d5933bf41bbf895c93d98f5fedd85decd24a31a8a7d6daf", // renovate:container // CloudNodeManagerImageAzure is the cloud-node-manager image used on Azure. // Check for newer versions at https://github.com/kubernetes-sigs/cloud-provider-azure/blob/master/README.md. - CloudNodeManagerImageAzure: "mcr.microsoft.com/oss/kubernetes/azure-cloud-node-manager:v1.29.13@sha256:fd8aa37ecaf8e8075555be84a98aff28527ffddbcd084f4e3b3cd31c80748253", // renovate:container + CloudNodeManagerImageAzure: "mcr.microsoft.com/oss/kubernetes/azure-cloud-node-manager:v1.29.14@sha256:d275905bfdb7d777e2baef64cf47165378a87a7a61bcc1106ffca2857c919047", // renovate:container // CloudControllerManagerImageGCP is the CCM image used on GCP. CloudControllerManagerImageGCP: "ghcr.io/edgelesssys/cloud-provider-gcp:v29.5.1@sha256:ebbc6f5755725b6c2c81ca1d1580e2feba83572c41608b739c50f85b2e5de936", // renovate:container // CloudControllerManagerImageOpenStack is the CCM image used on OpenStack. @@ -319,10 +319,10 @@ var VersionConfigs = map[ValidK8sVersion]KubernetesVersion{ CloudControllerManagerImageAWS: "registry.k8s.io/provider-aws/cloud-controller-manager:v1.30.8@sha256:f4e82b924e967656d8df9f467c9c1915509e94e228b53840a7f9f2367e1ba9f5", // renovate:container // CloudControllerManagerImageAzure is the CCM image used on Azure. // Check for newer versions at https://github.com/kubernetes-sigs/cloud-provider-azure/blob/master/README.md. - CloudControllerManagerImageAzure: "mcr.microsoft.com/oss/kubernetes/azure-cloud-controller-manager:v1.30.10@sha256:98912ffdf1264738fd07a19e41e88c74b77c81ab40e1383a588e7f2a6ec3469d", // renovate:container + CloudControllerManagerImageAzure: "mcr.microsoft.com/oss/kubernetes/azure-cloud-controller-manager:v1.30.11@sha256:79ae741641e0ced9e2a1d841c6f9bd63c2bbf263f18e8a3802f7c5149e8ea4cb", // renovate:container // CloudNodeManagerImageAzure is the cloud-node-manager image used on Azure. // Check for newer versions at https://github.com/kubernetes-sigs/cloud-provider-azure/blob/master/README.md. - CloudNodeManagerImageAzure: "mcr.microsoft.com/oss/kubernetes/azure-cloud-node-manager:v1.30.10@sha256:4cb8c3e4e79e166f0dbbb76bdd37c6dce931ac4cb63f32aea1327b22fb5317f1", // renovate:container + CloudNodeManagerImageAzure: "mcr.microsoft.com/oss/kubernetes/azure-cloud-node-manager:v1.30.11@sha256:5eed23f5b1820cb00f1a628c8aa69b57098f4c70950a192c84696a0bc10f3d96", // renovate:container // CloudControllerManagerImageGCP is the CCM image used on GCP. CloudControllerManagerImageGCP: "ghcr.io/edgelesssys/cloud-provider-gcp:v30.1.4@sha256:0c3695a18d3825492196facb092e5fe56e466fa8517cde5a206fe21630c1da13", // renovate:container // CloudControllerManagerImageOpenStack is the CCM image used on OpenStack. @@ -386,10 +386,10 @@ var VersionConfigs = map[ValidK8sVersion]KubernetesVersion{ CloudControllerManagerImageAWS: "registry.k8s.io/provider-aws/cloud-controller-manager:v1.31.5@sha256:6f94a695828de888c8efc57e3243db9e788709767f687a6a8cb07c2e42158862", // renovate:container // CloudControllerManagerImageAzure is the CCM image used on Azure. // Check for newer versions at https://github.com/kubernetes-sigs/cloud-provider-azure/blob/master/README.md. - CloudControllerManagerImageAzure: "mcr.microsoft.com/oss/kubernetes/azure-cloud-controller-manager:v1.31.4@sha256:839d5b203c3c48eeee1c30002dfae7e481ba650f103c970f2b4b734065bff1f6", // renovate:container + CloudControllerManagerImageAzure: "mcr.microsoft.com/oss/kubernetes/azure-cloud-controller-manager:v1.31.5@sha256:8bb9399cf6c1c4ccf71962d4c704fa0795838b4b4256ef3565fe3370db7eff14", // renovate:container // CloudNodeManagerImageAzure is the cloud-node-manager image used on Azure. // Check for newer versions at https://github.com/kubernetes-sigs/cloud-provider-azure/blob/master/README.md. - CloudNodeManagerImageAzure: "mcr.microsoft.com/oss/kubernetes/azure-cloud-node-manager:v1.31.4@sha256:8a1bd6d6eb559ecb814a8745e3fcdbc1ace360398d332caeac3f35fb1bf842dd", // renovate:container + CloudNodeManagerImageAzure: "mcr.microsoft.com/oss/kubernetes/azure-cloud-node-manager:v1.31.5@sha256:476eda4f625b2d6069b6da6b0e70ab6960b0e89a9d19198051b10499e2794c4e", // renovate:container // CloudControllerManagerImageGCP is the CCM image used on GCP. CloudControllerManagerImageGCP: "ghcr.io/edgelesssys/cloud-provider-gcp:v30.1.4@sha256:0c3695a18d3825492196facb092e5fe56e466fa8517cde5a206fe21630c1da13", // renovate:container // CloudControllerManagerImageOpenStack is the CCM image used on OpenStack. From ea798959e7162417dafc0734123b876fe1b09060 Mon Sep 17 00:00:00 2001 From: edgelessci <71088502+edgelessci@users.noreply.github.com> Date: Fri, 25 Apr 2025 09:04:30 +0200 Subject: [PATCH 234/311] image: update measurements and image version (#3782) Co-authored-by: edgelessci --- .../measurements/measurements_enterprise.go | 16 ++++++++-------- internal/config/image_enterprise.go | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/internal/attestation/measurements/measurements_enterprise.go b/internal/attestation/measurements/measurements_enterprise.go index 20f59ead4..eca8ca5ed 100644 --- a/internal/attestation/measurements/measurements_enterprise.go +++ b/internal/attestation/measurements/measurements_enterprise.go @@ -19,14 +19,14 @@ package measurements // revive:disable:var-naming var ( - aws_AWSNitroTPM = M{0: {Expected: []byte{0x73, 0x7f, 0x76, 0x7a, 0x12, 0xf5, 0x4e, 0x70, 0xee, 0xcb, 0xc8, 0x68, 0x40, 0x11, 0x32, 0x3a, 0xe2, 0xfe, 0x2d, 0xd9, 0xf9, 0x07, 0x85, 0x57, 0x79, 0x69, 0xd7, 0xa2, 0x01, 0x3e, 0x8c, 0x12}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xf4, 0x81, 0x50, 0x35, 0x97, 0x40, 0x48, 0x6a, 0x9f, 0xd9, 0x2c, 0xcc, 0xf8, 0x45, 0xfc, 0x06, 0x2f, 0x57, 0x67, 0x46, 0x8c, 0x9d, 0xa4, 0xae, 0xda, 0xc4, 0x47, 0x5c, 0x06, 0x52, 0x0a, 0x40}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xa3, 0x0a, 0x6f, 0x79, 0x46, 0x4e, 0x40, 0x31, 0x5c, 0xbe, 0x28, 0x26, 0xac, 0x1e, 0x9a, 0x16, 0x9d, 0x7e, 0x56, 0x86, 0x7c, 0x2c, 0xaf, 0x7e, 0x09, 0xc1, 0xd6, 0x54, 0x48, 0x31, 0x0c, 0x5a}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x83, 0xb1, 0xb8, 0xff, 0x82, 0x39, 0x1b, 0x79, 0x07, 0x3f, 0xc5, 0xfe, 0x3f, 0x16, 0x0b, 0x72, 0xc2, 0xa3, 0xae, 0xfd, 0xeb, 0xc9, 0x1e, 0x48, 0xdf, 0x10, 0x23, 0xc4, 0xde, 0x61, 0xa1, 0xa1}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - aws_AWSSEVSNP = M{0: {Expected: []byte{0xd6, 0xdf, 0x85, 0x53, 0x58, 0xf5, 0xb1, 0x0f, 0x06, 0xf0, 0xfa, 0xb3, 0xf4, 0x08, 0xad, 0x26, 0xcd, 0x16, 0x5a, 0x29, 0x49, 0xba, 0xd6, 0x9e, 0x2c, 0xc7, 0x56, 0x92, 0x52, 0x9e, 0x66, 0x2a}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x78, 0xea, 0xe8, 0x90, 0xcc, 0x34, 0x06, 0xdf, 0xeb, 0xf3, 0x22, 0xd3, 0xf0, 0x5d, 0xe6, 0x35, 0xcd, 0xd6, 0x94, 0xb8, 0xe8, 0x5a, 0xba, 0x61, 0x68, 0x94, 0xaf, 0x91, 0x54, 0x00, 0x99, 0xc3}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x66, 0x3b, 0x13, 0xb7, 0x0c, 0xd7, 0x8f, 0x05, 0x24, 0xe4, 0x5a, 0x29, 0xae, 0xc1, 0x50, 0x24, 0xa5, 0xcc, 0xfb, 0x59, 0xed, 0x65, 0x22, 0xb8, 0x1f, 0x87, 0x58, 0x9f, 0x30, 0xd2, 0xae, 0xc0}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xd7, 0x29, 0x5a, 0xab, 0x79, 0xa9, 0xc1, 0x9a, 0xfb, 0x6f, 0xff, 0x09, 0x14, 0x09, 0x9a, 0xaf, 0x6e, 0x3d, 0xd9, 0x1d, 0x5e, 0xe4, 0xfb, 0x80, 0x15, 0xc1, 0xf9, 0xaf, 0x36, 0x00, 0x49, 0xa4}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - azure_AzureSEVSNP = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x30, 0x28, 0x87, 0xd9, 0xc5, 0x4a, 0x4a, 0x90, 0x06, 0x26, 0x09, 0x6b, 0xa8, 0x64, 0x1d, 0x0e, 0x36, 0x52, 0x43, 0x6e, 0x99, 0x63, 0x63, 0x18, 0xe9, 0xed, 0xe0, 0xc2, 0x3c, 0x3e, 0xb9, 0x4a}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x2e, 0x49, 0x93, 0x1c, 0x95, 0x7e, 0x85, 0x73, 0x7f, 0xe2, 0x5d, 0x58, 0x57, 0x3a, 0xa1, 0x4c, 0x31, 0x83, 0x8f, 0x0b, 0xd0, 0x23, 0x42, 0x15, 0xd0, 0x23, 0x5a, 0x91, 0x0f, 0xd5, 0x27, 0x54}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xb6, 0xa1, 0xc8, 0x8f, 0xc8, 0xbf, 0x79, 0xe7, 0xcc, 0x24, 0xe8, 0xf4, 0xbf, 0x61, 0xbd, 0xff, 0x40, 0x2f, 0x3b, 0x25, 0x89, 0x3b, 0x28, 0xb7, 0xa7, 0x7a, 0x3e, 0x9c, 0xd3, 0x47, 0x50, 0x7a}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - azure_AzureTDX = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xcc, 0x3d, 0x79, 0xee, 0x97, 0x44, 0x34, 0xdc, 0x6d, 0x50, 0x32, 0x4a, 0xd3, 0xc1, 0xfd, 0x52, 0x04, 0x52, 0xc5, 0xa4, 0x20, 0x7e, 0xe0, 0x75, 0x70, 0xc6, 0xf0, 0xdd, 0x8a, 0x85, 0x16, 0x06}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xbd, 0x91, 0x4c, 0x56, 0xea, 0x44, 0x65, 0x5a, 0x66, 0x24, 0x19, 0xbc, 0xb7, 0x54, 0x98, 0x44, 0x7a, 0xc6, 0x0e, 0xb4, 0x3f, 0xb6, 0x76, 0x77, 0x42, 0xda, 0x7e, 0x26, 0x05, 0x3a, 0x50, 0x7e}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xaa, 0x38, 0x8e, 0xae, 0x09, 0x5f, 0xb9, 0x55, 0xb9, 0xf1, 0xaa, 0x38, 0xef, 0x8d, 0x3e, 0x83, 0x6e, 0xea, 0x73, 0x01, 0xbe, 0x83, 0xcf, 0x2c, 0x98, 0x8c, 0x8b, 0x8f, 0x98, 0x4c, 0x26, 0xd6}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + aws_AWSNitroTPM = M{0: {Expected: []byte{0x73, 0x7f, 0x76, 0x7a, 0x12, 0xf5, 0x4e, 0x70, 0xee, 0xcb, 0xc8, 0x68, 0x40, 0x11, 0x32, 0x3a, 0xe2, 0xfe, 0x2d, 0xd9, 0xf9, 0x07, 0x85, 0x57, 0x79, 0x69, 0xd7, 0xa2, 0x01, 0x3e, 0x8c, 0x12}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xc3, 0x80, 0x13, 0xe4, 0x7e, 0x3c, 0xf3, 0x52, 0xfa, 0x88, 0x2a, 0x04, 0x00, 0xbb, 0x89, 0x9f, 0xcb, 0x47, 0x9f, 0xcd, 0x3d, 0xa1, 0x7d, 0x91, 0xf7, 0xd1, 0x94, 0xe2, 0x89, 0xda, 0x03, 0xbe}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xd4, 0x7a, 0x89, 0xa2, 0x0d, 0x43, 0x07, 0x05, 0x24, 0xb8, 0xec, 0x18, 0x99, 0x5d, 0x78, 0xe8, 0x54, 0xb3, 0x3d, 0xd9, 0xdb, 0xaa, 0xb6, 0x81, 0x67, 0xc0, 0x61, 0xc1, 0x75, 0xd3, 0x90, 0x4d}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xa1, 0x26, 0x0c, 0xf4, 0xdf, 0x45, 0x96, 0xae, 0x6b, 0x6c, 0x10, 0xaa, 0xbd, 0xb1, 0x1a, 0xc1, 0x05, 0xb5, 0x8d, 0xf3, 0x22, 0x67, 0x46, 0x61, 0x02, 0x11, 0x44, 0x82, 0x9c, 0xb6, 0x48, 0x74}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + aws_AWSSEVSNP = M{0: {Expected: []byte{0xd6, 0xdf, 0x85, 0x53, 0x58, 0xf5, 0xb1, 0x0f, 0x06, 0xf0, 0xfa, 0xb3, 0xf4, 0x08, 0xad, 0x26, 0xcd, 0x16, 0x5a, 0x29, 0x49, 0xba, 0xd6, 0x9e, 0x2c, 0xc7, 0x56, 0x92, 0x52, 0x9e, 0x66, 0x2a}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x45, 0x5f, 0x6b, 0x81, 0x3b, 0x61, 0x94, 0x3f, 0x01, 0xaa, 0x55, 0x1d, 0x6d, 0x79, 0x2a, 0xc4, 0x69, 0x1d, 0xa6, 0x8f, 0xc9, 0x17, 0x95, 0x10, 0x0d, 0x6a, 0x8a, 0x3b, 0x75, 0x54, 0xb2, 0xc9}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xbe, 0xd9, 0x04, 0xda, 0x60, 0xd4, 0xf0, 0x0a, 0xa3, 0x5d, 0x6e, 0xa5, 0x4f, 0xf6, 0xf0, 0x2a, 0x35, 0x23, 0xed, 0x82, 0xf2, 0x60, 0xfb, 0x1c, 0x82, 0x01, 0x18, 0x4c, 0x63, 0xf7, 0x63, 0xa2}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xb7, 0xf2, 0x7e, 0x79, 0x38, 0x57, 0xff, 0x22, 0xd5, 0xbe, 0x37, 0xe1, 0xf7, 0x6b, 0xef, 0x8b, 0x68, 0x5d, 0x5e, 0xf7, 0x11, 0xcc, 0x21, 0x20, 0x63, 0x31, 0x4a, 0xac, 0x17, 0xd8, 0x0c, 0x88}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + azure_AzureSEVSNP = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x30, 0xbb, 0x45, 0x38, 0xe4, 0x3b, 0x63, 0x36, 0xee, 0x26, 0xb3, 0xb7, 0xd0, 0x3d, 0xbb, 0xa6, 0xe8, 0xf2, 0xb2, 0x59, 0xca, 0x2e, 0x4d, 0xc0, 0x1d, 0x6f, 0xc5, 0x18, 0xbe, 0xf0, 0x22, 0x28}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x4d, 0x40, 0x90, 0xec, 0xcb, 0x31, 0x1b, 0xb8, 0xb8, 0xd5, 0xb5, 0xea, 0x23, 0x51, 0xed, 0x0a, 0xf1, 0x8d, 0xac, 0x5b, 0xf7, 0x61, 0xdd, 0xf4, 0x13, 0x5c, 0x84, 0xc8, 0x40, 0x4b, 0x29, 0xfe}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xa1, 0xf0, 0x13, 0x2c, 0x86, 0x21, 0xf0, 0x81, 0x81, 0xc5, 0x15, 0x5a, 0x2c, 0x48, 0x49, 0x10, 0xdc, 0xca, 0x33, 0x0c, 0x9d, 0xa9, 0xdf, 0x4d, 0x1d, 0x8f, 0x4f, 0x53, 0x71, 0xba, 0x3e, 0xf5}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + azure_AzureTDX = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xcc, 0x84, 0x50, 0x16, 0xe4, 0xe9, 0xa0, 0x27, 0x85, 0x4d, 0x8b, 0x71, 0xed, 0xd0, 0x54, 0xc3, 0x22, 0x5f, 0xde, 0x75, 0x5e, 0xa8, 0x02, 0x43, 0xa4, 0x6f, 0x2b, 0x94, 0x70, 0x1b, 0x27, 0xa7}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x9a, 0x85, 0xff, 0x33, 0x28, 0x28, 0xa6, 0x1f, 0x7e, 0x6b, 0x70, 0x15, 0xe1, 0x41, 0x1b, 0x04, 0xf0, 0x14, 0x5c, 0x4a, 0xf1, 0x6a, 0x20, 0x83, 0xca, 0x02, 0x71, 0x06, 0xa7, 0xf5, 0x3f, 0x51}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xef, 0x8f, 0x0d, 0xb3, 0x7f, 0x43, 0xaa, 0xb9, 0x18, 0xe7, 0xe2, 0x28, 0x0e, 0x97, 0xad, 0x42, 0x0a, 0x2a, 0x4f, 0xc5, 0x1c, 0xec, 0xb2, 0x9e, 0x6d, 0x4e, 0x71, 0x8c, 0x69, 0x9f, 0x54, 0x89}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} azure_AzureTrustedLaunch M - gcp_GCPSEVES = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x41, 0xf1, 0x14, 0x24, 0xd2, 0xaa, 0xda, 0x48, 0x62, 0xd9, 0x1f, 0x9d, 0xb7, 0x30, 0x47, 0x3d, 0x63, 0x5b, 0x8d, 0xde, 0x73, 0x0e, 0xf1, 0x76, 0xba, 0xb7, 0xd0, 0x9b, 0xe4, 0x5c, 0xad, 0x89}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x06, 0x72, 0xc9, 0xec, 0xe6, 0x37, 0x34, 0xae, 0x7f, 0x81, 0xcb, 0x63, 0x4f, 0x93, 0x60, 0x6e, 0xf0, 0xba, 0x47, 0x69, 0x53, 0xe2, 0xa3, 0x9b, 0x46, 0x7b, 0x01, 0x33, 0xd4, 0xee, 0x38, 0xbb}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x59, 0xef, 0xdc, 0xc5, 0x7f, 0x14, 0xc6, 0xe8, 0x0c, 0xfd, 0xd2, 0x02, 0x64, 0xd0, 0xc6, 0x1f, 0xdd, 0x7a, 0xa4, 0xff, 0x94, 0x34, 0xfd, 0xe5, 0x81, 0x36, 0x60, 0x33, 0xdc, 0xfc, 0xd3, 0x81}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - gcp_GCPSEVSNP = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x4e, 0x0a, 0x81, 0x9d, 0x72, 0xf5, 0x0c, 0xdb, 0x80, 0xab, 0xad, 0x9b, 0x03, 0x95, 0xe0, 0x10, 0xb4, 0xea, 0xc5, 0x32, 0xee, 0xca, 0x7f, 0x32, 0xd3, 0x90, 0x59, 0x2c, 0x64, 0xe0, 0x8d, 0x38}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x02, 0x35, 0xa2, 0xdc, 0x2f, 0x06, 0x3f, 0x9d, 0xe6, 0xcc, 0xad, 0xd5, 0x2b, 0x97, 0xd4, 0x69, 0x67, 0x17, 0x35, 0x86, 0xe5, 0x03, 0xa9, 0xca, 0x28, 0xbf, 0x00, 0x40, 0x74, 0x4b, 0x65, 0xc3}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xce, 0x2a, 0xe1, 0x4f, 0x5b, 0x7a, 0x16, 0xcc, 0xb4, 0x2f, 0x63, 0x86, 0x28, 0x9f, 0xf2, 0xd9, 0x60, 0x92, 0x78, 0x7b, 0x2a, 0x29, 0x44, 0x45, 0xeb, 0xec, 0x7c, 0xdb, 0x11, 0x5c, 0x8b, 0x48}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - openstack_QEMUVTPM = M{4: {Expected: []byte{0xb4, 0xd3, 0x63, 0x5c, 0x3b, 0x32, 0x12, 0xd0, 0xab, 0xb6, 0x90, 0x45, 0x20, 0xd1, 0x80, 0x21, 0x69, 0x13, 0x4a, 0x5c, 0x10, 0x92, 0x92, 0xf1, 0x4b, 0x46, 0x79, 0x66, 0x0b, 0x46, 0x9b, 0xb2}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x46, 0xc6, 0x74, 0x42, 0x3f, 0x9a, 0xeb, 0x5b, 0x24, 0x0a, 0x6a, 0x81, 0xc0, 0x3c, 0x17, 0xaf, 0xb7, 0xf2, 0x6d, 0xcf, 0x6d, 0x06, 0x6e, 0x42, 0x40, 0x1e, 0xda, 0xc6, 0xc0, 0x6e, 0x2a, 0x47}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x0c, 0xc3, 0xfc, 0x1e, 0x39, 0x6a, 0x80, 0x90, 0xe5, 0x45, 0x66, 0x07, 0xb4, 0xba, 0x60, 0x96, 0x05, 0x97, 0xa1, 0x1a, 0x7a, 0xc9, 0x6c, 0x06, 0x5f, 0xa7, 0x3a, 0x2c, 0x91, 0x73, 0x2a, 0x6c}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + gcp_GCPSEVES = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x3b, 0xd0, 0xc2, 0x78, 0x85, 0xfe, 0x41, 0x52, 0x8f, 0x4a, 0x16, 0x8d, 0xcd, 0x4a, 0x44, 0x46, 0x53, 0x19, 0x25, 0x89, 0x0f, 0x67, 0x8e, 0xfe, 0x1b, 0xdf, 0x84, 0xfc, 0x01, 0x24, 0xe6, 0x8e}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xd9, 0xe4, 0x1f, 0x06, 0xc9, 0x9c, 0xb8, 0x03, 0x71, 0x53, 0x48, 0x31, 0xb0, 0x2b, 0x33, 0xd1, 0x52, 0xf1, 0xfb, 0x61, 0xdf, 0x42, 0xee, 0x80, 0x89, 0x20, 0xa3, 0x8c, 0x6f, 0x95, 0x49, 0x69}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xd3, 0x9e, 0x6f, 0x61, 0x47, 0x5c, 0xdb, 0x5d, 0x56, 0xa5, 0x82, 0xd3, 0x03, 0xd8, 0x25, 0xc9, 0xdc, 0xa4, 0xb1, 0xc6, 0x15, 0x7e, 0xa0, 0x9c, 0xc6, 0xbb, 0xdf, 0x05, 0xc3, 0xa3, 0x79, 0x24}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + gcp_GCPSEVSNP = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xb1, 0x10, 0xf2, 0x6c, 0xe0, 0x39, 0x76, 0x96, 0xfc, 0x9f, 0xa9, 0x39, 0x5b, 0x81, 0x2a, 0x7f, 0x06, 0xa1, 0x19, 0xb2, 0x91, 0x07, 0xea, 0x35, 0x7d, 0x50, 0x3a, 0x47, 0x32, 0xe6, 0xd3, 0x5e}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x5e, 0x50, 0x4e, 0x08, 0xd8, 0x3e, 0xd6, 0xb3, 0x65, 0xae, 0x66, 0x31, 0x47, 0xf5, 0xf4, 0xd6, 0x5f, 0xb6, 0x23, 0x4f, 0xae, 0x78, 0xed, 0x89, 0xb7, 0x8d, 0x27, 0x65, 0xf0, 0xbf, 0x74, 0x65}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xd4, 0x8f, 0x48, 0xcf, 0xda, 0xf1, 0x89, 0x8b, 0xf3, 0xa9, 0xef, 0xa1, 0xa8, 0xfc, 0x34, 0xde, 0x69, 0x75, 0xcc, 0xd2, 0x2c, 0x68, 0x3b, 0xb4, 0x45, 0x51, 0x15, 0x9e, 0x05, 0x85, 0xcb, 0xa2}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + openstack_QEMUVTPM = M{4: {Expected: []byte{0xb0, 0xb2, 0xa3, 0x14, 0x7f, 0x4d, 0x11, 0x68, 0xea, 0xb1, 0x07, 0x25, 0x50, 0xfb, 0xb9, 0x93, 0xd6, 0xa4, 0x60, 0xad, 0xbb, 0xff, 0x87, 0x15, 0x53, 0xcb, 0xd5, 0x4c, 0x67, 0x9c, 0x86, 0x84}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x3c, 0xee, 0xdf, 0x71, 0x17, 0x08, 0x5c, 0xd9, 0xce, 0xe0, 0x2d, 0x66, 0xbd, 0x74, 0xd6, 0x98, 0x3a, 0xaa, 0xd4, 0x05, 0x6b, 0x4e, 0x51, 0x98, 0x69, 0x3e, 0x48, 0xe3, 0x45, 0x4b, 0xd2, 0x2a}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x18, 0x05, 0x44, 0x1d, 0x02, 0xfb, 0x5f, 0xb9, 0xff, 0x2e, 0xc8, 0x03, 0x84, 0x80, 0x6a, 0x0f, 0x7c, 0x0f, 0x32, 0x9b, 0xc9, 0xc7, 0x90, 0x24, 0x27, 0x67, 0xf2, 0x42, 0x7b, 0xeb, 0x82, 0xa2}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} qemu_QEMUTDX M - qemu_QEMUVTPM = M{4: {Expected: []byte{0x1b, 0xb8, 0x37, 0x03, 0xad, 0xc5, 0x3b, 0x77, 0x1f, 0x7e, 0x66, 0x8b, 0xdc, 0x4e, 0xe8, 0x03, 0x6d, 0x08, 0xe2, 0x97, 0x15, 0x63, 0x9a, 0xce, 0x80, 0x1a, 0xe6, 0xe2, 0x1d, 0xdf, 0xc3, 0x56}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xfc, 0x90, 0x35, 0xec, 0x80, 0x71, 0x36, 0xaf, 0xe3, 0x39, 0x00, 0xf2, 0x0d, 0xab, 0x82, 0x5b, 0x47, 0xfa, 0xa0, 0xde, 0x2c, 0x46, 0x4f, 0x33, 0x4b, 0x1d, 0x6a, 0x2f, 0xec, 0xdc, 0xdc, 0x11}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x24, 0xe4, 0x9a, 0xd1, 0xb7, 0x69, 0xab, 0xd0, 0xd9, 0xdd, 0x13, 0x2f, 0x68, 0x69, 0xc5, 0xbd, 0x13, 0xd8, 0x57, 0x24, 0x54, 0x4c, 0x6d, 0xd8, 0x9f, 0xd6, 0x34, 0x63, 0x20, 0x3a, 0x1e, 0xe4}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + qemu_QEMUVTPM = M{4: {Expected: []byte{0xe4, 0xae, 0xec, 0x5e, 0xbe, 0xda, 0x60, 0x75, 0x6b, 0x59, 0x38, 0x20, 0x9e, 0xec, 0x02, 0x65, 0x79, 0x61, 0xb1, 0x61, 0xc6, 0x91, 0xe7, 0xb4, 0x3f, 0xa2, 0x2f, 0xd9, 0x64, 0x9e, 0x62, 0x84}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x13, 0x8d, 0x9e, 0x0e, 0xa6, 0xac, 0xea, 0x90, 0x21, 0x9e, 0x4e, 0x44, 0x6c, 0x85, 0x5b, 0xe4, 0x2f, 0x9b, 0x19, 0xdb, 0x4b, 0x53, 0x9c, 0xb2, 0x82, 0xe4, 0x2c, 0x9b, 0x0d, 0x0d, 0x7d, 0x23}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x28, 0xd4, 0xc9, 0xb7, 0x80, 0x95, 0x06, 0xc7, 0xdd, 0x4b, 0x50, 0x96, 0x22, 0xcf, 0xdf, 0x54, 0x02, 0x00, 0x31, 0xf5, 0x5c, 0xf3, 0x9d, 0x5a, 0xaa, 0x6e, 0x63, 0x3f, 0x10, 0xe9, 0xd2, 0x9b}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} ) diff --git a/internal/config/image_enterprise.go b/internal/config/image_enterprise.go index 075d8ee35..915761e3b 100644 --- a/internal/config/image_enterprise.go +++ b/internal/config/image_enterprise.go @@ -10,5 +10,5 @@ package config const ( // defaultImage is the default image to use. - defaultImage = "ref/main/stream/nightly/v2.23.0-pre.0.20250422095423-81952fa67d96" + defaultImage = "ref/main/stream/nightly/v2.23.0-pre.0.20250423163526-01164025ec3c" ) From a801f9fe59ad92b01e26dce208836002e078ef34 Mon Sep 17 00:00:00 2001 From: edgelessci <71088502+edgelessci@users.noreply.github.com> Date: Mon, 28 Apr 2025 08:46:52 +0200 Subject: [PATCH 235/311] image: update locked rpms (#3783) Co-authored-by: edgelessci --- image/mirror/SHA256SUMS | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/image/mirror/SHA256SUMS b/image/mirror/SHA256SUMS index 052c616d4..0f174d7e5 100644 --- a/image/mirror/SHA256SUMS +++ b/image/mirror/SHA256SUMS @@ -80,7 +80,7 @@ c4cc69bf3a2655b9ee9ac23492d377bac57811c5b4f81fbf43537520ee33c7af gawk-all-langp 40337d9167737abe23af9c6b586b883f33cc82028d69b29c1d68b524201d9248 gettext-envsubst-0.22.5-4.fc40.x86_64.rpm 554a68e692ccdd0cf71ea67a4c550bac910685465f17eee503732d48ccda9c90 gettext-libs-0.22.5-4.fc40.x86_64.rpm 046971e9f5f0c88737854e1c9e02cce8f5854633575984b235cf3f8b11ec7b91 gettext-runtime-0.22.5-4.fc40.x86_64.rpm -0a32c6874ce180375c2c0b1e2f0c8fed38131a598e5c4ba3866cf3aee1f3f5fc glib2-2.80.3-1.fc40.x86_64.rpm +6afaddcff936e900b9d3ab379ddac5c8dd0aa323924b973bf2fa9fc819dc3638 glib2-2.80.5-1.fc40.x86_64.rpm 07ae5eea58ee6f3c79cbd8a196a688362ed3f6a8c7d5438c4ef81cb5c1945fe3 glibc-2.39-37.fc40.i686.rpm 4f4ea118bba40108c179d9282b985864982791a32ee62e7479b30df8c713a5ff glibc-2.39-37.fc40.x86_64.rpm 361ad86f312b98a6e7bccd70955b10e48e128310daf0401dfe187f1532e951e2 glibc-common-2.39-37.fc40.x86_64.rpm @@ -278,9 +278,9 @@ af85755cda79959a19161ebc26a45e507003298bd97b472b9ab0d512afa5e46a protobuf-c-1.5 45ff2e9814aa059f323b23710c73309d41d36306667a3004f5fbb86b0cab4484 psmisc-23.6-6.fc40.x86_64.rpm c000cbb0a7df2c0c61559ab3f3732eacd163b171673298f4ec043cb6d223f364 publicsuffix-list-dafsa-20250116-1.fc40.noarch.rpm 7c703b431508f44c5184b5c1df052ed0f49b7439d68aa3597a9a57a5b26bd648 python-pip-wheel-23.3.2-2.fc40.noarch.rpm -4d1dbc446e23998e4ccf09bf3f0641ad7ff3166ba40958b5e8ba1bbe0f98b568 python-unversioned-command-3.12.9-3.fc40.noarch.rpm -d353f8f18224286f29b191dd07e9d0497c2284bd42229017c07b6e5101ce1136 python3-3.12.9-3.fc40.x86_64.rpm -243e05cfb49c0190dcd33d378f3c4a602cbeb48b76adfe0108553e9c2d862d75 python3-libs-3.12.9-3.fc40.x86_64.rpm +c24e7183512d234d981d7af6dc218b64745d4f4d1f75a82551ec9fe8bedee740 python-unversioned-command-3.12.10-1.fc40.noarch.rpm +a9b90e03e8cd9e9598f40b22efe04f35343052ae2d5e7977361b1bd105356202 python3-3.12.10-1.fc40.x86_64.rpm +e95d613ce7e265b58fee8fc07e52a6613835647ff2243ec9e3c4cbc29880be79 python3-libs-3.12.10-1.fc40.x86_64.rpm b593f10e736995a0a898d37a1e595ad04bf162e7f0e7c9994e3032a9d9bc8799 qemu-user-static-8.2.9-1.fc40.x86_64.rpm 72b6185e59a7b359df273e9fe27dc014c0856341abcd1c907c7810a77cc6980e qemu-user-static-aarch64-8.2.9-1.fc40.x86_64.rpm 7eace5bc3e601266452b8356207604012542a8cd019b576e6d2ab9306c6a8e4c qemu-user-static-alpha-8.2.9-1.fc40.x86_64.rpm @@ -313,8 +313,8 @@ ce3b3148bb617e132c2ae9a28cc9f1990f806bc45722489f4c09f4d90821b6cd rpm-sequoia-1. 193f8c9ed008172d801fd512e1ca1c0d726f9d871bf088d47155c5ad3e0734bb runc-1.2.5-1.fc40.x86_64.rpm 5dbd069183076ed8048c839c31f713c0f6080fb9ebfdda92ac550030688e811b sbsigntools-0.9.5-6.fc40.x86_64.rpm 6a21b2c132a54fd6d9acb846d0a96289ab739b745cdc4c2b31bdbf6b2434a1a7 sed-4.9-1.fc40.x86_64.rpm -b4e188db51c7ec2d5f0cba79783eb2df7c14a92c2c6e55a9eb490d28d17d123d selinux-policy-40.29-2.fc40.noarch.rpm -05fb13cf2c4d20425e8aa8d2035a8e10e33ca1a28db2ce209db44d755d380eaf selinux-policy-targeted-40.29-2.fc40.noarch.rpm +4ea87bc61621f2465a6db2bf14144acd37230132fc84a2d3af485067646e37e1 selinux-policy-40.30-1.fc40.noarch.rpm +428f1d37fc81965af5962d65b7232b6425db2ff3b3778475756e690acb04a51d selinux-policy-targeted-40.30-1.fc40.noarch.rpm 89862f646cd64e81497f01a8b69ab30ac8968c47afef92a2c333608fdb90ccc1 setup-2.14.5-2.fc40.noarch.rpm cfde0d25ecac7e689ee083b330b78df51d346c2b7557c83a189d5df95c4e2c8d shadow-utils-4.15.1-4.fc40.x86_64.rpm 6e9b6b6196f1782419e447ac806c762d002c6930fe39b18999d9b32c24a0ecfc shadow-utils-subid-4.15.1-4.fc40.x86_64.rpm From fcd0a4803f7860bcf28e779c069d783abf724be6 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 28 Apr 2025 08:47:26 +0200 Subject: [PATCH 236/311] deps: update Kubernetes versions (#3781) * deps: update Kubernetes versions * deps: tidy all modules --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: edgelessci --- docs/docs/architecture/versions.md | 4 +- internal/versions/versions.go | 44 +++++++++---------- .../docs/resources/cluster.md | 2 +- 3 files changed, 25 insertions(+), 25 deletions(-) diff --git a/docs/docs/architecture/versions.md b/docs/docs/architecture/versions.md index 6f06c011b..d5cbc987b 100644 --- a/docs/docs/architecture/versions.md +++ b/docs/docs/architecture/versions.md @@ -17,5 +17,5 @@ The following Kubernetes versions are currently supported: * v1.29.15 -* v1.30.11 -* v1.31.7 +* v1.30.12 +* v1.31.8 diff --git a/internal/versions/versions.go b/internal/versions/versions.go index 8a6540a86..10521c417 100644 --- a/internal/versions/versions.go +++ b/internal/versions/versions.go @@ -183,9 +183,9 @@ const ( //nolint:revive V1_29 ValidK8sVersion = "v1.29.15" // renovate:kubernetes-release //nolint:revive - V1_30 ValidK8sVersion = "v1.30.11" // renovate:kubernetes-release + V1_30 ValidK8sVersion = "v1.30.12" // renovate:kubernetes-release //nolint:revive - V1_31 ValidK8sVersion = "v1.31.7" // renovate:kubernetes-release + V1_31 ValidK8sVersion = "v1.31.8" // renovate:kubernetes-release // Default k8s version deployed by Constellation. Default ValidK8sVersion = V1_30 @@ -265,7 +265,7 @@ var VersionConfigs = map[ValidK8sVersion]KubernetesVersion{ ClusterAutoscalerImage: "registry.k8s.io/autoscaling/cluster-autoscaler:v1.29.5@sha256:76865740be7c965b35ee1524931bb4abfe4c27b5bfad280e84068cd6653ee7bb", // renovate:container }, V1_30: { - ClusterVersion: "v1.30.11", // renovate:kubernetes-release + ClusterVersion: "v1.30.12", // renovate:kubernetes-release KubernetesComponents: components.Components{ { Url: "https://github.com/containernetworking/plugins/releases/download/v1.6.2/cni-plugins-linux-amd64-v1.6.2.tgz", // renovate:cni-plugins-release @@ -280,33 +280,33 @@ var VersionConfigs = map[ValidK8sVersion]KubernetesVersion{ Extract: true, }, { - Url: "https://dl.k8s.io/v1.30.11/bin/linux/amd64/kubelet", // renovate:kubernetes-release - Hash: "sha256:59177fc92e2b2bb988f7d8d39682ea9e3d9d883273c9c8b51b39502d9b965431", + Url: "https://dl.k8s.io/v1.30.12/bin/linux/amd64/kubelet", // renovate:kubernetes-release + Hash: "sha256:aab260aa88dd27f785bdb64e7e5be0173bcd1a871d0fa84d5dc7736469f7c395", InstallPath: constants.KubeletPath, Extract: false, }, { - Url: "https://dl.k8s.io/v1.30.11/bin/linux/amd64/kubeadm", // renovate:kubernetes-release - Hash: "sha256:06ff7ff15b7fa9af60189fdece5f7c56efa8b637c38b4a498715ca2f04ccfcb2", + Url: "https://dl.k8s.io/v1.30.12/bin/linux/amd64/kubeadm", // renovate:kubernetes-release + Hash: "sha256:88422e8b3749b5eaf50a9889a56ee5615cd8a027711f26c6687788e758b949f8", InstallPath: constants.KubeadmPath, Extract: false, }, { - Url: "https://dl.k8s.io/v1.30.11/bin/linux/amd64/kubectl", // renovate:kubernetes-release - Hash: "sha256:228a8b2679f84de9192a1ac5ad527c9ab73b0f76c452ed74f11da812bbcfaa42", + Url: "https://dl.k8s.io/v1.30.12/bin/linux/amd64/kubectl", // renovate:kubernetes-release + Hash: "sha256:261a3c4eb12e09207b9e08f0b43d547220569317ed8d7a22638572100ace5b80", InstallPath: constants.KubectlPath, Extract: false, }, { - Url: "data:application/json;base64,W3sib3AiOiJyZXBsYWNlIiwicGF0aCI6Ii9zcGVjL2NvbnRhaW5lcnMvMC9pbWFnZSIsInZhbHVlIjoicmVnaXN0cnkuazhzLmlvL2t1YmUtYXBpc2VydmVyOnYxLjMwLjExQHNoYTI1Njo3N2M1NDM0Njk2NTAzNmFjYzdhYzk1YzMyMDA1OTdlZGUzNmRiOTI0NjE3OTI0OGRkZTIxYzFhM2VjYzFjYWYwIn1d", + Url: "data:application/json;base64,W3sib3AiOiJyZXBsYWNlIiwicGF0aCI6Ii9zcGVjL2NvbnRhaW5lcnMvMC9pbWFnZSIsInZhbHVlIjoicmVnaXN0cnkuazhzLmlvL2t1YmUtYXBpc2VydmVyOnYxLjMwLjEyQHNoYTI1Njo0ODc4NjgyZjdhMDQ0Mjc0ZDQyMzk5YTYzMTZlZjQ1MmM1NDExYWFmZDRhZDk5Y2M1N2RlNzIzNWNhNDkwZTRlIn1d", InstallPath: patchFilePath("kube-apiserver"), }, { - Url: "data:application/json;base64,W3sib3AiOiJyZXBsYWNlIiwicGF0aCI6Ii9zcGVjL2NvbnRhaW5lcnMvMC9pbWFnZSIsInZhbHVlIjoicmVnaXN0cnkuazhzLmlvL2t1YmUtY29udHJvbGxlci1tYW5hZ2VyOnYxLjMwLjExQHNoYTI1NjpkODg3NGYzZmI0NTU5MWVjZGFjNjdhMzAzNWM3MzA4MDhmMThiM2FiMTMxNDc0OTVjN2Q3N2ViMTk2MGQ0ZjZmIn1d", + Url: "data:application/json;base64,W3sib3AiOiJyZXBsYWNlIiwicGF0aCI6Ii9zcGVjL2NvbnRhaW5lcnMvMC9pbWFnZSIsInZhbHVlIjoicmVnaXN0cnkuazhzLmlvL2t1YmUtY29udHJvbGxlci1tYW5hZ2VyOnYxLjMwLjEyQHNoYTI1NjozYTM2NzExZDA0MDlkNTY1YjM3MGExOGQwYzE5MzM5ZTkzZDRmMWIxZjJiM2ZkMzgyZWIzMWM3MTRjNDYzYjc0In1d", InstallPath: patchFilePath("kube-controller-manager"), }, { - Url: "data:application/json;base64,W3sib3AiOiJyZXBsYWNlIiwicGF0aCI6Ii9zcGVjL2NvbnRhaW5lcnMvMC9pbWFnZSIsInZhbHVlIjoicmVnaXN0cnkuazhzLmlvL2t1YmUtc2NoZWR1bGVyOnYxLjMwLjExQHNoYTI1NjpjNjk5ZjhjOTdhZTdlYzgxOWM4YmQ4NzhkM2RiMTA0YmE3MmZjNDQwZDgxMGQ5MDMwZTA5Mjg2YjY5NjAxN2I1In1d", + Url: "data:application/json;base64,W3sib3AiOiJyZXBsYWNlIiwicGF0aCI6Ii9zcGVjL2NvbnRhaW5lcnMvMC9pbWFnZSIsInZhbHVlIjoicmVnaXN0cnkuazhzLmlvL2t1YmUtc2NoZWR1bGVyOnYxLjMwLjEyQHNoYTI1Njo1MjFjODQzZDAxMDI1YmU3ZDRlMjQ2ZGRlZThjZGU3NDU1NmViOTgxM2M2MDZkNmRiOWYwZjAzMjM2ZjZkMDI5In1d", InstallPath: patchFilePath("kube-scheduler"), }, { @@ -332,7 +332,7 @@ var VersionConfigs = map[ValidK8sVersion]KubernetesVersion{ ClusterAutoscalerImage: "registry.k8s.io/autoscaling/cluster-autoscaler:v1.30.4@sha256:f508cac11c8300f27529ed73f8d80f9b1949f819e8f8787f28afcb8e47ceb2b4", // renovate:container }, V1_31: { - ClusterVersion: "v1.31.7", // renovate:kubernetes-release + ClusterVersion: "v1.31.8", // renovate:kubernetes-release KubernetesComponents: components.Components{ { Url: "https://github.com/containernetworking/plugins/releases/download/v1.6.2/cni-plugins-linux-amd64-v1.6.2.tgz", // renovate:cni-plugins-release @@ -347,33 +347,33 @@ var VersionConfigs = map[ValidK8sVersion]KubernetesVersion{ Extract: true, }, { - Url: "https://dl.k8s.io/v1.31.7/bin/linux/amd64/kubelet", // renovate:kubernetes-release - Hash: "sha256:279e766a1a7c0dce2efae452c9de1e52b169df31c4b75c9d3b7d51f767ae6d42", + Url: "https://dl.k8s.io/v1.31.8/bin/linux/amd64/kubelet", // renovate:kubernetes-release + Hash: "sha256:02697f8d14fc36089954380730f300df78b63dada1dc6f52d8e60bd5ce217d48", InstallPath: constants.KubeletPath, Extract: false, }, { - Url: "https://dl.k8s.io/v1.31.7/bin/linux/amd64/kubeadm", // renovate:kubernetes-release - Hash: "sha256:be84c87c7b40977edf67fb8ee231abb273b93bbab5bb770af0f3f37c0d7c4b81", + Url: "https://dl.k8s.io/v1.31.8/bin/linux/amd64/kubeadm", // renovate:kubernetes-release + Hash: "sha256:b979b58548902a152b0ab89265347c34aac9f1c7e9666953806267d033f0d63b", InstallPath: constants.KubeadmPath, Extract: false, }, { - Url: "https://dl.k8s.io/v1.31.7/bin/linux/amd64/kubectl", // renovate:kubernetes-release - Hash: "sha256:80a3c83f00241cd402bc8688464e5e3eedd52a461ee41d882f19cf04ad6d0379", + Url: "https://dl.k8s.io/v1.31.8/bin/linux/amd64/kubectl", // renovate:kubernetes-release + Hash: "sha256:be0aa44a50a9aada4e9402e361ffb0d5bb1fd4f6950751399fcaf3b8b936a746", InstallPath: constants.KubectlPath, Extract: false, }, { - Url: "data:application/json;base64,W3sib3AiOiJyZXBsYWNlIiwicGF0aCI6Ii9zcGVjL2NvbnRhaW5lcnMvMC9pbWFnZSIsInZhbHVlIjoicmVnaXN0cnkuazhzLmlvL2t1YmUtYXBpc2VydmVyOnYxLjMxLjdAc2hhMjU2OjIyYzE5Y2M3MGZlNTgwNmQwYTJjYjI4YTZiNmIzM2ZkMzRlNmY5ZTUwNjE2YmRmNmQ1MzY0OWJjZmFmYmMyNzcifV0=", + Url: "data:application/json;base64,W3sib3AiOiJyZXBsYWNlIiwicGF0aCI6Ii9zcGVjL2NvbnRhaW5lcnMvMC9pbWFnZSIsInZhbHVlIjoicmVnaXN0cnkuazhzLmlvL2t1YmUtYXBpc2VydmVyOnYxLjMxLjhAc2hhMjU2OjMwMDkwZGI2YTdkNTM3OTkxNjNjZTgyZGFlOWU4ZGRiNjQ1ZmQ0N2RiOTNmMmVjOWRhMGNjNzg3ZmQ4MjU2MjUifV0=", InstallPath: patchFilePath("kube-apiserver"), }, { - Url: "data:application/json;base64,W3sib3AiOiJyZXBsYWNlIiwicGF0aCI6Ii9zcGVjL2NvbnRhaW5lcnMvMC9pbWFnZSIsInZhbHVlIjoicmVnaXN0cnkuazhzLmlvL2t1YmUtY29udHJvbGxlci1tYW5hZ2VyOnYxLjMxLjdAc2hhMjU2OjZhYmU3YTBhY2NlY2YyOWRiNmViYWIxOGExMGY4NDQ2NzhmZmVkNjkzZDc5ZTJlNTFhMThhNmYyYjQ1MzBjYmIifV0=", + Url: "data:application/json;base64,W3sib3AiOiJyZXBsYWNlIiwicGF0aCI6Ii9zcGVjL2NvbnRhaW5lcnMvMC9pbWFnZSIsInZhbHVlIjoicmVnaXN0cnkuazhzLmlvL2t1YmUtY29udHJvbGxlci1tYW5hZ2VyOnYxLjMxLjhAc2hhMjU2OjI5ZWFkZGM2NDc5MmE2ODlkZjQ4NTA2ZTc4YmJjNjQxZDA2M2FjOGJiOTJkMmU2NmFlMmFkMDU5Nzc0MjA3NDcifV0=", InstallPath: patchFilePath("kube-controller-manager"), }, { - Url: "data:application/json;base64,W3sib3AiOiJyZXBsYWNlIiwicGF0aCI6Ii9zcGVjL2NvbnRhaW5lcnMvMC9pbWFnZSIsInZhbHVlIjoicmVnaXN0cnkuazhzLmlvL2t1YmUtc2NoZWR1bGVyOnYxLjMxLjdAc2hhMjU2OmZiODAyNDliY2I3N2VlNzJiMWM5ZmE1YjcwYmMyOGE4M2VkMTA3YzljYTcxOTU3ODQxYWQ5MWRiMzc5OTYzYmYifV0=", + Url: "data:application/json;base64,W3sib3AiOiJyZXBsYWNlIiwicGF0aCI6Ii9zcGVjL2NvbnRhaW5lcnMvMC9pbWFnZSIsInZhbHVlIjoicmVnaXN0cnkuazhzLmlvL2t1YmUtc2NoZWR1bGVyOnYxLjMxLjhAc2hhMjU2OjIyOTk0YTI2MzJlODEwNTk3MjA0ODBiOWY2YmRlYjEzM2IwOGQ1ODQ5MmQwYjM2ZGZkNmU5NzY4YjE1OWIyMmEifV0=", InstallPath: patchFilePath("kube-scheduler"), }, { diff --git a/terraform-provider-constellation/docs/resources/cluster.md b/terraform-provider-constellation/docs/resources/cluster.md index 178e7aba7..5a9c13bcf 100644 --- a/terraform-provider-constellation/docs/resources/cluster.md +++ b/terraform-provider-constellation/docs/resources/cluster.md @@ -69,7 +69,7 @@ resource "constellation_cluster" "azure_example" { See the [full list of CSPs](https://docs.edgeless.systems/constellation/overview/clouds) that Constellation supports. - `image` (Attributes) Constellation OS Image to use on the nodes. (see [below for nested schema](#nestedatt--image)) - `init_secret` (String) Secret used for initialization of the cluster. -- `kubernetes_version` (String) The Kubernetes version to use for the cluster. The supported versions are [v1.29.15 v1.30.11 v1.31.7]. +- `kubernetes_version` (String) The Kubernetes version to use for the cluster. The supported versions are [v1.29.15 v1.30.12 v1.31.8]. - `master_secret` (String) Hex-encoded 32-byte master secret for the cluster. - `master_secret_salt` (String) Hex-encoded 32-byte master secret salt for the cluster. - `measurement_salt` (String) Hex-encoded 32-byte measurement salt for the cluster. From 5f1ef83a460fbde626b1671b87d368e5c27386e7 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 29 Apr 2025 13:58:28 +0200 Subject: [PATCH 237/311] deps: update golangci/golangci-lint to v2.1.5 (#3785) * deps: update golangci/golangci-lint to v2.1.5 * deps: tidy all modules --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: edgelessci --- bazel/toolchains/ci_deps.bzl | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/bazel/toolchains/ci_deps.bzl b/bazel/toolchains/ci_deps.bzl index cd2012e60..26e38c3bd 100644 --- a/bazel/toolchains/ci_deps.bzl +++ b/bazel/toolchains/ci_deps.bzl @@ -223,45 +223,45 @@ def _golangci_lint_deps(): name = "com_github_golangci_golangci_lint_linux_amd64", build_file = "//bazel/toolchains:BUILD.golangci.bazel", urls = [ - "https://cdn.confidential.cloud/constellation/cas/sha256/bc16fd1ef25bce2c600de0122600100ab26d6d75388cc5369c5bb916cb2b82e3", - "https://github.com/golangci/golangci-lint/releases/download/v2.1.2/golangci-lint-2.1.2-linux-amd64.tar.gz", + "https://cdn.confidential.cloud/constellation/cas/sha256/8c71aea61ce6ef83f32c23a0067ba5b6b7064043767bcb99ddfdd6678e3c7644", + "https://github.com/golangci/golangci-lint/releases/download/v2.1.5/golangci-lint-2.1.5-linux-amd64.tar.gz", ], - strip_prefix = "golangci-lint-2.1.2-linux-amd64", + strip_prefix = "golangci-lint-2.1.5-linux-amd64", type = "tar.gz", - sha256 = "bc16fd1ef25bce2c600de0122600100ab26d6d75388cc5369c5bb916cb2b82e3", + sha256 = "8c71aea61ce6ef83f32c23a0067ba5b6b7064043767bcb99ddfdd6678e3c7644", ) http_archive( name = "com_github_golangci_golangci_lint_linux_arm64", build_file = "//bazel/toolchains:BUILD.golangci.bazel", urls = [ - "https://cdn.confidential.cloud/constellation/cas/sha256/46e86f1c4a94236e4d0bb35252c72939bed9f749897aaad54b576d430b1bb6d4", - "https://github.com/golangci/golangci-lint/releases/download/v2.1.2/golangci-lint-2.1.2-linux-arm64.tar.gz", + "https://cdn.confidential.cloud/constellation/cas/sha256/76ef18939e16308b01a90d2e28abd5ce888435fa25467c432dc0da9469f998c9", + "https://github.com/golangci/golangci-lint/releases/download/v2.1.5/golangci-lint-2.1.5-linux-arm64.tar.gz", ], - strip_prefix = "golangci-lint-2.1.2-linux-arm64", + strip_prefix = "golangci-lint-2.1.5-linux-arm64", type = "tar.gz", - sha256 = "46e86f1c4a94236e4d0bb35252c72939bed9f749897aaad54b576d430b1bb6d4", + sha256 = "76ef18939e16308b01a90d2e28abd5ce888435fa25467c432dc0da9469f998c9", ) http_archive( name = "com_github_golangci_golangci_lint_darwin_amd64", build_file = "//bazel/toolchains:BUILD.golangci.bazel", urls = [ - "https://cdn.confidential.cloud/constellation/cas/sha256/ed02ba3ad28466d61d2ae2b80cc95671713fa842c353da37842b1b89e36cb3ce", - "https://github.com/golangci/golangci-lint/releases/download/v2.1.2/golangci-lint-2.1.2-darwin-amd64.tar.gz", + "https://cdn.confidential.cloud/constellation/cas/sha256/b44c77e61f2685a9cb673a1b579486c7839bf2a57feee591eb42812951b9d190", + "https://github.com/golangci/golangci-lint/releases/download/v2.1.5/golangci-lint-2.1.5-darwin-amd64.tar.gz", ], - strip_prefix = "golangci-lint-2.1.2-darwin-amd64", + strip_prefix = "golangci-lint-2.1.5-darwin-amd64", type = "tar.gz", - sha256 = "ed02ba3ad28466d61d2ae2b80cc95671713fa842c353da37842b1b89e36cb3ce", + sha256 = "b44c77e61f2685a9cb673a1b579486c7839bf2a57feee591eb42812951b9d190", ) http_archive( name = "com_github_golangci_golangci_lint_darwin_arm64", build_file = "//bazel/toolchains:BUILD.golangci.bazel", urls = [ - "https://cdn.confidential.cloud/constellation/cas/sha256/1cff60651d7c95a4248fa72f0dd020bffed1d2dc4dd8c2c77aee89a0731fa615", - "https://github.com/golangci/golangci-lint/releases/download/v2.1.2/golangci-lint-2.1.2-darwin-arm64.tar.gz", + "https://cdn.confidential.cloud/constellation/cas/sha256/de757442ad87df8b094afb610ea92f85a8e46c687b496a3b8d708c94dec16526", + "https://github.com/golangci/golangci-lint/releases/download/v2.1.5/golangci-lint-2.1.5-darwin-arm64.tar.gz", ], - strip_prefix = "golangci-lint-2.1.2-darwin-arm64", + strip_prefix = "golangci-lint-2.1.5-darwin-arm64", type = "tar.gz", - sha256 = "1cff60651d7c95a4248fa72f0dd020bffed1d2dc4dd8c2c77aee89a0731fa615", + sha256 = "de757442ad87df8b094afb610ea92f85a8e46c687b496a3b8d708c94dec16526", ) def _buf_deps(): From 3777a44474b06484d363c7abadc8d0b75381199a Mon Sep 17 00:00:00 2001 From: edgelessci <71088502+edgelessci@users.noreply.github.com> Date: Wed, 30 Apr 2025 08:24:53 +0200 Subject: [PATCH 238/311] image: update measurements and image version (#3788) Co-authored-by: edgelessci --- .../measurements/measurements_enterprise.go | 16 ++++++++-------- internal/config/image_enterprise.go | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/internal/attestation/measurements/measurements_enterprise.go b/internal/attestation/measurements/measurements_enterprise.go index eca8ca5ed..954e2d5b7 100644 --- a/internal/attestation/measurements/measurements_enterprise.go +++ b/internal/attestation/measurements/measurements_enterprise.go @@ -19,14 +19,14 @@ package measurements // revive:disable:var-naming var ( - aws_AWSNitroTPM = M{0: {Expected: []byte{0x73, 0x7f, 0x76, 0x7a, 0x12, 0xf5, 0x4e, 0x70, 0xee, 0xcb, 0xc8, 0x68, 0x40, 0x11, 0x32, 0x3a, 0xe2, 0xfe, 0x2d, 0xd9, 0xf9, 0x07, 0x85, 0x57, 0x79, 0x69, 0xd7, 0xa2, 0x01, 0x3e, 0x8c, 0x12}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xc3, 0x80, 0x13, 0xe4, 0x7e, 0x3c, 0xf3, 0x52, 0xfa, 0x88, 0x2a, 0x04, 0x00, 0xbb, 0x89, 0x9f, 0xcb, 0x47, 0x9f, 0xcd, 0x3d, 0xa1, 0x7d, 0x91, 0xf7, 0xd1, 0x94, 0xe2, 0x89, 0xda, 0x03, 0xbe}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xd4, 0x7a, 0x89, 0xa2, 0x0d, 0x43, 0x07, 0x05, 0x24, 0xb8, 0xec, 0x18, 0x99, 0x5d, 0x78, 0xe8, 0x54, 0xb3, 0x3d, 0xd9, 0xdb, 0xaa, 0xb6, 0x81, 0x67, 0xc0, 0x61, 0xc1, 0x75, 0xd3, 0x90, 0x4d}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xa1, 0x26, 0x0c, 0xf4, 0xdf, 0x45, 0x96, 0xae, 0x6b, 0x6c, 0x10, 0xaa, 0xbd, 0xb1, 0x1a, 0xc1, 0x05, 0xb5, 0x8d, 0xf3, 0x22, 0x67, 0x46, 0x61, 0x02, 0x11, 0x44, 0x82, 0x9c, 0xb6, 0x48, 0x74}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - aws_AWSSEVSNP = M{0: {Expected: []byte{0xd6, 0xdf, 0x85, 0x53, 0x58, 0xf5, 0xb1, 0x0f, 0x06, 0xf0, 0xfa, 0xb3, 0xf4, 0x08, 0xad, 0x26, 0xcd, 0x16, 0x5a, 0x29, 0x49, 0xba, 0xd6, 0x9e, 0x2c, 0xc7, 0x56, 0x92, 0x52, 0x9e, 0x66, 0x2a}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x45, 0x5f, 0x6b, 0x81, 0x3b, 0x61, 0x94, 0x3f, 0x01, 0xaa, 0x55, 0x1d, 0x6d, 0x79, 0x2a, 0xc4, 0x69, 0x1d, 0xa6, 0x8f, 0xc9, 0x17, 0x95, 0x10, 0x0d, 0x6a, 0x8a, 0x3b, 0x75, 0x54, 0xb2, 0xc9}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xbe, 0xd9, 0x04, 0xda, 0x60, 0xd4, 0xf0, 0x0a, 0xa3, 0x5d, 0x6e, 0xa5, 0x4f, 0xf6, 0xf0, 0x2a, 0x35, 0x23, 0xed, 0x82, 0xf2, 0x60, 0xfb, 0x1c, 0x82, 0x01, 0x18, 0x4c, 0x63, 0xf7, 0x63, 0xa2}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xb7, 0xf2, 0x7e, 0x79, 0x38, 0x57, 0xff, 0x22, 0xd5, 0xbe, 0x37, 0xe1, 0xf7, 0x6b, 0xef, 0x8b, 0x68, 0x5d, 0x5e, 0xf7, 0x11, 0xcc, 0x21, 0x20, 0x63, 0x31, 0x4a, 0xac, 0x17, 0xd8, 0x0c, 0x88}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - azure_AzureSEVSNP = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x30, 0xbb, 0x45, 0x38, 0xe4, 0x3b, 0x63, 0x36, 0xee, 0x26, 0xb3, 0xb7, 0xd0, 0x3d, 0xbb, 0xa6, 0xe8, 0xf2, 0xb2, 0x59, 0xca, 0x2e, 0x4d, 0xc0, 0x1d, 0x6f, 0xc5, 0x18, 0xbe, 0xf0, 0x22, 0x28}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x4d, 0x40, 0x90, 0xec, 0xcb, 0x31, 0x1b, 0xb8, 0xb8, 0xd5, 0xb5, 0xea, 0x23, 0x51, 0xed, 0x0a, 0xf1, 0x8d, 0xac, 0x5b, 0xf7, 0x61, 0xdd, 0xf4, 0x13, 0x5c, 0x84, 0xc8, 0x40, 0x4b, 0x29, 0xfe}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xa1, 0xf0, 0x13, 0x2c, 0x86, 0x21, 0xf0, 0x81, 0x81, 0xc5, 0x15, 0x5a, 0x2c, 0x48, 0x49, 0x10, 0xdc, 0xca, 0x33, 0x0c, 0x9d, 0xa9, 0xdf, 0x4d, 0x1d, 0x8f, 0x4f, 0x53, 0x71, 0xba, 0x3e, 0xf5}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - azure_AzureTDX = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xcc, 0x84, 0x50, 0x16, 0xe4, 0xe9, 0xa0, 0x27, 0x85, 0x4d, 0x8b, 0x71, 0xed, 0xd0, 0x54, 0xc3, 0x22, 0x5f, 0xde, 0x75, 0x5e, 0xa8, 0x02, 0x43, 0xa4, 0x6f, 0x2b, 0x94, 0x70, 0x1b, 0x27, 0xa7}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x9a, 0x85, 0xff, 0x33, 0x28, 0x28, 0xa6, 0x1f, 0x7e, 0x6b, 0x70, 0x15, 0xe1, 0x41, 0x1b, 0x04, 0xf0, 0x14, 0x5c, 0x4a, 0xf1, 0x6a, 0x20, 0x83, 0xca, 0x02, 0x71, 0x06, 0xa7, 0xf5, 0x3f, 0x51}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xef, 0x8f, 0x0d, 0xb3, 0x7f, 0x43, 0xaa, 0xb9, 0x18, 0xe7, 0xe2, 0x28, 0x0e, 0x97, 0xad, 0x42, 0x0a, 0x2a, 0x4f, 0xc5, 0x1c, 0xec, 0xb2, 0x9e, 0x6d, 0x4e, 0x71, 0x8c, 0x69, 0x9f, 0x54, 0x89}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + aws_AWSNitroTPM = M{0: {Expected: []byte{0x73, 0x7f, 0x76, 0x7a, 0x12, 0xf5, 0x4e, 0x70, 0xee, 0xcb, 0xc8, 0x68, 0x40, 0x11, 0x32, 0x3a, 0xe2, 0xfe, 0x2d, 0xd9, 0xf9, 0x07, 0x85, 0x57, 0x79, 0x69, 0xd7, 0xa2, 0x01, 0x3e, 0x8c, 0x12}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x26, 0x67, 0x0c, 0x57, 0x91, 0x59, 0x4b, 0xba, 0x66, 0xb5, 0x68, 0x2a, 0x23, 0x65, 0xb6, 0x63, 0xc3, 0x72, 0xc6, 0x3e, 0x2d, 0xf7, 0x9d, 0x2a, 0x7b, 0x88, 0x71, 0x3b, 0x08, 0x8e, 0x28, 0xe8}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x7c, 0x59, 0xee, 0x88, 0x2c, 0x8e, 0x3e, 0x31, 0xe0, 0xb8, 0xc6, 0xde, 0x2b, 0x73, 0x54, 0x97, 0x16, 0x5f, 0x44, 0xca, 0xb3, 0x4a, 0xde, 0x6b, 0x7b, 0x22, 0x55, 0x2f, 0x99, 0x6d, 0x3d, 0xf1}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x8f, 0x19, 0xb8, 0x71, 0x6e, 0x7e, 0x33, 0x16, 0xf6, 0x87, 0x23, 0x62, 0xfd, 0x76, 0x7f, 0xd1, 0x18, 0x3f, 0xd5, 0xb1, 0x00, 0xe2, 0x0a, 0xb4, 0x03, 0xdc, 0x10, 0xcf, 0x44, 0x7f, 0x90, 0xb3}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + aws_AWSSEVSNP = M{0: {Expected: []byte{0xd6, 0xdf, 0x85, 0x53, 0x58, 0xf5, 0xb1, 0x0f, 0x06, 0xf0, 0xfa, 0xb3, 0xf4, 0x08, 0xad, 0x26, 0xcd, 0x16, 0x5a, 0x29, 0x49, 0xba, 0xd6, 0x9e, 0x2c, 0xc7, 0x56, 0x92, 0x52, 0x9e, 0x66, 0x2a}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xa5, 0x10, 0xb7, 0xc9, 0x35, 0x73, 0x15, 0x3c, 0x36, 0x2d, 0xe8, 0xf3, 0x64, 0xc3, 0xfd, 0xc0, 0x29, 0x75, 0x8c, 0x9b, 0x04, 0x4b, 0x57, 0xf8, 0x87, 0xfa, 0x8c, 0xe8, 0xf2, 0x90, 0x4b, 0x22}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x1c, 0xa7, 0xe6, 0x81, 0xd4, 0xf0, 0x9b, 0xca, 0xfe, 0xa2, 0x52, 0xed, 0x05, 0xf8, 0x11, 0x2e, 0x85, 0xef, 0x2c, 0x83, 0x53, 0xbd, 0xc3, 0x7c, 0xea, 0x68, 0xdc, 0xd2, 0x0b, 0x99, 0xb9, 0x0e}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x0a, 0x45, 0x71, 0x8a, 0xbd, 0x1a, 0xff, 0x11, 0x0f, 0xcb, 0x87, 0xe3, 0x54, 0x22, 0xc8, 0x0d, 0x2a, 0x36, 0x4d, 0x9c, 0xb2, 0x30, 0xc9, 0xd2, 0xb8, 0x26, 0xb8, 0xf5, 0x39, 0x3f, 0xf1, 0x5c}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + azure_AzureSEVSNP = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x4e, 0x0e, 0x77, 0xcd, 0xce, 0x0c, 0xf3, 0x8a, 0x3b, 0xcd, 0x77, 0x78, 0x6d, 0xae, 0xae, 0x27, 0x44, 0x10, 0xae, 0x8f, 0x2e, 0x86, 0xe2, 0x86, 0xd2, 0x78, 0x86, 0x37, 0xcd, 0x73, 0xea, 0xe6}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xd6, 0x98, 0x88, 0x5d, 0x97, 0xd5, 0xa0, 0xbd, 0x90, 0xb2, 0xa8, 0x98, 0x5c, 0x52, 0x8c, 0xbd, 0xe3, 0x17, 0xc9, 0x02, 0xc1, 0xdb, 0x97, 0x63, 0x85, 0xf0, 0x3a, 0x1f, 0x04, 0x0f, 0x89, 0x66}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xd5, 0x49, 0x55, 0x03, 0x09, 0x90, 0xb4, 0x6b, 0x19, 0x32, 0x4f, 0x68, 0xcc, 0x62, 0xb0, 0x97, 0x73, 0x8d, 0x4a, 0x42, 0xf6, 0xa6, 0xa3, 0x6c, 0x42, 0x79, 0x6e, 0xc4, 0x69, 0xe5, 0x20, 0x8f}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + azure_AzureTDX = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x78, 0xb9, 0x9d, 0x71, 0xe9, 0xd5, 0x2c, 0x65, 0x23, 0x4b, 0xb9, 0xeb, 0xa9, 0x7f, 0xf7, 0x8f, 0x2d, 0xbd, 0xe6, 0x36, 0x66, 0x57, 0x03, 0xb2, 0x1b, 0xa8, 0x9c, 0xb2, 0x8d, 0x76, 0x19, 0x6f}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xd7, 0x01, 0x82, 0xb5, 0x79, 0x3c, 0x80, 0x4c, 0x0f, 0xc3, 0xd8, 0x9a, 0x89, 0x33, 0x0a, 0xdc, 0x9a, 0x23, 0xa2, 0x78, 0x6c, 0x46, 0x74, 0xd0, 0xcb, 0x0a, 0x7f, 0x4a, 0xb6, 0x93, 0xaf, 0xf7}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x91, 0x40, 0x73, 0x58, 0xd4, 0x76, 0xc4, 0x3d, 0xdc, 0xab, 0xe6, 0xe6, 0x7b, 0x2e, 0xdc, 0x78, 0x34, 0x48, 0x2b, 0xef, 0xde, 0x15, 0x2e, 0xd1, 0xeb, 0xa0, 0x89, 0xad, 0xb2, 0xc0, 0xc1, 0x77}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} azure_AzureTrustedLaunch M - gcp_GCPSEVES = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x3b, 0xd0, 0xc2, 0x78, 0x85, 0xfe, 0x41, 0x52, 0x8f, 0x4a, 0x16, 0x8d, 0xcd, 0x4a, 0x44, 0x46, 0x53, 0x19, 0x25, 0x89, 0x0f, 0x67, 0x8e, 0xfe, 0x1b, 0xdf, 0x84, 0xfc, 0x01, 0x24, 0xe6, 0x8e}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xd9, 0xe4, 0x1f, 0x06, 0xc9, 0x9c, 0xb8, 0x03, 0x71, 0x53, 0x48, 0x31, 0xb0, 0x2b, 0x33, 0xd1, 0x52, 0xf1, 0xfb, 0x61, 0xdf, 0x42, 0xee, 0x80, 0x89, 0x20, 0xa3, 0x8c, 0x6f, 0x95, 0x49, 0x69}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xd3, 0x9e, 0x6f, 0x61, 0x47, 0x5c, 0xdb, 0x5d, 0x56, 0xa5, 0x82, 0xd3, 0x03, 0xd8, 0x25, 0xc9, 0xdc, 0xa4, 0xb1, 0xc6, 0x15, 0x7e, 0xa0, 0x9c, 0xc6, 0xbb, 0xdf, 0x05, 0xc3, 0xa3, 0x79, 0x24}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - gcp_GCPSEVSNP = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xb1, 0x10, 0xf2, 0x6c, 0xe0, 0x39, 0x76, 0x96, 0xfc, 0x9f, 0xa9, 0x39, 0x5b, 0x81, 0x2a, 0x7f, 0x06, 0xa1, 0x19, 0xb2, 0x91, 0x07, 0xea, 0x35, 0x7d, 0x50, 0x3a, 0x47, 0x32, 0xe6, 0xd3, 0x5e}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x5e, 0x50, 0x4e, 0x08, 0xd8, 0x3e, 0xd6, 0xb3, 0x65, 0xae, 0x66, 0x31, 0x47, 0xf5, 0xf4, 0xd6, 0x5f, 0xb6, 0x23, 0x4f, 0xae, 0x78, 0xed, 0x89, 0xb7, 0x8d, 0x27, 0x65, 0xf0, 0xbf, 0x74, 0x65}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xd4, 0x8f, 0x48, 0xcf, 0xda, 0xf1, 0x89, 0x8b, 0xf3, 0xa9, 0xef, 0xa1, 0xa8, 0xfc, 0x34, 0xde, 0x69, 0x75, 0xcc, 0xd2, 0x2c, 0x68, 0x3b, 0xb4, 0x45, 0x51, 0x15, 0x9e, 0x05, 0x85, 0xcb, 0xa2}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - openstack_QEMUVTPM = M{4: {Expected: []byte{0xb0, 0xb2, 0xa3, 0x14, 0x7f, 0x4d, 0x11, 0x68, 0xea, 0xb1, 0x07, 0x25, 0x50, 0xfb, 0xb9, 0x93, 0xd6, 0xa4, 0x60, 0xad, 0xbb, 0xff, 0x87, 0x15, 0x53, 0xcb, 0xd5, 0x4c, 0x67, 0x9c, 0x86, 0x84}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x3c, 0xee, 0xdf, 0x71, 0x17, 0x08, 0x5c, 0xd9, 0xce, 0xe0, 0x2d, 0x66, 0xbd, 0x74, 0xd6, 0x98, 0x3a, 0xaa, 0xd4, 0x05, 0x6b, 0x4e, 0x51, 0x98, 0x69, 0x3e, 0x48, 0xe3, 0x45, 0x4b, 0xd2, 0x2a}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x18, 0x05, 0x44, 0x1d, 0x02, 0xfb, 0x5f, 0xb9, 0xff, 0x2e, 0xc8, 0x03, 0x84, 0x80, 0x6a, 0x0f, 0x7c, 0x0f, 0x32, 0x9b, 0xc9, 0xc7, 0x90, 0x24, 0x27, 0x67, 0xf2, 0x42, 0x7b, 0xeb, 0x82, 0xa2}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + gcp_GCPSEVES = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xff, 0xc7, 0x33, 0x60, 0x44, 0xaa, 0xe4, 0x22, 0xbc, 0xc3, 0x95, 0x73, 0x74, 0x00, 0x3a, 0xe6, 0x53, 0x31, 0x72, 0xd9, 0x09, 0x64, 0x4b, 0x87, 0x6b, 0xcd, 0xd4, 0xe2, 0xa0, 0xbf, 0x25, 0xd1}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xaa, 0xe2, 0x3a, 0xdc, 0xc9, 0x71, 0x92, 0x1f, 0x51, 0x55, 0x24, 0xcf, 0xf2, 0xc5, 0xbd, 0xd9, 0xce, 0xd4, 0xa8, 0x6a, 0x75, 0x59, 0xbb, 0xdf, 0x45, 0x44, 0x43, 0xd4, 0xd8, 0xcd, 0x74, 0x53}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x53, 0xb9, 0x6f, 0x9f, 0x2b, 0xb9, 0x8c, 0xef, 0xae, 0xde, 0x4b, 0x87, 0xec, 0x77, 0xe3, 0x20, 0x38, 0xc3, 0xdf, 0x4a, 0x80, 0xd3, 0x51, 0xe6, 0x3a, 0xa4, 0xe2, 0xe1, 0x5b, 0x55, 0x49, 0x8b}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + gcp_GCPSEVSNP = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xdf, 0x93, 0x78, 0x1c, 0x04, 0x53, 0xd7, 0x3c, 0x88, 0xfc, 0x12, 0xf2, 0xd3, 0xe5, 0xa8, 0x3e, 0xb7, 0x43, 0x39, 0x8c, 0xd9, 0x6d, 0x83, 0xc6, 0x7e, 0x61, 0x91, 0x93, 0x37, 0xa0, 0x53, 0xc3}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x4a, 0xff, 0x79, 0xbb, 0x8e, 0x5e, 0x4f, 0x8f, 0x41, 0x48, 0xf6, 0xf6, 0x63, 0x00, 0x9f, 0x13, 0x43, 0x21, 0x9c, 0x95, 0x48, 0x49, 0x13, 0x4f, 0x41, 0xc2, 0x81, 0x71, 0xb4, 0xaa, 0x25, 0xfc}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xa5, 0x60, 0x70, 0xe6, 0xe4, 0x42, 0x83, 0x54, 0xe4, 0x9b, 0x6d, 0xe0, 0xd5, 0x69, 0x8c, 0xd2, 0x29, 0xc0, 0x29, 0x18, 0x34, 0x4c, 0x37, 0xc2, 0x12, 0x2c, 0x5a, 0x4c, 0x38, 0xe2, 0x98, 0x9f}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + openstack_QEMUVTPM = M{4: {Expected: []byte{0x8b, 0xad, 0x9b, 0x8e, 0xf4, 0x10, 0x3f, 0xce, 0x04, 0xab, 0x0f, 0x25, 0x94, 0x4c, 0xfb, 0x5b, 0x4b, 0x80, 0xed, 0x55, 0x70, 0x7d, 0x5f, 0xd4, 0xd1, 0xa5, 0xfb, 0x6e, 0xe6, 0xf8, 0x7c, 0xfe}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x16, 0x89, 0x72, 0x34, 0xb4, 0x41, 0x0a, 0xf6, 0xc5, 0xc3, 0xeb, 0xcb, 0x48, 0xb3, 0x79, 0x1c, 0x6d, 0xf8, 0xca, 0x14, 0xcf, 0xb6, 0xf7, 0x35, 0xd5, 0xd0, 0x69, 0xd6, 0x33, 0x3a, 0x66, 0x00}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x2f, 0x40, 0xcd, 0x6c, 0x87, 0x5c, 0x6f, 0xf0, 0x53, 0xbf, 0xe6, 0x4a, 0x8e, 0x41, 0x59, 0x34, 0x0e, 0x71, 0x2c, 0xa7, 0xef, 0xd9, 0x23, 0x5d, 0x08, 0xc8, 0xaf, 0xc7, 0x1e, 0x3a, 0x8f, 0xc4}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} qemu_QEMUTDX M - qemu_QEMUVTPM = M{4: {Expected: []byte{0xe4, 0xae, 0xec, 0x5e, 0xbe, 0xda, 0x60, 0x75, 0x6b, 0x59, 0x38, 0x20, 0x9e, 0xec, 0x02, 0x65, 0x79, 0x61, 0xb1, 0x61, 0xc6, 0x91, 0xe7, 0xb4, 0x3f, 0xa2, 0x2f, 0xd9, 0x64, 0x9e, 0x62, 0x84}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x13, 0x8d, 0x9e, 0x0e, 0xa6, 0xac, 0xea, 0x90, 0x21, 0x9e, 0x4e, 0x44, 0x6c, 0x85, 0x5b, 0xe4, 0x2f, 0x9b, 0x19, 0xdb, 0x4b, 0x53, 0x9c, 0xb2, 0x82, 0xe4, 0x2c, 0x9b, 0x0d, 0x0d, 0x7d, 0x23}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x28, 0xd4, 0xc9, 0xb7, 0x80, 0x95, 0x06, 0xc7, 0xdd, 0x4b, 0x50, 0x96, 0x22, 0xcf, 0xdf, 0x54, 0x02, 0x00, 0x31, 0xf5, 0x5c, 0xf3, 0x9d, 0x5a, 0xaa, 0x6e, 0x63, 0x3f, 0x10, 0xe9, 0xd2, 0x9b}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + qemu_QEMUVTPM = M{4: {Expected: []byte{0xea, 0xd1, 0x9a, 0x8f, 0x2f, 0x2e, 0x6d, 0x33, 0xf6, 0x86, 0xa1, 0xb4, 0x25, 0x05, 0x6c, 0xe1, 0x2c, 0xbf, 0x13, 0x1f, 0xb4, 0x7a, 0x3e, 0xc9, 0x70, 0xcb, 0x51, 0x88, 0xe5, 0x03, 0xb3, 0xed}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x0e, 0x04, 0x19, 0x29, 0xcf, 0x75, 0x1b, 0x6c, 0x60, 0xd2, 0x30, 0xf3, 0x92, 0x04, 0x4f, 0x2a, 0xd5, 0xcc, 0x77, 0x8b, 0xbf, 0xbe, 0x22, 0xa4, 0xb5, 0x38, 0xc7, 0x6c, 0xb3, 0x8a, 0xb0, 0x56}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xda, 0xb6, 0xb2, 0x89, 0x3b, 0xaf, 0x7e, 0xb4, 0xf6, 0x96, 0xd2, 0xfd, 0x0b, 0x6f, 0x3a, 0x19, 0xab, 0x37, 0x28, 0xcf, 0xba, 0x54, 0xc8, 0xc3, 0xca, 0xdf, 0xa1, 0xbd, 0x0c, 0x3f, 0xca, 0x87}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} ) diff --git a/internal/config/image_enterprise.go b/internal/config/image_enterprise.go index 915761e3b..8e28f977c 100644 --- a/internal/config/image_enterprise.go +++ b/internal/config/image_enterprise.go @@ -10,5 +10,5 @@ package config const ( // defaultImage is the default image to use. - defaultImage = "ref/main/stream/nightly/v2.23.0-pre.0.20250423163526-01164025ec3c" + defaultImage = "ref/main/stream/nightly/v2.23.0-pre.0.20250429135828-5f1ef83a460f" ) From 60d1d1c513a51dbb1bece145f4a3bccfdf6e37d3 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 30 Apr 2025 08:45:44 +0200 Subject: [PATCH 239/311] deps: update bufbuild/buf to v1.53.0 (#3787) * deps: update bufbuild/buf to v1.53.0 * deps: tidy all modules --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: edgelessci --- bazel/toolchains/ci_deps.bzl | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/bazel/toolchains/ci_deps.bzl b/bazel/toolchains/ci_deps.bzl index 26e38c3bd..cf74da11f 100644 --- a/bazel/toolchains/ci_deps.bzl +++ b/bazel/toolchains/ci_deps.bzl @@ -270,44 +270,44 @@ def _buf_deps(): strip_prefix = "buf/bin", build_file_content = """exports_files(["buf"], visibility = ["//visibility:public"])""", urls = [ - "https://cdn.confidential.cloud/constellation/cas/sha256/ce439b98c0e655ba1821fc529442f677135a9a44206a85cf2081a445bde02554", - "https://github.com/bufbuild/buf/releases/download/v1.52.1/buf-Linux-x86_64.tar.gz", + "https://cdn.confidential.cloud/constellation/cas/sha256/2dc9793f94806f3e4b0158a36e33680e2b962be50c12a7785ccb3da00d2fb2e7", + "https://github.com/bufbuild/buf/releases/download/v1.53.0/buf-Linux-x86_64.tar.gz", ], type = "tar.gz", - sha256 = "ce439b98c0e655ba1821fc529442f677135a9a44206a85cf2081a445bde02554", + sha256 = "2dc9793f94806f3e4b0158a36e33680e2b962be50c12a7785ccb3da00d2fb2e7", ) http_archive( name = "com_github_bufbuild_buf_linux_arm64", strip_prefix = "buf/bin", build_file_content = """exports_files(["buf"], visibility = ["//visibility:public"])""", urls = [ - "https://cdn.confidential.cloud/constellation/cas/sha256/fb980e62f55a0d705f555124b5b250a6234deae67b3a493b1844fed8cb48f012", - "https://github.com/bufbuild/buf/releases/download/v1.52.1/buf-Linux-aarch64.tar.gz", + "https://cdn.confidential.cloud/constellation/cas/sha256/4b5a40388c6a6608c29c7961fefc97ea10585e684038b1e6f9716f2216eaf9a9", + "https://github.com/bufbuild/buf/releases/download/v1.53.0/buf-Linux-aarch64.tar.gz", ], type = "tar.gz", - sha256 = "fb980e62f55a0d705f555124b5b250a6234deae67b3a493b1844fed8cb48f012", + sha256 = "4b5a40388c6a6608c29c7961fefc97ea10585e684038b1e6f9716f2216eaf9a9", ) http_archive( name = "com_github_bufbuild_buf_darwin_amd64", strip_prefix = "buf/bin", build_file_content = """exports_files(["buf"], visibility = ["//visibility:public"])""", urls = [ - "https://cdn.confidential.cloud/constellation/cas/sha256/ff3aedaa8bf53c3ae53bf863bb6141a23ef9e2ef750016ab217b0466ab3e89be", - "https://github.com/bufbuild/buf/releases/download/v1.52.1/buf-Darwin-x86_64.tar.gz", + "https://cdn.confidential.cloud/constellation/cas/sha256/44f1c88c597694b607902adc7da5f0742511f3c379cc08058b140bcb5e8a4b11", + "https://github.com/bufbuild/buf/releases/download/v1.53.0/buf-Darwin-x86_64.tar.gz", ], type = "tar.gz", - sha256 = "ff3aedaa8bf53c3ae53bf863bb6141a23ef9e2ef750016ab217b0466ab3e89be", + sha256 = "44f1c88c597694b607902adc7da5f0742511f3c379cc08058b140bcb5e8a4b11", ) http_archive( name = "com_github_bufbuild_buf_darwin_arm64", strip_prefix = "buf/bin", build_file_content = """exports_files(["buf"], visibility = ["//visibility:public"])""", urls = [ - "https://cdn.confidential.cloud/constellation/cas/sha256/b11d5afda7f58a44a6520b798902b1263aba921b0989cb156ecf2acc8eb1ce31", - "https://github.com/bufbuild/buf/releases/download/v1.52.1/buf-Darwin-arm64.tar.gz", + "https://cdn.confidential.cloud/constellation/cas/sha256/3a12862c5e27fe57e27b3c4dec6aae3e923ec626b1b443eb2310a3487066735f", + "https://github.com/bufbuild/buf/releases/download/v1.53.0/buf-Darwin-arm64.tar.gz", ], type = "tar.gz", - sha256 = "b11d5afda7f58a44a6520b798902b1263aba921b0989cb156ecf2acc8eb1ce31", + sha256 = "3a12862c5e27fe57e27b3c4dec6aae3e923ec626b1b443eb2310a3487066735f", ) def _talos_docgen_deps(): From c5ef866cdc638e4e332799162efe3f70bcf61ffa Mon Sep 17 00:00:00 2001 From: Moritz Sanft <58110325+msanft@users.noreply.github.com> Date: Wed, 30 Apr 2025 11:31:10 +0200 Subject: [PATCH 240/311] ci: add missing checkout step (#3791) --- .github/workflows/check-measurements-reproducibility.yml | 4 +++- .github/workflows/release.yml | 5 +++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/.github/workflows/check-measurements-reproducibility.yml b/.github/workflows/check-measurements-reproducibility.yml index ce8093c38..3a91eda81 100644 --- a/.github/workflows/check-measurements-reproducibility.yml +++ b/.github/workflows/check-measurements-reproducibility.yml @@ -17,7 +17,9 @@ jobs: steps: - name: Checkout uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - + with: + ref: ${{ inputs.ref || github.ref }} + - name: Check reproducibility uses: ./.github/actions/check_measurements_reproducibility with: diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index e1b5a0090..1108d88e8 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -244,6 +244,11 @@ jobs: needs: [verify-inputs, os-image] runs-on: ubuntu-24.04 steps: + - name: Checkout + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + with: + ref: ${{ needs.verify-inputs.outputs.WORKING_BRANCH }} + - name: Check reproducibility uses: ./.github/actions/check_measurements_reproducibility with: From c80b85bca1e48bb0396f93da9239b100645a42aa Mon Sep 17 00:00:00 2001 From: edgelessci <71088502+edgelessci@users.noreply.github.com> Date: Fri, 2 May 2025 08:39:49 +0200 Subject: [PATCH 241/311] image: update measurements and image version (#3792) Co-authored-by: edgelessci --- .../measurements/measurements_enterprise.go | 16 ++++++++-------- internal/config/image_enterprise.go | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/internal/attestation/measurements/measurements_enterprise.go b/internal/attestation/measurements/measurements_enterprise.go index 954e2d5b7..4946626c0 100644 --- a/internal/attestation/measurements/measurements_enterprise.go +++ b/internal/attestation/measurements/measurements_enterprise.go @@ -19,14 +19,14 @@ package measurements // revive:disable:var-naming var ( - aws_AWSNitroTPM = M{0: {Expected: []byte{0x73, 0x7f, 0x76, 0x7a, 0x12, 0xf5, 0x4e, 0x70, 0xee, 0xcb, 0xc8, 0x68, 0x40, 0x11, 0x32, 0x3a, 0xe2, 0xfe, 0x2d, 0xd9, 0xf9, 0x07, 0x85, 0x57, 0x79, 0x69, 0xd7, 0xa2, 0x01, 0x3e, 0x8c, 0x12}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x26, 0x67, 0x0c, 0x57, 0x91, 0x59, 0x4b, 0xba, 0x66, 0xb5, 0x68, 0x2a, 0x23, 0x65, 0xb6, 0x63, 0xc3, 0x72, 0xc6, 0x3e, 0x2d, 0xf7, 0x9d, 0x2a, 0x7b, 0x88, 0x71, 0x3b, 0x08, 0x8e, 0x28, 0xe8}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x7c, 0x59, 0xee, 0x88, 0x2c, 0x8e, 0x3e, 0x31, 0xe0, 0xb8, 0xc6, 0xde, 0x2b, 0x73, 0x54, 0x97, 0x16, 0x5f, 0x44, 0xca, 0xb3, 0x4a, 0xde, 0x6b, 0x7b, 0x22, 0x55, 0x2f, 0x99, 0x6d, 0x3d, 0xf1}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x8f, 0x19, 0xb8, 0x71, 0x6e, 0x7e, 0x33, 0x16, 0xf6, 0x87, 0x23, 0x62, 0xfd, 0x76, 0x7f, 0xd1, 0x18, 0x3f, 0xd5, 0xb1, 0x00, 0xe2, 0x0a, 0xb4, 0x03, 0xdc, 0x10, 0xcf, 0x44, 0x7f, 0x90, 0xb3}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - aws_AWSSEVSNP = M{0: {Expected: []byte{0xd6, 0xdf, 0x85, 0x53, 0x58, 0xf5, 0xb1, 0x0f, 0x06, 0xf0, 0xfa, 0xb3, 0xf4, 0x08, 0xad, 0x26, 0xcd, 0x16, 0x5a, 0x29, 0x49, 0xba, 0xd6, 0x9e, 0x2c, 0xc7, 0x56, 0x92, 0x52, 0x9e, 0x66, 0x2a}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xa5, 0x10, 0xb7, 0xc9, 0x35, 0x73, 0x15, 0x3c, 0x36, 0x2d, 0xe8, 0xf3, 0x64, 0xc3, 0xfd, 0xc0, 0x29, 0x75, 0x8c, 0x9b, 0x04, 0x4b, 0x57, 0xf8, 0x87, 0xfa, 0x8c, 0xe8, 0xf2, 0x90, 0x4b, 0x22}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x1c, 0xa7, 0xe6, 0x81, 0xd4, 0xf0, 0x9b, 0xca, 0xfe, 0xa2, 0x52, 0xed, 0x05, 0xf8, 0x11, 0x2e, 0x85, 0xef, 0x2c, 0x83, 0x53, 0xbd, 0xc3, 0x7c, 0xea, 0x68, 0xdc, 0xd2, 0x0b, 0x99, 0xb9, 0x0e}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x0a, 0x45, 0x71, 0x8a, 0xbd, 0x1a, 0xff, 0x11, 0x0f, 0xcb, 0x87, 0xe3, 0x54, 0x22, 0xc8, 0x0d, 0x2a, 0x36, 0x4d, 0x9c, 0xb2, 0x30, 0xc9, 0xd2, 0xb8, 0x26, 0xb8, 0xf5, 0x39, 0x3f, 0xf1, 0x5c}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - azure_AzureSEVSNP = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x4e, 0x0e, 0x77, 0xcd, 0xce, 0x0c, 0xf3, 0x8a, 0x3b, 0xcd, 0x77, 0x78, 0x6d, 0xae, 0xae, 0x27, 0x44, 0x10, 0xae, 0x8f, 0x2e, 0x86, 0xe2, 0x86, 0xd2, 0x78, 0x86, 0x37, 0xcd, 0x73, 0xea, 0xe6}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xd6, 0x98, 0x88, 0x5d, 0x97, 0xd5, 0xa0, 0xbd, 0x90, 0xb2, 0xa8, 0x98, 0x5c, 0x52, 0x8c, 0xbd, 0xe3, 0x17, 0xc9, 0x02, 0xc1, 0xdb, 0x97, 0x63, 0x85, 0xf0, 0x3a, 0x1f, 0x04, 0x0f, 0x89, 0x66}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xd5, 0x49, 0x55, 0x03, 0x09, 0x90, 0xb4, 0x6b, 0x19, 0x32, 0x4f, 0x68, 0xcc, 0x62, 0xb0, 0x97, 0x73, 0x8d, 0x4a, 0x42, 0xf6, 0xa6, 0xa3, 0x6c, 0x42, 0x79, 0x6e, 0xc4, 0x69, 0xe5, 0x20, 0x8f}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - azure_AzureTDX = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x78, 0xb9, 0x9d, 0x71, 0xe9, 0xd5, 0x2c, 0x65, 0x23, 0x4b, 0xb9, 0xeb, 0xa9, 0x7f, 0xf7, 0x8f, 0x2d, 0xbd, 0xe6, 0x36, 0x66, 0x57, 0x03, 0xb2, 0x1b, 0xa8, 0x9c, 0xb2, 0x8d, 0x76, 0x19, 0x6f}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xd7, 0x01, 0x82, 0xb5, 0x79, 0x3c, 0x80, 0x4c, 0x0f, 0xc3, 0xd8, 0x9a, 0x89, 0x33, 0x0a, 0xdc, 0x9a, 0x23, 0xa2, 0x78, 0x6c, 0x46, 0x74, 0xd0, 0xcb, 0x0a, 0x7f, 0x4a, 0xb6, 0x93, 0xaf, 0xf7}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x91, 0x40, 0x73, 0x58, 0xd4, 0x76, 0xc4, 0x3d, 0xdc, 0xab, 0xe6, 0xe6, 0x7b, 0x2e, 0xdc, 0x78, 0x34, 0x48, 0x2b, 0xef, 0xde, 0x15, 0x2e, 0xd1, 0xeb, 0xa0, 0x89, 0xad, 0xb2, 0xc0, 0xc1, 0x77}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + aws_AWSNitroTPM = M{0: {Expected: []byte{0x73, 0x7f, 0x76, 0x7a, 0x12, 0xf5, 0x4e, 0x70, 0xee, 0xcb, 0xc8, 0x68, 0x40, 0x11, 0x32, 0x3a, 0xe2, 0xfe, 0x2d, 0xd9, 0xf9, 0x07, 0x85, 0x57, 0x79, 0x69, 0xd7, 0xa2, 0x01, 0x3e, 0x8c, 0x12}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x96, 0xf3, 0x87, 0x10, 0xf9, 0xd0, 0x46, 0x8c, 0xce, 0x78, 0xeb, 0x49, 0x8e, 0x76, 0xa1, 0x45, 0x88, 0x58, 0x01, 0x1d, 0x30, 0x2b, 0xff, 0x24, 0x82, 0x17, 0xf0, 0x75, 0x28, 0x42, 0x29, 0x31}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x1a, 0x62, 0x75, 0xa3, 0x8c, 0xe6, 0x8f, 0x56, 0xbf, 0x10, 0x43, 0xee, 0x31, 0x6b, 0x0a, 0x8a, 0xa3, 0x6a, 0x89, 0x45, 0x25, 0xa4, 0xdc, 0x3c, 0x97, 0x57, 0x3d, 0x6b, 0xdd, 0xfd, 0x20, 0x86}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x4f, 0x96, 0x2b, 0x17, 0x1f, 0xfb, 0x65, 0x49, 0x9f, 0xce, 0x2c, 0x06, 0x5f, 0x0e, 0x18, 0x91, 0xbd, 0x01, 0xe4, 0x4a, 0x7c, 0xac, 0x2d, 0x54, 0xaf, 0xc0, 0x54, 0x3d, 0x18, 0x96, 0xcb, 0xf9}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + aws_AWSSEVSNP = M{0: {Expected: []byte{0xd6, 0xdf, 0x85, 0x53, 0x58, 0xf5, 0xb1, 0x0f, 0x06, 0xf0, 0xfa, 0xb3, 0xf4, 0x08, 0xad, 0x26, 0xcd, 0x16, 0x5a, 0x29, 0x49, 0xba, 0xd6, 0x9e, 0x2c, 0xc7, 0x56, 0x92, 0x52, 0x9e, 0x66, 0x2a}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x3f, 0xec, 0x16, 0xfe, 0xb9, 0x20, 0x4f, 0x21, 0x30, 0xbf, 0x25, 0x3d, 0xed, 0x97, 0x24, 0xde, 0xb3, 0x09, 0x2d, 0x34, 0x8a, 0x33, 0xf6, 0xe4, 0x45, 0x4f, 0x48, 0x77, 0xb0, 0xab, 0xd4, 0x60}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xdc, 0xe1, 0xef, 0x62, 0x14, 0xf8, 0x8a, 0x99, 0xd7, 0xd9, 0xaa, 0xcf, 0x3f, 0xfd, 0x58, 0x30, 0x04, 0xa4, 0x3b, 0x51, 0xb8, 0xad, 0xcc, 0x37, 0x6c, 0x3a, 0x4e, 0x87, 0x30, 0x35, 0xfc, 0x41}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xee, 0x8a, 0x5f, 0xec, 0x8e, 0x15, 0x14, 0xbe, 0x79, 0x90, 0xab, 0x34, 0x03, 0xe8, 0xce, 0x1c, 0x9a, 0xad, 0x2d, 0x96, 0x78, 0x77, 0xb3, 0xed, 0x09, 0x58, 0xa0, 0x36, 0x6b, 0x3c, 0x8b, 0xfc}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + azure_AzureSEVSNP = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xf6, 0xa7, 0x3f, 0xef, 0x99, 0x61, 0xfa, 0x83, 0x60, 0x57, 0x99, 0xc5, 0x83, 0x99, 0x46, 0xa4, 0x77, 0x41, 0x00, 0xd6, 0x5e, 0x4c, 0x2b, 0x8f, 0x09, 0xe7, 0x18, 0x58, 0xe6, 0xc1, 0xea, 0x01}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x6f, 0x99, 0x52, 0x55, 0x58, 0xa7, 0x57, 0x93, 0x2d, 0x49, 0x1c, 0xf8, 0xd9, 0xbb, 0xb6, 0x97, 0x67, 0xe2, 0xe5, 0x35, 0x0f, 0xd5, 0x3b, 0x6a, 0xd6, 0x8e, 0x19, 0x45, 0xff, 0x5b, 0x36, 0x30}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x53, 0x60, 0x2f, 0x68, 0xb7, 0x65, 0x74, 0x76, 0x9f, 0xc4, 0x41, 0x26, 0xb6, 0x3d, 0x38, 0x88, 0x2f, 0xbe, 0xdf, 0x25, 0x20, 0x5b, 0xb6, 0x53, 0x09, 0x94, 0xeb, 0x7d, 0x18, 0xa9, 0xd9, 0xe5}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + azure_AzureTDX = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x68, 0xcd, 0x62, 0xd7, 0x52, 0xab, 0xa2, 0x4e, 0xe1, 0xc0, 0x4b, 0xae, 0x54, 0xc6, 0x7d, 0x44, 0x8f, 0x9a, 0x5e, 0x97, 0xe3, 0x95, 0x13, 0x80, 0x22, 0xaf, 0x33, 0x69, 0x72, 0x6a, 0xa7, 0xee}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x85, 0xa3, 0x0c, 0x7e, 0x25, 0x56, 0x0c, 0x3f, 0x04, 0x15, 0xeb, 0x03, 0x06, 0xdb, 0xac, 0x9f, 0x89, 0xf0, 0x2b, 0xe0, 0xb9, 0xbb, 0x64, 0xff, 0x64, 0xe0, 0x19, 0x80, 0x42, 0xdd, 0x1e, 0x3e}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xaa, 0xe7, 0x37, 0x39, 0x6b, 0xbf, 0xe1, 0x90, 0xe9, 0x74, 0xe4, 0xf5, 0xac, 0x87, 0x23, 0xf5, 0x6f, 0x9b, 0x3d, 0x6a, 0xbf, 0x29, 0x43, 0x89, 0xeb, 0xf1, 0x22, 0xb3, 0xb0, 0xa0, 0x59, 0xe2}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} azure_AzureTrustedLaunch M - gcp_GCPSEVES = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xff, 0xc7, 0x33, 0x60, 0x44, 0xaa, 0xe4, 0x22, 0xbc, 0xc3, 0x95, 0x73, 0x74, 0x00, 0x3a, 0xe6, 0x53, 0x31, 0x72, 0xd9, 0x09, 0x64, 0x4b, 0x87, 0x6b, 0xcd, 0xd4, 0xe2, 0xa0, 0xbf, 0x25, 0xd1}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xaa, 0xe2, 0x3a, 0xdc, 0xc9, 0x71, 0x92, 0x1f, 0x51, 0x55, 0x24, 0xcf, 0xf2, 0xc5, 0xbd, 0xd9, 0xce, 0xd4, 0xa8, 0x6a, 0x75, 0x59, 0xbb, 0xdf, 0x45, 0x44, 0x43, 0xd4, 0xd8, 0xcd, 0x74, 0x53}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x53, 0xb9, 0x6f, 0x9f, 0x2b, 0xb9, 0x8c, 0xef, 0xae, 0xde, 0x4b, 0x87, 0xec, 0x77, 0xe3, 0x20, 0x38, 0xc3, 0xdf, 0x4a, 0x80, 0xd3, 0x51, 0xe6, 0x3a, 0xa4, 0xe2, 0xe1, 0x5b, 0x55, 0x49, 0x8b}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - gcp_GCPSEVSNP = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xdf, 0x93, 0x78, 0x1c, 0x04, 0x53, 0xd7, 0x3c, 0x88, 0xfc, 0x12, 0xf2, 0xd3, 0xe5, 0xa8, 0x3e, 0xb7, 0x43, 0x39, 0x8c, 0xd9, 0x6d, 0x83, 0xc6, 0x7e, 0x61, 0x91, 0x93, 0x37, 0xa0, 0x53, 0xc3}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x4a, 0xff, 0x79, 0xbb, 0x8e, 0x5e, 0x4f, 0x8f, 0x41, 0x48, 0xf6, 0xf6, 0x63, 0x00, 0x9f, 0x13, 0x43, 0x21, 0x9c, 0x95, 0x48, 0x49, 0x13, 0x4f, 0x41, 0xc2, 0x81, 0x71, 0xb4, 0xaa, 0x25, 0xfc}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xa5, 0x60, 0x70, 0xe6, 0xe4, 0x42, 0x83, 0x54, 0xe4, 0x9b, 0x6d, 0xe0, 0xd5, 0x69, 0x8c, 0xd2, 0x29, 0xc0, 0x29, 0x18, 0x34, 0x4c, 0x37, 0xc2, 0x12, 0x2c, 0x5a, 0x4c, 0x38, 0xe2, 0x98, 0x9f}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - openstack_QEMUVTPM = M{4: {Expected: []byte{0x8b, 0xad, 0x9b, 0x8e, 0xf4, 0x10, 0x3f, 0xce, 0x04, 0xab, 0x0f, 0x25, 0x94, 0x4c, 0xfb, 0x5b, 0x4b, 0x80, 0xed, 0x55, 0x70, 0x7d, 0x5f, 0xd4, 0xd1, 0xa5, 0xfb, 0x6e, 0xe6, 0xf8, 0x7c, 0xfe}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x16, 0x89, 0x72, 0x34, 0xb4, 0x41, 0x0a, 0xf6, 0xc5, 0xc3, 0xeb, 0xcb, 0x48, 0xb3, 0x79, 0x1c, 0x6d, 0xf8, 0xca, 0x14, 0xcf, 0xb6, 0xf7, 0x35, 0xd5, 0xd0, 0x69, 0xd6, 0x33, 0x3a, 0x66, 0x00}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x2f, 0x40, 0xcd, 0x6c, 0x87, 0x5c, 0x6f, 0xf0, 0x53, 0xbf, 0xe6, 0x4a, 0x8e, 0x41, 0x59, 0x34, 0x0e, 0x71, 0x2c, 0xa7, 0xef, 0xd9, 0x23, 0x5d, 0x08, 0xc8, 0xaf, 0xc7, 0x1e, 0x3a, 0x8f, 0xc4}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + gcp_GCPSEVES = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xe4, 0x22, 0x0b, 0xbd, 0x71, 0xd8, 0x7c, 0x73, 0xba, 0xf3, 0x78, 0x11, 0xd1, 0xf3, 0xd0, 0xf9, 0x64, 0x72, 0x15, 0x3c, 0x55, 0x30, 0xb0, 0x25, 0x49, 0x45, 0x74, 0xe6, 0x37, 0xf6, 0x16, 0x07}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xf3, 0x36, 0x72, 0x73, 0x70, 0x0d, 0x20, 0x46, 0xcb, 0x26, 0x1f, 0xb6, 0x74, 0xfa, 0xe4, 0x0a, 0xbc, 0x69, 0xcf, 0x1d, 0xac, 0xb1, 0xa8, 0xbd, 0x51, 0xfe, 0x77, 0xa4, 0x1c, 0xb4, 0x50, 0x56}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x20, 0x00, 0x67, 0xe8, 0x53, 0xe3, 0xa7, 0xa6, 0x1d, 0xe5, 0x51, 0xcc, 0xcf, 0x57, 0x87, 0xfd, 0xae, 0x68, 0x94, 0x93, 0xd7, 0x36, 0x37, 0x9c, 0x7b, 0x98, 0x63, 0x1b, 0x8b, 0xeb, 0x4c, 0x02}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + gcp_GCPSEVSNP = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x69, 0xf6, 0x53, 0xbe, 0xb9, 0xec, 0x69, 0xc2, 0xd6, 0x67, 0xad, 0xf4, 0x66, 0xe9, 0x70, 0x23, 0x06, 0xab, 0xd5, 0xef, 0x55, 0xce, 0xd5, 0xcf, 0x8f, 0x7d, 0xdc, 0x90, 0xec, 0xad, 0x9c, 0x2d}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x4c, 0x96, 0xb5, 0x9f, 0xb7, 0x45, 0x74, 0xdd, 0xeb, 0x2a, 0x0a, 0x7f, 0x04, 0xf4, 0x28, 0x9d, 0xf4, 0x93, 0x02, 0xe1, 0x25, 0x68, 0xb0, 0xfc, 0x02, 0x31, 0xce, 0xd2, 0xa4, 0x29, 0xa0, 0x09}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x8c, 0xd0, 0xcf, 0x63, 0x20, 0xe8, 0x83, 0x4c, 0x48, 0x28, 0xd9, 0x53, 0xf5, 0x05, 0xed, 0x34, 0xe3, 0x10, 0x0a, 0x85, 0x4b, 0xef, 0x0b, 0x65, 0xe6, 0xb1, 0x6e, 0xb7, 0x74, 0x43, 0x77, 0x90}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + openstack_QEMUVTPM = M{4: {Expected: []byte{0xc6, 0x0b, 0x67, 0xd2, 0x0a, 0xe7, 0x7b, 0x78, 0x6f, 0x18, 0xfe, 0x3d, 0xd0, 0x7a, 0x61, 0x3e, 0x32, 0xac, 0x7d, 0x7e, 0xc8, 0xe8, 0x81, 0x17, 0x5d, 0x45, 0x31, 0xcd, 0x21, 0x47, 0xc5, 0xc7}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xef, 0xfc, 0xb4, 0x3c, 0x29, 0xac, 0xd8, 0x6d, 0x73, 0x78, 0xcb, 0x15, 0x1e, 0x63, 0xbc, 0x01, 0x2b, 0x72, 0x90, 0x5b, 0x80, 0x38, 0x9b, 0x62, 0xd0, 0x33, 0x6e, 0x75, 0x17, 0x06, 0xb1, 0x68}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x52, 0xd0, 0xc1, 0x2f, 0x33, 0xc6, 0xf6, 0x85, 0x4a, 0xa7, 0x97, 0x11, 0xd4, 0x76, 0xef, 0x1b, 0xf3, 0xab, 0x71, 0xe5, 0xa3, 0x6f, 0x5d, 0xa5, 0xfa, 0xbe, 0xf6, 0x37, 0xe9, 0xb9, 0xe5, 0xbd}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} qemu_QEMUTDX M - qemu_QEMUVTPM = M{4: {Expected: []byte{0xea, 0xd1, 0x9a, 0x8f, 0x2f, 0x2e, 0x6d, 0x33, 0xf6, 0x86, 0xa1, 0xb4, 0x25, 0x05, 0x6c, 0xe1, 0x2c, 0xbf, 0x13, 0x1f, 0xb4, 0x7a, 0x3e, 0xc9, 0x70, 0xcb, 0x51, 0x88, 0xe5, 0x03, 0xb3, 0xed}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x0e, 0x04, 0x19, 0x29, 0xcf, 0x75, 0x1b, 0x6c, 0x60, 0xd2, 0x30, 0xf3, 0x92, 0x04, 0x4f, 0x2a, 0xd5, 0xcc, 0x77, 0x8b, 0xbf, 0xbe, 0x22, 0xa4, 0xb5, 0x38, 0xc7, 0x6c, 0xb3, 0x8a, 0xb0, 0x56}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xda, 0xb6, 0xb2, 0x89, 0x3b, 0xaf, 0x7e, 0xb4, 0xf6, 0x96, 0xd2, 0xfd, 0x0b, 0x6f, 0x3a, 0x19, 0xab, 0x37, 0x28, 0xcf, 0xba, 0x54, 0xc8, 0xc3, 0xca, 0xdf, 0xa1, 0xbd, 0x0c, 0x3f, 0xca, 0x87}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + qemu_QEMUVTPM = M{4: {Expected: []byte{0xff, 0xf4, 0x4d, 0xe4, 0xa1, 0xff, 0xcf, 0x5c, 0x70, 0x19, 0xc4, 0xbb, 0x8c, 0x88, 0xe1, 0xed, 0x5e, 0x6d, 0xe1, 0x66, 0x59, 0xb4, 0x4c, 0x2b, 0x74, 0x62, 0xec, 0x25, 0xb4, 0x36, 0x4b, 0xd5}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x37, 0xca, 0x5c, 0xda, 0xa2, 0x95, 0xee, 0x37, 0xb2, 0xeb, 0xa8, 0xc2, 0xac, 0x31, 0x30, 0x7f, 0xea, 0x3c, 0x1c, 0x49, 0xec, 0xdd, 0x3f, 0x12, 0xfd, 0x39, 0xc1, 0x7f, 0xe8, 0xf1, 0x31, 0x1c}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xb3, 0xe4, 0xe9, 0x59, 0x10, 0x18, 0x38, 0x79, 0x76, 0x8b, 0xca, 0x1d, 0x16, 0x6f, 0xfb, 0x41, 0x29, 0xe0, 0x47, 0xee, 0x10, 0xa0, 0x71, 0xa8, 0xeb, 0x90, 0x58, 0x00, 0x3a, 0x87, 0x21, 0xaa}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} ) diff --git a/internal/config/image_enterprise.go b/internal/config/image_enterprise.go index 8e28f977c..14a5fefd4 100644 --- a/internal/config/image_enterprise.go +++ b/internal/config/image_enterprise.go @@ -10,5 +10,5 @@ package config const ( // defaultImage is the default image to use. - defaultImage = "ref/main/stream/nightly/v2.23.0-pre.0.20250429135828-5f1ef83a460f" + defaultImage = "ref/main/stream/nightly/v2.23.0-pre.0.20250430113110-c5ef866cdc63" ) From 1998fb877f374f475d7b89f006859d25752e1538 Mon Sep 17 00:00:00 2001 From: edgelessci <71088502+edgelessci@users.noreply.github.com> Date: Fri, 2 May 2025 09:09:43 +0200 Subject: [PATCH 242/311] Post v2.23.0 release updates to main (#3790) * docs: release 2.23 * chore: update version.txt to v2.24.0-pre * chore: update CI for v2.23.0 --------- Co-authored-by: edgelessci --- .github/workflows/e2e-test-release.yml | 2 +- .github/workflows/e2e-test-weekly.yml | 2 +- .../_media/SLSA-Badge-full-level3.svg | 47 + .../_media/benchmark_fio_azure_bw.png | Bin 0 -> 30975 bytes .../_media/benchmark_fio_azure_iops.png | Bin 0 -> 29702 bytes .../_media/benchmark_fio_gcp_bw.png | Bin 0 -> 30401 bytes .../_media/benchmark_fio_gcp_iops.png | Bin 0 -> 30221 bytes .../_media/benchmark_net_p2p_azure.png | Bin 0 -> 36902 bytes .../_media/benchmark_net_p2p_gcp.png | Bin 0 -> 36961 bytes .../_media/benchmark_net_p2svc_azure.png | Bin 0 -> 38309 bytes .../_media/benchmark_net_p2svc_gcp.png | Bin 0 -> 38395 bytes .../benchmark_vault/5replicas/max_latency.png | Bin 0 -> 21327 bytes .../5replicas/mean_latency.png | Bin 0 -> 18809 bytes .../benchmark_vault/5replicas/min_latency.png | Bin 0 -> 21414 bytes .../benchmark_vault/5replicas/p99_latency.png | Bin 0 -> 24062 bytes .../_media/concept-constellation.svg | 460 +++++++++ .../version-2.23/_media/concept-managed.svg | 591 ++++++++++++ .../_media/constellation_oneline.svg | 52 ++ .../version-2.23/_media/example-emojivoto.jpg | Bin 0 -> 141236 bytes .../_media/example-online-boutique.jpg | Bin 0 -> 263458 bytes .../recovery-gcp-serial-console-link.png | Bin 0 -> 46134 bytes .../version-2.23/_media/tcb.svg | 535 +++++++++++ .../version-2.23/architecture/attestation.md | 409 ++++++++ .../architecture/encrypted-storage.md | 62 ++ .../version-2.23/architecture/images.md | 49 + .../version-2.23/architecture/keys.md | 130 +++ .../architecture/microservices.md | 73 ++ .../version-2.23/architecture/networking.md | 22 + .../architecture/observability.md | 74 ++ .../architecture/orchestration.md | 83 ++ .../version-2.23/architecture/overview.md | 30 + .../version-2.23/architecture/versions.md | 21 + .../version-2.23/getting-started/examples.md | 6 + .../getting-started/examples/emojivoto.md | 22 + .../examples/filestash-s3proxy.md | 107 +++ .../examples/horizontal-scaling.md | 98 ++ .../examples/online-boutique.md | 29 + .../getting-started/first-steps-local.md | 277 ++++++ .../getting-started/first-steps.md | 235 +++++ .../version-2.23/getting-started/install.md | 442 +++++++++ .../getting-started/marketplaces.md | 56 ++ docs/versioned_docs/version-2.23/intro.md | 34 + .../version-2.23/overview/clouds.md | 66 ++ .../overview/confidential-kubernetes.md | 42 + .../version-2.23/overview/license.md | 33 + .../overview/performance/application.md | 102 ++ .../overview/performance/compute.md | 11 + .../version-2.23/overview/performance/io.md | 204 ++++ .../overview/performance/performance.md | 17 + .../version-2.23/overview/product.md | 12 + .../overview/security-benefits.md | 22 + .../version-2.23/reference/cli.md | 873 ++++++++++++++++++ .../version-2.23/reference/migration.md | 134 +++ .../version-2.23/reference/slsa.md | 73 ++ .../version-2.23/reference/terraform.md | 37 + .../version-2.23/workflows/cert-manager.md | 13 + .../version-2.23/workflows/config.md | 353 +++++++ .../version-2.23/workflows/create.md | 93 ++ .../version-2.23/workflows/lb.md | 28 + .../version-2.23/workflows/recovery.md | 179 ++++ .../workflows/reproducible-builds.md | 63 ++ .../version-2.23/workflows/s3proxy.md | 58 ++ .../version-2.23/workflows/sbom.md | 93 ++ .../version-2.23/workflows/scale.md | 122 +++ .../version-2.23/workflows/storage.md | 281 ++++++ .../version-2.23/workflows/terminate.md | 60 ++ .../workflows/terraform-provider.md | 140 +++ .../version-2.23/workflows/troubleshooting.md | 200 ++++ .../version-2.23/workflows/trusted-launch.md | 54 ++ .../version-2.23/workflows/upgrade.md | 110 +++ .../version-2.23/workflows/verify-cli.md | 129 +++ .../version-2.23/workflows/verify-cluster.md | 97 ++ .../version-2.23-sidebars.json | 304 ++++++ docs/versions.json | 1 + version.txt | 2 +- 75 files changed, 7951 insertions(+), 3 deletions(-) create mode 100644 docs/versioned_docs/version-2.23/_media/SLSA-Badge-full-level3.svg create mode 100644 docs/versioned_docs/version-2.23/_media/benchmark_fio_azure_bw.png create mode 100644 docs/versioned_docs/version-2.23/_media/benchmark_fio_azure_iops.png create mode 100644 docs/versioned_docs/version-2.23/_media/benchmark_fio_gcp_bw.png create mode 100644 docs/versioned_docs/version-2.23/_media/benchmark_fio_gcp_iops.png create mode 100644 docs/versioned_docs/version-2.23/_media/benchmark_net_p2p_azure.png create mode 100644 docs/versioned_docs/version-2.23/_media/benchmark_net_p2p_gcp.png create mode 100644 docs/versioned_docs/version-2.23/_media/benchmark_net_p2svc_azure.png create mode 100644 docs/versioned_docs/version-2.23/_media/benchmark_net_p2svc_gcp.png create mode 100644 docs/versioned_docs/version-2.23/_media/benchmark_vault/5replicas/max_latency.png create mode 100644 docs/versioned_docs/version-2.23/_media/benchmark_vault/5replicas/mean_latency.png create mode 100644 docs/versioned_docs/version-2.23/_media/benchmark_vault/5replicas/min_latency.png create mode 100644 docs/versioned_docs/version-2.23/_media/benchmark_vault/5replicas/p99_latency.png create mode 100644 docs/versioned_docs/version-2.23/_media/concept-constellation.svg create mode 100644 docs/versioned_docs/version-2.23/_media/concept-managed.svg create mode 100644 docs/versioned_docs/version-2.23/_media/constellation_oneline.svg create mode 100644 docs/versioned_docs/version-2.23/_media/example-emojivoto.jpg create mode 100644 docs/versioned_docs/version-2.23/_media/example-online-boutique.jpg create mode 100644 docs/versioned_docs/version-2.23/_media/recovery-gcp-serial-console-link.png create mode 100644 docs/versioned_docs/version-2.23/_media/tcb.svg create mode 100644 docs/versioned_docs/version-2.23/architecture/attestation.md create mode 100644 docs/versioned_docs/version-2.23/architecture/encrypted-storage.md create mode 100644 docs/versioned_docs/version-2.23/architecture/images.md create mode 100644 docs/versioned_docs/version-2.23/architecture/keys.md create mode 100644 docs/versioned_docs/version-2.23/architecture/microservices.md create mode 100644 docs/versioned_docs/version-2.23/architecture/networking.md create mode 100644 docs/versioned_docs/version-2.23/architecture/observability.md create mode 100644 docs/versioned_docs/version-2.23/architecture/orchestration.md create mode 100644 docs/versioned_docs/version-2.23/architecture/overview.md create mode 100644 docs/versioned_docs/version-2.23/architecture/versions.md create mode 100644 docs/versioned_docs/version-2.23/getting-started/examples.md create mode 100644 docs/versioned_docs/version-2.23/getting-started/examples/emojivoto.md create mode 100644 docs/versioned_docs/version-2.23/getting-started/examples/filestash-s3proxy.md create mode 100644 docs/versioned_docs/version-2.23/getting-started/examples/horizontal-scaling.md create mode 100644 docs/versioned_docs/version-2.23/getting-started/examples/online-boutique.md create mode 100644 docs/versioned_docs/version-2.23/getting-started/first-steps-local.md create mode 100644 docs/versioned_docs/version-2.23/getting-started/first-steps.md create mode 100644 docs/versioned_docs/version-2.23/getting-started/install.md create mode 100644 docs/versioned_docs/version-2.23/getting-started/marketplaces.md create mode 100644 docs/versioned_docs/version-2.23/intro.md create mode 100644 docs/versioned_docs/version-2.23/overview/clouds.md create mode 100644 docs/versioned_docs/version-2.23/overview/confidential-kubernetes.md create mode 100644 docs/versioned_docs/version-2.23/overview/license.md create mode 100644 docs/versioned_docs/version-2.23/overview/performance/application.md create mode 100644 docs/versioned_docs/version-2.23/overview/performance/compute.md create mode 100644 docs/versioned_docs/version-2.23/overview/performance/io.md create mode 100644 docs/versioned_docs/version-2.23/overview/performance/performance.md create mode 100644 docs/versioned_docs/version-2.23/overview/product.md create mode 100644 docs/versioned_docs/version-2.23/overview/security-benefits.md create mode 100644 docs/versioned_docs/version-2.23/reference/cli.md create mode 100644 docs/versioned_docs/version-2.23/reference/migration.md create mode 100644 docs/versioned_docs/version-2.23/reference/slsa.md create mode 100644 docs/versioned_docs/version-2.23/reference/terraform.md create mode 100644 docs/versioned_docs/version-2.23/workflows/cert-manager.md create mode 100644 docs/versioned_docs/version-2.23/workflows/config.md create mode 100644 docs/versioned_docs/version-2.23/workflows/create.md create mode 100644 docs/versioned_docs/version-2.23/workflows/lb.md create mode 100644 docs/versioned_docs/version-2.23/workflows/recovery.md create mode 100644 docs/versioned_docs/version-2.23/workflows/reproducible-builds.md create mode 100644 docs/versioned_docs/version-2.23/workflows/s3proxy.md create mode 100644 docs/versioned_docs/version-2.23/workflows/sbom.md create mode 100644 docs/versioned_docs/version-2.23/workflows/scale.md create mode 100644 docs/versioned_docs/version-2.23/workflows/storage.md create mode 100644 docs/versioned_docs/version-2.23/workflows/terminate.md create mode 100644 docs/versioned_docs/version-2.23/workflows/terraform-provider.md create mode 100644 docs/versioned_docs/version-2.23/workflows/troubleshooting.md create mode 100644 docs/versioned_docs/version-2.23/workflows/trusted-launch.md create mode 100644 docs/versioned_docs/version-2.23/workflows/upgrade.md create mode 100644 docs/versioned_docs/version-2.23/workflows/verify-cli.md create mode 100644 docs/versioned_docs/version-2.23/workflows/verify-cluster.md create mode 100644 docs/versioned_sidebars/version-2.23-sidebars.json diff --git a/.github/workflows/e2e-test-release.yml b/.github/workflows/e2e-test-release.yml index 2d7287014..9255a9a15 100644 --- a/.github/workflows/e2e-test-release.yml +++ b/.github/workflows/e2e-test-release.yml @@ -409,7 +409,7 @@ jobs: fail-fast: false max-parallel: 1 matrix: - fromVersion: ["v2.22.0"] + fromVersion: ["v2.23.0"] attestationVariant: ["gcp-sev-snp", "azure-sev-snp", "azure-tdx", "aws-sev-snp"] name: Run upgrade tests secrets: inherit diff --git a/.github/workflows/e2e-test-weekly.yml b/.github/workflows/e2e-test-weekly.yml index e1a10a026..1bbcb389d 100644 --- a/.github/workflows/e2e-test-weekly.yml +++ b/.github/workflows/e2e-test-weekly.yml @@ -446,7 +446,7 @@ jobs: fail-fast: false max-parallel: 1 matrix: - fromVersion: ["v2.22.0"] + fromVersion: ["v2.23.0"] attestationVariant: ["gcp-sev-snp", "azure-sev-snp", "azure-tdx", "aws-sev-snp"] name: Run upgrade tests secrets: inherit diff --git a/docs/versioned_docs/version-2.23/_media/SLSA-Badge-full-level3.svg b/docs/versioned_docs/version-2.23/_media/SLSA-Badge-full-level3.svg new file mode 100644 index 000000000..7154d4a13 --- /dev/null +++ b/docs/versioned_docs/version-2.23/_media/SLSA-Badge-full-level3.svg @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/versioned_docs/version-2.23/_media/benchmark_fio_azure_bw.png b/docs/versioned_docs/version-2.23/_media/benchmark_fio_azure_bw.png new file mode 100644 index 0000000000000000000000000000000000000000..a82ebe2d0511dc0a54f663e23c25dc275edaa15c GIT binary patch literal 30975 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�awQ>N&Uf?MYaB0>911Z$XQDz2h_WnZ`HC#RNE z!^--ER8y`idG#DJ^S*`AQZ)A?B2TZ|+U9cym9>-1W^uOW7)R$)K(^14rJp}O1A@Q{ zrD^>B&i3~9ZwxdFrH58lL-w19_n8aC@{_8<#c;ask%ydW%RddczL*aLqkmYN)lE0BH1lmwgU=85$AaQkE| z$SA!pvu{qynrTubh)%=0x;k&Y^)UO=M~e#%SZ((lWO%{q7xTG2qf>|%t@mm~3CN3^ zB;*8ARS=rkK2EE0e&mQyn6ScOm$F^=^?VT&0`)6)?tZ`SpR&h}CF@FdK|>%7xxfiU zx5%czMh3VW2Z$hyW>-x#Aym}S^GjXH)v>N=xpAZIluKVZBI9qG{dRv4lav6lq#;*& zJE5OSoklEO$qBIcmXjfQ;lZ_;sps*hk_p!0mCbP>Q7K(j3Qx&-mLWjRC1eVu8h+zk zgZHp3-edegsM#yW8p;yYBy5|tp7!>c4w~&DSGKS1X}gxuCpY@tcH^hx3qCUN!^4So z?GFP~x3WJzytc*eJMau)MpDwF(lonTEnJuREW26S`p$-zQk+tF9zF6OpItsBhB{*z z?QPYRo+D@ClT1tMUhQXPzZFTzns2`zK69c;0XYg0(_9V(H_;M$4~?EsytW(_KoWp# z@t^?#7qfr*G#4*qBsS`-B}M%=gOG4FRcVtKr&Q)3PRV9QL2RtaK{s<=!FKN7Z=;9l zX->H9b`ZpGFaCGo?JMr35xAw5R&ULgGSc1Y(e68OOQCn2#utg za)wNd_o&;{JHoSw33ThbI|FvL-R)PN;W5NKg{r|22tSQPGc>+a*51m$t+;1T;iL2z zq^+9MCO}T9&0Mpbbq*8n*5=I5xXC)GO0Y8qU!hWnAK)8%KXQT!%Cf|(fs68<&3e|# z^ZAZ@*aDUsvn_?2_M<*w{91**85E)G@70ePN7BSCmMOQGabyl|9@%dJV=my!%^~JS zmRX18${kV#puUvvWjLO|^X0nv0VMXc(1Q8Z$ie@dotLr`j8no=EmIAwyLI|n|IjZ^ zzKRH*%eHNF?-Nglh{%W;-s*IpYp3x#M>B3EZ-SY=g&=9A%^!YYKQ--4?Nz(joabN9 z&n_bS400Dfz{t&$k%?V+QoJZLVDy!YPx0mnEs3o5*AYWn&FeII`v5mBz<&x38|JOx|aQ$U5bqOUiL;=5ol9X+z3G8-vhVV*gk&# z1U?59UF0}`A61SBVG4&ZJa}-I(`iL;3cKJk^a@48$xyK3+BbLW`V@eoy|u8Qw&}&- z&o7ZL5L|a+wsPvFgkAP8^8-z@)NKMC9A2t%obtcO8>`RH=M@&Z0X4?}1)X!x(tz9G|N6yzoOpFvTL73im?9OqLZVg3 z@6NqZ_ZuafRZ`(tXnC0gHwn3t(!~!uRBX)(Z}LaB0gV%|~fZl?QN@Yvb!b6~j$m8;wv(vZV&0mlS7;Zx- zm*TA1E_9!Yej>Wc=K4A%5K2Ib@qEkVN`#-F(U1IsFuS0dScV zKA@LX(bFloizcx~b@r&M1GP|A4;{4vRy|JyT5VV|@xK~ooxJ+*|3@YNZ$h`er&n&p Wd&#xuzHQJ)b^FlcgN%ubHvR|v6RGR~ literal 0 HcmV?d00001 diff --git a/docs/versioned_docs/version-2.23/_media/benchmark_fio_azure_iops.png b/docs/versioned_docs/version-2.23/_media/benchmark_fio_azure_iops.png new file mode 100644 index 0000000000000000000000000000000000000000..1723257a812a773fea286d512d38ed9186a9a46e GIT binary patch literal 29702 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 literal 0 HcmV?d00001 diff --git a/docs/versioned_docs/version-2.23/_media/benchmark_fio_gcp_bw.png b/docs/versioned_docs/version-2.23/_media/benchmark_fio_gcp_bw.png new file mode 100644 index 0000000000000000000000000000000000000000..4f0ecc94bb43d5f9534300605a74aca374da4c3c GIT binary patch literal 30401 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 literal 0 HcmV?d00001 diff --git a/docs/versioned_docs/version-2.23/_media/benchmark_net_p2p_azure.png b/docs/versioned_docs/version-2.23/_media/benchmark_net_p2p_azure.png new file mode 100644 index 0000000000000000000000000000000000000000..9130349c764286e66108a54ffa77a2079807a57b GIT binary patch literal 36902 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 RMnD*58gDV~*w6Df{tphRb0+`* literal 0 HcmV?d00001 diff --git a/docs/versioned_docs/version-2.23/_media/benchmark_net_p2p_gcp.png b/docs/versioned_docs/version-2.23/_media/benchmark_net_p2p_gcp.png new file mode 100644 index 0000000000000000000000000000000000000000..a41557e96c15e5407beadc5011a3f3fa6aaaa71d GIT binary patch literal 36961 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 w{l|Gl!_|L&u}A+)itsPO`I2 zbi=ua-`@M2U;8>g_St8D*TuJ7E?~Yf#`E0uj7OK`FKk-RxSo!VZWBdXN|BCkRUaMQ ziiyA0;%}0U&~xD*!nWtsY?UnZZ5^&z-=vefW@~9`VQXr1{cro5);2~K=6u{j+{cgo zZD?z2X(PhJWA-24z-?h|z$3OhX$yYII!kGF8#+3MYvgN1jAXPC9o@@q6sgl!976`% z90E4=E-#NZG!+aCsIbdONj;L9*mdwSRr>Un&@HS|o9;-xk=nHG(L3WaQng#Q=DSTW z-s=l}H*nNsdTH^eLyt@Ou&`!hda<)ak_op-PgtN!PZ%HHNcKo}vA!4YN_;#W9pyV` zEZ?6$(fw7qg8bq4U#oGi_@5))O4~nw5Tjcm^5+lCx9FJu{DI-rtXItoZj|L-$|$Ykqw6W|0i5RhJel4;76Tbr@!~6Kp;BuMcOa%Xe{j$*C$| z6!5lO=KXQk8O!{c&L<*nbGC{GU)XRL(pSrZ1boZ%mBPfFs3M${PD;lT{TKIDzq8`C zvfrBu1|L;T3aM3pq`bVecr&%>Mru>1_(+Ogae@=OLRiS}K%2@~C3d&P$p#sJ?oji# zoR=}Q_rYRL@6+9iy_sBCX|6BEx=W(lavkE&++Q!^vE-^~z|OeRR!n7(eW}s>szpaZ zBEF$SKlNKl$wfYcaxcH0=5!Orla{Y!ULK9K?XTuI_jrf%Kx}kvoHD0bM}c^K-hMI1 zOWL{i%8$0Oy%03hShITd5r^Sc=kAxPJGO13{>@&sX2Y(SYo8u`4;D&ZxoXu*2{-4R zTpCwcJQh;yhnlYT4aF(PGtZp45zaI4V`wN5pBH;2R&k&`Ki7M| z@V4acl~ym=6__)NUneIgzc;8zvhMzF)K~eM+3B_W{ylnWS3j<-OV-tO8vAwm>eW}( zQF8JB+}{vyN2}K;bazuU;MMWt(M|H&%NHm8{GdWBZ&kDc3vJr!$A{Z*%jMs9I+}Tl z%*@YoYG#w|u3KmLnPgLSfYZWOLueSCVPL-O>vxa04ukuoo3EDC1z@6^u~F3r*2 zH<>c>UjKZSD;f`Ppgu9!n^`>0d2*n?J>O;Bi%+Ys-zt{Ik9e{AiaMBQ8XY`%ur%1B zz=(A(MIU!uRXy00T709#uS{mU-S4R>L0yl<^cFkU*>3-$;^N|=1*+`Nf9{thY3DK< zidKXO>m9ukv!!b+KQFH|I^5kDzwJ#K%eHNuFU&tZ*p!mQ7v+{~-7RC{bl|{&(PqDZ zjE`1-{q@)JnrH=|hWFyiHBoYU;_|+H3N1^m**3+qCrh6lxEqM;qW&5`J>ByCC8u1W z`=Ttqwz27^WLy5c6RVbTJz+lMW{F=Tf5UD;tYg`MW5vOXI&TysWgZnIy*}%yG0z$0BIqzTNi!&8 zsjG^(kT^bo|JRoHsGNV3CE_~sj`IBA{ZTvyygRF0cS_WaZ`4tZDTfZXUVe{SnrBza zfbqQEcqw0n+PH3>Bd;_)w zmjy-QDRCY=c&07KuBJNjVg#2*ZOr9?w%p9&w%lmkl~H|yx`_3!hvngt$)TbS##n(e zp(5#1BOS>Db@8-c-+V{EFVBwmDrcCgCu--a=;-Je*TucWPeou)_I-VRC`ia6?5IjY z%-65dZj*JYjK{B@@+x`a<#naRkIQa)xXrQq&}#wH#!IhXzpnq?;jwIldNJ1%Z1Lj2 z*|lv2ZknhvHA{>0zWm|R1$ceEwi_QjcreiUfDind9}Kk zB#m^LRckjsoYZ=@hulPij*Fa0eZq5pe}9RYAFC2IGvy7+L#iHaXHPS2I+4FP)k1xX ze~CNyWS5Va55pU$@t&jV@825NC&c0o|11G)f|C9q0kdZQb5c^Q*Sx98c>N-wPs+o@ z<0oki@mM?5w~O=B@u%;urG#9pn3`&_KoPV)s#}oP?$jH)T6>BVzHwtkfzhRzE}xyd zc12;W#bev?M&TZFGt63c_1;tnIR5im>h1_^g@HhWu*;}}FM0LOM;kHZSfK30xl9ko zq7Hq3!BKOzx2mB*HRAkJDy!SlY;V}4gtMaL0lLmZ8H^Jj@6u~34C;6++WDuK@adPn ztCkHp$=f{9RqPX78>_UB5{11hUz4O;Xs#F~Ys4D3Ti3OUY?hl6_JfVrR<2y>#j1o2 z;%KHf)SUj5wX3U3Z`U!kA1BK4U8WOMRtg4}ksWQ66CXX{Hb3>$D*uu8-S#virA(vx zByE#OTIK7rd4400#1hxeULH>y%4~R5tP+vxGHt$n&mKe8K&&e9pi*JS%EetuT$io~ z^BYmqho2w1kR#WSYM{W`MrFImti5(C&!&BX{8U-2q{K0eJVz@<1I{MPJi%nG>}sP^^6_2` z#}C_Xa+bZ`k~u84I8k$+s-9(e?M_d$Y18}j)LFck?Y7wrcNuM2_u;W!O4i9|r9@uz zuUC*O90d&y?^f>>&=WX zX}Ms*^rfDlnH%p5^|T|-Z|cU*DoX1v@%Lw4To|v&vFbXXP?FIQ)>|5=By9c5@oR_# z<32&t%G;~xckJJvpsMR8aM~X=!-O(DeNk(wBjVI8?;F=}k;d(L*ATe_aMJ1&tP{70wHxz|iE9vOa#hO!|pBl288f@A#K3UA-(HH8_ei{GP zJu;HKaqo#3*V!>fK7Fr$K7G=WL&2t(*DZta3V;A4vw;ia1r~#7<7d%oZ(ojX;ZKDYV7AvI*1>!XilSGDJT!OX7Ajx<&|vUiCB$vW3qTw zh3*^d{fq*YEgmkT_;?4$#COi*7`!KQ-ArMpvA1X+Zx?3A$xQ~HxT%PTGdW%%nJYWe zxN00_Vgg;}sK?R*uB`IiwNLyvzwa<{mSteqb?#?tG8Lq`9{rL?-!GbK#l*C_ik>Ppy}$Vq8;)R}3W@my=jq|Z%F0UmM$Jbh?&2?6b+?bS=f|(x zemDkChAfALg$1$&a_nfvAMdQ;?zI~HZC4kkO!}$B!tb-)Wx)+|Wp(kY6>(oJ4e-mI z(ez%Tm#ta5HqP?rKcu&|Dn;8nB^Ef1N4?~6aPpWR$^=rr@(^;i_F6m%&c0k?RS#9!Urk+g>7Tyfpzwk)epGBxjSUUYJCDdteP=y$9t zKDoeHdwTt@V=>I)&L`V;i&{@AQ|a3>tCz(a-If=p+j^YPj-99591>mf$Z8?$SJXbC z#f6dLOiRrCMWe+B3t0?IcX;^lviQgi+NW3g=G>Eng|a}tVx#8%nrJ!n zi?(6D;4*#m=WhF^?dylt0PB)8mcS`7xfk2O8*qJu*e%dpVskMZ@f0M!(CLvrVOn} zy*MU!^Mri3gxQcUU{g6Gi{^MafjMtc4vIR$;-kJjfBrm5HCcz3`79oe(~rfO;~;8g ztbw?=y?S1=sG(k{=+AEyc{9=MCFau)aeqosPfeKZ95a59Yi()Tu9>VO-qqcGb5U|& z1bu{$AYJqE7i<^(43i(R`DF=OVMTQ$+9ru8h`Y_D)n&iTeGP(9)nk+AH%)7(a1P}e z*s^8IRrJhXCoBN39CFLC-U9J;PLw`TBmKKfs{7)cVMz#|fww?D3Ojd0Fo)9NL*M%M z@6%N3mt2}T)NJ=%V)fd!L116!MAz!gX^TeLh^<8tG<|>LTjz;N-Zb58>qxr}#ul175NZDNVTT86k6Ax>B|YJQQb8|L#^7`>1-tLyl4O|-9H zJYC=E)_j)+4RfuIL)PpAavz3TGUY%Bp0fHLJh$Fv=J!v-an_r+h68j}OC)Xko=t9v zI(2)cetC#67Aap3F7VF=s*6~18OiUp&z{=Q03=-ou2Tk#Ee9AK^8G{{%92J6r%Hk$ zV3s}>m&w#ni$RXVh%0t?akMl9%0?&mb9g~k0Zb?}FIK}DXo!|4| z{(bfQ>baSjfG}~FAhe&LRD+5j$>oI_4(Zvk5}pVyhw+{=70WR6kMSA>$v|Irg&+cl zt-6ZTi!*aOu3ka?1Ur`1zRHyAQbSq6NUP9@NYeOG``jw#DN^kb@F!TJaHE&9c24N{^|(4**7r z?guqWj{;zC?w*or3orIz5sFoeJVBMsvF$I-vg#@&SB?@}1}J~y&fUAAQ}^2-Zpj)N z#y}fLs&P+asj zWj4%X$?4EH5US!mdYwC7T|5EwEEKPrEQrm^hwBjtcO83V$1w5F1|BI+KGo?JR&AM= zo5nkn#*DvF+3Lr1T!sWvfwRdLN_7~~sev43(!9?i@25S})chOVevaJuk*%m0oqMEo z3S67ki$u=2tvA3*Re7fKR(k7rlRko%!O3;7vmZvwSLWw5L>GrsXYT$*gqO1mT=Ou{`)b(90-&FQWZv zbSZ?18F6JQMa!G_W=2!`=-PDne$Z&N+Uf>}r%v{P^J*UZ|3w_H&|5bN(5g80khA zHk1#NW)*4IpgEIm)0@y$Jo@utmwm2i6u6;Yo#6$y$WB1x`nykJ${x0@c>q1?{n*%S zZ+LDSi`_siFV%*|=#r>*>eQ_oi|Q%@1SfNx_XH9J&Y(`?u17vij zw_>rXwRFY>+Mij|mu}KvFIp&m^-*k7+~VzvvV}wUwl$2rioWPyepAU(ZkY1>> z2M`h(gxS+fNy{TwVxHBVIc99K*X81#dD`xzjN(xp)N9fDyL~YX9Q)DdONMy&gwrho z#am{(7T;>D`?Skpthd5~H4r*MmfUuMQ$j^*$$U{1-=gl6YaTOHkTaS)C-;guyi~28 zpV0N{XAc;2e!jQ9l7UI&Mw^Y4*%oInEtNi#fkc$dKItXi(zpi^MTDQhX-nh4`t1F>}MD{c9t$4xV z3!<9@FwyU;AaNN$kF9OwVGl~7DyrH<^+g`1R-t_QO^i1t*P@CwsEKZMd2#+J<4rf8 z>Za#G)6UJP85?QMjzDJ| zz)#7CIyMz*YIN@ zjFEUGG=R5yl-rP=)a3${(O56m7Q>{-vvFKr7ij0Lz0F_fg( zNM7(*Ud*fujLJ3fobZ@$ZAR|RLyzpHJiq_NQ_I?KLbAb^2~hX))^4u#4#$bP&>4l=8Pe1GRr zm#IPSV*1sq)ut~1JUmj>>H6L-+$uVfr{}hgH4gNQlA}8u?lu)zBkp6nEMWwRfKklx zU5gHlY1&RUbf@Ie)qRc$MB`gt823?(mgmy*0yN!b;?oaZ@)C->Ek4a{yi7 zSfng1Efb6eSKN=-CuDAj-Vz6)k2r$2Zqcn-vxWom!vIipLWwK3yq=uR!i?1)QBck; zSkSE1UHfAwFvSsk7q=(G!D18jVPXyH7P!v+xXX}6WN(Jv{XQQJ!rcUmZenvBYZhad z4|%s_KUgIg2X#n>3U_E{Z(i|zaUQF(+%B=vpAd$&9TwZ zDv&FF=Ly4nLIXcWxQPo{w7>B2@oDLph6%(b-Z;{-^sNM?Sa@=^`3PG!(1!eNdD+3< zHI(n6qM0qWAPz5JPbNU**XSB-nS&;p)h0iG_dLgxnRcdmXiLX~#q(m^gW;E<0EXK| z(7v_@&!c^(IgWO!`8xnB3m8>P746x1Ozn6*t?!fd;ArdfF5cExr&ndpyMBFkfZAzq zijCbqB;k{cG9seQ0J+2t`Y@N;yHjw4tH5QIQ?8#|g!aJQD+wm9C`8N}fIv|M8U8@VFD0>kOLsOV)J5s(;LK6eMOpJ74b37>J-6r+ZNpq91J9SERP8F4w^V2vY%% zLj}w`LN58z>pSRHhx?Zdu3mRuIRs@{k?c08&rv*u3yM%CL4GsMuUzj^i?D{EbTV=L zG*Rf{*a%&62aJ)@R5istE5n$P3poBUXWf2iay9IqJ2m;Xc4#O&40eYdIQxKJ=e(@Y zZ;BB<)p@Qzdh#24xFH}-ec7q&mSTRnKtV@#k7g0O?abM;p%2hDXm~xuB`tcouXpU@ z-L4wP;wM?0Q~ln%9gA(Gqhte_?fE*(!j`jow4G=6y?DW)6sME#JO|ti_3J?VmoKEe zTK|&fY>Sw2gXUXh+WK*IaoWd} zFXauo9!y-&|7vi&NNMTcGZEvgRPJfs44$T>6oc-=>&-FO>&u3Pc)WvmYoL@NI=;N8y&RJXx zv(|2I!U+4I((K~-{-yk1*JtkYn>DAMOrE|r<#Fb~ zsbam76k%H^tcizXp#~~<6u4=Z+tBK{64g`BE0&gR$6s>wyIZCpkl@%&ME-F1x!9cx zBQ2Rc@*NkZCMVOw#75e3h2&}EAplQALLVrOS098_knn`8GVxB)cT>?3Teoi2cz@%O zKzqAXYefZ*hGn<0TAJbIJHLvTel>5Ok~_10!-g7Ka$ypPCnui9KtpnPhDArxhTYsp zumJ%3&vPAEO;2w!P#a6?5BxYtO%aZDtgxQhHA*(jZ%I!-XNrc9`0CZ)(FeFc-qriT zsL6M3UM^P8Mz~nx*=N_89&hnwRJI+h2XmMz!Y=D0BxX^d+(LRPpSen~+F&G}fivHe1sP>0$GbrZ9g8tBne z!4CK!i9i01YGy4Cu7Lri?y>vGrBlQMbe60Og?pvuQJkI~v&d9i7A&MWl2>%&!>tu) zcB$vR_j6cSjGRn7o1;6Lyv9%+8erfh-F0tsy>zI^6K!WP$(uNlRC^ z0~rpfLktar3@xm^1*`W5OJA`2^>r)d@u>JH{j~}Yt#NMQ-i}aoLQVt;z6S}!*N9Fh zK~~mSbUzu!FjP1~R;yePf67up*Zkvqq2i5;9m`A6_3Iz27BJV|74r(_)q7AfigvCTF5$-7#;{Fdt}kMbf0tu{)$Sk770L|% zr1%|Ans4=OOn!tNmE$`5UcjBu-;Q;_3|Cq*%#`8HNmUdsHWK&5i@|8H&_Z=F8KEB? zh`B0`j#;qgX|;K6NvK<6Q&aVzthO-i91A^$15`PBY?9(N+!d}eY+-q87mR+c{F7I& zXybk8s%339Fl&?PnXImPg#LZNq&sr{_A-ER_s|g22)+Erj~_{~+_`Pr8?0oF;)cGe z2vUjt$4@eE2(#q=8@1+}^50wGF6z3^o`Wj)zWsuO=~1pWkE26fU56;V_CI<~mW}EQ zA2}l3TM^!Xx~7+yVxN%s*rc*g?a5%{#@d(UH!}q)!%vVeaj1QF?QDGH2W)@6p=U=@ zn(l7@<`k|PcZE{DxG$@*Jzn;!#zq&LICyw_I<65Y1@;!+H==&{1v+BGTua;iW*xof zTLweNCt<=tn)Lk>p{P%pKj{b~GI19>5rSH5VN9l*AI3%BG;xKEmq`B@xXxO187zt| zd*t`vY2`!>)T$(Si?tbjP zyy%cQE-`39+<~KtZy$Q`&cP^6XwIJDx9|@ssZNPhxPnfty0kExsOs=`xuqWJ*_S;( z#Nv8h0zs$DNka(sY6-eF{~NNRbdE>}U?Rd-z|6bu?J7qCg+%WbGp_jMcs zgG#-3?Xgtrk@-5>zck_sR?h9;m6hBzc1t8>>#IZR9N_LnJ}f-_?p&s|(^dKT`H2n( zq7}l2$J`pBjTkk)yG9)@+&w%aAD16pjwKU!!H3y=+zK)_p#{`oAt#5rQEyJjw3&B? zkn&TPTNCm4;loQ{+&i{zJ;1}0e9~^9`#a>~1i#gkrWc|I5B@U{Q(RI~606z{hN8}O zXl{CBWU9Xx0T*Q$aI0ypT_|{Ib8GtQ;{8kLPXL%zk&QL;`&wpxtP5lDzI-N8d#PY| z;yecDdS+YMxzcwat_T)^k`#!KeU08JE||>V=;Wl%bQFuG!`QF?>z;_sOd>~MP(!zr zFZ(O?W{G~=E%}g>RX59MpIk>jrrf2dj&Nm~G|1x{a$Kg9nlmj%-pgX4TdXkK(~8XZh+`~asI96ap_Q7^2ZDzH!$+lk`HwS7MhvnOv&xvBHmB4wrATI zXcxGugBfRPaD7oGIQQ`Aq4Qprvus|VPDTqeqXe2M$?4?U53#oKM8KKL5{uRX-+Osf z`F)b!qi@Vo^K)}?h(V=9WlEYhrkkjy*<3(fvz_R>?BwKRG&j+2<*d+@a#l>0s~vZn zjJjW(v)=*ceq#AMcNpM?`7&yU5MFrTCJkiVVhi6Xr$4$YiJz^MibpX_ga3(dQn) zv7B@Xm-Hwoc{PY;$!ouHPm7ZPZ2R%WBav91Xv$4a7gc(atnnYObdGPc3Y2$*@uX& zHJLd~kk`M@gi8|F|w=V8JDZC6?1nwyFj5!=lk6$%pG5Dgm}F{-ADbl^~L5bE`oRp{L3( z1(HPDnjyM%0+zPu>1(m*9GgF^Vn zON59{B9>kVW<0;4gAy7&dwp)nz|@FYup%Xr7=!DO*`&%Mv{DKNT1reSyv95q4jEZJolcHYx%sb#-Xz7DD;iF@=W*}s3krmtWyTjvJ{Y4 z7ELYDt!rSuQPh6$UAZX!S`c;n1PX=V1@Ha5+YiegCpC0bXwUXy3j^X25NEW?`w22q zYDVN*Q?GwnZ!_E~oNCb_0aVJ;)!S>p8hG&B;{a@yFHUXroA&d`EaHSw5FFvX)nu(m6np#K(?KIT)U?LfF^o%?d%|ZCp zZll9sV-@2vxTso7EzBgtUZ>)ZqoPG9Z|}#RA-2M2H*m#fpq2w(-f{p$=|H?ML?2t- z=*6Q<(5(FvEVSpb{0KiCY)ttSBI(g?+ELJEORF!-$&kudmEP!GT!+0DI#q`6E``lp z1|vugl>pJgp&>IOMW=Z|JrLFQ7c_0WimG6N9J7hU@`8=;iJLMe&Vc@*Jx@!fqxED` z5h^o*!t>dJ`VB zR`ieysIN9RJ9o!vA7_RMsI0-*c53s{#Ju#|SL1fdblx6L&w1)M2(#IUJbKN4-=l|` zV%(jI+@C&HXT6;zkXyaeVT81MAU$*YUn_hd88=UD{F4r7pcBX9-od3&D}4fC+8#W1 z+aP3IY@;_&YCr0y2I5C@wWfd)1RP zk_+a(cQ1^ttAq#=$}GdGa*NsjCoE=rmoY6EFLo(*0uYNXlxUt=or@ST`9$*u%}AM@ z{|d{92}A7;zj;69E%XOr7e6M4}<2if0~p&f7VD1yEb1U-h$+VkS@i4)bfBkgS*r=E(C zvIb9Bqd(czpmGQ3|A2`$6%`wt#4>TMG`RY-DSBgDbN0&HQ1za)O_ z#SPSsL2F^Fb(L_}2B#c}OjhFgS4tcG=QN9!bQ6O_A#TJ8%OI_8?;7DicBjWk z77fT`Xax1L*eLYT)5F8ke$a0w5tKTD=p#h;EATu+gANKB*Gi*(WI`W`LO$szXwCYK z8?O|&&Jx#wq^AiY$To$f`jlB*gM2Fy&|t}5Mluc5LIsk(^7|VUw}sJS648FJaqqV1 zs5h6pzxfjBw+aCQn3G%pwsKI;zlR8?%Dg!88ePQ*SBP%fuxjLxC`1-)*Q~)xwvtf5DO~04Y4rO&016dP#)VO4mgx0Jr zM;W4%5~vu7U6P>+MAQk3#*9VSD{&pk^&|PyVS*Oz2`D5-Po7kRMfe@TQ}T(BGC5dT zrHFKfgrJt-Pd7E}llMAI=zdRHMi!id0J@E^U6V)J$!Go6AsBYVYki>a*cOy-eGFMdettE1}x&+_UEhNxGH= zDGM0aR>IVX@K~BHjvbf10Ay8-=8V(=`_7|Rq%jO~2`QxYySWokzoqap9q!ng->{fE z`mKLo_o#BdvmKEgP;45YX+!|C9EI9=^zxf~NWZ-mcbSSo8o8=x9KsB0VKN*9GCrds zj6QyzCx3$afPp26JVA^0Jcf|Wtam~za=wS3D$#4FqzKs*+V)c?nLS(!{@zvx$u&_q zUL_XBtW3B>z8$x5<*VBy_%*S4`7Vh70uV)llE$FW);lA?LC7E%ypRrLXWrOS_p(5< z1XHO*n@UE=;|iF+L+)aS`+OqQN>%*oG7$!7WtX7#SE6g;Z|AUNWWZz;?+CSF*dv+@ z+#uJij2Ei}=Cgk1(YL6jhJ=SmD(`)%=V>uqEyiyW_3>>)E{zgIW^%kkjCMrM+97c26v zrustVqda94s77|__a(PWpNlca6N`Eo3x9DAiqnV_Q7VR zpxP#<8>lFlYAU>tQHIoW4Vr#;Z*MfHo+Q<-XpO+15x5_x;bO4BhLA1VLktu|wq+F! zIGSQFM?4_%4Ddm`ZlOCRlxf4i{{VRv5R?1xi-^ltQZexJBcXH}8K!|q;moe?ui-dw z`R!6cXZ^(nhp7`3)AsL%G(HJb@mIG=Q1!vkAErFr7O8fd4Wnd$D7Ibgs ze|oa)fJ6aC`mLo!G&a@um}yIf9Ns_!u=!7`kJ(cHcGqbT^I{RHql7-a@e?nK46niM z!(forqyHG>W4Ds72ekge7sKwu`{2FDnafiO+~1eJookZJJ~Gd)WX~D@n*2s$kvVT)9{qM^c%Nvwb41Qa_lKE`y|J&)r|Kqa$2h2+T z$JIEN-n)O_2&ze(TFM(V{B34)hHmX=4sEy14YOU{#{hsAi$z$!4197pxXjOXFBvI)mO!d7 z1pLbond(Rz#-vrzo@jpLbCto#(gBjlycZdM#NcJSGmQ%kuY|))O6nd7#*@rE;#NfI zsKv}iG(X%ORWc+2SV>f7guPS{hrv7wJBbxMDkxK+N-4*>=q1 zZzGYQ!d#b*qQO}-xoT)}p+$?}o8JR?BUF-gLiq!&4xZWB z3q2U!EDqL!2x7lVIoR*2eXNzp;H(cM65e$XFwIUOiG0{V(kCpo0(yCgTxgHVe@+VwNcdfhp4f<$_?ik*P6) z5@3p}ppX;4hzxc$Pe~ZLURN0VfsiXFv6=ylE`!FB$^ZZ`5aA}F!349I16-Pgb5*MM8T=tdfXeCM6NU>X{Rp1W456vN=rW!C@-Nc zhb@BFYvTF7LD`={^9*ICLGE{htk)+4swQHp6 zKP7Ua#!)<`ACCx>aD#d|Ha1ob?L#X{9nkWGLHXbgL;AIA2c8PGS3;PbMCaom^CIwE z$S*}C7vHRcfAxhh;_BuW>gSI@5Lrt2d%v0)@H-R04S;+qep$$mmN{0LG&(mF&;jsn zf{);ss;wY1E|Y-RWRYutRv1GyQB!vu1YDEHYnB@@l~O{#j$TGINgdvhjdRvj1FtGX zkl8Wm1Arh$G^Z%y>_YargoiZ=OGu<_8ZAe3%@EqE((RRNCg6PnZk&rld%a`69rykF z&k292? zbSPcouw$*7=}ASz6%b36EPryr`W0b`c)#B9FvSr{F zDbyCm5g=137lyV_Sdf(W%2Iy z7Tv5Y6RHu)OZl7!ZlezL=wA8KcCM$RSCZLp* z_;1gkN+&gT{pIpS75ynBN(fZ|0$Mc^0HG@%OjW1U|&9|5u{X`BPo7vZTEhe;ERe$hQP<$uDm4n6MJxHHclK*L?^@9#ypf4I=?>t$N)W-0GIQ zD9-(8K~+IHEu1_Q z3qAvSo>gWI$WrWw52vDgz9+3TP%Y!@RJ;oz@Ent{wG`~vT8w8zLZ~vti31Q3RMRY$ zv#Ah^Fe1oTZ_C@1Z4(W<`R#sT>lmc|$U^{ENt`ZYxpHQh{Q`cV0g0r9Wi-noNt?@! z9<`Vu$aMeU4Yf8B#&s+jkIHc#3LZ$RvlRmb5oq|Gtvi@;Z;n)uQEgIG5xhyLpmb#0 zTtE_B38zdX6og^`Se#%9>}{KY5A(=7y+FSwIy0pjJ5>NvaAXd6{Q#R0FdOw(?M7w> zc5Hrh6&e6d73$dwE=|E`BZ3{Vqw6p+Bo`{8Oe7IjBfP;XV>65d#Di=Vo3x>I){vjT z!le1q!73)!Ab~Ro7gf)FzQsunoWN^RhOXwAC=`dL#|fJWLq?u8w?o)2?$XY-W@|6G z*tfVt8GBsYeqj1I21t1*q^+0GE#762sD#qiKcQ_$A^u&OMFi;`54G|8_z^zAj6A_= zieR7ukkZJ@!P85xCRzl7=QZGruhA-EkS!;{5pTx0iPD3 z1URFxb)^qOv?7z2K__lL7AS9NX<2W4_UzfjQ8E)CF**s@Y69g+o<5niEP(gZK+G|s zpC#HgYUep3Co%Lss%ds^u4pbctTk_sv z%z=|BS|EscfJPCd+|GOLc?}OE1|G(!2Ij9{l3MMCQ74k14Rf1PXOeJLBYFv@n&Qw_ z)QqsAW1!L*LDk1w2_Y&SbZA2eOk{hLR*Lm*4Cpt90C`=+1qK-60`jwtfL8>eU{zm$ zLW2-|<^;kb7ju@)&RhT^uSEmk|F`30$l!NcH`|1}^A2Qs`4KrFraC4B|D7daKEvdn zd+P|VzzsaFZCZ`T%Pfk*Yu}PdR;U2lz(`nFgCBb0dHKHu z%rinTItTKJ^VDE0q{jZn6g^~XwbJeqCbNFsx+-i0LVqwHPwttZ>zd5`u79wk$lf3~ z3;DjEgn^O62BFX}!pF#um|y@#1ut6>q4qTNaf%|)UK*x)0Mlj3Ap$_VSTRSRvPeqE zk0iI?!sXG{{QyO=Vk6196KIhG9fgI~zrMaEIR_(p2Id45%UFQ?IjrF}ZoUK4H4%y+ zUj!(lp`!wH5j25vaS`ye5*UTKNvMf5(+|E)rFU)FH;WxUPxAyx$6tk=Vu_VgG&lf9 zpbrT#4C2f9b?7M6GXCovqAf!IrAG?=2Ti8?pK!p@e|j}n`N+{mtDmW%k?-8GgB5JM zR{i6l8(vj-Nl9*CNLHmkq zz#BjHz5(NIZ_CfTKlLxsithj88B_o1mH)p!@rro^D(@W9){xcNP=DFyxDiS9jzze_9iFXtmUOpPlQi$sJ-la-=BkCDz(&E? zlckIehywXrP+=00W}`qcy;IU13Y~*G0XOw4k~Bum!1p-&V%<6`;SqSN6LqS(M092- zIBkCE?(hnv0}aLRTScRfaz}gOR11^@l5r$3VicWR3EdrMe@GBz7wpfuH`E~w)W)-X z1k`aqtp-ar3S3xy97$GncvH#%>O@_E#z{aX;CXn>dmK`<-%J>=l3*TE{s1n;Y?ny2 z5Yr(76);*HBxaZlFG~1fWYmCxOaQeQ;X&|nkD#s+jgx>^oQEO22^ahFtzp;DCs19? za_@q+bo_QEmC@GcILbF|1SLPq?R%FDeiK5u9;AE3X=Wy|_5+nUkAB&WvoO@tjcU%5 zPJoZ*hrLV=7DE>2hC$4;i?{D2_Z5 zT~0q1>M=RpzYI2C4I6-XZ2tW%X+{x%O-4YG3jI>J$Gk3Pu~jrd{`mu zn1_c4nT7b1*G5dSEL2pe$Y~e1Rt)k}#47^klSy-^K`?@w!g%6_bQ-%X1|_PX8Q{#1 zpw(@g9e}XdDUg)BOZq|W>hV}`SjPi3e=>4}7lI?SG}i@PAS*|~Zx#LKJ|G7YP{nGF z2J7#`4zI(4N(brlAIA|F6zDkh0Qn(?vjChX@#SaR9tz{oGSYmB_27cfbnPedAGb`e~o%YgCM2iX#%^S zI4ZEd%B9}Jh@l<<8C|+bwMR+n~(~HzP7iX}0GN6z-i&R4ro?kD&SOVlB zs4ICA68pz3k+|j3$y39Wupi7O$jmg)^4;XIog`K&D+fP6e{&k}r5t1oN^P^vBRX*k zQI`IwQrLI0KuSs^XSjE7EY?(Rs0Cy;;toS)yk2+d0_3+^oH2z%w>}Y;x2hTCZIkqJ;9oZtGJ$lp#gRE3i8?ix~^O7HGo5;d|*+Q z8Rg|u0YAN}diDZ}gL@gc33H}YK5^NW4ehhe_MatT-V2b)>+vWf@^zOG%_6Uen8@Uy zFogK}feWer{__T0L>@#!1=VdgscZxA7V&+IL-`{_TEK>&+)A96oU-_f8NvXuzu*gS zYgGaZl4FLj{F@m&fTrVjJN)aoqOxvx0_1MZ9MQ^pN3!ww&H*&F%pwJ>H|iCnHKHdF zOs)c(f|UJrPgl~tQ@6sT+%cOKHBw4bPiM~9V(O?dI=O0D!$%8b^}El zzyWYdsJ@AerW7(nh@IPwK_} zAF#odA(WEiZb&%y1-G_{-C*NoVm2tbP9cs%G-zzonnSbOcCB#U)`;0b@>bwZVv3fH zgG}c@Oe3~4IoAsf-#U9g0wsjQ9o5Op!ef7nk3Nd;3&L@iajMBlXl-P)k#uPD_PkiK zOGy3}D%AF0i(^@H7$Z}DeP#``;qydjL$x3}C3$?XN{C;;tgb_@U925kJsAfg_@}(k zM!?{Wn|1SZ>|+tzzE>!SpRL>(gA|pKp`<*VEkt}`w3VG* z@5yCcDC7|3Nh9t?iepR)3Iz&<{Gc)tXSNKb)c%}Cel{XyS5@ISpx zb6t=BjimgK=Mw+bK=$2UJv^9|(#J6HL5@x<)4w>7@MG)0DBO$1?GN93SpRQNIgsj- zt@JPZ`@iq-*#A3V|C?CskBqMOT%x?Dgl=Np`!5&VJLf^~#erjRHs8ja{_i>L_W$mB z|GSRf{kN<6-Dq6(=05lb)Q=Z9Z5Gn{HymiIpK1g;Qr|KBfY@s#q~x_lL3vfHHe-d^ z_Y;KAaX-$HA!-{m13y-xHXv7ogA|PT*3y00-UI!Eocl(CAY_OM*bD{{bpkRn)cVie zu0%0~Ab$l_CHf{gcMZMG+fM==@KGxE<4Nf>Iv_NUhKE}Z5m^ILl){?zJ1(KpBP2@i z7#t-Xw*N%$nOe{7-au>#Xi~)L zA>fr*b+`zPn*99ym+&1)_z5DR5;7~HJ-X?}FHze&`O7hf1OuJu(8M`He3iXOe+3;g zig>6Z>9c^$P%X~^Ua8#T{?4_Gdth-B9`y_chc5b5Bs@WiIR#$BD;U>}bY{SbZa$DshyL9%S`P#1~m z0q~Vico7D|$bYglR_P<+5gOHHn7r^WqA@_LiR;9TMcU%7E`+!M=ZeDho;*GSbOu=a z&@K#2s1L^U91fodEeaR0`);I;vc4`%myYf_^@l(ognlv>RQr~)op4y^$2c+6#SMBX zBfsG@97^yOzlnV!&i5%fgBSoB(UjFScqq}$4C%8KaNabqG(qlz-0?O4KSiXj3Qhf@bH{qFKWIDZbUiT`eyVf zc>%!eNMqR{E{&t-Vi5c%fd+8g$-grGqWk^!;%~+Yz+|N9FW})?8(%+6LGSYe^}?KK zCqJ2CLTD}kh>?igq|X9B+so(y?BNce$Nv9!R10IX@@;}YH!Dy`mJ7}l6-^KEw;j<= z&;jF!1_}W4C`6R*Lsuu*7#x*nxIX|zazM+U6CMHN;YANvhhe1{VbNi@%O|9W_ykbs z2{OI4Vihss2-U)VR)NdF@}&pW@wY%9;v&RJcma3Uu!f9{0z@6fpk#d(1Yi?H5JRQv8Ty;03LW|-BZdz!O_H?kkDhXipcqp z%?KN=h5U$OU=0394zq?zO1A7p>X|cVt^oT{s-fo+$Vud4wD>DTgT?8N`Is>vKTh&k zCx`B09mQj0Mg&Wp9EwN|*Cb&JV0?1a1dh8U$L*5iag`*XHxJkcuFDUnY9MED1(8GI zZsGJfs{#MNQBe?Faa^6ficV}ZV0m<92!KSVt*Iu{hEx38hxQG~hKJ=4Z#ywRC?UV0FCZ4n=|hb@OP5xXp9( zcylC3L-q*xGV)-WRB|LEoKtClU~)2U!UQf42X*J;)7dD0P7AJ!i-c?)gBMJFOAd)>!;aj!myOfK?4dxJE(^ zt~wFLVWXIke6cE?G#Rra4-c8sqc|#w)I-4A&y5GwvBo>be#V&pO!f3Te81oO zzOU=LultG31DKLmlSXKVN{-6nEq{16xvlpYJ048+x^#(9_eJx)^fZ6~jTg&L3d+MQz%qyp5ip7$^5KQ5+OiqMD{1|E-aE2rcnIh5 ztAdZF-?QDuNjG=lTP|CBs+FghcC?9icwp3rMvnrJ7CHSNvccebee_nbdM;2#bW=K1 zq&_63iBBag(~u8P_0~<*wIjX)vGwZJYrF?p|4d~L@X)LNkI-U~>*G5%*F0h1))lW$ zR&UZ-JAo6gahvWD(1ils3&>Wz&1sxCuXBwJ)YQzI@iOzN(VivRtdQp6F4jf%)n*(PYT86t{3;F%!7b~(p+io zM^zz$Zd$_Qyo5=8t7qjmGb^0Kz87cbWgGk*XF6Ka+zxmR5I z3a(Ejlm*6ezaxj_8xtQ5^q-)9=0FEwL)n2Rzb`&sxZ+o}l`Y!6CU)%mO4qQc$puZ! z{ltr&X7k<8*HOJ(&7O@6jpEtJ8dDm#%x)mzIeN-11;ysvvhKxt|Hz=mxy@ejf6AYVJwJFa9mX4= z=Z?@xF$Qc?Fv-_IDW^Tto^&gb zMsQ3(%BVX<*uh0vL`xU9xbxNOHV`l;+O8=IH=ORo)l6c43JW#_-xVh$U?PejOU#R% zQ%4byu6iqLk}7r$98@kZxhBKEBLLb}?z-&sX~YZj50rcwt|p<2NTps0iv4%rvp zI>tcAfSVT=R-Adr5gUU5VjNp=vQTnSL$fdk&wVj zpSL8iszVTKf;vjQOJ>xyY;E=u;CB;JL0-=^gg*K77MaXRZ^U99N%FY$ZYo$w9H&aH zE|ANuetqgzdF9i~B9xwt#{tTbOJk;SCbMkDfv}S_y^ugsU6yM_lb$1&02pf}s&t&t z?n%CYSpIA zp;lc+%lD_!w7h=(`pEMd1-z3%epmDmv7rSQ!-&>B&ngt@-7nVjR*GqZ(8m1M5za(p zpL8>ZNCM3MG>cC1ck`5~0@#y?T?S#hd~2TzOTL_5=}g;e88<$GS0R$Wa(2)pT;4)Y&l=$IR??(R*33%!ip7wvkn3sRL%J;ybn~IQKPBW|z1KbsQo<4N5v9_*D5GkEy zp~brHYed)?_0P$*{u|Kq7qB5R73Dq=I9VHK$m`y2_5UU1T6ymarN!h_Zx39~4L}hD z)-arTp+oQK#2UKxkCR>q;wiIG68j6(PmLorzf_HAbKqtI0Z>17AJ8B~dJyEJolZKF z2NNhWc%WYL$f-WiyEvbw7}3f2`o7s@4#6w)dlH$xaQ@x(p5;YJM@bT2C&rPCiP%Em zX3)oQ+WiPqGX;zvzkhHnNm#dwKRw&*65@)!c9!1mU0V(!b2mKv7SE?X?SJ^lpvUO-1s7NwbnZ~K=1@+}lgG*=qOo>Fyp zf3|-ERnP2i;*sr>eV>pb&q8a+>O|qxonpbwrB1q$D5k>PI5U(YrSzd_`hrmAgFwb;#a5-8g75|C z%U^*hI}9m2U3|7Ol2PCTjO5VCYp66sq9pJT=W$um-5I%5xy}QorV)SiD7$ZY_>u*Z z0P0(*=K-i*p&iT+{*Dztigv75S z*4QL}drS^DMkQ50C8`IPEd6An-{LZE>^aW(DS?^TBoUJ8^WJOAT5-kNK5MIDwU@22 zAdpn#(r9vCXawFFea-EQ2Lm!rLeeWBBf!-t=Eiue20ZGjM5VXGD8s`^GPGqc$Adq1 z8=hP|TsR#3H1bFgfU=?oWw$01f$r|Q^d=Wxnc`lU5G_oLsKVLPxe!{_Or@|^F@mGF zQsx`!NeU;~2t66iq=XT<6i*OstAR3g?YGogqFV?_S{{WwR_1^dYFEcRRUZ|wzdk1r z{iI)N%^FF21m<{gZN~^EO)Yv^`0wf3g3L=3$wsBjY}R4W1hU+_q<+f*VA3CiZL%Zl zYvFNp7c6qqX4@_4 z5Y;Q=G#X#r2gS;ZV(OPKkMTDWbd#%b00-1oKH|=ve8$H^FbctjD4S*ZqcKZAz~kJX+5ZV_ipKK3uS>%pW`VV9S{zNWxJhv)FJ_?ctZGgxJ`R0ELfZQEUQ7i zg^st4VT;-di^$uK`}zvx&-zQ+7-OY4;ecAxx8$1v6c752)l6eGmOO_p%o~V_TcOyqsfp!Uq`x06&Oxq6Ds;U01tPh z<%xyDqqdWwWCh1(9v4R=nTY3|W^q^q^1Qb@goGo~)Xf?NWIvEc;2!j_xNeKyN{e?j z^#$$A6k_^q4Yk!HhO!Ov8~7l97d%-iqC7gu`O@j1oh3SjInppeqKwMTX6Q-myRFQy0-XKqF?XtpAnZf zb*ycp*N|EiL9tu-_>dOrjsu|bJt zgI}$fv2d$_pD9m6D+VU(SY>`QFRfp?{Wiy5uwE|n9+N%9lwM3XsD75a1icc62k|SR zi^?6CKbx-$Hp=jPn3{hGZ)VqU=Hfq+)gxE6x z;aLpQG&iJ1Zn$&Ca13N%V!;iYMkgN#8DVLeMPHwo#bhCrVY~?97qjTD!{*KU>tlUk zgyq;b>$IH5zIib|;Cmw(3pH9*cz#Xt{r)KO`m3@iAKinzbZ~>nV)FzuG6NWWAlPKa zuCKP=#0genzoc%A{Fp;>=t&j0ZUqK2xiQl|tN8E14i zHpUXQckHR3t^PgnUfay=%L+I(#Nq0uY)u!HS?ghQ0@0pOU#QI5%L`XolM_CFQT?fZ z2mN7I33L5ZrRsl@`S*r$MPTyP!^d>wCj(rA{;h-j|8f+pYM=Bvkn53Ag#SH*p(Vf| z_SD8rCs1!qKIS}?t;eYuTN~*)N_u3YQT$)DFZV7=5PvR6;MxIS(w>WKkp$%F#D$Hu zFL7r4HPrRD4Evf)Y}b=%5t|@1ipkhC1b*O* z88hT4a(jMlhZ{IoH=32@Sc1aQbO{2d+meZ;gAyl-&tQ<*wAhU!Ar00O%3^`AvoVOj zy7ldQ+ZU4)N&id29cSQ64^J98zjZ4$3NY@>7#ko=k4^R`*j|9(m`Bd(DHk$r@%gzp zV=ST?nrCzPb?5;AQZ0H--}ATjienEUpUj>CnieJ&i| zsX5lhz-7rfUGFByqRat?l)%)y!=PEgsOx@{*%JtW#%q)`Z6Q4x@_b}EYC#HT?k>8p z?4jvgf{e)X2CA}TGETI5lP3MZvjK@~f(W-=M*6w4hGK$gDhAi*7JEvx3JSn`_&8rCv|cWJd~8flU`U6EP=Y0Yq=P zvHG%K)LPLUCq*yyDFp9{3^g^iS3vZ+DB-$3?DLT<ef3mp*kdWS4>W(50t+@vVi&|Oob>WZkcq|o}Kv0nP zm=T5g7O-D3#*~J@crVcaiWrqXB#ou5pN@9EzLpY7pp!5rvMq3y{Y{XGf33v+E5=J*0}wHVwbR?+Ap z<#=4EsdfwAQ7&AhiR-nNhpSlS@+bM#&OJ(&{wkor)H0!{NwBW$YQ8_3+Kq=L;BJ&n z)a%g0tdHw>34^yz2ILhdS>Bcus>wMMYBFuXxtAAbG?S`^g>_e|BRb%wA|@;l7$rLD zwT?fT-OgVfvu0ac{`wv~NUukcv8lFpd`j3ivW@;AOzy?7nVt{7Dl?N``>D+84YL$o zo4w7^=?F>n9=;8!yFHCxEJpwq7kzqLV;&lSK26C`z>sP*ogO^QL`7_u!4s zAor>^y?bB1Ts#{kt+ck;TX|(By^bAjl`to0v)AgpZYrNYDHulp#Ggbj`aAs5*e&Os zD{_nXG~cgFlOC5QcBT9F95;=89jd=(;Z2HHUL#r>+;MYjG&mOd0SM;h%A*k z_?AbbaIse5n^2J#YCiXet99wp5+5JmeS^F#NsK27giYbJz;|iyHFdr9dQP-RYZIQF z{ISb*b&bn}GVyB?+5@wleI`Rs$Jo^@-M+xg=NByd%4x~IGc^81V1n&_B!+rQDP(I` zr>u6KU^I4Xayj}3d^?j-NvFNcF~qj*2*7~>=eTTvaCWt^p10|;!GrhHk5i3EM??-{ z){uLC?cXm8)JQroqJonLPT%}xTVrh<00cYIbgtikt_-m=IuUav>4E7`Z5=G`Z;Kq2 z2j7!dgVURH;!_ZVFh64!m~J>0X+@u?^v0+-nyq+$Qi}3;g~f3y7HV_lqg7VYb4~4} z=XKNHj>|g?=ckH{e&JIo7TXT8V5^>u`UY4gO6A-S&z)-Oms&eW)rj~VO9Iw$Pc#f{ zo3ZPipU%cmS0?xh5>wP%#}?|_ODly0ae7-0SJgaP1Ccm}8zS{KTpU*M&Gysh&&p@N z{W!#1KfSWiPt`+r6kqH|m0gZsRIUI|G*gS8zSEw+U%zNlMQ;L5TaZE#CE8{?9AUOpsC2etx22zZE9ePl*2VRjN zi6(~Z2##_G#JKUp_WiYbK>ntyWY*~6>MTZsazsk->b$tsvna4Lh6tZzHN5ZEGK9=Edr!XnCnL#gixfbw4ElE{0=veZ+N8#mBppp<3>;uLJw3gm6Hu~J zA5nkZ+Qq2UU8os$L4EDw=+jiXaZ(f{kRHt=$(qBk&~dQkpjy5zSl~_Wk{P6BVo)|f z!wcxMtISJ(^@B7C(YpsaD0j&Y1d){NfYfHT)RH{PAfqt9r2^TsW|j@d?Hu`c>R%Vq zCKn*T&zwf_-h592lhM0m0@Mx)whdakmL(HRyg*DCj*cV9gV(mhbtqGgtWHD+UY}mr zf{ei0m>M|d#+o!qLR?gf3tLBYDJ-NfdleY54Rr80tS(mJBA>;A3^kkPGfbkq>Opg` z(ta75Vhx##GEFL_;%xRDOOdNPPeNG$?aO-SQ#tn zwqjUhamT-!Apalei~n#rikbuFv!JD>rZmR>jt>F%SJdT(l{DLuQ>yLvhn198Rv3tO zE@pIZA>q2Z3)p)w%Jiw{3M`mbD0u7G{l%%< zJBXfKP91~?#e;2qv0a!6!dmg+$Xo|hnWD&>@yh33anB3ddfT_r0nwGe2OQefIY#kB zeK-Y%Pn=8$hQyYUG)Wk10`xn<-AqKx6Kb}=3tX>b{FIZHSlI>L^;K`1LereIb%my- z{TR__tg74i-%6KCDkdg^)+(}+;-qnoU%Q`H`w7GpBHioU-SAxi#Zhb!z2yVuJXfyr zu2!Uf@9U1ZUm4m%VLcKk3GhaHG;7R06j#2C7q?qv}pf);k0Uh+%^bD$A&R>fP0 zd;|sF`d*kaj}=;*esW!+%3%)?@}n%$c0W_~(2Ab7JXWiT@25&Nr*5u^s z4(}Q%GTUM+7T|gnMS)7TUGQEoBOZWoks^1LK|Mf7i*3-?B#2xL;TGqP0mQc)bq?)) zk>1N_94S8}*&%$Gn;c|}&Pj~M-}bjfb`_al7q^osWF#w`J`z9U$^-x=wUq8WIq{)U z5@SRpk17{kgO~_YP5l-#HfNWSi!|?xB$o{-eLoN196yp2MwFAhqdzTYA{c;;5Fm=b zQo5qu3Q0XUS3lr6XSKHm?nO$Z>!g{99ulU6|02l~6|ih5JecO#tb8C|fC=x+5jdbE z{>HD4zp2>G5Ads5fYA#%AW z=7>Bj*1iFHKe5N+E1vWho$&8sBEgSQ*hn8Wp&}`UWOgbs#g2+DjNzHm&*62wm|Uis z>c9ZNRYX4+(M3>{rKiSA(+`lcjHxDSmjf0}hFY}WBW#%2O_1t%nOu^gDb0I4)p`w^ z0_r7=1Rk$uS@pz$P<4pY|AyPCG7bmTA({jUb2G%cPv)2)ZNyZo!0Fd-nnG~AE6HwO zv9hsZe*h(U<&>>7QL)gM1L^D=>PL5Yb`GUpe&vs(l^=&sob1=(kF`tGbsg z_^GUa)RE1Rn+==vIH=lH7TM0uy7Rq}zpRV$@QB>jGO%Pz$ehldns$omHEU3)R(7Ci z_`#7I0_*Py%4zPi-(uJKTQgRSs$A9ZZpqi(XZk%__7-*AsgIOB0gTHXjU;Ohqu428MQ(BTTXFwTxWdJ)@Qt=d&!G+o)s5+ zF@eQr&6*oC5=woE!FJz<3?3YD$Gxvl<*c%lmUY3q)7juTSXS=2}+PhO{&b2Hb9e)N?jN@~qCd#=o(7 zu5dK8)X-SZBc4OQ)rsWfO{1gMZQ7(3aC+XK>|zRf^9YBdbrc5SjkSVDYsH?V%P{@w zRVD+~Eh{UNpSL{N*GHY@s5NrbDCOstt#-E=K62!TFuT}EbptNee4o!473_^ZY3WBYPw)q}iKP@eJ&5i2}qjTrl8$Yrm zet}H!5`Q(XpkU0$*x1-sijm&liD4yApHj^Xc3t@F_3K`WK=!q@2XuENVY|h`tEHvx z2Y=|VJ2t(&me!%f#Kit}hJ}TPx63XDy{Q{8;b?wmL&Nd3_XP^OVfLLGy9uTE!Tk9f zw{G1!A$C&ENw~2sHU28sdGl@*rTVp3*KJxf;_#6p)>E9Eu3w+&;NVtyKRhg~(MC&M zG)1lp($)L)3C3htawlN}(X*f;fAB0%+=NVv=84 z%?nhtpNg$hy{MVt1!;* zVRJNp3-Zp*Xc~0W{SWAVTNW5NuGyN~n*&Q@3ywPW(bLy=AiXa>D!40KOVsGb|#ZXx}X&pOutTW81)rBKR8qxTg0c9M$EGzr| z_nx>-X(;}|mon<)}ZUu@g9ZMswbjJw@ZTQy1@tnfBCzz~!sJ9qB1Yw?0t_p|Jv zh7Gl*pNNl*RnE8S2>ith8k+EHfo76ZGg`5ye#U{V-n@D9Jnx;TlIPDiAil`ViHnOn;eMwxUR2tP7A?B%-oLV@CWC+$5*D_BcUR2${0UCY zY=TUf|fAZlJGV%hy$O=+MEnjO0AL;?;4R+xy>qOj-55 zTTV_+$j+T^OSY{&akRbhqqaSI^aud zH_u8b17z{dyCVOJ!?K z>YQuqZUTjM$8#ru(Ad61dt=u|8m(LJ2nh+Getrr~x6bn5ALufTxW&RVH8nNcJzxFE zM|_}2tPXjVZ1eT>uD-J`b$QRJdkN@oM_8Eal5uG-zj;lWHm!?+LF0)NCmuO=Z1kKt zo#EkT&z(EBa_P94U#mNM4^L$4QFGQ)K)GEZuz4)0AZxlEZCpO1GHmBgt#iY^`uhzH z2|QxHB+$H7t8cGLe;GxyZPQ`*8$ZQ1N#$1~LZ9h39g`z=eQ#Wl+V&7S@jlTuzYUVL z*QiO8%e0crnm12P;X_5(>TiGBbp866?%~&)zqPls>)a$~!TkA(Yn$|0I2KE%;m&jqkjGR9Z7SF&mggGI<)FE6A*&5 zhiI{YH}2lu4!PKN!hm~{lgDbyl~B+fdiCxN)~Gwy0$Z|Q-{Ubpdf~#}M8~btoPHlj z?yE(EQlQ?eJUL!bqln)3@Y?L>>FJ5IY-97|Ha0fl74zKOE?vA>hhVqy=+T}u@N5t` z!ePe1fddDbn~$~c?|tj+_qU$CvPmU|-GBDWm(N3(^z1`gs&n@H$dM0&>zK7_H6)*f zG-1-D4Uv(ZF)?jO^crbx-RQx?hel-Pihu(Lbf{dmgoL!@Zf8>>+qKNw9e#Rw*qE-A zOMx5#x<*E=X!FbYbM`lF?`6xDb#Eid*KAY)cB%X}sYBm6>4DAHgkHXU8SO`%jh5?( zg6JQb0&W@&x|Nx!PLgu%=FK-tG(UuDv}v<}5X%a_c>@_p?1*H1|uOs8i0K?P6-$4s()5>gpHKGO$Fe?#&et zh3j6&T6ZDyXH#84WU-ZWTdQMq1m;~M;E4K!aD6-^tnoU~;PmsxjSVo7Uk6eA6c)eo z{rk&ET6pE$eH~j{+p;UaE~-C@#BMEyT8f1g1-QDqy1CK!t?1pmw@*dV-H1sBh$R|( z7A2~4L8O6yU>0!#9QNuli&hg?x&(|LInp+XiiK#aB%num;Wuq=OdF0Qc_Yhn+;t)6vm`1#bS zez=bYQ%^l1L}Wl+7_ro@8qOqq%E<;ZsB3Jj!S#0U-Fwv1r3tSK2b7Q|U(3wANL9B4 z-7{&XE@S!3E)c_HO%fNUB)F;r**<;pB!Fv){a&X|oyvFbEL~moXg+EdvGCeAh@&bH zs>_cb>ku~;0UthipM#IMcXnkT9459?G{j9yZqDo8KHZ;?>DJBcR8bR>#~tcxDxcKB zTYSr|U7B&uXWl9Qb~sm#Iu>YQ-bQeVh}2XqZgtiAu3b7u>aW|H&TrkZzxCk3xf=&c zj2nP$jP&yxGRdGVugDAGoG&R5#l_=LLoN1lo!7(lDGF9wvZq_NZvAss*0=|$%bNg! zTqKkP-;C1l9O-Y-u#}J_pKbxQ-_M_DwOjEI|5wfh`Rq`iCCf}cu5~3U)qeh2fAmv} Z{Ipv;Zm&N^7q&v795sIAG0R!&{{`ycGXVeq literal 0 HcmV?d00001 diff --git a/docs/versioned_docs/version-2.23/_media/benchmark_net_p2svc_gcp.png b/docs/versioned_docs/version-2.23/_media/benchmark_net_p2svc_gcp.png new file mode 100644 index 0000000000000000000000000000000000000000..55916a1de91094b18b3d47c50fc5f5900adfe9a3 GIT binary patch literal 38395 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
          xlH_*x9qK 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 VZqJAB#@`TUPAZ?sk~8rCe*osmgx literal 0 HcmV?d00001 diff --git a/docs/versioned_docs/version-2.23/_media/benchmark_vault/5replicas/p99_latency.png b/docs/versioned_docs/version-2.23/_media/benchmark_vault/5replicas/p99_latency.png new file mode 100644 index 0000000000000000000000000000000000000000..0190118b22f8ea7dbfc862067b06a47bd6ce0d42 GIT binary patch literal 24062 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 + diff --git a/docs/versioned_docs/version-2.23/_media/concept-managed.svg b/docs/versioned_docs/version-2.23/_media/concept-managed.svg new file mode 100644 index 000000000..5645a608f --- /dev/null +++ b/docs/versioned_docs/version-2.23/_media/concept-managed.svg @@ -0,0 +1,591 @@ + + diff --git a/docs/versioned_docs/version-2.23/_media/constellation_oneline.svg b/docs/versioned_docs/version-2.23/_media/constellation_oneline.svg new file mode 100644 index 000000000..4e354958a --- /dev/null +++ b/docs/versioned_docs/version-2.23/_media/constellation_oneline.svg @@ -0,0 +1,52 @@ + + + + + + + + diff --git a/docs/versioned_docs/version-2.23/_media/example-emojivoto.jpg b/docs/versioned_docs/version-2.23/_media/example-emojivoto.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4be0d5b26dc70a6fb99a5105c234e6d7ab51a213 GIT binary patch literal 141236 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 K-*lqjT literal 0 HcmV?d00001 diff --git a/docs/versioned_docs/version-2.23/_media/recovery-gcp-serial-console-link.png b/docs/versioned_docs/version-2.23/_media/recovery-gcp-serial-console-link.png new file mode 100644 index 0000000000000000000000000000000000000000..eb67f0e99985804d9f258a4bc74d42dfabf0d4a0 GIT binary patch literal 46134 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 fzhzeZch178eTiYWYbMif0YhC`N2%(mP2~Rqh literal 0 HcmV?d00001 diff --git a/docs/versioned_docs/version-2.23/_media/tcb.svg b/docs/versioned_docs/version-2.23/_media/tcb.svg new file mode 100644 index 000000000..e5bcb5b95 --- /dev/null +++ b/docs/versioned_docs/version-2.23/_media/tcb.svg @@ -0,0 +1,535 @@ + + diff --git a/docs/versioned_docs/version-2.23/architecture/attestation.md b/docs/versioned_docs/version-2.23/architecture/attestation.md new file mode 100644 index 000000000..9bd157460 --- /dev/null +++ b/docs/versioned_docs/version-2.23/architecture/attestation.md @@ -0,0 +1,409 @@ +# Attestation + +This page explains Constellation's attestation process and highlights the cornerstones of its trust model. + +## Terms + +The following lists terms and concepts that help to understand the attestation concept of Constellation. + +### Trusted Platform Module (TPM) + +A TPM chip is a dedicated tamper-resistant crypto-processor. +It can securely store artifacts such as passwords, certificates, encryption keys, or *runtime measurements* (more on this below). +When a TPM is implemented in software, it's typically called a *virtual* TPM (vTPM). + +### Runtime measurement + +A runtime measurement is a cryptographic hash of the memory pages of a so called *runtime component*. Runtime components of interest typically include a system's bootloader or OS kernel. + +### Platform Configuration Register (PCR) + +A Platform Configuration Register (PCR) is a memory location in the TPM that has some unique properties. +To store a new value in a PCR, the existing value is extended with a new value as follows: + +``` +PCR[N] = HASHalg( PCR[N] || ArgumentOfExtend ) +``` + +The PCRs are typically used to store runtime measurements. +The new value of a PCR is always an extension of the existing value. +Thus, storing the measurements of multiple components into the same PCR irreversibly links them together. + +### Measured boot + +Measured boot builds on the concept of chained runtime measurements. +Each component in the boot chain loads and measures the next component into the PCR before executing it. +By comparing the resulting PCR values against trusted reference values, the integrity of the entire boot chain and thereby the running system can be ensured. + +### Remote attestation (RA) + +Remote attestation is the process of verifying certain properties of an application or platform, such as integrity and confidentiality, from a remote location. +In the case of a measured boot, the goal is to obtain a signed attestation statement on the PCR values of the boot measurements. +The statement can then be verified and compared to a set of trusted reference values. +This way, the integrity of the platform can be ensured before sharing secrets with it. + +### Confidential virtual machine (CVM) + +Confidential computing (CC) is the protection of data in-use with hardware-based trusted execution environments (TEEs). +With CVMs, TEEs encapsulate entire virtual machines and isolate them against the hypervisor, other VMs, and direct memory access. +After loading the initial VM image into encrypted memory, the hypervisor calls for a secure processor to measure these initial memory pages. +The secure processor locks these pages and generates an attestation report on the initial page measurements. +CVM memory pages are encrypted with a key that resides inside the secure processor, which makes sure only the guest VM can access them. +The attestation report is signed by the secure processor and can be verified using remote attestation via the certificate authority of the hardware vendor. +Such an attestation statement guarantees the confidentiality and integrity of a CVM. + +### Attested TLS (aTLS) + +In a CC environment, attested TLS (aTLS) can be used to establish secure connections between two parties using the remote attestation features of the CC components. + +aTLS modifies the TLS handshake by embedding an attestation statement into the TLS certificate. +Instead of relying on a certificate authority, aTLS uses this attestation statement to establish trust in the certificate. + +The protocol can be used by clients to verify a server certificate, by a server to verify a client certificate, or for mutual verification (mutual aTLS). + +## Overview + +The challenge for Constellation is to lift a CVM's attestation statement to the Kubernetes software layer and make it end-to-end verifiable. +From there, Constellation needs to expand the attestation from a single CVM to the entire cluster. + +The [*JoinService*](microservices.md#joinservice) and [*VerificationService*](microservices.md#verificationservice) are where all runs together. +Internally, the *JoinService* uses remote attestation to securely join CVM nodes to the cluster. +Externally, the *VerificationService* provides an attestation statement for the cluster's CVMs and configuration. + +The following explains the details of both steps. + +## Node attestation + +The idea is that Constellation nodes should have verifiable integrity from the CVM hardware measurement up to the Kubernetes software layer. +The solution is a verifiable boot chain and an integrity-protected runtime environment. + +Constellation uses measured boot within CVMs, measuring each component in the boot process before executing it. +Outside of CC, this is usually implemented via TPMs. +CVM technologies differ in how they implement runtime measurements, but the general concepts are similar to those of a TPM. +For simplicity, TPM terminology like *PCR* is used in the following. + +When a Constellation node image boots inside a CVM, measured boot is used for all stages and components of the boot chain. +This process goes up to the root filesystem. +The root filesystem is mounted read-only with integrity protection. +For the details on the image and boot stages see the [image architecture](../architecture/images.md) documentation. +Any changes to the image will inevitably also change the corresponding PCR values. +To create a node attestation statement, the Constellation image obtains a CVM attestation statement from the hardware. +This includes the runtime measurements and thereby binds the measured boot results to the CVM hardware measurement. + +In addition to the image measurements, Constellation extends a PCR during the [initialization phase](../workflows/create.md) that irrevocably marks the node as initialized. +The measurement is created using the [*clusterID*](../architecture/keys.md#cluster-identity), tying all future attestation statements to this ID. +Thereby, an attestation statement is unique for every cluster and a node can be identified unambiguously as being initialized. + +To verify an attestation, the hardware's signature and a statement are verified first to establish trust in the contained runtime measurements. +If successful, the measurements are verified against the trusted values of the particular Constellation release version. +Finally, the measurement of the *clusterID* can be compared by calculating it with the [master secret](keys.md#master-secret). + +### Runtime measurements + +Constellation uses runtime measurements to implement the measured boot approach. +As stated above, the underlying hardware technology and guest firmware differ in their implementations of runtime measurements. +The following gives a detailed description of the available measurements in the different cloud environments. + +The runtime measurements consist of two types of values: + +* **Measurements produced by the cloud infrastructure and firmware of the CVM**: +These are measurements of closed-source firmware and other values controlled by the cloud provider. +While not being reproducible for the user, some of them can be compared against previously observed values. +Others may change frequently and aren't suitable for verification. +The [signed image measurements](#chain-of-trust) include measurements that are known, previously observed values. + +* **Measurements produced by the Constellation bootloader and boot chain**: +The Constellation Bootloader takes over from the CVM firmware and [measures the rest of the boot chain](images.md). +The Constellation [Bootstrapper](microservices.md#bootstrapper) is the first user mode component that runs in a Constellation image. +It extends PCR registers with the [IDs](keys.md#cluster-identity) of the cluster marking a node as initialized. + +Constellation allows to specify in the config which measurements should be enforced during the attestation process. +Enforcing non-reproducible measurements controlled by the cloud provider means that changes in these values require manual updates to the cluster's config. +By default, Constellation only enforces measurements that are stable values produced by the infrastructure or by Constellation directly. + + + + +Constellation uses the [vTPM](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/nitrotpm.html) (NitroTPM) feature of the [AWS Nitro System](http://aws.amazon.com/ec2/nitro/) on AWS for runtime measurements. + +The vTPM adheres to the [TPM 2.0](https://trustedcomputinggroup.org/resource/tpm-library-specification/) specification. +The VMs are attested by obtaining signed PCR values over the VM's boot configuration from the TPM and comparing them to a known, good state (measured boot). + +The following table lists all PCR values of the vTPM and the measured components. +It also lists what components of the boot chain did the measurements and if the value is reproducible and verifiable. +The latter means that the value can be generated offline and compared to the one in the vTPM. + +| PCR | Components | Measured by | Reproducible and verifiable | +| ----------- | ---------------------------------------------------------------- | -------------------------------------- | --------------------------- | +| 0 | Firmware | AWS | No | +| 1 | Firmware | AWS | No | +| 2 | Firmware | AWS | No | +| 3 | Firmware | AWS | No | +| 4 | Constellation Bootloader, Kernel, initramfs, Kernel command line | AWS, Constellation Bootloader | Yes | +| 5 | Firmware | AWS | No | +| 6 | Firmware | AWS | No | +| 7 | Secure Boot Policy | AWS, Constellation Bootloader | No | +| 8 | - | - | - | +| 9 | initramfs, Kernel command line | Linux Kernel | Yes | +| 10 | User space | Linux IMA | No[^1] | +| 11 | Unified Kernel Image components | Constellation Bootloader | Yes | +| 12 | Reserved | (User space, Constellation Bootloader) | Yes | +| 13 | Reserved | (Constellation Bootloader) | Yes | +| 14 | Secure Boot State | Constellation Bootloader | No | +| 15 | ClusterID | Constellation Bootstrapper | Yes | +| 16–23 | Unused | - | - | + + + + +Constellation uses the [vTPM](https://docs.microsoft.com/en-us/azure/virtual-machines/trusted-launch#vtpm) feature of Azure CVMs for runtime measurements. +This vTPM adheres to the [TPM 2.0](https://trustedcomputinggroup.org/resource/tpm-library-specification/) specification. +It provides a [measured boot](https://docs.microsoft.com/en-us/azure/security/fundamentals/measured-boot-host-attestation#measured-boot) verification that's based on the trusted launch feature of [Trusted Launch VMs](https://docs.microsoft.com/en-us/azure/virtual-machines/trusted-launch). + +The following table lists all PCR values of the vTPM and the measured components. +It also lists what components of the boot chain did the measurements and if the value is reproducible and verifiable. +The latter means that the value can be generated offline and compared to the one in the vTPM. + +| PCR | Components | Measured by | Reproducible and verifiable | +| ----------- | ---------------------------------------------------------------- | -------------------------------------- | --------------------------- | +| 0 | Firmware | Azure | No | +| 1 | Firmware | Azure | No | +| 2 | Firmware | Azure | No | +| 3 | Firmware | Azure | No | +| 4 | Constellation Bootloader, Kernel, initramfs, Kernel command line | Azure, Constellation Bootloader | Yes | +| 5 | Reserved | Azure | No | +| 6 | VM Unique ID | Azure | No | +| 7 | Secure Boot State | Azure, Constellation Bootloader | No | +| 8 | - | - | - | +| 9 | initramfs, Kernel command line | Linux Kernel | Yes | +| 10 | User space | Linux IMA | No[^1] | +| 11 | Unified Kernel Image components | Constellation Bootloader | Yes | +| 12 | Reserved | (User space, Constellation Bootloader) | Yes | +| 13 | Reserved | (Constellation Bootloader) | Yes | +| 14 | Secure Boot State | Constellation Bootloader | No | +| 15 | ClusterID | Constellation Bootstrapper | Yes | +| 16–23 | Unused | - | - | + + + + +Constellation uses the [vTPM](https://cloud.google.com/compute/confidential-vm/docs/about-cvm) feature of CVMs on GCP for runtime measurements. +Note that this vTPM doesn't run inside the hardware-protected CVM context, but is emulated by the hypervisor. + +The vTPM adheres to the [TPM 2.0](https://trustedcomputinggroup.org/resource/tpm-library-specification/) specification. +It provides a [launch attestation report](https://cloud.google.com/compute/confidential-vm/docs/monitoring#about_launch_attestation_report_events) that's based on the measured boot feature of [Shielded VMs](https://cloud.google.com/compute/shielded-vm/docs/shielded-vm#measured-boot). + +The following table lists all PCR values of the vTPM and the measured components. +It also lists what components of the boot chain did the measurements and if the value is reproducible and verifiable. +The latter means that the value can be generated offline and compared to the one in the vTPM. + +| PCR | Components | Measured by | Reproducible and verifiable | +| ----------- | ---------------------------------------------------------------- | -------------------------------------- | --------------------------- | +| 0 | CVM version and technology | GCP | No | +| 1 | Firmware | GCP | No | +| 2 | Firmware | GCP | No | +| 3 | Firmware | GCP | No | +| 4 | Constellation Bootloader, Kernel, initramfs, Kernel command line | GCP, Constellation Bootloader | Yes | +| 5 | Disk GUID partition table | GCP | No | +| 6 | Disk GUID partition table | GCP | No | +| 7 | GCP Secure Boot Policy | GCP, Constellation Bootloader | No | +| 8 | - | - | - | +| 9 | initramfs, Kernel command line | Linux Kernel | Yes | +| 10 | User space | Linux IMA | No[^1] | +| 11 | Unified Kernel Image components | Constellation Bootloader | Yes | +| 12 | Reserved | (User space, Constellation Bootloader) | Yes | +| 13 | Reserved | (Constellation Bootloader) | Yes | +| 14 | Secure Boot State | Constellation Bootloader | No | +| 15 | ClusterID | Constellation Bootstrapper | Yes | +| 16–23 | Unused | - | - | + + + + +Constellation uses a hypervisor-based vTPM for runtime measurements. + +The vTPM adheres to the [TPM 2.0](https://trustedcomputinggroup.org/resource/tpm-library-specification/) specification. +The VMs are attested by obtaining signed PCR values over the VM's boot configuration from the TPM and comparing them to a known, good state (measured boot). + +The following table lists all PCR values of the vTPM and the measured components. +It also lists what components of the boot chain did the measurements and if the value is reproducible and verifiable. +The latter means that the value can be generated offline and compared to the one in the vTPM. + +| PCR | Components | Measured by | Reproducible and verifiable | +| ----------- | ---------------------------------------------------------------- | -------------------------------------- | --------------------------- | +| 0 | Firmware | STACKIT | No | +| 1 | Firmware | STACKIT | No | +| 2 | Firmware | STACKIT | No | +| 3 | Firmware | STACKIT | No | +| 4 | Constellation Bootloader, Kernel, initramfs, Kernel command line | STACKIT, Constellation Bootloader | Yes | +| 5 | Firmware | STACKIT | No | +| 6 | Firmware | STACKIT | No | +| 7 | Secure Boot Policy | STACKIT, Constellation Bootloader | No | +| 8 | - | - | - | +| 9 | initramfs, Kernel command line | Linux Kernel | Yes | +| 10 | User space | Linux IMA | No[^1] | +| 11 | Unified Kernel Image components | Constellation Bootloader | Yes | +| 12 | Reserved | (User space, Constellation Bootloader) | Yes | +| 13 | Reserved | (Constellation Bootloader) | Yes | +| 14 | Secure Boot State | Constellation Bootloader | No | +| 15 | ClusterID | Constellation Bootstrapper | Yes | +| 16–23 | Unused | - | - | + + + + +### CVM verification + +To verify the integrity of the received attestation statement, a chain of trust from the CVM technology to the interface providing the statement has to be established. +For verification of the CVM technology, Constellation may expose additional options in its config file. + + + + +On AWS, AMD SEV-SNP is used to provide runtime encryption to the VMs. +An SEV-SNP attestation report is used to establish trust in the VM. +You may customize certain parameters for verification of the attestation statement using the Constellation config file. + +* TCB versions + + You can set the minimum version numbers of components in the SEV-SNP TCB. + Use the latest versions to enforce that only machines with the most recent firmware updates are allowed to join the cluster. + Alternatively, you can set a lower minimum version to allow slightly out-of-date machines to still be able to join the cluster. + +* AMD Root Key Certificate + + This certificate is the root of trust for verifying the SEV-SNP certificate chain. + +* AMD Signing Key Certificate + + This is the intermediate certificate for verifying the SEV-SNP report's signature. + If it's not specified, the CLI fetches it from the AMD key distribution server. + + + + +On Azure, AMD SEV-SNP is used to provide runtime encryption to the VMs. +An SEV-SNP attestation report is used to establish trust in the vTPM running inside the VM. +You may customize certain parameters for verification of the attestation statement using the Constellation config file. + +* TCB versions + + You can set the minimum version numbers of components in the SEV-SNP TCB. + Use the latest versions to enforce that only machines with the most recent firmware updates are allowed to join the cluster. + Alternatively, you can set a lower minimum version to allow slightly out-of-date machines to still be able to join the cluster. + +* AMD Root Key Certificate + + This certificate is the root of trust for verifying the SEV-SNP certificate chain. + +* Firmware Signer + + This config option allows you to specify how the firmware signer should be verified. + More explicitly, it controls the verification of the `IDKeyDigest` value in the SEV-SNP attestation report. + You can provide a list of accepted key digests and specify a policy on how this list is compared against the reported `IDKeyDigest`. + + + + +On GCP, AMD SEV-SNP is used to provide runtime encryption to the VMs. +An SEV-SNP attestation report is used to establish trust in the VM. +You may customize certain parameters for verification of the attestation statement using the Constellation config file. + +* TCB versions + + You can set the minimum version numbers of components in the SEV-SNP TCB. + Use the latest versions to enforce that only machines with the most recent firmware updates are allowed to join the cluster. + Alternatively, you can set a lower minimum version to allow slightly out-of-date machines to still be able to join the cluster. + +* AMD Root Key Certificate + + This certificate is the root of trust for verifying the SEV-SNP certificate chain. + +* AMD Signing Key Certificate + + This is the intermediate certificate for verifying the SEV-SNP report's signature. + If it's not specified, the CLI fetches it from the AMD key distribution server. + + + + +On STACKIT, AMD SEV-ES is used to provide runtime encryption to the VMs. +The hypervisor-based vTPM is used to establish trust in the VM via [runtime measurements](#runtime-measurements). +There is no additional configuration available for STACKIT. + + + + +## Cluster attestation + +Cluster-facing, Constellation's [*JoinService*](microservices.md#joinservice) verifies each node joining the cluster given the configured ground truth runtime measurements. +User-facing, the [*VerificationService*](microservices.md#verificationservice) provides an interface to verify a node using remote attestation. +By verifying the first node during the [initialization](microservices.md#bootstrapper) and configuring the ground truth measurements that are subsequently enforced by the *JoinService*, the whole cluster is verified in a transitive way. + +### Cluster-facing attestation + +The *JoinService* is provided with the runtime measurements of the whitelisted Constellation image version as the ground truth. +During the initialization and the cluster bootstrapping, each node connects to the *JoinService* using [aTLS](#attested-tls-atls). +During the handshake, the node transmits an attestation statement including its runtime measurements. +The *JoinService* verifies that statement and compares the measurements against the ground truth. +For details of the initialization process check the [microservice descriptions](microservices.md). + +After the initialization, every node updates its runtime measurements with the *clusterID* value, marking it irreversibly as initialized. +When an initialized node tries to join another cluster, its measurements inevitably mismatch the measurements of an uninitialized node and it will be declined. + +### User-facing attestation + +The [*VerificationService*](microservices.md#verificationservice) provides an endpoint for obtaining its hardware-based remote attestation statement, which includes the runtime measurements. +A user can [verify](../workflows/verify-cluster.md) this statement and compare the measurements against the configured ground truth and, thus, verify the identity and integrity of all Constellation components and the cluster configuration. Subsequently, the user knows that the entire cluster is in the expected state and is trustworthy. + +## Putting it all together + +This section puts the aforementioned concepts together and illustrate how trust into a Constellation cluster is established and maintained. + +### CLI and node images + +It all starts with the CLI executable. The CLI is signed by Edgeless Systems. To ensure non-repudiability for CLI releases, Edgeless Systems publishes corresponding signatures to the public ledger of the [sigstore project](https://www.sigstore.dev/). There's a [step-by-step guide](../workflows/verify-cli.md) on how to verify CLI signatures based on sigstore. + +The CLI contains the latest runtime measurements of the Constellation node image for all supported cloud platforms. In case a different version of the node image is to be used, the corresponding runtime measurements can be fetched using the CLI's [fetch-measurements command](../reference/cli.md#constellation-config-fetch-measurements). This command downloads the runtime measurements and the corresponding signature from cdn.confidential.cloud. See for example the following files corresponding to node image v2.16.3: + +* [Measurements](https://cdn.confidential.cloud/constellation/v2/ref/-/stream/stable/v2.16.3/image/measurements.json) +* [Signature](https://cdn.confidential.cloud/constellation/v2/ref/-/stream/stable/v2.16.3/image/measurements.json.sig) + +The CLI contains the long-term public key of Edgeless Systems to verify the signature of downloaded runtime measurements. + +### Cluster creation + +When a cluster is [created](../workflows/create.md), the CLI automatically verifies the runtime measurements of the *first node* using remote attestation. Based on this, the CLI and the first node set up a temporary TLS connection. This [aTLS](#attested-tls-atls) connection is used for two things: + +1. The CLI sends the [master secret](../architecture/keys.md#master-secret) of the to-be-created cluster to the CLI. The master secret is generated by the first node. +2. The first node sends a [kubeconfig file](https://www.redhat.com/sysadmin/kubeconfig) with Kubernetes credentials to the CLI. + +After this, the aTLS connection is closed and the first node bootstraps the Kubernetes cluster. All subsequent interactions between the CLI and the cluster go via the [Kubernetes API](https://kubernetes.io/docs/concepts/overview/kubernetes-api/) server running inside the cluster. The CLI (and other tools like kubectl) use the credentials referenced by the kubeconfig file to authenticate themselves towards the Kubernetes API server and to establish a mTLS connection. + +The CLI connects to the Kubernetes API to write the runtime measurements for the applicable node image to etcd. The JoinService uses these runtime measurements to verify all nodes that join the cluster subsequently. + +### Chain of trust + +In summary, there's a chain of trust based on cryptographic signatures that goes from the user to the cluster via the CLI. This is illustrated in the following diagram. + +```mermaid +flowchart LR + A[User]-- "verifies" -->B[CLI] + B[CLI]-- "verifies" -->C([Runtime measurements]) + D[Edgeless Systems]-- "signs" -->B[CLI] + D[Edgeless Systems]-- "signs" -->C([Runtime measurements]) + B[CLI]-- "verifies (remote attestation)" -->E[First node] + E[First node]-- "verifies (remote attestation)" -->F[Other nodes] + C([Runtime measurements]) -.-> E[First node] + C([Runtime measurements]) -.-> F[Other nodes] +``` + +### Upgrades + +Whenever a cluster is [upgraded](../workflows/upgrade.md) to a new version of the node image, the CLI sends the corresponding runtime measurements via the Kubernetes API server. The new runtime measurements are stored in etcd within the cluster and replace any previous runtime measurements. The new runtime measurements are then used automatically by the JoinService for the verification of new nodes. + +## References + +[^1]: Linux IMA produces runtime measurements of user-space binaries. +However, these measurements aren't deterministic and thus, PCR\[10] can't be compared to a constant value. +Instead, a policy engine must be used to verify the TPM event log against a policy. diff --git a/docs/versioned_docs/version-2.23/architecture/encrypted-storage.md b/docs/versioned_docs/version-2.23/architecture/encrypted-storage.md new file mode 100644 index 000000000..f047fa4a9 --- /dev/null +++ b/docs/versioned_docs/version-2.23/architecture/encrypted-storage.md @@ -0,0 +1,62 @@ +# Encrypted persistent storage + +Confidential VMs provide runtime memory encryption to protect data in use. +In the context of Kubernetes, this is sufficient for the confidentiality and integrity of stateless services. +Consider a front-end web server, for example, that keeps all connection information cached in main memory. +No sensitive data is ever written to an insecure medium. +However, many real-world applications need some form of state or data-lake service that's connected to a persistent storage device and requires encryption at rest. +As described in [Use persistent storage](../workflows/storage.md), cloud service providers (CSPs) use the container storage interface (CSI) to make their storage solutions available to Kubernetes workloads. +These CSI storage solutions often support some sort of encryption. +For example, Google Cloud [encrypts data at rest by default](https://cloud.google.com/security/encryption/default-encryption), without any action required by the customer. + +## Cloud provider-managed encryption + +CSP-managed storage solutions encrypt the data in the cloud backend before writing it physically to disk. +In the context of confidential computing and Constellation, the CSP and its managed services aren't trusted. +Hence, cloud provider-managed encryption protects your data from offline hardware access to physical storage devices. +It doesn't protect it from anyone with infrastructure-level access to the storage backend or a malicious insider in the cloud platform. +Even with "bring your own key" or similar concepts, the CSP performs the encryption process with access to the keys and plaintext data. + +In the security model of Constellation, securing persistent storage and thereby data at rest requires that all cryptographic operations are performed inside a trusted execution environment. +Consequently, using CSP-managed encryption of persistent storage usually isn't an option. + +## Constellation-managed encryption + +Constellation provides CSI drivers for storage solutions in all major clouds with built-in encryption support. +Block storage provisioned by the CSP is [mapped](https://guix.gnu.org/manual/en/html_node/Mapped-Devices.html) using the [dm-crypt](https://www.kernel.org/doc/html/latest/admin-guide/device-mapper/dm-crypt.html), and optionally the [dm-integrity](https://www.kernel.org/doc/html/latest/admin-guide/device-mapper/dm-integrity.html), kernel modules, before it's formatted and accessed by the Kubernetes workloads. +All cryptographic operations happen inside the trusted environment of the confidential Constellation node. + +Note that for integrity-protected disks, [volume expansion](https://kubernetes.io/blog/2018/07/12/resizing-persistent-volumes-using-kubernetes/) isn't supported. + +By default the driver uses data encryption keys (DEKs) issued by the Constellation [*KeyService*](microservices.md#keyservice). +The DEKs are in turn derived from the Constellation's key encryption key (KEK), which is directly derived from the [master secret](keys.md#master-secret). +This is the recommended mode of operation, and also requires the least amount of setup by the cluster administrator. + +Alternatively, the driver can be configured to use a key management system to store and access KEKs and DEKs. + +Refer to [keys and cryptography](keys.md) for more details on key management in Constellation. + +Once deployed and configured, the CSI driver ensures transparent encryption and integrity of all persistent volumes provisioned via its storage class. +Data at rest is secured without any additional actions required by the developer. + +## Cryptographic algorithms + +This section gives an overview of the libraries, cryptographic algorithms, and their configurations, used in Constellation's CSI drivers. + +### dm-crypt + +To interact with the dm-crypt kernel module, Constellation uses [libcryptsetup](https://gitlab.com/cryptsetup/cryptsetup/). +New devices are formatted as [LUKS2](https://gitlab.com/cryptsetup/LUKS2-docs/-/tree/master) partitions with a sector size of 4096 bytes. +The used key derivation function is [Argon2id](https://datatracker.ietf.org/doc/html/rfc9106) with the [recommended parameters for memory-constrained environments](https://datatracker.ietf.org/doc/html/rfc9106#section-7.4) of 3 iterations and 64 MiB of memory, utilizing 4 parallel threads. +For encryption Constellation uses AES in XTS-Plain64. The key size is 512 bit. + +### dm-integrity + +To interact with the dm-integrity kernel module, Constellation uses [libcryptsetup](https://gitlab.com/cryptsetup/cryptsetup/). +When enabled, the used data integrity algorithm is [HMAC](https://datatracker.ietf.org/doc/html/rfc2104) with SHA256 as the hash function. +The tag size is 32 Bytes. + +## Encrypted S3 object storage + +Constellation comes with a service that you can use to transparently retrofit client-side encryption to existing applications that use S3 (AWS or compatible) for storage. +To learn more, check out the [s3proxy documentation](../workflows/s3proxy.md). diff --git a/docs/versioned_docs/version-2.23/architecture/images.md b/docs/versioned_docs/version-2.23/architecture/images.md new file mode 100644 index 000000000..8a9c51d36 --- /dev/null +++ b/docs/versioned_docs/version-2.23/architecture/images.md @@ -0,0 +1,49 @@ +# Constellation images + +Constellation uses a minimal version of Fedora as the operating system running inside confidential VMs. This Linux distribution is optimized for containers and designed to be stateless. +The Constellation images provide measured boot and an immutable filesystem. + +## Measured boot + +```mermaid +flowchart LR + Firmware --> Bootloader + Bootloader --> uki + subgraph uki[Unified Kernel Image] + Kernel[Kernel] + initramfs[Initramfs] + cmdline[Kernel Command Line] + end + uki --> rootfs[Root Filesystem] +``` + +Measured boot uses a Trusted Platform Module (TPM) to measure every part of the boot process. This allows for verification of the integrity of a running system at any point in time. To ensure correct measurements of every stage, each stage is responsible to measure the next stage before transitioning. + +### Firmware + +With confidential VMs, the firmware is the root of trust and is measured automatically at boot. After initialization, the firmware will load and measure the bootloader before executing it. + +### Bootloader + +The bootloader is the first modifiable part of the boot chain. The bootloader is tasked with loading the kernel, initramfs and setting the kernel command line. The Constellation bootloader measures these components before starting the kernel. + +### initramfs + +The initramfs is a small filesystem loaded to prepare the actual root filesystem. The Constellation initramfs maps the block device containing the root filesystem with [dm-verity](https://www.kernel.org/doc/html/latest/admin-guide/device-mapper/verity.html). The initramfs then mounts the root filesystem from the mapped block device. + +dm-verity provides integrity checking using a cryptographic hash tree. When a block is read, its integrity is checked by verifying the tree against a trusted root hash. The initramfs reads this root hash from the previously measured kernel command line. Thus, if any block of the root filesystem's device is modified on disk, trying to read the modified block will result in a kernel panic at runtime. + +After mounting the root filesystem, the initramfs will switch over and start the `init` process of the integrity-protected root filesystem. + +## State disk + +In addition to the read-only root filesystem, each Constellation node has a disk for storing state data. +This disk is mounted readable and writable by the initramfs and contains data that should persist across reboots. +Such data can contain sensitive information and, therefore, must be stored securely. +To that end, the state disk is protected by authenticated encryption. +See the section on [keys and encryption](keys.md#storage-encryption) for more information on the cryptographic primitives in use. + +## Kubernetes components + +During initialization, the [*Bootstrapper*](microservices.md#bootstrapper) downloads and verifies the [Kubernetes components](https://kubernetes.io/docs/concepts/overview/components/) as configured by the user. +They're stored on the state partition and can be updated once new releases need to be installed. diff --git a/docs/versioned_docs/version-2.23/architecture/keys.md b/docs/versioned_docs/version-2.23/architecture/keys.md new file mode 100644 index 000000000..49821cd0b --- /dev/null +++ b/docs/versioned_docs/version-2.23/architecture/keys.md @@ -0,0 +1,130 @@ +# Key management and cryptographic primitives + +Constellation protects and isolates your cluster and workloads. +To that end, cryptography is the foundation that ensures the confidentiality and integrity of all components. +Evaluating the security and compliance of Constellation requires a precise understanding of the cryptographic primitives and keys used. +The following gives an overview of the architecture and explains the technical details. + +## Confidential VMs + +Confidential VM (CVM) technology comes with hardware and software components for memory encryption, isolation, and remote attestation. +For details on the implementations and cryptographic soundness, refer to the hardware vendors' documentation and advisories. + +## Master secret + +The master secret is the cryptographic material used for deriving the [*clusterID*](#cluster-identity) and the *key encryption key (KEK)* for [storage encryption](#storage-encryption). +It's generated during the bootstrapping of a Constellation cluster. +It can either be managed by [Constellation](#constellation-managed-key-management) or an [external key management system](#user-managed-key-management). +In case of [recovery](#recovery-and-migration), the master secret allows to decrypt the state and recover a Constellation cluster. + +## Cluster identity + +The identity of a Constellation cluster is represented by cryptographic [measurements](attestation.md#runtime-measurements): + +The **base measurements** represent the identity of a valid, uninitialized Constellation node. +They depend on the node image, but are otherwise the same for every Constellation cluster. +On node boot, they're determined using the CVM's attestation mechanism and [measured boot up to the read-only root filesystem](images.md). + +The **clusterID** represents the identity of a single initialized Constellation cluster. +It's derived from the master secret and a cryptographically random salt and unique for every Constellation cluster. +The [Bootstrapper](microservices.md#bootstrapper) measures the *clusterID* into its own PCR before executing any code not measured as part of the *base measurements*. +See [Node attestation](attestation.md#node-attestation) for details. + +The remote attestation statement of a Constellation cluster combines the *base measurements* and the *clusterID* for a verifiable, unspoofable, unique identity. + +## Network encryption + +Constellation encrypts all cluster network communication using the [container network interface (CNI)](https://github.com/containernetworking/cni). +See [network encryption](networking.md) for more details. + +The Cilium agent running on each node establishes a secure [WireGuard](https://www.wireguard.com/) tunnel between it and all other known nodes in the cluster. +Each node creates its own [Curve25519](http://cr.yp.to/ecdh.html) encryption key pair and distributes its public key via Kubernetes. +A node uses another node's public key to decrypt and encrypt traffic from and to Cilium-managed endpoints running on that node. +Connections are always encrypted peer-to-peer using [ChaCha20](http://cr.yp.to/chacha.html) with [Poly1305](http://cr.yp.to/mac.html). +WireGuard implements [forward secrecy with key rotation every 2 minutes](https://lists.zx2c4.com/pipermail/wireguard/2017-December/002141.html). + +## Storage encryption + +Constellation supports transparent encryption of persistent storage. +The Linux kernel's device mapper-based encryption features are used to encrypt the data on the block storage level. +Currently, the following primitives are used for block storage encryption: + +* [dm-crypt](https://www.kernel.org/doc/html/latest/admin-guide/device-mapper/dm-crypt.html) +* [dm-integrity](https://www.kernel.org/doc/html/latest/admin-guide/device-mapper/dm-integrity.html) + +Adding primitives for integrity protection in the CVM attacker model are under active development and will be available in a future version of Constellation. +See [encrypted storage](encrypted-storage.md) for more details. + +As a cluster administrator, when creating a cluster, you can use the Constellation [installation program](orchestration.md) to select one of the following methods for key management: + +* Constellation-managed key management +* User-managed key management + +### Constellation-managed key management + +#### Key material and key derivation + +During the creation of a Constellation cluster, the cluster's master secret is used to derive a KEK. +This means creating two clusters with the same master secret will yield the same KEK. +Any data encryption key (DEK) is derived from the KEK via HKDF. +Note that the master secret is recommended to be unique for every cluster and shouldn't be reused (except in case of [recovering](../workflows/recovery.md) a cluster). + +#### State and storage + +The KEK is derived from the master secret during the initialization. +Subsequently, all other key material is derived from the KEK. +Given the same KEK, any DEK can be derived deterministically from a given identifier. +Hence, there is no need to store DEKs. They can be derived on demand. +After the KEK was derived, it's stored in memory only and never leaves the CVM context. + +#### Availability + +Constellation-managed key management has the same availability as the underlying Kubernetes cluster. +Therefore, the KEK is stored in the [distributed Kubernetes etcd storage](https://kubernetes.io/docs/tasks/administer-cluster/configure-upgrade-etcd/) to allow for unexpected but non-fatal (control-plane) node failure. +The etcd storage is backed by the encrypted and integrity protected [state disk](images.md#state-disk) of the nodes. + +#### Recovery + +Constellation clusters can be recovered in the event of a disaster, even when all node machines have been stopped and need to be rebooted. +For details on the process see the [recovery workflow](../workflows/recovery.md). + +### User-managed key management + +User-managed key management is under active development and will be available soon. +In scenarios where constellation-managed key management isn't an option, this mode allows you to keep full control of your keys. +For example, compliance requirements may force you to keep your KEKs in an on-prem key management system (KMS). + +During the creation of a Constellation cluster, you specify a KEK present in a remote KMS. +This follows the common scheme of "bring your own key" (BYOK). +Constellation will support several KMSs for managing the storage and access of your KEK. +Initially, it will support the following KMSs: + +* [AWS KMS](https://aws.amazon.com/kms/) +* [GCP KMS](https://cloud.google.com/security-key-management) +* [Azure Key Vault](https://azure.microsoft.com/en-us/services/key-vault/#product-overview) +* [KMIP-compatible KMS](https://www.oasis-open.org/committees/tc_home.php?wg_abbrev=kmip) + +Storing the keys in Cloud KMS of AWS, Azure, or GCP binds the key usage to the particular cloud identity access management (IAM). +In the future, Constellation will support remote attestation-based access policies for Cloud KMS once available. +Note that using a Cloud KMS limits the isolation and protection to the guarantees of the particular offering. + +KMIP support allows you to use your KMIP-compatible on-prem KMS and keep full control over your keys. +This follows the common scheme of "hold your own key" (HYOK). + +The KEK is used to encrypt per-data "data encryption keys" (DEKs). +DEKs are generated to encrypt your data before storing it on persistent storage. +After being encrypted by the KEK, the DEKs are stored on dedicated cloud storage for persistence. +Currently, Constellation supports the following cloud storage options: + +* [AWS S3](https://aws.amazon.com/s3/) +* [GCP Cloud Storage](https://cloud.google.com/storage) +* [Azure Blob Storage](https://azure.microsoft.com/en-us/services/storage/blobs/#overview) + +The DEKs are only present in plaintext form in the encrypted main memory of the CVMs. +Similarly, the cryptographic operations for encrypting data before writing it to persistent storage are performed in the context of the CVMs. + +#### Recovery and migration + +In the case of a disaster, the KEK can be used to decrypt the DEKs locally and subsequently use them to decrypt and retrieve the data. +In case of migration, configuring the same KEK will provide seamless migration of data. +Thus, only the DEK storage needs to be transferred to the new cluster alongside the encrypted data for seamless migration. diff --git a/docs/versioned_docs/version-2.23/architecture/microservices.md b/docs/versioned_docs/version-2.23/architecture/microservices.md new file mode 100644 index 000000000..90bae783b --- /dev/null +++ b/docs/versioned_docs/version-2.23/architecture/microservices.md @@ -0,0 +1,73 @@ +# Microservices + +Constellation takes care of bootstrapping and initializing a Confidential Kubernetes cluster. +During the lifetime of the cluster, it handles day 2 operations such as key management, remote attestation, and updates. +These features are provided by several microservices: + +* The [Bootstrapper](microservices.md#bootstrapper) initializes a Constellation node and bootstraps the cluster +* The [JoinService](microservices.md#joinservice) joins new nodes to an existing cluster +* The [VerificationService](microservices.md#verificationservice) provides remote attestation functionality +* The [KeyService](microservices.md#keyservice) manages Constellation-internal keys + +The relations between microservices are shown in the following diagram: + +```mermaid +flowchart LR + subgraph admin [Admin's machine] + A[Constellation CLI] + end + subgraph img [Constellation OS image] + B[Constellation OS] + C[Bootstrapper] + end + subgraph Kubernetes + D[JoinService] + E[KeyService] + F[VerificationService] + end + A -- deploys --> + B -- starts --> C + C -- deploys --> D + C -- deploys --> E + C -- deploys --> F +``` + +## Bootstrapper + +The *Bootstrapper* is the first microservice launched after booting a Constellation node image. +It sets up that machine as a Kubernetes node and integrates that node into the Kubernetes cluster. +To this end, the *Bootstrapper* first downloads and verifies the [Kubernetes components](https://kubernetes.io/docs/concepts/overview/components/) at the configured versions. +The *Bootstrapper* tries to find an existing cluster and if successful, communicates with the [JoinService](microservices.md#joinservice) to join the node. +Otherwise, it waits for an initialization request to create a new Kubernetes cluster. + +## JoinService + +The *JoinService* runs as [DaemonSet](https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/) on each control-plane node. +New nodes (at cluster start, or later through autoscaling) send a request to the service over [attested TLS (aTLS)](attestation.md#attested-tls-atls). +The *JoinService* verifies the new node's certificate and attestation statement. +If attestation is successful, the new node is supplied with an encryption key from the [*KeyService*](microservices.md#keyservice) for its state disk, and a Kubernetes bootstrap token. + + +```mermaid +sequenceDiagram + participant New node + participant JoinService + New node->>JoinService: aTLS handshake (server side verification) + JoinService-->>New node: # + New node->>+JoinService: IssueJoinTicket(DiskUUID, NodeName, IsControlPlane) + JoinService->>+KeyService: GetDataKey(DiskUUID) + KeyService-->>-JoinService: DiskEncryptionKey + JoinService-->>-New node: DiskEncryptionKey, KubernetesJoinToken, ... +``` + +## VerificationService + +The *VerificationService* runs as DaemonSet on each node. +It provides user-facing functionality for remote attestation during the cluster's lifetime via an endpoint for [verifying the cluster](attestation.md#cluster-attestation). +Read more about the hardware-based [attestation feature](attestation.md) of Constellation and how to [verify](../workflows/verify-cluster.md) a cluster on the client side. + +## KeyService + +The *KeyService* runs as DaemonSet on each control-plane node. +It implements the key management for the [storage encryption keys](keys.md#storage-encryption) in Constellation. These keys are used for the [state disk](images.md#state-disk) of each node and the [transparently encrypted storage](encrypted-storage.md) for Kubernetes. +Depending on wether the [constellation-managed](keys.md#constellation-managed-key-management) or [user-managed](keys.md#user-managed-key-management) mode is used, the *KeyService* holds the key encryption key (KEK) directly or calls an external key management service (KMS) for key derivation respectively. diff --git a/docs/versioned_docs/version-2.23/architecture/networking.md b/docs/versioned_docs/version-2.23/architecture/networking.md new file mode 100644 index 000000000..e9cbdf029 --- /dev/null +++ b/docs/versioned_docs/version-2.23/architecture/networking.md @@ -0,0 +1,22 @@ +# Network encryption + +Constellation encrypts all pod communication using the [container network interface (CNI)](https://github.com/containernetworking/cni). +To that end, Constellation deploys, configures, and operates the [Cilium](https://cilium.io/) CNI plugin. +Cilium provides [transparent encryption](https://docs.cilium.io/en/stable/security/network/encryption) for all cluster traffic using either IPSec or [WireGuard](https://www.wireguard.com/). +Currently, Constellation only supports WireGuard as the encryption engine. +You can read more about the cryptographic soundness of WireGuard [in their white paper](https://www.wireguard.com/papers/wireguard.pdf). + +Cilium is actively working on implementing a feature called [`host-to-host`](https://github.com/cilium/cilium/pull/19401) encryption mode for WireGuard. +With `host-to-host`, all traffic between nodes will be tunneled via WireGuard (host-to-host, host-to-pod, pod-to-host, pod-to-pod). +Until the `host-to-host` feature is released, Constellation enables `pod-to-pod` encryption. +This mode encrypts all traffic between Kubernetes pods using WireGuard tunnels. + +When using Cilium in the default setup but with encryption enabled, there is a [known issue](https://docs.cilium.io/en/v1.12/gettingstarted/encryption/#egress-traffic-to-not-yet-discovered-remote-endpoints-may-be-unencrypted) +that can cause pod-to-pod traffic to be unencrypted. +To mitigate this issue, Constellation adds a *strict* mode to Cilium's `pod-to-pod` encryption. +This mode changes the default behavior of traffic that's destined for an unknown endpoint to not be send out in plaintext, but instead being dropped. +The strict mode distinguishes between traffic that's send to a pod from traffic that's destined for a cluster-external endpoint by considering the pod's CIDR range. + +Traffic originating from hosts isn't encrypted yet. +This mainly includes health checks from Kubernetes API server. +Also, traffic proxied over the API server via e.g. `kubectl port-forward` isn't encrypted. diff --git a/docs/versioned_docs/version-2.23/architecture/observability.md b/docs/versioned_docs/version-2.23/architecture/observability.md new file mode 100644 index 000000000..0f4daffd4 --- /dev/null +++ b/docs/versioned_docs/version-2.23/architecture/observability.md @@ -0,0 +1,74 @@ +# Observability + +In Kubernetes, observability is the ability to gain insight into the behavior and performance of applications. +It helps identify and resolve issues more effectively, ensuring stability and performance of Kubernetes workloads, reducing downtime and outages, and improving efficiency. +The "three pillars of observability" are logs, metrics, and traces. + +In the context of Confidential Computing, observability is a delicate subject and needs to be applied such that it doesn't leak any sensitive information. +The following gives an overview of where and how you can apply standard observability tools in Constellation. + +## Cloud resource monitoring + +While inaccessible, Constellation's nodes are still visible as black box VMs to the hypervisor. +Resource consumption, such as memory and CPU utilization, can be monitored from the outside and observed via the cloud platforms directly. +Similarly, other resources, such as storage and network and their respective metrics, are visible via the cloud platform. + +## Metrics + +Metrics are numeric representations of data measured over intervals of time. They're essential for understanding system health and gaining insights using telemetry signals. + +By default, Constellation exposes the [metrics for Kubernetes system components](https://kubernetes.io/docs/concepts/cluster-administration/system-metrics/) inside the cluster. +Similarly, the [etcd metrics](https://etcd.io/docs/v3.5/metrics/) endpoints are exposed inside the cluster. +These [metrics endpoints can be disabled](https://kubernetes.io/docs/concepts/cluster-administration/system-metrics/#disabling-metrics). + +You can collect these cluster-internal metrics via tools such as [Prometheus](https://prometheus.io/) or the [Elastic Stack](https://www.elastic.co/de/elastic-stack/). + +Constellation's CNI Cilium also supports [metrics via Prometheus endpoints](https://docs.cilium.io/en/latest/observability/metrics/). +However, in Constellation, they're disabled by default and must be enabled first. + +## Logs + +Logs represent discrete events that usually describe what's happening with your service. +The payload is an actual message emitted from your system along with a metadata section containing a timestamp, labels, and tracking identifiers. + +### System logs + +Detailed system-level logs are accessible via `/var/log` and [journald](https://www.freedesktop.org/software/systemd/man/systemd-journald.service.html) on the nodes directly. +They can be collected from there, for example, via [Filebeat and Logstash](https://www.elastic.co/guide/en/beats/filebeat/current/logstash-output.html), which are tools of the [Elastic Stack](https://www.elastic.co/de/elastic-stack/). + +In case of an error during the initialization, the CLI automatically collects the [Bootstrapper](./microservices.md#bootstrapper) logs and returns these as a file for [troubleshooting](../workflows/troubleshooting.md). Here is an example of such an event: + +```shell-session +Cluster initialization failed. This error is not recoverable. +Terminate your cluster and try again. +Fetched bootstrapper logs are stored in "constellation-cluster.log" +``` + +### Kubernetes logs + +Constellation supports the [Kubernetes logging architecture](https://kubernetes.io/docs/concepts/cluster-administration/logging/). +By default, logs are written to the nodes' encrypted state disks. +These include the Pod and container logs and the [system component logs](https://kubernetes.io/docs/concepts/cluster-administration/logging/#system-component-logs). + +[Constellation services](microservices.md) run as Pods inside the `kube-system` namespace and use the standard container logging mechanism. +The same applies for the [Cilium Pods](https://docs.cilium.io/en/latest/operations/troubleshooting/#logs). + +You can collect logs from within the cluster via tools such as [Fluentd](https://github.com/fluent/fluentd), [Loki](https://github.com/grafana/loki), or the [Elastic Stack](https://www.elastic.co/de/elastic-stack/). + +## Traces + +Modern systems are implemented as interconnected complex and distributed microservices. Understanding request flows and system communications is challenging, mainly because all systems in a chain need to be modified to propagate tracing information. Distributed tracing is a new approach to increasing observability and understanding performance bottlenecks. A trace represents consecutive events that reflect an end-to-end request path in a distributed system. + +Constellation supports [traces for Kubernetes system components](https://kubernetes.io/docs/concepts/cluster-administration/system-traces/). +By default, they're disabled and need to be enabled first. + +Similarly, Cilium can be enabled to [export traces](https://cilium.io/use-cases/metrics-export/). + +You can collect these traces via tools such as [Jaeger](https://www.jaegertracing.io/) or [Zipkin](https://zipkin.io/). + +## Integrations + +Platforms and SaaS solutions such as Datadog, logz.io, Dynatrace, or New Relic facilitate the observability challenge for Kubernetes and provide all-in-one SaaS solutions. +They install agents into the cluster that collect metrics, logs, and tracing information and upload them into the data lake of the platform. +Technically, the agent-based approach is compatible with Constellation, and attaching these platforms is straightforward. +However, you need to evaluate if the exported data might violate Constellation's compliance and privacy guarantees by uploading them to a third-party platform. diff --git a/docs/versioned_docs/version-2.23/architecture/orchestration.md b/docs/versioned_docs/version-2.23/architecture/orchestration.md new file mode 100644 index 000000000..3c8d529e7 --- /dev/null +++ b/docs/versioned_docs/version-2.23/architecture/orchestration.md @@ -0,0 +1,83 @@ +# Orchestrating Constellation clusters + +You can use the CLI to create a cluster on the supported cloud platforms. +The CLI provisions the resources in your cloud environment and initiates the initialization of your cluster. +It uses a set of parameters and an optional configuration file to manage your cluster installation. +The CLI is also used for updating your cluster. + +## Workspaces + +Each Constellation cluster has an associated *workspace*. +The workspace is where data such as the Constellation state and config files are stored. +Each workspace is associated with a single cluster and configuration. +The CLI stores state in the local filesystem making the current directory the active workspace. +Multiple clusters require multiple workspaces, hence, multiple directories. +Note that every operation on a cluster always has to be performed from the directory associated with its workspace. + +You may copy files from the workspace to other locations, +but you shouldn't move or delete them while the cluster is still being used. +The Constellation CLI takes care of managing the workspace. +Only when a cluster was terminated, and you are sure the files aren't needed anymore, should you remove a workspace. + +## Cluster creation process + +To allow for fine-grained configuration of your cluster and cloud environment, Constellation supports an extensive configuration file with strong defaults. [Generating the configuration file](../workflows/config.md) is typically the first thing you do in the workspace. + +Altogether, the following files are generated during the creation of a Constellation cluster and stored in the current workspace: + +* a configuration file +* a state file +* a Base64-encoded master secret +* [Terraform artifacts](../reference/terraform.md), stored in subdirectories +* a Kubernetes `kubeconfig` file. + +After the initialization of your cluster, the CLI will provide you with a Kubernetes `kubeconfig` file. +This file grants you access to your Kubernetes cluster and configures the [kubectl](https://kubernetes.io/docs/concepts/configuration/organize-cluster-access-kubeconfig/) tool. +In addition, the cluster's [identifier](orchestration.md#post-installation-configuration) is returned and stored in the state file. + +### Creation process details + +1. The CLI `apply` command first creates the confidential VM (CVM) resources in your cloud environment and configures the network +2. Each CVM boots the Constellation node image and measures every component in the boot chain +3. The first microservice launched in each node is the [*Bootstrapper*](microservices.md#bootstrapper) +4. The *Bootstrapper* waits until it either receives an initialization request or discovers an initialized cluster +5. The CLI then connects to the *Bootstrapper* of a selected node, sends the configuration, and initiates the initialization of the cluster +6. The *Bootstrapper* of **that** node [initializes the Kubernetes cluster](microservices.md#bootstrapper) and deploys the other Constellation [microservices](microservices.md) including the [*JoinService*](microservices.md#joinservice) +7. Subsequently, the *Bootstrappers* of the other nodes discover the initialized cluster and send join requests to the *JoinService* +8. As part of the join request each node includes an attestation statement of its boot measurements as authentication +9. The *JoinService* verifies the attestation statements and joins the nodes to the Kubernetes cluster +10. This process is repeated for every node joining the cluster later (e.g., through autoscaling) + +## Post-installation configuration + +Post-installation the CLI provides a configuration for [accessing the cluster using the Kubernetes API](https://kubernetes.io/docs/tasks/administer-cluster/access-cluster-api/). +The `kubeconfig` file provides the credentials and configuration for connecting and authenticating to the API server. +Once configured, orchestrate the Kubernetes cluster via `kubectl`. + +After the initialization, the CLI will present you with a couple of tokens: + +* The [*master secret*](keys.md#master-secret) (stored in the `constellation-mastersecret.json` file by default) +* The [*clusterID*](keys.md#cluster-identity) of your cluster in Base64 encoding + +You can read more about these values and their meaning in the guide on [cluster identity](keys.md#cluster-identity). + +The *master secret* must be kept secret and can be used to [recover your cluster](../workflows/recovery.md). +Instead of managing this secret manually, you can [use your key management solution of choice](keys.md#user-managed-key-management) with Constellation. + +The *clusterID* uniquely identifies a cluster and can be used to [verify your cluster](../workflows/verify-cluster.md). + +## Upgrades + +Constellation images and microservices may need to be upgraded to new versions during the lifetime of a cluster. +Constellation implements a rolling update mechanism ensuring no downtime of the control or data plane. +You can upgrade a Constellation cluster with a single operation by using the CLI. +For step-by-step instructions on how to do this, refer to [Upgrade your cluster](../workflows/upgrade.md). + +### Attestation of upgrades + +With every new image, corresponding measurements are released. +During an update procedure, the CLI provides new measurements to the [JoinService](microservices.md#joinservice) securely. +New measurements for an updated image are automatically pulled and verified by the CLI following the [supply chain security concept](attestation.md#chain-of-trust) of Constellation. +The [attestation section](attestation.md#cluster-facing-attestation) describes in detail how these measurements are then used by the JoinService for the attestation of nodes. + + diff --git a/docs/versioned_docs/version-2.23/architecture/overview.md b/docs/versioned_docs/version-2.23/architecture/overview.md new file mode 100644 index 000000000..386f93b2f --- /dev/null +++ b/docs/versioned_docs/version-2.23/architecture/overview.md @@ -0,0 +1,30 @@ +# Overview + +Constellation is a cloud-based confidential orchestration platform. +The foundation of Constellation is Kubernetes and therefore shares the same technology stack and architecture principles. +To learn more about Constellation and Kubernetes, see [product overview](../overview/product.md). + +## About orchestration and updates + +As a cluster administrator, you can use the [Constellation CLI](orchestration.md) to install and deploy a cluster. +Updates are provided in accordance with the [support policy](versions.md). + +## About microservices and attestation + +Constellation manages the nodes and network in your cluster. All nodes are bootstrapped by the [*Bootstrapper*](microservices.md#bootstrapper). They're verified and authenticated by the [*JoinService*](microservices.md#joinservice) before being added to the cluster and the network. Finally, the entire cluster can be verified via the [*VerificationService*](microservices.md#verificationservice) using [remote attestation](attestation.md). + +## About node images and verified boot + +Constellation comes with operating system images for Kubernetes control-plane and worker nodes. +They're highly optimized for running containerized workloads and specifically prepared for running inside confidential VMs. +You can learn more about [the images](images.md) and how verified boot ensures their integrity during boot and beyond. + +## About key management and cryptographic primitives + +Encryption of data at-rest, in-transit, and in-use is the fundamental building block for confidential computing and Constellation. Learn more about the [keys and cryptographic primitives](keys.md) used in Constellation, [encrypted persistent storage](encrypted-storage.md), and [network encryption](networking.md). + +## About observability + +Observability in Kubernetes refers to the capability to troubleshoot issues using telemetry signals such as logs, metrics, and traces. +In the realm of Confidential Computing, it's crucial that observability aligns with confidentiality, necessitating careful implementation. +Learn more about the [observability capabilities in Constellation](./observability.md). diff --git a/docs/versioned_docs/version-2.23/architecture/versions.md b/docs/versioned_docs/version-2.23/architecture/versions.md new file mode 100644 index 000000000..d5cbc987b --- /dev/null +++ b/docs/versioned_docs/version-2.23/architecture/versions.md @@ -0,0 +1,21 @@ +# Versions and support policy + +All components of Constellation use a three-digit version number of the form `v..`. +The components are released in lock step, usually on the first Tuesday of every month. This release primarily introduces new features, but may also include security or performance improvements. The `MINOR` version will be incremented as part of this release. + +Additional `PATCH` releases may be created on demand, to fix security issues or bugs before the next `MINOR` release window. + +New releases are published on [GitHub](https://github.com/edgelesssys/constellation/releases). + +## Kubernetes support policy + +Constellation is aligned to the [version support policy of Kubernetes](https://kubernetes.io/releases/version-skew-policy/#supported-versions), and therefore usually supports the most recent three minor versions. +When a new minor version of Kubernetes is released, support is added to the next Constellation release, and that version then supports four Kubernetes versions. +Subsequent Constellation releases drop support for the oldest (and deprecated) Kubernetes version. + +The following Kubernetes versions are currently supported: + + +* v1.29.15 +* v1.30.12 +* v1.31.8 diff --git a/docs/versioned_docs/version-2.23/getting-started/examples.md b/docs/versioned_docs/version-2.23/getting-started/examples.md new file mode 100644 index 000000000..fded84980 --- /dev/null +++ b/docs/versioned_docs/version-2.23/getting-started/examples.md @@ -0,0 +1,6 @@ +# Examples + +After you [installed the CLI](install.md) and [created your first cluster](first-steps.md), you're ready to deploy applications. Why not start with one of the following examples? +* [Emojivoto](examples/emojivoto.md): a simple but fun web application +* [Online Boutique](examples/online-boutique.md): an e-commerce demo application by Google consisting of 11 separate microservices +* [Horizontal Pod Autoscaling](examples/horizontal-scaling.md): an example demonstrating Constellation's autoscaling capabilities diff --git a/docs/versioned_docs/version-2.23/getting-started/examples/emojivoto.md b/docs/versioned_docs/version-2.23/getting-started/examples/emojivoto.md new file mode 100644 index 000000000..2bbe27917 --- /dev/null +++ b/docs/versioned_docs/version-2.23/getting-started/examples/emojivoto.md @@ -0,0 +1,22 @@ +# Emojivoto +[Emojivoto](https://github.com/BuoyantIO/emojivoto) is a simple and fun application that's well suited to test the basic functionality of your cluster. + + + +emojivoto - Web UI + + + +1. Deploy the application: + ```bash + kubectl apply -k github.com/BuoyantIO/emojivoto/kustomize/deployment + ``` +2. Wait until it becomes available: + ```bash + kubectl wait --for=condition=available --timeout=60s -n emojivoto --all deployments + ``` +3. Forward the web service to your machine: + ```bash + kubectl -n emojivoto port-forward svc/web-svc 8080:80 + ``` +4. Visit [http://localhost:8080](http://localhost:8080) diff --git a/docs/versioned_docs/version-2.23/getting-started/examples/filestash-s3proxy.md b/docs/versioned_docs/version-2.23/getting-started/examples/filestash-s3proxy.md new file mode 100644 index 000000000..b9a394256 --- /dev/null +++ b/docs/versioned_docs/version-2.23/getting-started/examples/filestash-s3proxy.md @@ -0,0 +1,107 @@ + +# Deploying Filestash + +Filestash is a web frontend for different storage backends, including S3. +It's a useful application to showcase s3proxy in action. + +1. Deploy s3proxy as described in [Deployment](../../workflows/s3proxy.md#deployment). +2. Create a deployment file for Filestash with one pod: + +```sh +cat << EOF > "deployment-filestash.yaml" +apiVersion: apps/v1 +kind: Deployment +metadata: + name: filestash +spec: + replicas: 1 + selector: + matchLabels: + app: filestash + template: + metadata: + labels: + app: filestash + spec: + hostAliases: + - ip: $(kubectl get svc s3proxy-service -o=jsonpath='{.spec.clusterIP}') + hostnames: + - "s3.us-east-1.amazonaws.com" + - "s3.us-east-2.amazonaws.com" + - "s3.us-west-1.amazonaws.com" + - "s3.us-west-2.amazonaws.com" + - "s3.eu-north-1.amazonaws.com" + - "s3.eu-south-1.amazonaws.com" + - "s3.eu-south-2.amazonaws.com" + - "s3.eu-west-1.amazonaws.com" + - "s3.eu-west-2.amazonaws.com" + - "s3.eu-west-3.amazonaws.com" + - "s3.eu-central-1.amazonaws.com" + - "s3.eu-central-2.amazonaws.com" + - "s3.ap-northeast-1.amazonaws.com" + - "s3.ap-northeast-2.amazonaws.com" + - "s3.ap-northeast-3.amazonaws.com" + - "s3.ap-east-1.amazonaws.com" + - "s3.ap-southeast-1.amazonaws.com" + - "s3.ap-southeast-2.amazonaws.com" + - "s3.ap-southeast-3.amazonaws.com" + - "s3.ap-southeast-4.amazonaws.com" + - "s3.ap-south-1.amazonaws.com" + - "s3.ap-south-2.amazonaws.com" + - "s3.me-south-1.amazonaws.com" + - "s3.me-central-1.amazonaws.com" + - "s3.il-central-1.amazonaws.com" + - "s3.af-south-1.amazonaws.com" + - "s3.ca-central-1.amazonaws.com" + - "s3.sa-east-1.amazonaws.com" + containers: + - name: filestash + image: machines/filestash:latest + ports: + - containerPort: 8334 + volumeMounts: + - name: ca-cert + mountPath: /etc/ssl/certs/kube-ca.crt + subPath: kube-ca.crt + volumes: + - name: ca-cert + secret: + secretName: s3proxy-tls + items: + - key: ca.crt + path: kube-ca.crt +EOF +``` + +The pod spec includes the `hostAliases` key, which adds an entry to the pod's `/etc/hosts`. +The entry forwards all requests for any of the currently defined AWS regions to the Kubernetes service `s3proxy-service`. +If you followed the s3proxy [Deployment](../../workflows/s3proxy.md#deployment) guide, this service points to a s3proxy pod. + +The deployment specifies all regions explicitly to prevent accidental data leaks. +If one of your buckets were located in a region that's not part of the `hostAliases` key, traffic towards those buckets would not be redirected to s3proxy. +Similarly, if you want to exclude data for specific regions from going through s3proxy you can remove those regions from the deployment. + +The spec also includes a volume mount for the TLS certificate and adds it to the pod's certificate trust store. +The volume is called `ca-cert`. +The key `ca.crt` of that volume is mounted to `/etc/ssl/certs/kube-ca.crt`, which is the default certificate trust store location for that container's OpenSSL library. +Not adding the CA certificate will result in TLS authentication errors. + +3. Apply the file: `kubectl apply -f deployment-filestash.yaml` + +Afterward, you can use a port forward to access the Filestash pod: +`kubectl port-forward pod/$(kubectl get pod --selector='app=filestash' -o=jsonpath='{.items[*].metadata.name}') 8334:8334` + +4. After browsing to `localhost:8443`, Filestash will ask you to set an administrator password. +After setting it, you can directly leave the admin area by clicking the blue cloud symbol in the top left corner. +Subsequently, you can select S3 as storage backend and enter your credentials. +This will bring you to an overview of your buckets. +If you want to deploy Filestash in production, take a look at its [documentation](https://www.filestash.app/docs/). + +5. To see the logs of s3proxy intercepting requests made to S3, run: `kubectl logs -f pod/$(kubectl get pod --selector='app=s3proxy' -o=jsonpath='{.items[*].metadata.name}')` +Look out for log messages labeled `intercepting`. +There is one such log message for each message that's encrypted, decrypted, or blocked. + +6. Once you have uploaded a file with Filestash, you should be able to view the file in Filestash. +However, if you go to the AWS S3 [Web UI](https://s3.console.aws.amazon.com/s3/home) and download the file you just uploaded in Filestash, you won't be able to read it. +Another way to spot encrypted files without downloading them is to click on a file, scroll to the Metadata section, and look for the header named `x-amz-meta-constellation-encryption`. +This header holds the encrypted data encryption key of the object and is only present on objects that are encrypted by s3proxy. diff --git a/docs/versioned_docs/version-2.23/getting-started/examples/horizontal-scaling.md b/docs/versioned_docs/version-2.23/getting-started/examples/horizontal-scaling.md new file mode 100644 index 000000000..dfaf9e742 --- /dev/null +++ b/docs/versioned_docs/version-2.23/getting-started/examples/horizontal-scaling.md @@ -0,0 +1,98 @@ +# Horizontal Pod Autoscaling +This example demonstrates Constellation's autoscaling capabilities. It's based on the Kubernetes [HorizontalPodAutoscaler Walkthrough](https://kubernetes.io/docs/tasks/run-application/horizontal-pod-autoscale-walkthrough/). During the following steps, Constellation will spawn new VMs on demand, verify them, add them to the cluster, and delete them again when the load has settled down. + +## Requirements +The cluster needs to be initialized with Kubernetes 1.23 or later. In addition, [autoscaling must be enabled](../../workflows/scale.md) to enable Constellation to assign new nodes dynamically. + +Just for this example specifically, the cluster should have as few worker nodes in the beginning as possible. Start with a small cluster with only *one* low-powered node for the control-plane node and *one* low-powered worker node. + +:::info +We tested the example using instances of types `Standard_DC4as_v5` on Azure and `n2d-standard-4` on GCP. +::: + +## Setup + +1. Install the Kubernetes Metrics Server: + ```bash + kubectl apply -f https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/components.yaml + ``` + +2. Deploy the HPA example server that's supposed to be scaled under load. + + This manifest is similar to the one from the Kubernetes HPA walkthrough, but with increased CPU limits and requests to facilitate the triggering of node scaling events. + ```bash + cat < + +Online Boutique - Web UI + + + +1. Create a namespace: + ```bash + kubectl create ns boutique + ``` +2. Deploy the application: + ```bash + kubectl apply -n boutique -f https://github.com/GoogleCloudPlatform/microservices-demo/raw/main/release/kubernetes-manifests.yaml + ``` +3. Wait for all services to become available: + ```bash + kubectl wait --for=condition=available --timeout=300s -n boutique --all deployments + ``` +4. Get the frontend's external IP address: + ```shell-session + $ kubectl get service frontend-external -n boutique | awk '{print $4}' + EXTERNAL-IP + + ``` + (`` is a placeholder for the IP assigned by your CSP.) +5. Enter the IP from the result in your browser to browse the online shop. diff --git a/docs/versioned_docs/version-2.23/getting-started/first-steps-local.md b/docs/versioned_docs/version-2.23/getting-started/first-steps-local.md new file mode 100644 index 000000000..98f0302de --- /dev/null +++ b/docs/versioned_docs/version-2.23/getting-started/first-steps-local.md @@ -0,0 +1,277 @@ +# First steps with a local cluster + +A local cluster lets you deploy and test Constellation without a cloud subscription. +You have two options: + +* Use MiniConstellation to automatically deploy a two-node cluster. +* For more fine-grained control, create the cluster using the QEMU provider. + +Both options use virtualization to create a local cluster with control-plane nodes and worker nodes. They **don't** require hardware with Confidential VM (CVM) support. For attestation, they currently use a software-based vTPM provided by KVM/QEMU. + +You need an x64 machine with a Linux OS. +You can use a VM, but it needs nested virtualization. + +## Prerequisites + +* Machine requirements: + * An x86-64 CPU with at least 4 cores (6 cores are recommended) + * At least 4 GB RAM (6 GB are recommended) + * 20 GB of free disk space + * Hardware virtualization enabled in the BIOS/UEFI (often referred to as Intel VT-x or AMD-V/SVM) / nested-virtualization support when using a VM +* Software requirements: + * Linux OS with [KVM kernel module](https://www.linux-kvm.org/page/Main_Page) + * Recommended: Ubuntu 22.04 LTS + * [Docker](https://docs.docker.com/engine/install/) + * [xsltproc](https://gitlab.gnome.org/GNOME/libxslt/-/wikis/home) + * (Optional) [virsh](https://www.libvirt.org/manpages/virsh.html) to observe and access your nodes + +### Software installation on Ubuntu + +```bash +# install Docker +curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg +echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null +sudo apt update +sudo apt install docker-ce +# install other dependencies +sudo apt install xsltproc +sudo snap install kubectl --classic +# install Constellation CLI +curl -LO https://github.com/edgelesssys/constellation/releases/latest/download/constellation-linux-amd64 +sudo install constellation-linux-amd64 /usr/local/bin/constellation +# do not drop forwarded packages +sudo iptables -P FORWARD ACCEPT +``` + +## Create a cluster + + + + + +With the `constellation mini` command, you can deploy and test Constellation locally. This mode is called MiniConstellation. Conceptually, MiniConstellation is similar to [MicroK8s](https://microk8s.io/), [K3s](https://k3s.io/), and [minikube](https://minikube.sigs.k8s.io/docs/). + + +:::caution + +MiniConstellation has specific soft- and hardware requirements such as a Linux OS running on an x86-64 CPU. Pay attention to all [prerequisites](#prerequisites) when setting up. + +::: + +:::note + +Since MiniConstellation runs on your local system, cloud features such as load balancing, +attaching persistent storage, or autoscaling aren't available. + +::: + +The following creates your MiniConstellation cluster (may take up to 10 minutes to complete): + +```bash +constellation mini up +``` + +This will configure your current directory as the [workspace](../architecture/orchestration.md#workspaces) for this cluster. +All `constellation` commands concerning this cluster need to be issued from this directory. + + + + +With the QEMU provider, you can create a local Constellation cluster as if it were in the cloud. The provider uses [QEMU](https://www.qemu.org/) to create multiple VMs for the cluster nodes, which interact with each other. + +:::caution + +Constellation on QEMU has specific soft- and hardware requirements such as a Linux OS running on an x86-64 CPU. Pay attention to all [prerequisites](#prerequisites) when setting up. + +::: + +:::note + +Since Constellation on QEMU runs on your local system, cloud features such as load balancing, +attaching persistent storage, or autoscaling aren't available. + +::: + +1. To set up your local cluster, you need to create a configuration file for Constellation first. + + ```bash + constellation config generate qemu + ``` + + This creates a [configuration file](../workflows/config.md) for QEMU called `constellation-conf.yaml`. After that, your current folder also becomes your [workspace](../architecture/orchestration.md#workspaces). All `constellation` commands for your cluster need to be executed from this directory. + +2. Now you can create your cluster and its nodes. `constellation apply` uses the options set in `constellation-conf.yaml`. + + ```bash + constellation apply -y + ``` + + The Output should look like the following: + + ```shell-session + $ constellation apply -y + Checking for infrastructure changes + The following Constellation cluster will be created: + 3 control-plane nodes of type 2-vCPUs will be created. + 1 worker node of type 2-vCPUs will be created. + Creating + Cloud infrastructure created successfully. + Your Constellation master secret was successfully written to ./constellation-mastersecret.json + Connecting + Initializing cluster + Installing Kubernetes components + Your Constellation cluster was successfully initialized. + + Constellation cluster identifier g6iMP5wRU1b7mpOz2WEISlIYSfdAhB0oNaOg6XEwKFY= + Kubernetes configuration constellation-admin.conf + + You can now connect to your cluster by executing: + export KUBECONFIG="$PWD/constellation-admin.conf" + ``` + + The cluster's identifier will be different in your output. + Keep `constellation-mastersecret.json` somewhere safe. + This will allow you to [recover your cluster](../workflows/recovery.md) in case of a disaster. + + :::info + + Depending on your setup, `constellation apply` may take 10+ minutes to complete. + + ::: + +3. Configure kubectl + + ```bash + export KUBECONFIG="$PWD/constellation-admin.conf" + ``` + + + + +## Connect to the cluster + +Your cluster initially consists of a single control-plane node: + +```shell-session +$ kubectl get nodes +NAME STATUS ROLES AGE VERSION +control-plane-0 Ready control-plane 66s v1.24.6 +``` + +Additional nodes will request to join the cluster shortly. Before each additional node is allowed to join the cluster, its state is verified using remote attestation by the [JoinService](../architecture/microservices.md#joinservice). +If verification passes successfully, the new node receives keys and certificates to join the cluster. + +You can follow this process by viewing the logs of the JoinService: + +```shell-session +$ kubectl logs -n kube-system daemonsets/join-service -f +{"level":"INFO","ts":"2022-10-14T09:32:20Z","caller":"cmd/main.go:48","msg":"Constellation Node Join Service","version":"2.1.0","cloudProvider":"qemu"} +{"level":"INFO","ts":"2022-10-14T09:32:20Z","logger":"validator","caller":"watcher/validator.go:96","msg":"Updating expected measurements"} +... +``` + +Once all nodes have joined your cluster, it may take a couple of minutes for all resources to become available. +You can check on the state of your cluster by running the following: + +```shell-session +$ kubectl get nodes +NAME STATUS ROLES AGE VERSION +control-plane-0 Ready control-plane 2m59s v1.24.6 +worker-0 Ready 32s v1.24.6 +``` + +## Deploy a sample application + +1. Deploy the [emojivoto app](https://github.com/BuoyantIO/emojivoto) + + ```bash + kubectl apply -k github.com/BuoyantIO/emojivoto/kustomize/deployment + ``` + +2. Expose the frontend service locally + + ```bash + kubectl wait --for=condition=available --timeout=60s -n emojivoto --all deployments + kubectl -n emojivoto port-forward svc/web-svc 8080:80 & + curl http://localhost:8080 + kill %1 + ``` + +## Terminate your cluster + + + + +Once you are done, you can clean up the created resources using the following command: + +```bash +constellation mini down +``` + +This will destroy your cluster and clean up your workspace. +The VM image and cluster configuration file (`constellation-conf.yaml`) will be kept and may be reused to create new clusters. + + + + +Once you are done, you can clean up the created resources using the following command: + +```bash +constellation terminate +``` + +This should give the following output: + +```shell-session +$ constellation terminate +You are about to terminate a Constellation cluster. +All of its associated resources will be DESTROYED. +This action is irreversible and ALL DATA WILL BE LOST. +Do you want to continue? [y/n]: +``` + +Confirm with `y` to terminate the cluster: + +```shell-session +Terminating ... +Your Constellation cluster was terminated successfully. +``` + +This will destroy your cluster and clean up your workspace. +The VM image and cluster configuration file (`constellation-conf.yaml`) will be kept and may be reused to create new clusters. + + + + +## Troubleshooting + +Make sure to use the [latest release](https://github.com/edgelesssys/constellation/releases/latest) and check out the [known issues](https://github.com/edgelesssys/constellation/issues?q=is%3Aopen+is%3Aissue+label%3A%22known+issue%22). + +### VMs have no internet access / CLI remains in "Initializing cluster" state + +`iptables` rules may prevent your VMs from accessing the internet. +Make sure your rules aren't dropping forwarded packages. + +List your rules: + +```bash +sudo iptables -S +``` + +The output may look similar to the following: + +```shell-session +-P INPUT ACCEPT +-P FORWARD DROP +-P OUTPUT ACCEPT +-N DOCKER +-N DOCKER-ISOLATION-STAGE-1 +-N DOCKER-ISOLATION-STAGE-2 +-N DOCKER-USER +``` + +If your `FORWARD` chain is set to `DROP`, you need to update your rules: + +```bash +sudo iptables -P FORWARD ACCEPT +``` diff --git a/docs/versioned_docs/version-2.23/getting-started/first-steps.md b/docs/versioned_docs/version-2.23/getting-started/first-steps.md new file mode 100644 index 000000000..fb8437a06 --- /dev/null +++ b/docs/versioned_docs/version-2.23/getting-started/first-steps.md @@ -0,0 +1,235 @@ +# First steps with Constellation + +The following steps guide you through the process of creating a cluster and deploying a sample app. This example assumes that you have successfully [installed and set up Constellation](install.md), +and have access to a cloud subscription. + +:::tip +If you don't have a cloud subscription, you can also set up a [local Constellation cluster using virtualization](../getting-started/first-steps-local.md) for testing. +::: + +:::note +If you encounter any problem with the following steps, make sure to use the [latest release](https://github.com/edgelesssys/constellation/releases/latest) and check out the [known issues](https://github.com/edgelesssys/constellation/issues?q=is%3Aopen+is%3Aissue+label%3A%22known+issue%22). +::: + +## Create a cluster + +1. Create the [configuration file](../workflows/config.md) and state file for your cloud provider. If you are following the steps of this guide, there is no need to edit the file. + + + + + ```bash + constellation config generate aws + ``` + + + + + ```bash + constellation config generate azure + ``` + + + + + ```bash + constellation config generate gcp + ``` + + + + + ```bash + constellation config generate stackit + ``` + + + + +2. Create your [IAM configuration](../workflows/config.md#creating-an-iam-configuration). + + + + + ```bash + constellation iam create aws --zone=us-east-2a --prefix=constellTest --update-config + ``` + + This command creates IAM configuration for the AWS zone `us-east-2a` using the prefix `constellTest` for all named resources being created. It also updates the configuration file `constellation-conf.yaml` in your current directory with the IAM values filled in. + + Depending on the attestation variant selected on config generation, different regions are available. + AMD SEV-SNP machines (requires the default attestation variant `awsSEVSNP`) are currently available in the following regions: + * `eu-west-1` + * `us-east-2` + + You can find a list of regions that support AMD SEV-SNP in [AWS's documentation](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/snp-requirements.html). + + NitroTPM machines (requires the attestation variant `awsNitroTPM`) are available in all regions. + Constellation OS images are currently replicated to the following regions: + * `eu-central-1` + * `eu-west-1` + * `eu-west-3` + * `us-east-2` + * `ap-south-1` + + If you require the OS image to be available in another region, [let us know](https://github.com/edgelesssys/constellation/issues/new?assignees=&labels=&template=feature_request.md&title=Support+new+AWS+image+region:+xx-xxxx-x). + + You can find a list of all [regions in AWS's documentation](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-regions-availability-zones.html#concepts-available-regions). + + + + + ```bash + constellation iam create azure --subscriptionID 00000000-0000-0000-0000-000000000000 --region=westus --resourceGroup=constellTest --servicePrincipal=spTest --update-config + ``` + + This command creates IAM configuration on the Azure region `westus` creating a new resource group `constellTest` and a new service principal `spTest`. It also updates the configuration file `constellation-conf.yaml` in your current directory with the IAM values filled in. + + CVMs are available in several Azure regions. Constellation OS images are currently replicated to the following: + + * `germanywestcentral` + * `westus` + * `eastus` + * `northeurope` + * `westeurope` + * `southeastasia` + + If you require the OS image to be available in another region, [let us know](https://github.com/edgelesssys/constellation/issues/new?assignees=&labels=&template=feature_request.md&title=Support+new+Azure+image+region:+xx-xxxx-x). + + You can find a list of all [regions in Azure's documentation](https://azure.microsoft.com/en-us/global-infrastructure/services/?products=virtual-machines®ions=all). + + + + + ```bash + constellation iam create gcp --projectID=yourproject-12345 --zone=europe-west3-a --prefix=constell-test --update-config + ``` + + This command creates IAM configuration in the GCP project `yourproject-12345` on the GCP zone `europe-west3-a` creating a new service account `constell-test`. It also updates the configuration file `constellation-conf.yaml` in your current directory with the IAM values filled in. + + Note that only regions offering CVMs of the `C2D` or `N2D` series are supported. You can find a [list of all regions in Google's documentation](https://cloud.google.com/compute/docs/regions-zones#available), which you can filter by machine type `C2D` or `N2D`. + + + + + To use Constellation on STACKIT, the cluster will use the User Access Token (UAT) that's generated [during the install step](./install.md). + After creating the accounts, fill in the STACKIT details in `constellation-conf.yaml` under `provider.openstack`: + + * `stackitProjectID`: STACKIT project id (can be found after login on the [STACKIT portal](https://portal.stackit.cloud)) + + :::caution + + `stackitProjectID` refers to the ID of your STACKIT project. The STACKIT portal also shows the OpenStack ID that's associated with your project in some places. Make sure you insert the STACKIT project ID in the `constellation-conf.yaml` file. It's of the format `XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX`. + + ::: + + + + + :::tip + To learn about all options you have for managing IAM resources and Constellation configuration, see the [Configuration workflow](../workflows/config.md). + ::: + + + +3. Create the cluster. `constellation apply` uses options set in `constellation-conf.yaml`. + If you want to manually manage your cloud resources, for example by using [Terraform](../reference/terraform.md), follow the corresponding instructions in the [Create workflow](../workflows/create.md). + + :::tip + + On Azure, you may need to wait 15+ minutes at this point for role assignments to propagate. + + ::: + + ```bash + constellation apply -y + ``` + + This should look similar to the following: + + ```shell-session + $ constellation apply -y + Checking for infrastructure changes + The following Constellation cluster will be created: + 3 control-plane nodes of type n2d-standard-4 will be created. + 1 worker node of type n2d-standard-4 will be created. + Creating + Cloud infrastructure created successfully + Your Constellation master secret was successfully written to ./constellation-mastersecret.json + Connecting + Initializing cluster + Installing Kubernetes components + Your Constellation cluster was successfully initialized. + + Constellation cluster identifier g6iMP5wRU1b7mpOz2WEISlIYSfdAhB0oNaOg6XEwKFY= + Kubernetes configuration constellation-admin.conf + + You can now connect to your cluster by executing: + export KUBECONFIG="$PWD/constellation-admin.conf" + ``` + + The cluster's identifier will be different in your output. + Keep `constellation-mastersecret.json` somewhere safe. + This will allow you to [recover your cluster](../workflows/recovery.md) in case of a disaster. + + :::info + + Depending on your CSP and region, `constellation apply` may take 10+ minutes to complete. + + ::: + +4. Configure kubectl. + + ```bash + export KUBECONFIG="$PWD/constellation-admin.conf" + ``` + +## Deploy a sample application + +1. Deploy the [emojivoto app](https://github.com/BuoyantIO/emojivoto) + + ```bash + kubectl apply -k github.com/BuoyantIO/emojivoto/kustomize/deployment + ``` + +2. Expose the frontend service locally + + ```bash + kubectl wait --for=condition=available --timeout=60s -n emojivoto --all deployments + kubectl -n emojivoto port-forward svc/web-svc 8080:80 & + curl http://localhost:8080 + kill %1 + ``` + +## Terminate your cluster + +Use the CLI to terminate your cluster. If you manually used [Terraform](../reference/terraform.md) to manage your cloud resources, follow the corresponding instructions in the [Terminate workflow](../workflows/terminate.md). + +```bash +constellation terminate +``` + +This should give the following output: + +```shell-session +$ constellation terminate +You are about to terminate a Constellation cluster. +All of its associated resources will be DESTROYED. +This action is irreversible and ALL DATA WILL BE LOST. +Do you want to continue? [y/n]: +``` + +Confirm with `y` to terminate the cluster: + +```shell-session +Terminating ... +Your Constellation cluster was terminated successfully. +``` + +Optionally, you can also [delete your IAM resources](../workflows/config.md#deleting-an-iam-configuration). diff --git a/docs/versioned_docs/version-2.23/getting-started/install.md b/docs/versioned_docs/version-2.23/getting-started/install.md new file mode 100644 index 000000000..f120b865a --- /dev/null +++ b/docs/versioned_docs/version-2.23/getting-started/install.md @@ -0,0 +1,442 @@ +# Installation and setup + +Constellation runs entirely in your cloud environment and can be controlled via a dedicated [command-line interface (CLI)](../reference/cli.md) or a [Terraform provider](../workflows/terraform-provider.md). + +## Prerequisites + +Make sure the following requirements are met: + +* Your machine is running Linux, macOS, or Windows +* You have admin rights on your machine +* [kubectl](https://kubernetes.io/docs/tasks/tools/) is installed +* Your CSP is Amazon Web Services (AWS), Microsoft Azure, Google Cloud Platform (GCP), or STACKIT + +## Install the Constellation CLI + +:::tip + +If you prefer to use Terraform, you can alternatively use the [Terraform provider](../workflows/terraform-provider.md) to manage the cluster's lifecycle. + +::: + +The CLI executable is available at [GitHub](https://github.com/edgelesssys/constellation/releases). +Install it with the following commands: + + + + +1. Download the CLI: + +```bash +curl -LO https://github.com/edgelesssys/constellation/releases/latest/download/constellation-linux-amd64 +``` + +2. [Verify the signature](../workflows/verify-cli.md) (optional) + +3. Install the CLI to your PATH: + +```bash +sudo install constellation-linux-amd64 /usr/local/bin/constellation +``` + + + + +1. Download the CLI: + +```bash +curl -LO https://github.com/edgelesssys/constellation/releases/latest/download/constellation-linux-arm64 +``` + +2. [Verify the signature](../workflows/verify-cli.md) (optional) + +3. Install the CLI to your PATH: + +```bash +sudo install constellation-linux-arm64 /usr/local/bin/constellation +``` + + + + + +1. Download the CLI: + +```bash +curl -LO https://github.com/edgelesssys/constellation/releases/latest/download/constellation-darwin-arm64 +``` + +2. [Verify the signature](../workflows/verify-cli.md) (optional) + +3. Install the CLI to your PATH: + +```bash +sudo install constellation-darwin-arm64 /usr/local/bin/constellation +``` + + + + + +1. Download the CLI: + +```bash +curl -LO https://github.com/edgelesssys/constellation/releases/latest/download/constellation-darwin-amd64 +``` + +2. [Verify the signature](../workflows/verify-cli.md) (optional) + +3. Install the CLI to your PATH: + +```bash +sudo install constellation-darwin-amd64 /usr/local/bin/constellation +``` + + + + + +1. Download the CLI: + +```bash +Invoke-WebRequest -OutFile ./constellation.exe -Uri 'https://github.com/edgelesssys/constellation/releases/latest/download/constellation-windows-amd64.exe' +``` + +2. [Verify the signature](../workflows/verify-cli.md) (optional) + +3. Install the CLI under `C:\Program Files\Constellation\bin\constellation.exe` + +3. Add the CLI to your PATH: + + 1. Open `Advanced system settings` by searching for the App in the Windows search + 2. Go to the `Advanced` tab + 3. Click `Environment Variables…` + 4. Click variable called `Path` and click `Edit…` + 5. Click `New` + 6. Enter the path to the folder containing the binary you want on your PATH: `C:\Program Files\Constellation\bin` + + + + +:::tip +The CLI supports autocompletion for various shells. To set it up, run `constellation completion` and follow the given steps. +::: + +## Set up cloud credentials + +Constellation makes authenticated calls to the CSP API. Therefore, you need to set up Constellation with the credentials for your CSP. + +:::tip +If you don't have a cloud subscription, you can also set up a [local Constellation cluster using virtualization](../getting-started/first-steps-local.md) for testing. +::: + +### Required permissions + + + + +To set up a Constellation cluster, you need to perform two tasks that require permissions: create the infrastructure and create roles for cluster nodes. Both of these actions can be performed by different users, e.g., an administrator to create roles and a DevOps engineer to create the infrastructure. + +To [create the IAM configuration](../workflows/config.md#creating-an-iam-configuration) for Constellation, you need the following permissions: + +```json +{ + "Version": "2012-10-17", + "Statement": [ + { + "Effect": "Allow", + "Action": [ + "ec2:DescribeAccountAttributes", + "iam:AddRoleToInstanceProfile", + "iam:AttachRolePolicy", + "iam:CreateInstanceProfile", + "iam:CreatePolicy", + "iam:CreateRole", + "iam:DeleteInstanceProfile", + "iam:DeletePolicy", + "iam:DeletePolicyVersion", + "iam:DeleteRole", + "iam:DetachRolePolicy", + "iam:GetInstanceProfile", + "iam:GetPolicy", + "iam:GetPolicyVersion", + "iam:GetRole", + "iam:ListAttachedRolePolicies", + "iam:ListInstanceProfilesForRole", + "iam:ListPolicyVersions", + "iam:ListRolePolicies", + "iam:PassRole", + "iam:RemoveRoleFromInstanceProfile", + "sts:GetCallerIdentity" + ], + "Resource": "*" + } + ] +} +``` + +The built-in `AdministratorAccess` policy is a superset of these permissions. + +To [create a Constellation cluster](../workflows/create.md), see the permissions of [main.tf](https://github.com/edgelesssys/constellation/blob/main/terraform/infrastructure/iam/aws/main.tf). + +The built-in `PowerUserAccess` policy is a superset of these permissions. + +Follow Amazon's guide on [understanding](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies.html) and [managing policies](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_managed-vs-inline.html). + + + + +The following [resource providers need to be registered](https://learn.microsoft.com/en-us/azure/azure-resource-manager/management/resource-providers-and-types#register-resource-provider) in your subscription: + +* `Microsoft.Attestation` +* `Microsoft.Compute` +* `Microsoft.Insights` +* `Microsoft.ManagedIdentity` +* `Microsoft.Network` + +By default, Constellation tries to register these automatically if they haven't been registered before. + +To [create the IAM configuration](../workflows/config.md#creating-an-iam-configuration) for Constellation, you need the following permissions: + +* `*/register/action` \[1] +* `Microsoft.Authorization/roleAssignments/*` +* `Microsoft.Authorization/roleDefinitions/*` +* `Microsoft.ManagedIdentity/userAssignedIdentities/*` +* `Microsoft.Resources/subscriptions/resourcegroups/*` + +The built-in `Owner` role is a superset of these permissions. + +To [create a Constellation cluster](../workflows/create.md), you need the following permissions: + +* `Microsoft.Attestation/attestationProviders/*` +* `Microsoft.Compute/virtualMachineScaleSets/*` +* `Microsoft.Insights/components/*` +* `Microsoft.ManagedIdentity/userAssignedIdentities/*` +* `Microsoft.Network/loadBalancers/*` +* `Microsoft.Network/loadBalancers/backendAddressPools/*` +* `Microsoft.Network/networkSecurityGroups/*` +* `Microsoft.Network/publicIPAddresses/*` +* `Microsoft.Network/virtualNetworks/*` +* `Microsoft.Network/virtualNetworks/subnets/*` +* `Microsoft.Network/natGateways/*` + +The built-in `Contributor` role is a superset of these permissions. + +Follow Microsoft's guide on [understanding](https://learn.microsoft.com/en-us/azure/role-based-access-control/role-definitions) and [assigning roles](https://learn.microsoft.com/en-us/azure/role-based-access-control/role-assignments). + +1: You can omit `*/register/Action` if the resource providers mentioned above are already registered and the `ARM_SKIP_PROVIDER_REGISTRATION` environment variable is set to `true` when creating the IAM configuration. + + + + +Create a new project for Constellation or use an existing one. +Enable the [Compute Engine API](https://console.cloud.google.com/apis/library/compute.googleapis.com) on it. + +To [create the IAM configuration](../workflows/config.md#creating-an-iam-configuration) for Constellation, you need the following permissions: + +* `iam.roles.create` +* `iam.roles.delete` +* `iam.roles.get` +* `iam.serviceAccountKeys.create` +* `iam.serviceAccountKeys.delete` +* `iam.serviceAccountKeys.get` +* `iam.serviceAccounts.create` +* `iam.serviceAccounts.delete` +* `iam.serviceAccounts.get` +* `resourcemanager.projects.getIamPolicy` +* `resourcemanager.projects.setIamPolicy` + +Together, the built-in roles `roles/editor` and `roles/resourcemanager.projectIamAdmin` form a superset of these permissions. + +To [create a Constellation cluster](../workflows/create.md), you need the following permissions: + +* `compute.addresses.createInternal` +* `compute.addresses.deleteInternal` +* `compute.addresses.get` +* `compute.addresses.useInternal` +* `compute.backendServices.create` +* `compute.backendServices.delete` +* `compute.backendServices.get` +* `compute.backendServices.use` +* `compute.disks.create` +* `compute.firewalls.create` +* `compute.firewalls.delete` +* `compute.firewalls.get` +* `compute.firewalls.update` +* `compute.globalAddresses.create` +* `compute.globalAddresses.delete` +* `compute.globalAddresses.get` +* `compute.globalAddresses.use` +* `compute.globalForwardingRules.create` +* `compute.globalForwardingRules.delete` +* `compute.globalForwardingRules.get` +* `compute.globalForwardingRules.setLabels` +* `compute.globalOperations.get` +* `compute.healthChecks.create` +* `compute.healthChecks.delete` +* `compute.healthChecks.get` +* `compute.healthChecks.useReadOnly` +* `compute.instanceGroupManagers.create` +* `compute.instanceGroupManagers.delete` +* `compute.instanceGroupManagers.get` +* `compute.instanceGroupManagers.update` +* `compute.instanceGroups.create` +* `compute.instanceGroups.delete` +* `compute.instanceGroups.get` +* `compute.instanceGroups.update` +* `compute.instanceGroups.use` +* `compute.instances.create` +* `compute.instances.setLabels` +* `compute.instances.setMetadata` +* `compute.instances.setTags` +* `compute.instanceTemplates.create` +* `compute.instanceTemplates.delete` +* `compute.instanceTemplates.get` +* `compute.instanceTemplates.useReadOnly` +* `compute.networks.create` +* `compute.networks.delete` +* `compute.networks.get` +* `compute.networks.updatePolicy` +* `compute.routers.create` +* `compute.routers.delete` +* `compute.routers.get` +* `compute.routers.update` +* `compute.subnetworks.create` +* `compute.subnetworks.delete` +* `compute.subnetworks.get` +* `compute.subnetworks.use` +* `compute.targetTcpProxies.create` +* `compute.targetTcpProxies.delete` +* `compute.targetTcpProxies.get` +* `compute.targetTcpProxies.use` +* `iam.serviceAccounts.actAs` + +Together, the built-in roles `roles/editor`, `roles/compute.instanceAdmin` and `roles/resourcemanager.projectIamAdmin` form a superset of these permissions. + +Follow Google's guide on [understanding](https://cloud.google.com/iam/docs/understanding-roles) and [assigning roles](https://cloud.google.com/iam/docs/granting-changing-revoking-access). + + + + +Constellation on STACKIT requires a User Access Token (UAT) for the OpenStack API and a STACKIT service account. +The UAT already has all required permissions by default. +The STACKIT service account needs the `editor` role to create STACKIT LoadBalancers. +Look at the [STACKIT documentation](https://docs.stackit.cloud/stackit/en/getting-started-in-service-accounts-134415831.html) on how to create the service account and assign the role. + + + + +### Authentication + +You need to authenticate with your CSP. The following lists the required steps for *testing* and *production* environments. + +:::note +The steps for a *testing* environment are simpler. However, they may expose secrets to the CSP. If in doubt, follow the *production* steps. +::: + + + + +**Testing** + +You can use the [AWS CloudShell](https://console.aws.amazon.com/cloudshell/home). Make sure you are [authorized to use it](https://docs.aws.amazon.com/cloudshell/latest/userguide/sec-auth-with-identities.html). + +**Production** + +Use the latest version of the [AWS CLI](https://aws.amazon.com/cli/) on a trusted machine: + +```bash +aws configure +``` + +Options and first steps are described in the [AWS CLI documentation](https://docs.aws.amazon.com/cli/index.html). + + + + +**Testing** + +Simply open the [Azure Cloud Shell](https://docs.microsoft.com/en-us/azure/cloud-shell/overview). + +**Production** + +Use the latest version of the [Azure CLI](https://docs.microsoft.com/en-us/cli/azure/) on a trusted machine: + +```bash +az login +``` + +Other options are described in Azure's [authentication guide](https://docs.microsoft.com/en-us/cli/azure/authenticate-azure-cli). + + + + +**Testing** + +You can use the [Google Cloud Shell](https://cloud.google.com/shell). Make sure your [session is authorized](https://cloud.google.com/shell/docs/auth). For example, execute `gsutil` and accept the authorization prompt. + +**Production** + +Use one of the following options on a trusted machine: + +* Use the [`gcloud` CLI](https://cloud.google.com/sdk/gcloud) + + ```bash + gcloud auth application-default login + ``` + + This will ask you to log-in to your Google account and create your credentials. + The Constellation CLI will automatically load these credentials when needed. + +* Set up a service account and pass the credentials manually + + Follow [Google's guide](https://cloud.google.com/docs/authentication/production#manually) for setting up your credentials. + + + + +You need to authenticate with the infrastructure API (OpenStack) and create a service account (STACKIT API). + +1. [Follow the STACKIT documentation](https://docs.stackit.cloud/stackit/en/step-1-generating-of-user-access-token-11763726.html) for obtaining a User Access Token (UAT) to use the infrastructure API +2. Create a configuration file with the credentials from the User Access Token under: + * Linux: `~/.config/openstack/clouds.yaml` + * macOS: `/Users//Library/Application Support/openstack/clouds.yaml` or `/etc/openstack/clouds.yaml` + * Windows: `%AppData%\openstack\clouds.yaml` + + + ```yaml + clouds: + stackit: + auth: + auth_url: https://keystone.api.iaas.eu01.stackit.cloud/v3 + username: REPLACE_WITH_UAT_USERNAME + password: REPLACE_WITH_UAT_PASSWORD + project_id: REPLACE_WITH_OPENSTACK_PROJECT_ID + project_name: REPLACE_WITH_STACKIT_PROJECT_NAME + user_domain_name: portal_mvp + project_domain_name: portal_mvp + region_name: RegionOne + identity_api_version: 3 + ``` + +:::caution + +`project_id` refers to the ID of your OpenStack project. The STACKIT portal also shows the STACKIT ID that's associated with your project in some places. Make sure you insert the OpenStack project ID in the `clouds.yaml` file. + +::: + +3. [Follow the STACKIT documentation](https://docs.stackit.cloud/stackit/en/getting-started-in-service-accounts-134415831.html) for creating a service account and an access token +4. Assign the `editor` role to the service account by [following the documentation](https://docs.stackit.cloud/stackit/en/getting-started-in-service-accounts-134415831.html) +5. Create a configuration file under `~/.stackit/credentials.json` (`%USERPROFILE%\.stackit\credentials.json` on Windows) + + ```json + {"STACKIT_SERVICE_ACCOUNT_TOKEN":"REPLACE_WITH_TOKEN"} + ``` + + + + + +## Next steps + +You are now ready to [deploy your first confidential Kubernetes cluster and application](first-steps.md). diff --git a/docs/versioned_docs/version-2.23/getting-started/marketplaces.md b/docs/versioned_docs/version-2.23/getting-started/marketplaces.md new file mode 100644 index 000000000..a6763a42a --- /dev/null +++ b/docs/versioned_docs/version-2.23/getting-started/marketplaces.md @@ -0,0 +1,56 @@ +# Using Constellation via Cloud Marketplaces + +Constellation is available through the Marketplaces of AWS, Azure, GCP, and STACKIT. This allows you to create self-managed Constellation clusters that are billed on a pay-per-use basis (hourly, per vCPU) with your CSP account. You can still get direct support by Edgeless Systems. For more information, please [contact us](https://www.edgeless.systems/enterprise-support/). + +This document explains how to run Constellation with the dynamically billed cloud marketplace images. + + + + +To use Constellation's marketplace images, ensure that you are subscribed to the [marketplace offering](https://aws.amazon.com/marketplace/pp/prodview-2mbn65nv57oys) through the web portal. + +Then, enable the use of marketplace images in your Constellation `constellation-conf.yaml` [config file](../workflows/config.md): + +```bash +yq eval -i ".provider.aws.useMarketplaceImage = true" constellation-conf.yaml +``` + + + + +Constellation has a private marketplace plan. Please [contact us](https://www.edgeless.systems/enterprise-support/) to gain access. + +To use a marketplace image, you need to accept the marketplace image's terms once for your subscription with the [Azure CLI](https://learn.microsoft.com/en-us/cli/azure/vm/image/terms?view=azure-cli-latest): + +```bash +az vm image terms accept --publisher edgelesssystems --offer constellation --plan constellation +``` + +Then, enable the use of marketplace images in your Constellation `constellation-conf.yaml` [config file](../workflows/config.md): + +```bash +yq eval -i ".provider.azure.useMarketplaceImage = true" constellation-conf.yaml +``` + + + + +To use a marketplace image, ensure that the account is entitled to use marketplace images by Edgeless Systems by accepting the terms through the [web portal](https://console.cloud.google.com/marketplace/vm/config/edgeless-systems-public/constellation). + +Then, enable the use of marketplace images in your Constellation `constellation-conf.yaml` [config file](../workflows/config.md): + +```bash +yq eval -i ".provider.gcp.useMarketplaceImage = true" constellation-conf.yaml +``` + + + + +On STACKIT, the selected Constellation image is always a marketplace image. You can find more information on the STACKIT portal. + + + + +Ensure that the cluster uses an official release image version (i.e., `.image=vX.Y.Z` in the `constellation-conf.yaml` file). + +From there, you can proceed with the [cluster creation](../workflows/create.md) as usual. diff --git a/docs/versioned_docs/version-2.23/intro.md b/docs/versioned_docs/version-2.23/intro.md new file mode 100644 index 000000000..0bfe86da9 --- /dev/null +++ b/docs/versioned_docs/version-2.23/intro.md @@ -0,0 +1,34 @@ +--- +slug: / +id: intro +--- +# Introduction + +Welcome to the documentation of Constellation! Constellation is a Kubernetes engine that aims to provide the best possible data security. + +![Constellation concept](/img/concept.svg) + + Constellation shields your entire Kubernetes cluster from the underlying cloud infrastructure. Everything inside is always encrypted, including at runtime in memory. For this, Constellation leverages a technology called *confidential computing* and more specifically Confidential VMs. + +:::tip +See the 📄[whitepaper](https://content.edgeless.systems/hubfs/Confidential%20Computing%20Whitepaper.pdf) for more information on confidential computing. +::: + +## Goals + +From a security perspective, Constellation is designed to keep all data always encrypted and to prevent any access from the underlying (cloud) infrastructure. This includes access from datacenter employees, privileged cloud admins, and attackers coming through the infrastructure. Such attackers could be malicious co-tenants escalating their privileges or hackers who managed to compromise a cloud server. + +From a DevOps perspective, Constellation is designed to work just like what you would expect from a modern Kubernetes engine. + +## Use cases + +Constellation provides unique security [features](overview/confidential-kubernetes.md) and [benefits](overview/security-benefits.md). The core use cases are: + +* Increasing the overall security of your clusters +* Increasing the trustworthiness of your SaaS offerings +* Moving sensitive workloads from on-prem to the cloud +* Meeting regulatory requirements + +## Next steps + +You can learn more about the concept of Confidential Kubernetes, features, security benefits, and performance of Constellation in the *Basics* section. To jump right into the action head to *Getting started*. diff --git a/docs/versioned_docs/version-2.23/overview/clouds.md b/docs/versioned_docs/version-2.23/overview/clouds.md new file mode 100644 index 000000000..b2695d28e --- /dev/null +++ b/docs/versioned_docs/version-2.23/overview/clouds.md @@ -0,0 +1,66 @@ +# Feature status of clouds + +What works on which cloud? Currently, Confidential VMs (CVMs) are available in varying quality on the different clouds and software stacks. + +For Constellation, the ideal environment provides the following: + +1. Ability to run arbitrary software and images inside CVMs +2. CVMs based on AMD SEV-SNP (available in EPYC CPUs since the Milan generation) or Intel TDX (available in Xeon CPUs since the Sapphire Rapids generation) +3. Ability for CVM guests to obtain raw hardware attestation statements +4. Reviewable, open-source firmware inside CVMs +5. Capability of the firmware to attest the integrity of the code it passes control to, e.g., with an embedded virtual TPM (vTPM) + +(1) is a functional must-have. (2)--(5) are required for remote attestation that fully keeps the infrastructure/cloud out. Constellation can work without them or with approximations, but won't protect against certain privileged attackers anymore. + +The following table summarizes the state of features for different infrastructures. + +| **Feature** | **AWS** | **Azure** | **GCP** | **STACKIT** | **OpenStack (Yoga)** | +|-----------------------------------|---------|-----------|---------|--------------|----------------------| +| **1. Custom images** | Yes | Yes | Yes | Yes | Yes | +| **2. SEV-SNP or TDX** | Yes | Yes | Yes | No | Depends on kernel/HV | +| **3. Raw guest attestation** | Yes | Yes | Yes | No | Depends on kernel/HV | +| **4. Reviewable firmware** | Yes | No* | No | No | Depends on kernel/HV | +| **5. Confidential measured boot** | No | Yes | No | No | Depends on kernel/HV | + +## Amazon Web Services (AWS) + +Amazon EC2 [supports AMD SEV-SNP](https://aws.amazon.com/de/about-aws/whats-new/2023/04/amazon-ec2-amd-sev-snp/). +Regarding (3), AWS provides direct access to attestation statements. +However, regarding (5), attestation is partially based on the [NitroTPM](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/nitrotpm.html) for [measured boot](../architecture/attestation.md#measured-boot), which is a vTPM managed by the Nitro hypervisor. +Hence, the hypervisor is currently part of Constellation's TCB. +Regarding (4), the [firmware is open source](https://github.com/aws/uefi) and can be reproducibly built. + +## Microsoft Azure + +With its [CVM offering](https://docs.microsoft.com/en-us/azure/confidential-computing/confidential-vm-overview), Azure provides the best foundations for Constellation. +Regarding (3), Azure provides direct access to attestation statements. +The firmware runs in an isolated domain inside the CVM and exposes a vTPM (5), but it's closed source (4). +On SEV-SNP, Azure uses VM Privilege Level (VMPL) isolation for the separation of firmware and the rest of the VM; on TDX, they use TD partitioning. +This firmware is signed by Azure. +The signature is reflected in the attestation statements of CVMs. +Thus, the Azure closed-source firmware becomes part of Constellation's trusted computing base (TCB). + +\* Recently, [Azure announced the open source paravisor OpenHCL](https://techcommunity.microsoft.com/blog/windowsosplatform/openhcl-the-new-open-source-paravisor/4273172). It's the foundation for fully open source and verifiable CVM firmware. Once Azure provides their CVM firmware with reproducible builds based on OpenHCL, (4) switches from *No* to *Yes*. Constellation will support OpenHCL based firmware on Azure in the future. + +## Google Cloud Platform (GCP) + +The [CVMs Generally Available in GCP](https://cloud.google.com/confidential-computing/confidential-vm/docs/confidential-vm-overview#technologies) are based on AMD SEV-ES or SEV-SNP. +Regarding (3), with their SEV-SNP offering Google provides direct access to attestation statements. +However, regarding (5), attestation is partially based on the [Shielded VM vTPM](https://cloud.google.com/compute/shielded-vm/docs/shielded-vm#vtpm) for [measured boot](../architecture/attestation.md#measured-boot), which is a vTPM managed by Google's hypervisor. +Hence, the hypervisor is currently part of Constellation's TCB. +Regarding (4), the CVMs still include closed-source firmware. + +[TDX on Google](https://cloud.google.com/blog/products/identity-security/confidential-vms-on-intel-cpus-your-datas-new-intelligent-defense) is in public preview. +With it, Constellation would have a similar TCB and attestation flow as with the current SEV-SNP offering. + +## STACKIT + +[STACKIT Compute Engine](https://www.stackit.de/en/product/stackit-compute-engine/) supports AMD SEV-ES. A vTPM is used for measured boot, which is a vTPM managed by STACKIT's hypervisor. Hence, the hypervisor is currently part of Constellation's TCB. + +## OpenStack + +OpenStack is an open-source cloud and infrastructure management software. It's used by many smaller CSPs and datacenters. In the latest *Yoga* version, OpenStack has basic support for CVMs. However, much depends on the employed kernel and hypervisor. Features (2)--(4) are likely to be a *Yes* with Linux kernel version 6.2. Thus, going forward, OpenStack on corresponding AMD or Intel hardware will be a viable underpinning for Constellation. + +## Conclusion + +The different clouds and software like the Linux kernel and OpenStack are in the process of building out their support for state-of-the-art CVMs. Azure has already most features in place. For Constellation, the status quo means that the TCB has different shapes on different infrastructures. With broad SEV-SNP support coming to the Linux kernel, we soon expect a normalization of features across infrastructures. diff --git a/docs/versioned_docs/version-2.23/overview/confidential-kubernetes.md b/docs/versioned_docs/version-2.23/overview/confidential-kubernetes.md new file mode 100644 index 000000000..bff8c3322 --- /dev/null +++ b/docs/versioned_docs/version-2.23/overview/confidential-kubernetes.md @@ -0,0 +1,42 @@ +# Confidential Kubernetes + +We use the term *Confidential Kubernetes* to refer to the concept of using confidential-computing technology to shield entire Kubernetes clusters from the infrastructure. The three defining properties of this concept are: + +1. **Workload shielding**: the confidentiality and integrity of all workload-related data and code are enforced. +2. **Control plane shielding**: the confidentiality and integrity of the cluster's control plane, state, and workload configuration are enforced. +3. **Attestation and verifiability**: the two properties above can be verified remotely based on hardware-rooted cryptographic certificates. + +Each of the above properties is equally important. Only with all three in conjunction, an entire cluster can be shielded without gaps. + +## Constellation security features + +Constellation implements the Confidential Kubernetes concept with the following security features. + +* **Runtime encryption**: Constellation runs all Kubernetes nodes inside Confidential VMs (CVMs). This gives runtime encryption for the entire cluster. +* **Network and storage encryption**: Constellation augments this with transparent encryption of the [network](../architecture/networking.md), [persistent storage](../architecture/encrypted-storage.md), and other managed storage like [AWS S3](../architecture/encrypted-storage.md#encrypted-s3-object-storage). Thus, workloads and control plane are truly end-to-end encrypted: at rest, in transit, and at runtime. +* **Transparent key management**: Constellation manages the corresponding [cryptographic keys](../architecture/keys.md) inside CVMs. +* **Node attestation and verification**: Constellation verifies the integrity of each new CVM-based node using [remote attestation](../architecture/attestation.md). Only "good" nodes receive the cryptographic keys required to access the network and storage of a cluster. +* **Confidential computing-optimized images**: A node is "good" if it's running a signed Constellation [node image](../architecture/images.md) inside a CVM and is in the expected state. (Node images are hardware-measured during boot. The measurements are reflected in the attestation statements that are produced by nodes and verified by Constellation.) +* **"Whole cluster" attestation**: Towards the DevOps engineer, Constellation provides a single hardware-rooted certificate from which all of the above can be verified. + +With the above, Constellation wraps an entire cluster into one coherent and verifiable *confidential context*. The concept is depicted in the following. + +![Confidential Kubernetes](../_media/concept-constellation.svg) + +## Comparison: Managed Kubernetes with CVMs + +In comparison, managed Kubernetes with CVMs, as it's for example offered in [AKS](https://azure.microsoft.com/en-us/services/kubernetes-service/) and [GKE](https://cloud.google.com/kubernetes-engine), only provides runtime encryption for certain worker nodes. Here, each worker node is a separate (and typically unverified) confidential context. This only provides limited security benefits as it only prevents direct access to a worker node's memory. The large majority of potential attacks through the infrastructure remain unaffected. This includes attacks through the control plane, access to external key management, and the corruption of worker node images. This leaves many problems unsolved. For instance, *Node A* has no means to verify if *Node B* is "good" and if it's OK to share data with it. Consequently, this approach leaves a large attack surface, as is depicted in the following. + +![Concept: Managed Kubernetes plus CVMs](../_media/concept-managed.svg) + +The following table highlights the key differences in terms of features. + +| | Managed Kubernetes with CVMs | Confidential Kubernetes (Constellation✨) | +|-------------------------------------|------------------------------|--------------------------------------------| +| Runtime encryption | Partial (data plane only)| **Yes** | +| Node image verification | No | **Yes** | +| Full cluster attestation | No | **Yes** | +| Transparent network encryption | No | **Yes** | +| Transparent storage encryption | No | **Yes** | +| Confidential key management | No | **Yes** | +| Cloud agnostic / multi-cloud | No | **Yes** | diff --git a/docs/versioned_docs/version-2.23/overview/license.md b/docs/versioned_docs/version-2.23/overview/license.md new file mode 100644 index 000000000..34122c025 --- /dev/null +++ b/docs/versioned_docs/version-2.23/overview/license.md @@ -0,0 +1,33 @@ +# License + +## Source code + +Constellation's source code is available on [GitHub](https://github.com/edgelesssys/constellation) under the [GNU Affero General Public License v3.0](https://github.com/edgelesssys/constellation/blob/main/LICENSE). + +## Binaries + +Edgeless Systems provides ready-to-use and [signed](../architecture/attestation.md#chain-of-trust) binaries of Constellation. This includes the CLI and the [node images](../architecture/images.md). + +These binaries may be used free of charge within the bounds of Constellation's [**Community License**](#community-license). An [**Enterprise License**](#enterprise-license) can be purchased from Edgeless Systems. + +The Constellation CLI displays relevant license information when you initialize your cluster. You are responsible for staying within the bounds of your respective license. Constellation doesn't enforce any limits so as not to endanger your cluster's availability. + +## Terraform provider + +Edgeless Systems provides a [Terraform provider](https://github.com/edgelesssys/terraform-provider-constellation/releases), which may be used free of charge within the bounds of Constellation's [**Community License**](#community-license). An [**Enterprise License**](#enterprise-license) can be purchased from Edgeless Systems. + +You are responsible for staying within the bounds of your respective license. Constellation doesn't enforce any limits so as not to endanger your cluster's availability. + +## Community License + +You are free to use the Constellation binaries provided by Edgeless Systems to create services for internal consumption, evaluation purposes, or non-commercial use. You must not use the Constellation binaries to provide commercial hosted services to third parties. Edgeless Systems gives no warranties and offers no support. + +## Enterprise License + +Enterprise Licenses don't have the above limitations and come with support and additional features. Find out more at the [product website](https://www.edgeless.systems/products/constellation/). + +Once you have received your Enterprise License file, place it in your [Constellation workspace](../architecture/orchestration.md#workspaces) in a file named `constellation.license`. + +## CSP Marketplaces + +Constellation is available through the Marketplaces of AWS, Azure, GCP, and STACKIT. This allows you to create self-managed Constellation clusters that are billed on a pay-per-use basis (hourly, per vCPU) with your CSP account. You can still get direct support by Edgeless Systems. For more information, please [contact us](https://www.edgeless.systems/enterprise-support/). diff --git a/docs/versioned_docs/version-2.23/overview/performance/application.md b/docs/versioned_docs/version-2.23/overview/performance/application.md new file mode 100644 index 000000000..c67d59644 --- /dev/null +++ b/docs/versioned_docs/version-2.23/overview/performance/application.md @@ -0,0 +1,102 @@ +# Application benchmarks + +## HashiCorp Vault + +[HashiCorp Vault](https://www.vaultproject.io/) is a distributed secrets management software that can be deployed to Kubernetes. +HashiCorp maintains a benchmarking tool for vault, [vault-benchmark](https://github.com/hashicorp/vault-benchmark/). +Vault-benchmark generates load on a Vault deployment and measures response times. + +This article describes the results from running vault-benchmark on Constellation, AKS, and GKE. +You can find the setup for producing the data discussed in this article in the [vault-benchmarks](https://github.com/edgelesssys/vault-benchmarks) repository. + +The Vault API used during benchmarking is the [transits secret engine](https://developer.hashicorp.com/vault/docs/secrets/transit). +This allows services to send data to Vault for encryption, decryption, signing, and verification. + +## Results + +On each run, vault-benchmark sends requests and measures the latencies. +The measured latencies are aggregated through various statistical features. +After running the benchmark n times, the arithmetic mean over a subset of the reported statistics is calculated. +The selected features are arithmetic mean, 99th percentile, minimum, and maximum. + +Arithmetic mean gives a general sense of the latency on each target. +The 99th percentile shows performance in (most likely) erroneous states. +Minimum and maximum mark the range within which latency varies each run. + +The benchmark was configured with 1300 workers and 10 seconds per run. +Those numbers were chosen empirically. +The latency was stabilizing at 10 seconds runtime, not changing with further increase. +Increasing the number of workers beyond 1300 leads to request failures, marking the limit Vault was able to handle in this setup. +All results are based on 100 runs. + +The following data was generated while running five replicas, one primary, and four standby nodes. +All numbers are in seconds if not indicated otherwise. +``` +========== Results AKS ========== +Mean: mean: 1.632200, variance: 0.002057 +P99: mean: 5.480679, variance: 2.263700 +Max: mean: 6.651001, variance: 2.808401 +Min: mean: 0.011415, variance: 0.000133 +========== Results GKE ========== +Mean: mean: 1.656435, variance: 0.003615 +P99: mean: 6.030807, variance: 3.955051 +Max: mean: 7.164843, variance: 3.300004 +Min: mean: 0.010233, variance: 0.000111 +========== Results C11n ========== +Mean: mean: 1.651549, variance: 0.001610 +P99: mean: 5.780422, variance: 3.016106 +Max: mean: 6.942997, variance: 3.075796 +Min: mean: 0.013774, variance: 0.000228 +========== AKS vs C11n ========== +Mean: +1.171577 % (AKS is faster) +P99: +5.185495 % (AKS is faster) +Max: +4.205618 % (AKS is faster) +Min: +17.128781 % (AKS is faster) +========== GKE vs C11n ========== +Mean: -0.295851 % (GKE is slower) +P99: -4.331603 % (GKE is slower) +Max: -3.195248 % (GKE is slower) +Min: +25.710886 % (GKE is faster) +``` + +**Interpretation**: Latencies are all within ~5% of each other. +AKS performs slightly better than GKE and Constellation (C11n) in all cases except minimum latency. +Minimum latency is the lowest for GKE. +Compared to GKE, Constellation had slightly lower peak latencies (99th percentile and maximum), indicating that Constellation could have handled slightly more concurrent accesses than GKE. +Overall, performance is at comparable levels across all three distributions. +Based on these numbers, you can use a similarly sized Constellation cluster to run your existing Vault deployment. + +### Visualization + +The following plots visualize the data presented above as [box plots](https://en.wikipedia.org/wiki/Box_plot). +The whiskers denote the minimum and maximum. +The box stretches from the 25th to the 75th percentile, with the dividing bar marking the 50th percentile. +The circles outside the whiskers denote outliers. + +

          +Mean Latency + +![Mean Latency](../../_media/benchmark_vault/5replicas/mean_latency.png) + +
          + +
          +99th Percentile Latency + +![99th Percentile Latency](../../_media/benchmark_vault/5replicas/p99_latency.png) + +
          + +
          +Maximum Latency + +![Maximum Latency](../../_media/benchmark_vault/5replicas/max_latency.png) + +
          + +
          +Minimum Latency + +![Minimum Latency](../../_media/benchmark_vault/5replicas/min_latency.png) + +
          diff --git a/docs/versioned_docs/version-2.23/overview/performance/compute.md b/docs/versioned_docs/version-2.23/overview/performance/compute.md new file mode 100644 index 000000000..88dd4b1b2 --- /dev/null +++ b/docs/versioned_docs/version-2.23/overview/performance/compute.md @@ -0,0 +1,11 @@ +# Impact of runtime encryption on compute performance + +All nodes in a Constellation cluster are executed inside Confidential VMs (CVMs). Consequently, the performance of Constellation is inherently linked to the performance of these CVMs. + +## AMD and Azure benchmarking + +AMD and Azure have collectively released a [performance benchmark](https://community.amd.com/t5/business/microsoft-azure-confidential-computing-powered-by-3rd-gen-epyc/ba-p/497796) for CVMs that utilize 3rd Gen AMD EPYC processors (Milan) with SEV-SNP. This benchmark, which included a variety of mostly compute-intensive tests such as SPEC CPU 2017 and CoreMark, demonstrated that CVMs experience only minor performance degradation (ranging from 2% to 8%) when compared to standard VMs. Such results are indicative of the performance that can be expected from compute-intensive workloads running with Constellation on Azure. + +## AMD and Google benchmarking + +Similarly, AMD and Google have jointly released a [performance benchmark](https://www.amd.com/system/files/documents/3rd-gen-epyc-gcp-c2d-conf-compute-perf-brief.pdf) for CVMs employing 3rd Gen AMD EPYC processors (Milan) with SEV-SNP. With high-performance computing workloads such as WRF, NAMD, Ansys CFS, and Ansys LS_DYNA, they observed analogous findings, with only minor performance degradation (between 2% and 4%) compared to standard VMs. These outcomes are reflective of the performance that can be expected for compute-intensive workloads running with Constellation on GCP. diff --git a/docs/versioned_docs/version-2.23/overview/performance/io.md b/docs/versioned_docs/version-2.23/overview/performance/io.md new file mode 100644 index 000000000..3ae796f8a --- /dev/null +++ b/docs/versioned_docs/version-2.23/overview/performance/io.md @@ -0,0 +1,204 @@ +# I/O performance benchmarks + +To assess the overall performance of Constellation, this benchmark evaluates Constellation v2.6.0 in terms of storage I/O using [`fio`](https://fio.readthedocs.io/en/latest/fio_doc.html) and network performance using the [Kubernetes Network Benchmark](https://github.com/InfraBuilder/k8s-bench-suite#knb--kubernetes-network-be). + +This benchmark tested Constellation on Azure and GCP and compared the results against the managed Kubernetes offerings AKS and GKE. + +## Configurations + +### Constellation + +The benchmark was conducted with Constellation v2.6.0, Kubernetes v1.25.7, and Cilium v1.12. +It ran on the following infrastructure configurations. + +Constellation on Azure: + +- Nodes: 3 (1 Control-plane, 2 Worker) +- Machines: `DC4as_v5`: 3rd Generation AMD EPYC 7763v (Milan) processor with 4 Cores, 16 GiB memory +- CVM: `true` +- Region: `West US` +- Zone: `2` + +Constellation on GCP: + +- Nodes: 3 (1 Control-plane, 2 Worker) +- Machines: `n2d-standard-4`: 2nd Generation AMD EPYC (Rome) processor with 4 Cores, 16 GiB of memory +- CVM: `true` +- Zone: `europe-west3-b` + +### AKS + +On AKS, the benchmark used Kubernetes `v1.24.9` and nodes with version `AKSUbuntu-1804gen2containerd-2023.02.15`. +AKS ran with the [`kubenet`](https://learn.microsoft.com/en-us/azure/aks/concepts-network#kubenet-basic-networking) CNI and the [default CSI driver](https://learn.microsoft.com/en-us/azure/aks/azure-disk-csi) for Azure Disk. + +The following infrastructure configurations was used: + +- Nodes: 2 (2 Worker) +- Machines: `D4as_v5`: 3rd Generation AMD EPYC 7763v (Milan) processor with 4 Cores, 16 GiB memory +- CVM: `false` +- Region: `West US` +- Zone: `2` + +### GKE + +On GKE, the benchmark used Kubernetes `v1.24.9` and nodes with version `1.24.9-gke.3200`. +GKE ran with the [`kubenet`](https://cloud.google.com/kubernetes-engine/docs/concepts/network-overview) CNI and the [default CSI driver](https://cloud.google.com/kubernetes-engine/docs/how-to/persistent-volumes/gce-pd-csi-driver) for Compute Engine persistent disk. + +The following infrastructure configurations was used: + +- Nodes: 2 (2 Worker) +- Machines: `n2d-standard-4` 2nd Generation AMD EPYC (Rome) processor with 4 Cores, 16 GiB of memory +- CVM: `false` +- Zone: `europe-west3-b` + +## Results + +### Network + +This section gives a thorough analysis of the network performance of Constellation, specifically focusing on measuring TCP and UDP bandwidth. +The benchmark measured the bandwidth of pod-to-pod and pod-to-service connections between two different nodes using [`iperf`](https://iperf.fr/). + +GKE and Constellation on GCP had a maximum network bandwidth of [10 Gbps](https://cloud.google.com/compute/docs/general-purpose-machines#n2d_machines). +AKS with `Standard_D4as_v5` machines a maximum network bandwidth of [12.5 Gbps](https://learn.microsoft.com/en-us/azure/virtual-machines/dasv5-dadsv5-series#dasv5-series). +The Confidential VM equivalent `Standard_DC4as_v5` currently has a network bandwidth of [1.25 Gbps](https://learn.microsoft.com/en-us/azure/virtual-machines/dcasv5-dcadsv5-series#dcasv5-series-products). +Therefore, to make the test comparable, both AKS and Constellation on Azure were running with `Standard_DC4as_v5` machines and 1.25 Gbps bandwidth. + +Constellation on Azure and AKS used an MTU of 1500. +Constellation on GCP used an MTU of 8896. GKE used an MTU of 1450. + +The difference in network bandwidth can largely be attributed to two factors. + +- Constellation's [network encryption](../../architecture/networking.md) via Cilium and WireGuard, which protects data in-transit. +- [AMD SEV using SWIOTLB bounce buffers](https://lore.kernel.org/all/20200204193500.GA15564@ashkalra_ubuntu_server/T/) for all DMA including network I/O. + +#### Pod-to-Pod + +In this scenario, the client Pod connects directly to the server pod via its IP address. + +```mermaid +flowchart LR + subgraph Node A + Client[Client] + end + subgraph Node B + Server[Server] + end + Client ==>|traffic| Server +``` + +The results for "Pod-to-Pod" on Azure are as follows: + +![Network Pod2Pod Azure benchmark graph](../../_media/benchmark_net_p2p_azure.png) + +The results for "Pod-to-Pod" on GCP are as follows: + +![Network Pod2Pod GCP benchmark graph](../../_media/benchmark_net_p2p_gcp.png) + +#### Pod-to-Service + +In this scenario, the client Pod connects to the server Pod via a ClusterIP service. This is more relevant to real-world use cases. + +```mermaid +flowchart LR + subgraph Node A + Client[Client] ==>|traffic| Service[Service] + end + subgraph Node B + Server[Server] + end + Service ==>|traffic| Server +``` + +The results for "Pod-to-Pod" on Azure are as follows: + +![Network Pod2SVC Azure benchmark graph](../../_media/benchmark_net_p2svc_azure.png) + +The results for "Pod-to-Pod" on GCP are as follows: + +![Network Pod2SVC GCP benchmark graph](../../_media/benchmark_net_p2svc_gcp.png) + +In our recent comparison of Constellation on GCP with GKE, Constellation has 58% less TCP bandwidth. However, UDP bandwidth was slightly better with Constellation, thanks to its higher MTU. + +Similarly, when comparing Constellation on Azure with AKS using CVMs, Constellation achieved approximately 10% less TCP and 40% less UDP bandwidth. + +### Storage I/O + +Azure and GCP offer persistent storage for their Kubernetes services AKS and GKE via the Container Storage Interface (CSI). CSI storage in Kubernetes is available via `PersistentVolumes` (PV) and consumed via `PersistentVolumeClaims` (PVC). +Upon requesting persistent storage through a PVC, GKE and AKS will provision a PV as defined by a default [storage class](https://kubernetes.io/docs/concepts/storage/storage-classes/). +Constellation provides persistent storage on Azure and GCP [that's encrypted on the CSI layer](../../architecture/encrypted-storage.md). +Similarly, upon a PVC request, Constellation will provision a PV via a default storage class. + +For Constellation on Azure and AKS, the benchmark ran with Azure Disk storage [Standard SSD](https://learn.microsoft.com/en-us/azure/virtual-machines/disks-types#standard-ssds) of 400 GiB size. +The [DC4as machine type](https://learn.microsoft.com/en-us/azure/virtual-machines/dasv5-dadsv5-series#dasv5-series) with four cores provides the following maximum performance: + +- 6400 (20000 burst) IOPS +- 144 MB/s (600 MB/s burst) throughput + +However, the performance is bound by the capabilities of the [512 GiB Standard SSD size](https://learn.microsoft.com/en-us/azure/virtual-machines/disks-types#standard-ssds) (the size class of 400 GiB volumes): + +- 500 (600 burst) IOPS +- 60 MB/s (150 MB/s burst) throughput + +For Constellation on GCP and GKE, the benchmark ran with Compute Engine Persistent Disk Storage [pd-balanced](https://cloud.google.com/compute/docs/disks) of 400 GiB size. +The N2D machine type with four cores and pd-balanced provides the following [maximum performance](https://cloud.google.com/compute/docs/disks/performance#n2d_vms): + +- 3,000 read IOPS +- 15,000 write IOPS +- 240 MB/s read throughput +- 240 MB/s write throughput + +However, the performance is bound by the capabilities of a [`Zonal balanced PD`](https://cloud.google.com/compute/docs/disks/performance#zonal-persistent-disks) with 400 GiB size: + +- 2400 read IOPS +- 2400 write IOPS +- 112 MB/s read throughput +- 112 MB/s write throughput + +The [`fio`](https://fio.readthedocs.io/en/latest/fio_doc.html) benchmark consists of several tests. +The benchmark used [`Kubestr`](https://github.com/kastenhq/kubestr) to run `fio` in Kubernetes. +The default test performs randomized access patterns that accurately depict worst-case I/O scenarios for most applications. + +The following `fio` settings were used: + +- No Cloud caching +- No OS caching +- Single CPU +- 60 seconds runtime +- 10 seconds ramp-up time +- 10 GiB file +- IOPS: 4 KB blocks and 128 iodepth +- Bandwidth: 1024 KB blocks and 128 iodepth + +For more details, see the [`fio` test configuration](https://github.com/edgelesssys/constellation/blob/main/.github/actions/e2e_benchmark/fio.ini). + +The results for IOPS on Azure are as follows: + +![I/O IOPS Azure benchmark graph](../../_media/benchmark_fio_azure_iops.png) + +The results for IOPS on GCP are as follows: + +![I/O IOPS GCP benchmark graph](../../_media/benchmark_fio_gcp_iops.png) + +The results for bandwidth on Azure are as follows: + +![I/O bandwidth Azure benchmark graph](../../_media/benchmark_fio_azure_bw.png) + +The results for bandwidth on GCP are as follows: + +![I/O bandwidth GCP benchmark graph](../../_media/benchmark_fio_gcp_bw.png) + +On GCP, the results exceed the maximum performance guarantees of the chosen disk type. There are two possible explanations for this. The first is that there may be cloud caching in place that isn't configurable. Alternatively, the underlying provisioned disk size may be larger than what was requested, resulting in higher performance boundaries. + +When comparing Constellation on GCP with GKE, Constellation has similar bandwidth but about 10% less IOPS performance. On Azure, Constellation has similar IOPS performance compared to AKS, where both likely hit the maximum storage performance. However, Constellation has approximately 15% less read and write bandwidth. + +## Conclusion + +Despite the added [security benefits](../security-benefits.md) that Constellation provides, it only incurs a slight performance overhead when compared to managed Kubernetes offerings such as AKS and GKE. In most compute benchmarks, Constellation is on par with it's alternatives. +While it may be slightly slower in certain I/O scenarios due to network and storage encryption, there is ongoing work to reduce this overhead to single digits. + +For instance, storage encryption only adds between 10% to 15% overhead in terms of bandwidth and IOPS. +Meanwhile, the biggest performance impact that Constellation currently faces is network encryption, which can incur up to 58% overhead on a 10 Gbps network. +However, the Cilium team has conducted [benchmarks with Cilium using WireGuard encryption](https://docs.cilium.io/en/latest/operations/performance/benchmark/#encryption-wireguard-ipsec) on a 100 Gbps network that yielded over 15 Gbps. +We're confident that Constellation will provide a similar level of performance with an upcoming release. + +Overall, Constellation strikes a great balance between security and performance, and we're continuously working to improve its performance capabilities while maintaining its high level of security. diff --git a/docs/versioned_docs/version-2.23/overview/performance/performance.md b/docs/versioned_docs/version-2.23/overview/performance/performance.md new file mode 100644 index 000000000..59bf86602 --- /dev/null +++ b/docs/versioned_docs/version-2.23/overview/performance/performance.md @@ -0,0 +1,17 @@ +# Performance analysis of Constellation + +This section provides a comprehensive examination of the performance characteristics of Constellation. + +## Runtime encryption + +Runtime encryption affects compute performance. [Benchmarks by Azure and Google](compute.md) show that the performance degradation of Confidential VMs (CVMs) is small, ranging from 2% to 8% for compute-intensive workloads. + +## I/O performance benchmarks + +We evaluated the [I/O performance](io.md) of Constellation, utilizing a collection of synthetic benchmarks targeting networking and storage. +We further compared this performance to native managed Kubernetes offerings from various cloud providers, to better understand how Constellation stands in relation to standard practices. + +## Application benchmarking + +To gauge Constellation's applicability to well-known applications, we performed a [benchmark of HashiCorp Vault](application.md) running on Constellation. +The results were then compared to deployments on the managed Kubernetes offerings from different cloud providers, providing a tangible perspective on Constellation's performance in actual deployment scenarios. diff --git a/docs/versioned_docs/version-2.23/overview/product.md b/docs/versioned_docs/version-2.23/overview/product.md new file mode 100644 index 000000000..4b5d90706 --- /dev/null +++ b/docs/versioned_docs/version-2.23/overview/product.md @@ -0,0 +1,12 @@ +# Product features + +Constellation is a Kubernetes engine that aims to provide the best possible data security in combination with enterprise-grade scalability and reliability features---and a smooth user experience. + +From a security perspective, Constellation implements the [Confidential Kubernetes](confidential-kubernetes.md) concept and corresponding security features, which shield your entire cluster from the underlying infrastructure. + +From an operational perspective, Constellation provides the following key features: + +* **Native support for different clouds**: Constellation works on Amazon Web Services (AWS), Microsoft Azure, Google Cloud Platform (GCP), and STACKIT. Support for OpenStack-based environments is coming with a future release. Constellation securely interfaces with the cloud infrastructure to provide [cluster autoscaling](https://github.com/kubernetes/autoscaler/tree/master/cluster-autoscaler), [dynamic persistent volumes](https://kubernetes.io/docs/concepts/storage/dynamic-provisioning/), and [service load balancing](https://kubernetes.io/docs/concepts/services-networking/service/#loadbalancer). +* **High availability**: Constellation uses a [multi-master architecture](https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/high-availability/) with a [stacked etcd topology](https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/ha-topology/#stacked-etcd-topology) to ensure high availability. +* **Integrated Day-2 operations**: Constellation lets you securely [upgrade](../workflows/upgrade.md) your cluster to a new release. It also lets you securely [recover](../workflows/recovery.md) a failed cluster. Both with a single command. +* **Support for Terraform**: Constellation includes a [Terraform provider](../workflows/terraform-provider.md) that lets you manage the full lifecycle of your cluster via Terraform. diff --git a/docs/versioned_docs/version-2.23/overview/security-benefits.md b/docs/versioned_docs/version-2.23/overview/security-benefits.md new file mode 100644 index 000000000..51a8b64f5 --- /dev/null +++ b/docs/versioned_docs/version-2.23/overview/security-benefits.md @@ -0,0 +1,22 @@ +# Security benefits and threat model + +Constellation implements the [Confidential Kubernetes](confidential-kubernetes.md) concept and shields entire Kubernetes deployments from the infrastructure. More concretely, Constellation decreases the size of the trusted computing base (TCB) of a Kubernetes deployment. The TCB is the totality of elements in a computing environment that must be trusted not to be compromised. A smaller TCB results in a smaller attack surface. The following diagram shows how Constellation removes the *cloud & datacenter infrastructure* and the *physical hosts*, including the hypervisor, the host OS, and other components, from the TCB (red). Inside the confidential context (green), Kubernetes remains part of the TCB, but its integrity is attested and can be [verified](../workflows/verify-cluster.md). + +![TCB comparison](../_media/tcb.svg) + +Given this background, the following describes the concrete threat classes that Constellation addresses. + +## Insider access + +Employees and third-party contractors of cloud service providers (CSPs) have access to different layers of the cloud infrastructure. +This opens up a large attack surface where workloads and data can be read, copied, or manipulated. With Constellation, Kubernetes deployments are shielded from the infrastructure and thus such accesses are prevented. + +## Infrastructure-based attacks + +Malicious cloud users ("hackers") may break out of their tenancy and access other tenants' data. Advanced attackers may even be able to establish a permanent foothold within the infrastructure and access data over a longer period. Analogously to the *insider access* scenario, Constellation also prevents access to a deployment's data in this scenario. + +## Supply chain attacks + +Supply chain security is receiving lots of attention recently due to an [increasing number of recorded attacks](https://www.enisa.europa.eu/news/enisa-news/understanding-the-increase-in-supply-chain-security-attacks). For instance, a malicious actor could attempt to tamper Constellation node images (including Kubernetes and other software) before they're loaded in the confidential VMs of a cluster. Constellation uses [remote attestation](../architecture/attestation.md) in conjunction with public [transparency logs](../workflows/verify-cli.md) to prevent this. + +In the future, Constellation will extend this feature to customer workloads. This will enable cluster owners to create auditable policies that precisely define which containers can run in a given deployment. diff --git a/docs/versioned_docs/version-2.23/reference/cli.md b/docs/versioned_docs/version-2.23/reference/cli.md new file mode 100644 index 000000000..7cbc0be8d --- /dev/null +++ b/docs/versioned_docs/version-2.23/reference/cli.md @@ -0,0 +1,873 @@ +# CLI reference + + + +Use the Constellation CLI to create and manage your clusters. + +Usage: + +``` +constellation [command] +``` +Commands: + +* [config](#constellation-config): Work with the Constellation configuration file + * [generate](#constellation-config-generate): Generate a default configuration and state file + * [fetch-measurements](#constellation-config-fetch-measurements): Fetch measurements for configured cloud provider and image + * [instance-types](#constellation-config-instance-types): Print the supported instance types for all cloud providers + * [kubernetes-versions](#constellation-config-kubernetes-versions): Print the Kubernetes versions supported by this CLI + * [migrate](#constellation-config-migrate): Migrate a configuration file to a new version +* [create](#constellation-create): Create instances on a cloud platform for your Constellation cluster +* [apply](#constellation-apply): Apply a configuration to a Constellation cluster +* [mini](#constellation-mini): Manage MiniConstellation clusters + * [up](#constellation-mini-up): Create and initialize a new MiniConstellation cluster + * [down](#constellation-mini-down): Destroy a MiniConstellation cluster +* [status](#constellation-status): Show status of a Constellation cluster +* [verify](#constellation-verify): Verify the confidential properties of a Constellation cluster +* [upgrade](#constellation-upgrade): Find and apply upgrades to your Constellation cluster + * [check](#constellation-upgrade-check): Check for possible upgrades + * [apply](#constellation-upgrade-apply): Apply an upgrade to a Constellation cluster +* [recover](#constellation-recover): Recover a completely stopped Constellation cluster +* [terminate](#constellation-terminate): Terminate a Constellation cluster +* [iam](#constellation-iam): Work with the IAM configuration on your cloud provider + * [create](#constellation-iam-create): Create IAM configuration on a cloud platform for your Constellation cluster + * [aws](#constellation-iam-create-aws): Create IAM configuration on AWS for your Constellation cluster + * [azure](#constellation-iam-create-azure): Create IAM configuration on Microsoft Azure for your Constellation cluster + * [gcp](#constellation-iam-create-gcp): Create IAM configuration on GCP for your Constellation cluster + * [destroy](#constellation-iam-destroy): Destroy an IAM configuration and delete local Terraform files + * [upgrade](#constellation-iam-upgrade): Find and apply upgrades to your IAM profile + * [apply](#constellation-iam-upgrade-apply): Apply an upgrade to an IAM profile +* [version](#constellation-version): Display version of this CLI +* [init](#constellation-init): Initialize the Constellation cluster +* [ssh](#constellation-ssh): Generate a certificate for emergency SSH access + +## constellation config + +Work with the Constellation configuration file + +### Synopsis + +Work with the Constellation configuration file. + +### Options + +``` + -h, --help help for config +``` + +### Options inherited from parent commands + +``` + --debug enable debug logging + --force disable version compatibility checks - might result in corrupted clusters + --tf-log string Terraform log level (default "NONE") + -C, --workspace string path to the Constellation workspace +``` + +## constellation config generate + +Generate a default configuration and state file + +### Synopsis + +Generate a default configuration and state file for your selected cloud provider. + +``` +constellation config generate {aws|azure|gcp|openstack|qemu|stackit} [flags] +``` + +### Options + +``` + -a, --attestation string attestation variant to use {aws-sev-snp|aws-nitro-tpm|azure-sev-snp|azure-tdx|azure-trustedlaunch|gcp-sev-snp|gcp-sev-es|qemu-vtpm}. If not specified, the default for the cloud provider is used + -h, --help help for generate + -k, --kubernetes string Kubernetes version to use in format MAJOR.MINOR (default "v1.30") + -t, --tags strings additional tags for created resources given a list of key=value +``` + +### Options inherited from parent commands + +``` + --debug enable debug logging + --force disable version compatibility checks - might result in corrupted clusters + --tf-log string Terraform log level (default "NONE") + -C, --workspace string path to the Constellation workspace +``` + +## constellation config fetch-measurements + +Fetch measurements for configured cloud provider and image + +### Synopsis + +Fetch measurements for configured cloud provider and image. + +A config needs to be generated first. + +``` +constellation config fetch-measurements [flags] +``` + +### Options + +``` + -h, --help help for fetch-measurements + -s, --signature-url string alternative URL to fetch measurements' signature from + -u, --url string alternative URL to fetch measurements from +``` + +### Options inherited from parent commands + +``` + --debug enable debug logging + --force disable version compatibility checks - might result in corrupted clusters + --tf-log string Terraform log level (default "NONE") + -C, --workspace string path to the Constellation workspace +``` + +## constellation config instance-types + +Print the supported instance types for all cloud providers + +### Synopsis + +Print the supported instance types for all cloud providers. + +``` +constellation config instance-types [flags] +``` + +### Options + +``` + -h, --help help for instance-types +``` + +### Options inherited from parent commands + +``` + --debug enable debug logging + --force disable version compatibility checks - might result in corrupted clusters + --tf-log string Terraform log level (default "NONE") + -C, --workspace string path to the Constellation workspace +``` + +## constellation config kubernetes-versions + +Print the Kubernetes versions supported by this CLI + +### Synopsis + +Print the Kubernetes versions supported by this CLI. + +``` +constellation config kubernetes-versions [flags] +``` + +### Options + +``` + -h, --help help for kubernetes-versions +``` + +### Options inherited from parent commands + +``` + --debug enable debug logging + --force disable version compatibility checks - might result in corrupted clusters + --tf-log string Terraform log level (default "NONE") + -C, --workspace string path to the Constellation workspace +``` + +## constellation config migrate + +Migrate a configuration file to a new version + +### Synopsis + +Migrate a configuration file to a new version. + +``` +constellation config migrate [flags] +``` + +### Options + +``` + -h, --help help for migrate +``` + +### Options inherited from parent commands + +``` + --debug enable debug logging + --force disable version compatibility checks - might result in corrupted clusters + --tf-log string Terraform log level (default "NONE") + -C, --workspace string path to the Constellation workspace +``` + +## constellation create + +Create instances on a cloud platform for your Constellation cluster + +### Synopsis + +Create instances on a cloud platform for your Constellation cluster. + +``` +constellation create [flags] +``` + +### Options + +``` + -h, --help help for create + -y, --yes create the cluster without further confirmation +``` + +### Options inherited from parent commands + +``` + --debug enable debug logging + --force disable version compatibility checks - might result in corrupted clusters + --tf-log string Terraform log level (default "NONE") + -C, --workspace string path to the Constellation workspace +``` + +## constellation apply + +Apply a configuration to a Constellation cluster + +### Synopsis + +Apply a configuration to a Constellation cluster to initialize or upgrade the cluster. + +``` +constellation apply [flags] +``` + +### Options + +``` + --conformance enable conformance mode + -h, --help help for apply + --merge-kubeconfig merge Constellation kubeconfig file with default kubeconfig file in $HOME/.kube/config + --skip-helm-wait install helm charts without waiting for deployments to be ready + --skip-phases strings comma-separated list of upgrade phases to skip + one or multiple of { infrastructure | init | attestationconfig | certsans | helm | image | k8s } + -y, --yes run command without further confirmation + WARNING: the command might delete or update existing resources without additional checks. Please read the docs. + +``` + +### Options inherited from parent commands + +``` + --debug enable debug logging + --force disable version compatibility checks - might result in corrupted clusters + --tf-log string Terraform log level (default "NONE") + -C, --workspace string path to the Constellation workspace +``` + +## constellation mini + +Manage MiniConstellation clusters + +### Synopsis + +Manage MiniConstellation clusters. + +### Options + +``` + -h, --help help for mini +``` + +### Options inherited from parent commands + +``` + --debug enable debug logging + --force disable version compatibility checks - might result in corrupted clusters + --tf-log string Terraform log level (default "NONE") + -C, --workspace string path to the Constellation workspace +``` + +## constellation mini up + +Create and initialize a new MiniConstellation cluster + +### Synopsis + +Create and initialize a new MiniConstellation cluster. + +A mini cluster consists of a single control-plane and worker node, hosted using QEMU/KVM. + +``` +constellation mini up [flags] +``` + +### Options + +``` + -h, --help help for up + --merge-kubeconfig merge Constellation kubeconfig file with default kubeconfig file in $HOME/.kube/config (default true) +``` + +### Options inherited from parent commands + +``` + --debug enable debug logging + --force disable version compatibility checks - might result in corrupted clusters + --tf-log string Terraform log level (default "NONE") + -C, --workspace string path to the Constellation workspace +``` + +## constellation mini down + +Destroy a MiniConstellation cluster + +### Synopsis + +Destroy a MiniConstellation cluster. + +``` +constellation mini down [flags] +``` + +### Options + +``` + -h, --help help for down + -y, --yes terminate the cluster without further confirmation +``` + +### Options inherited from parent commands + +``` + --debug enable debug logging + --force disable version compatibility checks - might result in corrupted clusters + --tf-log string Terraform log level (default "NONE") + -C, --workspace string path to the Constellation workspace +``` + +## constellation status + +Show status of a Constellation cluster + +### Synopsis + +Show the status of a constellation cluster. + +Shows microservice, image, and Kubernetes versions installed in the cluster. Also shows status of current version upgrades. + +``` +constellation status [flags] +``` + +### Options + +``` + -h, --help help for status +``` + +### Options inherited from parent commands + +``` + --debug enable debug logging + --force disable version compatibility checks - might result in corrupted clusters + --tf-log string Terraform log level (default "NONE") + -C, --workspace string path to the Constellation workspace +``` + +## constellation verify + +Verify the confidential properties of a Constellation cluster + +### Synopsis + +Verify the confidential properties of a Constellation cluster. +If arguments aren't specified, values are read from `constellation-state.yaml`. + +``` +constellation verify [flags] +``` + +### Options + +``` + --cluster-id string expected cluster identifier + -h, --help help for verify + -e, --node-endpoint string endpoint of the node to verify, passed as HOST[:PORT] + -o, --output string print the attestation document in the output format {json|raw} +``` + +### Options inherited from parent commands + +``` + --debug enable debug logging + --force disable version compatibility checks - might result in corrupted clusters + --tf-log string Terraform log level (default "NONE") + -C, --workspace string path to the Constellation workspace +``` + +## constellation upgrade + +Find and apply upgrades to your Constellation cluster + +### Synopsis + +Find and apply upgrades to your Constellation cluster. + +### Options + +``` + -h, --help help for upgrade +``` + +### Options inherited from parent commands + +``` + --debug enable debug logging + --force disable version compatibility checks - might result in corrupted clusters + --tf-log string Terraform log level (default "NONE") + -C, --workspace string path to the Constellation workspace +``` + +## constellation upgrade check + +Check for possible upgrades + +### Synopsis + +Check which upgrades can be applied to your Constellation Cluster. + +``` +constellation upgrade check [flags] +``` + +### Options + +``` + -h, --help help for check + --ref string the reference to use for querying new versions (default "-") + --stream string the stream to use for querying new versions (default "stable") + -u, --update-config update the specified config file with the suggested versions +``` + +### Options inherited from parent commands + +``` + --debug enable debug logging + --force disable version compatibility checks - might result in corrupted clusters + --tf-log string Terraform log level (default "NONE") + -C, --workspace string path to the Constellation workspace +``` + +## constellation upgrade apply + +Apply an upgrade to a Constellation cluster + +### Synopsis + +Apply an upgrade to a Constellation cluster by applying the chosen configuration. + +``` +constellation upgrade apply [flags] +``` + +### Options + +``` + --conformance enable conformance mode + -h, --help help for apply + --skip-helm-wait install helm charts without waiting for deployments to be ready + --skip-phases strings comma-separated list of upgrade phases to skip + one or multiple of { infrastructure | helm | image | k8s } + -y, --yes run upgrades without further confirmation + WARNING: might delete your resources in case you are using cert-manager in your cluster. Please read the docs. + WARNING: might unintentionally overwrite measurements in the running cluster. +``` + +### Options inherited from parent commands + +``` + --debug enable debug logging + --force disable version compatibility checks - might result in corrupted clusters + --tf-log string Terraform log level (default "NONE") + -C, --workspace string path to the Constellation workspace +``` + +## constellation recover + +Recover a completely stopped Constellation cluster + +### Synopsis + +Recover a Constellation cluster by sending a recovery key to an instance in the boot stage. + +This is only required if instances restart without other instances available for bootstrapping. + +``` +constellation recover [flags] +``` + +### Options + +``` + -e, --endpoint string endpoint of the instance, passed as HOST[:PORT] + -h, --help help for recover +``` + +### Options inherited from parent commands + +``` + --debug enable debug logging + --force disable version compatibility checks - might result in corrupted clusters + --tf-log string Terraform log level (default "NONE") + -C, --workspace string path to the Constellation workspace +``` + +## constellation terminate + +Terminate a Constellation cluster + +### Synopsis + +Terminate a Constellation cluster. + +The cluster can't be started again, and all persistent storage will be lost. + +``` +constellation terminate [flags] +``` + +### Options + +``` + -h, --help help for terminate + -y, --yes terminate the cluster without further confirmation +``` + +### Options inherited from parent commands + +``` + --debug enable debug logging + --force disable version compatibility checks - might result in corrupted clusters + --tf-log string Terraform log level (default "NONE") + -C, --workspace string path to the Constellation workspace +``` + +## constellation iam + +Work with the IAM configuration on your cloud provider + +### Synopsis + +Work with the IAM configuration on your cloud provider. + +### Options + +``` + -h, --help help for iam +``` + +### Options inherited from parent commands + +``` + --debug enable debug logging + --force disable version compatibility checks - might result in corrupted clusters + --tf-log string Terraform log level (default "NONE") + -C, --workspace string path to the Constellation workspace +``` + +## constellation iam create + +Create IAM configuration on a cloud platform for your Constellation cluster + +### Synopsis + +Create IAM configuration on a cloud platform for your Constellation cluster. + +### Options + +``` + -h, --help help for create + --update-config update the config file with the specific IAM information + -y, --yes create the IAM configuration without further confirmation +``` + +### Options inherited from parent commands + +``` + --debug enable debug logging + --force disable version compatibility checks - might result in corrupted clusters + --tf-log string Terraform log level (default "NONE") + -C, --workspace string path to the Constellation workspace +``` + +## constellation iam create aws + +Create IAM configuration on AWS for your Constellation cluster + +### Synopsis + +Create IAM configuration on AWS for your Constellation cluster. + +``` +constellation iam create aws [flags] +``` + +### Options + +``` + -h, --help help for aws + --prefix string name prefix for all resources (required) + --zone string AWS availability zone the resources will be created in, e.g., us-east-2a (required) + See the Constellation docs for a list of currently supported regions. +``` + +### Options inherited from parent commands + +``` + --debug enable debug logging + --force disable version compatibility checks - might result in corrupted clusters + --tf-log string Terraform log level (default "NONE") + --update-config update the config file with the specific IAM information + -C, --workspace string path to the Constellation workspace + -y, --yes create the IAM configuration without further confirmation +``` + +## constellation iam create azure + +Create IAM configuration on Microsoft Azure for your Constellation cluster + +### Synopsis + +Create IAM configuration on Microsoft Azure for your Constellation cluster. + +``` +constellation iam create azure [flags] +``` + +### Options + +``` + -h, --help help for azure + --region string region the resources will be created in, e.g., westus (required) + --resourceGroup string name prefix of the two resource groups your cluster / IAM resources will be created in (required) + --servicePrincipal string name of the service principal that will be created (required) + --subscriptionID string subscription ID of the Azure account. Required if the 'ARM_SUBSCRIPTION_ID' environment variable is not set +``` + +### Options inherited from parent commands + +``` + --debug enable debug logging + --force disable version compatibility checks - might result in corrupted clusters + --tf-log string Terraform log level (default "NONE") + --update-config update the config file with the specific IAM information + -C, --workspace string path to the Constellation workspace + -y, --yes create the IAM configuration without further confirmation +``` + +## constellation iam create gcp + +Create IAM configuration on GCP for your Constellation cluster + +### Synopsis + +Create IAM configuration on GCP for your Constellation cluster. + +``` +constellation iam create gcp [flags] +``` + +### Options + +``` + -h, --help help for gcp + --prefix string Prefix for the service account ID and VM ID that will be created (required) + Must be letters, digits, or hyphens. + --projectID string ID of the GCP project the configuration will be created in (required) + Find it on the welcome screen of your project: https://console.cloud.google.com/welcome + --zone string GCP zone the cluster will be deployed in (required) + Find a list of available zones here: https://cloud.google.com/compute/docs/regions-zones#available +``` + +### Options inherited from parent commands + +``` + --debug enable debug logging + --force disable version compatibility checks - might result in corrupted clusters + --tf-log string Terraform log level (default "NONE") + --update-config update the config file with the specific IAM information + -C, --workspace string path to the Constellation workspace + -y, --yes create the IAM configuration without further confirmation +``` + +## constellation iam destroy + +Destroy an IAM configuration and delete local Terraform files + +### Synopsis + +Destroy an IAM configuration and delete local Terraform files. + +``` +constellation iam destroy [flags] +``` + +### Options + +``` + -h, --help help for destroy + -y, --yes destroy the IAM configuration without asking for confirmation +``` + +### Options inherited from parent commands + +``` + --debug enable debug logging + --force disable version compatibility checks - might result in corrupted clusters + --tf-log string Terraform log level (default "NONE") + -C, --workspace string path to the Constellation workspace +``` + +## constellation iam upgrade + +Find and apply upgrades to your IAM profile + +### Synopsis + +Find and apply upgrades to your IAM profile. + +### Options + +``` + -h, --help help for upgrade +``` + +### Options inherited from parent commands + +``` + --debug enable debug logging + --force disable version compatibility checks - might result in corrupted clusters + --tf-log string Terraform log level (default "NONE") + -C, --workspace string path to the Constellation workspace +``` + +## constellation iam upgrade apply + +Apply an upgrade to an IAM profile + +### Synopsis + +Apply an upgrade to an IAM profile. + +``` +constellation iam upgrade apply [flags] +``` + +### Options + +``` + -h, --help help for apply + -y, --yes run upgrades without further confirmation +``` + +### Options inherited from parent commands + +``` + --debug enable debug logging + --force disable version compatibility checks - might result in corrupted clusters + --tf-log string Terraform log level (default "NONE") + -C, --workspace string path to the Constellation workspace +``` + +## constellation version + +Display version of this CLI + +### Synopsis + +Display version of this CLI. + +``` +constellation version [flags] +``` + +### Options + +``` + -h, --help help for version +``` + +### Options inherited from parent commands + +``` + --debug enable debug logging + --force disable version compatibility checks - might result in corrupted clusters + --tf-log string Terraform log level (default "NONE") + -C, --workspace string path to the Constellation workspace +``` + +## constellation init + +Initialize the Constellation cluster + +### Synopsis + +Initialize the Constellation cluster. + +Start your confidential Kubernetes. + +``` +constellation init [flags] +``` + +### Options + +``` + --conformance enable conformance mode + -h, --help help for init + --merge-kubeconfig merge Constellation kubeconfig file with default kubeconfig file in $HOME/.kube/config + --skip-helm-wait install helm charts without waiting for deployments to be ready +``` + +### Options inherited from parent commands + +``` + --debug enable debug logging + --force disable version compatibility checks - might result in corrupted clusters + --tf-log string Terraform log level (default "NONE") + -C, --workspace string path to the Constellation workspace +``` + +## constellation ssh + +Generate a certificate for emergency SSH access + +### Synopsis + +Generate a certificate for emergency SSH access to your SSH-enabled constellation cluster. + +``` +constellation ssh [flags] +``` + +### Options + +``` + -h, --help help for ssh + --key string the path to an existing SSH public key +``` + +### Options inherited from parent commands + +``` + --debug enable debug logging + --force disable version compatibility checks - might result in corrupted clusters + --tf-log string Terraform log level (default "NONE") + -C, --workspace string path to the Constellation workspace +``` + diff --git a/docs/versioned_docs/version-2.23/reference/migration.md b/docs/versioned_docs/version-2.23/reference/migration.md new file mode 100644 index 000000000..36bfb1462 --- /dev/null +++ b/docs/versioned_docs/version-2.23/reference/migration.md @@ -0,0 +1,134 @@ +# Migrations + +This document describes breaking changes and migrations between Constellation releases. +Use [`constellation config migrate`](./cli.md#constellation-config-migrate) to automatically update an old config file to a new format. + +## Migrations to v2.19.1 + +### Azure + +* During the upgrade, security rules are migrated and the old ones need to be cleaned up manually by the user. The below script shows how to delete them through the Azure CLI: + +```bash +#!/usr/bin/env bash +name="" # the name provided in the config +uid="" # the cluster id can be retrieved via `yq '.infrastructure.uid' constellation-state.yaml` +resource_group="" # the RG can be retrieved via `yq '.provider.azure.resourceGroup' constellation-conf.yaml` + +rules=( + "kubernetes" + "bootstrapper" + "verify" + "recovery" + "join" + "debugd" + "konnectivity" +) + +for rule in "${rules[@]}"; do + echo "Deleting rule: ${rule}" + az network nsg rule delete \ + --resource-group "${resource_group}" \ + --nsg-name "${name}-${uid}" \ + --name "${rule}" +done + +echo "All specified rules have been deleted." +``` + +## Migrating from CLI versions before 2.21.1 + +### AWS + +* AWS clusters that use `LoadBalancer` resources require more IAM permissions. Please upgrade your IAM roles using `constellation iam upgrade apply`. This will show necessary changes and apply them, if desired. + +## Migrating from CLI versions before 2.19.0 + +### Azure + +* To allow seamless upgrades on Azure when Kubernetes services of type `LoadBalancer` are deployed, the target + load balancer in which the `cloud-controller-manager` creates load balancing rules was changed. Instead of using the load balancer + created and maintained by the CLI's Terraform code, the `cloud-controller-manager` now creates its own load balancer in Azure. + If your Constellation has services of type `LoadBalancer`, please remove them before the upgrade and re-apply them + afterward. + +## Migrating from CLI versions before 2.18.0 + +* The `provider.azure.appClientID` and `provider.azure.appClientSecret` fields are no longer supported and should be removed. +* To keep using an existing UAMI, add the `Owner` permission with the scope of your `resourceGroup`. +* Otherwise, simply [create new Constellation IAM credentials](../workflows/config.md#creating-an-iam-configuration) and use the created UAMI. +* To migrate the authentication for an existing cluster on Azure to an UAMI with the necessary permissions: + 1. Remove the `aadClientId` and `aadClientSecret` from the azureconfig secret. + 2. Set `useManagedIdentityExtension` to `true` and use the `userAssignedIdentity` from the Constellation config for the value of `userAssignedIdentityID`. + 3. Restart the CSI driver, cloud controller manager, cluster autoscaler, and Constellation operator pods. + +## Migrating from CLI versions before 2.10 + +* AWS cluster upgrades require additional IAM permissions for the newly introduced `aws-load-balancer-controller`. Please upgrade your IAM roles using `iam upgrade apply`. This will show necessary changes and apply them, if desired. +* The global `nodeGroups` field was added. +* The fields `instanceType`, `stateDiskSizeGB`, and `stateDiskType` for each cloud provider are now part of the configuration of individual node groups. +* The `constellation create` command no longer uses the flags `--control-plane-count` and `--worker-count`. Instead, the initial node count is configured per node group in the `nodeGroups` field. + +## Migrating from CLI versions before 2.9 + +* The `provider.azure.appClientID` and `provider.azure.clientSecretValue` fields were removed to enforce migration to managed identity authentication + +## Migrating from CLI versions before 2.8 + +* The `measurements` field for each cloud service provider was replaced with a global `attestation` field. +* The `confidentialVM`, `idKeyDigest`, and `enforceIdKeyDigest` fields for the Azure cloud service provider were removed in favor of using the global `attestation` field. +* The optional global field `attestationVariant` was replaced by the now required `attestation` field. + +## Migrating from CLI versions before 2.3 + +* The `sshUsers` field was deprecated in v2.2 and has been removed from the configuration in v2.3. + As an alternative for SSH, check the workflow section [Connect to nodes](../workflows/troubleshooting.md#node-shell-access). +* The `image` field for each cloud service provider has been replaced with a global `image` field. Use the following mapping to migrate your configuration: +
          + Show all + + | CSP | old image | new image | + | ----- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------- | + | AWS | `ami-06b8cbf4837a0a57c` | `v2.2.2` | + | AWS | `ami-02e96dc04a9e438cd` | `v2.2.2` | + | AWS | `ami-028ead928a9034b2f` | `v2.2.2` | + | AWS | `ami-032ac10dd8d8266e3` | `v2.2.1` | + | AWS | `ami-032e0d57cc4395088` | `v2.2.1` | + | AWS | `ami-053c3e49e19b96bdd` | `v2.2.1` | + | AWS | `ami-0e27ebcefc38f648b` | `v2.2.0` | + | AWS | `ami-098cd37f66523b7c3` | `v2.2.0` | + | AWS | `ami-04a87d302e2509aad` | `v2.2.0` | + | Azure | `/subscriptions/0d202bbb-4fa7-4af8-8125-58c269a05435/resourceGroups/constellation-images/providers/Microsoft.Compute/galleries/Constellation/images/constellation/versions/2.2.2` | `v2.2.2` | + | Azure | `/subscriptions/0d202bbb-4fa7-4af8-8125-58c269a05435/resourceGroups/constellation-images/providers/Microsoft.Compute/galleries/Constellation_CVM/images/constellation/versions/2.2.2` | `v2.2.2` | + | Azure | `/subscriptions/0d202bbb-4fa7-4af8-8125-58c269a05435/resourceGroups/constellation-images/providers/Microsoft.Compute/galleries/Constellation/images/constellation/versions/2.2.1` | `v2.2.1` | + | Azure | `/subscriptions/0d202bbb-4fa7-4af8-8125-58c269a05435/resourceGroups/constellation-images/providers/Microsoft.Compute/galleries/Constellation_CVM/images/constellation/versions/2.2.1` | `v2.2.1` | + | Azure | `/subscriptions/0d202bbb-4fa7-4af8-8125-58c269a05435/resourceGroups/constellation-images/providers/Microsoft.Compute/galleries/Constellation/images/constellation/versions/2.2.0` | `v2.2.0` | + | Azure | `/subscriptions/0d202bbb-4fa7-4af8-8125-58c269a05435/resourceGroups/constellation-images/providers/Microsoft.Compute/galleries/Constellation_CVM/images/constellation/versions/2.2.0` | `v2.2.0` | + | Azure | `/subscriptions/0d202bbb-4fa7-4af8-8125-58c269a05435/resourceGroups/constellation-images/providers/Microsoft.Compute/galleries/Constellation/images/constellation/versions/2.1.0` | `v2.1.0` | + | Azure | `/subscriptions/0d202bbb-4fa7-4af8-8125-58c269a05435/resourceGroups/constellation-images/providers/Microsoft.Compute/galleries/Constellation_CVM/images/constellation/versions/2.1.0` | `v2.1.0` | + | Azure | `/subscriptions/0d202bbb-4fa7-4af8-8125-58c269a05435/resourceGroups/constellation-images/providers/Microsoft.Compute/galleries/Constellation/images/constellation/versions/2.0.0` | `v2.0.0` | + | Azure | `/subscriptions/0d202bbb-4fa7-4af8-8125-58c269a05435/resourceGroups/constellation-images/providers/Microsoft.Compute/galleries/Constellation_CVM/images/constellation/versions/2.0.0` | `v2.0.0` | + | GCP | `projects/constellation-images/global/images/constellation-v2-2-2` | `v2.2.2` | + | GCP | `projects/constellation-images/global/images/constellation-v2-2-1` | `v2.2.1` | + | GCP | `projects/constellation-images/global/images/constellation-v2-2-0` | `v2.2.0` | + | GCP | `projects/constellation-images/global/images/constellation-v2-1-0` | `v2.1.0` | + | GCP | `projects/constellation-images/global/images/constellation-v2-0-0` | `v2.0.0` | + +
          +* The `enforcedMeasurements` field has been removed and merged with the `measurements` field. + * To migrate your config containing a new image (`v2.3` or greater), remove the old `measurements` and `enforcedMeasurements` entries from your config and run `constellation fetch-measurements` + * To migrate your config containing an image older than `v2.3`, remove the `enforcedMeasurements` entry and replace the entries in `measurements` as shown in the example below: + + ```diff + measurements: + - 0: DzXCFGCNk8em5ornNZtKi+Wg6Z7qkQfs5CfE3qTkOc8= + + 0: + + expected: DzXCFGCNk8em5ornNZtKi+Wg6Z7qkQfs5CfE3qTkOc8= + + warnOnly: true + - 8: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= + + 8: + + expected: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA= + + warnOnly: false + -enforcedMeasurements: + - - 8 + ``` diff --git a/docs/versioned_docs/version-2.23/reference/slsa.md b/docs/versioned_docs/version-2.23/reference/slsa.md new file mode 100644 index 000000000..21f4e713c --- /dev/null +++ b/docs/versioned_docs/version-2.23/reference/slsa.md @@ -0,0 +1,73 @@ +# Supply chain levels for software artifacts (SLSA) adoption + +[Supply chain Levels for Software Artifacts, or SLSA (salsa)](https://slsa.dev/) is a framework for improving and grading a project's build system and engineering processes. SLSA focuses on security improvements for source code storage as well as build system definition, execution, and observation. SLSA is structured in [four levels](https://slsa.dev/spec/v0.1/levels). This page describes the adoption of SLSA for Constellation. + +:::info +SLSA is still in alpha status. The presented levels and their requirements might change in the future. We will adopt any changes into our engineering processes, as they get defined. +::: + +## Level 1 - Adopted + +**[Build - Scripted](https://slsa.dev/spec/v0.1/requirements#scripted-build)** + +All build steps are automated via [Bazel](https://github.com/edgelesssys/constellation/tree/main/bazel/ci) and [GitHub Actions](https://github.com/edgelesssys/constellation/tree/main/.github). + +**[Provenance - Available](https://slsa.dev/spec/v0.1/requirements#available)** + +Provenance for the CLI is generated using the [slsa-github-generator](https://github.com/slsa-framework/slsa-github-generator). + +## Level 2 - Adopted + +**[Source - Version Controlled](https://slsa.dev/spec/v0.1/requirements#version-controlled)** + +Constellation is hosted on GitHub using git. + +**[Build - Build Service](https://slsa.dev/spec/v0.1/requirements#build-service)** + +All builds are carried out by [GitHub Actions](https://github.com/edgelesssys/constellation/tree/main/.github). + +**[Provenance - Authenticated](https://slsa.dev/spec/v0.1/requirements#authenticated)** + +Provenance for the CLI is signed using the [slsa-github-generator](https://github.com/slsa-framework/slsa-github-generator). Learn [how to verify the CLI](../workflows/verify-cli.md) using the signed provenance, before using it for the first time. + +**[Provenance - Service Generated](https://slsa.dev/spec/v0.1/requirements#service-generated)** + +Provenance for the CLI is generated using the [slsa-github-generator](https://github.com/slsa-framework/slsa-github-generator) in GitHub Actions. + +## Level 3 - Adopted + +**[Source - Verified History](https://slsa.dev/spec/v0.1/requirements#verified-history)** + +The [Edgeless Systems](https://github.com/edgelesssys) GitHub organization [requires two-factor authentication](https://docs.github.com/en/organizations/keeping-your-organization-secure/managing-two-factor-authentication-for-your-organization/requiring-two-factor-authentication-in-your-organization) for all members. + +**[Source - Retained Indefinitely](https://slsa.dev/spec/v0.1/requirements#retained-indefinitely)** + +Since we use GitHub to host the repository, an external person can't modify or delete the history. Before a pull request can be merged, an explicit approval from an [Edgeless Systems](https://github.com/edgelesssys) team member is required. + +The same holds true for changes proposed by team members. Each change to `main` needs to be proposed via a pull request and requires at least one approval. + +The [Edgeless Systems](https://github.com/edgelesssys) GitHub organization admins control these settings and are able to make changes to the repository's history should legal requirements necessitate it. These changes require two-party approval following the obliterate policy. + +**[Build - Build as Code](https://slsa.dev/spec/v0.1/requirements#build-as-code)** + +All build files for Constellation are stored in [the same repository](https://github.com/edgelesssys/constellation/tree/main/.github). + +**[Build - Ephemeral Environment](https://slsa.dev/spec/v0.1/requirements#ephemeral-environment)** + +All GitHub Action workflows are executed on [GitHub-hosted runners](https://docs.github.com/en/actions/using-github-hosted-runners/about-github-hosted-runners). These runners are only available during workflow. + +We currently don't use [self-hosted runners](https://docs.github.com/en/actions/hosting-your-own-runners/about-self-hosted-runners). + +**[Build - Isolated](https://slsa.dev/spec/v0.1/requirements#isolated)** + +As outlined in the previous section, we use GitHub-hosted runners, which provide a new, isolated and ephemeral environment for each build. + +Additionally, the [SLSA GitHub generator](https://github.com/slsa-framework/slsa-github-generator#generation-of-provenance) itself is run in an isolated workflow with the artifact hash as defined inputs. + +**[Provenance - Non-falsifiable](https://slsa.dev/spec/v0.1/requirements#non-falsifiable)** + +As outlined by [SLSA GitHub generator](https://github.com/slsa-framework/slsa-github-generator) it already fulfills the non-falsifiable requirements for SLSA Level 3. The generated provenance is signed using [sigstore](https://sigstore.dev/) with an OIDC based proof of identity. + +## Level 4 - In Progress + +We strive to adopt certain aspect of SLSA Level 4 that support our engineering process. At the same time, SLSA is still in alpha status and the biggest changes to SLSA are expected to be around Level 4. diff --git a/docs/versioned_docs/version-2.23/reference/terraform.md b/docs/versioned_docs/version-2.23/reference/terraform.md new file mode 100644 index 000000000..9825a8bb8 --- /dev/null +++ b/docs/versioned_docs/version-2.23/reference/terraform.md @@ -0,0 +1,37 @@ +# Terraform usage + +[Terraform](https://www.terraform.io/) is an Infrastructure as Code (IaC) framework to manage cloud resources. This page explains how Constellation uses it internally and how advanced users may manually use it to have more control over the resource creation. + +:::info +Information on this page is intended for users who are familiar with Terraform. +It's not required for common usage of Constellation. +See the [Terraform documentation](https://developer.hashicorp.com/terraform/docs) if you want to learn more about it. +::: + +## Terraform state files + +Constellation keeps Terraform state files in subdirectories of the workspace together with the corresponding Terraform configuration files and metadata. +The subdirectories are created on the first Constellation CLI action that uses Terraform internally. + +Currently, these subdirectories are: + +* `constellation-terraform` - Terraform state files for the resources of the Constellation cluster +* `constellation-iam-terraform` - Terraform state files for IAM configuration + +As with all commands, commands that work with these files (e.g., `apply`, `terminate`, `iam`) have to be executed from the root of the cluster's [workspace directory](../architecture/orchestration.md#workspaces). You usually don't need and shouldn't manipulate or delete the subdirectories manually. + +## Interacting with Terraform manually + +Manual interaction with Terraform state created by Constellation (i.e., via the Terraform CLI) should only be performed by experienced users. It may lead to unrecoverable loss of cloud resources. For the majority of users and use cases, the interaction done by the [Constellation CLI](cli.md) is sufficient. + +## Terraform debugging + +To debug Terraform issues, the Constellation CLI offers the `tf-log` flag. You can set it to any of [Terraform's log levels](https://developer.hashicorp.com/terraform/internals/debugging): +* `JSON` (JSON-formatted logs at `TRACE` level) +* `TRACE` +* `DEBUG` +* `INFO` +* `WARN` +* `ERROR` + +The log output is written to the `terraform.log` file in the workspace directory. The output is appended to the file on each run. diff --git a/docs/versioned_docs/version-2.23/workflows/cert-manager.md b/docs/versioned_docs/version-2.23/workflows/cert-manager.md new file mode 100644 index 000000000..1d847e8bf --- /dev/null +++ b/docs/versioned_docs/version-2.23/workflows/cert-manager.md @@ -0,0 +1,13 @@ +# Install cert-manager + +:::caution +If you want to use cert-manager with Constellation, pay attention to the following to avoid potential pitfalls. +::: + +Constellation ships with cert-manager preinstalled. +The default installation is part of the `kube-system` namespace, as all other Constellation-managed microservices. +You are free to install more instances of cert-manager into other namespaces. +However, be aware that any new installation needs to use the same version as the one installed with Constellation or rely on the same CRD versions. +Also remember to set the `installCRDs` value to `false` when installing new cert-manager instances. +It will create problems if you have two installations of cert-manager depending on different versions of the installed CRDs. +CRDs are cluster-wide resources and cert-manager depends on specific versions of those CRDs for each release. diff --git a/docs/versioned_docs/version-2.23/workflows/config.md b/docs/versioned_docs/version-2.23/workflows/config.md new file mode 100644 index 000000000..7868ff1be --- /dev/null +++ b/docs/versioned_docs/version-2.23/workflows/config.md @@ -0,0 +1,353 @@ +# Configure your cluster + +:::info +This recording presents the essence of this page. It's recommended to read it in full for the motivation and all details. +::: + + + +--- + +Before you can create your cluster, you need to configure the identity and access management (IAM) for your cloud service provider (CSP) and choose machine types for the nodes. + +## Creating the configuration file + +You can generate a configuration file for your CSP by using the following CLI command: + + + + +```bash +constellation config generate aws +``` + + + + +```bash +constellation config generate azure +``` + + + + +```bash +constellation config generate gcp +``` + + + + +```bash +constellation config generate stackit +``` + + + + +This creates the file `constellation-conf.yaml` in the current directory. + +## Choosing a VM type + +Constellation supports the following VM types: + + + +By default, Constellation uses `m6a.xlarge` VMs (4 vCPUs, 16 GB RAM) to create your cluster. +Optionally, you can switch to a different VM type by modifying `instanceType` in the configuration file. +If you are using the default attestation variant `awsSEVSNP`, you can use the instance types described in [AWS's AMD SEV-SNP docs](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/snp-requirements.html). +Please mind the region restrictions mentioned in the [Getting started](../getting-started/first-steps.md#create-a-cluster) section. + +If you are using the attestation variant `awsNitroTPM`, you can choose any of the [nitroTPM-enabled instance types](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/enable-nitrotpm-prerequisites.html). + +The Constellation CLI can also print the supported instance types with: `constellation config instance-types`. + + + + +By default, Constellation uses `Standard_DC4as_v5` CVMs (4 vCPUs, 16 GB RAM) to create your cluster. Optionally, you can switch to a different VM type by modifying `instanceType` in the configuration file. For CVMs, any VM type with a minimum of 4 vCPUs from the [DCasv5 & DCadsv5](https://docs.microsoft.com/en-us/azure/virtual-machines/dcasv5-dcadsv5-series) or [ECasv5 & ECadsv5](https://docs.microsoft.com/en-us/azure/virtual-machines/ecasv5-ecadsv5-series) families is supported. + +You can also run `constellation config instance-types` to get the list of all supported options. + + + + +By default, Constellation uses `n2d-standard-4` VMs (4 vCPUs, 16 GB RAM) to create your cluster. Optionally, you can switch to a different VM type by modifying `instanceType` in the configuration file. Supported are all machines with a minimum of 4 vCPUs from the [C2D](https://cloud.google.com/compute/docs/compute-optimized-machines#c2d_machine_types) or [N2D](https://cloud.google.com/compute/docs/general-purpose-machines#n2d_machines) family. You can run `constellation config instance-types` to get the list of all supported options. + + + + +By default, Constellation uses `m1a.4cd` VMs (4 vCPUs, 30 GB RAM) to create your cluster. +Optionally, you can switch to a different VM type by modifying `instanceType` in the configuration file. + +The following instance types are known to be supported: + +| name | vCPUs | GB RAM | +|----------|-------|--------| +| m1a.4cd | 4 | 30 | +| m1a.8cd | 8 | 60 | +| m1a.16cd | 16 | 120 | +| m1a.30cd | 30 | 230 | + +You can choose any of the SEV-enabled instance types. You can find a list of all supported instance types in the [STACKIT documentation](https://docs.stackit.cloud/stackit/en/virtual-machine-flavors-75137231.html). + +The Constellation CLI can also print the supported instance types with: `constellation config instance-types`. + + + + +Fill the desired VM type into the `instanceType` fields in the `constellation-conf.yml` file. + +## Creating additional node groups + +By default, Constellation creates the node groups `control_plane_default` and `worker_default` for control-plane nodes and workers, respectively. +If you require additional control-plane or worker groups with different instance types, zone placements, or disk sizes, you can add additional node groups to the `constellation-conf.yml` file. +Each node group can be scaled individually. + +Consider the following example for AWS: + +```yaml +nodeGroups: + control_plane_default: + role: control-plane + instanceType: c6a.xlarge + stateDiskSizeGB: 30 + stateDiskType: gp3 + zone: eu-west-1c + initialCount: 3 + worker_default: + role: worker + instanceType: c6a.xlarge + stateDiskSizeGB: 30 + stateDiskType: gp3 + zone: eu-west-1c + initialCount: 2 + high_cpu: + role: worker + instanceType: c6a.24xlarge + stateDiskSizeGB: 128 + stateDiskType: gp3 + zone: eu-west-1c + initialCount: 1 +``` + +This configuration creates an additional node group `high_cpu` with a larger instance type and disk. + +You can use the field `zone` to specify what availability zone nodes of the group are placed in. +On Azure, this field is empty by default and nodes are automatically spread across availability zones. +STACKIT currently offers SEV-enabled CPUs in the `eu01-1`, `eu01-2`, and `eu01-3` zones. +Consult the documentation of your cloud provider for more information: + +* [AWS](https://aws.amazon.com/about-aws/global-infrastructure/regions_az/) +* [Azure](https://azure.microsoft.com/en-us/explore/global-infrastructure/availability-zones) +* [GCP](https://cloud.google.com/compute/docs/regions-zones) +* [STACKIT](https://docs.stackit.cloud/stackit/en/regions-and-availability-zones-75137212.html) + +## Choosing a Kubernetes version + +To learn which Kubernetes versions can be installed with your current CLI, you can run `constellation config kubernetes-versions`. +See also Constellation's [Kubernetes support policy](../architecture/versions.md#kubernetes-support-policy). + +## Creating an IAM configuration + +You can create an IAM configuration for your cluster automatically using the `constellation iam create` command. +If you already have a Constellation configuration file, you can add the `--update-config` flag to the command. This writes the needed IAM fields into your configuration. Furthermore, the flag updates the zone/region of the configuration if it hasn't been set yet. + + + + +You must be authenticated with the [AWS CLI](https://aws.amazon.com/en/cli/) in the shell session with a user that has the [required permissions for IAM creation](../getting-started/install.md#set-up-cloud-credentials). + +```bash +constellation iam create aws --zone=us-east-2a --prefix=constellTest +``` + +This command creates IAM configuration for the AWS zone `us-east-2a` using the prefix `constellTest` for all named resources being created. + +Constellation OS images are currently replicated to the following regions: + +* `eu-central-1` +* `eu-west-1` +* `eu-west-3` +* `us-east-2` +* `ap-south-1` + +If you require the OS image to be available in another region, [let us know](https://github.com/edgelesssys/constellation/issues/new?assignees=&labels=&template=feature_request.md&title=Support+new+AWS+image+region:+xx-xxxx-x). + +You can find a list of all [regions in AWS's documentation](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-regions-availability-zones.html#concepts-available-regions). + +Paste the output into the corresponding fields of the `constellation-conf.yaml` file. + + + + +You must be authenticated with the [Azure CLI](https://learn.microsoft.com/en-us/cli/azure/install-azure-cli) in the shell session with a user that has the [required permissions for IAM creation](../getting-started/install.md#set-up-cloud-credentials). + +```bash +constellation iam create azure --subscriptionID 00000000-0000-0000-0000-000000000000 --region=westus --resourceGroup=constellTest --servicePrincipal=spTest +``` + +This command creates IAM configuration on the Azure region `westus` creating a new resource group `constellTest` and a new service principal `spTest`. + +CVMs are available in several Azure regions. Constellation OS images are currently replicated to the following: + +* `germanywestcentral` +* `westus` +* `eastus` +* `northeurope` +* `westeurope` +* `southeastasia` + +If you require the OS image to be available in another region, [let us know](https://github.com/edgelesssys/constellation/issues/new?assignees=&labels=&template=feature_request.md&title=Support+new+Azure+image+region:+xx-xxxx-x). + +You can find a list of all [regions in Azure's documentation](https://azure.microsoft.com/en-us/global-infrastructure/services/?products=virtual-machines®ions=all). + +Paste the output into the corresponding fields of the `constellation-conf.yaml` file. + + + + +You must be authenticated with the [GCP CLI](https://cloud.google.com/sdk/gcloud) in the shell session with a user that has the [required permissions for IAM creation](../getting-started/install.md#set-up-cloud-credentials). + +```bash +constellation iam create gcp --projectID=yourproject-12345 --zone=europe-west3-a --prefix=constell-test +``` + +This command creates IAM configuration in the GCP project `yourproject-12345` on the GCP zone `europe-west3-a` creating a new service account `constell-test`. + +Note that only regions offering CVMs of the `C2D` or `N2D` series are supported. You can find a [list of all regions in Google's documentation](https://cloud.google.com/compute/docs/regions-zones#available), which you can filter by machine type `N2D`. + +Paste the output into the corresponding fields of the `constellation-conf.yaml` file. + + + + +STACKIT requires manual creation and configuration of service accounts. Look at the [first steps](../getting-started/first-steps.md) for more information. + + + + +
          +Alternatively, you can manually create the IAM configuration on your CSP. + +The following describes the configuration fields and how you obtain the required information or create the required resources. + + + + +* **region**: The name of your chosen AWS data center region, e.g., `us-east-2`. + + Constellation OS images are currently replicated to the following regions: + * `eu-central-1` + * `eu-west-1` + * `eu-west-3` + * `us-east-2` + * `ap-south-1` + + If you require the OS image to be available in another region, [let us know](https://github.com/edgelesssys/constellation/issues/new?assignees=&labels=&template=feature_request.md&title=Support+new+AWS+image+region:+xx-xxxx-x). + + You can find a list of all [regions in AWS's documentation](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-regions-availability-zones.html#concepts-available-regions). + +* **zone**: The name of your chosen AWS data center availability zone, e.g., `us-east-2a`. + + Learn more about [availability zones in AWS's documentation](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-regions-availability-zones.html#concepts-availability-zones). + +* **iamProfileControlPlane**: The name of an IAM instance profile attached to all control-plane nodes. + + You can create the resource with [Terraform](https://www.terraform.io/). For that, use the [provided Terraform script](https://github.com/edgelesssys/constellation/tree/release/v2.2/hack/terraform/aws/iam) to generate the necessary profile. The profile name will be provided as Terraform output value: `control_plane_instance_profile_name`. + + Alternatively, you can create the AWS profile with a tool of your choice. Use the JSON policy in [main.tf](https://github.com/edgelesssys/constellation/tree/release/v2.2/hack/terraform/aws/iam/main.tf) in the resource `aws_iam_policy.control_plane_policy`. + +* **iamProfileWorkerNodes**: The name of an IAM instance profile attached to all worker nodes. + + You can create the resource with [Terraform](https://www.terraform.io/). For that, use the [provided Terraform script](https://github.com/edgelesssys/constellation/tree/release/v2.2/hack/terraform/aws/iam) to generate the necessary profile. The profile name will be provided as Terraform output value: `worker_nodes_instance_profile_name`. + + Alternatively, you can create the AWS profile with a tool of your choice. Use the JSON policy in [main.tf](https://github.com/edgelesssys/constellation/tree/release/v2.2/hack/terraform/aws/iam/main.tf) in the resource `aws_iam_policy.worker_node_policy`. + + + + +* **subscription**: The UUID of your Azure subscription, e.g., `8b8bd01f-efd9-4113-9bd1-c82137c32da7`. + + You can view your subscription UUID via `az account show` and read the `id` field. For more information refer to [Azure's documentation](https://docs.microsoft.com/en-us/azure/azure-portal/get-subscription-tenant-id#find-your-azure-subscription). + +* **tenant**: The UUID of your Azure tenant, e.g., `3400e5a2-8fe2-492a-886c-38cb66170f25`. + + You can view your tenant UUID via `az account show` and read the `tenant` field. For more information refer to [Azure's documentation](https://docs.microsoft.com/en-us/azure/azure-portal/get-subscription-tenant-id#find-your-azure-ad-tenant). + +* **location**: The Azure datacenter location you want to deploy your cluster in, e.g., `westus`. + + CVMs are available in several Azure regions. Constellation OS images are currently replicated to the following: + + * `germanywestcentral` + * `westus` + * `eastus` + * `northeurope` + * `westeurope` + * `southeastasia` + + If you require the OS image to be available in another region, [let us know](https://github.com/edgelesssys/constellation/issues/new?assignees=&labels=&template=feature_request.md&title=Support+new+Azure+image+region:+xx-xxxx-x). + + You can find a list of all [regions in Azure's documentation](https://azure.microsoft.com/en-us/global-infrastructure/services/?products=virtual-machines®ions=all). + +* **resourceGroup**: [Create a new resource group in Azure](https://learn.microsoft.com/azure/azure-resource-manager/management/manage-resource-groups-portal) for your Constellation cluster. Set this configuration field to the name of the created resource group. + +* **userAssignedIdentity**: [Create a new managed identity in Azure](https://learn.microsoft.com/azure/active-directory/managed-identities-azure-resources/how-manage-user-assigned-managed-identities). You should create the identity in a different resource group as all resources within the cluster resource group will be deleted on cluster termination. + + Add three role assignments to the identity: `Owner`, `Virtual Machine Contributor`, and `Application Insights Component Contributor`. The `scope` of all three should refer to the previously created cluster resource group. + + Set the configuration value to the full ID of the created identity, e.g., `/subscriptions/8b8bd01f-efd9-4113-9bd1-c82137c32da7/resourcegroups/constellation-identity/providers/Microsoft.ManagedIdentity/userAssignedIdentities/constellation-identity`. You can get it by opening the `JSON View` from the `Overview` section of the identity. + + The user-assigned identity is used by instances of the cluster to access other cloud resources. + For more information about managed identities refer to [Azure's documentation](https://docs.microsoft.com/en-us/azure/active-directory/managed-identities-azure-resources/how-manage-user-assigned-managed-identities). + + + + +* **project**: The ID of your GCP project, e.g., `constellation-129857`. + + You can find it on the [welcome screen of your GCP project](https://console.cloud.google.com/welcome). For more information refer to [Google's documentation](https://support.google.com/googleapi/answer/7014113). + +* **region**: The GCP region you want to deploy your cluster in, e.g., `us-central1`. + + You can find a [list of all regions in Google's documentation](https://cloud.google.com/compute/docs/regions-zones#available). + +* **zone**: The GCP zone you want to deploy your cluster in, e.g., `us-central1-a`. + + You can find a [list of all zones in Google's documentation](https://cloud.google.com/compute/docs/regions-zones#available). + +* **serviceAccountKeyPath**: To configure this, you need to create a GCP [service account](https://cloud.google.com/iam/docs/service-accounts) with the following permissions: + + * `Compute Instance Admin (v1) (roles/compute.instanceAdmin.v1)` + * `Compute Network Admin (roles/compute.networkAdmin)` + * `Compute Security Admin (roles/compute.securityAdmin)` + * `Compute Storage Admin (roles/compute.storageAdmin)` + * `Service Account User (roles/iam.serviceAccountUser)` + + Afterward, create and download a new JSON key for this service account. Place the downloaded file in your Constellation workspace, and set the config parameter to the filename, e.g., `constellation-129857-15343dba46cb.json`. + + + + +STACKIT requires manual creation and configuration of service accounts. Look at the [first steps](../getting-started/first-steps.md) for more information. + + + +
          + +Now that you've configured your CSP, you can [create your cluster](./create.md). + +## Deleting an IAM configuration + +You can keep a created IAM configuration and reuse it for new clusters. Alternatively, you can also delete it if you don't want to use it anymore. + +Delete the IAM configuration by executing the following command in the same directory where you executed `constellation iam create` (the directory that contains [`constellation-iam-terraform`](../reference/terraform.md) as a subdirectory): + +```bash +constellation iam destroy +``` + +:::caution +For Azure, deleting the IAM configuration by executing `constellation iam destroy` will delete the whole resource group created by `constellation iam create`. +This also includes any additional resources in the resource group that weren't created by Constellation. +::: diff --git a/docs/versioned_docs/version-2.23/workflows/create.md b/docs/versioned_docs/version-2.23/workflows/create.md new file mode 100644 index 000000000..6074ebb16 --- /dev/null +++ b/docs/versioned_docs/version-2.23/workflows/create.md @@ -0,0 +1,93 @@ +# Create your cluster + +:::info +This recording presents the essence of this page. It's recommended to read it in full for the motivation and all details. +::: + + + +--- + +Creating your cluster happens through multiple phases. +The most significant ones are: + +1. Creating the necessary resources in your cloud environment +2. Bootstrapping the Constellation cluster and setting up a connection +3. Installing the necessary Kubernetes components + +`constellation apply` handles all this in a single command. +You can use the `--skip-phases` flag to skip specific phases of the process. +For example, if you created the infrastructure manually, you can skip the cloud resource creation phase. + +See the [architecture](../architecture/orchestration.md) section for details on the inner workings of this process. + +:::tip +If you don't have a cloud subscription, you can also set up a [local Constellation cluster using virtualization](../getting-started/first-steps-local.md) for testing. +::: + +Before you create the cluster, make sure to have a [valid configuration file](./config.md). + + + + +```bash +constellation apply +``` + +`apply` stores the state of your cluster's cloud resources in a [`constellation-terraform`](../architecture/orchestration.md#cluster-creation-process) directory in your workspace. + + + + +Self-managed infrastructure allows for more flexibility in the setup, by separating the infrastructure setup from the Constellation cluster management. +This provides flexibility in DevOps and can meet potential regulatory requirements. +It's recommended to use Terraform for infrastructure management, but you can use any tool of your choice. + +:::info + + When using Terraform, you can use the [Constellation Terraform provider](./terraform-provider.md) to manage the entire Constellation cluster lifecycle. + +::: + +You can refer to the Terraform files for the selected CSP from the [Constellation GitHub repository](https://github.com/edgelesssys/constellation/tree/main/terraform/infrastructure) for a minimum Constellation cluster configuration. From this base, you can now add, edit, or substitute resources per your own requirements with the infrastructure +management tooling of your choice. You need to keep the essential functionality of the base configuration in order for your cluster to function correctly. + + + +:::info + + On Azure, a manual update to the MAA provider's policy is necessary. + You can apply the update with the following command after creating the infrastructure, with `` being the URL of the MAA provider (i.e., `$(terraform output attestation_url | jq -r)`, when using the minimal Terraform configuration). + + ```bash + constellation maa-patch + ``` + +::: + + + +Make sure all necessary resources are created, e.g., through checking your CSP's portal and retrieve the necessary values, aligned with the outputs (specified in `outputs.tf`) of the base configuration. + +Fill these outputs into the corresponding fields of the `Infrastructure` block inside the `constellation-state.yaml` file. For example, fill the IP or DNS name your cluster can be reached at into the `.Infrastructure.ClusterEndpoint` field. + +With the required cloud resources set up, continue with initializing your cluster. + +```bash +constellation apply --skip-phases=infrastructure +``` + + + + +Finally, configure `kubectl` for your cluster: + +```bash +export KUBECONFIG="$PWD/constellation-admin.conf" +``` + +🏁 That's it. You've successfully created a Constellation cluster. + +### Troubleshooting + +In case `apply` fails, the CLI collects logs from the bootstrapping instance and stores them inside `constellation-cluster.log`. diff --git a/docs/versioned_docs/version-2.23/workflows/lb.md b/docs/versioned_docs/version-2.23/workflows/lb.md new file mode 100644 index 000000000..868e61076 --- /dev/null +++ b/docs/versioned_docs/version-2.23/workflows/lb.md @@ -0,0 +1,28 @@ +# Expose a service + +Constellation integrates the native load balancers of each CSP. Therefore, to expose a service simply [create a service of type `LoadBalancer`](https://kubernetes.io/docs/concepts/services-networking/service/#loadbalancer). + +## Internet-facing LB service on AWS + +To expose your application service externally you might want to use a Kubernetes Service of type `LoadBalancer`. On AWS, load-balancing is achieved through the [AWS Load Balancer Controller](https://kubernetes-sigs.github.io/aws-load-balancer-controller) as in the managed EKS. + +Since recent versions, the controller deploy an internal LB by default requiring to set an annotation `service.beta.kubernetes.io/aws-load-balancer-scheme: internet-facing` to have an internet-facing LB. For more details, see the [official docs](https://kubernetes-sigs.github.io/aws-load-balancer-controller/v2.7/guide/service/nlb/). + +For general information on LB with AWS see [Network load balancing on Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/network-load-balancing.html). + +:::caution +Before terminating the cluster, all LB backed services should be deleted, so that the controller can cleanup the related resources. +::: + +## Ingress on AWS + +The AWS Load Balancer Controller also provisions `Ingress` resources of class `alb`. +AWS Application Load Balancers (ALBs) can be configured with a [`target-type`](https://kubernetes-sigs.github.io/aws-load-balancer-controller/v2.7/guide/ingress/annotations/#target-type). +The target type `ip` requires using the EKS container network solution, which makes it incompatible with Constellation. +If a service can be exposed on a `NodePort`, the target type `instance` can be used. + +See [Application load balancing on Amazon EKS](https://docs.aws.amazon.com/eks/latest/userguide/alb-ingress.html) for more information. + +:::caution +Ingress handlers backed by AWS ALBs reside outside the Constellation cluster, so they shouldn't be handling sensitive traffic! +::: diff --git a/docs/versioned_docs/version-2.23/workflows/recovery.md b/docs/versioned_docs/version-2.23/workflows/recovery.md new file mode 100644 index 000000000..592ae247b --- /dev/null +++ b/docs/versioned_docs/version-2.23/workflows/recovery.md @@ -0,0 +1,179 @@ +# Recover your cluster + +Recovery of a Constellation cluster means getting it back into a healthy state after too many concurrent node failures in the control plane. +Reasons for an unhealthy cluster can vary from a power outage, or planned reboot, to migration of nodes and regions. +Recovery events are rare, because Constellation is built for high availability and automatically and securely replaces failed nodes. When a node is replaced, Constellation's control plane first verifies the new node before it sends the node the cryptographic keys required to decrypt its [state disk](../architecture/images.md#state-disk). + +Constellation provides a recovery mechanism for cases where the control plane has failed and is unable to replace nodes. +The `constellation recover` command securely connects to all nodes in need of recovery using [attested TLS](../architecture/attestation.md#attested-tls-atls) and provides them with the keys to decrypt their state disks and continue booting. + +## Identify unhealthy clusters + +The first step to recovery is identifying when a cluster becomes unhealthy. +Usually, this can be first observed when the Kubernetes API server becomes unresponsive. + +You can check the health status of the nodes via the cloud service provider (CSP). +Constellation provides logging information on the boot process and status via serial console output. +In the following, you'll find detailed descriptions for identifying clusters stuck in recovery for each CSP. + + + + +First, open the AWS console to view all Auto Scaling Groups (ASGs) in the region of your cluster. Select the ASG of the control plane `--control-plane` and check that enough members are in a *Running* state. + +Second, check the boot logs of these *Instances*. In the ASG's *Instance management* view, select each desired instance. In the upper right corner, select **Action > Monitor and troubleshoot > Get system log**. + +In the serial console output, search for `Waiting for decryption key`. +Similar output to the following means your node was restarted and needs to decrypt the [state disk](../architecture/images.md#state-disk): + +```json +{"level":"INFO","ts":"2022-09-08T10:21:53Z","caller":"cmd/main.go:55","msg":"Starting disk-mapper","version":"2.0.0","cloudProvider":"gcp"} +{"level":"INFO","ts":"2022-09-08T10:21:53Z","logger":"setupManager","caller":"setup/setup.go:72","msg":"Preparing existing state disk"} +{"level":"INFO","ts":"2022-09-08T10:21:53Z","logger":"rejoinClient","caller":"rejoinclient/client.go:65","msg":"Starting RejoinClient"} +{"level":"INFO","ts":"2022-09-08T10:21:53Z","logger":"recoveryServer","caller":"recoveryserver/server.go:59","msg":"Starting RecoveryServer"} +``` + +The node will then try to connect to the [*JoinService*](../architecture/microservices.md#joinservice) and obtain the decryption key. +If this fails due to an unhealthy control plane, you will see log messages similar to the following: + +```json +{"level":"INFO","ts":"2022-09-08T10:21:53Z","logger":"rejoinClient","caller":"rejoinclient/client.go:77","msg":"Received list with JoinService endpoints","endpoints":["192.168.178.4:30090","192.168.178.2:30090"]} +{"level":"INFO","ts":"2022-09-08T10:21:53Z","logger":"rejoinClient","caller":"rejoinclient/client.go:96","msg":"Requesting rejoin ticket","endpoint":"192.168.178.4:30090"} +{"level":"WARN","ts":"2022-09-08T10:21:53Z","logger":"rejoinClient","caller":"rejoinclient/client.go:101","msg":"Failed to rejoin on endpoint","error":"rpc error: code = Unavailable desc = connection error: desc = \"transport: Error while dialing dial tcp 192.168.178.4:30090: connect: connection refused\"","endpoint":"192.168.178.4:30090"} +{"level":"INFO","ts":"2022-09-08T10:21:53Z","logger":"rejoinClient","caller":"rejoinclient/client.go:96","msg":"Requesting rejoin ticket","endpoint":"192.168.178.2:30090"} +{"level":"WARN","ts":"2022-09-08T10:22:13Z","logger":"rejoinClient","caller":"rejoinclient/client.go:101","msg":"Failed to rejoin on endpoint","error":"rpc error: code = Unavailable desc = connection error: desc = \"transport: Error while dialing dial tcp 192.168.178.2:30090: i/o timeout\"","endpoint":"192.168.178.2:30090"} +{"level":"ERROR","ts":"2022-09-08T10:22:13Z","logger":"rejoinClient","caller":"rejoinclient/client.go:110","msg":"Failed to rejoin on all endpoints"} +``` + +This means that you have to recover the node manually. + + + + +In the Azure portal, find the cluster's resource group. +Inside the resource group, open the control plane *Virtual machine scale set* `constellation-scale-set-controlplanes-`. +On the left, go to **Settings** > **Instances** and check that enough members are in a *Running* state. + +Second, check the boot logs of these *Instances*. +In the scale set's *Instances* view, open the details page of the desired instance. +On the left, go to **Support + troubleshooting** > **Serial console**. + +In the serial console output, search for `Waiting for decryption key`. +Similar output to the following means your node was restarted and needs to decrypt the [state disk](../architecture/images.md#state-disk): + +```json +{"level":"INFO","ts":"2022-09-08T09:56:41Z","caller":"cmd/main.go:55","msg":"Starting disk-mapper","version":"2.0.0","cloudProvider":"azure"} +{"level":"INFO","ts":"2022-09-08T09:56:43Z","logger":"setupManager","caller":"setup/setup.go:72","msg":"Preparing existing state disk"} +{"level":"INFO","ts":"2022-09-08T09:56:43Z","logger":"recoveryServer","caller":"recoveryserver/server.go:59","msg":"Starting RecoveryServer"} +{"level":"INFO","ts":"2022-09-08T09:56:43Z","logger":"rejoinClient","caller":"rejoinclient/client.go:65","msg":"Starting RejoinClient"} +``` + +The node will then try to connect to the [*JoinService*](../architecture/microservices.md#joinservice) and obtain the decryption key. +If this fails due to an unhealthy control plane, you will see log messages similar to the following: + +```json +{"level":"INFO","ts":"2022-09-08T09:56:43Z","logger":"rejoinClient","caller":"rejoinclient/client.go:77","msg":"Received list with JoinService endpoints","endpoints":["10.9.0.5:30090","10.9.0.6:30090"]} +{"level":"INFO","ts":"2022-09-08T09:56:43Z","logger":"rejoinClient","caller":"rejoinclient/client.go:96","msg":"Requesting rejoin ticket","endpoint":"10.9.0.5:30090"} +{"level":"WARN","ts":"2022-09-08T09:57:03Z","logger":"rejoinClient","caller":"rejoinclient/client.go:101","msg":"Failed to rejoin on endpoint","error":"rpc error: code = Unavailable desc = connection error: desc = \"transport: Error while dialing dial tcp 10.9.0.5:30090: i/o timeout\"","endpoint":"10.9.0.5:30090"} +{"level":"INFO","ts":"2022-09-08T09:57:03Z","logger":"rejoinClient","caller":"rejoinclient/client.go:96","msg":"Requesting rejoin ticket","endpoint":"10.9.0.6:30090"} +{"level":"WARN","ts":"2022-09-08T09:57:23Z","logger":"rejoinClient","caller":"rejoinclient/client.go:101","msg":"Failed to rejoin on endpoint","error":"rpc error: code = Unavailable desc = connection error: desc = \"transport: Error while dialing dial tcp 10.9.0.6:30090: i/o timeout\"","endpoint":"10.9.0.6:30090"} +{"level":"ERROR","ts":"2022-09-08T09:57:23Z","logger":"rejoinClient","caller":"rejoinclient/client.go:110","msg":"Failed to rejoin on all endpoints"} +``` + +This means that you have to recover the node manually. + + + + +First, check that the control plane *Instance Group* has enough members in a *Ready* state. +In the GCP Console, go to **Instance Groups** and check the group for the cluster's control plane `-control-plane-`. + +Second, check the status of the *VM Instances*. +Go to **VM Instances** and open the details of the desired instance. +Check the serial console output of that instance by opening the **Logs** > **Serial port 1 (console)** page: + +![GCP portal serial console link](../_media/recovery-gcp-serial-console-link.png) + +In the serial console output, search for `Waiting for decryption key`. +Similar output to the following means your node was restarted and needs to decrypt the [state disk](../architecture/images.md#state-disk): + +```json +{"level":"INFO","ts":"2022-09-08T10:21:53Z","caller":"cmd/main.go:55","msg":"Starting disk-mapper","version":"2.0.0","cloudProvider":"gcp"} +{"level":"INFO","ts":"2022-09-08T10:21:53Z","logger":"setupManager","caller":"setup/setup.go:72","msg":"Preparing existing state disk"} +{"level":"INFO","ts":"2022-09-08T10:21:53Z","logger":"rejoinClient","caller":"rejoinclient/client.go:65","msg":"Starting RejoinClient"} +{"level":"INFO","ts":"2022-09-08T10:21:53Z","logger":"recoveryServer","caller":"recoveryserver/server.go:59","msg":"Starting RecoveryServer"} +``` + +The node will then try to connect to the [*JoinService*](../architecture/microservices.md#joinservice) and obtain the decryption key. +If this fails due to an unhealthy control plane, you will see log messages similar to the following: + +```json +{"level":"INFO","ts":"2022-09-08T10:21:53Z","logger":"rejoinClient","caller":"rejoinclient/client.go:77","msg":"Received list with JoinService endpoints","endpoints":["192.168.178.4:30090","192.168.178.2:30090"]} +{"level":"INFO","ts":"2022-09-08T10:21:53Z","logger":"rejoinClient","caller":"rejoinclient/client.go:96","msg":"Requesting rejoin ticket","endpoint":"192.168.178.4:30090"} +{"level":"WARN","ts":"2022-09-08T10:21:53Z","logger":"rejoinClient","caller":"rejoinclient/client.go:101","msg":"Failed to rejoin on endpoint","error":"rpc error: code = Unavailable desc = connection error: desc = \"transport: Error while dialing dial tcp 192.168.178.4:30090: connect: connection refused\"","endpoint":"192.168.178.4:30090"} +{"level":"INFO","ts":"2022-09-08T10:21:53Z","logger":"rejoinClient","caller":"rejoinclient/client.go:96","msg":"Requesting rejoin ticket","endpoint":"192.168.178.2:30090"} +{"level":"WARN","ts":"2022-09-08T10:22:13Z","logger":"rejoinClient","caller":"rejoinclient/client.go:101","msg":"Failed to rejoin on endpoint","error":"rpc error: code = Unavailable desc = connection error: desc = \"transport: Error while dialing dial tcp 192.168.178.2:30090: i/o timeout\"","endpoint":"192.168.178.2:30090"} +{"level":"ERROR","ts":"2022-09-08T10:22:13Z","logger":"rejoinClient","caller":"rejoinclient/client.go:110","msg":"Failed to rejoin on all endpoints"} +``` + +This means that you have to recover the node manually. + + + + +First, open the STACKIT portal to view all servers in your project. Select individual control plane nodes `--control-plane--` and check that enough members are in a *Running* state. + +Second, check the boot logs of these servers. Click on a server name and select **Overview**. Find the **Machine Setup** section and click on **Web console** > **Open console**. + +In the serial console output, search for `Waiting for decryption key`. +Similar output to the following means your node was restarted and needs to decrypt the [state disk](../architecture/images.md#state-disk): + +```json +{"level":"INFO","ts":"2022-09-08T10:21:53Z","caller":"cmd/main.go:55","msg":"Starting disk-mapper","version":"2.0.0","cloudProvider":"gcp"} +{"level":"INFO","ts":"2022-09-08T10:21:53Z","logger":"setupManager","caller":"setup/setup.go:72","msg":"Preparing existing state disk"} +{"level":"INFO","ts":"2022-09-08T10:21:53Z","logger":"rejoinClient","caller":"rejoinclient/client.go:65","msg":"Starting RejoinClient"} +{"level":"INFO","ts":"2022-09-08T10:21:53Z","logger":"recoveryServer","caller":"recoveryserver/server.go:59","msg":"Starting RecoveryServer"} +``` + +The node will then try to connect to the [*JoinService*](../architecture/microservices.md#joinservice) and obtain the decryption key. +If this fails due to an unhealthy control plane, you will see log messages similar to the following: + +```json +{"level":"INFO","ts":"2022-09-08T10:21:53Z","logger":"rejoinClient","caller":"rejoinclient/client.go:77","msg":"Received list with JoinService endpoints","endpoints":["192.168.178.4:30090","192.168.178.2:30090"]} +{"level":"INFO","ts":"2022-09-08T10:21:53Z","logger":"rejoinClient","caller":"rejoinclient/client.go:96","msg":"Requesting rejoin ticket","endpoint":"192.168.178.4:30090"} +{"level":"WARN","ts":"2022-09-08T10:21:53Z","logger":"rejoinClient","caller":"rejoinclient/client.go:101","msg":"Failed to rejoin on endpoint","error":"rpc error: code = Unavailable desc = connection error: desc = \"transport: Error while dialing dial tcp 192.168.178.4:30090: connect: connection refused\"","endpoint":"192.168.178.4:30090"} +{"level":"INFO","ts":"2022-09-08T10:21:53Z","logger":"rejoinClient","caller":"rejoinclient/client.go:96","msg":"Requesting rejoin ticket","endpoint":"192.168.178.2:30090"} +{"level":"WARN","ts":"2022-09-08T10:22:13Z","logger":"rejoinClient","caller":"rejoinclient/client.go:101","msg":"Failed to rejoin on endpoint","error":"rpc error: code = Unavailable desc = connection error: desc = \"transport: Error while dialing dial tcp 192.168.178.2:30090: i/o timeout\"","endpoint":"192.168.178.2:30090"} +{"level":"ERROR","ts":"2022-09-08T10:22:13Z","logger":"rejoinClient","caller":"rejoinclient/client.go:110","msg":"Failed to rejoin on all endpoints"} +``` + +This means that you have to recover the node manually. + + + + +## Recover a cluster + +Recovering a cluster requires the following parameters: + +* The `constellation-state.yaml` file in your working directory or the cluster's endpoint +* The master secret of the cluster + +A cluster can be recovered like this: + +```bash +$ constellation recover +Pushed recovery key. +Pushed recovery key. +Pushed recovery key. +Recovered 3 control-plane nodes. +``` + +In the serial console output of the node you'll see a similar output to the following: + +```json +{"level":"INFO","ts":"2022-09-08T10:26:59Z","logger":"recoveryServer","caller":"recoveryserver/server.go:93","msg":"Received recover call"} +{"level":"INFO","ts":"2022-09-08T10:26:59Z","logger":"recoveryServer","caller":"recoveryserver/server.go:125","msg":"Received state disk key and measurement secret, shutting down server"} +{"level":"INFO","ts":"2022-09-08T10:26:59Z","logger":"recoveryServer.gRPC","caller":"zap/server_interceptors.go:61","msg":"finished streaming call with code OK","grpc.start_time":"2022-09-08T10:26:59Z","system":"grpc","span.kind":"server","grpc.service":"recoverproto.API","grpc.method":"Recover","peer.address":"192.0.2.3:41752","grpc.code":"OK","grpc.time_ms":15.701} +{"level":"INFO","ts":"2022-09-08T10:27:13Z","logger":"rejoinClient","caller":"rejoinclient/client.go:87","msg":"RejoinClient stopped"} +``` diff --git a/docs/versioned_docs/version-2.23/workflows/reproducible-builds.md b/docs/versioned_docs/version-2.23/workflows/reproducible-builds.md new file mode 100644 index 000000000..e3bc46095 --- /dev/null +++ b/docs/versioned_docs/version-2.23/workflows/reproducible-builds.md @@ -0,0 +1,63 @@ +# Reproduce released artifacts + +Constellation has first-class support for [reproducible builds](https://reproducible-builds.org). +Reproducing the released artifacts is an alternative to [signature verification](verify-cli.md) that doesn't require trusting Edgeless Systems' release process. +The following sections describe how to rebuild an artifact and how Constellation ensures that the rebuild reproduces the artifacts bit-by-bit. + +## Build environment prerequisites + +The build systems used by Constellation - [Bazel](https://bazel.build/) and [Nix](https://nixos.org) - are designed for deterministic, reproducible builds. +These two dependencies should be the only prerequisites for a successful build. +However, it can't be ruled out completely that peculiarities of the host affect the build result. +Thus, we recommend the following host setup for best results: + +1. A Linux operating system not older than v5.4. +2. The GNU C library not older than v2.31 (avoid `musl`). +3. GNU `coreutils` not older than v8.30 (avoid `busybox`). +4. An `ext4` filesystem for building. +5. AppArmor turned off. + +This is given, for example, on an Ubuntu 22.04 system, which is also used for reproducibility tests. + +:::note + +To avoid any backwards-compatibility issues, the host software versions should also not be much newer than the Constellation release. + +::: + +## Run the build + +The following instructions outline qualitatively how to reproduce a build. +Constellation implements these instructions in the [Reproducible Builds workflow](https://github.com/edgelesssys/constellation/actions/workflows/reproducible-builds.yml), which continuously tests for reproducibility. +The workflow is a good place to look up specific version numbers and build steps. + +1. Check out the Constellation repository at the tag corresponding to the release. + + ```bash + git clone https://github.com/edgelesssys/constellation.git + cd constellation + git checkout v2.20.0 + ``` + +2. [Install the Bazel release](https://bazel.build/install) specified in `.bazelversion`. +3. [Install Nix](https://nixos.org/download/) (any recent version should do). +4. Run the build with `bazel build $target` for one of the following targets of interest: + + ```data + //cli:cli_enterprise_darwin_amd64 + //cli:cli_enterprise_darwin_arm64 + //cli:cli_enterprise_linux_amd64 + //cli:cli_enterprise_linux_arm64 + //cli:cli_enterprise_windows_amd64 + ``` + +5. Compare the build result with the downloaded release artifact. + + + +## Feedback + +Reproduction failures often indicate a bug in the build system or in the build definitions. +Therefore, we're interested in any reproducibility issues you might encounter. +[Start a bug report](https://github.com/edgelesssys/constellation/issues/new/choose) and describe the details of your build environment. +Make sure to include your result binary or a [`diffoscope`](https://diffoscope.org/) report, if possible. diff --git a/docs/versioned_docs/version-2.23/workflows/s3proxy.md b/docs/versioned_docs/version-2.23/workflows/s3proxy.md new file mode 100644 index 000000000..121e8a461 --- /dev/null +++ b/docs/versioned_docs/version-2.23/workflows/s3proxy.md @@ -0,0 +1,58 @@ +# Install s3proxy + +Constellation includes a transparent client-side encryption proxy for [AWS S3](https://aws.amazon.com/de/s3/) and compatible stores. +s3proxy encrypts objects before sending them to S3 and automatically decrypts them on retrieval, without requiring changes to your application. +With s3proxy, you can use S3 for storage in a confidential way without having to trust the storage provider. + +## Limitations + +Currently, s3proxy has the following limitations: +- Only `PutObject` and `GetObject` requests are encrypted/decrypted by s3proxy. +By default, s3proxy will block requests that may expose unencrypted data to S3 (e.g. UploadPart). +The `allow-multipart` flag disables request blocking for evaluation purposes. +- Using the [Range](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html#API_GetObject_RequestSyntax) header on `GetObject` is currently not supported and will result in an error. + +These limitations will be removed with future iterations of s3proxy. +If you want to use s3proxy but these limitations stop you from doing so, consider [opening an issue](https://github.com/edgelesssys/constellation/issues/new?assignees=&labels=&projects=&template=feature_request.yml). + +## Deployment + +You can add the s3proxy to your Constellation cluster as follows: +1. Add the Edgeless Systems chart repository: + ```bash + helm repo add edgeless https://helm.edgeless.systems/stable + helm repo update + ``` +2. Set ACCESS_KEY and ACCESS_SECRET to valid credentials you want s3proxy to use to interact with S3. +3. Deploy s3proxy: + ```bash + helm install s3proxy edgeless/s3proxy --set awsAccessKeyID="$ACCESS_KEY" --set awsSecretAccessKey="$ACCESS_SECRET" + ``` + +If you want to run a demo application, check out the [Filestash with s3proxy](../getting-started/examples/filestash-s3proxy.md) example. + + +## Technical details + +### Encryption + +s3proxy relies on Google's [Tink Cryptographic Library](https://developers.google.com/tink) to implement cryptographic operations securely. +The used cryptographic primitives are [NIST SP 800 38f](https://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-38F.pdf) for key wrapping and [AES](https://en.wikipedia.org/wiki/Advanced_Encryption_Standard)-[GCM](https://en.wikipedia.org/wiki/Block_cipher_mode_of_operation#Galois/counter_(GCM)) with 256 bit keys for data encryption. + +s3proxy uses [envelope encryption](https://cloud.google.com/kms/docs/envelope-encryption) to encrypt objects. +This means s3proxy uses a key encryption key (KEK) issued by the [KeyService](../architecture/microservices.md#keyservice) to encrypt data encryption keys (DEKs). +Each S3 object is encrypted with its own DEK. +The encrypted DEK is then saved as metadata of the encrypted object. +This enables key rotation of the KEK without re-encrypting the data in S3. +The approach also allows access to objects from different locations, as long as each location has access to the KEK. + +### Traffic interception + +To use s3proxy, you have to redirect your outbound S3 traffic to s3proxy. +This can either be done by modifying your client application or by changing the deployment of your application. + +The necessary deployment modifications are to add DNS redirection and a trusted TLS certificate to the client's trust store. +DNS redirection can be defined for each pod, allowing you to use s3proxy for one application without changing other applications in the same cluster. +Adding a trusted TLS certificate is necessary as clients communicate with s3proxy via HTTPS. +To have your client application trust s3proxy's TLS certificate, the certificate has to be added to the client's certificate trust store. +The [Filestash with s3proxy](../getting-started/examples/filestash-s3proxy.md) example shows how to do this. diff --git a/docs/versioned_docs/version-2.23/workflows/sbom.md b/docs/versioned_docs/version-2.23/workflows/sbom.md new file mode 100644 index 000000000..6c1702dee --- /dev/null +++ b/docs/versioned_docs/version-2.23/workflows/sbom.md @@ -0,0 +1,93 @@ +# Consume software bill of materials (SBOMs) + + + +--- + +Constellation builds produce a [software bill of materials (SBOM)](https://www.ntia.gov/SBOM) for each generated [artifact](../architecture/microservices.md). +You can use SBOMs to make informed decisions about dependencies and vulnerabilities in a given application. Enterprises rely on SBOMs to maintain an inventory of used applications, which allows them to take data-driven approaches to managing risks related to vulnerabilities. + +SBOMs for Constellation are generated using [Syft](https://github.com/anchore/syft), signed using [Cosign](https://github.com/sigstore/cosign), and stored with the produced artifact. + +:::note +The public key for Edgeless Systems' long-term code-signing key is: + +``` +-----BEGIN PUBLIC KEY----- +MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEf8F1hpmwE+YCFXzjGtaQcrL6XZVT +JmEe5iSLvG1SyQSAew7WdMKF6o9t8e2TFuCkzlOhhlws2OHWbiFZnFWCFw== +-----END PUBLIC KEY----- +``` + +The public key is also available for download at [https://edgeless.systems/es.pub](https://edgeless.systems/es.pub) and in the Twitter profile [@EdgelessSystems](https://twitter.com/EdgelessSystems). + +Make sure the key is available in a file named `cosign.pub` to execute the following examples. +::: + +## Verify and download SBOMs + +The following sections detail how to work with each type of artifact to verify and extract the SBOM. + +### Constellation CLI + +The SBOM for Constellation CLI is made available on the [GitHub release page](https://github.com/edgelesssys/constellation/releases). The SBOM (`constellation.spdx.sbom`) and corresponding signature (`constellation.spdx.sbom.sig`) are valid for each Constellation CLI for a given version, regardless of architecture and operating system. + +```bash +curl -LO https://github.com/edgelesssys/constellation/releases/download/v2.2.0/constellation.spdx.sbom +curl -LO https://github.com/edgelesssys/constellation/releases/download/v2.2.0/constellation.spdx.sbom.sig +cosign verify-blob --key cosign.pub --signature constellation.spdx.sbom.sig constellation.spdx.sbom +``` + +### Container Images + +SBOMs for container images are [attached to the image using Cosign](https://docs.sigstore.dev/cosign/signing/other_types/#sboms-software-bill-of-materials) and uploaded to the same registry. + +As a consumer, use cosign to download and verify the SBOM: + +```bash +# Verify and download the attestation statement +cosign verify-attestation ghcr.io/edgelesssys/constellation/verification-service@v2.2.0 --type 'https://cyclonedx.org/bom' --key cosign.pub --output-file verification-service.att.json +# Extract SBOM from attestation statement +jq -r .payload verification-service.att.json | base64 -d > verification-service.cyclonedx.sbom +``` + +A successful verification should result in similar output: + +```shell-session +$ cosign verify-attestation ghcr.io/edgelesssys/constellation/verification-service@v2.2.0 --type 'https://cyclonedx.org/bom' --key cosign.pub --output-file verification-service.sbom + +Verification for ghcr.io/edgelesssys/constellation/verification-service@v2.2.0 -- +The following checks were performed on each of these signatures: + - The cosign claims were validated + - The signatures were verified against the specified public key +$ jq -r .payload verification-service.sbom | base64 -d > verification-service.cyclonedx.sbom +``` + +:::note + +This example considers only the `verification-service`. The same approach works for all containers in the [Constellation container registry](https://github.com/orgs/edgelesssys/packages?repo_name=constellation). + +::: + + + +## Vulnerability scanning + +You can use a plethora of tools to consume SBOMs. This section provides suggestions for tools that are popular and known to produce reliable results, but any tool that consumes [SPDX](https://spdx.dev/) or [CycloneDX](https://cyclonedx.org/) files should work. + +Syft is able to [convert between the two formats](https://github.com/anchore/syft#format-conversion-experimental) in case you require a specific type. + +### Grype + +[Grype](https://github.com/anchore/grype) is a CLI tool that lends itself well for integration into CI/CD systems or local developer machines. It's also able to consume the signed attestation statement directly and does the verification in one go. + +```bash +grype att:verification-service.sbom --key cosign.pub --add-cpes-if-none -q +``` + +### Dependency Track + +[Dependency Track](https://dependencytrack.org/) is one of the oldest and most mature solutions when it comes to managing software inventory and vulnerabilities. Once imported, it continuously scans SBOMs for new vulnerabilities. It supports the CycloneDX format and provides direct guidance on how to comply with [U.S. Executive Order 14028](https://docs.dependencytrack.org/usage/executive-order-14028/). diff --git a/docs/versioned_docs/version-2.23/workflows/scale.md b/docs/versioned_docs/version-2.23/workflows/scale.md new file mode 100644 index 000000000..28f19e3f1 --- /dev/null +++ b/docs/versioned_docs/version-2.23/workflows/scale.md @@ -0,0 +1,122 @@ +# Scale your cluster + +Constellation provides all features of a Kubernetes cluster including scaling and autoscaling. + +## Worker node scaling + +### Autoscaling + +Constellation comes with autoscaling disabled by default. To enable autoscaling, find the scaling group of +worker nodes: + +```bash +kubectl get scalinggroups -o json | yq '.items | .[] | select(.spec.role == "Worker") | [{"name": .metadata.name, "nodeGoupName": .spec.nodeGroupName}]' +``` + +This will output a list of scaling groups with the corresponding cloud provider name (`name`) and the cloud provider agnostic name of the node group (`nodeGroupName`). + +Then, patch the `autoscaling` field of the scaling group resource with the desired `name` to `true`: + +```bash +# Replace with the name of the scaling group you want to enable autoscaling for +worker_group= +kubectl patch scalinggroups $worker_group --patch '{"spec":{"autoscaling": true}}' --type='merge' +kubectl get scalinggroup $worker_group -o jsonpath='{.spec}' | yq -P +``` + +The cluster autoscaler now automatically provisions additional worker nodes so that all pods have a place to run. +You can configure the minimum and maximum number of worker nodes in the scaling group by patching the `min` or +`max` fields of the scaling group resource: + +```bash +kubectl patch scalinggroups $worker_group --patch '{"spec":{"max": 5}}' --type='merge' +kubectl get scalinggroup $worker_group -o jsonpath='{.spec}' | yq -P +``` + +The cluster autoscaler will now never provision more than 5 worker nodes. + +If you want to see the autoscaling in action, try to add a deployment with a lot of replicas, like the +following Nginx deployment. The number of replicas needed to trigger the autoscaling depends on the size of +and count of your worker nodes. Wait for the rollout of the deployment to finish and compare the number of +worker nodes before and after the deployment: + +```bash +kubectl create deployment nginx --image=nginx --replicas 150 +kubectl -n kube-system get nodes +kubectl rollout status deployment nginx +kubectl -n kube-system get nodes +``` + +### Manual scaling + +Alternatively, you can manually scale your cluster up or down: + + + + +1. Go to Auto Scaling Groups and select the worker ASG to scale up. +2. Click **Edit** +3. Set the new (increased) **Desired capacity** and **Update**. + + + + +1. Find your Constellation resource group. +2. Select the `scale-set-workers`. +3. Go to **settings** and **scaling**. +4. Set the new **instance count** and **save**. + + + + +1. In Compute Engine go to [Instance Groups](https://console.cloud.google.com/compute/instanceGroups/). +2. **Edit** the **worker** instance group. +3. Set the new **number of instances** and **save**. + + + + +Dynamic cluster scaling isn't yet supported for STACKIT. +Support will be introduced in one of the upcoming releases. + + + + +## Control-plane node scaling + +Control-plane nodes can **only be scaled manually and only scaled up**! + +To increase the number of control-plane nodes, follow these steps: + + + + +1. Go to Auto Scaling Groups and select the control-plane ASG to scale up. +2. Click **Edit** +3. Set the new (increased) **Desired capacity** and **Update**. + + + + +1. Find your Constellation resource group. +2. Select the `scale-set-controlplanes`. +3. Go to **settings** and **scaling**. +4. Set the new (increased) **instance count** and **save**. + + + + +1. In Compute Engine go to [Instance Groups](https://console.cloud.google.com/compute/instanceGroups/). +2. **Edit** the **control-plane** instance group. +3. Set the new (increased) **number of instances** and **save**. + + + + +Dynamic cluster scaling isn't yet supported for STACKIT. +Support will be introduced in one of the upcoming releases. + + + + +If you scale down the number of control-planes nodes, the removed nodes won't be able to exit the `etcd` cluster correctly. This will endanger the quorum that's required to run a stable Kubernetes control plane. diff --git a/docs/versioned_docs/version-2.23/workflows/storage.md b/docs/versioned_docs/version-2.23/workflows/storage.md new file mode 100644 index 000000000..a5c52be90 --- /dev/null +++ b/docs/versioned_docs/version-2.23/workflows/storage.md @@ -0,0 +1,281 @@ +# Use persistent storage + +Persistent storage in Kubernetes requires cloud-specific configuration. +For abstraction of container storage, Kubernetes offers [volumes](https://kubernetes.io/docs/concepts/storage/volumes/), +allowing users to mount storage solutions directly into containers. +The [Container Storage Interface (CSI)](https://kubernetes-csi.github.io/docs/) is the standard interface for exposing arbitrary block and file storage systems into containers in Kubernetes. +Cloud service providers (CSPs) offer their own CSI-based solutions for cloud storage. + +## Confidential storage + +Most cloud storage solutions support encryption, such as [GCE Persistent Disks (PD)](https://cloud.google.com/kubernetes-engine/docs/how-to/using-cmek). +Constellation supports the available CSI-based storage options for Kubernetes engines in AWS, Azure, GCP, and STACKIT. +However, their encryption takes place in the storage backend and is managed by the CSP. +Thus, using the default CSI drivers for these storage types means trusting the CSP with your persistent data. + +To address this, Constellation provides CSI drivers for AWS EBS, Azure Disk, GCE PD, and OpenStack Cinder, offering [encryption on the node level](../architecture/keys.md#storage-encryption). They enable transparent encryption for persistent volumes without needing to trust the cloud backend. Plaintext data never leaves the confidential VM context, offering you confidential storage. + +For more details see [encrypted persistent storage](../architecture/encrypted-storage.md). + +## CSI drivers + +Constellation supports the following drivers, which offer node-level encryption and optional integrity protection. + + + + +**Constellation CSI driver for AWS Elastic Block Store** +Mount [Elastic Block Store](https://aws.amazon.com/ebs/) storage volumes into your Constellation cluster. +Follow the instructions on how to [install the Constellation CSI driver](#installation) or check out the [repository](https://github.com/edgelesssys/constellation-aws-ebs-csi-driver) for more information. + + + + +**Constellation CSI driver for Azure Disk**: +Mount Azure [Disk Storage](https://azure.microsoft.com/en-us/services/storage/disks/#overview) into your Constellation cluster. +See the instructions on how to [install the Constellation CSI driver](#installation) or check out the [repository](https://github.com/edgelesssys/constellation-azuredisk-csi-driver) for more information. +Since Azure Disks are mounted as `ReadWriteOnce`, they're only available to a single pod. + + + + +**Constellation CSI driver for GCP Persistent Disk**: +Mount [Persistent Disk](https://cloud.google.com/persistent-disk) block storage into your Constellation cluster. +Follow the instructions on how to [install the Constellation CSI driver](#installation) or check out the [repository](https://github.com/edgelesssys/constellation-gcp-compute-persistent-disk-csi-driver) for more information. + + + + +**Constellation CSI driver for STACKIT / OpenStack Cinder** +Mount [Cinder](https://docs.openstack.org/cinder/latest/) block storage volumes into your Constellation cluster. +Follow the instructions on how to [install the Constellation CSI driver](#installation) or check out the [repository](https://github.com/edgelesssys/constellation-cloud-provider-openstack) for more information. + + + + +Note that in case the options above aren't a suitable solution for you, Constellation is compatible with all other CSI-based storage options. For example, you can use [AWS EFS](https://docs.aws.amazon.com/en_en/eks/latest/userguide/efs-csi.html), [Azure Files](https://docs.microsoft.com/en-us/azure/storage/files/storage-files-introduction), or [GCP Filestore](https://cloud.google.com/filestore) with Constellation out of the box. Constellation is just not providing transparent encryption on the node level for these storage types yet. + +## Installation + +The Constellation CLI automatically installs Constellation's CSI driver for the selected CSP in your cluster. +If you don't need a CSI driver or wish to deploy your own, you can disable the automatic installation by setting `deployCSIDriver` to `false` in your Constellation config file. + + + + +AWS comes with two storage classes by default. + +* `encrypted-rwo` + * Uses [SSDs of `gp3` type](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-volume-types.html) + * ext-4 filesystem + * Encryption of all data written to disk +* `integrity-encrypted-rwo` + * Uses [SSDs of `gp3` type](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-volume-types.html) + * ext-4 filesystem + * Encryption of all data written to disk + * Integrity protection of data written to disk + +For more information on encryption algorithms and key sizes, refer to [cryptographic algorithms](../architecture/encrypted-storage.md#cryptographic-algorithms). + +:::info + +The default storage class is set to `encrypted-rwo` for performance reasons. +If you want integrity-protected storage, set the `storageClassName` parameter of your persistent volume claim to `integrity-encrypted-rwo`. + +Alternatively, you can create your own storage class with integrity protection enabled by adding `csi.storage.k8s.io/fstype: ext4-integrity` to the class `parameters`. +Or use another filesystem by specifying another file system type with the suffix `-integrity`, e.g., `csi.storage.k8s.io/fstype: xfs-integrity`. + +Note that volume expansion isn't supported for integrity-protected disks. + +::: + + + + +Azure comes with two storage classes by default. + +* `encrypted-rwo` + * Uses [Standard SSDs](https://learn.microsoft.com/en-us/azure/virtual-machines/disks-types#standard-ssds) + * ext-4 filesystem + * Encryption of all data written to disk +* `integrity-encrypted-rwo` + * Uses [Premium SSDs](https://learn.microsoft.com/en-us/azure/virtual-machines/disks-types#premium-ssds) + * ext-4 filesystem + * Encryption of all data written to disk + * Integrity protection of data written to disk + +For more information on encryption algorithms and key sizes, refer to [cryptographic algorithms](../architecture/encrypted-storage.md#cryptographic-algorithms). + +:::info + +The default storage class is set to `encrypted-rwo` for performance reasons. +If you want integrity-protected storage, set the `storageClassName` parameter of your persistent volume claim to `integrity-encrypted-rwo`. + +Alternatively, you can create your own storage class with integrity protection enabled by adding `csi.storage.k8s.io/fstype: ext4-integrity` to the class `parameters`. +Or use another filesystem by specifying another file system type with the suffix `-integrity`, e.g., `csi.storage.k8s.io/fstype: xfs-integrity`. + +Note that volume expansion isn't supported for integrity-protected disks. + +::: + + + + +GCP comes with two storage classes by default. + +* `encrypted-rwo` + * Uses [standard persistent disks](https://cloud.google.com/compute/docs/disks#pdspecs) + * ext-4 filesystem + * Encryption of all data written to disk +* `integrity-encrypted-rwo` + * Uses [performance (SSD) persistent disks](https://cloud.google.com/compute/docs/disks#pdspecs) + * ext-4 filesystem + * Encryption of all data written to disk + * Integrity protection of data written to disk + +For more information on encryption algorithms and key sizes, refer to [cryptographic algorithms](../architecture/encrypted-storage.md#cryptographic-algorithms). + +:::info + +The default storage class is set to `encrypted-rwo` for performance reasons. +If you want integrity-protected storage, set the `storageClassName` parameter of your persistent volume claim to `integrity-encrypted-rwo`. + +Alternatively, you can create your own storage class with integrity protection enabled by adding `csi.storage.k8s.io/fstype: ext4-integrity` to the class `parameters`. +Or use another filesystem by specifying another file system type with the suffix `-integrity`, e.g., `csi.storage.k8s.io/fstype: xfs-integrity`. + +Note that volume expansion isn't supported for integrity-protected disks. + +::: + + + + +STACKIT comes with two storage classes by default. + +* `encrypted-rwo` + * Uses [disks of `storage_premium_perf1` type](https://docs.stackit.cloud/stackit/en/service-plans-blockstorage-75137974.html) + * ext-4 filesystem + * Encryption of all data written to disk +* `integrity-encrypted-rwo` + * Uses [disks of `storage_premium_perf1` type](https://docs.stackit.cloud/stackit/en/service-plans-blockstorage-75137974.html) + * ext-4 filesystem + * Encryption of all data written to disk + * Integrity protection of data written to disk + +For more information on encryption algorithms and key sizes, refer to [cryptographic algorithms](../architecture/encrypted-storage.md#cryptographic-algorithms). + +:::info + +The default storage class is set to `encrypted-rwo` for performance reasons. +If you want integrity-protected storage, set the `storageClassName` parameter of your persistent volume claim to `integrity-encrypted-rwo`. + +Alternatively, you can create your own storage class with integrity protection enabled by adding `csi.storage.k8s.io/fstype: ext4-integrity` to the class `parameters`. +Or use another filesystem by specifying another file system type with the suffix `-integrity`, e.g., `csi.storage.k8s.io/fstype: xfs-integrity`. + +Note that volume expansion isn't supported for integrity-protected disks. + +::: + + + + +1. Create a [persistent volume](https://kubernetes.io/docs/concepts/storage/persistent-volumes/) + + A [persistent volume claim](https://kubernetes.io/docs/concepts/storage/persistent-volumes/#persistentvolumeclaims) is a request for storage with certain properties. + It can refer to a storage class. + The following creates a persistent volume claim, requesting 20 GB of storage via the `encrypted-rwo` storage class: + + ```bash + cat < + +--- + +You can terminate your cluster using the CLI. For this, you need the Terraform state directory named [`constellation-terraform`](../reference/terraform.md) in the current directory. + +:::danger + +All ephemeral storage and state of your cluster will be lost. Make sure any data is safely stored in persistent storage. Constellation can recreate your cluster and the associated encryption keys, but won't backup your application data automatically. + +::: + + + +Terminate the cluster by running: + +```bash +constellation terminate +``` + +Or without confirmation (e.g., for automation purposes): + +```bash +constellation terminate --yes +``` + +This deletes all resources created by Constellation in your cloud environment. +All local files created by the `apply` command are deleted as well, except for `constellation-mastersecret.json` and the configuration file. + +:::caution + +Termination can fail if additional resources have been created that depend on the ones managed by Constellation. In this case, you need to delete these additional +resources manually. Just run the `terminate` command again afterward to continue the termination process of the cluster. + +::: + + + +Terminate the cluster by running: + +```bash +terraform destroy +``` + +Delete all files that are no longer needed: + +```bash +rm constellation-state.yaml constellation-admin.conf +``` + +Only the `constellation-mastersecret.json` and the configuration file remain. + + + diff --git a/docs/versioned_docs/version-2.23/workflows/terraform-provider.md b/docs/versioned_docs/version-2.23/workflows/terraform-provider.md new file mode 100644 index 000000000..c7a795d3f --- /dev/null +++ b/docs/versioned_docs/version-2.23/workflows/terraform-provider.md @@ -0,0 +1,140 @@ +# Use the Terraform provider + +The Constellation Terraform provider allows to manage the full lifecycle of a Constellation cluster (namely creation, upgrades, and deletion) via Terraform. +The provider is available through the [Terraform registry](https://registry.terraform.io/providers/edgelesssys/constellation/latest) and is released in lock-step with Constellation releases. + +## Prerequisites + +- a Linux / Mac operating system (ARM64/AMD64) +- a Terraform installation of version `v1.4.4` or above + +## Quick setup + +This example shows how to set up a Constellation cluster with the reference IAM and infrastructure setup. This setup is also used when creating a Constellation cluster through the Constellation CLI. You can either consume the IAM / infrastructure modules through a remote source (recommended) or local files. The latter requires downloading the infrastructure and IAM modules for the corresponding CSP from `terraform-modules.zip` on the [Constellation release page](https://github.com/edgelesssys/constellation/releases/latest) and placing them in the Terraform workspace directory. + +1. Create a directory (workspace) for your Constellation cluster. + + ```bash + mkdir constellation-workspace + cd constellation-workspace + ``` + +2. Use one of the [example configurations for using the Constellation Terraform provider](https://github.com/edgelesssys/constellation/tree/main/terraform-provider-constellation/examples/full) or create a `main.tf` file and fill it with the resources you want to create. The [Constellation Terraform provider documentation](https://registry.terraform.io/providers/edgelesssys/constellation/latest) offers thorough documentation on the resources and their attributes. +3. Initialize and apply the Terraform configuration. + + + + Initialize the providers and apply the configuration. + + ```bash + terraform init + terraform apply + ``` + + Optionally, you can prefix the `terraform apply` command with `TF_LOG=INFO` to collect [Terraform logs](https://developer.hashicorp.com/terraform/internals/debugging) while applying the configuration. This may provide helpful output in debugging scenarios. + + + +:::info +On SEV-SNP, you need to manually patch the policy of the MAA provider before creating the Constellation cluster, as this feature isn't available in Azure's Terraform provider yet. The Constellation CLI provides a utility for patching, but you can also do it manually. + + ```bash + terraform init + terraform apply -target module.azure_iam # adjust resource path if not using the example configuration + terraform apply -target module.azure_infrastructure # adjust resource path if not using the example configuration + constellation maa-patch $(terraform output -raw maa_url) # adjust output path / input if not using the example configuration or manually patch the resource + terraform apply -target constellation_cluster.azure_example # adjust resource path if not using the example configuration + ``` + + Use the following policy if manually performing the patch. + + ``` + version= 1.0; + authorizationrules + { + [type=="x-ms-azurevm-default-securebootkeysvalidated", value==false] => deny(); + [type=="x-ms-azurevm-debuggersdisabled", value==false] => deny(); + // The line below was edited to use the MAA provider within Constellation. Do not edit manually. + //[type=="secureboot", value==false] => deny(); + [type=="x-ms-azurevm-signingdisabled", value==false] => deny(); + [type=="x-ms-azurevm-dbvalidated", value==false] => deny(); + [type=="x-ms-azurevm-dbxvalidated", value==false] => deny(); + => permit(); + }; + issuancerules + { + }; + ``` + +::: + + Initialize the providers and apply the configuration. + + ```bash + terraform init + terraform apply + ``` + + Optionally, you can prefix the `terraform apply` command with `TF_LOG=INFO` to collect [Terraform logs](https://developer.hashicorp.com/terraform/internals/debugging) while applying the configuration. This may provide helpful output in debugging scenarios. + + + + + Initialize the providers and apply the configuration. + + ```bash + terraform init + terraform apply + ``` + + Optionally, you can prefix the `terraform apply` command with `TF_LOG=INFO` to collect [Terraform logs](https://developer.hashicorp.com/terraform/internals/debugging) while applying the configuration. This may provide helpful output in debugging scenarios. + + + Initialize the providers and apply the configuration. + + ```bash + terraform init + terraform apply + ``` + + Optionally, you can prefix the `terraform apply` command with `TF_LOG=INFO` to collect [Terraform logs](https://developer.hashicorp.com/terraform/internals/debugging) while applying the configuration. This may provide helpful output in debugging scenarios. + + + +4. Connect to the cluster. + + ```bash + terraform output -raw kubeconfig > constellation-admin.conf + export KUBECONFIG=$(realpath constellation-admin.conf) + ``` + +## Bringing your own infrastructure + +Instead of using the example infrastructure used in the [quick setup](#quick-setup), you can also provide your own infrastructure. +If you need a starting point for a custom infrastructure setup, you can download the infrastructure / IAM Terraform modules for the respective CSP from the Constellation [GitHub releases](https://github.com/edgelesssys/constellation/releases). You can modify and extend the modules per your requirements, while keeping the basic functionality intact. +The module contains: + +- `{csp}`: cloud resources the cluster runs on +- `iam/{csp}`: IAM resources used within the cluster + +When upgrading your cluster, make sure to check the Constellation release notes for potential breaking changes in the reference infrastructure / IAM modules that need to be considered. + +## Cluster upgrades + +:::tip +Also see the [general documentation on cluster upgrades](./upgrade.md). +::: + +The steps for applying the upgrade are as follows: + +1. Update the version constraint of the Constellation Terraform provider in the `required_providers` block in your Terraform configuration. +2. If you explicitly set any of the version attributes of the provider's resources and data sources (e.g. `image_version` or `constellation_microservice_version`), make sure to update them too. Refer to Constellation's [version support policy](https://github.com/edgelesssys/constellation/blob/main/dev-docs/workflows/versions-support.md) for more information on how each Constellation version and its dependencies are supported. +3. Update the IAM / infrastructure configuration. + - For [remote addresses as module sources](https://developer.hashicorp.com/terraform/language/modules/sources#fetching-archives-over-http), update the version number inside the address of the `source` field of the infrastructure / IAM module to the target version. + - For [local paths as module sources](https://developer.hashicorp.com/terraform/language/modules/sources#local-paths) or when [providing your own infrastructure](#bringing-your-own-infrastructure), see the changes made in the reference modules since the upgrade's origin version and adjust your infrastructure / IAM configuration accordingly. +4. Upgrade the Terraform module and provider dependencies and apply the targeted configuration. + +```bash + terraform init -upgrade + terraform apply +``` diff --git a/docs/versioned_docs/version-2.23/workflows/troubleshooting.md b/docs/versioned_docs/version-2.23/workflows/troubleshooting.md new file mode 100644 index 000000000..903c829e0 --- /dev/null +++ b/docs/versioned_docs/version-2.23/workflows/troubleshooting.md @@ -0,0 +1,200 @@ +# Troubleshooting + +This section aids you in finding problems when working with Constellation. + +## Common issues + +### Issues with creating new clusters + +When you create a new cluster, you should always use the [latest release](https://github.com/edgelesssys/constellation/releases/latest). +If something doesn't work, check out the [known issues](https://github.com/edgelesssys/constellation/issues?q=is%3Aopen+is%3Aissue+label%3A%22known+issue%22). + +### Azure: Resource Providers can't be registered + +On Azure, you may receive the following error when running `apply` or `terminate` with limited IAM permissions: + +```shell-session +Error: Error ensuring Resource Providers are registered. + +Terraform automatically attempts to register the Resource Providers it supports to +ensure it's able to provision resources. + +If you don't have permission to register Resource Providers you may wish to use the +"skip_provider_registration" flag in the Provider block to disable this functionality. + +[...] +``` + +To continue, please ensure that the [required resource providers](../getting-started/install.md#required-permissions) have been registered in your subscription by your administrator. + +Afterward, set `ARM_SKIP_PROVIDER_REGISTRATION=true` as an environment variable and either run `apply` or `terminate` again. +For example: + +```bash +ARM_SKIP_PROVIDER_REGISTRATION=true constellation apply +``` + +Or alternatively, for `terminate`: + +```bash +ARM_SKIP_PROVIDER_REGISTRATION=true constellation terminate +``` + +### Azure: Can't update attestation policy + +On Azure, you may receive the following error when running `apply` from within an Azure environment, e.g., an Azure VM: + +```shell-session +An error occurred: patching policies: updating attestation policy: unexpected status code: 403 Forbidden +``` + +The problem occurs because the Azure SDK we use internally attempts to [authenticate towards the Azure API with the managed identity of your current environment instead of the Azure CLI token](https://pkg.go.dev/github.com/Azure/azure-sdk-for-go/sdk/azidentity#DefaultAzureCredential). + +We decided not to deviate from this behavior and comply with the ordering of credentials. + +A solution is to add the [required permissions](../getting-started/install.md#required-permissions) to the managed identity of your environment. For example, the managed identity of your Azure VM, instead of the account that you've authenticated with in the Azure CLI. + +If your setup requires a change in the ordering of credentials, please open an issue and explain your desired behavior. + + + +### Nodes fail to join with error `untrusted measurement value` + +This error indicates that a node's [attestation statement](../architecture/attestation.md) contains measurements that don't match the trusted values expected by the [JoinService](../architecture/microservices.md#joinservice). +This may for example happen if the cloud provider updates the VM's firmware such that it influences the [runtime measurements](../architecture/attestation.md#runtime-measurements) in an unforeseen way. +A failed upgrade due to an erroneous attestation config can also cause this error. +You can change the expected measurements to resolve the failure. + +:::caution + +Attestation and trusted measurements are crucial for the security of your cluster. +Be extra careful when manually changing these settings. +When in doubt, check if the encountered [issue is known](https://github.com/edgelesssys/constellation/issues?q=is%3Aopen+is%3Aissue+label%3A%22known+issue%22) or [contact support](https://github.com/edgelesssys/constellation#support). + +::: + +:::tip + +During an upgrade with modified attestation config, a backup of the current configuration is stored in the `join-config` config map in the `kube-system` namespace under the `attestationConfig_backup` key. To restore the old attestation config after a failed upgrade, replace the value of `attestationConfig` with the value from `attestationConfig_backup`: + +```bash +kubectl patch configmaps -n kube-system join-config -p "{\"data\":{\"attestationConfig\":\"$(kubectl get configmaps -n kube-system join-config -o "jsonpath={.data.attestationConfig_backup}")\"}}" +``` + +::: + +You can use the `apply` command to change measurements of a running cluster: + +1. Modify the `measurements` key in your local `constellation-conf.yaml` to the expected values. +2. Run `constellation apply`. + +Keep in mind that running `apply` also applies any version changes from your config to the cluster. + +You can run these commands to learn about the versions currently configured in the cluster: + +- Kubernetes API server version: `kubectl get nodeversion constellation-version -o json -n kube-system | jq .spec.kubernetesClusterVersion` +- image version: `kubectl get nodeversion constellation-version -o json -n kube-system | jq .spec.imageVersion` +- microservices versions: `helm list --filter 'constellation-services' -n kube-system` + +### Upgrading Kubernetes resources fails + +Constellation manages its Kubernetes resources using Helm. +When applying an upgrade, the charts that are about to be installed, and a values override file `overrides.yaml`, +are saved to disk in your current workspace under `constellation-upgrade/upgrade-/helm-charts/`. +If upgrading the charts using the Constellation CLI fails, you can review these charts and try to manually apply the upgrade. + +:::caution + +Changing and manually applying the charts may destroy cluster resources and can lead to broken Constellation deployments. +Proceed with caution and when in doubt, +check if the encountered [issue is known](https://github.com/edgelesssys/constellation/issues?q=is%3Aopen+is%3Aissue+label%3A%22known+issue%22) or [contact support](https://github.com/edgelesssys/constellation#support). + +::: + +## Diagnosing issues + +### Logs + +To get started on diagnosing issues with Constellation, it's often helpful to collect logs from nodes, pods, or other resources in the cluster. Most logs are available through Kubernetes' standard +[logging interfaces](https://kubernetes.io/docs/concepts/cluster-administration/logging/). + +To debug issues occurring at boot time of the nodes, you can use the serial console interface of the CSP while the machine boots to get a read-only view of the boot logs. + +Apart from that, Constellation also offers further [observability integrations](../architecture/observability.md). + +### Node shell access + +Debugging via a shell on a node is [directly supported by Kubernetes](https://kubernetes.io/docs/tasks/debug/debug-application/debug-running-pod/#node-shell-session). + +1. Figure out which node to connect to: + + ```bash + kubectl get nodes + # or to see more information, such as IPs: + kubectl get nodes -o wide + ``` + +2. Connect to the node: + + ```bash + kubectl debug node/constell-worker-xksa0-000000 -it --image=busybox + ``` + + You will be presented with a prompt. + + The nodes file system is mounted at `/host`. + +3. Once finished, clean up the debug pod: + + ```bash + kubectl delete pod node-debugger-constell-worker-xksa0-000000-bjthj + ``` + +### Emergency SSH access + +Emergency SSH access to nodes can be useful to diagnose issues or download important data even if the Kubernetes API isn't reachable anymore. + +1. Enter the `constellation-terraform` directory in your Constellation workspace and enable emergency SSH access to the cluster: + + ```bash + cd constellation-terraform + echo "emergency_ssh = true" >> ./terraform.tfvars + terraform apply + ``` + +2. Sign an existing SSH key with your master secret: + + ```bash + cd ../ # go back to your Constellation workspace + constellation ssh --key your_public_key.pub + ``` + + A certificate is written to `constellation_cert.pub`. + + The certificate is valid for 24 hours and enables you to access your Constellation nodes using + [certificate based authentication](https://en.wikibooks.org/wiki/OpenSSH/Cookbook/Certificate-based_Authentication). + +3. Now you can connect to any Constellation node using your certificate and your private key. + + ```bash + ssh -o CertificateFile=constellation_cert.pub -i root@ + ``` + + Normally, you don't have access to the Constellation nodes since they reside in a private network. + To access those nodes anyways, you can use your Constellation load balancer as a proxy jump host. + For this, use something along the following SSH client configuration: + + ```text + Host + ProxyJump none + + Host * + IdentityFile + PreferredAuthentications publickey + CertificateFile=constellation_cert.pub + User root + ProxyJump + ``` + + With this configuration you can connect to a Constellation node using `ssh -F `. + You can obtain the private node IP and the domain name of the load balancer using your CSP's web UI. diff --git a/docs/versioned_docs/version-2.23/workflows/trusted-launch.md b/docs/versioned_docs/version-2.23/workflows/trusted-launch.md new file mode 100644 index 000000000..d6d01d8eb --- /dev/null +++ b/docs/versioned_docs/version-2.23/workflows/trusted-launch.md @@ -0,0 +1,54 @@ +# Use Azure trusted launch VMs + +Constellation also supports [trusted launch VMs](https://docs.microsoft.com/en-us/azure/virtual-machines/trusted-launch) on Microsoft Azure. Trusted launch VMs don't offer the same level of security as Confidential VMs, but are available in more regions and in larger quantities. The main difference between trusted launch VMs and normal VMs is that the former offer vTPM-based remote attestation. When used with trusted launch VMs, Constellation relies on vTPM-based remote attestation to verify nodes. + +:::caution + +Trusted launch VMs don't provide runtime encryption and don't keep the cloud service provider (CSP) out of your trusted computing base. + +::: + +Constellation supports trusted launch VMs with instance types `Standard_D*_v4` and `Standard_E*_v4`. Run `constellation config instance-types` for a list of all supported instance types. + +## VM images + +Azure currently doesn't support [community galleries for trusted launch VMs](https://docs.microsoft.com/en-us/azure/virtual-machines/share-gallery-community). Thus, you need to manually import the Constellation node image into your cloud subscription. + +The latest image is available at `https://cdn.confidential.cloud/constellation/images/azure/trusted-launch/v2.2.0/constellation.img`. Simply adjust the version number to download a newer version. + +After you've downloaded the image, create a resource group `constellation-images` in your Azure subscription and import the image. +You can use a script to do this: + +```bash +wget https://raw.githubusercontent.com/edgelesssys/constellation/main/hack/importAzure.sh +chmod +x importAzure.sh +AZURE_IMAGE_VERSION=2.2.0 AZURE_RESOURCE_GROUP_NAME=constellation-images AZURE_IMAGE_FILE=./constellation.img ./importAzure.sh +``` + +The script creates the following resources: + +1. A new image gallery with the default name `constellation-import` +2. A new image definition with the default name `constellation` +3. The actual image with the provided version. In this case `2.2.0` + +Once the import is completed, use the `ID` of the image version in your `constellation-conf.yaml` for the `image` field. Set `confidentialVM` to `false`. + +Fetch the image measurements: + +```bash +IMAGE_VERSION=2.2.0 +URL=https://public-edgeless-constellation.s3.us-east-2.amazonaws.com//communitygalleries/constellationcvm-b3782fa0-0df7-4f2f-963e-fc7fc42663df/images/constellation/versions/$IMAGE_VERSION/measurements.yaml +constellation config fetch-measurements -u$URL -s$URL.sig +``` + +:::info + +The [`constellation apply`](create.md) command will issue a warning because manually imported images aren't recognized as production grade images: + +```shell-session +Configured image doesn't look like a released production image. Double check image before deploying to production. +``` + +Please ignore this warning. + +::: diff --git a/docs/versioned_docs/version-2.23/workflows/upgrade.md b/docs/versioned_docs/version-2.23/workflows/upgrade.md new file mode 100644 index 000000000..3db2ecad6 --- /dev/null +++ b/docs/versioned_docs/version-2.23/workflows/upgrade.md @@ -0,0 +1,110 @@ +# Upgrade your cluster + +Constellation provides an easy way to upgrade all components of your cluster, without disrupting its availability. +Specifically, you can upgrade the Kubernetes version, the nodes' image, and the Constellation microservices. +You configure the desired versions in your local Constellation configuration and trigger upgrades with the `apply` command. +To learn about available versions you use the `upgrade check` command. +Which versions are available depends on the CLI version you are using. + +## Update the CLI + +Each CLI comes with a set of supported microservice and Kubernetes versions. +Most importantly, a given CLI version can only upgrade a cluster of the previous minor version, but not older ones. +This means that you have to upgrade your CLI and cluster one minor version at a time. + +For example, if you are currently on CLI version v2.6 and the latest version is v2.8, you should + +* upgrade the CLI to v2.7, +* upgrade the cluster to v2.7, +* and only then continue upgrading the CLI (and the cluster) to v2.8 after. + +Also note that if your current Kubernetes version isn't supported by the next CLI version, use your current CLI to upgrade to a newer Kubernetes version first. + +To learn which Kubernetes versions are supported by a particular CLI, run [constellation config kubernetes-versions](../reference/cli.md#constellation-config-kubernetes-versions). + +## Migrate the configuration + +The Constellation configuration file is located in the file `constellation-conf.yaml` in your workspace. +Refer to the [migration reference](../reference/migration.md) to check if you need to update fields in your configuration file. +Use [`constellation config migrate`](../reference/cli.md#constellation-config-migrate) to automatically update an old config file to a new format. + +## Check for upgrades + +To learn which versions the current CLI can upgrade to and what's installed in your cluster, run: + +```bash +# Show possible upgrades +constellation upgrade check + +# Show possible upgrades and write them to config file +constellation upgrade check --update-config +``` + +You can either enter the reported target versions into your config manually or run the above command with the `--update-config` flag. +When using this flag, the `kubernetesVersion`, `image`, `microserviceVersion`, and `attestation` fields are overwritten with the smallest available upgrade. + +## Apply the upgrade + +Once you updated your config with the desired versions, you can trigger the upgrade with this command: + +```bash +constellation apply +``` + +Microservice upgrades will be finished within a few minutes, depending on the cluster size. +If you are interested, you can monitor pods restarting in the `kube-system` namespace with your tool of choice. + +Image and Kubernetes upgrades take longer. +For each node in your cluster, a new node has to be created and joined. +The process usually takes up to ten minutes per node. + +When applying an upgrade, the Helm charts for the upgrade as well as backup files of Constellation-managed Custom Resource Definitions, Custom Resources, and Terraform state are created. +You can use the Terraform state backup to restore previous resources in case an upgrade misconfigured or erroneously deleted a resource. +You can use the Custom Resource (Definition) backup files to restore Custom Resources and Definitions manually (e.g., via `kubectl apply`) if the automatic migration of those resources fails. +You can use the Helm charts to manually apply upgrades to the Kubernetes resources, should an upgrade fail. + +:::note + +For advanced users: the upgrade consists of several phases that can be individually skipped through the `--skip-phases` flag. +The phases are `infrastracture` for the cloud resource management through Terraform, `helm` for the chart management of the microservices, `image` for OS image upgrades, and `k8s` for Kubernetes version upgrades. + +::: + +## Check the status + +Upgrades are asynchronous operations. +After you run `apply`, it will take a while until the upgrade has completed. +To understand if an upgrade is finished, you can run: + +```bash +constellation status +``` + +This command displays the following information: + +* The installed services and their versions +* The image and Kubernetes version the cluster is expecting on each node +* How many nodes are up to date + +Here's an example output: + +```shell-session +Target versions: + Image: v2.6.0 + Kubernetes: v1.25.8 +Service versions: + Cilium: v1.12.1 + cert-manager: v1.10.0 + constellation-operators: v2.6.0 + constellation-services: v2.6.0 +Cluster status: Some node versions are out of date + Image: 23/25 + Kubernetes: 25/25 +``` + +This output indicates that the cluster is running Kubernetes version `1.25.8`, and all nodes have the appropriate binaries installed. +23 out of 25 nodes have already upgraded to the targeted image version of `2.6.0`, while two are still in progress. + +## Apply further upgrades + +After the upgrade is finished, you can run `constellation upgrade check` again to see if there are more upgrades available. If so, repeat the process. diff --git a/docs/versioned_docs/version-2.23/workflows/verify-cli.md b/docs/versioned_docs/version-2.23/workflows/verify-cli.md new file mode 100644 index 000000000..e33569d37 --- /dev/null +++ b/docs/versioned_docs/version-2.23/workflows/verify-cli.md @@ -0,0 +1,129 @@ +# Verify the CLI + +:::info +This recording presents the essence of this page. It's recommended to read it in full for the motivation and all details. +::: + + + +--- + +Edgeless Systems uses [sigstore](https://www.sigstore.dev/) and [SLSA](https://slsa.dev) to ensure supply-chain security for the Constellation CLI and node images ("artifacts"). sigstore consists of three components: [Cosign](https://docs.sigstore.dev/cosign/signing/overview/), [Rekor](https://docs.sigstore.dev/logging/overview), and Fulcio. Edgeless Systems uses Cosign to sign artifacts. All signatures are uploaded to the public Rekor transparency log, which resides at `https://rekor.sigstore.dev`. + +:::note +The public key for Edgeless Systems' long-term code-signing key is: + +``` +-----BEGIN PUBLIC KEY----- +MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEf8F1hpmwE+YCFXzjGtaQcrL6XZVT +JmEe5iSLvG1SyQSAew7WdMKF6o9t8e2TFuCkzlOhhlws2OHWbiFZnFWCFw== +-----END PUBLIC KEY----- +``` + +The public key is also available for download at [https://edgeless.systems/es.pub](https://edgeless.systems/es.pub) and in the Twitter profile [@EdgelessSystems](https://twitter.com/EdgelessSystems). +::: + +The Rekor transparency log is a public append-only ledger that verifies and records signatures and associated metadata. The Rekor transparency log enables everyone to observe the sequence of (software) signatures issued by Edgeless Systems and many other parties. The transparency log allows for the public identification of dubious or malicious signatures. + +You should always ensure that (1) your CLI executable was signed with the private key corresponding to the above public key and that (2) there is a corresponding entry in the Rekor transparency log. Both can be done as described in the following. + +:::info +You don't need to verify the Constellation node images. This is done automatically by your CLI and the rest of Constellation. +::: + +## Verify the signature + +:::info +This guide assumes Linux on an amd64 processor. The exact steps for other platforms differ slightly. +::: + +First, [install the Cosign CLI](https://docs.sigstore.dev/cosign/system_config/installation/). Next, [download](https://github.com/edgelesssys/constellation/releases) and verify the signature that accompanies your CLI executable, for example: + +```shell-session +$ cosign verify-blob --key https://edgeless.systems/es.pub --signature constellation-linux-amd64.sig constellation-linux-amd64 + +Verified OK +``` + +The above performs an offline verification of the provided public key, signature, and executable. To also verify that a corresponding entry exists in the public Rekor transparency log, add the variable `COSIGN_EXPERIMENTAL=1`: + +```shell-session +$ COSIGN_EXPERIMENTAL=1 cosign verify-blob --key https://edgeless.systems/es.pub --signature constellation-linux-amd64.sig constellation-linux-amd64 + +tlog entry verified with uuid: afaba7f6635b3e058888692841848e5514357315be9528474b23f5dcccb82b13 index: 3477047 +Verified OK +``` + +🏁 You now know that your CLI executable was officially released and signed by Edgeless Systems. + +### Optional: Manually inspect the transparency log + +To further inspect the public Rekor transparency log, [install the Rekor CLI](https://docs.sigstore.dev/logging/installation). A search for the CLI executable should give a single UUID. (Note that this UUID contains the UUID from the previous `cosign` command.) + +```shell-session +$ rekor-cli search --artifact constellation-linux-amd64 + +Found matching entries (listed by UUID): +362f8ecba72f4326afaba7f6635b3e058888692841848e5514357315be9528474b23f5dcccb82b13 +``` + +With this UUID you can get the full entry from the transparency log: + +```shell-session +$ rekor-cli get --uuid=362f8ecba72f4326afaba7f6635b3e058888692841848e5514357315be9528474b23f5dcccb82b13 + +LogID: c0d23d6ad406973f9559f3ba2d1ca01f84147d8ffc5b8445c224f98b9591801d +Index: 3477047 +IntegratedTime: 2022-09-12T22:28:16Z +UUID: afaba7f6635b3e058888692841848e5514357315be9528474b23f5dcccb82b13 +Body: { + "HashedRekordObj": { + "data": { + "hash": { + "algorithm": "sha256", + "value": "40e137b9b9b8204d672642fd1e181c6d5ccb50cfc5cc7fcbb06a8c2c78f44aff" + } + }, + "signature": { + "content": "MEUCIQCSER3mGj+j5Pr2kOXTlCIHQC3gT30I7qkLr9Awt6eUUQIgcLUKRIlY50UN8JGwVeNgkBZyYD8HMxwC/LFRWoMn180=", + "publicKey": { + "content": "LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0KTUZrd0V3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFZjhGMWhwbXdFK1lDRlh6akd0YVFjckw2WFpWVApKbUVlNWlTTHZHMVN5UVNBZXc3V2RNS0Y2bzl0OGUyVEZ1Q2t6bE9oaGx3czJPSFdiaUZabkZXQ0Z3PT0KLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tCg==" + } + } + } +} +``` + +The field `publicKey` should contain Edgeless Systems' public key in Base64 encoding. + +You can get an exhaustive list of artifact signatures issued by Edgeless Systems via the following command: + +```bash +rekor-cli search --public-key https://edgeless.systems/es.pub --pki-format x509 +``` + +Edgeless Systems monitors this list to detect potential unauthorized use of its private key. + +## Verify the provenance + +Provenance attests that a software artifact was produced by a specific repository and build system invocation. For more information on provenance visit [slsa.dev](https://slsa.dev/provenance/v0.2) and learn about the [adoption of SLSA for Constellation](../reference/slsa.md). + +Just as checking its signature proves that the CLI hasn't been manipulated, checking the provenance proves that the artifact was produced by the expected build process and hasn't been tampered with. + +To verify the provenance, first install the [slsa-verifier](https://github.com/slsa-framework/slsa-verifier). Then make sure you have the provenance file (`constellation.intoto.jsonl`) and Constellation CLI downloaded. Both are available on the [GitHub release page](https://github.com/edgelesssys/constellation/releases). + +:::info +The same provenance file is valid for all Constellation CLI executables of a given version independent of the target platform. +::: + +Use the verifier to perform the check: + +```shell-session +$ slsa-verifier verify-artifact constellation-linux-amd64 \ + --provenance-path constellation.intoto.jsonl \ + --source-uri github.com/edgelesssys/constellation + +Verified signature against tlog entry index 7771317 at URL: https://rekor.sigstore.dev/api/v1/log/entries/24296fb24b8ad77af2c04c8b4ae0d5bc5... +Verified build using builder https://github.com/slsa-framework/slsa-github-generator/.github/workflows/generator_generic_slsa3.yml@refs/tags/v1.2.2 at commit 18e9924b416323c37b9cdfd6cc728de8a947424a +PASSED: Verified SLSA provenance +``` diff --git a/docs/versioned_docs/version-2.23/workflows/verify-cluster.md b/docs/versioned_docs/version-2.23/workflows/verify-cluster.md new file mode 100644 index 000000000..b6595ebf2 --- /dev/null +++ b/docs/versioned_docs/version-2.23/workflows/verify-cluster.md @@ -0,0 +1,97 @@ +# Verify your cluster + +Constellation's [attestation feature](../architecture/attestation.md) allows you, or a third party, to verify the integrity and confidentiality of your Constellation cluster. + +## Fetch measurements + +To verify the integrity of Constellation you need trusted measurements to verify against. For each node image released by Edgeless Systems, there are signed measurements, which you can download using the CLI: + +```bash +constellation config fetch-measurements +``` + +This command performs the following steps: + +1. Download the signed measurements for the configured image. By default, this will use Edgeless Systems' public measurement registry. +2. Verify the signature of the measurements. This will use Edgeless Systems' [public key](https://edgeless.systems/es.pub). +3. Write measurements into configuration file. + +The configuration file then contains a list of `measurements` similar to the following: + +```yaml +# ... +measurements: + 0: + expected: "0f35c214608d93c7a6e68ae7359b4a8be5a0e99eea9107ece427c4dea4e439cf" + warnOnly: false + 4: + expected: "02c7a67c01ec70ffaf23d73a12f749ab150a8ac6dc529bda2fe1096a98bf42ea" + warnOnly: false + 5: + expected: "e6949026b72e5045706cd1318889b3874480f7a3f7c5c590912391a2d15e6975" + warnOnly: true + 8: + expected: "0000000000000000000000000000000000000000000000000000000000000000" + warnOnly: false + 9: + expected: "f0a6e8601b00e2fdc57195686cd4ef45eb43a556ac1209b8e25d993213d68384" + warnOnly: false + 11: + expected: "0000000000000000000000000000000000000000000000000000000000000000" + warnOnly: false + 12: + expected: "da99eb6cf7c7fbb692067c87fd5ca0b7117dc293578e4fea41f95d3d3d6af5e2" + warnOnly: false + 13: + expected: "0000000000000000000000000000000000000000000000000000000000000000" + warnOnly: false + 14: + expected: "d7c4cc7ff7933022f013e03bdee875b91720b5b86cf1753cad830f95e791926f" + warnOnly: true + 15: + expected: "0000000000000000000000000000000000000000000000000000000000000000" + warnOnly: false +# ... +``` + +Each entry specifies the expected value of the Constellation node, and whether the measurement should be enforced (`warnOnly: false`), or only a warning should be logged (`warnOnly: true`). +By default, the subset of the [available measurements](../architecture/attestation.md#runtime-measurements) that can be locally reproduced and verified is enforced. + +During attestation, the validating side (CLI or [join service](../architecture/microservices.md#joinservice)) compares each measurement reported by the issuing side (first node or joining node) individually. +For mismatching measurements that have set `warnOnly` to `true` only a warning is emitted. +For mismatching measurements that have set `warnOnly` to `false` an error is emitted and attestation fails. +If attestation fails for a new node, it isn't permitted to join the cluster. + +## The *verify* command + +:::note +The steps below are purely optional. They're automatically executed by `constellation apply` when you initialize your cluster. The `constellation verify` command mostly has an illustrative purpose. +::: + +The `verify` command obtains and verifies an attestation statement from a running Constellation cluster. + +```bash +constellation verify [--cluster-id ...] +``` + +From the attestation statement, the command verifies the following properties: + +* The cluster is using the correct Confidential VM (CVM) type. +* Inside the CVMs, the correct node images are running. The node images are identified through the measurements obtained in the previous step. +* The unique ID of the cluster matches the one from your `constellation-state.yaml` file or passed in via `--cluster-id`. + +Once the above properties are verified, you know that you are talking to the right Constellation cluster and it's in a good and trustworthy shape. + +### Custom arguments + +The `verify` command also allows you to verify any Constellation deployment that you have network access to. For this you need the following: + +* The IP address of a running Constellation cluster's [VerificationService](../architecture/microservices.md#verificationservice). The `VerificationService` is exposed via a `NodePort` service using the external IP address of your cluster. Run `kubectl get nodes -o wide` and look for `EXTERNAL-IP`. +* The cluster's *clusterID*. See [cluster identity](../architecture/keys.md#cluster-identity) for more details. +* A `constellation-conf.yaml` file with the expected measurements of the cluster in your working directory. + +For example: + +```shell-session +constellation verify -e 192.0.2.1 --cluster-id Q29uc3RlbGxhdGlvbkRvY3VtZW50YXRpb25TZWNyZXQ= +``` diff --git a/docs/versioned_sidebars/version-2.23-sidebars.json b/docs/versioned_sidebars/version-2.23-sidebars.json new file mode 100644 index 000000000..c9937ab4f --- /dev/null +++ b/docs/versioned_sidebars/version-2.23-sidebars.json @@ -0,0 +1,304 @@ +{ + "docs": [ + { + "type": "doc", + "label": "Introduction", + "id": "intro" + }, + { + "type": "category", + "label": "Basics", + "link": { + "type": "generated-index" + }, + "items": [ + { + "type": "doc", + "label": "Confidential Kubernetes", + "id": "overview/confidential-kubernetes" + }, + { + "type": "doc", + "label": "Security benefits", + "id": "overview/security-benefits" + }, + { + "type": "doc", + "label": "Product features", + "id": "overview/product" + }, + { + "type": "doc", + "label": "Feature status of clouds", + "id": "overview/clouds" + }, + { + "type": "category", + "label": "Performance", + "link": { + "type": "doc", + "id": "overview/performance/performance" + }, + "items": [ + { + "type": "doc", + "label": "Compute benchmarks", + "id": "overview/performance/compute" + }, + { + "type": "doc", + "label": "I/O benchmarks", + "id": "overview/performance/io" + }, + { + "type": "doc", + "label": "Application benchmarks", + "id": "overview/performance/application" + } + ] + }, + { + "type": "doc", + "label": "License", + "id": "overview/license" + } + ] + }, + { + "type": "category", + "label": "Getting started", + "link": { + "type": "generated-index" + }, + "items": [ + { + "type": "doc", + "label": "Installation", + "id": "getting-started/install" + }, + { + "type": "doc", + "label": "First steps (cloud)", + "id": "getting-started/first-steps" + }, + { + "type": "doc", + "label": "First steps (local)", + "id": "getting-started/first-steps-local" + }, + { + "type": "doc", + "label": "Cloud Marketplaces", + "id": "getting-started/marketplaces" + }, + { + "type": "category", + "label": "Examples", + "link": { + "type": "doc", + "id": "getting-started/examples" + }, + "items": [ + { + "type": "doc", + "label": "Emojivoto", + "id": "getting-started/examples/emojivoto" + }, + { + "type": "doc", + "label": "Online Boutique", + "id": "getting-started/examples/online-boutique" + }, + { + "type": "doc", + "label": "Horizontal Pod Autoscaling", + "id": "getting-started/examples/horizontal-scaling" + }, + { + "type": "doc", + "label": "Filestash with s3proxy", + "id": "getting-started/examples/filestash-s3proxy" + } + ] + } + ] + }, + { + "type": "category", + "label": "Workflows", + "link": { + "type": "generated-index" + }, + "items": [ + { + "type": "doc", + "label": "Verify the CLI", + "id": "workflows/verify-cli" + }, + { + "type": "doc", + "label": "Configure your cluster", + "id": "workflows/config" + }, + { + "type": "doc", + "label": "Create your cluster", + "id": "workflows/create" + }, + { + "type": "doc", + "label": "Scale your cluster", + "id": "workflows/scale" + }, + { + "type": "doc", + "label": "Upgrade your cluster", + "id": "workflows/upgrade" + }, + { + "type": "doc", + "label": "Expose a service", + "id": "workflows/lb" + }, + { + "type": "doc", + "label": "Install cert-manager", + "id": "workflows/cert-manager" + }, + { + "type": "doc", + "label": "Install s3proxy", + "id": "workflows/s3proxy" + }, + { + "type": "doc", + "label": "Terminate your cluster", + "id": "workflows/terminate" + }, + { + "type": "doc", + "label": "Recover your cluster", + "id": "workflows/recovery" + }, + { + "type": "doc", + "label": "Verify your cluster", + "id": "workflows/verify-cluster" + }, + { + "type": "doc", + "label": "Use persistent storage", + "id": "workflows/storage" + }, + { + "type": "doc", + "label": "Use the Terraform provider", + "id": "workflows/terraform-provider" + }, + { + "type": "doc", + "label": "Consume SBOMs", + "id": "workflows/sbom" + }, + { + "type": "doc", + "label": "Reproduce release artifacts", + "id": "workflows/reproducible-builds" + }, + { + "type": "doc", + "label": "Troubleshooting", + "id": "workflows/troubleshooting" + } + ] + }, + { + "type": "category", + "label": "Architecture", + "link": { + "type": "generated-index" + }, + "items": [ + { + "type": "doc", + "label": "Overview", + "id": "architecture/overview" + }, + { + "type": "doc", + "label": "Cluster orchestration", + "id": "architecture/orchestration" + }, + { + "type": "doc", + "label": "Versions and support", + "id": "architecture/versions" + }, + { + "type": "doc", + "label": "Microservices", + "id": "architecture/microservices" + }, + { + "type": "doc", + "label": "Attestation", + "id": "architecture/attestation" + }, + { + "type": "doc", + "label": "Images", + "id": "architecture/images" + }, + { + "type": "doc", + "label": "Keys and cryptographic primitives", + "id": "architecture/keys" + }, + { + "type": "doc", + "label": "Encrypted persistent storage", + "id": "architecture/encrypted-storage" + }, + { + "type": "doc", + "label": "Networking", + "id": "architecture/networking" + }, + { + "type": "doc", + "label": "Observability", + "id": "architecture/observability" + } + ] + }, + { + "type": "category", + "label": "Reference", + "link": { + "type": "generated-index" + }, + "items": [ + { + "type": "doc", + "label": "CLI", + "id": "reference/cli" + }, + { + "type": "doc", + "label": "Configuration migrations", + "id": "reference/migration" + }, + { + "type": "doc", + "label": "Terraform usage", + "id": "reference/terraform" + }, + { + "type": "doc", + "label": "SLSA adoption", + "id": "reference/slsa" + } + ] + } + ] +} diff --git a/docs/versions.json b/docs/versions.json index 4d55a926c..8cc6150df 100644 --- a/docs/versions.json +++ b/docs/versions.json @@ -1,4 +1,5 @@ [ + "2.23", "2.22", "2.21", "2.20", diff --git a/version.txt b/version.txt index 954dd96a4..5dd39fbf7 100644 --- a/version.txt +++ b/version.txt @@ -1 +1 @@ -v2.23.0-pre +v2.24.0-pre From 740752a60a2696b60d3f0eea948da16a907a5434 Mon Sep 17 00:00:00 2001 From: edgelessci <71088502+edgelessci@users.noreply.github.com> Date: Sun, 4 May 2025 19:58:16 +0200 Subject: [PATCH 243/311] image: update locked rpms (#3794) Co-authored-by: edgelessci --- image/mirror/SHA256SUMS | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/image/mirror/SHA256SUMS b/image/mirror/SHA256SUMS index 0f174d7e5..f9cc6340b 100644 --- a/image/mirror/SHA256SUMS +++ b/image/mirror/SHA256SUMS @@ -57,7 +57,7 @@ fde3769dc677f0a76ce96058c3032f6553809f4809509842b9523a13e90913e2 elfutils-libel f7778242b3242fab35a5e0c4f0919ca9823a47c7b296f274ff312cc2c49ba6e7 elfutils-libelf-0.192-9.fc40.x86_64.rpm a322c6f44f82bc21558f3bb7afc694dbdc28a41340280d3a2c5da2656a339d2f elfutils-libs-0.192-9.fc40.i686.rpm 184235133a6873a42b72d2d88657f12dd4b4b603fd5058fbd02daa0a7308f69c elfutils-libs-0.192-9.fc40.x86_64.rpm -95cf8ee199b2e1b3471f920ebad57d3d8178f5e68d37ee35a8a94727473ec8d3 ethtool-6.11-1.fc40.x86_64.rpm +a09546cd7e26c630765f4acb93942a2c70524107a50e20761eb0898b8a80b6cb ethtool-6.14-2.fc40.x86_64.rpm 136ed00bff4d44ab7bd6d0926c4b80c2f5ee9160dc4f698be988ca3d37303b4d expat-2.7.1-1.fc40.x86_64.rpm 849feb04544096f9bbe16bc78c2198708fe658bdafa08575c911e538a7d31c18 fedora-gpg-keys-40-2.noarch.rpm 8f0a56982aa10b607bd3b8009e91bac1a7d9b7ba40eb4435ff9bd9efe7e5e76e fedora-release-40-40.noarch.rpm @@ -256,8 +256,8 @@ b3b261e448a25c6550f050ca1813509dd6edbb10f22c02a535548332435b6bc4 pam-1.6.1-5.fc 753d7b5a6531eec7689414dc1a4ce76ba4d327b8ad0363a9298ee67b565c1d95 pam-libs-1.6.1-5.fc40.i686.rpm 6ca8efd0b2a26cc51917c1c81260d919ef7760f0e0770dc872a78b1b829299cd pam-libs-1.6.1-5.fc40.x86_64.rpm 9bbce784622e02af0371ced8e9a7d26adba7eabd66ecfcb8bbe2d24cf616e3c1 parted-3.6-4.fc40.x86_64.rpm -21509d71e6314918d78b3175018be8ac6e59a4c4b5478ecdbe31aa424fb79e26 passt-0^20250217.ga1e48a0-2.fc40.x86_64.rpm -d372ba134749d84ffd97e538adb7468ba8b15a46df338a169328c69e0a2e9ad6 passt-selinux-0^20250217.ga1e48a0-2.fc40.noarch.rpm +fa10fa559403d57df8c8dabd9cfd765f020216ca03d2116c861aa7cf7a97b27a passt-0^20250415.g2340bbf-1.fc40.x86_64.rpm +b8892365092573b21fc84ebd084b20f6f62e848ac19720ea8a9e0c2fd64176c4 passt-selinux-0^20250415.g2340bbf-1.fc40.noarch.rpm a0fb808d6b7ff8cd9cfdc1a60f213851cecdcace334d6e5aa1e0e54b81d79a25 pcre2-10.44-1.fc40.i686.rpm 73e50df09266fcffda9c24a3738f579dd365c2c187c294da054ef9915edc3851 pcre2-10.44-1.fc40.x86_64.rpm dbec699e88d42fc6fb1df0a8c0b9023941ed1b1b7625694253a612eaf9f2691d pcre2-syntax-10.44-1.fc40.noarch.rpm @@ -278,9 +278,9 @@ af85755cda79959a19161ebc26a45e507003298bd97b472b9ab0d512afa5e46a protobuf-c-1.5 45ff2e9814aa059f323b23710c73309d41d36306667a3004f5fbb86b0cab4484 psmisc-23.6-6.fc40.x86_64.rpm c000cbb0a7df2c0c61559ab3f3732eacd163b171673298f4ec043cb6d223f364 publicsuffix-list-dafsa-20250116-1.fc40.noarch.rpm 7c703b431508f44c5184b5c1df052ed0f49b7439d68aa3597a9a57a5b26bd648 python-pip-wheel-23.3.2-2.fc40.noarch.rpm -c24e7183512d234d981d7af6dc218b64745d4f4d1f75a82551ec9fe8bedee740 python-unversioned-command-3.12.10-1.fc40.noarch.rpm -a9b90e03e8cd9e9598f40b22efe04f35343052ae2d5e7977361b1bd105356202 python3-3.12.10-1.fc40.x86_64.rpm -e95d613ce7e265b58fee8fc07e52a6613835647ff2243ec9e3c4cbc29880be79 python3-libs-3.12.10-1.fc40.x86_64.rpm +bc9b15b36777510ccc9ddc3da363a3100990a235e998f3a50743cdfa50e92f5e python-unversioned-command-3.12.10-2.fc40.noarch.rpm +b0eced6eca5856ed3ddd031e8010e91975149cecf4b337fd3a8c82759a2344c9 python3-3.12.10-2.fc40.x86_64.rpm +c59ab2ff672f5e2d1be59dd22ebbe3fc86c88aca95247b1f84c9bf3d5b6c7026 python3-libs-3.12.10-2.fc40.x86_64.rpm b593f10e736995a0a898d37a1e595ad04bf162e7f0e7c9994e3032a9d9bc8799 qemu-user-static-8.2.9-1.fc40.x86_64.rpm 72b6185e59a7b359df273e9fe27dc014c0856341abcd1c907c7810a77cc6980e qemu-user-static-aarch64-8.2.9-1.fc40.x86_64.rpm 7eace5bc3e601266452b8356207604012542a8cd019b576e6d2ab9306c6a8e4c qemu-user-static-alpha-8.2.9-1.fc40.x86_64.rpm From f51879f95daee7ff0cffd87460e5274610c3c639 Mon Sep 17 00:00:00 2001 From: Markus Rudy Date: Mon, 5 May 2025 07:31:10 +0200 Subject: [PATCH 244/311] terraform-provider: pass ServiceCIDR from resource to chart loader (#3793) --- .../internal/provider/cluster_resource.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/terraform-provider-constellation/internal/provider/cluster_resource.go b/terraform-provider-constellation/internal/provider/cluster_resource.go index c002ccad5..d8921476c 100644 --- a/terraform-provider-constellation/internal/provider/cluster_resource.go +++ b/terraform-provider-constellation/internal/provider/cluster_resource.go @@ -1093,6 +1093,7 @@ func (r *ClusterResource) apply(ctx context.Context, data *ClusterResourceModel, DeployCSIDriver: microserviceCfg.CSIDriver, masterSecret: secrets.masterSecret, serviceAccURI: serviceAccURI, + serviceCIDR: networkCfg.IPCidrService.ValueString(), } if csp == cloudprovider.OpenStack { payload.openStackHelmValues = &helm.OpenStackValues{ @@ -1267,6 +1268,7 @@ type applyHelmChartsPayload struct { masterSecret uri.MasterSecret // master secret of the cluster. serviceAccURI string // URI of the service account used within the cluster. openStackHelmValues *helm.OpenStackValues // OpenStack-specific Helm values. + serviceCIDR string // CIDR used for k8s services - needed for CoreDNS chart. } // applyHelmCharts applies the Helm charts to the cluster. @@ -1288,6 +1290,7 @@ func (r *ClusterResource) applyHelmCharts(ctx context.Context, applier *constell // The user has previously been warned about this when planning a microservice version change. AllowDestructive: helm.AllowDestructive, OpenStackValues: payload.openStackHelmValues, + ServiceCIDR: payload.serviceCIDR, } if err := applier.AnnotateCoreDNSResources(ctx); err != nil { From 1e615cdc3b1386266339dd83f7efcb721c77bef6 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 5 May 2025 11:08:59 +0200 Subject: [PATCH 245/311] deps: update dependency containernetworking/plugins to v1.7.1 (#3789) * deps: update dependency containernetworking/plugins to v1.7.1 * deps: tidy all modules --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: edgelessci --- internal/versions/versions.go | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/internal/versions/versions.go b/internal/versions/versions.go index 10521c417..e35f9a56c 100644 --- a/internal/versions/versions.go +++ b/internal/versions/versions.go @@ -201,8 +201,8 @@ var VersionConfigs = map[ValidK8sVersion]KubernetesVersion{ ClusterVersion: "v1.29.15", // renovate:kubernetes-release KubernetesComponents: components.Components{ { - Url: "https://github.com/containernetworking/plugins/releases/download/v1.6.2/cni-plugins-linux-amd64-v1.6.2.tgz", // renovate:cni-plugins-release - Hash: "sha256:b8e811578fb66023f90d2e238d80cec3bdfca4b44049af74c374d4fae0f9c090", + Url: "https://github.com/containernetworking/plugins/releases/download/v1.7.1/cni-plugins-linux-amd64-v1.7.1.tgz", // renovate:cni-plugins-release + Hash: "sha256:1a28a0506bfe5bcdc981caf1a49eeab7e72da8321f1119b7be85f22621013098", InstallPath: constants.CniPluginsDir, Extract: true, }, @@ -268,8 +268,8 @@ var VersionConfigs = map[ValidK8sVersion]KubernetesVersion{ ClusterVersion: "v1.30.12", // renovate:kubernetes-release KubernetesComponents: components.Components{ { - Url: "https://github.com/containernetworking/plugins/releases/download/v1.6.2/cni-plugins-linux-amd64-v1.6.2.tgz", // renovate:cni-plugins-release - Hash: "sha256:b8e811578fb66023f90d2e238d80cec3bdfca4b44049af74c374d4fae0f9c090", + Url: "https://github.com/containernetworking/plugins/releases/download/v1.7.1/cni-plugins-linux-amd64-v1.7.1.tgz", // renovate:cni-plugins-release + Hash: "sha256:1a28a0506bfe5bcdc981caf1a49eeab7e72da8321f1119b7be85f22621013098", InstallPath: constants.CniPluginsDir, Extract: true, }, @@ -335,8 +335,8 @@ var VersionConfigs = map[ValidK8sVersion]KubernetesVersion{ ClusterVersion: "v1.31.8", // renovate:kubernetes-release KubernetesComponents: components.Components{ { - Url: "https://github.com/containernetworking/plugins/releases/download/v1.6.2/cni-plugins-linux-amd64-v1.6.2.tgz", // renovate:cni-plugins-release - Hash: "sha256:b8e811578fb66023f90d2e238d80cec3bdfca4b44049af74c374d4fae0f9c090", + Url: "https://github.com/containernetworking/plugins/releases/download/v1.7.1/cni-plugins-linux-amd64-v1.7.1.tgz", // renovate:cni-plugins-release + Hash: "sha256:1a28a0506bfe5bcdc981caf1a49eeab7e72da8321f1119b7be85f22621013098", InstallPath: constants.CniPluginsDir, Extract: true, }, From 3cb36b20a68d189083added400e7bb28aac22177 Mon Sep 17 00:00:00 2001 From: Moritz Sanft <58110325+msanft@users.noreply.github.com> Date: Mon, 5 May 2025 11:51:56 +0200 Subject: [PATCH 246/311] CODEOWNERS: update (#3796) --- CODEOWNERS | 34 ++++++++++++++++------------------ 1 file changed, 16 insertions(+), 18 deletions(-) diff --git a/CODEOWNERS b/CODEOWNERS index fd7e2d8a0..6061a39c1 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -1,10 +1,8 @@ # keep-sorted start -.golangci.yml @katexochen -/3rdparty/gcp-guest-agent @3u13r +.golangci.yml @daniel-weisse +/3rdparty/gcp-guest-agent @msanft /bazel @burgerdev -/bazel/ci @katexochen -/bazel/sh @katexochen -/bootstrapper @3u13r +/bootstrapper @msanft /cli/internal/cloudcmd @daniel-weisse /cli/internal/cmd/upgrade* @derpsteb /cli/internal/libvirt @daniel-weisse @@ -13,24 +11,24 @@ /debugd @daniel-weisse /disk-mapper @daniel-weisse /docs @thomasten -/e2e @3u13r +/e2e @msanft /hack/azure-snp-report-verify @derpsteb /hack/bazel-deps-mirror @burgerdev /hack/cli-k8s-compatibility @derpsteb /hack/clidocgen @thomasten -/hack/fetch-broken-e2e @katexochen -/hack/gocoverage @katexochen +/hack/fetch-broken-e2e @msanft +/hack/gocoverage @msanft /hack/oci-pin @burgerdev /hack/qemu-metadata-api @daniel-weisse -/hack/remove-tf-providers @katexochen -/hack/terraform @3u13r -/hack/tools @katexochen +/hack/remove-tf-providers @msanft +/hack/terraform @msanft +/hack/tools @msanft /hack/versioninfogen @daniel-weisse /image @msanft /internal/api @derpsteb /internal/atls @thomasten /internal/attestation @daniel-weisse -/internal/cloud @3u13r +/internal/cloud @msanft /internal/compatibility @derpsteb /internal/config @derpsteb /internal/constellation/featureset @thomasten @@ -43,24 +41,24 @@ /internal/file @daniel-weisse /internal/grpc @thomasten /internal/imagefetcher @msanft -/internal/installer @3u13r +/internal/installer @msanft /internal/kms @daniel-weisse -/internal/kubernetes @3u13r +/internal/kubernetes @msanft /internal/license @thomasten /internal/logger @daniel-weisse /internal/nodestate @daniel-weisse /internal/osimage @msanft -/internal/retry @katexochen +/internal/retry @msanft /internal/semver @derpsteb /internal/sigstore @elchead /internal/staticupload @msanft -/internal/versions @3u13r +/internal/versions @msanft /joinservice @daniel-weisse /keyservice @daniel-weisse /measurement-reader @daniel-weisse -/operators @3u13r +/operators @msanft /terraform-provider-constellation @msanft @elchead /tools @burgerdev -/upgrade-agent @3u13r +/upgrade-agent @msanft /verify @daniel-weisse # keep-sorted end From 5f6ad4a50cb96e07a158d89debc03eec56c2305b Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 5 May 2025 13:00:32 +0200 Subject: [PATCH 247/311] deps: update golangci/golangci-lint to v2.1.6 (#3798) * deps: update golangci/golangci-lint to v2.1.6 * deps: tidy all modules --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: edgelessci --- bazel/toolchains/ci_deps.bzl | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/bazel/toolchains/ci_deps.bzl b/bazel/toolchains/ci_deps.bzl index cf74da11f..cf265a4d0 100644 --- a/bazel/toolchains/ci_deps.bzl +++ b/bazel/toolchains/ci_deps.bzl @@ -223,45 +223,45 @@ def _golangci_lint_deps(): name = "com_github_golangci_golangci_lint_linux_amd64", build_file = "//bazel/toolchains:BUILD.golangci.bazel", urls = [ - "https://cdn.confidential.cloud/constellation/cas/sha256/8c71aea61ce6ef83f32c23a0067ba5b6b7064043767bcb99ddfdd6678e3c7644", - "https://github.com/golangci/golangci-lint/releases/download/v2.1.5/golangci-lint-2.1.5-linux-amd64.tar.gz", + "https://cdn.confidential.cloud/constellation/cas/sha256/e55e0eb515936c0fbd178bce504798a9bd2f0b191e5e357768b18fd5415ee541", + "https://github.com/golangci/golangci-lint/releases/download/v2.1.6/golangci-lint-2.1.6-linux-amd64.tar.gz", ], - strip_prefix = "golangci-lint-2.1.5-linux-amd64", + strip_prefix = "golangci-lint-2.1.6-linux-amd64", type = "tar.gz", - sha256 = "8c71aea61ce6ef83f32c23a0067ba5b6b7064043767bcb99ddfdd6678e3c7644", + sha256 = "e55e0eb515936c0fbd178bce504798a9bd2f0b191e5e357768b18fd5415ee541", ) http_archive( name = "com_github_golangci_golangci_lint_linux_arm64", build_file = "//bazel/toolchains:BUILD.golangci.bazel", urls = [ - "https://cdn.confidential.cloud/constellation/cas/sha256/76ef18939e16308b01a90d2e28abd5ce888435fa25467c432dc0da9469f998c9", - "https://github.com/golangci/golangci-lint/releases/download/v2.1.5/golangci-lint-2.1.5-linux-arm64.tar.gz", + "https://cdn.confidential.cloud/constellation/cas/sha256/582eb73880f4408d7fb89f12b502d577bd7b0b63d8c681da92bb6b9d934d4363", + "https://github.com/golangci/golangci-lint/releases/download/v2.1.6/golangci-lint-2.1.6-linux-arm64.tar.gz", ], - strip_prefix = "golangci-lint-2.1.5-linux-arm64", + strip_prefix = "golangci-lint-2.1.6-linux-arm64", type = "tar.gz", - sha256 = "76ef18939e16308b01a90d2e28abd5ce888435fa25467c432dc0da9469f998c9", + sha256 = "582eb73880f4408d7fb89f12b502d577bd7b0b63d8c681da92bb6b9d934d4363", ) http_archive( name = "com_github_golangci_golangci_lint_darwin_amd64", build_file = "//bazel/toolchains:BUILD.golangci.bazel", urls = [ - "https://cdn.confidential.cloud/constellation/cas/sha256/b44c77e61f2685a9cb673a1b579486c7839bf2a57feee591eb42812951b9d190", - "https://github.com/golangci/golangci-lint/releases/download/v2.1.5/golangci-lint-2.1.5-darwin-amd64.tar.gz", + "https://cdn.confidential.cloud/constellation/cas/sha256/e091107c4ca7e283902343ba3a09d14fb56b86e071effd461ce9d67193ef580e", + "https://github.com/golangci/golangci-lint/releases/download/v2.1.6/golangci-lint-2.1.6-darwin-amd64.tar.gz", ], - strip_prefix = "golangci-lint-2.1.5-darwin-amd64", + strip_prefix = "golangci-lint-2.1.6-darwin-amd64", type = "tar.gz", - sha256 = "b44c77e61f2685a9cb673a1b579486c7839bf2a57feee591eb42812951b9d190", + sha256 = "e091107c4ca7e283902343ba3a09d14fb56b86e071effd461ce9d67193ef580e", ) http_archive( name = "com_github_golangci_golangci_lint_darwin_arm64", build_file = "//bazel/toolchains:BUILD.golangci.bazel", urls = [ - "https://cdn.confidential.cloud/constellation/cas/sha256/de757442ad87df8b094afb610ea92f85a8e46c687b496a3b8d708c94dec16526", - "https://github.com/golangci/golangci-lint/releases/download/v2.1.5/golangci-lint-2.1.5-darwin-arm64.tar.gz", + "https://cdn.confidential.cloud/constellation/cas/sha256/90783fa092a0f64a4f7b7d419f3da1f53207e300261773babe962957240e9ea6", + "https://github.com/golangci/golangci-lint/releases/download/v2.1.6/golangci-lint-2.1.6-darwin-arm64.tar.gz", ], - strip_prefix = "golangci-lint-2.1.5-darwin-arm64", + strip_prefix = "golangci-lint-2.1.6-darwin-arm64", type = "tar.gz", - sha256 = "de757442ad87df8b094afb610ea92f85a8e46c687b496a3b8d708c94dec16526", + sha256 = "90783fa092a0f64a4f7b7d419f3da1f53207e300261773babe962957240e9ea6", ) def _buf_deps(): From f62d2528ef53aca5a1f37d8a626c53ae99f25cd8 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 6 May 2025 08:45:28 +0200 Subject: [PATCH 248/311] deps: update Terraform dependencies (#3803) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .../vpn/on-prem-terraform/.terraform.lock.hcl | 48 +++++----- dev-docs/howto/vpn/on-prem-terraform/main.tf | 2 +- .../azure-terraform/.terraform.lock.hcl | 96 +++++++++---------- .../miniconstellation/azure-terraform/main.tf | 4 +- e2e/miniconstellation/.terraform.lock.hcl | 96 +++++++++---------- e2e/miniconstellation/main.tf | 4 +- .../examples/full/aws/main.tf | 2 +- .../examples/full/azure/main.tf | 2 +- .../examples/full/gcp/main.tf | 2 +- .../examples/full/stackit/main.tf | 2 +- .../infrastructure/aws/.terraform.lock.hcl | 60 ++++++------ terraform/infrastructure/aws/main.tf | 2 +- .../aws/modules/instance_group/main.tf | 2 +- .../aws/modules/jump_host/main.tf | 2 +- .../aws/modules/load_balancer_target/main.tf | 2 +- .../aws/modules/public_private_subnet/main.tf | 2 +- .../infrastructure/azure/.terraform.lock.hcl | 48 +++++----- terraform/infrastructure/azure/main.tf | 2 +- .../modules/load_balancer_backend/main.tf | 2 +- .../azure/modules/scale_set/main.tf | 2 +- .../infrastructure/gcp/.terraform.lock.hcl | 48 +++++----- terraform/infrastructure/gcp/main.tf | 2 +- .../gcp/modules/instance_group/main.tf | 2 +- .../modules/internal_load_balancer/main.tf | 2 +- .../gcp/modules/jump_host/main.tf | 2 +- .../gcp/modules/loadbalancer/main.tf | 2 +- .../iam/aws/.terraform.lock.hcl | 60 ++++++------ terraform/infrastructure/iam/aws/main.tf | 2 +- .../iam/azure/.terraform.lock.hcl | 48 +++++----- terraform/infrastructure/iam/azure/main.tf | 2 +- .../iam/gcp/.terraform.lock.hcl | 48 +++++----- terraform/infrastructure/iam/gcp/main.tf | 2 +- .../openstack/.terraform.lock.hcl | 60 ++++++------ terraform/infrastructure/openstack/main.tf | 2 +- .../modules/stackit_loadbalancer/main.tf | 2 +- .../infrastructure/qemu/.terraform.lock.hcl | 51 ++++++---- terraform/infrastructure/qemu/main.tf | 2 +- 37 files changed, 364 insertions(+), 355 deletions(-) diff --git a/dev-docs/howto/vpn/on-prem-terraform/.terraform.lock.hcl b/dev-docs/howto/vpn/on-prem-terraform/.terraform.lock.hcl index f769b5b5c..726e0edba 100644 --- a/dev-docs/howto/vpn/on-prem-terraform/.terraform.lock.hcl +++ b/dev-docs/howto/vpn/on-prem-terraform/.terraform.lock.hcl @@ -2,31 +2,31 @@ # Manual edits may be lost in future updates. provider "registry.terraform.io/hashicorp/azurerm" { - version = "4.26.0" - constraints = "4.26.0" + version = "4.27.0" + constraints = "4.27.0" hashes = [ - "h1:4u1kyA8Osv6H0LGarotaTHYYoLzA6pppkDe3r7WfiGk=", - "h1:5H50iSplSH5MTm3bYhus5iLK16MfXrSk7du854A+DGA=", - "h1:Bh70KRHeGuPkrJB764Xq9ikJOZmNSa8j/GehiMlHWSs=", - "h1:IZrN6ykVO4aiCjvKHwF4vKHkWpqjGNREKO2iPs4kO1w=", - "h1:VXqu52kAZEQXxly8+RoXrdpzfxlp+yJA2GBrRXrpenY=", - "h1:Vdylhj5W0M+J62bOOdvVUlmGB7M5TfaNRcThdb8ydcc=", - "h1:aDlCe/5J3dYrHZXURQxZM9mdCr29rJemJee6BdWTg94=", - "h1:hUD8zA28MYrlbtAa1Wyz9HINt0OD5PxiRF86hjHZ5HM=", - "h1:sIOsHg7I0ZS3QBR1OrFH7RHQMxo0E0udsl2Ii59O2Js=", - "h1:v5WNL753ytgJoMMZqsA4pVyRPUMipAPXHsinP9WYZ9g=", - "h1:vpOwIlkeCbbLItUkgHGgl9qDkKFWzRadXLfy5BlEraE=", - "zh:0e381bace81028596d60e253bc320bf62d00ae2ec207d7c7e70cdbec5f543334", - "zh:32c8cf70e476a4d0e0a2d4cb94b4a4e95c287c5972ca1e8c0f37dc629fbe31cb", - "zh:568ebaa4c66fc668dc14c8ff323e47fc7b2ac3b5a5d9eec612de2b6a30164f4c", - "zh:596c218810ffb85bc7224574b6ba6dbab9295bfa7490eac98c5ff88beae75710", - "zh:75a0e5b60f24684d62944714deb1c790b17c8d4acc93b5cdb45a8187d887b7f1", - "zh:7d2abea6ab66a08fed7d1ab8d4f3a8344fe7e2ac76d7409a3e40e8c066df6f22", - "zh:7f4db75991fd610b2c0306226e5e1916d4b633cdb0126bc78951dce2365b3418", - "zh:95fe307defb6e0dc172855fa597140f3da96655b3c558c140ae51a4a6077f58d", - "zh:ae07cdd3c658c0e24d45f1cfadf8b085b18981bcd72a20093ce3f042ed0adf3f", - "zh:d2a471b9e42499a7247f873aebd5cbc8df0c6691f02a5c9b556aa00045c06869", - "zh:e0299c0f6eae2b1c935f552f76fc49a2e61975eeda9410e3920a004b74d9e750", + "h1:/siiXbMpe2dyybB+a+3sglgC0fqgcwTIbpQbOTg6hnw=", + "h1:2LGw0R82Sed+v5O3+GKLBP/s/wB+rwjG0hGMeW07Mb0=", + "h1:2fs47aLDaEm93ANXXVRdTjlbUBmFBZRsFjyshKoPE3o=", + "h1:LGcjQ6+b+1am/E3u4N2G2+n3yVZrEsjW8DVQ4rMiWCs=", + "h1:ZNq+aXF3EFrQTaO1lxTZfGQhD/9nA1tcFN+HCx9jPGc=", + "h1:ammVs7Gcf8CxMZb/rjvmE3/YuW28DZ34BoWqMq9nvcQ=", + "h1:blf243zIVL7XojJI5rjyMXBwR4cjq4QcyRtIDrSanQs=", + "h1:hSh710nvwI0hStJ+iW9y6YiVKt8aUjOBWb3oshjlQ4M=", + "h1:hmAzHk4XVbrGQ5iJJj1QdFx0aWNW9Hjh+GIE6S8G5I8=", + "h1:nvIa9Z9GdI3/J7U4oMR2w/h/JZ66M1ozUPh/jHn5pXU=", + "h1:sVv383rmZlQYdIPkdSjbTGPi5Yu/Bxm/qRXZUYqvWcg=", + "zh:0c69edea1995bd3bd9e61980757169c35bf22281b660b5c755b6cb13d08d29d2", + "zh:25b86bf7b9678371d8573983954c571696f3e64a3967133be3b835da36307106", + "zh:49921cff4f26a49bafada60cd07dabb52c5eb35231059ed928a4f4722e269c82", + "zh:4b986166531f9fd1289f01d8220519443e74888a21da512c1b841b006dad6215", + "zh:53fb65b2ca4df637f03e4748a100a7d7fc77249e307c03e294d6259cec0310f6", + "zh:5c0d021a387ca4e2a5a01da009746a08c45f08e971c10d9bda54539d7264d671", + "zh:600043f2b20dc5a45275e43f175c19fe8b6e8e9557a0c884aef018f1f63de90e", + "zh:a0284f6f38912f67bb4cb7829fda3fa75be81fea6a9b21119965c2a839430092", + "zh:a7ac0576e2069ef77557042c6b5157ded364fbd355b2f9bf7f5441622424086e", + "zh:c5db0bcafe986868e28cc6225b68b2d1cf4bf631939d260ca845f17a9aa1677d", + "zh:ce620c0eb71b1fdd925828b30cf232a869abccf1c459180f2f991c4166315251", "zh:f569b65999264a9416862bca5cd2a6177d94ccb0424f3a4ef424428912b9cb3c", ] } diff --git a/dev-docs/howto/vpn/on-prem-terraform/main.tf b/dev-docs/howto/vpn/on-prem-terraform/main.tf index f4c24a8ff..28c564b3b 100644 --- a/dev-docs/howto/vpn/on-prem-terraform/main.tf +++ b/dev-docs/howto/vpn/on-prem-terraform/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { azurerm = { source = "hashicorp/azurerm" - version = "4.26.0" + version = "4.27.0" } random = { source = "hashicorp/random" diff --git a/dev-docs/miniconstellation/azure-terraform/.terraform.lock.hcl b/dev-docs/miniconstellation/azure-terraform/.terraform.lock.hcl index 9d811884b..5c4ef5fba 100644 --- a/dev-docs/miniconstellation/azure-terraform/.terraform.lock.hcl +++ b/dev-docs/miniconstellation/azure-terraform/.terraform.lock.hcl @@ -2,31 +2,31 @@ # Manual edits may be lost in future updates. provider "registry.terraform.io/hashicorp/azurerm" { - version = "4.26.0" - constraints = "4.26.0" + version = "4.27.0" + constraints = "4.27.0" hashes = [ - "h1:4u1kyA8Osv6H0LGarotaTHYYoLzA6pppkDe3r7WfiGk=", - "h1:5H50iSplSH5MTm3bYhus5iLK16MfXrSk7du854A+DGA=", - "h1:Bh70KRHeGuPkrJB764Xq9ikJOZmNSa8j/GehiMlHWSs=", - "h1:IZrN6ykVO4aiCjvKHwF4vKHkWpqjGNREKO2iPs4kO1w=", - "h1:VXqu52kAZEQXxly8+RoXrdpzfxlp+yJA2GBrRXrpenY=", - "h1:Vdylhj5W0M+J62bOOdvVUlmGB7M5TfaNRcThdb8ydcc=", - "h1:aDlCe/5J3dYrHZXURQxZM9mdCr29rJemJee6BdWTg94=", - "h1:hUD8zA28MYrlbtAa1Wyz9HINt0OD5PxiRF86hjHZ5HM=", - "h1:sIOsHg7I0ZS3QBR1OrFH7RHQMxo0E0udsl2Ii59O2Js=", - "h1:v5WNL753ytgJoMMZqsA4pVyRPUMipAPXHsinP9WYZ9g=", - "h1:vpOwIlkeCbbLItUkgHGgl9qDkKFWzRadXLfy5BlEraE=", - "zh:0e381bace81028596d60e253bc320bf62d00ae2ec207d7c7e70cdbec5f543334", - "zh:32c8cf70e476a4d0e0a2d4cb94b4a4e95c287c5972ca1e8c0f37dc629fbe31cb", - "zh:568ebaa4c66fc668dc14c8ff323e47fc7b2ac3b5a5d9eec612de2b6a30164f4c", - "zh:596c218810ffb85bc7224574b6ba6dbab9295bfa7490eac98c5ff88beae75710", - "zh:75a0e5b60f24684d62944714deb1c790b17c8d4acc93b5cdb45a8187d887b7f1", - "zh:7d2abea6ab66a08fed7d1ab8d4f3a8344fe7e2ac76d7409a3e40e8c066df6f22", - "zh:7f4db75991fd610b2c0306226e5e1916d4b633cdb0126bc78951dce2365b3418", - "zh:95fe307defb6e0dc172855fa597140f3da96655b3c558c140ae51a4a6077f58d", - "zh:ae07cdd3c658c0e24d45f1cfadf8b085b18981bcd72a20093ce3f042ed0adf3f", - "zh:d2a471b9e42499a7247f873aebd5cbc8df0c6691f02a5c9b556aa00045c06869", - "zh:e0299c0f6eae2b1c935f552f76fc49a2e61975eeda9410e3920a004b74d9e750", + "h1:/siiXbMpe2dyybB+a+3sglgC0fqgcwTIbpQbOTg6hnw=", + "h1:2LGw0R82Sed+v5O3+GKLBP/s/wB+rwjG0hGMeW07Mb0=", + "h1:2fs47aLDaEm93ANXXVRdTjlbUBmFBZRsFjyshKoPE3o=", + "h1:LGcjQ6+b+1am/E3u4N2G2+n3yVZrEsjW8DVQ4rMiWCs=", + "h1:ZNq+aXF3EFrQTaO1lxTZfGQhD/9nA1tcFN+HCx9jPGc=", + "h1:ammVs7Gcf8CxMZb/rjvmE3/YuW28DZ34BoWqMq9nvcQ=", + "h1:blf243zIVL7XojJI5rjyMXBwR4cjq4QcyRtIDrSanQs=", + "h1:hSh710nvwI0hStJ+iW9y6YiVKt8aUjOBWb3oshjlQ4M=", + "h1:hmAzHk4XVbrGQ5iJJj1QdFx0aWNW9Hjh+GIE6S8G5I8=", + "h1:nvIa9Z9GdI3/J7U4oMR2w/h/JZ66M1ozUPh/jHn5pXU=", + "h1:sVv383rmZlQYdIPkdSjbTGPi5Yu/Bxm/qRXZUYqvWcg=", + "zh:0c69edea1995bd3bd9e61980757169c35bf22281b660b5c755b6cb13d08d29d2", + "zh:25b86bf7b9678371d8573983954c571696f3e64a3967133be3b835da36307106", + "zh:49921cff4f26a49bafada60cd07dabb52c5eb35231059ed928a4f4722e269c82", + "zh:4b986166531f9fd1289f01d8220519443e74888a21da512c1b841b006dad6215", + "zh:53fb65b2ca4df637f03e4748a100a7d7fc77249e307c03e294d6259cec0310f6", + "zh:5c0d021a387ca4e2a5a01da009746a08c45f08e971c10d9bda54539d7264d671", + "zh:600043f2b20dc5a45275e43f175c19fe8b6e8e9557a0c884aef018f1f63de90e", + "zh:a0284f6f38912f67bb4cb7829fda3fa75be81fea6a9b21119965c2a839430092", + "zh:a7ac0576e2069ef77557042c6b5157ded364fbd355b2f9bf7f5441622424086e", + "zh:c5db0bcafe986868e28cc6225b68b2d1cf4bf631939d260ca845f17a9aa1677d", + "zh:ce620c0eb71b1fdd925828b30cf232a869abccf1c459180f2f991c4166315251", "zh:f569b65999264a9416862bca5cd2a6177d94ccb0424f3a4ef424428912b9cb3c", ] } @@ -92,31 +92,31 @@ provider "registry.terraform.io/hashicorp/random" { } provider "registry.terraform.io/hashicorp/tls" { - version = "4.0.6" - constraints = "4.0.6" + version = "4.1.0" + constraints = "4.1.0" hashes = [ - "h1:/GYlCthGsP6ooHpCFuMkjnuFoBX0xnvCNohf3suVw2A=", - "h1:/sSdjHoiykrPdyBP1JE03V/KDgLXnHZhHcSOYIdDH/A=", - "h1:17Y+vdYNKgphpe1/SU5PBnGuYKEJkJZ7MZCnmAwsAGQ=", - "h1:3hTE3Ifpfh4ogQN60xa3Dw2Cbk2QyK8rJ5Zi2f5cYTo=", - "h1:N7VxdRDiNZoRS9dnXJ+QuKWKn514ahS+U6f9K3cF44s=", - "h1:QAuzEStYipyCgx5On0Rym6EiFfqXnBQOrgUjBY7MIbU=", - "h1:W1r1GqxtFMYVCcqFpN7U8WGjbpvpA/YPcqjZbx5THG8=", - "h1:dYSb3V94K5dDMtrBRLPzBpkMTPn+3cXZ/kIJdtFL+2M=", - "h1:dr3jNQWLXzZ2IJ1XH2XIHScQd4HGKo+7ZoyoEP9hRpY=", - "h1:irxVvxMIETCpSsiJKpu4A3htA0v2ohIkpPNXVt++pio=", - "h1:n3M50qfWfRSpQV9Pwcvuse03pEizqrmYEryxKky4so4=", - "zh:10de0d8af02f2e578101688fd334da3849f56ea91b0d9bd5b1f7a243417fdda8", - "zh:37fc01f8b2bc9d5b055dc3e78bfd1beb7c42cfb776a4c81106e19c8911366297", - "zh:4578ca03d1dd0b7f572d96bd03f744be24c726bfd282173d54b100fd221608bb", - "zh:6c475491d1250050765a91a493ef330adc24689e8837a0f07da5a0e1269e11c1", - "zh:81bde94d53cdababa5b376bbc6947668be4c45ab655de7aa2e8e4736dfd52509", - "zh:abdce260840b7b050c4e401d4f75c7a199fafe58a8b213947a258f75ac18b3e8", - "zh:b754cebfc5184873840f16a642a7c9ef78c34dc246a8ae29e056c79939963c7a", - "zh:c928b66086078f9917aef0eec15982f2e337914c5c4dbc31dd4741403db7eb18", - "zh:cded27bee5f24de6f2ee0cfd1df46a7f88e84aaffc2ecbf3ff7094160f193d50", - "zh:d65eb3867e8f69aaf1b8bb53bd637c99c6b649ba3db16ded50fa9a01076d1a27", - "zh:ecb0c8b528c7a619fa71852bb3fb5c151d47576c5aab2bf3af4db52588722eeb", + "h1:4gd/jiOS0zJxjTd5Q4o/gOp24RxcuwQ/TxwjTYQNPz4=", + "h1:C0J7AsrVHVqnDT9tICDNaKvA9iH6WTLS2EYzCEegpx0=", + "h1:Ka8mEwRFXBabR33iN/WTIEW6RP0z13vFsDlwn11Pf2I=", + "h1:ReNkTkCM64bktu54eGwQc29rhIejMLQsYA6kYNyBWno=", + "h1:UklaKJOCynnEJbpCVN0zJKIJ3SvO7RQJ00/6grBatnw=", + "h1:ZHcr1WIomuU6ZV+dzEwAG1+52JP0e0d/+l7bo3N5p88=", + "h1:eZa3vbx1pbiwnajuKvGWE7jWK+nHQ8lcLc/mO6Rhf4o=", + "h1:iSgnCUoLGMkt31RlflnL09NyjpAH0DX6bb9QBw5IE9Y=", + "h1:uDtqTpFJOseNUlPDx4TT/lXf6ie3CarsimL7sYCiVH4=", + "h1:y9cHrgcuaZt592In6xQzz1lx7k/B9EeWrAb8K7QqOgU=", + "h1:zEv9tY1KR5vaLSyp2lkrucNJ+Vq3c+sTFK9GyQGLtFs=", + "zh:14c35d89307988c835a7f8e26f1b83ce771e5f9b41e407f86a644c0152089ac2", + "zh:2fb9fe7a8b5afdbd3e903acb6776ef1be3f2e587fb236a8c60f11a9fa165faa8", + "zh:35808142ef850c0c60dd93dc06b95c747720ed2c40c89031781165f0c2baa2fc", + "zh:35b5dc95bc75f0b3b9c5ce54d4d7600c1ebc96fbb8dfca174536e8bf103c8cdc", + "zh:38aa27c6a6c98f1712aa5cc30011884dc4b128b4073a4a27883374bfa3ec9fac", + "zh:51fb247e3a2e88f0047cb97bb9df7c228254a3b3021c5534e4563b4007e6f882", + "zh:62b981ce491e38d892ba6364d1d0cdaadcee37cc218590e07b310b1dfa34be2d", + "zh:bc8e47efc611924a79f947ce072a9ad698f311d4a60d0b4dfff6758c912b7298", + "zh:c149508bd131765d1bc085c75a870abb314ff5a6d7f5ac1035a8892d686b6297", + "zh:d38d40783503d278b63858978d40e07ac48123a2925e1a6b47e62179c046f87a", "zh:f569b65999264a9416862bca5cd2a6177d94ccb0424f3a4ef424428912b9cb3c", + "zh:fb07f708e3316615f6d218cec198504984c0ce7000b9f1eebff7516e384f4b54", ] } diff --git a/dev-docs/miniconstellation/azure-terraform/main.tf b/dev-docs/miniconstellation/azure-terraform/main.tf index 5afd7e48b..7bf5669d2 100644 --- a/dev-docs/miniconstellation/azure-terraform/main.tf +++ b/dev-docs/miniconstellation/azure-terraform/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { azurerm = { source = "hashicorp/azurerm" - version = "4.26.0" + version = "4.27.0" } random = { source = "hashicorp/random" @@ -10,7 +10,7 @@ terraform { } tls = { source = "hashicorp/tls" - version = "4.0.6" + version = "4.1.0" } cloudinit = { source = "hashicorp/cloudinit" diff --git a/e2e/miniconstellation/.terraform.lock.hcl b/e2e/miniconstellation/.terraform.lock.hcl index ba8895a2d..055f3180e 100644 --- a/e2e/miniconstellation/.terraform.lock.hcl +++ b/e2e/miniconstellation/.terraform.lock.hcl @@ -2,31 +2,31 @@ # Manual edits may be lost in future updates. provider "registry.terraform.io/hashicorp/azurerm" { - version = "4.26.0" - constraints = "4.26.0" + version = "4.27.0" + constraints = "4.27.0" hashes = [ - "h1:4u1kyA8Osv6H0LGarotaTHYYoLzA6pppkDe3r7WfiGk=", - "h1:5H50iSplSH5MTm3bYhus5iLK16MfXrSk7du854A+DGA=", - "h1:Bh70KRHeGuPkrJB764Xq9ikJOZmNSa8j/GehiMlHWSs=", - "h1:IZrN6ykVO4aiCjvKHwF4vKHkWpqjGNREKO2iPs4kO1w=", - "h1:VXqu52kAZEQXxly8+RoXrdpzfxlp+yJA2GBrRXrpenY=", - "h1:Vdylhj5W0M+J62bOOdvVUlmGB7M5TfaNRcThdb8ydcc=", - "h1:aDlCe/5J3dYrHZXURQxZM9mdCr29rJemJee6BdWTg94=", - "h1:hUD8zA28MYrlbtAa1Wyz9HINt0OD5PxiRF86hjHZ5HM=", - "h1:sIOsHg7I0ZS3QBR1OrFH7RHQMxo0E0udsl2Ii59O2Js=", - "h1:v5WNL753ytgJoMMZqsA4pVyRPUMipAPXHsinP9WYZ9g=", - "h1:vpOwIlkeCbbLItUkgHGgl9qDkKFWzRadXLfy5BlEraE=", - "zh:0e381bace81028596d60e253bc320bf62d00ae2ec207d7c7e70cdbec5f543334", - "zh:32c8cf70e476a4d0e0a2d4cb94b4a4e95c287c5972ca1e8c0f37dc629fbe31cb", - "zh:568ebaa4c66fc668dc14c8ff323e47fc7b2ac3b5a5d9eec612de2b6a30164f4c", - "zh:596c218810ffb85bc7224574b6ba6dbab9295bfa7490eac98c5ff88beae75710", - "zh:75a0e5b60f24684d62944714deb1c790b17c8d4acc93b5cdb45a8187d887b7f1", - "zh:7d2abea6ab66a08fed7d1ab8d4f3a8344fe7e2ac76d7409a3e40e8c066df6f22", - "zh:7f4db75991fd610b2c0306226e5e1916d4b633cdb0126bc78951dce2365b3418", - "zh:95fe307defb6e0dc172855fa597140f3da96655b3c558c140ae51a4a6077f58d", - "zh:ae07cdd3c658c0e24d45f1cfadf8b085b18981bcd72a20093ce3f042ed0adf3f", - "zh:d2a471b9e42499a7247f873aebd5cbc8df0c6691f02a5c9b556aa00045c06869", - "zh:e0299c0f6eae2b1c935f552f76fc49a2e61975eeda9410e3920a004b74d9e750", + "h1:/siiXbMpe2dyybB+a+3sglgC0fqgcwTIbpQbOTg6hnw=", + "h1:2LGw0R82Sed+v5O3+GKLBP/s/wB+rwjG0hGMeW07Mb0=", + "h1:2fs47aLDaEm93ANXXVRdTjlbUBmFBZRsFjyshKoPE3o=", + "h1:LGcjQ6+b+1am/E3u4N2G2+n3yVZrEsjW8DVQ4rMiWCs=", + "h1:ZNq+aXF3EFrQTaO1lxTZfGQhD/9nA1tcFN+HCx9jPGc=", + "h1:ammVs7Gcf8CxMZb/rjvmE3/YuW28DZ34BoWqMq9nvcQ=", + "h1:blf243zIVL7XojJI5rjyMXBwR4cjq4QcyRtIDrSanQs=", + "h1:hSh710nvwI0hStJ+iW9y6YiVKt8aUjOBWb3oshjlQ4M=", + "h1:hmAzHk4XVbrGQ5iJJj1QdFx0aWNW9Hjh+GIE6S8G5I8=", + "h1:nvIa9Z9GdI3/J7U4oMR2w/h/JZ66M1ozUPh/jHn5pXU=", + "h1:sVv383rmZlQYdIPkdSjbTGPi5Yu/Bxm/qRXZUYqvWcg=", + "zh:0c69edea1995bd3bd9e61980757169c35bf22281b660b5c755b6cb13d08d29d2", + "zh:25b86bf7b9678371d8573983954c571696f3e64a3967133be3b835da36307106", + "zh:49921cff4f26a49bafada60cd07dabb52c5eb35231059ed928a4f4722e269c82", + "zh:4b986166531f9fd1289f01d8220519443e74888a21da512c1b841b006dad6215", + "zh:53fb65b2ca4df637f03e4748a100a7d7fc77249e307c03e294d6259cec0310f6", + "zh:5c0d021a387ca4e2a5a01da009746a08c45f08e971c10d9bda54539d7264d671", + "zh:600043f2b20dc5a45275e43f175c19fe8b6e8e9557a0c884aef018f1f63de90e", + "zh:a0284f6f38912f67bb4cb7829fda3fa75be81fea6a9b21119965c2a839430092", + "zh:a7ac0576e2069ef77557042c6b5157ded364fbd355b2f9bf7f5441622424086e", + "zh:c5db0bcafe986868e28cc6225b68b2d1cf4bf631939d260ca845f17a9aa1677d", + "zh:ce620c0eb71b1fdd925828b30cf232a869abccf1c459180f2f991c4166315251", "zh:f569b65999264a9416862bca5cd2a6177d94ccb0424f3a4ef424428912b9cb3c", ] } @@ -62,31 +62,31 @@ provider "registry.terraform.io/hashicorp/cloudinit" { } provider "registry.terraform.io/hashicorp/tls" { - version = "4.0.6" - constraints = "4.0.6" + version = "4.1.0" + constraints = "4.1.0" hashes = [ - "h1:/GYlCthGsP6ooHpCFuMkjnuFoBX0xnvCNohf3suVw2A=", - "h1:/sSdjHoiykrPdyBP1JE03V/KDgLXnHZhHcSOYIdDH/A=", - "h1:17Y+vdYNKgphpe1/SU5PBnGuYKEJkJZ7MZCnmAwsAGQ=", - "h1:3hTE3Ifpfh4ogQN60xa3Dw2Cbk2QyK8rJ5Zi2f5cYTo=", - "h1:N7VxdRDiNZoRS9dnXJ+QuKWKn514ahS+U6f9K3cF44s=", - "h1:QAuzEStYipyCgx5On0Rym6EiFfqXnBQOrgUjBY7MIbU=", - "h1:W1r1GqxtFMYVCcqFpN7U8WGjbpvpA/YPcqjZbx5THG8=", - "h1:dYSb3V94K5dDMtrBRLPzBpkMTPn+3cXZ/kIJdtFL+2M=", - "h1:dr3jNQWLXzZ2IJ1XH2XIHScQd4HGKo+7ZoyoEP9hRpY=", - "h1:irxVvxMIETCpSsiJKpu4A3htA0v2ohIkpPNXVt++pio=", - "h1:n3M50qfWfRSpQV9Pwcvuse03pEizqrmYEryxKky4so4=", - "zh:10de0d8af02f2e578101688fd334da3849f56ea91b0d9bd5b1f7a243417fdda8", - "zh:37fc01f8b2bc9d5b055dc3e78bfd1beb7c42cfb776a4c81106e19c8911366297", - "zh:4578ca03d1dd0b7f572d96bd03f744be24c726bfd282173d54b100fd221608bb", - "zh:6c475491d1250050765a91a493ef330adc24689e8837a0f07da5a0e1269e11c1", - "zh:81bde94d53cdababa5b376bbc6947668be4c45ab655de7aa2e8e4736dfd52509", - "zh:abdce260840b7b050c4e401d4f75c7a199fafe58a8b213947a258f75ac18b3e8", - "zh:b754cebfc5184873840f16a642a7c9ef78c34dc246a8ae29e056c79939963c7a", - "zh:c928b66086078f9917aef0eec15982f2e337914c5c4dbc31dd4741403db7eb18", - "zh:cded27bee5f24de6f2ee0cfd1df46a7f88e84aaffc2ecbf3ff7094160f193d50", - "zh:d65eb3867e8f69aaf1b8bb53bd637c99c6b649ba3db16ded50fa9a01076d1a27", - "zh:ecb0c8b528c7a619fa71852bb3fb5c151d47576c5aab2bf3af4db52588722eeb", + "h1:4gd/jiOS0zJxjTd5Q4o/gOp24RxcuwQ/TxwjTYQNPz4=", + "h1:C0J7AsrVHVqnDT9tICDNaKvA9iH6WTLS2EYzCEegpx0=", + "h1:Ka8mEwRFXBabR33iN/WTIEW6RP0z13vFsDlwn11Pf2I=", + "h1:ReNkTkCM64bktu54eGwQc29rhIejMLQsYA6kYNyBWno=", + "h1:UklaKJOCynnEJbpCVN0zJKIJ3SvO7RQJ00/6grBatnw=", + "h1:ZHcr1WIomuU6ZV+dzEwAG1+52JP0e0d/+l7bo3N5p88=", + "h1:eZa3vbx1pbiwnajuKvGWE7jWK+nHQ8lcLc/mO6Rhf4o=", + "h1:iSgnCUoLGMkt31RlflnL09NyjpAH0DX6bb9QBw5IE9Y=", + "h1:uDtqTpFJOseNUlPDx4TT/lXf6ie3CarsimL7sYCiVH4=", + "h1:y9cHrgcuaZt592In6xQzz1lx7k/B9EeWrAb8K7QqOgU=", + "h1:zEv9tY1KR5vaLSyp2lkrucNJ+Vq3c+sTFK9GyQGLtFs=", + "zh:14c35d89307988c835a7f8e26f1b83ce771e5f9b41e407f86a644c0152089ac2", + "zh:2fb9fe7a8b5afdbd3e903acb6776ef1be3f2e587fb236a8c60f11a9fa165faa8", + "zh:35808142ef850c0c60dd93dc06b95c747720ed2c40c89031781165f0c2baa2fc", + "zh:35b5dc95bc75f0b3b9c5ce54d4d7600c1ebc96fbb8dfca174536e8bf103c8cdc", + "zh:38aa27c6a6c98f1712aa5cc30011884dc4b128b4073a4a27883374bfa3ec9fac", + "zh:51fb247e3a2e88f0047cb97bb9df7c228254a3b3021c5534e4563b4007e6f882", + "zh:62b981ce491e38d892ba6364d1d0cdaadcee37cc218590e07b310b1dfa34be2d", + "zh:bc8e47efc611924a79f947ce072a9ad698f311d4a60d0b4dfff6758c912b7298", + "zh:c149508bd131765d1bc085c75a870abb314ff5a6d7f5ac1035a8892d686b6297", + "zh:d38d40783503d278b63858978d40e07ac48123a2925e1a6b47e62179c046f87a", "zh:f569b65999264a9416862bca5cd2a6177d94ccb0424f3a4ef424428912b9cb3c", + "zh:fb07f708e3316615f6d218cec198504984c0ce7000b9f1eebff7516e384f4b54", ] } diff --git a/e2e/miniconstellation/main.tf b/e2e/miniconstellation/main.tf index 0007d12ac..77db49c2a 100644 --- a/e2e/miniconstellation/main.tf +++ b/e2e/miniconstellation/main.tf @@ -2,11 +2,11 @@ terraform { required_providers { azurerm = { source = "hashicorp/azurerm" - version = "4.26.0" + version = "4.27.0" } tls = { source = "hashicorp/tls" - version = "4.0.6" + version = "4.1.0" } cloudinit = { source = "hashicorp/cloudinit" diff --git a/terraform-provider-constellation/examples/full/aws/main.tf b/terraform-provider-constellation/examples/full/aws/main.tf index 51bccc71f..8c1671267 100644 --- a/terraform-provider-constellation/examples/full/aws/main.tf +++ b/terraform-provider-constellation/examples/full/aws/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { constellation = { source = "edgelesssys/constellation" - version = "2.22.0" // replace with the version you want to use + version = "2.23.0" // replace with the version you want to use } random = { source = "hashicorp/random" diff --git a/terraform-provider-constellation/examples/full/azure/main.tf b/terraform-provider-constellation/examples/full/azure/main.tf index 817a12db0..3bab0d94d 100644 --- a/terraform-provider-constellation/examples/full/azure/main.tf +++ b/terraform-provider-constellation/examples/full/azure/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { constellation = { source = "edgelesssys/constellation" - version = "2.22.0" // replace with the version you want to use + version = "2.23.0" // replace with the version you want to use } random = { source = "hashicorp/random" diff --git a/terraform-provider-constellation/examples/full/gcp/main.tf b/terraform-provider-constellation/examples/full/gcp/main.tf index cc11c85eb..01a05350d 100644 --- a/terraform-provider-constellation/examples/full/gcp/main.tf +++ b/terraform-provider-constellation/examples/full/gcp/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { constellation = { source = "edgelesssys/constellation" - version = "2.22.0" // replace with the version you want to use + version = "2.23.0" // replace with the version you want to use } random = { source = "hashicorp/random" diff --git a/terraform-provider-constellation/examples/full/stackit/main.tf b/terraform-provider-constellation/examples/full/stackit/main.tf index 577dc29bb..90e239fc6 100644 --- a/terraform-provider-constellation/examples/full/stackit/main.tf +++ b/terraform-provider-constellation/examples/full/stackit/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { constellation = { source = "edgelesssys/constellation" - version = "2.22.0" // replace with the version you want to use + version = "2.23.0" // replace with the version you want to use } random = { source = "hashicorp/random" diff --git a/terraform/infrastructure/aws/.terraform.lock.hcl b/terraform/infrastructure/aws/.terraform.lock.hcl index 1ff8d5682..ffda752a4 100644 --- a/terraform/infrastructure/aws/.terraform.lock.hcl +++ b/terraform/infrastructure/aws/.terraform.lock.hcl @@ -2,38 +2,38 @@ # Manual edits may be lost in future updates. provider "registry.terraform.io/hashicorp/aws" { - version = "5.95.0" - constraints = "5.95.0" + version = "5.97.0" + constraints = "5.97.0" hashes = [ - "h1:5TSx6DqOf1wDl94VnmFBd0LS7rj9WeNLzhEH5OR91lQ=", - "h1:6a/u1G0pYpKuXlYd4rBiY1MOf/2/u+lsXrqVKX+cyWw=", - "h1:EKaysIz3TwN9w2m1qzkYcv0zXjY0poZIb5LqfJ46MYo=", - "h1:Ewpt0MOWXnzzSTurMzbPUrx8aks4AZd0UCPlshpTvAg=", - "h1:M8cw3yigrk0C73kOegK8QUNWl07tt6N5wrMXrcXvklY=", - "h1:PUug/LLWa4GM08rXqnmCVUXj8ibCTvQxgvawhat3bMo=", - "h1:jRq8sU+/pFJX179VHfTXeZP+AfjWboeS0T1RgalPTrs=", - "h1:lvkTzjc/hlMC55xL+3H2yhRCnrlUCij9gejKOAm62OQ=", - "h1:ncMkoXvHvWQqgH1hTdsc+rEmdgcldezZvc1/uVuCOnE=", - "h1:pus7tQ5/UchkIkCRh9FriM9AtTIn1k7ZbN0lr7xXCio=", - "h1:uMhXkw9xETFOHIPc0IYKK6KAMyX3oet2QyJuzBWKlKk=", - "h1:vWiNRFP91pk3d8cbm9JHBwCG3MDqYVXClH9TpT3bh+U=", - "h1:wTc87U018nb3IUMvnKeYOZh8zFU2qGPAzHE4Yww4weo=", - "h1:wiDMUsumuHQ8CynAX9BPkHmSwG24vZ/3noX/NtVlg7k=", - "zh:20aac8c95edd444e659f235d19fa6af9b259c5a70fce19d400539ee88687e7d4", - "zh:29c55846fadd19dde0c5108f74d507c296d6c37cabdd466a96d3721a7c261743", - "zh:325fa5cb42d58c9203c279450863c49e534672f7101c067af465f9d7f4be3be5", - "zh:4f18c643584f7ba554399c0db3dd1c81629dfc2508a8777890f9f3b80b5213b7", - "zh:561e38e9cc6f0be5470c187ea8d51047c4133d9cb74cc1c364a9ebe41f40a06b", - "zh:6ec2cceed96ca5e47591ef11686614c663b05e112a814d24246a2739066577b6", - "zh:710a227c02b8a50f75a82a7f063d2416e85783e02ed91bb22cc12e7a8e11a3cf", - "zh:97a2f5e9bf4cf9a38274eddb7967e1cb4e5b04960c7da3603d9b1c15e18b8626", + "h1:0cMARQKxeJIHYi+p1Yg391n3oytz92H0/E/gdTSo1vg=", + "h1:2vyaumyNsiPVqJsMQwaSbrrssj6HcJVspxJawhu0UsU=", + "h1:7S6mkqyB8tdNhgukHGMZEbEpkp0uGmBAuNB/u9cSXss=", + "h1:953uFkvlqGOHtO6j+aeJELqmwI5z7uV28TnkKYy6pSA=", + "h1:BEBRvS6L1361geJqMvEG5edra5NDbYO1X7LpzKtEl4s=", + "h1:GDDvO45gw0VNyoEy6ShUvfqQl8P5tfxiSej3638yBqo=", + "h1:MFzR9nx3IOChf9ctdlJiSVA5Wr+fzUs5Yyr/xo5XKT4=", + "h1:U4C3lmRwLC8WbE9bJ2/iKLkxHRZga48Elto/FelLzDc=", + "h1:WbQUOeVoJXKb9glRLC7pRYUGX5nS7dkpYt5gmjfjYe0=", + "h1:WwuqNl8roShq7eOWRKLd6FDFRrr90XwEBVDp+7/9MWU=", + "h1:Y60/O4cEWdXZhV5Yq3pZ1CEE/3aCJYdNj3s13KyjtMs=", + "h1:lI0I9GziJsdymNBcj+MJloqwD8fbogJw3EiR60j5FYU=", + "h1:rIcRZfPZXOp3lUPM+TVqvO2JTWOqUuzQ7DDQ3wb9q60=", + "h1:rUDE0OgA+6IiEA+w0cPp3/QQNH4SpjFjYcQ6p7byKS4=", + "zh:02790ad98b767d8f24d28e8be623f348bcb45590205708334d52de2fb14f5a95", + "zh:088b4398a161e45762dc28784fcc41c4fa95bd6549cb708b82de577f2d39ffc7", + "zh:0c381a457b7af391c43fc0167919443f6105ad2702bde4d02ddea9fd7c9d3539", + "zh:1a4b57a5043dcca64d8b8bae8b30ef4f6b98ed2144f792f39c4e816d3f1e2c56", + "zh:1bf00a67f39e67664337bde065180d41d952242801ebcd1c777061d4ffaa1cc1", + "zh:24c549f53d6bd022af31426d3e78f21264d8a72409821669e7fd41966ae68b2b", + "zh:3abda50bbddb35d86081fe39522e995280aea7f004582c4af22112c03ac8b375", + "zh:7388ed7f21ce2eb46bd9066626ce5f3e2a5705f67f643acce8ae71972f66eaf6", + "zh:96740f2ff94e5df2b2d29a5035a1a1026fe821f61712b2099b224fb2c2277663", "zh:9b12af85486a96aedd8d7984b0ff811a4b42e3d88dad1a3fb4c0b580d04fa425", - "zh:bf6bfb01fff8226d86c1b219d67cd96f37bb9312b17d00340e6ff00dda2dbe82", - "zh:cba74d606149cbaaa8dfb69f369f2496b851643a879adc24b11515fcece42b66", - "zh:d5a2c36739cab677a48f4856958c96be6f018ff0da50d233ca93a3a21aaceca1", - "zh:df5d1466144852fe5da4af0628db6f02b5186c59f683e5085705d9b90cacfbc0", - "zh:f82d96b45983b3c73b78dced9e344512b7a9adb06e8c1e3e4f422605efbb756d", - "zh:fb523f787077270059a8f3ab52c0fc56257c0b3a06f0219be247c8b15ff0ca2a", + "zh:9f399f8e8683a3a3a6d63a41c7c3a5a5f266eedef40ea69eba75bacf03699879", + "zh:bcf2b288d4706ebd198f75d2159663d657535483331107f2cdef381f10688baf", + "zh:cc76c8a9fc3bad05a8779c1f80fe8c388734f1ec1dd0affa863343490527b466", + "zh:de4359cf1b057bfe7a563be93829ec64bf72e7a2b85a72d075238081ef5eb1db", + "zh:e208fa77051a1f9fa1eff6c5c58aabdcab0de1695b97cdea7b8dd81df3e0ed73", ] } diff --git a/terraform/infrastructure/aws/main.tf b/terraform/infrastructure/aws/main.tf index 4e2f43ddb..1c7ba9afd 100644 --- a/terraform/infrastructure/aws/main.tf +++ b/terraform/infrastructure/aws/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { aws = { source = "hashicorp/aws" - version = "5.95.0" + version = "5.97.0" } random = { source = "hashicorp/random" diff --git a/terraform/infrastructure/aws/modules/instance_group/main.tf b/terraform/infrastructure/aws/modules/instance_group/main.tf index 7510f358b..071b4dc3f 100644 --- a/terraform/infrastructure/aws/modules/instance_group/main.tf +++ b/terraform/infrastructure/aws/modules/instance_group/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { aws = { source = "hashicorp/aws" - version = "5.95.0" + version = "5.97.0" } random = { source = "hashicorp/random" diff --git a/terraform/infrastructure/aws/modules/jump_host/main.tf b/terraform/infrastructure/aws/modules/jump_host/main.tf index f88f1ecc6..2dc8b9e94 100644 --- a/terraform/infrastructure/aws/modules/jump_host/main.tf +++ b/terraform/infrastructure/aws/modules/jump_host/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { aws = { source = "hashicorp/aws" - version = "5.95.0" + version = "5.97.0" } } } diff --git a/terraform/infrastructure/aws/modules/load_balancer_target/main.tf b/terraform/infrastructure/aws/modules/load_balancer_target/main.tf index 02dc2f08f..132d12f1c 100644 --- a/terraform/infrastructure/aws/modules/load_balancer_target/main.tf +++ b/terraform/infrastructure/aws/modules/load_balancer_target/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { aws = { source = "hashicorp/aws" - version = "5.95.0" + version = "5.97.0" } } } diff --git a/terraform/infrastructure/aws/modules/public_private_subnet/main.tf b/terraform/infrastructure/aws/modules/public_private_subnet/main.tf index c3e8b19ee..e972fa937 100644 --- a/terraform/infrastructure/aws/modules/public_private_subnet/main.tf +++ b/terraform/infrastructure/aws/modules/public_private_subnet/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { aws = { source = "hashicorp/aws" - version = "5.95.0" + version = "5.97.0" } } } diff --git a/terraform/infrastructure/azure/.terraform.lock.hcl b/terraform/infrastructure/azure/.terraform.lock.hcl index f769b5b5c..726e0edba 100644 --- a/terraform/infrastructure/azure/.terraform.lock.hcl +++ b/terraform/infrastructure/azure/.terraform.lock.hcl @@ -2,31 +2,31 @@ # Manual edits may be lost in future updates. provider "registry.terraform.io/hashicorp/azurerm" { - version = "4.26.0" - constraints = "4.26.0" + version = "4.27.0" + constraints = "4.27.0" hashes = [ - "h1:4u1kyA8Osv6H0LGarotaTHYYoLzA6pppkDe3r7WfiGk=", - "h1:5H50iSplSH5MTm3bYhus5iLK16MfXrSk7du854A+DGA=", - "h1:Bh70KRHeGuPkrJB764Xq9ikJOZmNSa8j/GehiMlHWSs=", - "h1:IZrN6ykVO4aiCjvKHwF4vKHkWpqjGNREKO2iPs4kO1w=", - "h1:VXqu52kAZEQXxly8+RoXrdpzfxlp+yJA2GBrRXrpenY=", - "h1:Vdylhj5W0M+J62bOOdvVUlmGB7M5TfaNRcThdb8ydcc=", - "h1:aDlCe/5J3dYrHZXURQxZM9mdCr29rJemJee6BdWTg94=", - "h1:hUD8zA28MYrlbtAa1Wyz9HINt0OD5PxiRF86hjHZ5HM=", - "h1:sIOsHg7I0ZS3QBR1OrFH7RHQMxo0E0udsl2Ii59O2Js=", - "h1:v5WNL753ytgJoMMZqsA4pVyRPUMipAPXHsinP9WYZ9g=", - "h1:vpOwIlkeCbbLItUkgHGgl9qDkKFWzRadXLfy5BlEraE=", - "zh:0e381bace81028596d60e253bc320bf62d00ae2ec207d7c7e70cdbec5f543334", - "zh:32c8cf70e476a4d0e0a2d4cb94b4a4e95c287c5972ca1e8c0f37dc629fbe31cb", - "zh:568ebaa4c66fc668dc14c8ff323e47fc7b2ac3b5a5d9eec612de2b6a30164f4c", - "zh:596c218810ffb85bc7224574b6ba6dbab9295bfa7490eac98c5ff88beae75710", - "zh:75a0e5b60f24684d62944714deb1c790b17c8d4acc93b5cdb45a8187d887b7f1", - "zh:7d2abea6ab66a08fed7d1ab8d4f3a8344fe7e2ac76d7409a3e40e8c066df6f22", - "zh:7f4db75991fd610b2c0306226e5e1916d4b633cdb0126bc78951dce2365b3418", - "zh:95fe307defb6e0dc172855fa597140f3da96655b3c558c140ae51a4a6077f58d", - "zh:ae07cdd3c658c0e24d45f1cfadf8b085b18981bcd72a20093ce3f042ed0adf3f", - "zh:d2a471b9e42499a7247f873aebd5cbc8df0c6691f02a5c9b556aa00045c06869", - "zh:e0299c0f6eae2b1c935f552f76fc49a2e61975eeda9410e3920a004b74d9e750", + "h1:/siiXbMpe2dyybB+a+3sglgC0fqgcwTIbpQbOTg6hnw=", + "h1:2LGw0R82Sed+v5O3+GKLBP/s/wB+rwjG0hGMeW07Mb0=", + "h1:2fs47aLDaEm93ANXXVRdTjlbUBmFBZRsFjyshKoPE3o=", + "h1:LGcjQ6+b+1am/E3u4N2G2+n3yVZrEsjW8DVQ4rMiWCs=", + "h1:ZNq+aXF3EFrQTaO1lxTZfGQhD/9nA1tcFN+HCx9jPGc=", + "h1:ammVs7Gcf8CxMZb/rjvmE3/YuW28DZ34BoWqMq9nvcQ=", + "h1:blf243zIVL7XojJI5rjyMXBwR4cjq4QcyRtIDrSanQs=", + "h1:hSh710nvwI0hStJ+iW9y6YiVKt8aUjOBWb3oshjlQ4M=", + "h1:hmAzHk4XVbrGQ5iJJj1QdFx0aWNW9Hjh+GIE6S8G5I8=", + "h1:nvIa9Z9GdI3/J7U4oMR2w/h/JZ66M1ozUPh/jHn5pXU=", + "h1:sVv383rmZlQYdIPkdSjbTGPi5Yu/Bxm/qRXZUYqvWcg=", + "zh:0c69edea1995bd3bd9e61980757169c35bf22281b660b5c755b6cb13d08d29d2", + "zh:25b86bf7b9678371d8573983954c571696f3e64a3967133be3b835da36307106", + "zh:49921cff4f26a49bafada60cd07dabb52c5eb35231059ed928a4f4722e269c82", + "zh:4b986166531f9fd1289f01d8220519443e74888a21da512c1b841b006dad6215", + "zh:53fb65b2ca4df637f03e4748a100a7d7fc77249e307c03e294d6259cec0310f6", + "zh:5c0d021a387ca4e2a5a01da009746a08c45f08e971c10d9bda54539d7264d671", + "zh:600043f2b20dc5a45275e43f175c19fe8b6e8e9557a0c884aef018f1f63de90e", + "zh:a0284f6f38912f67bb4cb7829fda3fa75be81fea6a9b21119965c2a839430092", + "zh:a7ac0576e2069ef77557042c6b5157ded364fbd355b2f9bf7f5441622424086e", + "zh:c5db0bcafe986868e28cc6225b68b2d1cf4bf631939d260ca845f17a9aa1677d", + "zh:ce620c0eb71b1fdd925828b30cf232a869abccf1c459180f2f991c4166315251", "zh:f569b65999264a9416862bca5cd2a6177d94ccb0424f3a4ef424428912b9cb3c", ] } diff --git a/terraform/infrastructure/azure/main.tf b/terraform/infrastructure/azure/main.tf index 1fbf09e0b..a94a1cd94 100644 --- a/terraform/infrastructure/azure/main.tf +++ b/terraform/infrastructure/azure/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { azurerm = { source = "hashicorp/azurerm" - version = "4.26.0" + version = "4.27.0" } random = { source = "hashicorp/random" diff --git a/terraform/infrastructure/azure/modules/load_balancer_backend/main.tf b/terraform/infrastructure/azure/modules/load_balancer_backend/main.tf index c4ca0792e..44e279bc6 100644 --- a/terraform/infrastructure/azure/modules/load_balancer_backend/main.tf +++ b/terraform/infrastructure/azure/modules/load_balancer_backend/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { azurerm = { source = "hashicorp/azurerm" - version = "4.26.0" + version = "4.27.0" } } } diff --git a/terraform/infrastructure/azure/modules/scale_set/main.tf b/terraform/infrastructure/azure/modules/scale_set/main.tf index bd491e73e..7782000ef 100644 --- a/terraform/infrastructure/azure/modules/scale_set/main.tf +++ b/terraform/infrastructure/azure/modules/scale_set/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { azurerm = { source = "hashicorp/azurerm" - version = "4.26.0" + version = "4.27.0" } random = { source = "hashicorp/random" diff --git a/terraform/infrastructure/gcp/.terraform.lock.hcl b/terraform/infrastructure/gcp/.terraform.lock.hcl index efea701fe..f377ab6cd 100644 --- a/terraform/infrastructure/gcp/.terraform.lock.hcl +++ b/terraform/infrastructure/gcp/.terraform.lock.hcl @@ -2,31 +2,31 @@ # Manual edits may be lost in future updates. provider "registry.terraform.io/hashicorp/google" { - version = "6.31.0" - constraints = "6.31.0" + version = "6.33.0" + constraints = "6.33.0" hashes = [ - "h1:37jDrJfbBxQP2NVp1bwFrnh2JJvOusqAX4AQIdVheDw=", - "h1:5wON4dRQ/EGNj7SnFdHJbwZ5AUvRBnTI0S9MqTIcTQQ=", - "h1:6dqiR31kt8b6NnTEv24P02hTRKiTpCbKj9EewHjhQnQ=", - "h1:BIXjetIoq8O5bUh5rr6gWInLu0tLvsXJMa71TfUfvz8=", - "h1:Lx6Orp2Z7j+vvw6p+2y8FyzXEeFIshdwEh56jVGXqfk=", - "h1:WLPBPwWmIptudvmZonYyhfCJrHgcw89U8s5ZnikNtbM=", - "h1:YQ9TakehBet+sOpSRdNTnHiRYdZwGUj4015jy9rff4w=", - "h1:e3Ee2h+EWrozdCGgzm6Eq+b4gGe6grrGW37hcLk0S9k=", - "h1:mThKn3jf6kXsHUxevQLUGWD7wXBpopCLMKMI+FlNDow=", - "h1:zE7iocw7XB0EFkh/fOJf9FcPwtw/7JCDfQovev9mtP4=", - "h1:zf3pGXLZTJAe+VP54+hMsCtFF/Nl7MdWOmPMHBdm7eA=", - "zh:030dffef5b97ceb63dc6e48f14287e04ff3ebd468a570977b672fd267859756c", - "zh:2d569126f1fa6bca212c0199de856492f2f2bf55cea3fc2a5b128ad8183332db", - "zh:4ceb4fb9a3b57a696225dda1cb75cc6f211ced1b54fd62471ea8774d3c153be5", - "zh:4cfc47f6e7fe36497eafa81d90f0dbe871f637bc8f4deea3a07e23abdd4072de", - "zh:61c55ba8d382fa92716ff26ffa3ef7549386bd1dd2d27f52d169ebbdc40b2ccf", - "zh:7204c774e6b34651c410a333ec6217aa6976c6b88db0cdf58a486aaf4827d1e6", - "zh:82974bf17ea5036a2ae1b045459e7bc485372e3aeb2b7369b6e8b57b3b632aaa", - "zh:8da1cffc3ccc44e2bee2c8a9137cab9369e2e0ee7dc8a530672a37e25971d545", - "zh:c60ebe0e8a074bc679b13a9cf2a1b2e53daffa81eee41d68b9a2dcb9587a2eb9", - "zh:c7ae96c4f57bc1d197faac57913f52c5f5d3d5217bcb21f748cdb245037e0104", - "zh:e24b5bd749ade5089693514509ca95e3e188d9a1d0ee0fb28daf80fd945355ef", + "h1:8Xy1cSwUTCftZTIO3oyYvgFBowa8/HW6Wl46LOYDjoI=", + "h1:AlkT9Eys3pPXY76S2M59nCDnzIue5kTtsbIbLj0bXs8=", + "h1:DEEWZgiDMsh5+a1ovKYKpvZgRC93/1+nURiHrovSm8c=", + "h1:DcahHEtKQIGjIJUvl168KcejcYPTdPytt+Yknct3X6Q=", + "h1:DrsQdtT4+qF+usfEaQjtCBqI+FBMj2Ot6jkJmxEyRmo=", + "h1:Kr/C2M8lMDB2QtcqD0ILwDf9tfvWaF317X0YE3vAnOA=", + "h1:ZUGZ+h/Jg4oW9pza39/p0zrDS/NNiIWkTnjDxhNasMo=", + "h1:boMceijxldXypXsaGn9gLoJSRumDGV+FkmYSxQnZX5I=", + "h1:dE46Z+wn22tD2wsOiiBQBEz1fNQ21pgVVMovqs/7teI=", + "h1:eL6YpveAOaWvd5k6quARhWcckG64OxA8hBn89Xc3CZc=", + "h1:kKjowTW4x4Doc0gjOfZp2l7FJKjsHgCUm6n3l6q5PsI=", + "zh:1bce89797564bc71f8907cdf0e232ed523a403997d663ce82dd61cef468d54d4", + "zh:296eed917e311422470fc7df194b52cd45f5bb26ba92a27e1a2d5716a0c47f7f", + "zh:3a21a1c06ea4c3021a9a9dc40e020ea0596be1c833ba609643366c9a7a04ff23", + "zh:44c7307bf53264b42ae4d1fe1780c6be34d22a16f93b24ba4c9536389f20213a", + "zh:4518f045317222cbcb532db676ac7707bc2fdddbe62a9df2e68e6e6953c9e911", + "zh:4f40f809222142997023eb08c4fc0527d8d0abd27e21b6d2df9a6aba79c672fe", + "zh:6f0bdaebf11e78f24f2036935f49d907eb99283081ecdaef3e3f45eb7562566f", + "zh:93933870c585f32074243a83eee967c5ed5307b825c4f88a80bb9895fc90a2d7", + "zh:ae75d0bfeffc2b461c4f904e84d69c0bec5381f90c6b79c31d23fd0ae20da34e", + "zh:b808692d49208df953a51b74b2ce6343f9d17c881949b9e00afbc245fdcd5aba", + "zh:e69ac3486fd7556792895d50d9ed17e7550cc107731926f98cc2a9e8fa74002d", "zh:f569b65999264a9416862bca5cd2a6177d94ccb0424f3a4ef424428912b9cb3c", ] } diff --git a/terraform/infrastructure/gcp/main.tf b/terraform/infrastructure/gcp/main.tf index 74b4a7499..e2a7a3f09 100644 --- a/terraform/infrastructure/gcp/main.tf +++ b/terraform/infrastructure/gcp/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { google = { source = "hashicorp/google" - version = "6.31.0" + version = "6.33.0" } random = { diff --git a/terraform/infrastructure/gcp/modules/instance_group/main.tf b/terraform/infrastructure/gcp/modules/instance_group/main.tf index 7b1e9da44..f07303dea 100644 --- a/terraform/infrastructure/gcp/modules/instance_group/main.tf +++ b/terraform/infrastructure/gcp/modules/instance_group/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { google = { source = "hashicorp/google" - version = "6.31.0" + version = "6.33.0" } random = { diff --git a/terraform/infrastructure/gcp/modules/internal_load_balancer/main.tf b/terraform/infrastructure/gcp/modules/internal_load_balancer/main.tf index 26556c07b..7ee13409d 100644 --- a/terraform/infrastructure/gcp/modules/internal_load_balancer/main.tf +++ b/terraform/infrastructure/gcp/modules/internal_load_balancer/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { google = { source = "hashicorp/google" - version = "6.31.0" + version = "6.33.0" } } } diff --git a/terraform/infrastructure/gcp/modules/jump_host/main.tf b/terraform/infrastructure/gcp/modules/jump_host/main.tf index f9a733456..9ab602bab 100644 --- a/terraform/infrastructure/gcp/modules/jump_host/main.tf +++ b/terraform/infrastructure/gcp/modules/jump_host/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { google = { source = "hashicorp/google" - version = "6.31.0" + version = "6.33.0" } } } diff --git a/terraform/infrastructure/gcp/modules/loadbalancer/main.tf b/terraform/infrastructure/gcp/modules/loadbalancer/main.tf index 64bf74f5c..37a4082f6 100644 --- a/terraform/infrastructure/gcp/modules/loadbalancer/main.tf +++ b/terraform/infrastructure/gcp/modules/loadbalancer/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { google = { source = "hashicorp/google" - version = "6.31.0" + version = "6.33.0" } } } diff --git a/terraform/infrastructure/iam/aws/.terraform.lock.hcl b/terraform/infrastructure/iam/aws/.terraform.lock.hcl index 1ff8d5682..ffda752a4 100644 --- a/terraform/infrastructure/iam/aws/.terraform.lock.hcl +++ b/terraform/infrastructure/iam/aws/.terraform.lock.hcl @@ -2,38 +2,38 @@ # Manual edits may be lost in future updates. provider "registry.terraform.io/hashicorp/aws" { - version = "5.95.0" - constraints = "5.95.0" + version = "5.97.0" + constraints = "5.97.0" hashes = [ - "h1:5TSx6DqOf1wDl94VnmFBd0LS7rj9WeNLzhEH5OR91lQ=", - "h1:6a/u1G0pYpKuXlYd4rBiY1MOf/2/u+lsXrqVKX+cyWw=", - "h1:EKaysIz3TwN9w2m1qzkYcv0zXjY0poZIb5LqfJ46MYo=", - "h1:Ewpt0MOWXnzzSTurMzbPUrx8aks4AZd0UCPlshpTvAg=", - "h1:M8cw3yigrk0C73kOegK8QUNWl07tt6N5wrMXrcXvklY=", - "h1:PUug/LLWa4GM08rXqnmCVUXj8ibCTvQxgvawhat3bMo=", - "h1:jRq8sU+/pFJX179VHfTXeZP+AfjWboeS0T1RgalPTrs=", - "h1:lvkTzjc/hlMC55xL+3H2yhRCnrlUCij9gejKOAm62OQ=", - "h1:ncMkoXvHvWQqgH1hTdsc+rEmdgcldezZvc1/uVuCOnE=", - "h1:pus7tQ5/UchkIkCRh9FriM9AtTIn1k7ZbN0lr7xXCio=", - "h1:uMhXkw9xETFOHIPc0IYKK6KAMyX3oet2QyJuzBWKlKk=", - "h1:vWiNRFP91pk3d8cbm9JHBwCG3MDqYVXClH9TpT3bh+U=", - "h1:wTc87U018nb3IUMvnKeYOZh8zFU2qGPAzHE4Yww4weo=", - "h1:wiDMUsumuHQ8CynAX9BPkHmSwG24vZ/3noX/NtVlg7k=", - "zh:20aac8c95edd444e659f235d19fa6af9b259c5a70fce19d400539ee88687e7d4", - "zh:29c55846fadd19dde0c5108f74d507c296d6c37cabdd466a96d3721a7c261743", - "zh:325fa5cb42d58c9203c279450863c49e534672f7101c067af465f9d7f4be3be5", - "zh:4f18c643584f7ba554399c0db3dd1c81629dfc2508a8777890f9f3b80b5213b7", - "zh:561e38e9cc6f0be5470c187ea8d51047c4133d9cb74cc1c364a9ebe41f40a06b", - "zh:6ec2cceed96ca5e47591ef11686614c663b05e112a814d24246a2739066577b6", - "zh:710a227c02b8a50f75a82a7f063d2416e85783e02ed91bb22cc12e7a8e11a3cf", - "zh:97a2f5e9bf4cf9a38274eddb7967e1cb4e5b04960c7da3603d9b1c15e18b8626", + "h1:0cMARQKxeJIHYi+p1Yg391n3oytz92H0/E/gdTSo1vg=", + "h1:2vyaumyNsiPVqJsMQwaSbrrssj6HcJVspxJawhu0UsU=", + "h1:7S6mkqyB8tdNhgukHGMZEbEpkp0uGmBAuNB/u9cSXss=", + "h1:953uFkvlqGOHtO6j+aeJELqmwI5z7uV28TnkKYy6pSA=", + "h1:BEBRvS6L1361geJqMvEG5edra5NDbYO1X7LpzKtEl4s=", + "h1:GDDvO45gw0VNyoEy6ShUvfqQl8P5tfxiSej3638yBqo=", + "h1:MFzR9nx3IOChf9ctdlJiSVA5Wr+fzUs5Yyr/xo5XKT4=", + "h1:U4C3lmRwLC8WbE9bJ2/iKLkxHRZga48Elto/FelLzDc=", + "h1:WbQUOeVoJXKb9glRLC7pRYUGX5nS7dkpYt5gmjfjYe0=", + "h1:WwuqNl8roShq7eOWRKLd6FDFRrr90XwEBVDp+7/9MWU=", + "h1:Y60/O4cEWdXZhV5Yq3pZ1CEE/3aCJYdNj3s13KyjtMs=", + "h1:lI0I9GziJsdymNBcj+MJloqwD8fbogJw3EiR60j5FYU=", + "h1:rIcRZfPZXOp3lUPM+TVqvO2JTWOqUuzQ7DDQ3wb9q60=", + "h1:rUDE0OgA+6IiEA+w0cPp3/QQNH4SpjFjYcQ6p7byKS4=", + "zh:02790ad98b767d8f24d28e8be623f348bcb45590205708334d52de2fb14f5a95", + "zh:088b4398a161e45762dc28784fcc41c4fa95bd6549cb708b82de577f2d39ffc7", + "zh:0c381a457b7af391c43fc0167919443f6105ad2702bde4d02ddea9fd7c9d3539", + "zh:1a4b57a5043dcca64d8b8bae8b30ef4f6b98ed2144f792f39c4e816d3f1e2c56", + "zh:1bf00a67f39e67664337bde065180d41d952242801ebcd1c777061d4ffaa1cc1", + "zh:24c549f53d6bd022af31426d3e78f21264d8a72409821669e7fd41966ae68b2b", + "zh:3abda50bbddb35d86081fe39522e995280aea7f004582c4af22112c03ac8b375", + "zh:7388ed7f21ce2eb46bd9066626ce5f3e2a5705f67f643acce8ae71972f66eaf6", + "zh:96740f2ff94e5df2b2d29a5035a1a1026fe821f61712b2099b224fb2c2277663", "zh:9b12af85486a96aedd8d7984b0ff811a4b42e3d88dad1a3fb4c0b580d04fa425", - "zh:bf6bfb01fff8226d86c1b219d67cd96f37bb9312b17d00340e6ff00dda2dbe82", - "zh:cba74d606149cbaaa8dfb69f369f2496b851643a879adc24b11515fcece42b66", - "zh:d5a2c36739cab677a48f4856958c96be6f018ff0da50d233ca93a3a21aaceca1", - "zh:df5d1466144852fe5da4af0628db6f02b5186c59f683e5085705d9b90cacfbc0", - "zh:f82d96b45983b3c73b78dced9e344512b7a9adb06e8c1e3e4f422605efbb756d", - "zh:fb523f787077270059a8f3ab52c0fc56257c0b3a06f0219be247c8b15ff0ca2a", + "zh:9f399f8e8683a3a3a6d63a41c7c3a5a5f266eedef40ea69eba75bacf03699879", + "zh:bcf2b288d4706ebd198f75d2159663d657535483331107f2cdef381f10688baf", + "zh:cc76c8a9fc3bad05a8779c1f80fe8c388734f1ec1dd0affa863343490527b466", + "zh:de4359cf1b057bfe7a563be93829ec64bf72e7a2b85a72d075238081ef5eb1db", + "zh:e208fa77051a1f9fa1eff6c5c58aabdcab0de1695b97cdea7b8dd81df3e0ed73", ] } diff --git a/terraform/infrastructure/iam/aws/main.tf b/terraform/infrastructure/iam/aws/main.tf index 56b274d5f..04cafde89 100644 --- a/terraform/infrastructure/iam/aws/main.tf +++ b/terraform/infrastructure/iam/aws/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { aws = { source = "hashicorp/aws" - version = "5.95.0" + version = "5.97.0" } random = { source = "hashicorp/random" diff --git a/terraform/infrastructure/iam/azure/.terraform.lock.hcl b/terraform/infrastructure/iam/azure/.terraform.lock.hcl index 700ad74d5..05c66a7fa 100644 --- a/terraform/infrastructure/iam/azure/.terraform.lock.hcl +++ b/terraform/infrastructure/iam/azure/.terraform.lock.hcl @@ -32,31 +32,31 @@ provider "registry.terraform.io/hashicorp/azuread" { } provider "registry.terraform.io/hashicorp/azurerm" { - version = "4.26.0" - constraints = "4.26.0" + version = "4.27.0" + constraints = "4.27.0" hashes = [ - "h1:4u1kyA8Osv6H0LGarotaTHYYoLzA6pppkDe3r7WfiGk=", - "h1:5H50iSplSH5MTm3bYhus5iLK16MfXrSk7du854A+DGA=", - "h1:Bh70KRHeGuPkrJB764Xq9ikJOZmNSa8j/GehiMlHWSs=", - "h1:IZrN6ykVO4aiCjvKHwF4vKHkWpqjGNREKO2iPs4kO1w=", - "h1:VXqu52kAZEQXxly8+RoXrdpzfxlp+yJA2GBrRXrpenY=", - "h1:Vdylhj5W0M+J62bOOdvVUlmGB7M5TfaNRcThdb8ydcc=", - "h1:aDlCe/5J3dYrHZXURQxZM9mdCr29rJemJee6BdWTg94=", - "h1:hUD8zA28MYrlbtAa1Wyz9HINt0OD5PxiRF86hjHZ5HM=", - "h1:sIOsHg7I0ZS3QBR1OrFH7RHQMxo0E0udsl2Ii59O2Js=", - "h1:v5WNL753ytgJoMMZqsA4pVyRPUMipAPXHsinP9WYZ9g=", - "h1:vpOwIlkeCbbLItUkgHGgl9qDkKFWzRadXLfy5BlEraE=", - "zh:0e381bace81028596d60e253bc320bf62d00ae2ec207d7c7e70cdbec5f543334", - "zh:32c8cf70e476a4d0e0a2d4cb94b4a4e95c287c5972ca1e8c0f37dc629fbe31cb", - "zh:568ebaa4c66fc668dc14c8ff323e47fc7b2ac3b5a5d9eec612de2b6a30164f4c", - "zh:596c218810ffb85bc7224574b6ba6dbab9295bfa7490eac98c5ff88beae75710", - "zh:75a0e5b60f24684d62944714deb1c790b17c8d4acc93b5cdb45a8187d887b7f1", - "zh:7d2abea6ab66a08fed7d1ab8d4f3a8344fe7e2ac76d7409a3e40e8c066df6f22", - "zh:7f4db75991fd610b2c0306226e5e1916d4b633cdb0126bc78951dce2365b3418", - "zh:95fe307defb6e0dc172855fa597140f3da96655b3c558c140ae51a4a6077f58d", - "zh:ae07cdd3c658c0e24d45f1cfadf8b085b18981bcd72a20093ce3f042ed0adf3f", - "zh:d2a471b9e42499a7247f873aebd5cbc8df0c6691f02a5c9b556aa00045c06869", - "zh:e0299c0f6eae2b1c935f552f76fc49a2e61975eeda9410e3920a004b74d9e750", + "h1:/siiXbMpe2dyybB+a+3sglgC0fqgcwTIbpQbOTg6hnw=", + "h1:2LGw0R82Sed+v5O3+GKLBP/s/wB+rwjG0hGMeW07Mb0=", + "h1:2fs47aLDaEm93ANXXVRdTjlbUBmFBZRsFjyshKoPE3o=", + "h1:LGcjQ6+b+1am/E3u4N2G2+n3yVZrEsjW8DVQ4rMiWCs=", + "h1:ZNq+aXF3EFrQTaO1lxTZfGQhD/9nA1tcFN+HCx9jPGc=", + "h1:ammVs7Gcf8CxMZb/rjvmE3/YuW28DZ34BoWqMq9nvcQ=", + "h1:blf243zIVL7XojJI5rjyMXBwR4cjq4QcyRtIDrSanQs=", + "h1:hSh710nvwI0hStJ+iW9y6YiVKt8aUjOBWb3oshjlQ4M=", + "h1:hmAzHk4XVbrGQ5iJJj1QdFx0aWNW9Hjh+GIE6S8G5I8=", + "h1:nvIa9Z9GdI3/J7U4oMR2w/h/JZ66M1ozUPh/jHn5pXU=", + "h1:sVv383rmZlQYdIPkdSjbTGPi5Yu/Bxm/qRXZUYqvWcg=", + "zh:0c69edea1995bd3bd9e61980757169c35bf22281b660b5c755b6cb13d08d29d2", + "zh:25b86bf7b9678371d8573983954c571696f3e64a3967133be3b835da36307106", + "zh:49921cff4f26a49bafada60cd07dabb52c5eb35231059ed928a4f4722e269c82", + "zh:4b986166531f9fd1289f01d8220519443e74888a21da512c1b841b006dad6215", + "zh:53fb65b2ca4df637f03e4748a100a7d7fc77249e307c03e294d6259cec0310f6", + "zh:5c0d021a387ca4e2a5a01da009746a08c45f08e971c10d9bda54539d7264d671", + "zh:600043f2b20dc5a45275e43f175c19fe8b6e8e9557a0c884aef018f1f63de90e", + "zh:a0284f6f38912f67bb4cb7829fda3fa75be81fea6a9b21119965c2a839430092", + "zh:a7ac0576e2069ef77557042c6b5157ded364fbd355b2f9bf7f5441622424086e", + "zh:c5db0bcafe986868e28cc6225b68b2d1cf4bf631939d260ca845f17a9aa1677d", + "zh:ce620c0eb71b1fdd925828b30cf232a869abccf1c459180f2f991c4166315251", "zh:f569b65999264a9416862bca5cd2a6177d94ccb0424f3a4ef424428912b9cb3c", ] } diff --git a/terraform/infrastructure/iam/azure/main.tf b/terraform/infrastructure/iam/azure/main.tf index ecd6a448f..ede9a0a6a 100644 --- a/terraform/infrastructure/iam/azure/main.tf +++ b/terraform/infrastructure/iam/azure/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { azurerm = { source = "hashicorp/azurerm" - version = "4.26.0" + version = "4.27.0" } azuread = { source = "hashicorp/azuread" diff --git a/terraform/infrastructure/iam/gcp/.terraform.lock.hcl b/terraform/infrastructure/iam/gcp/.terraform.lock.hcl index d3693a98b..edf4c2549 100644 --- a/terraform/infrastructure/iam/gcp/.terraform.lock.hcl +++ b/terraform/infrastructure/iam/gcp/.terraform.lock.hcl @@ -2,31 +2,31 @@ # Manual edits may be lost in future updates. provider "registry.terraform.io/hashicorp/google" { - version = "6.31.0" - constraints = "6.31.0" + version = "6.33.0" + constraints = "6.33.0" hashes = [ - "h1:37jDrJfbBxQP2NVp1bwFrnh2JJvOusqAX4AQIdVheDw=", - "h1:5wON4dRQ/EGNj7SnFdHJbwZ5AUvRBnTI0S9MqTIcTQQ=", - "h1:6dqiR31kt8b6NnTEv24P02hTRKiTpCbKj9EewHjhQnQ=", - "h1:BIXjetIoq8O5bUh5rr6gWInLu0tLvsXJMa71TfUfvz8=", - "h1:Lx6Orp2Z7j+vvw6p+2y8FyzXEeFIshdwEh56jVGXqfk=", - "h1:WLPBPwWmIptudvmZonYyhfCJrHgcw89U8s5ZnikNtbM=", - "h1:YQ9TakehBet+sOpSRdNTnHiRYdZwGUj4015jy9rff4w=", - "h1:e3Ee2h+EWrozdCGgzm6Eq+b4gGe6grrGW37hcLk0S9k=", - "h1:mThKn3jf6kXsHUxevQLUGWD7wXBpopCLMKMI+FlNDow=", - "h1:zE7iocw7XB0EFkh/fOJf9FcPwtw/7JCDfQovev9mtP4=", - "h1:zf3pGXLZTJAe+VP54+hMsCtFF/Nl7MdWOmPMHBdm7eA=", - "zh:030dffef5b97ceb63dc6e48f14287e04ff3ebd468a570977b672fd267859756c", - "zh:2d569126f1fa6bca212c0199de856492f2f2bf55cea3fc2a5b128ad8183332db", - "zh:4ceb4fb9a3b57a696225dda1cb75cc6f211ced1b54fd62471ea8774d3c153be5", - "zh:4cfc47f6e7fe36497eafa81d90f0dbe871f637bc8f4deea3a07e23abdd4072de", - "zh:61c55ba8d382fa92716ff26ffa3ef7549386bd1dd2d27f52d169ebbdc40b2ccf", - "zh:7204c774e6b34651c410a333ec6217aa6976c6b88db0cdf58a486aaf4827d1e6", - "zh:82974bf17ea5036a2ae1b045459e7bc485372e3aeb2b7369b6e8b57b3b632aaa", - "zh:8da1cffc3ccc44e2bee2c8a9137cab9369e2e0ee7dc8a530672a37e25971d545", - "zh:c60ebe0e8a074bc679b13a9cf2a1b2e53daffa81eee41d68b9a2dcb9587a2eb9", - "zh:c7ae96c4f57bc1d197faac57913f52c5f5d3d5217bcb21f748cdb245037e0104", - "zh:e24b5bd749ade5089693514509ca95e3e188d9a1d0ee0fb28daf80fd945355ef", + "h1:8Xy1cSwUTCftZTIO3oyYvgFBowa8/HW6Wl46LOYDjoI=", + "h1:AlkT9Eys3pPXY76S2M59nCDnzIue5kTtsbIbLj0bXs8=", + "h1:DEEWZgiDMsh5+a1ovKYKpvZgRC93/1+nURiHrovSm8c=", + "h1:DcahHEtKQIGjIJUvl168KcejcYPTdPytt+Yknct3X6Q=", + "h1:DrsQdtT4+qF+usfEaQjtCBqI+FBMj2Ot6jkJmxEyRmo=", + "h1:Kr/C2M8lMDB2QtcqD0ILwDf9tfvWaF317X0YE3vAnOA=", + "h1:ZUGZ+h/Jg4oW9pza39/p0zrDS/NNiIWkTnjDxhNasMo=", + "h1:boMceijxldXypXsaGn9gLoJSRumDGV+FkmYSxQnZX5I=", + "h1:dE46Z+wn22tD2wsOiiBQBEz1fNQ21pgVVMovqs/7teI=", + "h1:eL6YpveAOaWvd5k6quARhWcckG64OxA8hBn89Xc3CZc=", + "h1:kKjowTW4x4Doc0gjOfZp2l7FJKjsHgCUm6n3l6q5PsI=", + "zh:1bce89797564bc71f8907cdf0e232ed523a403997d663ce82dd61cef468d54d4", + "zh:296eed917e311422470fc7df194b52cd45f5bb26ba92a27e1a2d5716a0c47f7f", + "zh:3a21a1c06ea4c3021a9a9dc40e020ea0596be1c833ba609643366c9a7a04ff23", + "zh:44c7307bf53264b42ae4d1fe1780c6be34d22a16f93b24ba4c9536389f20213a", + "zh:4518f045317222cbcb532db676ac7707bc2fdddbe62a9df2e68e6e6953c9e911", + "zh:4f40f809222142997023eb08c4fc0527d8d0abd27e21b6d2df9a6aba79c672fe", + "zh:6f0bdaebf11e78f24f2036935f49d907eb99283081ecdaef3e3f45eb7562566f", + "zh:93933870c585f32074243a83eee967c5ed5307b825c4f88a80bb9895fc90a2d7", + "zh:ae75d0bfeffc2b461c4f904e84d69c0bec5381f90c6b79c31d23fd0ae20da34e", + "zh:b808692d49208df953a51b74b2ce6343f9d17c881949b9e00afbc245fdcd5aba", + "zh:e69ac3486fd7556792895d50d9ed17e7550cc107731926f98cc2a9e8fa74002d", "zh:f569b65999264a9416862bca5cd2a6177d94ccb0424f3a4ef424428912b9cb3c", ] } diff --git a/terraform/infrastructure/iam/gcp/main.tf b/terraform/infrastructure/iam/gcp/main.tf index 965bb52d3..ca142b06e 100644 --- a/terraform/infrastructure/iam/gcp/main.tf +++ b/terraform/infrastructure/iam/gcp/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { google = { source = "hashicorp/google" - version = "6.31.0" + version = "6.33.0" } } } diff --git a/terraform/infrastructure/openstack/.terraform.lock.hcl b/terraform/infrastructure/openstack/.terraform.lock.hcl index fdae001ed..86a589448 100644 --- a/terraform/infrastructure/openstack/.terraform.lock.hcl +++ b/terraform/infrastructure/openstack/.terraform.lock.hcl @@ -32,38 +32,38 @@ provider "registry.terraform.io/hashicorp/random" { } provider "registry.terraform.io/stackitcloud/stackit" { - version = "0.50.0" - constraints = "0.50.0" + version = "0.51.0" + constraints = "0.51.0" hashes = [ - "h1:+nxd0zpfc9FzjlWbOqhnjK1NUN1BBivHG5Dk1oCXJmc=", - "h1:2mqbDIA2B6g+TswUk0kI0IqqA7K3pH4L00pyvslqpnc=", - "h1:6dj8W79RUBSJ9wvp+jRa47nWpmKS5B3sqZ6vvi4lpPA=", - "h1:Grtnz3cvRDpgNjg8Q/FtpJEu+lyVxvX/REsnR6q46Po=", - "h1:SqOlaf5eXgXSzoqk3D1KXOSG7hJbtJD6MQarUJgzn2w=", - "h1:TiHjMD5U8HWlHOGIIKNaSdhbrh6kxiYYUseB3HGgVtw=", - "h1:YXQK4Vox0nzIw6u6TTSFLZUqUz+mNHNATh+POwMiI1w=", - "h1:ZScVuJEiFEkTgmS9UY2y2DdUOH9KkElRxD5u8aDR0Ms=", - "h1:eROOJ6WhLgbg8Hhh93Di6wJCBEypA+ZX655mHouj2W8=", - "h1:ew63OYuFkEWEJc22UmbXKh2mPhg+pwbyt+34vDUcTpw=", - "h1:fiMDB8xpgW98hJX2Zf/NNV2miK66po1I4/bHY8UmQ30=", - "h1:iOOaM9RM/fiVhr5p4HWblIDnDrQ6CziirI9ErA5FCTA=", - "h1:uU8/DLvW8tEty0PI2sUMem43IDNSrncHuLaXaEYdGFk=", - "h1:uX+O/0ITKWlfSU5DcZP5p7ofjht/Pyfyf10lpMxsbY0=", + "h1:5UYV1rCmD8XNl/xSwQsHQ2zKN7ccED2+5PuXxRWln+c=", + "h1:62gvzvEhhzOm1cHP1XrD1qd9dqQBDOkMTDQ4qU/Rxu4=", + "h1:EU0+pckjjXLrSz7Z0J/TnLxc0+zyr3qbXTSfDnTtElA=", + "h1:JjVR1/dJEqLoB4TF5Nkv4H4csjyIwuRHKalwzH71abw=", + "h1:UgfM5sdoUpnySBu6QbAxvpX+MQbBT8mhwHpbPFBPaAk=", + "h1:W96oj+eA9B/OrXeLIg9UFSHzBZxk6v4EVxeerXB+2JA=", + "h1:eOPPx/ScpHMU3SDFzDZBHee/7f/5x7TvZxisGTvmfT8=", + "h1:gRMgYk3J20Kq3GBR0L+V1qWh+NG1zdQIkE3VQUbe0qI=", + "h1:iHJmAHQyrRjfy1V6LjJDuv1Af4+L8yB8YIeAeiECv1s=", + "h1:tbWlbAe5SBeccMYM92wY9WuP/VvVtSkNojubRfUKI/U=", + "h1:txfLsQccATH/oFbqfWKOQbFX3KyBnzleE5LDqk75MUY=", + "h1:xEq9g1RuX4WIA3KNHyYgnBfWwY7mNn3yQGlFn/WbX9o=", + "h1:yBML4ZTfTS33BJVugZRA9HMPcAbiDnE/YoxuKzyUm4s=", + "h1:ys4E1krqYqjri7HLIO4mOQgRgR/z33oFhCS0yLI+XJA=", "zh:0dde99e7b343fa01f8eefc378171fb8621bedb20f59157d6cc8e3d46c738105f", - "zh:219d678bc471b3f5030724dcdde6be3f3fa63e911b7c7a0f446b0a0b4e5f48e7", - "zh:4cd09155a09e320b0b68db4ba2971564f3d147c19ad991d6b7e731e26034d91c", - "zh:507c1e24432f0d455ac8b628c37ee20db62e89a6e85508568c2820ba52404786", - "zh:5aa10bfc4baad277a2bc746c83fca19911bb95a5e8821dd46f333bc621cbb453", - "zh:67b55ad1135ca12997b0928cb67973b11ea196299e0cf66e3e0145faec762644", - "zh:6d1d108edcd6794a8839d849e6ea48699875e22afeea7edd38bee3dd56dea7e8", - "zh:7473c28b3781c0d00294d985bd067e753a419ca8e379f91a8f6f2ce4663566ee", - "zh:8d234b24734f950f986322a5f084ca23bfd9b3d9fb7742b54404171cfcabc99e", - "zh:af0804ea918648600cc6300dffce8a7b9115d30dc88db10f962b8e596d1465e1", - "zh:b557940dc6387dc4cce8b100981ccaadac6bc4e6b50c566baf148d67939f8f2e", - "zh:d477f77ce6f807d60069c1efcfa20607088ae7ab91d22805331a7634d84c2d1c", - "zh:d95086e2338ceed511e798a2acc6d5cefdfff1a14f7b47b2d29b4ebc36b77a3a", - "zh:ea0d8d5c9cf7d5871a54dd4786c378dfd9d10416f3c4d0ea4776465e8c562e10", - "zh:f96af7b89dc99745f6a22c0ca2aedb18e10273251b8cbac9e2b1011c68c3c3f9", + "zh:2d920411cbf4976d0fdf0d0d3f0403929b0c1e21ca3c3aa09031651b8bd1f614", + "zh:4067b3b21b50d55485edda9da11fd0df4188a05e02c3bc9332ad24f6a5c977e8", + "zh:46e25c4058e5ff5b321e2f3c23521acba4722b626cb427ed17f970515e3efb8c", + "zh:4bbe1904333a5dc00584915b94271e8482ca06586de4f345d3b1f019057d5dff", + "zh:7480e6d7deb519fc15f28156fe09b201f73c0654944526ac3da3510c902feaa9", + "zh:7868dd37c44423a9bb5b5fbd883171d2c36fd4507f7545de355caffbf20c2b99", + "zh:a5b47602355cb1611673fcb26f972529f5d6fe0e11a47b1b916e610ecb10fc86", + "zh:aefa5b9a0eefecac09e10c8c4d0ff2109b9a9eabd163fa34b48116f7a205b66f", + "zh:c6a5b0737198add8bed3affc072b09ee87f928c4c25437fe1a5871b6d454c879", + "zh:d07dcbc92463ebe2f28f9125b74e362ccf32f4d5bc71ee339c6d28dce7229a8d", + "zh:d63dd003fbe2752694d70e1accce9bb8d118e6332ac7a08a844109b93c98e8f2", + "zh:f32ebcb26ae57d7c7480e07b5a42eec57ee410097072c216485ceca3254a98f2", + "zh:f3b78e090125cb02136677cc7faf5a3a317a620132c0211bfd6fe63e66de2807", + "zh:f5db68035985aba0b6a8b66da7b653dbb02b4dcc8f0f8efc6ff243b7bad16d99", ] } diff --git a/terraform/infrastructure/openstack/main.tf b/terraform/infrastructure/openstack/main.tf index 91e812554..95dd65837 100644 --- a/terraform/infrastructure/openstack/main.tf +++ b/terraform/infrastructure/openstack/main.tf @@ -7,7 +7,7 @@ terraform { stackit = { source = "stackitcloud/stackit" - version = "0.50.0" + version = "0.51.0" } random = { diff --git a/terraform/infrastructure/openstack/modules/stackit_loadbalancer/main.tf b/terraform/infrastructure/openstack/modules/stackit_loadbalancer/main.tf index 6532b2f27..70d7e7c36 100644 --- a/terraform/infrastructure/openstack/modules/stackit_loadbalancer/main.tf +++ b/terraform/infrastructure/openstack/modules/stackit_loadbalancer/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { stackit = { source = "stackitcloud/stackit" - version = "0.50.0" + version = "0.51.0" } } } diff --git a/terraform/infrastructure/qemu/.terraform.lock.hcl b/terraform/infrastructure/qemu/.terraform.lock.hcl index da68ce2c4..be6d3c75f 100644 --- a/terraform/infrastructure/qemu/.terraform.lock.hcl +++ b/terraform/infrastructure/qemu/.terraform.lock.hcl @@ -67,27 +67,36 @@ provider "registry.terraform.io/hashicorp/random" { } provider "registry.terraform.io/kreuzwerker/docker" { - version = "3.3.0" - constraints = "3.3.0" + version = "3.4.0" + constraints = "3.4.0" hashes = [ - "h1:Shj2aIWKcuEoq/Zp+M7FF/CoKaqyFo0reNk8qssIOck=", - "h1:euoAPO6NJDr/fiqOP2DF9MgjhnT/niSZVFrVlJ1PRiU=", - "h1:k8GXhkwSf8Z9v3qtTly08YG0g34Ba/z/91NG7c96HI8=", - "h1:nYVos7Yi+uJj43VWjikg6OjxuFT9MJsEHFN+1NPJZ1Y=", - "h1:vjqJBJhmppkQDLuvSXru3vNxvyw5Dzj02OHU7Ok9UC4=", - "zh:020dafbe84cb7cf2a6bc8a331a45197cf3f09ac9ba1386e8d40aa422144dfd1e", - "zh:0927127ae0b51232b9d2fa24242786b506fcbb51cebf19a3ed3bc4ab27a0ab77", - "zh:111dcf8617aac71f28d9bdda9c201f0a1c9bc12038944caefd0e200e7efea5eb", - "zh:12f431b2485f60477ebf68529de6d019425a16580a84f19369e164be8f309e46", - "zh:16be6f3841e7e1c38e254be0ecdf5cb890bf270c3a14cf0ed507d66519de860f", - "zh:31a10c5f99902c4a635f79d25d24c3fe0ebc5808776f9f469e979dabaae02e63", - "zh:4a5561a8c45e4171f820d165828bee1313b358a459202efba20a9ee3fda53596", - "zh:73157332ceb69175562407bc87a8150f29c68bfa1e96e8542ae4449f281f0837", - "zh:7a376f0dfd81df8612eb829532802e23a84cd9b2905cfc4ed0e38eb81b92400f", - "zh:89c3b4f2cb51738111ea49a1ec7c157dfadcd4589619eca4c71e6070deadffc4", - "zh:b2ad62be31ff5aafecdef76db75dc6521ff2374ef3c54cac5edd0c121488eaba", - "zh:bf2eb6659c5db904bad46e0c34f37c2e37eb0cac8294e5831ab091c8b5909d35", - "zh:c97c63343d0368171f9090b724f37e6b24cf061e91db0b4bf008b8e00974544a", - "zh:cf34a8b522bb8c4857dc9b728dbd931729f58b62b5f68a756e16f77cf0e5155e", + "h1:/0AxyNFTAOGHjK9A7itMWMRu+D9K9hQfqa2FvOry+2Y=", + "h1:2wSmEjObbh6eNgY+gQyT11ZY5aNNsZ3+pRHsWCk31Zk=", + "h1:47rfwMIGCa4ZpupQNWCd+k2gtdbHOPUdvZoQZ5a+WxU=", + "h1:6dA29FjSUUmHVMz8tTnZjzKAkxqjKIuomny2f8uf1Gc=", + "h1:8ku1cRoi2qstR8ovp5cLzXGgfznTsDAIggVbH8ZI/6Y=", + "h1:BGsI/s5glyzFpc5KC9ja+a5Y7HIuiadAh+YIKiOiztw=", + "h1:D+Tp3ZMoqcfsiSyYWYBF0NEMeqSXRN5NgH1JYs2Sigs=", + "h1:IVgAZw/yRWyR3QwcIuezK8PbGQbnO+byCxmHXnvJiEg=", + "h1:So/hIA5RHwL2XLkKmapmqLRUCEynbyXaIqwGGgB1PsI=", + "h1:UItox6gGOenEPI1nnyIRhDYn4dpm+cHsi9KiGNvHOwc=", + "h1:cJXTOPBncTcubVH2Hk/p0Dwx+v7toUjScPv/KV2QaE0=", + "h1:lSEVqt/29WJ+SYGVNUpQN23HUw4yMbKpR7NI4grRgL0=", + "h1:pVOc8txX1iyJdvMqGb1fJcV/Stllc+sB9ytH5c7kWXM=", + "h1:tfPa22t0+5dTw4mDKLGVR3BMJsRTpiDybcc+ybCiHlk=", + "zh:047b59cc0904601d579e759eb2a333504136d96d74c6288a49fc768f9ab41b66", + "zh:0a00959bff0b101791c6eb6ccbed6135f5e6f9cadc642317343a046de3f22529", + "zh:163dab50c1c1b9d6ef4c63aab4973ef4f9ee465c2165f623e38c3dc2aff8856a", + "zh:1c9824f99659aa1157d33b26f4aaca699c55848653c9a9f7e298785ac04fd47b", + "zh:1ccb13c7ae388155528a5bea493a932296d8575ef9afe69f50e825a60a7694c8", + "zh:28af734b390dbde7a44c0cfe396f127cfbf2bc24429478d8b7c78ebbfa8c6e6f", + "zh:4b785578233f9e20f8537b9f360be0ac9b40603302804d32ff36363dcd870437", + "zh:5eb0fa2ccb4307923a40248e7f88738b7bdb719224fe475673f92dbe8acddea1", + "zh:b070a49c5c17118ec69dd000d10ec22e24e5364731497c2889fdcd34615d0749", + "zh:bb8306c644e95021a0aabc0ba3adc9d9cf3577254c0cd322a4f2be8b4d9b20f1", + "zh:d3ebfbb0e791d54599dbb6fa0ab9734f6fd1d4a5f5cb2cb43b1facda05a833db", + "zh:d504d3b6cee7a1e16e74c157a421d7bfdd48e668d50d4da5a8b051ac17b6c735", + "zh:df365517e653946affbd4b322ccf21f80d613102ac667bef903691d6ea856356", + "zh:f07d852519beadbb5586848ac2015fb7ba12db54fea72a6defeab77b5754db2a", ] } diff --git a/terraform/infrastructure/qemu/main.tf b/terraform/infrastructure/qemu/main.tf index beabd7fe4..4e9d43630 100644 --- a/terraform/infrastructure/qemu/main.tf +++ b/terraform/infrastructure/qemu/main.tf @@ -6,7 +6,7 @@ terraform { } docker = { source = "kreuzwerker/docker" - version = "3.3.0" + version = "3.4.0" } random = { source = "hashicorp/random" From 8c3801f6feb914ad7b15f8f01c52c5a255c63e38 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 6 May 2025 10:17:30 +0200 Subject: [PATCH 249/311] deps: update GitHub action dependencies (#3801) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/actions/artifact_download/action.yml | 2 +- .github/actions/build_cli/action.yml | 2 +- .../actions/build_micro_service/action.yml | 2 +- .github/actions/container_sbom/action.yml | 2 +- .../download_release_binaries/action.yml | 20 +++++++++---------- .github/actions/e2e_benchmark/action.yml | 2 +- .github/actions/login_gcp/action.yml | 2 +- .github/actions/setup_bazel_nix/action.yml | 2 +- .../workflows/aws-snp-launchmeasurement.yml | 2 +- .github/workflows/build-ccm-gcp.yml | 2 +- .github/workflows/build-gcp-guest-agent.yml | 2 +- .github/workflows/codeql.yml | 4 ++-- .github/workflows/draft-release.yml | 18 ++++++++--------- .github/workflows/e2e-upgrade.yml | 2 +- .github/workflows/e2e-windows.yml | 2 +- .github/workflows/reproducible-builds.yml | 4 ++-- .github/workflows/scorecard.yml | 2 +- 17 files changed, 36 insertions(+), 36 deletions(-) diff --git a/.github/actions/artifact_download/action.yml b/.github/actions/artifact_download/action.yml index 82cb6c0af..e3cf3d1f8 100644 --- a/.github/actions/artifact_download/action.yml +++ b/.github/actions/artifact_download/action.yml @@ -28,7 +28,7 @@ runs: run: echo "directory=$(mktemp -d)" >> "$GITHUB_OUTPUT" - name: Download the artifact - uses: actions/download-artifact@95815c38cf2ff2164869cbab79da8d1f422bc89e # v4.2.1 + uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 with: name: ${{ inputs.name }} path: ${{ steps.tempdir.outputs.directory }} diff --git a/.github/actions/build_cli/action.yml b/.github/actions/build_cli/action.yml index 3aff97fde..8daf1e0d3 100644 --- a/.github/actions/build_cli/action.yml +++ b/.github/actions/build_cli/action.yml @@ -79,7 +79,7 @@ runs: # once it has the functionality - name: Install Cosign if: inputs.cosignPublicKey != '' && inputs.cosignPrivateKey != '' && inputs.cosignPassword != '' - uses: sigstore/cosign-installer@d7d6bc7722e3daa8354c50bcb52f4837da5e9b6a # v3.8.1 + uses: sigstore/cosign-installer@3454372f43399081ed03b604cb2d021dabca52bb # v3.8.2 - name: Install Rekor if: inputs.cosignPublicKey != '' && inputs.cosignPrivateKey != '' && inputs.cosignPassword != '' diff --git a/.github/actions/build_micro_service/action.yml b/.github/actions/build_micro_service/action.yml index acd4026be..b87302d5c 100644 --- a/.github/actions/build_micro_service/action.yml +++ b/.github/actions/build_micro_service/action.yml @@ -62,7 +62,7 @@ runs: - name: Build and push container image id: build-micro-service - uses: docker/build-push-action@471d1dc4e07e5cdedd4c2171150001c434f0b7a4 # v6.15.0 + uses: docker/build-push-action@14487ce63c7a62a4a324b0bfb37086795e31c6c1 # v6.16.0 with: context: . file: ${{ inputs.dockerfile }} diff --git a/.github/actions/container_sbom/action.yml b/.github/actions/container_sbom/action.yml index 193db69a4..983fb344e 100644 --- a/.github/actions/container_sbom/action.yml +++ b/.github/actions/container_sbom/action.yml @@ -19,7 +19,7 @@ runs: steps: - name: Install Cosign if: inputs.cosignPublicKey != '' && inputs.cosignPrivateKey != '' && inputs.cosignPassword != '' - uses: sigstore/cosign-installer@d7d6bc7722e3daa8354c50bcb52f4837da5e9b6a # v3.8.1 + uses: sigstore/cosign-installer@3454372f43399081ed03b604cb2d021dabca52bb # v3.8.2 - name: Download Syft & Grype uses: ./.github/actions/install_syft_grype diff --git a/.github/actions/download_release_binaries/action.yml b/.github/actions/download_release_binaries/action.yml index a0dc54668..6b5604c24 100644 --- a/.github/actions/download_release_binaries/action.yml +++ b/.github/actions/download_release_binaries/action.yml @@ -5,51 +5,51 @@ runs: using: "composite" steps: - name: Download CLI binaries darwin-amd64 - uses: actions/download-artifact@95815c38cf2ff2164869cbab79da8d1f422bc89e # v4.2.1 + uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 with: name: constellation-darwin-amd64 - name: Download CLI binaries darwin-arm64 - uses: actions/download-artifact@95815c38cf2ff2164869cbab79da8d1f422bc89e # v4.2.1 + uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 with: name: constellation-darwin-arm64 - name: Download CLI binaries linux-amd64 - uses: actions/download-artifact@95815c38cf2ff2164869cbab79da8d1f422bc89e # v4.2.1 + uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 with: name: constellation-linux-amd64 - name: Download CLI binaries linux-arm64 - uses: actions/download-artifact@95815c38cf2ff2164869cbab79da8d1f422bc89e # v4.2.1 + uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 with: name: constellation-linux-arm64 - name: Download CLI binaries windows-amd64 - uses: actions/download-artifact@95815c38cf2ff2164869cbab79da8d1f422bc89e # v4.2.1 + uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 with: name: constellation-windows-amd64 - name: Download Terraform module - uses: actions/download-artifact@95815c38cf2ff2164869cbab79da8d1f422bc89e # v4.2.1 + uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 with: name: terraform-module - name: Download Terraform provider binary darwin-amd64 - uses: actions/download-artifact@95815c38cf2ff2164869cbab79da8d1f422bc89e # v4.2.1 + uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 with: name: terraform-provider-constellation-darwin-amd64 - name: Download Terraform provider binary darwin-arm64 - uses: actions/download-artifact@95815c38cf2ff2164869cbab79da8d1f422bc89e # v4.2.1 + uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 with: name: terraform-provider-constellation-darwin-arm64 - name: Download Terraform provider binary linux-amd64 - uses: actions/download-artifact@95815c38cf2ff2164869cbab79da8d1f422bc89e # v4.2.1 + uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 with: name: terraform-provider-constellation-linux-amd64 - name: Download Terraform provider binary linux-arm64 - uses: actions/download-artifact@95815c38cf2ff2164869cbab79da8d1f422bc89e # v4.2.1 + uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 with: name: terraform-provider-constellation-linux-arm64 diff --git a/.github/actions/e2e_benchmark/action.yml b/.github/actions/e2e_benchmark/action.yml index a760ba431..8a6e1c834 100644 --- a/.github/actions/e2e_benchmark/action.yml +++ b/.github/actions/e2e_benchmark/action.yml @@ -32,7 +32,7 @@ runs: steps: - name: Setup python - uses: actions/setup-python@8d9ed9ac5c53483de85588cdf95a591a75ab9f55 # v5.5.0 + uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.0 with: python-version: "3.13" diff --git a/.github/actions/login_gcp/action.yml b/.github/actions/login_gcp/action.yml index bea30ac4e..c32249c73 100644 --- a/.github/actions/login_gcp/action.yml +++ b/.github/actions/login_gcp/action.yml @@ -20,7 +20,7 @@ runs: echo "GOOGLE_CLOUD_PROJECT=" >> "$GITHUB_ENV" - name: Authorize GCP access - uses: google-github-actions/auth@71f986410dfbc7added4569d411d040a91dc6935 # v2.1.8 + uses: google-github-actions/auth@ba79af03959ebeac9769e648f473a284504d9193 # v2.1.10 with: workload_identity_provider: projects/1052692473304/locations/global/workloadIdentityPools/constellation-ci-pool/providers/constellation-ci-provider service_account: ${{ inputs.service_account }} diff --git a/.github/actions/setup_bazel_nix/action.yml b/.github/actions/setup_bazel_nix/action.yml index b1981c7a8..1066e5d34 100644 --- a/.github/actions/setup_bazel_nix/action.yml +++ b/.github/actions/setup_bazel_nix/action.yml @@ -114,7 +114,7 @@ runs: - name: Install nix if: steps.check_inputs.outputs.nixPreinstalled == 'false' - uses: cachix/install-nix-action@d1ca217b388ee87b2507a9a93bf01368bde7cec2 # v31 + uses: cachix/install-nix-action@526118121621777ccd86f79b04685a9319637641 # v31 with: install_url: "https://releases.nixos.org/nix/nix-${{ steps.check_inputs.outputs.nixVersion }}/install" diff --git a/.github/workflows/aws-snp-launchmeasurement.yml b/.github/workflows/aws-snp-launchmeasurement.yml index 0f0cc0220..8e72cffb6 100644 --- a/.github/workflows/aws-snp-launchmeasurement.yml +++ b/.github/workflows/aws-snp-launchmeasurement.yml @@ -17,7 +17,7 @@ jobs: path: constellation - name: Install Nix - uses: cachix/install-nix-action@d1ca217b388ee87b2507a9a93bf01368bde7cec2 # v31 + uses: cachix/install-nix-action@526118121621777ccd86f79b04685a9319637641 # v31 - name: Download Firmware release id: download-firmware diff --git a/.github/workflows/build-ccm-gcp.yml b/.github/workflows/build-ccm-gcp.yml index b5f76aed0..0a8a60263 100644 --- a/.github/workflows/build-ccm-gcp.yml +++ b/.github/workflows/build-ccm-gcp.yml @@ -113,7 +113,7 @@ jobs: - name: Build and push container image id: build - uses: docker/build-push-action@471d1dc4e07e5cdedd4c2171150001c434f0b7a4 # v6.15.0 + uses: docker/build-push-action@14487ce63c7a62a4a324b0bfb37086795e31c6c1 # v6.16.0 with: context: ./cloud-provider-gcp push: ${{ github.ref_name == 'main' }} diff --git a/.github/workflows/build-gcp-guest-agent.yml b/.github/workflows/build-gcp-guest-agent.yml index b3682aa3e..977b34eb9 100644 --- a/.github/workflows/build-gcp-guest-agent.yml +++ b/.github/workflows/build-gcp-guest-agent.yml @@ -114,7 +114,7 @@ jobs: - name: Build and push container image if: steps.needs-build.outputs.out == 'true' id: build - uses: docker/build-push-action@471d1dc4e07e5cdedd4c2171150001c434f0b7a4 # v6.15.0 + uses: docker/build-push-action@14487ce63c7a62a4a324b0bfb37086795e31c6c1 # v6.16.0 with: context: ./guest-agent file: ./constellation/3rdparty/gcp-guest-agent/Dockerfile diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index ba51d37d9..707cdaa66 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -44,7 +44,7 @@ jobs: cache: false - name: Initialize CodeQL - uses: github/codeql-action/init@45775bd8235c68ba998cffa5171334d58593da47 # v3.28.15 + uses: github/codeql-action/init@60168efe1c415ce0f5521ea06d5c2062adbeed1b # v3.28.17 with: languages: ${{ matrix.language }} @@ -63,6 +63,6 @@ jobs: echo "::endgroup::" - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@45775bd8235c68ba998cffa5171334d58593da47 # v3.28.15 + uses: github/codeql-action/analyze@60168efe1c415ce0f5521ea06d5c2062adbeed1b # v3.28.17 with: category: "/language:${{ matrix.language }}" diff --git a/.github/workflows/draft-release.yml b/.github/workflows/draft-release.yml index 1e5c378c1..84b696afb 100644 --- a/.github/workflows/draft-release.yml +++ b/.github/workflows/draft-release.yml @@ -227,7 +227,7 @@ jobs: uses: ./.github/actions/download_release_binaries - name: Download CLI SBOM - uses: actions/download-artifact@95815c38cf2ff2164869cbab79da8d1f422bc89e # v4.2.1 + uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 with: name: constellation.spdx.sbom @@ -261,7 +261,7 @@ jobs: ref: ${{ inputs.ref || github.head_ref }} - name: Install Cosign - uses: sigstore/cosign-installer@d7d6bc7722e3daa8354c50bcb52f4837da5e9b6a # v3.8.1 + uses: sigstore/cosign-installer@3454372f43399081ed03b604cb2d021dabca52bb # v3.8.2 - name: Download Syft & Grype uses: ./.github/actions/install_syft_grype @@ -340,12 +340,12 @@ jobs: uses: ./.github/actions/download_release_binaries - name: Download CLI SBOM - uses: actions/download-artifact@95815c38cf2ff2164869cbab79da8d1f422bc89e # v4.2.1 + uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 with: name: constellation.spdx.sbom - name: Download provenance - uses: actions/download-artifact@95815c38cf2ff2164869cbab79da8d1f422bc89e # v4.2.1 + uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 with: name: ${{ needs.provenance.outputs.provenance-name }} @@ -418,17 +418,17 @@ jobs: uses: ./.github/actions/download_release_binaries - name: Download CLI SBOM - uses: actions/download-artifact@95815c38cf2ff2164869cbab79da8d1f422bc89e # v4.2.1 + uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 with: name: constellation.spdx.sbom - name: Download Constellation CLI SBOM's signature - uses: actions/download-artifact@95815c38cf2ff2164869cbab79da8d1f422bc89e # v4.2.1 + uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 with: name: constellation.spdx.sbom.sig - name: Download Constellation provenance - uses: actions/download-artifact@95815c38cf2ff2164869cbab79da8d1f422bc89e # v4.2.1 + uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 with: name: ${{ needs.provenance.outputs.provenance-name }} @@ -472,7 +472,7 @@ jobs: - name: Create release with artifacts id: create-release # GitHub endorsed release project. See: https://github.com/actions/create-release - uses: softprops/action-gh-release@c95fe1489396fe8a9eb87c0abf8aa5b2ef267fda # v2.2.1 + uses: softprops/action-gh-release@da05d552573ad5aba039eaac05058a918a7bf631 # v2.2.2 with: draft: true generate_release_notes: true @@ -487,7 +487,7 @@ jobs: terraform-module.zip - name: Create Terraform provider release with artifcats - uses: softprops/action-gh-release@c95fe1489396fe8a9eb87c0abf8aa5b2ef267fda # v2.2.1 + uses: softprops/action-gh-release@da05d552573ad5aba039eaac05058a918a7bf631 # v2.2.2 with: draft: true generate_release_notes: false diff --git a/.github/workflows/e2e-upgrade.yml b/.github/workflows/e2e-upgrade.yml index 18dde6109..4a4813022 100644 --- a/.github/workflows/e2e-upgrade.yml +++ b/.github/workflows/e2e-upgrade.yml @@ -424,7 +424,7 @@ jobs: ref: ${{ inputs.gitRef }} - name: Download CLI - uses: actions/download-artifact@95815c38cf2ff2164869cbab79da8d1f422bc89e # v4.2.1 + uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 with: name: constellation-upgrade-${{ inputs.attestationVariant }} path: build diff --git a/.github/workflows/e2e-windows.yml b/.github/workflows/e2e-windows.yml index c4c28c1be..ad4acb877 100644 --- a/.github/workflows/e2e-windows.yml +++ b/.github/workflows/e2e-windows.yml @@ -61,7 +61,7 @@ jobs: ref: ${{ !github.event.pull_request.head.repo.fork && github.head_ref || '' }} - name: Download CLI artifact - uses: actions/download-artifact@95815c38cf2ff2164869cbab79da8d1f422bc89e # v4.2.1 + uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 with: name: "constell-exe" diff --git a/.github/workflows/reproducible-builds.yml b/.github/workflows/reproducible-builds.yml index 9c66abe57..5e95d4554 100644 --- a/.github/workflows/reproducible-builds.yml +++ b/.github/workflows/reproducible-builds.yml @@ -175,7 +175,7 @@ jobs: ref: ${{ !github.event.pull_request.head.repo.fork && github.head_ref || '' }} - name: Download binaries - uses: actions/download-artifact@95815c38cf2ff2164869cbab79da8d1f422bc89e # v4.2.1 + uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 with: pattern: "binaries-${{ matrix.target }}-*" merge-multiple: true @@ -209,7 +209,7 @@ jobs: ref: ${{ !github.event.pull_request.head.repo.fork && github.head_ref || '' }} - name: Download os images - uses: actions/download-artifact@95815c38cf2ff2164869cbab79da8d1f422bc89e # v4.2.1 + uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0 with: pattern: "osimages-${{ matrix.target }}-*" merge-multiple: true diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml index 8f1905f54..9d2cb438d 100644 --- a/.github/workflows/scorecard.yml +++ b/.github/workflows/scorecard.yml @@ -37,6 +37,6 @@ jobs: retention-days: 5 - name: Upload to code-scanning - uses: github/codeql-action/upload-sarif@45775bd8235c68ba998cffa5171334d58593da47 # v3.28.15 + uses: github/codeql-action/upload-sarif@60168efe1c415ce0f5521ea06d5c2062adbeed1b # v3.28.17 with: sarif_file: results.sarif From b8c942ab35f598107b37316b5b820c400d3d045c Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 6 May 2025 10:17:47 +0200 Subject: [PATCH 250/311] deps: update dependency DeterminateSystems/nix-installer to v3.4.2 (#3799) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/reproducible-builds.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/reproducible-builds.yml b/.github/workflows/reproducible-builds.yml index 5e95d4554..41aca0ac3 100644 --- a/.github/workflows/reproducible-builds.yml +++ b/.github/workflows/reproducible-builds.yml @@ -57,7 +57,7 @@ jobs: chmod a+x "$HOME/.local/bin/bazel" echo "$HOME/.local/bin" >> "$GITHUB_PATH" - curl -fsSL -o "$HOME/.local/bin/nix-installer" https://github.com/DeterminateSystems/nix-installer/releases/download/v3.2.1/nix-installer-x86_64-linux # renovate:github-release + curl -fsSL -o "$HOME/.local/bin/nix-installer" https://github.com/DeterminateSystems/nix-installer/releases/download/v3.4.2/nix-installer-x86_64-linux # renovate:github-release nixVersion=$(cat .nixversion) chmod a+x "$HOME/.local/bin/nix-installer" "$HOME/.local/bin/nix-installer" install --no-confirm --nix-package-url "https://releases.nixos.org/nix/nix-$nixVersion/nix-$nixVersion-x86_64-linux.tar.xz" From e27cdd00be9772e1a0bf4c105e13bc49bf6a7e59 Mon Sep 17 00:00:00 2001 From: Markus Rudy Date: Tue, 6 May 2025 10:41:26 +0200 Subject: [PATCH 251/311] e2e: simplify e2e release workflow (#3804) --- .github/workflows/e2e-test-release.yml | 222 +++---------------------- 1 file changed, 21 insertions(+), 201 deletions(-) diff --git a/.github/workflows/e2e-test-release.yml b/.github/workflows/e2e-test-release.yml index 9255a9a15..365f24ebe 100644 --- a/.github/workflows/e2e-test-release.yml +++ b/.github/workflows/e2e-test-release.yml @@ -39,11 +39,25 @@ jobs: fail-fast: false max-parallel: 9 matrix: - include: - # - # Tests on ubuntu runner - # + test: + - "sonobuoy full" + - "verify" + - "recover" + - "lb" + - "autoscaling" + - "perf-bench" + - "malicious join" + attestationVariant: + - "gcp-sev-es" + - "gcp-sev-snp" + - "azure-sev-snp" + - "azure-tdx" + - "aws-sev-snp" + kubernetes-version: ["v1.31"] + clusterCreation: ["cli"] + runner: ["ubuntu-24.04"] + include: # sonobuoy full test on all k8s versions - test: "sonobuoy full" attestationVariant: "gcp-sev-es" @@ -71,32 +85,6 @@ jobs: runner: "ubuntu-24.04" clusterCreation: "cli" - - test: "sonobuoy full" - attestationVariant: "gcp-sev-es" - kubernetes-version: "v1.30" - runner: "ubuntu-24.04" - clusterCreation: "cli" - - test: "sonobuoy full" - attestationVariant: "gcp-sev-snp" - kubernetes-version: "v1.30" - runner: "ubuntu-24.04" - clusterCreation: "cli" - - test: "sonobuoy full" - attestationVariant: "azure-sev-snp" - kubernetes-version: "v1.30" - runner: "ubuntu-24.04" - clusterCreation: "cli" - - test: "sonobuoy full" - attestationVariant: "azure-tdx" - kubernetes-version: "v1.30" - runner: "ubuntu-24.04" - clusterCreation: "cli" - - test: "sonobuoy full" - attestationVariant: "aws-sev-snp" - kubernetes-version: "v1.30" - runner: "ubuntu-24.04" - clusterCreation: "cli" - - test: "sonobuoy full" attestationVariant: "gcp-sev-es" kubernetes-version: "v1.29" @@ -123,181 +111,13 @@ jobs: runner: "ubuntu-24.04" clusterCreation: "cli" - # verify test on latest k8s version - - test: "verify" - attestationVariant: "gcp-sev-es" - kubernetes-version: "v1.30" - runner: "ubuntu-24.04" - clusterCreation: "cli" - - test: "verify" - attestationVariant: "gcp-sev-snp" - kubernetes-version: "v1.30" - runner: "ubuntu-24.04" - clusterCreation: "cli" - - test: "verify" - attestationVariant: "azure-sev-snp" - kubernetes-version: "v1.30" - runner: "ubuntu-24.04" - clusterCreation: "cli" - - test: "verify" - attestationVariant: "azure-tdx" - kubernetes-version: "v1.30" - runner: "ubuntu-24.04" - clusterCreation: "cli" - - test: "verify" - attestationVariant: "aws-sev-snp" - kubernetes-version: "v1.30" - runner: "ubuntu-24.04" - clusterCreation: "cli" - - # recover test on latest k8s version - - test: "recover" - attestationVariant: "gcp-sev-es" - kubernetes-version: "v1.30" - runner: "ubuntu-24.04" - clusterCreation: "cli" - - test: "recover" - attestationVariant: "gcp-sev-snp" - kubernetes-version: "v1.30" - runner: "ubuntu-24.04" - clusterCreation: "cli" - - test: "recover" - attestationVariant: "azure-sev-snp" - kubernetes-version: "v1.30" - runner: "ubuntu-24.04" - clusterCreation: "cli" - - test: "recover" - attestationVariant: "azure-tdx" - kubernetes-version: "v1.30" - runner: "ubuntu-24.04" - clusterCreation: "cli" - - test: "recover" - attestationVariant: "aws-sev-snp" - kubernetes-version: "v1.30" - runner: "ubuntu-24.04" - clusterCreation: "cli" - - # lb test on latest k8s version - - test: "lb" - attestationVariant: "gcp-sev-es" - kubernetes-version: "v1.30" - runner: "ubuntu-24.04" - clusterCreation: "cli" - - test: "lb" - attestationVariant: "gcp-sev-snp" - kubernetes-version: "v1.30" - runner: "ubuntu-24.04" - clusterCreation: "cli" - - test: "lb" - attestationVariant: "azure-sev-snp" - kubernetes-version: "v1.30" - runner: "ubuntu-24.04" - clusterCreation: "cli" - - test: "lb" - attestationVariant: "azure-tdx" - kubernetes-version: "v1.30" - runner: "ubuntu-24.04" - clusterCreation: "cli" - - test: "lb" - attestationVariant: "aws-sev-snp" - kubernetes-version: "v1.30" - runner: "ubuntu-24.04" - clusterCreation: "cli" - - # autoscaling test on latest k8s version - - test: "autoscaling" - attestationVariant: "gcp-sev-es" - kubernetes-version: "v1.30" - runner: "ubuntu-24.04" - clusterCreation: "cli" - - test: "autoscaling" - attestationVariant: "gcp-sev-snp" - kubernetes-version: "v1.30" - runner: "ubuntu-24.04" - clusterCreation: "cli" - - test: "autoscaling" - attestationVariant: "azure-sev-snp" - kubernetes-version: "v1.30" - runner: "ubuntu-24.04" - clusterCreation: "cli" - - test: "autoscaling" - attestationVariant: "azure-tdx" - kubernetes-version: "v1.30" - runner: "ubuntu-24.04" - clusterCreation: "cli" - - test: "autoscaling" - attestationVariant: "aws-sev-snp" - kubernetes-version: "v1.30" - runner: "ubuntu-24.04" - clusterCreation: "cli" - - # perf-bench test on latest k8s version - - test: "perf-bench" - attestationVariant: "gcp-sev-es" - kubernetes-version: "v1.30" - runner: "ubuntu-24.04" - clusterCreation: "cli" - - test: "perf-bench" - attestationVariant: "gcp-sev-snp" - kubernetes-version: "v1.30" - runner: "ubuntu-24.04" - clusterCreation: "cli" - - test: "perf-bench" - attestationVariant: "azure-sev-snp" - kubernetes-version: "v1.30" - runner: "ubuntu-24.04" - clusterCreation: "cli" - - test: "perf-bench" - attestationVariant: "azure-tdx" - kubernetes-version: "v1.30" - runner: "ubuntu-24.04" - clusterCreation: "cli" - - test: "perf-bench" - attestationVariant: "aws-sev-snp" - kubernetes-version: "v1.30" - runner: "ubuntu-24.04" - clusterCreation: "cli" - # s3proxy test on latest k8s version - test: "s3proxy" - refStream: "ref/main/stream/debug/?" attestationVariant: "gcp-sev-es" - kubernetes-version: "v1.30" + kubernetes-version: "v1.31" runner: "ubuntu-24.04" clusterCreation: "cli" - # malicious join test on latest k8s version - - test: "malicious join" - refStream: "ref/main/stream/debug/?" - attestationVariant: "gcp-sev-es" - kubernetes-version: "v1.30" - clusterCreation: "cli" - runner: "ubuntu-24.04" - - test: "malicious join" - refStream: "ref/main/stream/debug/?" - attestationVariant: "gcp-sev-snp" - kubernetes-version: "v1.30" - clusterCreation: "cli" - runner: "ubuntu-24.04" - - test: "malicious join" - refStream: "ref/main/stream/debug/?" - attestationVariant: "azure-sev-snp" - kubernetes-version: "v1.30" - clusterCreation: "cli" - runner: "ubuntu-24.04" - - test: "malicious join" - refStream: "ref/main/stream/debug/?" - attestationVariant: "azure-tdx" - kubernetes-version: "v1.30" - clusterCreation: "cli" - runner: "ubuntu-24.04" - - test: "malicious join" - refStream: "ref/main/stream/debug/?" - attestationVariant: "aws-sev-snp" - kubernetes-version: "v1.30" - clusterCreation: "cli" - runner: "ubuntu-24.04" - # # Tests on macOS runner # @@ -305,11 +125,11 @@ jobs: # TODO(3u13r): Update verify test to work on MacOS runners # - test: "verify" # attestationVariant: "azure-sev-snp" - # kubernetes-version: "v1.30" + # kubernetes-version: "v1.31" # runner: "macos-latest" - test: "recover" attestationVariant: "gcp-sev-es" - kubernetes-version: "v1.30" + kubernetes-version: "v1.31" runner: "macos-latest" clusterCreation: "cli" runs-on: ${{ matrix.runner }} From 54fae712996d82b265805f2e9fd74a469efa1910 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 6 May 2025 10:44:35 +0200 Subject: [PATCH 252/311] deps: update aquasecurity/tfsec to v1.28.14 (#3797) * deps: update aquasecurity/tfsec to v1.28.14 * deps: tidy all modules --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: edgelessci --- bazel/toolchains/ci_deps.bzl | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/bazel/toolchains/ci_deps.bzl b/bazel/toolchains/ci_deps.bzl index cf265a4d0..3f3e1f1ad 100644 --- a/bazel/toolchains/ci_deps.bzl +++ b/bazel/toolchains/ci_deps.bzl @@ -181,41 +181,41 @@ def _tfsec_deps(): name = "com_github_aquasecurity_tfsec_linux_amd64", build_file_content = """exports_files(["tfsec"], visibility = ["//visibility:public"])""", urls = [ - "https://cdn.confidential.cloud/constellation/cas/sha256/f643c390e6eabdf4bd64e807ff63abfe977d4f027c0b535eefe7a5c9f391fc28", - "https://github.com/aquasecurity/tfsec/releases/download/v1.28.13/tfsec_1.28.13_linux_amd64.tar.gz", + "https://cdn.confidential.cloud/constellation/cas/sha256/329ae7f67f2f1813ebe08de498719ea7003c75d3ca24bb0b038369062508008e", + "https://github.com/aquasecurity/tfsec/releases/download/v1.28.14/tfsec_1.28.14_linux_amd64.tar.gz", ], type = "tar.gz", - sha256 = "f643c390e6eabdf4bd64e807ff63abfe977d4f027c0b535eefe7a5c9f391fc28", + sha256 = "329ae7f67f2f1813ebe08de498719ea7003c75d3ca24bb0b038369062508008e", ) http_archive( name = "com_github_aquasecurity_tfsec_linux_arm64", build_file_content = """exports_files(["tfsec"], visibility = ["//visibility:public"])""", urls = [ - "https://cdn.confidential.cloud/constellation/cas/sha256/4aed1b122f817b684cc48da9cdc4b98b891808969441914570c089883c85ac50", - "https://github.com/aquasecurity/tfsec/releases/download/v1.28.13/tfsec_1.28.13_linux_arm64.tar.gz", + "https://cdn.confidential.cloud/constellation/cas/sha256/13dcbd3602027be49ce6cab7e1c24b0a8e833f0143fe327b0a13b87686541ce0", + "https://github.com/aquasecurity/tfsec/releases/download/v1.28.14/tfsec_1.28.14_linux_arm64.tar.gz", ], type = "tar.gz", - sha256 = "4aed1b122f817b684cc48da9cdc4b98b891808969441914570c089883c85ac50", + sha256 = "13dcbd3602027be49ce6cab7e1c24b0a8e833f0143fe327b0a13b87686541ce0", ) http_archive( name = "com_github_aquasecurity_tfsec_darwin_amd64", build_file_content = """exports_files(["tfsec"], visibility = ["//visibility:public"])""", urls = [ - "https://cdn.confidential.cloud/constellation/cas/sha256/966c7656f797c120dceb56a208a50dbf6a363c30876662a28e1c65505afca10d", - "https://github.com/aquasecurity/tfsec/releases/download/v1.28.13/tfsec_1.28.13_darwin_amd64.tar.gz", + "https://cdn.confidential.cloud/constellation/cas/sha256/0aeef31f83d6f44ba9ba5b6cbb954304c772dee73ac704e38896940f94af887a", + "https://github.com/aquasecurity/tfsec/releases/download/v1.28.14/tfsec_1.28.14_darwin_amd64.tar.gz", ], type = "tar.gz", - sha256 = "966c7656f797c120dceb56a208a50dbf6a363c30876662a28e1c65505afca10d", + sha256 = "0aeef31f83d6f44ba9ba5b6cbb954304c772dee73ac704e38896940f94af887a", ) http_archive( name = "com_github_aquasecurity_tfsec_darwin_arm64", build_file_content = """exports_files(["tfsec"], visibility = ["//visibility:public"])""", urls = [ - "https://cdn.confidential.cloud/constellation/cas/sha256/a381580c81d3413bb3fe07aa91ab89e51c1bbbd33c848194a2b43e9be3729c16", - "https://github.com/aquasecurity/tfsec/releases/download/v1.28.13/tfsec_1.28.13_darwin_arm64.tar.gz", + "https://cdn.confidential.cloud/constellation/cas/sha256/f39d59a3f9be4eeb3d965657653ad62243103a3d921ce52ca8f907cff45896f5", + "https://github.com/aquasecurity/tfsec/releases/download/v1.28.14/tfsec_1.28.14_darwin_arm64.tar.gz", ], type = "tar.gz", - sha256 = "a381580c81d3413bb3fe07aa91ab89e51c1bbbd33c848194a2b43e9be3729c16", + sha256 = "f39d59a3f9be4eeb3d965657653ad62243103a3d921ce52ca8f907cff45896f5", ) def _golangci_lint_deps(): From dd8539f54b44239a59543af6ea56e4ad4755539f Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 6 May 2025 16:43:53 +0200 Subject: [PATCH 253/311] deps: update Go dependencies (#3802) * deps: update Go dependencies * bazel: update rules_go to 0.54.0 * deps: rollback go-tpm-tools * renovate: block updates for go-tpm-tools * renovate: group rules_go updates * cloud/azure: update iptables call * deps: tidy all modules * renovate: remove concurrent PR limit * attestation: replace expired AWS cert --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Moritz Sanft <58110325+msanft@users.noreply.github.com> Co-authored-by: edgelessci --- MODULE.bazel | 2 +- MODULE.bazel.lock | 4 +- go.mod | 180 +++++----- go.sum | 329 +++++++++--------- hack/tools/go.mod | 14 +- hack/tools/go.sum | 28 +- .../attestation/aws/snp/testdata/report.txt | 2 +- .../attestation/aws/snp/testdata/testdata.go | 2 +- .../attestation/aws/snp/testdata/vlek.pem | 56 +-- internal/cloud/azure/BUILD.bazel | 2 - internal/cloud/azure/iptables_linux.go | 3 +- .../helm/charts/coredns/values.yaml | 2 +- internal/versions/versions.go | 6 +- renovate.json5 | 26 +- 14 files changed, 342 insertions(+), 314 deletions(-) diff --git a/MODULE.bazel b/MODULE.bazel index 3648de72e..554604683 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -11,7 +11,7 @@ bazel_dep(name = "bazel_skylib", version = "1.7.1") bazel_dep(name = "gazelle", version = "0.42.0") bazel_dep(name = "hermetic_cc_toolchain", version = "3.2.0") bazel_dep(name = "rules_cc", version = "0.1.1") -bazel_dep(name = "rules_go", version = "0.53.0", repo_name = "io_bazel_rules_go") +bazel_dep(name = "rules_go", version = "0.54.0", repo_name = "io_bazel_rules_go") bazel_dep(name = "rules_pkg", version = "1.1.0") bazel_dep(name = "rules_proto", version = "7.1.0") bazel_dep(name = "rules_python", version = "1.3.0") diff --git a/MODULE.bazel.lock b/MODULE.bazel.lock index 271f4849b..b0c428365 100644 --- a/MODULE.bazel.lock +++ b/MODULE.bazel.lock @@ -102,8 +102,8 @@ "https://bcr.bazel.build/modules/rules_go/0.42.0/MODULE.bazel": "8cfa875b9aa8c6fce2b2e5925e73c1388173ea3c32a0db4d2b4804b453c14270", "https://bcr.bazel.build/modules/rules_go/0.46.0/MODULE.bazel": "3477df8bdcc49e698b9d25f734c4f3a9f5931ff34ee48a2c662be168f5f2d3fd", "https://bcr.bazel.build/modules/rules_go/0.50.1/MODULE.bazel": "b91a308dc5782bb0a8021ad4330c81fea5bda77f96b9e4c117b9b9c8f6665ee0", - "https://bcr.bazel.build/modules/rules_go/0.53.0/MODULE.bazel": "a4ed760d3ac0dbc0d7b967631a9a3fd9100d28f7d9fcf214b4df87d4bfff5f9a", - "https://bcr.bazel.build/modules/rules_go/0.53.0/source.json": "c6dc34fb5bb8838652221a167d8f35ca3c8fdcbff8568f13cc75719802f95cff", + "https://bcr.bazel.build/modules/rules_go/0.54.0/MODULE.bazel": "ebec39ed510d0d4122b60764623dda92ca7f175479b511bf7cd5de7f38e86747", + "https://bcr.bazel.build/modules/rules_go/0.54.0/source.json": "6eb9b4f4fc27ab5be79d84dcfcf971beea6caa91a1b02088a9ee314c88915cf3", "https://bcr.bazel.build/modules/rules_java/4.0.0/MODULE.bazel": "5a78a7ae82cd1a33cef56dc578c7d2a46ed0dca12643ee45edbb8417899e6f74", "https://bcr.bazel.build/modules/rules_java/5.3.5/MODULE.bazel": "a4ec4f2db570171e3e5eb753276ee4b389bae16b96207e9d3230895c99644b86", "https://bcr.bazel.build/modules/rules_java/6.3.0/MODULE.bazel": "a97c7678c19f236a956ad260d59c86e10a463badb7eb2eda787490f4c969b963", diff --git a/go.mod b/go.mod index 9b7b01627..5fd2256dd 100644 --- a/go.mod +++ b/go.mod @@ -11,28 +11,28 @@ replace github.com/martinjungblut/go-cryptsetup => github.com/daniel-weisse/go-c // See this issue: https://github.com/kubernetes/kubernetes/issues/79384 // And this README: https://github.com/kubernetes/kubernetes/blob/master/staging/README.md replace ( - k8s.io/cloud-provider => k8s.io/cloud-provider v0.32.3 - k8s.io/controller-manager => k8s.io/controller-manager v0.32.3 - k8s.io/cri-client => k8s.io/cri-client v0.32.3 - k8s.io/csi-translation-lib => k8s.io/csi-translation-lib v0.32.3 - k8s.io/dynamic-resource-allocation => k8s.io/dynamic-resource-allocation v0.32.3 - k8s.io/endpointslice => k8s.io/endpointslice v0.32.3 - k8s.io/externaljwt => k8s.io/externaljwt v0.32.3 - k8s.io/kube-aggregator => k8s.io/kube-aggregator v0.32.3 - k8s.io/kube-controller-manager => k8s.io/kube-controller-manager v0.32.3 - k8s.io/kube-proxy => k8s.io/kube-proxy v0.32.3 - k8s.io/kube-scheduler => k8s.io/kube-scheduler v0.32.3 - k8s.io/legacy-cloud-providers => k8s.io/legacy-cloud-providers v0.30.11 - k8s.io/pod-security-admission => k8s.io/pod-security-admission v0.32.3 - k8s.io/sample-apiserver => k8s.io/sample-apiserver v0.32.3 + k8s.io/cloud-provider => k8s.io/cloud-provider v0.33.0 + k8s.io/controller-manager => k8s.io/controller-manager v0.33.0 + k8s.io/cri-client => k8s.io/cri-client v0.33.0 + k8s.io/csi-translation-lib => k8s.io/csi-translation-lib v0.33.0 + k8s.io/dynamic-resource-allocation => k8s.io/dynamic-resource-allocation v0.33.0 + k8s.io/endpointslice => k8s.io/endpointslice v0.33.0 + k8s.io/externaljwt => k8s.io/externaljwt v0.33.0 + k8s.io/kube-aggregator => k8s.io/kube-aggregator v0.33.0 + k8s.io/kube-controller-manager => k8s.io/kube-controller-manager v0.33.0 + k8s.io/kube-proxy => k8s.io/kube-proxy v0.33.0 + k8s.io/kube-scheduler => k8s.io/kube-scheduler v0.33.0 + k8s.io/legacy-cloud-providers => k8s.io/legacy-cloud-providers v0.30.12 + k8s.io/pod-security-admission => k8s.io/pod-security-admission v0.33.0 + k8s.io/sample-apiserver => k8s.io/sample-apiserver v0.33.0 ) require ( - cloud.google.com/go/compute v1.36.0 + cloud.google.com/go/compute v1.37.0 cloud.google.com/go/compute/metadata v0.6.0 - cloud.google.com/go/kms v1.21.1 - cloud.google.com/go/secretmanager v1.14.6 - cloud.google.com/go/storage v1.51.0 + cloud.google.com/go/kms v1.21.2 + cloud.google.com/go/secretmanager v1.14.7 + cloud.google.com/go/storage v1.53.0 dario.cat/mergo v1.0.1 github.com/Azure/azure-sdk-for-go v68.0.0+incompatible github.com/Azure/azure-sdk-for-go/sdk/azcore v1.18.0 @@ -40,26 +40,26 @@ require ( github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v6 v6.4.0 github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/network/armnetwork/v6 v6.2.0 github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/azsecrets v1.3.1 - github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.6.0 + github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.6.1 github.com/BurntSushi/toml v1.5.0 - github.com/aws/aws-sdk-go v1.55.6 + github.com/aws/aws-sdk-go v1.55.7 github.com/aws/aws-sdk-go-v2 v1.36.3 github.com/aws/aws-sdk-go-v2/config v1.29.14 github.com/aws/aws-sdk-go-v2/credentials v1.17.67 github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.30 - github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.72 - github.com/aws/aws-sdk-go-v2/service/autoscaling v1.52.3 - github.com/aws/aws-sdk-go-v2/service/cloudfront v1.45.3 - github.com/aws/aws-sdk-go-v2/service/ec2 v1.211.3 + github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.75 + github.com/aws/aws-sdk-go-v2/service/autoscaling v1.52.4 + github.com/aws/aws-sdk-go-v2/service/cloudfront v1.46.0 + github.com/aws/aws-sdk-go-v2/service/ec2 v1.214.0 github.com/aws/aws-sdk-go-v2/service/elasticloadbalancingv2 v1.45.2 github.com/aws/aws-sdk-go-v2/service/resourcegroupstaggingapi v1.26.3 - github.com/aws/aws-sdk-go-v2/service/s3 v1.79.2 - github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.35.3 + github.com/aws/aws-sdk-go-v2/service/s3 v1.79.3 + github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.35.4 github.com/aws/smithy-go v1.22.3 - github.com/bazelbuild/buildtools v0.0.0-20250410144851-f37c35dc3237 - github.com/bazelbuild/rules_go v0.53.0 + github.com/bazelbuild/buildtools v0.0.0-20250427233527-d9ed52af26ee + github.com/bazelbuild/rules_go v0.54.0 github.com/coreos/go-systemd/v22 v22.5.0 - github.com/docker/docker v28.0.4+incompatible + github.com/docker/docker v28.1.1+incompatible github.com/edgelesssys/go-azguestattestation v0.0.0-20250408071817-8c4457b235ff github.com/edgelesssys/go-tdx-qpl v0.0.0-20250129202750-607ac61e2377 github.com/foxboron/go-uefi v0.0.0-20250207204325-69fb7dba244f @@ -69,14 +69,14 @@ require ( github.com/go-playground/validator/v10 v10.26.0 github.com/golang-jwt/jwt/v5 v5.2.2 github.com/google/go-sev-guest v0.13.0 - github.com/google/go-tdx-guest v0.3.2-0.20250318080245-df394d562502 - github.com/google/go-tpm v0.9.3 + github.com/google/go-tdx-guest v0.3.2-0.20250505161510-9efd53b4a100 + github.com/google/go-tpm v0.9.4 github.com/google/go-tpm-tools v0.4.4 github.com/google/uuid v1.6.0 github.com/googleapis/gax-go/v2 v2.14.1 github.com/gophercloud/gophercloud/v2 v2.7.0 - github.com/gophercloud/utils/v2 v2.0.0-20250404104721-4c0f6d93d3a9 - github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.3.1 + github.com/gophercloud/utils/v2 v2.0.0-20250505075637-4ac8ddd08bb6 + github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.3.2 github.com/hashicorp/go-kms-wrapping/v2 v2.0.18 github.com/hashicorp/go-kms-wrapping/wrappers/awskms/v2 v2.0.11 github.com/hashicorp/go-kms-wrapping/wrappers/azurekeyvault/v2 v2.0.14 @@ -98,14 +98,14 @@ require ( github.com/onsi/ginkgo/v2 v2.23.4 github.com/onsi/gomega v1.37.0 github.com/pkg/errors v0.9.1 - github.com/regclient/regclient v0.8.2 + github.com/regclient/regclient v0.8.3 github.com/rogpeppe/go-internal v1.14.1 github.com/samber/slog-multi v1.4.0 github.com/schollz/progressbar/v3 v3.18.0 github.com/secure-systems-lab/go-securesystemslib v0.9.0 - github.com/siderolabs/talos/pkg/machinery v1.9.5 + github.com/siderolabs/talos/pkg/machinery v1.10.0 github.com/sigstore/rekor v1.3.10 - github.com/sigstore/sigstore v1.9.3 + github.com/sigstore/sigstore v1.9.4 github.com/spf13/afero v1.14.0 github.com/spf13/cobra v1.9.1 github.com/spf13/pflag v1.0.6 @@ -116,39 +116,39 @@ require ( go.etcd.io/etcd/client/pkg/v3 v3.5.21 go.etcd.io/etcd/client/v3 v3.5.21 go.uber.org/goleak v1.3.0 - golang.org/x/crypto v0.37.0 - golang.org/x/exp v0.0.0-20250408133849-7e4ce0ab07d0 + golang.org/x/crypto v0.38.0 + golang.org/x/exp v0.0.0-20250506013437-ce4c2cf36ca6 golang.org/x/mod v0.24.0 - golang.org/x/sys v0.32.0 - golang.org/x/text v0.24.0 - golang.org/x/tools v0.32.0 - google.golang.org/api v0.228.0 - google.golang.org/grpc v1.71.1 + golang.org/x/sys v0.33.0 + golang.org/x/text v0.25.0 + golang.org/x/tools v0.33.0 + google.golang.org/api v0.231.0 + google.golang.org/grpc v1.72.0 google.golang.org/protobuf v1.36.6 gopkg.in/yaml.v3 v3.0.1 helm.sh/helm/v3 v3.17.3 - k8s.io/api v0.32.3 - k8s.io/apiextensions-apiserver v0.32.3 - k8s.io/apimachinery v0.32.3 - k8s.io/apiserver v0.32.3 - k8s.io/client-go v0.32.3 - k8s.io/cluster-bootstrap v0.32.3 - k8s.io/kubelet v0.32.3 - k8s.io/kubernetes v1.32.3 - k8s.io/mount-utils v0.32.3 - k8s.io/utils v0.0.0-20250321185631-1f6e0b77f77e - libvirt.org/go/libvirt v1.11001.0 + k8s.io/api v0.33.0 + k8s.io/apiextensions-apiserver v0.33.0 + k8s.io/apimachinery v0.33.0 + k8s.io/apiserver v0.33.0 + k8s.io/client-go v0.33.0 + k8s.io/cluster-bootstrap v0.33.0 + k8s.io/kubelet v0.33.0 + k8s.io/kubernetes v1.33.0 + k8s.io/mount-utils v0.33.0 + k8s.io/utils v0.0.0-20250502105355-0f33e8f1c979 + libvirt.org/go/libvirt v1.11002.0 sigs.k8s.io/controller-runtime v0.20.4 sigs.k8s.io/yaml v1.4.0 ) require ( - cel.dev/expr v0.19.2 // indirect - cloud.google.com/go v0.120.0 // indirect - cloud.google.com/go/auth v0.15.0 // indirect + cel.dev/expr v0.23.1 // indirect + cloud.google.com/go v0.120.1 // indirect + cloud.google.com/go/auth v0.16.1 // indirect cloud.google.com/go/auth/oauth2adapt v0.2.8 // indirect - cloud.google.com/go/iam v1.4.1 // indirect - cloud.google.com/go/longrunning v0.6.5 // indirect + cloud.google.com/go/iam v1.5.2 // indirect + cloud.google.com/go/longrunning v0.6.7 // indirect cloud.google.com/go/monitoring v1.24.0 // indirect github.com/AdaLogics/go-fuzz-headers v0.0.0-20230811130428-ced1acdcaa24 // indirect github.com/Azure/azure-sdk-for-go/sdk/internal v1.11.1 // indirect @@ -165,7 +165,7 @@ require ( github.com/Azure/go-autorest/logger v0.2.1 // indirect github.com/Azure/go-autorest/tracing v0.6.0 // indirect github.com/AzureAD/microsoft-authentication-library-for-go v1.4.2 // indirect - github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.25.0 // indirect + github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.27.0 // indirect github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.51.0 // indirect github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.51.0 // indirect github.com/MakeNowJust/heredoc v1.0.0 // indirect @@ -184,7 +184,7 @@ require ( github.com/aws/aws-sdk-go-v2/internal/ini v1.8.3 // indirect github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.34 // indirect github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.3 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.7.0 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.7.1 // indirect github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.15 // indirect github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.15 // indirect github.com/aws/aws-sdk-go-v2/service/sso v1.25.3 // indirect @@ -198,11 +198,11 @@ require ( github.com/cloudflare/circl v1.6.0 // indirect github.com/cncf/xds/go v0.0.0-20250121191232-2f005788dc42 // indirect github.com/containerd/containerd v1.7.27 // indirect - github.com/containerd/errdefs v0.3.0 // indirect + github.com/containerd/errdefs v1.0.0 // indirect github.com/containerd/log v0.1.0 // indirect github.com/containerd/platforms v0.2.1 // indirect github.com/coredns/caddy v1.1.1 // indirect - github.com/coredns/corefile-migration v1.0.24 // indirect + github.com/coredns/corefile-migration v1.0.25 // indirect github.com/coreos/go-semver v0.3.1 // indirect github.com/cpuguy83/go-md2man/v2 v2.0.6 // indirect github.com/cyberphone/json-canonicalization v0.0.0-20220623050100-57a0ce2678a7 // indirect @@ -219,7 +219,7 @@ require ( github.com/emicklei/go-restful/v3 v3.11.0 // indirect github.com/envoyproxy/go-control-plane/envoy v1.32.4 // indirect github.com/envoyproxy/protoc-gen-validate v1.2.1 // indirect - github.com/evanphx/json-patch v5.9.0+incompatible // indirect + github.com/evanphx/json-patch v5.9.11+incompatible // indirect github.com/evanphx/json-patch/v5 v5.9.11 // indirect github.com/exponent-io/jsonpath v0.0.0-20210407135951-1de76d718b3f // indirect github.com/fatih/color v1.18.0 // indirect @@ -247,26 +247,25 @@ require ( github.com/go-task/slim-sprig/v3 v3.0.0 // indirect github.com/gobwas/glob v0.2.3 // indirect github.com/godbus/dbus/v5 v5.1.0 // indirect - github.com/gofrs/uuid/v5 v5.3.0 // indirect + github.com/gofrs/uuid/v5 v5.3.2 // indirect github.com/gogo/protobuf v1.3.2 // indirect - github.com/golang-jwt/jwt/v4 v4.5.1 // indirect + github.com/golang-jwt/jwt/v4 v4.5.2 // indirect github.com/golang/protobuf v1.5.4 // indirect github.com/google/btree v1.1.3 // indirect github.com/google/certificate-transparency-go v1.1.8 // indirect - github.com/google/gnostic-models v0.6.8 // indirect + github.com/google/gnostic-models v0.6.9 // indirect github.com/google/go-attestation v0.5.1 // indirect github.com/google/go-cmp v0.7.0 // indirect github.com/google/go-configfs-tsm v0.3.3-0.20240919001351-b4b5b84fdcbc // indirect github.com/google/go-containerregistry v0.20.3 // indirect github.com/google/go-tspi v0.3.0 // indirect - github.com/google/gofuzz v1.2.0 // indirect github.com/google/logger v1.1.1 // indirect github.com/google/pprof v0.0.0-20250403155104-27863c87afa6 // indirect github.com/google/s2a-go v0.1.9 // indirect github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 // indirect github.com/googleapis/enterprise-certificate-proxy v0.3.6 // indirect github.com/gorilla/mux v1.8.1 // indirect - github.com/gorilla/websocket v1.5.0 // indirect + github.com/gorilla/websocket v1.5.4-0.20250319132907-e064f32e3674 // indirect github.com/gosuri/uitable v0.0.4 // indirect github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79 // indirect github.com/hashicorp/errwrap v1.1.0 // indirect @@ -294,7 +293,7 @@ require ( github.com/jmoiron/sqlx v1.4.0 // indirect github.com/josharian/intern v1.0.0 // indirect github.com/json-iterator/go v1.1.12 // indirect - github.com/klauspost/compress v1.17.11 // indirect + github.com/klauspost/compress v1.18.0 // indirect github.com/kylelemons/godebug v1.1.0 // indirect github.com/lann/builder v0.0.0-20180802200727-47ae307949d0 // indirect github.com/lann/ps v0.0.0-20150810152359-62de8c46ede0 // indirect @@ -304,7 +303,7 @@ require ( github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de // indirect github.com/lithammer/dedent v1.1.0 // indirect github.com/mailru/easyjson v0.9.0 // indirect - github.com/mattn/go-colorable v0.1.13 // indirect + github.com/mattn/go-colorable v0.1.14 // indirect github.com/mattn/go-runewidth v0.0.16 // indirect github.com/mitchellh/colorstring v0.0.0-20190213212951-d06e56a500db // indirect github.com/mitchellh/copystructure v1.2.0 // indirect @@ -315,8 +314,8 @@ require ( github.com/moby/docker-image-spec v1.3.1 // indirect github.com/moby/locker v1.0.1 // indirect github.com/moby/spdystream v0.5.0 // indirect + github.com/moby/sys/atomicwriter v0.1.0 // indirect github.com/moby/sys/mountinfo v0.7.2 // indirect - github.com/moby/sys/userns v0.1.0 // indirect github.com/moby/term v0.5.0 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/reflect2 v1.0.2 // indirect @@ -326,13 +325,13 @@ require ( github.com/oklog/run v1.0.0 // indirect github.com/oklog/ulid v1.3.1 // indirect github.com/opencontainers/go-digest v1.0.0 // indirect - github.com/opencontainers/image-spec v1.1.0 // indirect + github.com/opencontainers/image-spec v1.1.1 // indirect github.com/opentracing/opentracing-go v1.2.0 // indirect github.com/peterbourgon/diskv v2.0.1+incompatible // indirect github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c // indirect github.com/planetscale/vtprotobuf v0.6.1-0.20241121165744-79df5c4772f2 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect - github.com/prometheus/client_golang v1.21.1 // indirect + github.com/prometheus/client_golang v1.22.0 // indirect github.com/prometheus/client_model v0.6.1 // indirect github.com/prometheus/common v0.62.0 // indirect github.com/prometheus/procfs v0.15.1 // indirect @@ -346,6 +345,7 @@ require ( github.com/sigstore/protobuf-specs v0.4.1 // indirect github.com/sirupsen/logrus v1.9.3 // indirect github.com/spf13/cast v1.7.0 // indirect + github.com/spiffe/go-spiffe/v2 v2.5.0 // indirect github.com/stretchr/objx v0.5.2 // indirect github.com/theupdateframework/go-tuf v0.7.0 // indirect github.com/titanous/rocacheck v0.0.0-20171023193734-afe73141d399 // indirect @@ -361,39 +361,41 @@ require ( github.com/xeipuuv/gojsonschema v1.2.0 // indirect github.com/xlab/treeprint v1.2.0 // indirect github.com/zclconf/go-cty v1.16.2 // indirect + github.com/zeebo/errs v1.4.0 // indirect go.mongodb.org/mongo-driver v1.14.0 // indirect go.opentelemetry.io/auto/sdk v1.1.0 // indirect - go.opentelemetry.io/contrib/detectors/gcp v1.34.0 // indirect - go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.59.0 // indirect - go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.59.0 // indirect + go.opentelemetry.io/contrib/detectors/gcp v1.35.0 // indirect + go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.60.0 // indirect + go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.60.0 // indirect go.opentelemetry.io/otel v1.35.0 // indirect go.opentelemetry.io/otel/metric v1.35.0 // indirect go.opentelemetry.io/otel/sdk v1.35.0 // indirect - go.opentelemetry.io/otel/sdk/metric v1.34.0 // indirect + go.opentelemetry.io/otel/sdk/metric v1.35.0 // indirect go.opentelemetry.io/otel/trace v1.35.0 // indirect go.uber.org/automaxprocs v1.6.0 // indirect go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.27.0 // indirect - golang.org/x/net v0.39.0 // indirect - golang.org/x/oauth2 v0.28.0 // indirect - golang.org/x/sync v0.13.0 // indirect - golang.org/x/term v0.31.0 // indirect + golang.org/x/net v0.40.0 // indirect + golang.org/x/oauth2 v0.29.0 // indirect + golang.org/x/sync v0.14.0 // indirect + golang.org/x/term v0.32.0 // indirect golang.org/x/time v0.11.0 // indirect gomodules.xyz/jsonpatch/v2 v2.4.0 // indirect google.golang.org/appengine v1.6.8 // indirect google.golang.org/genproto v0.0.0-20250303144028-a0af3efb3deb // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20250313205543-e70fdf4c4cb4 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20250313205543-e70fdf4c4cb4 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20250425173222-7b384671a197 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20250425173222-7b384671a197 // indirect gopkg.in/evanphx/json-patch.v4 v4.12.0 // indirect gopkg.in/inf.v0 v0.9.1 // indirect k8s.io/cli-runtime v0.32.2 // indirect - k8s.io/component-base v0.32.3 // indirect + k8s.io/component-base v0.33.0 // indirect k8s.io/klog/v2 v2.130.1 // indirect - k8s.io/kube-openapi v0.0.0-20241105132330-32ad38e42d3f // indirect + k8s.io/kube-openapi v0.0.0-20250318190949-c8a335a9a2ff // indirect k8s.io/kubectl v0.32.2 // indirect oras.land/oras-go v1.2.5 // indirect sigs.k8s.io/json v0.0.0-20241010143419-9aa6b5e7a4b3 // indirect - sigs.k8s.io/kustomize/api v0.18.0 // indirect - sigs.k8s.io/kustomize/kyaml v0.18.1 // indirect - sigs.k8s.io/structured-merge-diff/v4 v4.4.2 // indirect + sigs.k8s.io/kustomize/api v0.19.0 // indirect + sigs.k8s.io/kustomize/kyaml v0.19.0 // indirect + sigs.k8s.io/randfill v1.0.0 // indirect + sigs.k8s.io/structured-merge-diff/v4 v4.6.0 // indirect ) diff --git a/go.sum b/go.sum index 1bf998234..3cd201b26 100644 --- a/go.sum +++ b/go.sum @@ -1,29 +1,29 @@ -cel.dev/expr v0.19.2 h1:V354PbqIXr9IQdwy4SYA4xa0HXaWq1BUPAGzugBY5V4= -cel.dev/expr v0.19.2/go.mod h1:MrpN08Q+lEBs+bGYdLxxHkZoUSsCp0nSKTs0nTymJgw= -cloud.google.com/go v0.120.0 h1:wc6bgG9DHyKqF5/vQvX1CiZrtHnxJjBlKUyF9nP6meA= -cloud.google.com/go v0.120.0/go.mod h1:/beW32s8/pGRuj4IILWQNd4uuebeT4dkOhKmkfit64Q= -cloud.google.com/go/auth v0.15.0 h1:Ly0u4aA5vG/fsSsxu98qCQBemXtAtJf+95z9HK+cxps= -cloud.google.com/go/auth v0.15.0/go.mod h1:WJDGqZ1o9E9wKIL+IwStfyn/+s59zl4Bi+1KQNVXLZ8= +cel.dev/expr v0.23.1 h1:K4KOtPCJQjVggkARsjG9RWXP6O4R73aHeJMa/dmCQQg= +cel.dev/expr v0.23.1/go.mod h1:hLPLo1W4QUmuYdA72RBX06QTs6MXw941piREPl3Yfiw= +cloud.google.com/go v0.120.1 h1:Z+5V7yd383+9617XDCyszmK5E4wJRJL+tquMfDj9hLM= +cloud.google.com/go v0.120.1/go.mod h1:56Vs7sf/i2jYM6ZL9NYlC82r04PThNcPS5YgFmb0rp8= +cloud.google.com/go/auth v0.16.1 h1:XrXauHMd30LhQYVRHLGvJiYeczweKQXZxsTbV9TiguU= +cloud.google.com/go/auth v0.16.1/go.mod h1:1howDHJ5IETh/LwYs3ZxvlkXF48aSqqJUM+5o02dNOI= cloud.google.com/go/auth/oauth2adapt v0.2.8 h1:keo8NaayQZ6wimpNSmW5OPc283g65QNIiLpZnkHRbnc= cloud.google.com/go/auth/oauth2adapt v0.2.8/go.mod h1:XQ9y31RkqZCcwJWNSx2Xvric3RrU88hAYYbjDWYDL+c= -cloud.google.com/go/compute v1.36.0 h1:QzLrJRxytIGE8OJWzmMweIdiu2pIlRVq9kSi7+xnDkU= -cloud.google.com/go/compute v1.36.0/go.mod h1:+GZuz5prSWFLquViP55zcjRrOm7vRpIllx2MaYpzuiI= +cloud.google.com/go/compute v1.37.0 h1:XxtZlXYkZXub3LNaLu90TTemcFqIU1yZ4E4q9VlR39A= +cloud.google.com/go/compute v1.37.0/go.mod h1:AsK4VqrSyXBo4SMbRtfAO1VfaMjUEjEwv1UB/AwVp5Q= cloud.google.com/go/compute/metadata v0.6.0 h1:A6hENjEsCDtC1k8byVsgwvVcioamEHvZ4j01OwKxG9I= cloud.google.com/go/compute/metadata v0.6.0/go.mod h1:FjyFAW1MW0C203CEOMDTu3Dk1FlqW3Rga40jzHL4hfg= -cloud.google.com/go/iam v1.4.1 h1:cFC25Nv+u5BkTR/BT1tXdoF2daiVbZ1RLx2eqfQ9RMM= -cloud.google.com/go/iam v1.4.1/go.mod h1:2vUEJpUG3Q9p2UdsyksaKpDzlwOrnMzS30isdReIcLM= -cloud.google.com/go/kms v1.21.1 h1:r1Auo+jlfJSf8B7mUnVw5K0fI7jWyoUy65bV53VjKyk= -cloud.google.com/go/kms v1.21.1/go.mod h1:s0wCyByc9LjTdCjG88toVs70U9W+cc6RKFc8zAqX7nE= +cloud.google.com/go/iam v1.5.2 h1:qgFRAGEmd8z6dJ/qyEchAuL9jpswyODjA2lS+w234g8= +cloud.google.com/go/iam v1.5.2/go.mod h1:SE1vg0N81zQqLzQEwxL2WI6yhetBdbNQuTvIKCSkUHE= +cloud.google.com/go/kms v1.21.2 h1:c/PRUSMNQ8zXrc1sdAUnsenWWaNXN+PzTXfXOcSFdoE= +cloud.google.com/go/kms v1.21.2/go.mod h1:8wkMtHV/9Z8mLXEXr1GK7xPSBdi6knuLXIhqjuWcI6w= cloud.google.com/go/logging v1.13.0 h1:7j0HgAp0B94o1YRDqiqm26w4q1rDMH7XNRU34lJXHYc= cloud.google.com/go/logging v1.13.0/go.mod h1:36CoKh6KA/M0PbhPKMq6/qety2DCAErbhXT62TuXALA= -cloud.google.com/go/longrunning v0.6.5 h1:sD+t8DO8j4HKW4QfouCklg7ZC1qC4uzVZt8iz3uTW+Q= -cloud.google.com/go/longrunning v0.6.5/go.mod h1:Et04XK+0TTLKa5IPYryKf5DkpwImy6TluQ1QTLwlKmY= +cloud.google.com/go/longrunning v0.6.7 h1:IGtfDWHhQCgCjwQjV9iiLnUta9LBCo8R9QmAFsS/PrE= +cloud.google.com/go/longrunning v0.6.7/go.mod h1:EAFV3IZAKmM56TyiE6VAP3VoTzhZzySwI/YI1s/nRsY= cloud.google.com/go/monitoring v1.24.0 h1:csSKiCJ+WVRgNkRzzz3BPoGjFhjPY23ZTcaenToJxMM= cloud.google.com/go/monitoring v1.24.0/go.mod h1:Bd1PRK5bmQBQNnuGwHBfUamAV1ys9049oEPHnn4pcsc= -cloud.google.com/go/secretmanager v1.14.6 h1:/ooktIMSORaWk9gm3vf8+Mg+zSrUplJFKBztP993oL0= -cloud.google.com/go/secretmanager v1.14.6/go.mod h1:0OWeM3qpJ2n71MGgNfKsgjC/9LfVTcUqXFUlGxo5PzY= -cloud.google.com/go/storage v1.51.0 h1:ZVZ11zCiD7b3k+cH5lQs/qcNaoSz3U9I0jgwVzqDlCw= -cloud.google.com/go/storage v1.51.0/go.mod h1:YEJfu/Ki3i5oHC/7jyTgsGZwdQ8P9hqMqvpi5kRKGgc= +cloud.google.com/go/secretmanager v1.14.7 h1:VkscIRzj7GcmZyO4z9y1EH7Xf81PcoiAo7MtlD+0O80= +cloud.google.com/go/secretmanager v1.14.7/go.mod h1:uRuB4F6NTFbg0vLQ6HsT7PSsfbY7FqHbtJP1J94qxGc= +cloud.google.com/go/storage v1.53.0 h1:gg0ERZwL17pJ+Cz3cD2qS60w1WMDnwcm5YPAIQBHUAw= +cloud.google.com/go/storage v1.53.0/go.mod h1:7/eO2a/srr9ImZW9k5uufcNahT2+fPb8w5it1i5boaA= cloud.google.com/go/trace v1.11.3 h1:c+I4YFjxRQjvAhRmSsmjpASUKq88chOX854ied0K/pE= cloud.google.com/go/trace v1.11.3/go.mod h1:pt7zCYiDSQjC9Y2oqCsh9jF4GStB/hmjrYLsxRR27q8= dario.cat/mergo v1.0.1 h1:Ra4+bf83h2ztPIQYNP99R6m+Y7KfnARDfID+a+vLl4s= @@ -56,14 +56,14 @@ github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/network/armnetwork/v6 v6.2 github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/network/armnetwork/v6 v6.2.0/go.mod h1:ulHyBFJOI0ONiRL4vcJTmS7rx18jQQlEPmAgo80cRdM= github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armresources v1.2.0 h1:Dd+RhdJn0OTtVGaeDLZpcumkIVCtA/3/Fo42+eoYvVM= github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armresources v1.2.0/go.mod h1:5kakwfW5CjC9KK+Q4wjXAg+ShuIm2mBMua0ZFj2C8PE= -github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/storage/armstorage v1.6.0 h1:PiSrjRPpkQNjrM8H0WwKMnZUdu1RGMtd/LdGKUrOo+c= -github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/storage/armstorage v1.6.0/go.mod h1:oDrbWx4ewMylP7xHivfgixbfGBT6APAwsSoHRKotnIc= +github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/storage/armstorage v1.8.0 h1:LR0kAX9ykz8G4YgLCaRDVJ3+n43R8MneB5dTy2konZo= +github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/storage/armstorage v1.8.0/go.mod h1:DWAciXemNf++PQJLeXUB4HHH5OpsAh12HZnu2wXE1jA= github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/azsecrets v1.3.1 h1:mrkDCdkMsD4l9wjFGhofFHFrV43Y3c53RSLKOCJ5+Ow= github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/azsecrets v1.3.1/go.mod h1:hPv41DbqMmnxcGralanA/kVlfdH5jv3T4LxGku2E1BY= github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/internal v1.1.1 h1:bFWuoEKg+gImo7pvkiQEFAc8ocibADgXeiLAxWhWmkI= github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/internal v1.1.1/go.mod h1:Vih/3yc6yac2JzU4hzpaDupBJP0Flaia9rXXrU8xyww= -github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.6.0 h1:UXT0o77lXQrikd1kgwIPQOUect7EoR/+sbP4wQKdzxM= -github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.6.0/go.mod h1:cTvi54pg19DoT07ekoeMgE/taAwNtCShVeZqA+Iv2xI= +github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.6.1 h1:lhZdRq7TIx0GJQvSyX2Si406vrYsov2FXGp/RnSEtcs= +github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.6.1/go.mod h1:8cl44BDmi+effbARHMQjgOKA2AYvcohNm7KEt42mSV8= github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161 h1:L/gRVlceqvL25UVaW/CKtUDjefjrs0SPonmDGUVOYP0= github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= github.com/Azure/go-autorest v14.2.0+incompatible h1:V5VMDjClD3GiElqLWO7mz2MxNAK/vTfRHdAubSIPRgs= @@ -94,8 +94,8 @@ github.com/BurntSushi/toml v1.5.0 h1:W5quZX/G/csjUnuI8SUYlsHs9M38FC7znL0lIO+DvMg github.com/BurntSushi/toml v1.5.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho= github.com/DATA-DOG/go-sqlmock v1.5.2 h1:OcvFkGmslmlZibjAjaHm3L//6LiuBgolP7OputlJIzU= github.com/DATA-DOG/go-sqlmock v1.5.2/go.mod h1:88MAG/4G7SMwSE3CeA0ZKzrT5CiOU3OJ+JlNzwDqpNU= -github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.25.0 h1:3c8yed4lgqTt+oTQ+JNMDo+F4xprBf+O/il4ZC0nRLw= -github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.25.0/go.mod h1:obipzmGjfSjam60XLwGfqUkJsfiheAl+TUjG+4yzyPM= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.27.0 h1:ErKg/3iS1AKcTkf3yixlZ54f9U1rljCkQyEXWUnIUxc= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.27.0/go.mod h1:yAZHSGnqScoU556rBOVkwLze6WP5N+U11RHuWaGVxwY= github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.51.0 h1:fYE9p3esPxA/C0rQ0AHhP0drtPXDRhaWiwg1DPqO7IU= github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.51.0/go.mod h1:BnBReJLvVYx2CS/UHOgVz2BXKXD9wsQPxZug20nZhd0= github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/cloudmock v0.51.0 h1:OqVGm6Ei3x5+yZmSJG1Mh2NwHvpVmZ08CB5qJhT9Nuk= @@ -134,8 +134,8 @@ github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkY github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 h1:DklsrG3dyBCFEj5IhUbnKptjxatkF07cF2ak3yi77so= github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2/go.mod h1:WaHUgvxTVq04UNunO+XhnAqY/wQc+bxr74GqbsZ/Jqw= github.com/aws/aws-sdk-go v1.30.27/go.mod h1:5zCpMtNQVjRREroY7sYe8lOMRSxkhG6MZveU8YkpAk0= -github.com/aws/aws-sdk-go v1.55.6 h1:cSg4pvZ3m8dgYcgqB97MrcdjUmZ1BeMYKUxMMB89IPk= -github.com/aws/aws-sdk-go v1.55.6/go.mod h1:eRwEWoyTWFMVYVQzKMNHWP5/RV4xIUGMQfXQHfHkpNU= +github.com/aws/aws-sdk-go v1.55.7 h1:UJrkFq7es5CShfBwlWAC8DA077vp8PyVbQd3lqLiztE= +github.com/aws/aws-sdk-go v1.55.7/go.mod h1:eRwEWoyTWFMVYVQzKMNHWP5/RV4xIUGMQfXQHfHkpNU= github.com/aws/aws-sdk-go-v2 v1.36.3 h1:mJoei2CxPutQVxaATCzDUjcZEjVRdpsiiXi2o38yqWM= github.com/aws/aws-sdk-go-v2 v1.36.3/go.mod h1:LLXuLpgzEbD766Z5ECcRmi8AzSwfZItDtmABVkRLGzg= github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.10 h1:zAybnyUQXIZ5mok5Jqwlf58/TFE7uvd3IAsa1aF9cXs= @@ -146,8 +146,8 @@ github.com/aws/aws-sdk-go-v2/credentials v1.17.67 h1:9KxtdcIA/5xPNQyZRgUSpYOE6j9 github.com/aws/aws-sdk-go-v2/credentials v1.17.67/go.mod h1:p3C44m+cfnbv763s52gCqrjaqyPikj9Sg47kUVaNZQQ= github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.30 h1:x793wxmUWVDhshP8WW2mlnXuFrO4cOd3HLBroh1paFw= github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.30/go.mod h1:Jpne2tDnYiFascUEs2AWHJL9Yp7A5ZVy3TNyxaAjD6M= -github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.72 h1:PcKMOZfp+kNtJTw2HF2op6SjDvwPBYRvz0Y24PQLUR4= -github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.72/go.mod h1:vq7/m7dahFXcdzWVOvvjasDI9RcsD3RsTfHmDundJYg= +github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.75 h1:S61/E3N01oral6B3y9hZ2E1iFDqCZPPOBoBQretCnBI= +github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.75/go.mod h1:bDMQbkI1vJbNjnvJYpPTSNYBkI/VIv18ngWb/K84tkk= github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.34 h1:ZK5jHhnrioRkUNOc+hOgQKlUL5JeC3S6JgLxtQ+Rm0Q= github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.34/go.mod h1:p4VfIceZokChbA9FzMbRGz5OV+lekcVtHlPKEO0gSZY= github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.34 h1:SZwFm17ZUNNg5Np0ioo/gq8Mn6u9w19Mri8DnJ15Jf0= @@ -156,28 +156,28 @@ github.com/aws/aws-sdk-go-v2/internal/ini v1.8.3 h1:bIqFDwgGXXN1Kpp99pDOdKMTTb5d github.com/aws/aws-sdk-go-v2/internal/ini v1.8.3/go.mod h1:H5O/EsxDWyU+LP/V8i5sm8cxoZgc2fdNR9bxlOFrQTo= github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.34 h1:ZNTqv4nIdE/DiBfUUfXcLZ/Spcuz+RjeziUtNJackkM= github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.34/go.mod h1:zf7Vcd1ViW7cPqYWEHLHJkS50X0JS2IKz9Cgaj6ugrs= -github.com/aws/aws-sdk-go-v2/service/autoscaling v1.52.3 h1:QsKdBxtC8csnKt5BbV7D1op4Nf13p2YkTJIkppaCakw= -github.com/aws/aws-sdk-go-v2/service/autoscaling v1.52.3/go.mod h1:CDqMoc3KRdZJ8qziW96J35lKH01Wq3B2aihtHj2JbRs= -github.com/aws/aws-sdk-go-v2/service/cloudfront v1.45.3 h1:xQnjN34F4I3a/I3Xj0g9vmD5hAqC7u5y3SC3eC6T1E8= -github.com/aws/aws-sdk-go-v2/service/cloudfront v1.45.3/go.mod h1:FIBJ48TS+qJb+Ne4qJ+0NeIhtPTVXItXooTeNeVI4Po= -github.com/aws/aws-sdk-go-v2/service/ec2 v1.211.3 h1:4dPHqFVVvFG+ntkVUXrMrY55+E5dzFfEpjFWdkdSxnc= -github.com/aws/aws-sdk-go-v2/service/ec2 v1.211.3/go.mod h1:ouvGEfHbLaIlWwpDpOVWPWR+YwO0HDv3vm5tYLq8ImY= +github.com/aws/aws-sdk-go-v2/service/autoscaling v1.52.4 h1:vzLD0FyNU4uxf2QE5UDG0jSEitiJXbVEUwf2Sk3usF4= +github.com/aws/aws-sdk-go-v2/service/autoscaling v1.52.4/go.mod h1:CDqMoc3KRdZJ8qziW96J35lKH01Wq3B2aihtHj2JbRs= +github.com/aws/aws-sdk-go-v2/service/cloudfront v1.46.0 h1:wdm9Pjye5PSQ+ELMHXOh7SQhiXLDk2iONZ+fDmISi28= +github.com/aws/aws-sdk-go-v2/service/cloudfront v1.46.0/go.mod h1:FIBJ48TS+qJb+Ne4qJ+0NeIhtPTVXItXooTeNeVI4Po= +github.com/aws/aws-sdk-go-v2/service/ec2 v1.214.0 h1:cFR69no3REgjwiGNHhSeB8IZ1sGrLAoLqHACMNuN+j4= +github.com/aws/aws-sdk-go-v2/service/ec2 v1.214.0/go.mod h1:ouvGEfHbLaIlWwpDpOVWPWR+YwO0HDv3vm5tYLq8ImY= github.com/aws/aws-sdk-go-v2/service/elasticloadbalancingv2 v1.45.2 h1:vX70Z4lNSr7XsioU0uJq5yvxgI50sB66MvD+V/3buS4= github.com/aws/aws-sdk-go-v2/service/elasticloadbalancingv2 v1.45.2/go.mod h1:xnCC3vFBfOKpU6PcsCKL2ktgBTZfOwTGxj6V8/X3IS4= github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.3 h1:eAh2A4b5IzM/lum78bZ590jy36+d/aFLgKF/4Vd1xPE= github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.3/go.mod h1:0yKJC/kb8sAnmlYa6Zs3QVYqaC8ug2AbnNChv5Ox3uA= -github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.7.0 h1:lguz0bmOoGzozP9XfRJR1QIayEYo+2vP/No3OfLF0pU= -github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.7.0/go.mod h1:iu6FSzgt+M2/x3Dk8zhycdIcHjEFb36IS8HVUVFoMg0= +github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.7.1 h1:4nm2G6A4pV9rdlWzGMPv4BNtQp22v1hg3yrtkYpeLl8= +github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.7.1/go.mod h1:iu6FSzgt+M2/x3Dk8zhycdIcHjEFb36IS8HVUVFoMg0= github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.15 h1:dM9/92u2F1JbDaGooxTq18wmmFzbJRfXfVfy96/1CXM= github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.15/go.mod h1:SwFBy2vjtA0vZbjjaFtfN045boopadnoVPhu4Fv66vY= github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.15 h1:moLQUoVq91LiqT1nbvzDukyqAlCv89ZmwaHw/ZFlFZg= github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.15/go.mod h1:ZH34PJUc8ApjBIfgQCFvkWcUDBtl/WTD+uiYHjd8igA= github.com/aws/aws-sdk-go-v2/service/resourcegroupstaggingapi v1.26.3 h1:P87jejqS8WvQvRWyXlHUylt99VXt0y/WUIFuU6gBU7A= github.com/aws/aws-sdk-go-v2/service/resourcegroupstaggingapi v1.26.3/go.mod h1:cgPfPTC/V3JqwCKed7Q6d0FrgarV7ltz4Bz6S4Q+Dqk= -github.com/aws/aws-sdk-go-v2/service/s3 v1.79.2 h1:tWUG+4wZqdMl/znThEk9tcCy8tTMxq8dW0JTgamohrY= -github.com/aws/aws-sdk-go-v2/service/s3 v1.79.2/go.mod h1:U5SNqwhXB3Xe6F47kXvWihPl/ilGaEDe8HD/50Z9wxc= -github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.35.3 h1:9bxA21Y62N32bAo4tVYXBhJU+VtCVKPpXEIEsScM0kc= -github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.35.3/go.mod h1:yGhDiLKguA3iFJYxbrQkQiNzuy+ddxesSZYWVeeEH5Q= +github.com/aws/aws-sdk-go-v2/service/s3 v1.79.3 h1:BRXS0U76Z8wfF+bnkilA2QwpIch6URlm++yPUt9QPmQ= +github.com/aws/aws-sdk-go-v2/service/s3 v1.79.3/go.mod h1:bNXKFFyaiVvWuR6O16h/I1724+aXe/tAkA9/QS01t5k= +github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.35.4 h1:EKXYJ8kgz4fiqef8xApu7eH0eae2SrVG+oHCLFybMRI= +github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.35.4/go.mod h1:yGhDiLKguA3iFJYxbrQkQiNzuy+ddxesSZYWVeeEH5Q= github.com/aws/aws-sdk-go-v2/service/sso v1.25.3 h1:1Gw+9ajCV1jogloEv1RRnvfRFia2cL6c9cuKV2Ps+G8= github.com/aws/aws-sdk-go-v2/service/sso v1.25.3/go.mod h1:qs4a9T5EMLl/Cajiw2TcbNt2UNo/Hqlyp+GiuG4CFDI= github.com/aws/aws-sdk-go-v2/service/ssooidc v1.30.1 h1:hXmVKytPfTy5axZ+fYbR5d0cFmC3JvwLm5kM83luako= @@ -186,10 +186,10 @@ github.com/aws/aws-sdk-go-v2/service/sts v1.33.19 h1:1XuUZ8mYJw9B6lzAkXhqHlJd/Xv github.com/aws/aws-sdk-go-v2/service/sts v1.33.19/go.mod h1:cQnB8CUnxbMU82JvlqjKR2HBOm3fe9pWorWBza6MBJ4= github.com/aws/smithy-go v1.22.3 h1:Z//5NuZCSW6R4PhQ93hShNbyBbn8BWCmCVCt+Q8Io5k= github.com/aws/smithy-go v1.22.3/go.mod h1:t1ufH5HMublsJYulve2RKmHDC15xu1f26kHCp/HgceI= -github.com/bazelbuild/buildtools v0.0.0-20250410144851-f37c35dc3237 h1:C89DTMD6dcAnRfQot1V0jMlFPkkypSD1xQBzrzJfknY= -github.com/bazelbuild/buildtools v0.0.0-20250410144851-f37c35dc3237/go.mod h1:PLNUetjLa77TCCziPsz0EI8a6CUxgC+1jgmWv0H25tg= -github.com/bazelbuild/rules_go v0.53.0 h1:u160DT+RRb+Xb2aSO4piN8xhs4aZvWz2UDXCq48F4ao= -github.com/bazelbuild/rules_go v0.53.0/go.mod h1:xB1jfsYHWlnZyPPxzlOSst4q2ZAwS251Mp9Iw6TPuBc= +github.com/bazelbuild/buildtools v0.0.0-20250427233527-d9ed52af26ee h1:bCB8uzOXSBWZk4Ss6zaoLjeSU0ZzrykiwDOR31KF4ak= +github.com/bazelbuild/buildtools v0.0.0-20250427233527-d9ed52af26ee/go.mod h1:PLNUetjLa77TCCziPsz0EI8a6CUxgC+1jgmWv0H25tg= +github.com/bazelbuild/rules_go v0.54.0 h1:D9aCU7j5rdRxg2rXOZX5zHZ395XC0KbgC4rnyaQ3ofM= +github.com/bazelbuild/rules_go v0.54.0/go.mod h1:T90Gpyq4HDFlsrvtQa2CBdHNJ2P4rAu/uUTmQbanzf0= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= @@ -226,16 +226,16 @@ github.com/containerd/containerd v1.7.27 h1:yFyEyojddO3MIGVER2xJLWoCIn+Up4GaHFqu github.com/containerd/containerd v1.7.27/go.mod h1:xZmPnl75Vc+BLGt4MIfu6bp+fy03gdHAn9bz+FreFR0= github.com/containerd/continuity v0.4.4 h1:/fNVfTJ7wIl/YPMHjf+5H32uFhl63JucB34PlCpMKII= github.com/containerd/continuity v0.4.4/go.mod h1:/lNJvtJKUQStBzpVQ1+rasXO1LAWtUQssk28EZvJ3nE= -github.com/containerd/errdefs v0.3.0 h1:FSZgGOeK4yuT/+DnF07/Olde/q4KBoMsaamhXxIMDp4= -github.com/containerd/errdefs v0.3.0/go.mod h1:+YBYIdtsnF4Iw6nWZhJcqGSg/dwvV7tyJ/kCkyJ2k+M= +github.com/containerd/errdefs v1.0.0 h1:tg5yIfIlQIrxYtu9ajqY42W3lpS19XqdxRQeEwYG8PI= +github.com/containerd/errdefs v1.0.0/go.mod h1:+YBYIdtsnF4Iw6nWZhJcqGSg/dwvV7tyJ/kCkyJ2k+M= github.com/containerd/log v0.1.0 h1:TCJt7ioM2cr/tfR8GPbGf9/VRAX8D2B4PjzCpfX540I= github.com/containerd/log v0.1.0/go.mod h1:VRRf09a7mHDIRezVKTRCrOq78v577GXq3bSa3EhrzVo= github.com/containerd/platforms v0.2.1 h1:zvwtM3rz2YHPQsF2CHYM8+KtB5dvhISiXh5ZpSBQv6A= github.com/containerd/platforms v0.2.1/go.mod h1:XHCb+2/hzowdiut9rkudds9bE5yJ7npe7dG/wG+uFPw= github.com/coredns/caddy v1.1.1 h1:2eYKZT7i6yxIfGP3qLJoJ7HAsDJqYB+X68g4NYjSrE0= github.com/coredns/caddy v1.1.1/go.mod h1:A6ntJQlAWuQfFlsd9hvigKbo2WS0VUs2l1e2F+BawD4= -github.com/coredns/corefile-migration v1.0.24 h1:NL/zRKijhJZLYlNnMr891DRv5jXgfd3Noons1M6oTpc= -github.com/coredns/corefile-migration v1.0.24/go.mod h1:56DPqONc3njpVPsdilEnfijCwNGC3/kTJLl7i7SPavY= +github.com/coredns/corefile-migration v1.0.25 h1:/XexFhM8FFlFLTS/zKNEWgIZ8Gl5GaWrHsMarGj/PRQ= +github.com/coredns/corefile-migration v1.0.25/go.mod h1:56DPqONc3njpVPsdilEnfijCwNGC3/kTJLl7i7SPavY= github.com/coreos/go-semver v0.3.1 h1:yi21YpKnrx1gt5R+la8n5WgS0kCrsPp33dmEyHReZr4= github.com/coreos/go-semver v0.3.1/go.mod h1:irMmmIw/7yzSRPWryHsK7EYSg09caPQL03VsM8rvUec= github.com/coreos/go-systemd/v22 v22.5.0 h1:RrqgGjYQKalulkV8NGVIfkXQf6YYmOyiJKk8iXXhfZs= @@ -267,8 +267,8 @@ github.com/docker/cli v27.5.0+incompatible h1:aMphQkcGtpHixwwhAXJT1rrK/detk2JIvD github.com/docker/cli v27.5.0+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= github.com/docker/distribution v2.8.3+incompatible h1:AtKxIZ36LoNK51+Z6RpzLpddBirtxJnzDrHLEKxTAYk= github.com/docker/distribution v2.8.3+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= -github.com/docker/docker v28.0.4+incompatible h1:JNNkBctYKurkw6FrHfKqY0nKIDf5nrbxjVBtS+cdcok= -github.com/docker/docker v28.0.4+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/docker v28.1.1+incompatible h1:49M11BFLsVO1gxY9UX9p/zwkE/rswggs8AdFmXQw51I= +github.com/docker/docker v28.1.1+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= github.com/docker/docker-credential-helpers v0.8.2 h1:bX3YxiGzFP5sOXWc3bTPEXdEaZSeVMrFgOr3T+zrFAo= github.com/docker/docker-credential-helpers v0.8.2/go.mod h1:P3ci7E3lwkZg6XiHdRKft1KckHiO9a2rNtyFbZ/ry9M= github.com/docker/go-connections v0.5.0 h1:USnMq7hx7gwdVZq1L49hLXaFtUdTADjXGp+uj1Br63c= @@ -297,8 +297,8 @@ github.com/envoyproxy/go-control-plane/ratelimit v0.1.0 h1:/G9QYbddjL25KvtKTv3an github.com/envoyproxy/go-control-plane/ratelimit v0.1.0/go.mod h1:Wk+tMFAFbCXaJPzVVHnPgRKdUdwW/KdbRt94AzgRee4= github.com/envoyproxy/protoc-gen-validate v1.2.1 h1:DEo3O99U8j4hBFwbJfrz9VtgcDfUKS7KJ7spH3d86P8= github.com/envoyproxy/protoc-gen-validate v1.2.1/go.mod h1:d/C80l/jxXLdfEIhX1W2TmLfsJ31lvEjwamM4DxlWXU= -github.com/evanphx/json-patch v5.9.0+incompatible h1:fBXyNpNMuTTDdquAq/uisOr2lShz4oaXpDTX2bLe7ls= -github.com/evanphx/json-patch v5.9.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= +github.com/evanphx/json-patch v5.9.11+incompatible h1:ixHHqfcGvxhWkniF1tWxBHA0yb4Z+d1UQi45df52xW8= +github.com/evanphx/json-patch v5.9.11+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= github.com/evanphx/json-patch/v5 v5.9.11 h1:/8HVnzMq13/3x9TPvjG08wUGqBTmZBsCWzjTM0wiaDU= github.com/evanphx/json-patch/v5 v5.9.11/go.mod h1:3j+LviiESTElxA4p3EMKAB9HXj3/XEtnUf6OZxqIQTM= github.com/exponent-io/jsonpath v0.0.0-20210407135951-1de76d718b3f h1:Wl78ApPPB2Wvf/TIe2xdyJxTlb6obmF18d8QdkxNDu4= @@ -390,15 +390,15 @@ github.com/gobwas/glob v0.2.3/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJA github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/godbus/dbus/v5 v5.1.0 h1:4KLkAxT3aOY8Li4FRJe/KvhoNFFxo0m6fNuFUO8QJUk= github.com/godbus/dbus/v5 v5.1.0/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= -github.com/gofrs/uuid/v5 v5.3.0 h1:m0mUMr+oVYUdxpMLgSYCZiXe7PuVPnI94+OMeVBNedk= -github.com/gofrs/uuid/v5 v5.3.0/go.mod h1:CDOjlDMVAtN56jqyRUZh58JT31Tiw7/oQyEXZV+9bD8= +github.com/gofrs/uuid/v5 v5.3.2 h1:2jfO8j3XgSwlz/wHqemAEugfnTlikAYHhnqQ8Xh4fE0= +github.com/gofrs/uuid/v5 v5.3.2/go.mod h1:CDOjlDMVAtN56jqyRUZh58JT31Tiw7/oQyEXZV+9bD8= github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= github.com/golang-jwt/jwt/v4 v4.0.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= github.com/golang-jwt/jwt/v4 v4.5.0/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= -github.com/golang-jwt/jwt/v4 v4.5.1 h1:JdqV9zKUdtaa9gdPlywC3aeoEsR681PlKC+4F5gQgeo= -github.com/golang-jwt/jwt/v4 v4.5.1/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= +github.com/golang-jwt/jwt/v4 v4.5.2 h1:YtQM7lnr8iZ+j5q71MGKkNw9Mn7AjHM68uc9g5fXeUI= +github.com/golang-jwt/jwt/v4 v4.5.2/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= github.com/golang-jwt/jwt/v5 v5.2.2 h1:Rl4B7itRWVtYIHFrSNd7vhTiz9UpLdi6gZhZ3wEeDy8= github.com/golang-jwt/jwt/v5 v5.2.2/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk= github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8 h1:f+oWsMOmNPc8JmEHVZIycC7hBoQxHH9pNKQORJNozsQ= @@ -418,8 +418,8 @@ github.com/google/btree v1.1.3/go.mod h1:qOPhT0dTNdNzV6Z/lhRX0YXUafgPLFUh+gZMl76 github.com/google/certificate-transparency-go v1.0.21/go.mod h1:QeJfpSbVSfYc7RgB3gJFj9cbuQMMchQxrWXz8Ruopmg= github.com/google/certificate-transparency-go v1.1.8 h1:LGYKkgZF7satzgTak9R4yzfJXEeYVAjV6/EAEJOf1to= github.com/google/certificate-transparency-go v1.1.8/go.mod h1:bV/o8r0TBKRf1X//iiiSgWrvII4d7/8OiA+3vG26gI8= -github.com/google/gnostic-models v0.6.8 h1:yo/ABAfM5IMRsS1VnXjTBvUb61tFIHozhlYvRgGre9I= -github.com/google/gnostic-models v0.6.8/go.mod h1:5n7qKqH0f5wFt+aWF8CW6pZLLNOfYuF5OpfBSENuI8U= +github.com/google/gnostic-models v0.6.9 h1:MU/8wDLif2qCXZmzncUQ/BOfxWfthHi63KqpoNbWqVw= +github.com/google/gnostic-models v0.6.9/go.mod h1:CiWsm0s6BSQd1hRn8/QmxqB6BesYcbSZxsz9b0KuDBw= github.com/google/go-attestation v0.5.1 h1:jqtOrLk5MNdliTKjPbIPrAaRKJaKW+0LIU2n/brJYms= github.com/google/go-attestation v0.5.1/go.mod h1:KqGatdUhg5kPFkokyzSBDxwSCFyRgIgtRkMp6c3lOBQ= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= @@ -434,10 +434,10 @@ github.com/google/go-containerregistry v0.20.3 h1:oNx7IdTI936V8CQRveCjaxOiegWwvM github.com/google/go-containerregistry v0.20.3/go.mod h1:w00pIgBRDVUDFM6bq+Qx8lwNWK+cxgCuX1vd3PIBDNI= github.com/google/go-sev-guest v0.13.0 h1:DJB6ACdykyweMU0HGOp/TQ7cjsnbV2ecbYunu2E0qy0= github.com/google/go-sev-guest v0.13.0/go.mod h1:SK9vW+uyfuzYdVN0m8BShL3OQCtXZe/JPF7ZkpD3760= -github.com/google/go-tdx-guest v0.3.2-0.20250318080245-df394d562502 h1:UdMIBSun24nrhzgGYuwG9LsOd0b2J4wBvo/96grtvm4= -github.com/google/go-tdx-guest v0.3.2-0.20250318080245-df394d562502/go.mod h1:uHy3VaNXNXhl0fiPxKqTxieeouqQmW6A0EfLcaeCYBk= -github.com/google/go-tpm v0.9.3 h1:+yx0/anQuGzi+ssRqeD6WpXjW2L/V0dItUayO0i9sRc= -github.com/google/go-tpm v0.9.3/go.mod h1:h9jEsEECg7gtLis0upRBQU+GhYVH6jMjrFxI8u6bVUY= +github.com/google/go-tdx-guest v0.3.2-0.20250505161510-9efd53b4a100 h1:E5ArM6vmtaUbgTZM8W3G+bgseO3i5l8BpJCKuUH7WVc= +github.com/google/go-tdx-guest v0.3.2-0.20250505161510-9efd53b4a100/go.mod h1:uHy3VaNXNXhl0fiPxKqTxieeouqQmW6A0EfLcaeCYBk= +github.com/google/go-tpm v0.9.4 h1:awZRf9FwOeTunQmHoDYSHJps3ie6f1UlhS1fOdPEt1I= +github.com/google/go-tpm v0.9.4/go.mod h1:h9jEsEECg7gtLis0upRBQU+GhYVH6jMjrFxI8u6bVUY= github.com/google/go-tpm-tools v0.4.4 h1:oiQfAIkc6xTy9Fl5NKTeTJkBTlXdHsxAofmQyxBKY98= github.com/google/go-tpm-tools v0.4.4/go.mod h1:T8jXkp2s+eltnCDIsXR84/MTcVU9Ja7bh3Mit0pa4AY= github.com/google/go-tspi v0.3.0 h1:ADtq8RKfP+jrTyIWIZDIYcKOMecRqNJFOew2IT0Inus= @@ -464,23 +464,23 @@ github.com/googleapis/gax-go/v2 v2.14.1 h1:hb0FFeiPaQskmvakKu5EbCbpntQn48jyHuvrk github.com/googleapis/gax-go/v2 v2.14.1/go.mod h1:Hb/NubMaVM88SrNkvl8X/o8XWwDJEPqouaLeN2IUxoA= github.com/gophercloud/gophercloud/v2 v2.7.0 h1:o0m4kgVcPgHlcXiWAjoVxGd8QCmvM5VU+YM71pFbn0E= github.com/gophercloud/gophercloud/v2 v2.7.0/go.mod h1:Ki/ILhYZr/5EPebrPL9Ej+tUg4lqx71/YH2JWVeU+Qk= -github.com/gophercloud/utils/v2 v2.0.0-20250404104721-4c0f6d93d3a9 h1:Bm0Hmif5p26LN/30JhC3PxLvnQWnnhrxBF9Ta5k3YV0= -github.com/gophercloud/utils/v2 v2.0.0-20250404104721-4c0f6d93d3a9/go.mod h1:ses/xYxYahNWlUnY/b1GjFqbHqtotVaNhVGiuJAUIoU= +github.com/gophercloud/utils/v2 v2.0.0-20250505075637-4ac8ddd08bb6 h1:Nfhbr8km42sm1hM30Q1H38TL0mmBYDnzQG9dF4lxk5Y= +github.com/gophercloud/utils/v2 v2.0.0-20250505075637-4ac8ddd08bb6/go.mod h1:fVKgSRN8s0z1GWqzs5lEY/ISuKJM/Rzce6OwPm2PDbI= github.com/gorilla/handlers v1.5.1 h1:9lRY6j8DEeeBT10CvO9hGW0gmky0BprnvDI5vfhUHH4= github.com/gorilla/handlers v1.5.1/go.mod h1:t8XrUpc4KVXb7HGyJ4/cEnwQiaxrX/hz1Zv/4g96P1Q= github.com/gorilla/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY= github.com/gorilla/mux v1.8.1/go.mod h1:AKf9I4AEqPTmMytcMc0KkNouC66V3BtZ4qD5fmWSiMQ= -github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc= -github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= +github.com/gorilla/websocket v1.5.4-0.20250319132907-e064f32e3674 h1:JeSE6pjso5THxAzdVpqr6/geYxZytqFMBCOtn/ujyeo= +github.com/gorilla/websocket v1.5.4-0.20250319132907-e064f32e3674/go.mod h1:r4w70xmWCQKmi1ONH4KIaBptdivuRPyosB9RmPlGEwA= github.com/gosuri/uitable v0.0.4 h1:IG2xLKRvErL3uhY6e1BylFzG+aJiwQviDDTfOKeKTpY= github.com/gosuri/uitable v0.0.4/go.mod h1:tKR86bXuXPZazfOTG1FIzvjIdXzd0mo4Vtn16vt0PJo= github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79 h1:+ngKgrYPPJrOjhax5N+uePQ0Fh1Z7PheYoUI/0nzkPA= github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= -github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.3.1 h1:KcFzXwzM/kGhIRHvc8jdixfIJjVzuUJdnv+5xsPutog= -github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.3.1/go.mod h1:qOchhhIlmRcqk/O9uCo/puJlyo07YINaIqdZfZG3Jkc= +github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.3.2 h1:sGm2vDRFUrQJO/Veii4h4zG2vvqG6uWNkBHSTqXOZk0= +github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.3.2/go.mod h1:wd1YpapPLivG6nQgbf7ZkG1hhSOXDhhn4MLTknx2aAc= github.com/grpc-ecosystem/grpc-gateway v1.16.0 h1:gmcG1KaJ57LophUzW0Hy8NmPhnMZb4M0+kPpLofRdBo= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.24.0 h1:TmHmbvxPmaegwhDubVz0lICL0J5Ka2vwTzhoePEXsGE= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.24.0/go.mod h1:qztMSjm835F2bXf+5HKAPIS5qsmQDqZna/PgVt4rWtI= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.26.3 h1:5ZPtiqj0JL5oKWmcsq4VMaAW5ukBEgSGXEN89zeH1Jo= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.26.3/go.mod h1:ndYquD05frm2vACXE1nsccT4oJzjhw2arTS2cpUD1PI= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I= github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= @@ -587,8 +587,8 @@ github.com/keybase/go-keychain v0.0.1 h1:way+bWYa6lDppZoZcgMbYsvC7GxljxrskdNInRt github.com/keybase/go-keychain v0.0.1/go.mod h1:PdEILRW3i9D8JcdM+FmY6RwkHGnhHxXwkPPMeUgOK1k= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/klauspost/compress v1.17.11 h1:In6xLpyWOi1+C7tXUUWv2ot1QvBjxevKAaI6IXrJmUc= -github.com/klauspost/compress v1.17.11/go.mod h1:pMDklpSncoRMuLFrf1W9Ss9KT+0rH90U12bZKk7uwG0= +github.com/klauspost/compress v1.18.0 h1:c/Cqfb0r+Yi+JtIEq73FWXVkRonBlf0CRNYc8Zttxdo= +github.com/klauspost/compress v1.18.0/go.mod h1:2Pp+KzxcywXVXMr50+X0Q/Lsb43OQHYWRCY2AiWywWQ= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= @@ -621,13 +621,12 @@ github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVc github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= -github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= -github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= +github.com/mattn/go-colorable v0.1.14 h1:9A9LHSqF/7dyVVX6g0U9cwm9pG3kP9gSzcuIPHPsaIE= +github.com/mattn/go-colorable v0.1.14/go.mod h1:6LmQG8QLFO4G5z1gPvYEzlUgJ2wF+stgPZH1UqBm1s8= github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= github.com/mattn/go-isatty v0.0.10/go.mod h1:qgIWMr58cqv1PHHyhnkY9lrL7etaEgOFcMEpPG5Rm84= github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= -github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/mattn/go-runewidth v0.0.16 h1:E5ScNMtiwvlvB5paMFdw9p4kSQzbXFikJ5SQO6TULQc= @@ -658,8 +657,12 @@ github.com/moby/locker v1.0.1 h1:fOXqR41zeveg4fFODix+1Ch4mj/gT0NE1XJbp/epuBg= github.com/moby/locker v1.0.1/go.mod h1:S7SDdo5zpBK84bzzVlKr2V0hz+7x9hWbYC/kq7oQppc= github.com/moby/spdystream v0.5.0 h1:7r0J1Si3QO/kjRitvSLVVFUjxMEb/YLj6S9FF62JBCU= github.com/moby/spdystream v0.5.0/go.mod h1:xBAYlnt/ay+11ShkdFKNAG7LsyK/tmNBVvVOwrfMgdI= +github.com/moby/sys/atomicwriter v0.1.0 h1:kw5D/EqkBwsBFi0ss9v1VG3wIkVhzGvLklJ+w3A14Sw= +github.com/moby/sys/atomicwriter v0.1.0/go.mod h1:Ul8oqv2ZMNHOceF643P6FKPXeCmYtlQMvpizfsSoaWs= github.com/moby/sys/mountinfo v0.7.2 h1:1shs6aH5s4o5H2zQLn796ADW1wMrIwHsyJ2v9KouLrg= github.com/moby/sys/mountinfo v0.7.2/go.mod h1:1YOa8w8Ih7uW0wALDUgT1dTTSBrZ+HiBLGws92L2RU4= +github.com/moby/sys/sequential v0.6.0 h1:qrx7XFUd/5DxtqcoH1h438hF5TmOvzC/lspjy7zgvCU= +github.com/moby/sys/sequential v0.6.0/go.mod h1:uyv8EUTrca5PnDsdMGXhZe6CCe8U/UiTWd+lL+7b/Ko= github.com/moby/sys/userns v0.1.0 h1:tVLXkFOxVu9A64/yh59slHVv9ahO9UIev4JZusOLG/g= github.com/moby/sys/userns v0.1.0/go.mod h1:IHUYgu/kao6N8YZlp9Cf444ySSvCmDlmzUcYfDHOl28= github.com/moby/term v0.5.0 h1:xt8Q1nalod/v7BqbG21f8mQPqH+xAaC9C3N3wfWbVP0= @@ -684,16 +687,16 @@ github.com/oklog/run v1.0.0 h1:Ru7dDtJNOyC66gQ5dQmaCa0qIsAUFY3sFpK1Xk8igrw= github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA= github.com/oklog/ulid v1.3.1 h1:EGfNDEx6MqHz8B3uNV6QAib1UR2Lm97sHi3ocA6ESJ4= github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= -github.com/olareg/olareg v0.1.1 h1:Ui7q93zjcoF+U9U71sgqgZWByDoZOpqHitUXEu2xV+g= -github.com/olareg/olareg v0.1.1/go.mod h1:w8NP4SWrHHtxsFaUiv1lnCnYPm4sN1seCd2h7FK/dc0= +github.com/olareg/olareg v0.1.2 h1:75G8X6E9FUlzL/CSjgFcYfMgNzlc7CxULpUUNsZBIvI= +github.com/olareg/olareg v0.1.2/go.mod h1:TWs+N6pO1S4bdB6eerzUm/ITRQ6kw91mVf9ZYeGtw+Y= github.com/onsi/ginkgo/v2 v2.23.4 h1:ktYTpKJAVZnDT4VjxSbiBenUjmlL/5QkBEocaWXiQus= github.com/onsi/ginkgo/v2 v2.23.4/go.mod h1:Bt66ApGPBFzHyR+JO10Zbt0Gsp4uWxu5mIOTusL46e8= github.com/onsi/gomega v1.37.0 h1:CdEG8g0S133B4OswTDC/5XPSzE1OeP29QOioj2PID2Y= github.com/onsi/gomega v1.37.0/go.mod h1:8D9+Txp43QWKhM24yyOBEdpkzN8FvJyAwecBgsU4KU0= github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= -github.com/opencontainers/image-spec v1.1.0 h1:8SG7/vwALn54lVB/0yZ/MMwhFrPYtpEHQb2IpWsCzug= -github.com/opencontainers/image-spec v1.1.0/go.mod h1:W4s4sFTMaBeK1BQLXbG4AdM2szdn85PY75RI83NrTrM= +github.com/opencontainers/image-spec v1.1.1 h1:y0fUlFfIZhPF1W537XOLg0/fcx6zcHCJwooC2xJA040= +github.com/opencontainers/image-spec v1.1.1/go.mod h1:qpqAh3Dmcf36wStyyWU+kCeDgrGnAve2nCC8+7h8Q0M= github.com/opentracing/opentracing-go v1.2.0 h1:uEJPy/1a5RIPAJ0Ov+OIO8OxWu77jEv+1B0VhjKrZUs= github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc= github.com/peterbourgon/diskv v2.0.1+incompatible h1:UBdAOUP5p4RWqPBg048CAvpKN+vxiaj6gdUUzhl4XmI= @@ -719,8 +722,8 @@ github.com/prashantv/gostub v1.1.0/go.mod h1:A5zLQHz7ieHGG7is6LLXLz7I8+3LZzsrV0P github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= github.com/prometheus/client_golang v1.1.0/go.mod h1:I1FGZT9+L76gKKOs5djB6ezCbFQP1xR9D75/vuwEF3g= -github.com/prometheus/client_golang v1.21.1 h1:DOvXXTqVzvkIewV/CDPFdejpMCGeMcbGCQ8YOmu+Ibk= -github.com/prometheus/client_golang v1.21.1/go.mod h1:U9NM32ykUErtVBxdvD3zfi+EuFkkaBvMb09mIfe0Zgg= +github.com/prometheus/client_golang v1.22.0 h1:rb93p9lokFEsctTys46VnV1kLCDpVZ0a/Y92Vm0Zc6Q= +github.com/prometheus/client_golang v1.22.0/go.mod h1:R7ljNsLXhuQXYZYtw6GAE9AZg8Y7vEW5scdCXrWRXC0= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E= @@ -736,8 +739,8 @@ github.com/prometheus/procfs v0.15.1 h1:YagwOFzUgYfKKHX6Dr+sHT7km/hxC76UB0leargg github.com/prometheus/procfs v0.15.1/go.mod h1:fB45yRUv8NstnjriLhBQLuOUt+WW4BsoGhij/e3PBqk= github.com/redis/go-redis/v9 v9.7.3 h1:YpPyAayJV+XErNsatSElgRZZVCwXX9QzkKYNvO7x0wM= github.com/redis/go-redis/v9 v9.7.3/go.mod h1:bGUrSggJ9X9GUmZpZNEOQKaANxSGgOEBRltRTZHSvrA= -github.com/regclient/regclient v0.8.2 h1:23BQ3jWgKYHHIXUhp/S9laVJDHDoOQaQCzXMJ4undVE= -github.com/regclient/regclient v0.8.2/go.mod h1:uGyetv0o6VLyRDjtfeBqp/QBwRLJ3Hcn07/+8QbhNcM= +github.com/regclient/regclient v0.8.3 h1:AFAPu/vmOYGyY22AIgzdBUKbzH+83lEpRioRYJ/reCs= +github.com/regclient/regclient v0.8.3/go.mod h1:gjQh5uBVZoo/CngchghtQh9Hx81HOMKRRDd5WPcPkbk= github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ= github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= @@ -766,14 +769,14 @@ github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 h1:n661drycOFuPLCN github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3/go.mod h1:A0bzQcvG0E7Rwjx0REVgAGH58e96+X0MeOfepqsbeW4= github.com/shopspring/decimal v1.4.0 h1:bxl37RwXBklmTi0C79JfXCEBD1cqqHt0bbgBAGFp81k= github.com/shopspring/decimal v1.4.0/go.mod h1:gawqmDU56v4yIKSwfBSFip1HdCCXN8/+DMd9qYNcwME= -github.com/siderolabs/talos/pkg/machinery v1.9.5 h1:hH+f48MLNoDUeyny1zR/i2fLqReK64Fq9WmIizL8GEs= -github.com/siderolabs/talos/pkg/machinery v1.9.5/go.mod h1:yLkJ5ZvIpshDRhUVWjuSyTN6YAQiusSJF4/zj2/XfpY= +github.com/siderolabs/talos/pkg/machinery v1.10.0 h1:XMwL9OBULHfGWcwMwPS9BhxPD1r/lcySbZspDLcX064= +github.com/siderolabs/talos/pkg/machinery v1.10.0/go.mod h1:MVJs1hsKm7N2GkQVeByjoDoLJmU/VhQO0cLJRZPxlZk= github.com/sigstore/protobuf-specs v0.4.1 h1:5SsMqZbdkcO/DNHudaxuCUEjj6x29tS2Xby1BxGU7Zc= github.com/sigstore/protobuf-specs v0.4.1/go.mod h1:+gXR+38nIa2oEupqDdzg4qSBT0Os+sP7oYv6alWewWc= github.com/sigstore/rekor v1.3.10 h1:/mSvRo4MZ/59ECIlARhyykAlQlkmeAQpvBPlmJtZOCU= github.com/sigstore/rekor v1.3.10/go.mod h1:JvryKJ40O0XA48MdzYUPu0y4fyvqt0C4iSY7ri9iu3A= -github.com/sigstore/sigstore v1.9.3 h1:y2qlTj+vh+Or3ictKuR3JUFawZPdDxAjrWkeFhon0OQ= -github.com/sigstore/sigstore v1.9.3/go.mod h1:VwYkiw0G0dRtwL25KSs04hCyVFF6CYMd/qvNeYrl7EQ= +github.com/sigstore/sigstore v1.9.4 h1:64+OGed80+A4mRlNzRd055vFcgBeDghjZw24rPLZgDU= +github.com/sigstore/sigstore v1.9.4/go.mod h1:Q7tGTC3gbtK7c3jcxEmGc2MmK4rRpIRzi3bxRFWKvEY= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ= github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= @@ -787,6 +790,8 @@ github.com/spf13/cobra v1.9.1 h1:CXSaggrXdbHK9CF+8ywj8Amf7PBRmPCOJugH954Nnlo= github.com/spf13/cobra v1.9.1/go.mod h1:nDyEzZ8ogv936Cinf6g1RU9MRY64Ir93oCnqb9wxYW0= github.com/spf13/pflag v1.0.6 h1:jFzHGLGAlb3ruxLB8MhbI6A8+AQX/2eW4qeyNZXNp2o= github.com/spf13/pflag v1.0.6/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +github.com/spiffe/go-spiffe/v2 v2.5.0 h1:N2I01KCUkv1FAjZXJMwh95KK1ZIQLYbPfhaxw8WS0hE= +github.com/spiffe/go-spiffe/v2 v2.5.0/go.mod h1:P+NxobPc6wXhVtINNtFjNWGBTreew1GBUCwT2wPmb7g= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= @@ -853,6 +858,8 @@ github.com/zclconf/go-cty v1.16.2 h1:LAJSwc3v81IRBZyUVQDUdZ7hs3SYs9jv0eZJDWHD/70 github.com/zclconf/go-cty v1.16.2/go.mod h1:VvMs5i0vgZdhYawQNq5kePSpLAoz8u1xvZgrPIxfnZE= github.com/zclconf/go-cty-debug v0.0.0-20240509010212-0d6042c53940 h1:4r45xpDWB6ZMSMNJFMOjqrGHynW3DIBuR2H9j0ug+Mo= github.com/zclconf/go-cty-debug v0.0.0-20240509010212-0d6042c53940/go.mod h1:CmBdvvj3nqzfzJ6nTCIwDTPZ56aVGvDrmztiO5g3qrM= +github.com/zeebo/errs v1.4.0 h1:XNdoD/RRMKP7HD0UhJnIzUy74ISdGGxURlYG8HSWSfM= +github.com/zeebo/errs v1.4.0/go.mod h1:sgbWHsvVuTPHcqJJGQ1WhI5KbWlHYz+2+2C/LSEtCw4= go.etcd.io/etcd/api/v3 v3.5.21 h1:A6O2/JDb3tvHhiIz3xf9nJ7REHvtEFJJ3veW3FbCnS8= go.etcd.io/etcd/api/v3 v3.5.21/go.mod h1:c3aH5wcvXv/9dqIw2Y810LDXJfhSYdHQ0vxmP3CCHVY= go.etcd.io/etcd/client/pkg/v3 v3.5.21 h1:lPBu71Y7osQmzlflM9OfeIV2JlmpBjqBNlLtcoBqUTc= @@ -867,30 +874,30 @@ go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0= go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA= go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A= -go.opentelemetry.io/contrib/detectors/gcp v1.34.0 h1:JRxssobiPg23otYU5SbWtQC//snGVIM3Tx6QRzlQBao= -go.opentelemetry.io/contrib/detectors/gcp v1.34.0/go.mod h1:cV4BMFcscUR/ckqLkbfQmF0PRsq8w/lMGzdbCSveBHo= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.59.0 h1:rgMkmiGfix9vFJDcDi1PK8WEQP4FLQwLDfhp5ZLpFeE= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.59.0/go.mod h1:ijPqXp5P6IRRByFVVg9DY8P5HkxkHE5ARIa+86aXPf4= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.59.0 h1:CV7UdSGJt/Ao6Gp4CXckLxVRRsRgDHoI8XjbL3PDl8s= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.59.0/go.mod h1:FRmFuRJfag1IZ2dPkHnEoSFVgTVPUd2qf5Vi69hLb8I= +go.opentelemetry.io/contrib/detectors/gcp v1.35.0 h1:bGvFt68+KTiAKFlacHW6AhA56GF2rS0bdD3aJYEnmzA= +go.opentelemetry.io/contrib/detectors/gcp v1.35.0/go.mod h1:qGWP8/+ILwMRIUf9uIVLloR1uo5ZYAslM4O6OqUi1DA= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.60.0 h1:x7wzEgXfnzJcHDwStJT+mxOz4etr2EcexjqhBvmoakw= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.60.0/go.mod h1:rg+RlpR5dKwaS95IyyZqj5Wd4E13lk/msnTS0Xl9lJM= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.60.0 h1:sbiXRNDSWJOTobXh5HyQKjq6wUC5tNybqjIqDpAY4CU= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.60.0/go.mod h1:69uWxva0WgAA/4bu2Yy70SLDBwZXuQ6PbBpbsa5iZrQ= go.opentelemetry.io/otel v1.35.0 h1:xKWKPxrxB6OtMCbmMY021CqC45J+3Onta9MqjhnusiQ= go.opentelemetry.io/otel v1.35.0/go.mod h1:UEqy8Zp11hpkUrL73gSlELM0DupHoiq72dR+Zqel/+Y= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.28.0 h1:3Q/xZUyC1BBkualc9ROb4G8qkH90LXEIICcs5zv1OYY= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.28.0/go.mod h1:s75jGIWA9OfCMzF0xr+ZgfrB5FEbbV7UuYo32ahUiFI= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.33.0 h1:Vh5HayB/0HHfOQA7Ctx69E/Y/DcQSMPpKANYVMQ7fBA= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.33.0/go.mod h1:cpgtDBaqD/6ok/UG0jT15/uKjAY8mRA53diogHBg3UI= go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.33.0 h1:wpMfgF8E1rkrT1Z6meFh1NDtownE9Ii3n3X2GJYjsaU= go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.33.0/go.mod h1:wAy0T/dUbs468uOlkT31xjvqQgEVXv58BRFWEgn5v/0= -go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.29.0 h1:WDdP9acbMYjbKIyJUhTvtzj601sVJOqgWdUxSdR/Ysc= -go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.29.0/go.mod h1:BLbf7zbNIONBLPwvFnwNHGj4zge8uTCM/UPIVW1Mq2I= +go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.35.0 h1:PB3Zrjs1sG1GBX51SXyTSoOTqcDglmsk7nT6tkKPb/k= +go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.35.0/go.mod h1:U2R3XyVPzn0WX7wOIypPuptulsMcPDPs/oiSVOMVnHY= go.opentelemetry.io/otel/metric v1.35.0 h1:0znxYu2SNyuMSQT4Y9WDWej0VpcsxkuklLa4/siN90M= go.opentelemetry.io/otel/metric v1.35.0/go.mod h1:nKVFgxBZ2fReX6IlyW28MgZojkoAkJGaE8CpgeAU3oE= go.opentelemetry.io/otel/sdk v1.35.0 h1:iPctf8iprVySXSKJffSS79eOjl9pvxV9ZqOWT0QejKY= go.opentelemetry.io/otel/sdk v1.35.0/go.mod h1:+ga1bZliga3DxJ3CQGg3updiaAJoNECOgJREo9KHGQg= -go.opentelemetry.io/otel/sdk/metric v1.34.0 h1:5CeK9ujjbFVL5c1PhLuStg1wxA7vQv7ce1EK0Gyvahk= -go.opentelemetry.io/otel/sdk/metric v1.34.0/go.mod h1:jQ/r8Ze28zRKoNRdkjCZxfs6YvBTG1+YIqyFVFYec5w= +go.opentelemetry.io/otel/sdk/metric v1.35.0 h1:1RriWBmCKgkeHEhM7a2uMjMUfP7MsOF5JpUCaEqEI9o= +go.opentelemetry.io/otel/sdk/metric v1.35.0/go.mod h1:is6XYCUMpcKi+ZsOvfluY5YstFnhW0BidkR+gL+qN+w= go.opentelemetry.io/otel/trace v1.35.0 h1:dPpEfJu1sDIqruz7BHFG3c7528f6ddfSWfFDVt/xgMs= go.opentelemetry.io/otel/trace v1.35.0/go.mod h1:WUk7DtFp1Aw2MkvqGdwiXYDZZNvA/1J8o6xRXLrIkyc= -go.opentelemetry.io/proto/otlp v1.3.1 h1:TrMUixzpM0yuc/znrFTP9MMRh8trP93mkCiDVeXrui0= -go.opentelemetry.io/proto/otlp v1.3.1/go.mod h1:0X1WI4de4ZsLrrJNLAQbFeLCm3T7yBkR0XqQ7niQU+8= +go.opentelemetry.io/proto/otlp v1.4.0 h1:TA9WRvW6zMwP+Ssb6fLoUIuirti1gGbP28GcKG1jgeg= +go.opentelemetry.io/proto/otlp v1.4.0/go.mod h1:PPBWZIP98o2ElSqI35IHfu7hIhSwvc5N38Jw8pXuGFY= go.uber.org/automaxprocs v1.6.0 h1:O3y2/QNTOdbF+e/dpXNNW7Rx2hZ4sTIPyybbxyNqTUs= go.uber.org/automaxprocs v1.6.0/go.mod h1:ifeIMSnPZuznNm6jmdzmU3/bfk01Fe2fotchwEFJ8r8= go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= @@ -907,10 +914,10 @@ golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5y golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.6.0/go.mod h1:OFC/31mSvZgRz0V1QTNCzfAI1aIRzbiufJtkMIlEp58= golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU= -golang.org/x/crypto v0.37.0 h1:kJNSjF/Xp7kU0iB2Z+9viTPMW4EqqsrywMXLJOOsXSE= -golang.org/x/crypto v0.37.0/go.mod h1:vg+k43peMZ0pUMhYmVAWysMK35e6ioLh3wB8ZCAfbVc= -golang.org/x/exp v0.0.0-20250408133849-7e4ce0ab07d0 h1:R84qjqJb5nVJMxqWYb3np9L5ZsaDtB+a39EqjV0JSUM= -golang.org/x/exp v0.0.0-20250408133849-7e4ce0ab07d0/go.mod h1:S9Xr4PYopiDyqSyp5NjCrhFrqg6A5zA2E/iPHPhqnS8= +golang.org/x/crypto v0.38.0 h1:jt+WWG8IZlBnVbomuhg2Mdq0+BBQaHbtqHEFEigjUV8= +golang.org/x/crypto v0.38.0/go.mod h1:MvrbAqul58NNYPKnOra203SB9vpuZW0e+RRZV+Ggqjw= +golang.org/x/exp v0.0.0-20250506013437-ce4c2cf36ca6 h1:y5zboxd6LQAqYIhHnB48p0ByQ/GnQx2BE33L8BOHQkI= +golang.org/x/exp v0.0.0-20250506013437-ce4c2cf36ca6/go.mod h1:U6Lno4MTRCDY+Ba7aCcauB9T60gsv5s4ralQzP72ZoQ= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= @@ -929,10 +936,10 @@ golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qx golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= -golang.org/x/net v0.39.0 h1:ZCu7HMWDxpXpaiKdhzIfaltL9Lp31x/3fCP11bc6/fY= -golang.org/x/net v0.39.0/go.mod h1:X7NRbYVEA+ewNkCNyJ513WmMdQ3BineSwVtN2zD/d+E= -golang.org/x/oauth2 v0.28.0 h1:CrgCKl8PPAVtLnU3c+EDw6x11699EWlsDeWNWKdIOkc= -golang.org/x/oauth2 v0.28.0/go.mod h1:onh5ek6nERTohokkhCD/y2cV4Do3fxFHFuAejCkRWT8= +golang.org/x/net v0.40.0 h1:79Xs7wF06Gbdcg4kdCCIQArK11Z1hr5POQ6+fIYHNuY= +golang.org/x/net v0.40.0/go.mod h1:y0hY0exeL2Pku80/zKK7tpntoX23cqL3Oa6njdgRtds= +golang.org/x/oauth2 v0.29.0 h1:WdYw2tdTK1S8olAzWHdgeqfy+Mtm9XNhv/xJsY65d98= +golang.org/x/oauth2 v0.29.0/go.mod h1:onh5ek6nERTohokkhCD/y2cV4Do3fxFHFuAejCkRWT8= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -941,8 +948,8 @@ golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.13.0 h1:AauUjRAJ9OSnvULf/ARrrVywoJDy0YS2AwQ98I37610= -golang.org/x/sync v0.13.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= +golang.org/x/sync v0.14.0 h1:woo0S4Yywslg6hp4eUFjTVOyKt0RookbpAHG4c1HmhQ= +golang.org/x/sync v0.14.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -965,21 +972,20 @@ golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.32.0 h1:s77OFDvIQeibCmezSnk/q6iAfkdiQaJi4VzroCFrN20= -golang.org/x/sys v0.32.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= +golang.org/x/sys v0.33.0 h1:q3i8TbbEz+JRD9ywIRlyRAQbM0qF7hu24q3teo2hbuw= +golang.org/x/sys v0.33.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk= -golang.org/x/term v0.31.0 h1:erwDkOK1Msy6offm1mOgvspSkslFnIGsFnxOKoufg3o= -golang.org/x/term v0.31.0/go.mod h1:R4BeIy7D95HzImkxGkTW1UQTtP54tio2RyHz7PwK0aw= +golang.org/x/term v0.32.0 h1:DR4lr0TjUs3epypdhTOkMmuF5CDFJ/8pOnbzMZPQ7bg= +golang.org/x/term v0.32.0/go.mod h1:uZG1FhGx848Sqfsq4/DlJr3xGGsYMu/L5GW4abiaEPQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= @@ -988,8 +994,8 @@ golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= -golang.org/x/text v0.24.0 h1:dd5Bzh4yt5KYA8f9CJHCP4FB4D51c2c6JvN37xJJkJ0= -golang.org/x/text v0.24.0/go.mod h1:L8rBsPeo2pSS+xqN0d5u2ikmjtmoJbDBT1b7nHvFCdU= +golang.org/x/text v0.25.0 h1:qVyWApTSYLk/drJRO5mDlNYskwQznZmkpV2c8q9zls4= +golang.org/x/text v0.25.0/go.mod h1:WEdwpYrmk1qmdHvhkSTNPm3app7v4rsT8F2UD6+VHIA= golang.org/x/time v0.11.0 h1:/bpjEDfN9tkoN/ryeYHnv5hcMlc8ncjMcM4XBk5NWV0= golang.org/x/time v0.11.0/go.mod h1:CDIdPxbZBQxdj6cxyCIdrNogrJKMJ7pr37NYpMcMDSg= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -998,27 +1004,27 @@ golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roY golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= -golang.org/x/tools v0.32.0 h1:Q7N1vhpkQv7ybVzLFtTjvQya2ewbwNDZzUgfXGqtMWU= -golang.org/x/tools v0.32.0/go.mod h1:ZxrU41P/wAbZD8EDa6dDCa6XfpkhJ7HFMjHJXfBDu8s= +golang.org/x/tools v0.33.0 h1:4qz2S3zmRxbGIhDIAgjxvFutSvH5EfnsYrRBj0UI0bc= +golang.org/x/tools v0.33.0/go.mod h1:CIJMaWEY88juyUfo7UbgPqbC8rU2OqfAV1h2Qp0oMYI= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= gomodules.xyz/jsonpatch/v2 v2.4.0 h1:Ci3iUJyx9UeRx7CeFN8ARgGbkESwJK+KB9lLcWxY/Zw= gomodules.xyz/jsonpatch/v2 v2.4.0/go.mod h1:AH3dM2RI6uoBZxn3LVrfvJ3E0/9dG4cSrbuBJT4moAY= -google.golang.org/api v0.228.0 h1:X2DJ/uoWGnY5obVjewbp8icSL5U4FzuCfy9OjbLSnLs= -google.golang.org/api v0.228.0/go.mod h1:wNvRS1Pbe8r4+IfBIniV8fwCpGwTrYa+kMUDiC5z5a4= +google.golang.org/api v0.231.0 h1:LbUD5FUl0C4qwia2bjXhCMH65yz1MLPzA/0OYEsYY7Q= +google.golang.org/api v0.231.0/go.mod h1:H52180fPI/QQlUc0F4xWfGZILdv09GCWKt2bcsn164A= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.6.8 h1:IhEN5q69dyKagZPYMSdIjS2HqprW324FRQZJcGqPAsM= google.golang.org/appengine v1.6.8/go.mod h1:1jJ3jBArFh5pcgW8gCtRJnepW8FzD1V44FJffLiz/Ds= google.golang.org/genproto v0.0.0-20250303144028-a0af3efb3deb h1:ITgPrl429bc6+2ZraNSzMDk3I95nmQln2fuPstKwFDE= google.golang.org/genproto v0.0.0-20250303144028-a0af3efb3deb/go.mod h1:sAo5UzpjUwgFBCzupwhcLcxHVDK7vG5IqI30YnwX2eE= -google.golang.org/genproto/googleapis/api v0.0.0-20250313205543-e70fdf4c4cb4 h1:IFnXJq3UPB3oBREOodn1v1aGQeZYQclEmvWRMN0PSsY= -google.golang.org/genproto/googleapis/api v0.0.0-20250313205543-e70fdf4c4cb4/go.mod h1:c8q6Z6OCqnfVIqUFJkCzKcrj8eCvUrz+K4KRzSTuANg= -google.golang.org/genproto/googleapis/rpc v0.0.0-20250313205543-e70fdf4c4cb4 h1:iK2jbkWL86DXjEx0qiHcRE9dE4/Ahua5k6V8OWFb//c= -google.golang.org/genproto/googleapis/rpc v0.0.0-20250313205543-e70fdf4c4cb4/go.mod h1:LuRYeWDFV6WOn90g357N17oMCaxpgCnbi/44qJvDn2I= -google.golang.org/grpc v1.71.1 h1:ffsFWr7ygTUscGPI0KKK6TLrGz0476KUvvsbqWK0rPI= -google.golang.org/grpc v1.71.1/go.mod h1:H0GRtasmQOh9LkFoCPDu3ZrwUtD1YGE+b2vYBYd/8Ec= +google.golang.org/genproto/googleapis/api v0.0.0-20250425173222-7b384671a197 h1:9DuBh3k1jUho2DHdxH+kbJwthIAq02vGvZNrD2ggF+Y= +google.golang.org/genproto/googleapis/api v0.0.0-20250425173222-7b384671a197/go.mod h1:Cd8IzgPo5Akum2c9R6FsXNaZbH3Jpa2gpHlW89FqlyQ= +google.golang.org/genproto/googleapis/rpc v0.0.0-20250425173222-7b384671a197 h1:29cjnHVylHwTzH66WfFZqgSQgnxzvWE+jvBwpZCLRxY= +google.golang.org/genproto/googleapis/rpc v0.0.0-20250425173222-7b384671a197/go.mod h1:qQ0YXyHHx3XkvlzUtpXDkS29lDSafHMZBAZDc03LQ3A= +google.golang.org/grpc v1.72.0 h1:S7UkcVa60b5AAQTaO6ZKamFp1zMZSU0fGDK2WZLbBnM= +google.golang.org/grpc v1.72.0/go.mod h1:wH5Aktxcg25y1I3w7H69nHfXdOG3UiadoBtjh3izSDM= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.36.6 h1:z1NpPI8ku2WgiWnf+t9wTPsn6eP1L7ksHUlkfLvd9xY= @@ -1047,50 +1053,53 @@ gotest.tools/v3 v3.4.0 h1:ZazjZUfuVeZGLAmlKKuyv3IKP5orXcwtOwDQH6YVr6o= gotest.tools/v3 v3.4.0/go.mod h1:CtbdzLSsqVhDgMtKsx03ird5YTGB3ar27v0u/yKBW5g= helm.sh/helm/v3 v3.17.3 h1:3n5rW3D0ArjFl0p4/oWO8IbY/HKaNNwJtOQFdH2AZHg= helm.sh/helm/v3 v3.17.3/go.mod h1:+uJKMH/UiMzZQOALR3XUf3BLIoczI2RKKD6bMhPh4G8= -k8s.io/api v0.32.3 h1:Hw7KqxRusq+6QSplE3NYG4MBxZw1BZnq4aP4cJVINls= -k8s.io/api v0.32.3/go.mod h1:2wEDTXADtm/HA7CCMD8D8bK4yuBUptzaRhYcYEEYA3k= -k8s.io/apiextensions-apiserver v0.32.3 h1:4D8vy+9GWerlErCwVIbcQjsWunF9SUGNu7O7hiQTyPY= -k8s.io/apiextensions-apiserver v0.32.3/go.mod h1:8YwcvVRMVzw0r1Stc7XfGAzB/SIVLunqApySV5V7Dss= -k8s.io/apimachinery v0.32.3 h1:JmDuDarhDmA/Li7j3aPrwhpNBA94Nvk5zLeOge9HH1U= -k8s.io/apimachinery v0.32.3/go.mod h1:GpHVgxoKlTxClKcteaeuF1Ul/lDVb74KpZcxcmLDElE= -k8s.io/apiserver v0.32.3 h1:kOw2KBuHOA+wetX1MkmrxgBr648ksz653j26ESuWNY8= -k8s.io/apiserver v0.32.3/go.mod h1:q1x9B8E/WzShF49wh3ADOh6muSfpmFL0I2t+TG0Zdgc= +k8s.io/api v0.33.0 h1:yTgZVn1XEe6opVpP1FylmNrIFWuDqe2H0V8CT5gxfIU= +k8s.io/api v0.33.0/go.mod h1:CTO61ECK/KU7haa3qq8sarQ0biLq2ju405IZAd9zsiM= +k8s.io/apiextensions-apiserver v0.33.0 h1:d2qpYL7Mngbsc1taA4IjJPRJ9ilnsXIrndH+r9IimOs= +k8s.io/apiextensions-apiserver v0.33.0/go.mod h1:VeJ8u9dEEN+tbETo+lFkwaaZPg6uFKLGj5vyNEwwSzc= +k8s.io/apimachinery v0.33.0 h1:1a6kHrJxb2hs4t8EE5wuR/WxKDwGN1FKH3JvDtA0CIQ= +k8s.io/apimachinery v0.33.0/go.mod h1:BHW0YOu7n22fFv/JkYOEfkUYNRN0fj0BlvMFWA7b+SM= +k8s.io/apiserver v0.33.0 h1:QqcM6c+qEEjkOODHppFXRiw/cE2zP85704YrQ9YaBbc= +k8s.io/apiserver v0.33.0/go.mod h1:EixYOit0YTxt8zrO2kBU7ixAtxFce9gKGq367nFmqI8= k8s.io/cli-runtime v0.32.2 h1:aKQR4foh9qeyckKRkNXUccP9moxzffyndZAvr+IXMks= k8s.io/cli-runtime v0.32.2/go.mod h1:a/JpeMztz3xDa7GCyyShcwe55p8pbcCVQxvqZnIwXN8= -k8s.io/client-go v0.32.3 h1:RKPVltzopkSgHS7aS98QdscAgtgah/+zmpAogooIqVU= -k8s.io/client-go v0.32.3/go.mod h1:3v0+3k4IcT9bXTc4V2rt+d2ZPPG700Xy6Oi0Gdl2PaY= -k8s.io/cluster-bootstrap v0.32.3 h1:AqIpsUhB6MUeaAsl1WvaUw54AHRd2hfZrESlKChtd8s= -k8s.io/cluster-bootstrap v0.32.3/go.mod h1:CHbBwgOb6liDV6JFUTkx5t85T2xidy0sChBDoyYw344= -k8s.io/component-base v0.32.3 h1:98WJvvMs3QZ2LYHBzvltFSeJjEx7t5+8s71P7M74u8k= -k8s.io/component-base v0.32.3/go.mod h1:LWi9cR+yPAv7cu2X9rZanTiFKB2kHA+JjmhkKjCZRpI= +k8s.io/client-go v0.33.0 h1:UASR0sAYVUzs2kYuKn/ZakZlcs2bEHaizrrHUZg0G98= +k8s.io/client-go v0.33.0/go.mod h1:kGkd+l/gNGg8GYWAPr0xF1rRKvVWvzh9vmZAMXtaKOg= +k8s.io/cluster-bootstrap v0.33.0 h1:a1njmBk8ha+TNK8HqfLkuMyC6Q9qvnm5eZzBLpwEW/A= +k8s.io/cluster-bootstrap v0.33.0/go.mod h1:YL0riHER19bZOT5Pdpl1ynbypadaEoWfg3Ywnl0Pb5s= +k8s.io/component-base v0.33.0 h1:Ot4PyJI+0JAD9covDhwLp9UNkUja209OzsJ4FzScBNk= +k8s.io/component-base v0.33.0/go.mod h1:aXYZLbw3kihdkOPMDhWbjGCO6sg+luw554KP51t8qCU= k8s.io/klog/v2 v2.130.1 h1:n9Xl7H1Xvksem4KFG4PYbdQCQxqc/tTUyrgXaOhHSzk= k8s.io/klog/v2 v2.130.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE= -k8s.io/kube-openapi v0.0.0-20241105132330-32ad38e42d3f h1:GA7//TjRY9yWGy1poLzYYJJ4JRdzg3+O6e8I+e+8T5Y= -k8s.io/kube-openapi v0.0.0-20241105132330-32ad38e42d3f/go.mod h1:R/HEjbvWI0qdfb8viZUeVZm0X6IZnxAydC7YU42CMw4= +k8s.io/kube-openapi v0.0.0-20250318190949-c8a335a9a2ff h1:/usPimJzUKKu+m+TE36gUyGcf03XZEP0ZIKgKj35LS4= +k8s.io/kube-openapi v0.0.0-20250318190949-c8a335a9a2ff/go.mod h1:5jIi+8yX4RIb8wk3XwBo5Pq2ccx4FP10ohkbSKCZoK8= k8s.io/kubectl v0.32.2 h1:TAkag6+XfSBgkqK9I7ZvwtF0WVtUAvK8ZqTt+5zi1Us= k8s.io/kubectl v0.32.2/go.mod h1:+h/NQFSPxiDZYX/WZaWw9fwYezGLISP0ud8nQKg+3g8= -k8s.io/kubelet v0.32.3 h1:B9HzW4yB67flx8tN2FYuDwZvxnmK3v5EjxxFvOYjmc8= -k8s.io/kubelet v0.32.3/go.mod h1:yyAQSCKC+tjSlaFw4HQG7Jein+vo+GeKBGdXdQGvL1U= -k8s.io/kubernetes v1.32.3 h1:2A58BlNME8NwsMawmnM6InYo3Jf35Nw5G79q46kXwoA= -k8s.io/kubernetes v1.32.3/go.mod h1:GvhiBeolvSRzBpFlgM0z/Bbu3Oxs9w3P6XfEgYaMi8k= -k8s.io/mount-utils v0.32.3 h1:ZPXXHblfBhYP89OnaozpFg9Ojl6HhDfxBLcdWNkaxW8= -k8s.io/mount-utils v0.32.3/go.mod h1:Kun5c2svjAPx0nnvJKYQWhfeNW+O0EpzHgRhDcYoSY0= -k8s.io/utils v0.0.0-20250321185631-1f6e0b77f77e h1:KqK5c/ghOm8xkHYhlodbp6i6+r+ChV2vuAuVRdFbLro= -k8s.io/utils v0.0.0-20250321185631-1f6e0b77f77e/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= -libvirt.org/go/libvirt v1.11001.0 h1:QJgpslxY7qkpXZIDxdMHpkDl7FfhgQJwqRTGBbg/S8E= -libvirt.org/go/libvirt v1.11001.0/go.mod h1:1WiFE8EjZfq+FCVog+rvr1yatKbKZ9FaFMZgEqxEJqQ= +k8s.io/kubelet v0.33.0 h1:4pJA2Ge6Rp0kDNV76KH7pTBiaV2T1a1874QHMcubuSU= +k8s.io/kubelet v0.33.0/go.mod h1:iDnxbJQMy9DUNaML5L/WUlt3uJtNLWh7ZAe0JSp4Yi0= +k8s.io/kubernetes v1.33.0 h1:BP5Y5yIzUZVeBuE/ESZvnw6TNxjXbLsCckIkljE+R0U= +k8s.io/kubernetes v1.33.0/go.mod h1:2nWuPk0seE4+6sd0x60wQ6rYEXcV7SoeMbU0YbFm/5k= +k8s.io/mount-utils v0.33.0 h1:hH6EcCcax4lFNIERaGMj6d7oGMW1qW3eTCwHUuLtLog= +k8s.io/mount-utils v0.33.0/go.mod h1:1JR4rKymg8B8bCPo618hpSAdrpO6XLh0Acqok/xVwPE= +k8s.io/utils v0.0.0-20250502105355-0f33e8f1c979 h1:jgJW5IePPXLGB8e/1wvd0Ich9QE97RvvF3a8J3fP/Lg= +k8s.io/utils v0.0.0-20250502105355-0f33e8f1c979/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= +libvirt.org/go/libvirt v1.11002.0 h1:cb8KJG3D97pc/hxQ2n6P82hRX3rlgdzO7bih6W1AAQ8= +libvirt.org/go/libvirt v1.11002.0/go.mod h1:1WiFE8EjZfq+FCVog+rvr1yatKbKZ9FaFMZgEqxEJqQ= oras.land/oras-go v1.2.5 h1:XpYuAwAb0DfQsunIyMfeET92emK8km3W4yEzZvUbsTo= oras.land/oras-go v1.2.5/go.mod h1:PuAwRShRZCsZb7g8Ar3jKKQR/2A/qN+pkYxIOd/FAoo= sigs.k8s.io/controller-runtime v0.20.4 h1:X3c+Odnxz+iPTRobG4tp092+CvBU9UK0t/bRf+n0DGU= sigs.k8s.io/controller-runtime v0.20.4/go.mod h1:xg2XB0K5ShQzAgsoujxuKN4LNXR2LfwwHsPj7Iaw+XY= sigs.k8s.io/json v0.0.0-20241010143419-9aa6b5e7a4b3 h1:/Rv+M11QRah1itp8VhT6HoVx1Ray9eB4DBr+K+/sCJ8= sigs.k8s.io/json v0.0.0-20241010143419-9aa6b5e7a4b3/go.mod h1:18nIHnGi6636UCz6m8i4DhaJ65T6EruyzmoQqI2BVDo= -sigs.k8s.io/kustomize/api v0.18.0 h1:hTzp67k+3NEVInwz5BHyzc9rGxIauoXferXyjv5lWPo= -sigs.k8s.io/kustomize/api v0.18.0/go.mod h1:f8isXnX+8b+SGLHQ6yO4JG1rdkZlvhaCf/uZbLVMb0U= -sigs.k8s.io/kustomize/kyaml v0.18.1 h1:WvBo56Wzw3fjS+7vBjN6TeivvpbW9GmRaWZ9CIVmt4E= -sigs.k8s.io/kustomize/kyaml v0.18.1/go.mod h1:C3L2BFVU1jgcddNBE1TxuVLgS46TjObMwW5FT9FcjYo= -sigs.k8s.io/structured-merge-diff/v4 v4.4.2 h1:MdmvkGuXi/8io6ixD5wud3vOLwc1rj0aNqRlpuvjmwA= -sigs.k8s.io/structured-merge-diff/v4 v4.4.2/go.mod h1:N8f93tFZh9U6vpxwRArLiikrE5/2tiu1w1AGfACIGE4= +sigs.k8s.io/kustomize/api v0.19.0 h1:F+2HB2mU1MSiR9Hp1NEgoU2q9ItNOaBJl0I4Dlus5SQ= +sigs.k8s.io/kustomize/api v0.19.0/go.mod h1:/BbwnivGVcBh1r+8m3tH1VNxJmHSk1PzP5fkP6lbL1o= +sigs.k8s.io/kustomize/kyaml v0.19.0 h1:RFge5qsO1uHhwJsu3ipV7RNolC7Uozc0jUBC/61XSlA= +sigs.k8s.io/kustomize/kyaml v0.19.0/go.mod h1:FeKD5jEOH+FbZPpqUghBP8mrLjJ3+zD3/rf9NNu1cwY= +sigs.k8s.io/randfill v0.0.0-20250304075658-069ef1bbf016/go.mod h1:XeLlZ/jmk4i1HRopwe7/aU3H5n1zNUcX6TM94b3QxOY= +sigs.k8s.io/randfill v1.0.0 h1:JfjMILfT8A6RbawdsK2JXGBR5AQVfd+9TbzrlneTyrU= +sigs.k8s.io/randfill v1.0.0/go.mod h1:XeLlZ/jmk4i1HRopwe7/aU3H5n1zNUcX6TM94b3QxOY= +sigs.k8s.io/structured-merge-diff/v4 v4.6.0 h1:IUA9nvMmnKWcj5jl84xn+T5MnlZKThmUW1TdblaLVAc= +sigs.k8s.io/structured-merge-diff/v4 v4.6.0/go.mod h1:dDy58f92j70zLsuZVuUX5Wp9vtxXpaZnkPGWeqDfCps= sigs.k8s.io/yaml v1.4.0 h1:Mk1wCc2gy/F0THH0TAp1QYyJNzRm2KCLy3o5ASXVI5E= sigs.k8s.io/yaml v1.4.0/go.mod h1:Ejl7/uTz7PSA4eKMyQCUTnhZYNmLIl+5c2lQPGR2BPY= software.sslmate.com/src/go-pkcs12 v0.4.0 h1:H2g08FrTvSFKUj+D309j1DPfk5APnIdAQAB8aEykJ5k= diff --git a/hack/tools/go.mod b/hack/tools/go.mod index cf34698bb..b74c40781 100644 --- a/hack/tools/go.mod +++ b/hack/tools/go.mod @@ -6,7 +6,7 @@ require ( github.com/google/go-licenses v1.6.0 github.com/google/keep-sorted v0.6.1 github.com/katexochen/sh/v3 v3.11.0 - golang.org/x/tools v0.32.0 + golang.org/x/tools v0.33.0 golang.org/x/vuln v1.1.4 ) @@ -35,14 +35,14 @@ require ( github.com/stretchr/testify v1.8.4 // indirect github.com/xanzy/ssh-agent v0.3.3 // indirect go.opencensus.io v0.24.0 // indirect - golang.org/x/crypto v0.37.0 // indirect + golang.org/x/crypto v0.38.0 // indirect golang.org/x/mod v0.24.0 // indirect - golang.org/x/net v0.39.0 // indirect - golang.org/x/sync v0.13.0 // indirect - golang.org/x/sys v0.32.0 // indirect + golang.org/x/net v0.40.0 // indirect + golang.org/x/sync v0.14.0 // indirect + golang.org/x/sys v0.33.0 // indirect golang.org/x/telemetry v0.0.0-20240522233618-39ace7a40ae7 // indirect - golang.org/x/term v0.31.0 // indirect - golang.org/x/text v0.24.0 // indirect + golang.org/x/term v0.32.0 // indirect + golang.org/x/text v0.25.0 // indirect gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect gopkg.in/src-d/go-billy.v4 v4.3.2 // indirect gopkg.in/src-d/go-git.v4 v4.13.1 // indirect diff --git a/hack/tools/go.sum b/hack/tools/go.sum index d94463da2..c76480175 100644 --- a/hack/tools/go.sum +++ b/hack/tools/go.sum @@ -341,8 +341,8 @@ golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPh golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw= -golang.org/x/crypto v0.37.0 h1:kJNSjF/Xp7kU0iB2Z+9viTPMW4EqqsrywMXLJOOsXSE= -golang.org/x/crypto v0.37.0/go.mod h1:vg+k43peMZ0pUMhYmVAWysMK35e6ioLh3wB8ZCAfbVc= +golang.org/x/crypto v0.38.0 h1:jt+WWG8IZlBnVbomuhg2Mdq0+BBQaHbtqHEFEigjUV8= +golang.org/x/crypto v0.38.0/go.mod h1:MvrbAqul58NNYPKnOra203SB9vpuZW0e+RRZV+Ggqjw= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -428,8 +428,8 @@ golang.org/x/net v0.0.0-20220624214902-1bab6f366d9e/go.mod h1:XRhObCWvk6IyKnWLug golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= golang.org/x/net v0.5.0/go.mod h1:DivGGAXEgPSlEBzxGzZI+ZLohi+xUj054jfeKui00ws= -golang.org/x/net v0.39.0 h1:ZCu7HMWDxpXpaiKdhzIfaltL9Lp31x/3fCP11bc6/fY= -golang.org/x/net v0.39.0/go.mod h1:X7NRbYVEA+ewNkCNyJ513WmMdQ3BineSwVtN2zD/d+E= +golang.org/x/net v0.40.0 h1:79Xs7wF06Gbdcg4kdCCIQArK11Z1hr5POQ6+fIYHNuY= +golang.org/x/net v0.40.0/go.mod h1:y0hY0exeL2Pku80/zKK7tpntoX23cqL3Oa6njdgRtds= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -466,8 +466,8 @@ golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.13.0 h1:AauUjRAJ9OSnvULf/ARrrVywoJDy0YS2AwQ98I37610= -golang.org/x/sync v0.13.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= +golang.org/x/sync v0.14.0 h1:woo0S4Yywslg6hp4eUFjTVOyKt0RookbpAHG4c1HmhQ= +golang.org/x/sync v0.14.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190221075227-b4e8571b14e0/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -538,16 +538,16 @@ golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.32.0 h1:s77OFDvIQeibCmezSnk/q6iAfkdiQaJi4VzroCFrN20= -golang.org/x/sys v0.32.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= +golang.org/x/sys v0.33.0 h1:q3i8TbbEz+JRD9ywIRlyRAQbM0qF7hu24q3teo2hbuw= +golang.org/x/sys v0.33.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= golang.org/x/telemetry v0.0.0-20240522233618-39ace7a40ae7 h1:FemxDzfMUcK2f3YY4H+05K9CDzbSVr2+q/JKN45pey0= golang.org/x/telemetry v0.0.0-20240522233618-39ace7a40ae7/go.mod h1:pRgIJT+bRLFKnoM1ldnzKoxTIn14Yxz928LQRYYgIN0= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.4.0/go.mod h1:9P2UbLfCdcvo3p/nzKvsmas4TnlujnuoV9hGgYzW1lQ= -golang.org/x/term v0.31.0 h1:erwDkOK1Msy6offm1mOgvspSkslFnIGsFnxOKoufg3o= -golang.org/x/term v0.31.0/go.mod h1:R4BeIy7D95HzImkxGkTW1UQTtP54tio2RyHz7PwK0aw= +golang.org/x/term v0.32.0 h1:DR4lr0TjUs3epypdhTOkMmuF5CDFJ/8pOnbzMZPQ7bg= +golang.org/x/term v0.32.0/go.mod h1:uZG1FhGx848Sqfsq4/DlJr3xGGsYMu/L5GW4abiaEPQ= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -559,8 +559,8 @@ golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.6.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.24.0 h1:dd5Bzh4yt5KYA8f9CJHCP4FB4D51c2c6JvN37xJJkJ0= -golang.org/x/text v0.24.0/go.mod h1:L8rBsPeo2pSS+xqN0d5u2ikmjtmoJbDBT1b7nHvFCdU= +golang.org/x/text v0.25.0 h1:qVyWApTSYLk/drJRO5mDlNYskwQznZmkpV2c8q9zls4= +golang.org/x/text v0.25.0/go.mod h1:WEdwpYrmk1qmdHvhkSTNPm3app7v4rsT8F2UD6+VHIA= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -619,8 +619,8 @@ golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/tools v0.5.0/go.mod h1:N+Kgy78s5I24c24dU8OfWNEotWjutIs8SnJvn5IDq+k= -golang.org/x/tools v0.32.0 h1:Q7N1vhpkQv7ybVzLFtTjvQya2ewbwNDZzUgfXGqtMWU= -golang.org/x/tools v0.32.0/go.mod h1:ZxrU41P/wAbZD8EDa6dDCa6XfpkhJ7HFMjHJXfBDu8s= +golang.org/x/tools v0.33.0 h1:4qz2S3zmRxbGIhDIAgjxvFutSvH5EfnsYrRBj0UI0bc= +golang.org/x/tools v0.33.0/go.mod h1:CIJMaWEY88juyUfo7UbgPqbC8rU2OqfAV1h2Qp0oMYI= golang.org/x/vuln v1.1.4 h1:Ju8QsuyhX3Hk8ma3CesTbO8vfJD9EvUBgHvkxHBzj0I= golang.org/x/vuln v1.1.4/go.mod h1:F+45wmU18ym/ca5PLTPLsSzr2KppzswxPP603ldA67s= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= diff --git a/internal/attestation/aws/snp/testdata/report.txt b/internal/attestation/aws/snp/testdata/report.txt index a5ed00a9b..e413ca309 100644 --- a/internal/attestation/aws/snp/testdata/report.txt +++ b/internal/attestation/aws/snp/testdata/report.txt @@ -1 +1 @@ -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 diff --git a/internal/attestation/aws/snp/testdata/testdata.go b/internal/attestation/aws/snp/testdata/testdata.go index 61d14f154..a07df982d 100644 --- a/internal/attestation/aws/snp/testdata/testdata.go +++ b/internal/attestation/aws/snp/testdata/testdata.go @@ -15,7 +15,7 @@ import _ "embed" var SNPReport string // AKDigest holds the AK digest embedded in SNPReport.REPORT_DATA. -const AKDigest = "032635613c8e331fa29e096371910fe6a1f69383dda02c9461400a70b66d87a3da5dd863002522be43afc34f2c233989bd6e401e351d10d7cc800d6f5dfcf019" +const AKDigest = "87ab7caf510e1b3520dc3cceb64ee44128e10976fb0d3fc5e274699d8aaf506154af4c1de0a026b49fdf861e9ac75551551b3534d1c61369a3b08f5baed0db2f" // VLEK for SNPReport. // diff --git a/internal/attestation/aws/snp/testdata/vlek.pem b/internal/attestation/aws/snp/testdata/vlek.pem index 96a1db26d..3f8be0331 100644 --- a/internal/attestation/aws/snp/testdata/vlek.pem +++ b/internal/attestation/aws/snp/testdata/vlek.pem @@ -1,30 +1,30 @@ -----BEGIN CERTIFICATE----- -MIIFLTCCAtygAwIBAgIBADBGBgkqhkiG9w0BAQowOaAPMA0GCWCGSAFlAwQCAgUA -oRwwGgYJKoZIhvcNAQEIMA0GCWCGSAFlAwQCAgUAogMCATCjAwIBATCBgDEUMBIG -A1UECwwLRW5naW5lZXJpbmcxCzAJBgNVBAYTAlVTMRQwEgYDVQQHDAtTYW50YSBD -bGFyYTELMAkGA1UECAwCQ0ExHzAdBgNVBAoMFkFkdmFuY2VkIE1pY3JvIERldmlj -ZXMxFzAVBgNVBAMMDlNFVi1WTEVLLU1pbGFuMB4XDTI0MDUwNTIxNDUyNloXDTI1 -MDUwNTIxNDUyNlowejEUMBIGA1UECwwLRW5naW5lZXJpbmcxCzAJBgNVBAYTAlVT -MRQwEgYDVQQHDAtTYW50YSBDbGFyYTELMAkGA1UECAwCQ0ExHzAdBgNVBAoMFkFk -dmFuY2VkIE1pY3JvIERldmljZXMxETAPBgNVBAMMCFNFVi1WTEVLMHYwEAYHKoZI -zj0CAQYFK4EEACIDYgAEHCsA6v0QwdgijkHV1KnV+1wMqjVaITbdleQV40cnL6ZT -Pq3IsXeFGI9tq2a2EoDksTTqeo5a1ZDq2BiNA2cue0PlZhHkv2MK1cNPMDGAOddc -k7VNaqrRLUo84kn6tRXpo4HyMIHvMBAGCSsGAQQBnHgBAQQDAgEAMBQGCSsGAQQB -nHgBAgQHFgVNaWxhbjARBgorBgEEAZx4AQMBBAMCAQMwEQYKKwYBBAGceAEDAgQD -AgEAMBEGCisGAQQBnHgBAwQEAwIBADARBgorBgEEAZx4AQMFBAMCAQAwEQYKKwYB -BAGceAEDBgQDAgEAMBEGCisGAQQBnHgBAwcEAwIBADARBgorBgEEAZx4AQMDBAMC -ARUwEgYKKwYBBAGceAEDCAQEAgIA0TAsBgkrBgEEAZx4AQUEHxYdQ049Y2MtZXUt -d2VzdC0xLmFtYXpvbmF3cy5jb20wRgYJKoZIhvcNAQEKMDmgDzANBglghkgBZQME -AgIFAKEcMBoGCSqGSIb3DQEBCDANBglghkgBZQMEAgIFAKIDAgEwowMCAQEDggIB -ACeJ78s9Nrdz+WtvsNAecT7+ztE8jpxLZdgacsPtf3xU/JfcQHhVUuy/Lp5rIQ7B -h1HalTrmuY7goRO1kTp/lobXyntWkit0d5nR6iNjzp/uHr8+qEym2WbYX1Jesang -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 +xR32EkufsNGLb8TiEsgpa2ulbw8xi6U= -----END CERTIFICATE----- diff --git a/internal/cloud/azure/BUILD.bazel b/internal/cloud/azure/BUILD.bazel index e91e22cb3..29f4750d7 100644 --- a/internal/cloud/azure/BUILD.bazel +++ b/internal/cloud/azure/BUILD.bazel @@ -25,11 +25,9 @@ go_library( ] + select({ "@io_bazel_rules_go//go/platform:android": [ "@io_k8s_kubernetes//pkg/util/iptables", - "@io_k8s_utils//exec", ], "@io_bazel_rules_go//go/platform:linux": [ "@io_k8s_kubernetes//pkg/util/iptables", - "@io_k8s_utils//exec", ], "//conditions:default": [], }), diff --git a/internal/cloud/azure/iptables_linux.go b/internal/cloud/azure/iptables_linux.go index 24ada6de0..d5a5f88b4 100644 --- a/internal/cloud/azure/iptables_linux.go +++ b/internal/cloud/azure/iptables_linux.go @@ -15,7 +15,6 @@ import ( "github.com/edgelesssys/constellation/v2/internal/role" "k8s.io/kubernetes/pkg/util/iptables" - "k8s.io/utils/exec" ) // PrepareControlPlaneNode sets up iptables for the control plane node only @@ -54,7 +53,7 @@ func (c *Cloud) PrepareControlPlaneNode(ctx context.Context, log *slog.Logger) e } log.Info(fmt.Sprintf("Setting up iptables for control plane node with load balancer IP %s", loadbalancerIP)) - iptablesExec := iptables.New(exec.New(), iptables.ProtocolIPv4) + iptablesExec := iptables.New(iptables.ProtocolIPv4) const chainName = "azure-lb-nat" if _, err := iptablesExec.EnsureChain(iptables.TableNAT, chainName); err != nil { diff --git a/internal/constellation/helm/charts/coredns/values.yaml b/internal/constellation/helm/charts/coredns/values.yaml index 9b3f72414..c740ed71c 100644 --- a/internal/constellation/helm/charts/coredns/values.yaml +++ b/internal/constellation/helm/charts/coredns/values.yaml @@ -1,3 +1,3 @@ clusterIP: 10.96.0.10 dnsDomain: cluster.local -image: registry.k8s.io/coredns/coredns:v1.11.3@sha256:9caabbf6238b189a65d0d6e6ac138de60d6a1c419e5a341fbbb7c78382559c6e +image: registry.k8s.io/coredns/coredns:v1.12.0@sha256:40384aa1f5ea6bfdc77997d243aec73da05f27aed0c5e9d65bfa98933c519d97 diff --git a/internal/versions/versions.go b/internal/versions/versions.go index e35f9a56c..73659b802 100644 --- a/internal/versions/versions.go +++ b/internal/versions/versions.go @@ -243,7 +243,7 @@ var VersionConfigs = map[ValidK8sVersion]KubernetesVersion{ InstallPath: patchFilePath("kube-scheduler"), }, { - Url: "data:application/json;base64,W3sib3AiOiJyZXBsYWNlIiwicGF0aCI6Ii9zcGVjL2NvbnRhaW5lcnMvMC9pbWFnZSIsInZhbHVlIjoicmVnaXN0cnkuazhzLmlvL2V0Y2Q6My41LjE2LTBAc2hhMjU2OmM2YTlkMTFjYzVjMDRiMTE0Y2NkZWYzOWE5MjY1ZWVlZjgxOGUzZDAyZjUzNTliZTAzNWFlNzg0MDk3ZmRlYzUifV0=", + Url: "data:application/json;base64,W3sib3AiOiJyZXBsYWNlIiwicGF0aCI6Ii9zcGVjL2NvbnRhaW5lcnMvMC9pbWFnZSIsInZhbHVlIjoicmVnaXN0cnkuazhzLmlvL2V0Y2Q6My41LjIxLTBAc2hhMjU2OmQ1OGMwMzVkZjU1NzA4MGEyNzM4N2Q2ODcwOTJlM2ZjMmI2NGM2ZDBlMzE2MmRjNTE0NTNhMTE1Zjg0N2QxMjEifV0=", InstallPath: patchFilePath("etcd"), }, }, @@ -310,7 +310,7 @@ var VersionConfigs = map[ValidK8sVersion]KubernetesVersion{ InstallPath: patchFilePath("kube-scheduler"), }, { - Url: "data:application/json;base64,W3sib3AiOiJyZXBsYWNlIiwicGF0aCI6Ii9zcGVjL2NvbnRhaW5lcnMvMC9pbWFnZSIsInZhbHVlIjoicmVnaXN0cnkuazhzLmlvL2V0Y2Q6My41LjE2LTBAc2hhMjU2OmM2YTlkMTFjYzVjMDRiMTE0Y2NkZWYzOWE5MjY1ZWVlZjgxOGUzZDAyZjUzNTliZTAzNWFlNzg0MDk3ZmRlYzUifV0=", + Url: "data:application/json;base64,W3sib3AiOiJyZXBsYWNlIiwicGF0aCI6Ii9zcGVjL2NvbnRhaW5lcnMvMC9pbWFnZSIsInZhbHVlIjoicmVnaXN0cnkuazhzLmlvL2V0Y2Q6My41LjIxLTBAc2hhMjU2OmQ1OGMwMzVkZjU1NzA4MGEyNzM4N2Q2ODcwOTJlM2ZjMmI2NGM2ZDBlMzE2MmRjNTE0NTNhMTE1Zjg0N2QxMjEifV0=", InstallPath: patchFilePath("etcd"), }, }, @@ -377,7 +377,7 @@ var VersionConfigs = map[ValidK8sVersion]KubernetesVersion{ InstallPath: patchFilePath("kube-scheduler"), }, { - Url: "data:application/json;base64,W3sib3AiOiJyZXBsYWNlIiwicGF0aCI6Ii9zcGVjL2NvbnRhaW5lcnMvMC9pbWFnZSIsInZhbHVlIjoicmVnaXN0cnkuazhzLmlvL2V0Y2Q6My41LjE2LTBAc2hhMjU2OmM2YTlkMTFjYzVjMDRiMTE0Y2NkZWYzOWE5MjY1ZWVlZjgxOGUzZDAyZjUzNTliZTAzNWFlNzg0MDk3ZmRlYzUifV0=", + Url: "data:application/json;base64,W3sib3AiOiJyZXBsYWNlIiwicGF0aCI6Ii9zcGVjL2NvbnRhaW5lcnMvMC9pbWFnZSIsInZhbHVlIjoicmVnaXN0cnkuazhzLmlvL2V0Y2Q6My41LjIxLTBAc2hhMjU2OmQ1OGMwMzVkZjU1NzA4MGEyNzM4N2Q2ODcwOTJlM2ZjMmI2NGM2ZDBlMzE2MmRjNTE0NTNhMTE1Zjg0N2QxMjEifV0=", InstallPath: patchFilePath("etcd"), }, }, diff --git a/renovate.json5 b/renovate.json5 index 6617bafc6..e29519123 100644 --- a/renovate.json5 +++ b/renovate.json5 @@ -17,7 +17,6 @@ 'gomodUpdateImportPaths', 'gomodMassage' ], - prConcurrentLimit: 4, ignorePaths: [ 'internal/constellation/helm/charts/aws-load-balancer-controller/**', 'internal/constellation/helm/charts/cilium/**', @@ -31,6 +30,9 @@ ignoreDeps: [ 'github.com/edgelesssys/constellation/v2', 'github.com/daniel-weisse/go-cryptsetup', + + // Only update once they fixed dependency violations on their side. + 'github.com/google/go-tpm-tools', ], // Rules for changing renovates behaviour for different packages. // The documentation for configuration options can be found here: @@ -76,10 +78,30 @@ 'pinDigest', 'rollback', ], + matchDepNames: [ + '!github.com/bazelbuild/rules_go', + ], schedule: [ 'before 8am on monday', ], }, + { + // Group update of rules_go dependencies. + groupName: 'rules_go dependencies', + matchManagers: [ + 'gomod' + 'bazel', + 'bazel-module', + ], + matchDepNames: [ + 'github.com/bazelbuild/rules_go', + 'io_bazel_rules_go', + 'rules_go', + ], + schedule: [ + 'before 8am on tuesday', + ], + }, { // Group update of Terraform dependencies. groupName: 'Terraform dependencies', @@ -108,9 +130,7 @@ ], matchDepNames: [ 'bazel', - 'io_bazel_rules_go', 'bazel_gazelle', - 'rules_go', 'gazelle', ], groupName: 'bazel (core)', From 135f8c889f87533911beef7b8a2b8f4b3c343e8c Mon Sep 17 00:00:00 2001 From: edgelessci <71088502+edgelessci@users.noreply.github.com> Date: Wed, 7 May 2025 08:18:28 +0200 Subject: [PATCH 254/311] image: update measurements and image version (#3806) Co-authored-by: edgelessci --- .../measurements/measurements_enterprise.go | 16 ++++++++-------- internal/config/image_enterprise.go | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/internal/attestation/measurements/measurements_enterprise.go b/internal/attestation/measurements/measurements_enterprise.go index 4946626c0..176beec2e 100644 --- a/internal/attestation/measurements/measurements_enterprise.go +++ b/internal/attestation/measurements/measurements_enterprise.go @@ -19,14 +19,14 @@ package measurements // revive:disable:var-naming var ( - aws_AWSNitroTPM = M{0: {Expected: []byte{0x73, 0x7f, 0x76, 0x7a, 0x12, 0xf5, 0x4e, 0x70, 0xee, 0xcb, 0xc8, 0x68, 0x40, 0x11, 0x32, 0x3a, 0xe2, 0xfe, 0x2d, 0xd9, 0xf9, 0x07, 0x85, 0x57, 0x79, 0x69, 0xd7, 0xa2, 0x01, 0x3e, 0x8c, 0x12}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x96, 0xf3, 0x87, 0x10, 0xf9, 0xd0, 0x46, 0x8c, 0xce, 0x78, 0xeb, 0x49, 0x8e, 0x76, 0xa1, 0x45, 0x88, 0x58, 0x01, 0x1d, 0x30, 0x2b, 0xff, 0x24, 0x82, 0x17, 0xf0, 0x75, 0x28, 0x42, 0x29, 0x31}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x1a, 0x62, 0x75, 0xa3, 0x8c, 0xe6, 0x8f, 0x56, 0xbf, 0x10, 0x43, 0xee, 0x31, 0x6b, 0x0a, 0x8a, 0xa3, 0x6a, 0x89, 0x45, 0x25, 0xa4, 0xdc, 0x3c, 0x97, 0x57, 0x3d, 0x6b, 0xdd, 0xfd, 0x20, 0x86}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x4f, 0x96, 0x2b, 0x17, 0x1f, 0xfb, 0x65, 0x49, 0x9f, 0xce, 0x2c, 0x06, 0x5f, 0x0e, 0x18, 0x91, 0xbd, 0x01, 0xe4, 0x4a, 0x7c, 0xac, 0x2d, 0x54, 0xaf, 0xc0, 0x54, 0x3d, 0x18, 0x96, 0xcb, 0xf9}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - aws_AWSSEVSNP = M{0: {Expected: []byte{0xd6, 0xdf, 0x85, 0x53, 0x58, 0xf5, 0xb1, 0x0f, 0x06, 0xf0, 0xfa, 0xb3, 0xf4, 0x08, 0xad, 0x26, 0xcd, 0x16, 0x5a, 0x29, 0x49, 0xba, 0xd6, 0x9e, 0x2c, 0xc7, 0x56, 0x92, 0x52, 0x9e, 0x66, 0x2a}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x3f, 0xec, 0x16, 0xfe, 0xb9, 0x20, 0x4f, 0x21, 0x30, 0xbf, 0x25, 0x3d, 0xed, 0x97, 0x24, 0xde, 0xb3, 0x09, 0x2d, 0x34, 0x8a, 0x33, 0xf6, 0xe4, 0x45, 0x4f, 0x48, 0x77, 0xb0, 0xab, 0xd4, 0x60}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xdc, 0xe1, 0xef, 0x62, 0x14, 0xf8, 0x8a, 0x99, 0xd7, 0xd9, 0xaa, 0xcf, 0x3f, 0xfd, 0x58, 0x30, 0x04, 0xa4, 0x3b, 0x51, 0xb8, 0xad, 0xcc, 0x37, 0x6c, 0x3a, 0x4e, 0x87, 0x30, 0x35, 0xfc, 0x41}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xee, 0x8a, 0x5f, 0xec, 0x8e, 0x15, 0x14, 0xbe, 0x79, 0x90, 0xab, 0x34, 0x03, 0xe8, 0xce, 0x1c, 0x9a, 0xad, 0x2d, 0x96, 0x78, 0x77, 0xb3, 0xed, 0x09, 0x58, 0xa0, 0x36, 0x6b, 0x3c, 0x8b, 0xfc}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - azure_AzureSEVSNP = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xf6, 0xa7, 0x3f, 0xef, 0x99, 0x61, 0xfa, 0x83, 0x60, 0x57, 0x99, 0xc5, 0x83, 0x99, 0x46, 0xa4, 0x77, 0x41, 0x00, 0xd6, 0x5e, 0x4c, 0x2b, 0x8f, 0x09, 0xe7, 0x18, 0x58, 0xe6, 0xc1, 0xea, 0x01}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x6f, 0x99, 0x52, 0x55, 0x58, 0xa7, 0x57, 0x93, 0x2d, 0x49, 0x1c, 0xf8, 0xd9, 0xbb, 0xb6, 0x97, 0x67, 0xe2, 0xe5, 0x35, 0x0f, 0xd5, 0x3b, 0x6a, 0xd6, 0x8e, 0x19, 0x45, 0xff, 0x5b, 0x36, 0x30}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x53, 0x60, 0x2f, 0x68, 0xb7, 0x65, 0x74, 0x76, 0x9f, 0xc4, 0x41, 0x26, 0xb6, 0x3d, 0x38, 0x88, 0x2f, 0xbe, 0xdf, 0x25, 0x20, 0x5b, 0xb6, 0x53, 0x09, 0x94, 0xeb, 0x7d, 0x18, 0xa9, 0xd9, 0xe5}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - azure_AzureTDX = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x68, 0xcd, 0x62, 0xd7, 0x52, 0xab, 0xa2, 0x4e, 0xe1, 0xc0, 0x4b, 0xae, 0x54, 0xc6, 0x7d, 0x44, 0x8f, 0x9a, 0x5e, 0x97, 0xe3, 0x95, 0x13, 0x80, 0x22, 0xaf, 0x33, 0x69, 0x72, 0x6a, 0xa7, 0xee}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x85, 0xa3, 0x0c, 0x7e, 0x25, 0x56, 0x0c, 0x3f, 0x04, 0x15, 0xeb, 0x03, 0x06, 0xdb, 0xac, 0x9f, 0x89, 0xf0, 0x2b, 0xe0, 0xb9, 0xbb, 0x64, 0xff, 0x64, 0xe0, 0x19, 0x80, 0x42, 0xdd, 0x1e, 0x3e}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xaa, 0xe7, 0x37, 0x39, 0x6b, 0xbf, 0xe1, 0x90, 0xe9, 0x74, 0xe4, 0xf5, 0xac, 0x87, 0x23, 0xf5, 0x6f, 0x9b, 0x3d, 0x6a, 0xbf, 0x29, 0x43, 0x89, 0xeb, 0xf1, 0x22, 0xb3, 0xb0, 0xa0, 0x59, 0xe2}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + aws_AWSNitroTPM = M{0: {Expected: []byte{0x73, 0x7f, 0x76, 0x7a, 0x12, 0xf5, 0x4e, 0x70, 0xee, 0xcb, 0xc8, 0x68, 0x40, 0x11, 0x32, 0x3a, 0xe2, 0xfe, 0x2d, 0xd9, 0xf9, 0x07, 0x85, 0x57, 0x79, 0x69, 0xd7, 0xa2, 0x01, 0x3e, 0x8c, 0x12}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x35, 0x05, 0x54, 0xd6, 0x72, 0x5c, 0x06, 0x2e, 0xc0, 0xf6, 0xee, 0xc7, 0xc5, 0xd4, 0xec, 0x05, 0x71, 0x35, 0xc6, 0x33, 0x10, 0x97, 0x62, 0x51, 0xd3, 0x4d, 0xcc, 0xa8, 0xd6, 0x64, 0xe6, 0x75}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x2c, 0x19, 0x1c, 0x1d, 0x3f, 0xad, 0x03, 0x22, 0xd2, 0x21, 0x82, 0x63, 0x1a, 0xb8, 0x18, 0x0d, 0x65, 0x36, 0x3e, 0xa3, 0x62, 0x3c, 0x9b, 0xd1, 0x4f, 0xe7, 0xc1, 0xfd, 0x96, 0x61, 0x40, 0x44}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xb1, 0x3e, 0xb9, 0xc6, 0xa6, 0x4d, 0x0b, 0xe3, 0xe1, 0x50, 0x15, 0xdf, 0x31, 0xf5, 0x55, 0x6b, 0xb8, 0x4e, 0x72, 0xf6, 0xde, 0x30, 0x37, 0xcf, 0x9b, 0x5f, 0x32, 0x63, 0x74, 0xb9, 0xb8, 0xff}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + aws_AWSSEVSNP = M{0: {Expected: []byte{0xd6, 0xdf, 0x85, 0x53, 0x58, 0xf5, 0xb1, 0x0f, 0x06, 0xf0, 0xfa, 0xb3, 0xf4, 0x08, 0xad, 0x26, 0xcd, 0x16, 0x5a, 0x29, 0x49, 0xba, 0xd6, 0x9e, 0x2c, 0xc7, 0x56, 0x92, 0x52, 0x9e, 0x66, 0x2a}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x9a, 0x47, 0x02, 0xda, 0x5a, 0x4d, 0xe5, 0x97, 0x90, 0x95, 0x54, 0x9d, 0x17, 0x97, 0xb0, 0x85, 0xd2, 0x7a, 0xb9, 0xef, 0x17, 0xc8, 0xbd, 0x31, 0x09, 0xad, 0x67, 0x22, 0x57, 0x8e, 0xa0, 0x56}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xa1, 0x53, 0x84, 0x07, 0x39, 0x13, 0x5a, 0x4d, 0xe8, 0x95, 0x24, 0x67, 0x33, 0x2c, 0x4d, 0xd4, 0x3c, 0x00, 0x9e, 0x67, 0x07, 0xaa, 0xd4, 0xc1, 0x1b, 0xc9, 0xfe, 0xdb, 0x99, 0x61, 0x03, 0x23}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xb0, 0x7f, 0xe5, 0x10, 0x0e, 0xd3, 0x15, 0x94, 0x2d, 0xe6, 0x24, 0x15, 0x69, 0x49, 0xb2, 0x0c, 0xc1, 0x22, 0x43, 0x3f, 0xe2, 0xea, 0x8d, 0x60, 0xd0, 0x63, 0xbf, 0x2e, 0x70, 0x2b, 0xbc, 0x54}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + azure_AzureSEVSNP = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x32, 0xc8, 0x19, 0x7b, 0xf9, 0xcb, 0x9e, 0xb1, 0x6c, 0x94, 0x7c, 0xaf, 0xf8, 0x35, 0xeb, 0xe6, 0x62, 0x75, 0x67, 0x95, 0x92, 0x0e, 0x7b, 0x1c, 0x61, 0x9f, 0xbe, 0x98, 0xed, 0x04, 0x06, 0x99}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x32, 0xe7, 0x17, 0xc2, 0xa9, 0x67, 0x24, 0x66, 0xf8, 0xe9, 0x43, 0xfc, 0x40, 0x66, 0x62, 0xd1, 0xa1, 0xf1, 0x1d, 0xc4, 0xe7, 0x2f, 0x8e, 0x21, 0x9a, 0x5f, 0x49, 0xae, 0x25, 0xbd, 0x67, 0x6e}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xc0, 0x57, 0x6d, 0x2e, 0x92, 0xc3, 0x8e, 0xb8, 0xee, 0x2a, 0x92, 0x3a, 0x04, 0x05, 0x2e, 0x34, 0x33, 0xda, 0xf2, 0x9d, 0x9d, 0x14, 0x33, 0x14, 0x36, 0x48, 0xbf, 0x83, 0xb5, 0xd2, 0x44, 0xaf}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + azure_AzureTDX = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x9a, 0xbe, 0x97, 0xa3, 0x44, 0xda, 0x59, 0x42, 0xf4, 0xda, 0x68, 0xf6, 0x2e, 0xeb, 0xaf, 0x98, 0x86, 0x99, 0x85, 0x69, 0xf1, 0x41, 0x4e, 0xf0, 0x0f, 0xa3, 0x6f, 0x9d, 0x2e, 0x55, 0x3a, 0xd4}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x0b, 0x29, 0xaa, 0x2b, 0x77, 0x95, 0x16, 0x1f, 0x74, 0xa0, 0xe1, 0x88, 0xb3, 0xcc, 0x16, 0xb8, 0xbc, 0x76, 0x62, 0xe1, 0xfa, 0x8d, 0xf2, 0xd5, 0x7e, 0xec, 0xfd, 0xf1, 0x73, 0x19, 0x45, 0x61}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x8b, 0xa8, 0xcb, 0x41, 0x74, 0x43, 0xf9, 0x93, 0x05, 0xa4, 0x6a, 0x95, 0x90, 0xf9, 0xd3, 0xc8, 0xb6, 0x5e, 0x4b, 0x09, 0x3c, 0x38, 0x47, 0x82, 0x19, 0x19, 0x9f, 0x11, 0x31, 0x43, 0x46, 0x2d}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} azure_AzureTrustedLaunch M - gcp_GCPSEVES = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xe4, 0x22, 0x0b, 0xbd, 0x71, 0xd8, 0x7c, 0x73, 0xba, 0xf3, 0x78, 0x11, 0xd1, 0xf3, 0xd0, 0xf9, 0x64, 0x72, 0x15, 0x3c, 0x55, 0x30, 0xb0, 0x25, 0x49, 0x45, 0x74, 0xe6, 0x37, 0xf6, 0x16, 0x07}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xf3, 0x36, 0x72, 0x73, 0x70, 0x0d, 0x20, 0x46, 0xcb, 0x26, 0x1f, 0xb6, 0x74, 0xfa, 0xe4, 0x0a, 0xbc, 0x69, 0xcf, 0x1d, 0xac, 0xb1, 0xa8, 0xbd, 0x51, 0xfe, 0x77, 0xa4, 0x1c, 0xb4, 0x50, 0x56}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x20, 0x00, 0x67, 0xe8, 0x53, 0xe3, 0xa7, 0xa6, 0x1d, 0xe5, 0x51, 0xcc, 0xcf, 0x57, 0x87, 0xfd, 0xae, 0x68, 0x94, 0x93, 0xd7, 0x36, 0x37, 0x9c, 0x7b, 0x98, 0x63, 0x1b, 0x8b, 0xeb, 0x4c, 0x02}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - gcp_GCPSEVSNP = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x69, 0xf6, 0x53, 0xbe, 0xb9, 0xec, 0x69, 0xc2, 0xd6, 0x67, 0xad, 0xf4, 0x66, 0xe9, 0x70, 0x23, 0x06, 0xab, 0xd5, 0xef, 0x55, 0xce, 0xd5, 0xcf, 0x8f, 0x7d, 0xdc, 0x90, 0xec, 0xad, 0x9c, 0x2d}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x4c, 0x96, 0xb5, 0x9f, 0xb7, 0x45, 0x74, 0xdd, 0xeb, 0x2a, 0x0a, 0x7f, 0x04, 0xf4, 0x28, 0x9d, 0xf4, 0x93, 0x02, 0xe1, 0x25, 0x68, 0xb0, 0xfc, 0x02, 0x31, 0xce, 0xd2, 0xa4, 0x29, 0xa0, 0x09}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x8c, 0xd0, 0xcf, 0x63, 0x20, 0xe8, 0x83, 0x4c, 0x48, 0x28, 0xd9, 0x53, 0xf5, 0x05, 0xed, 0x34, 0xe3, 0x10, 0x0a, 0x85, 0x4b, 0xef, 0x0b, 0x65, 0xe6, 0xb1, 0x6e, 0xb7, 0x74, 0x43, 0x77, 0x90}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - openstack_QEMUVTPM = M{4: {Expected: []byte{0xc6, 0x0b, 0x67, 0xd2, 0x0a, 0xe7, 0x7b, 0x78, 0x6f, 0x18, 0xfe, 0x3d, 0xd0, 0x7a, 0x61, 0x3e, 0x32, 0xac, 0x7d, 0x7e, 0xc8, 0xe8, 0x81, 0x17, 0x5d, 0x45, 0x31, 0xcd, 0x21, 0x47, 0xc5, 0xc7}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xef, 0xfc, 0xb4, 0x3c, 0x29, 0xac, 0xd8, 0x6d, 0x73, 0x78, 0xcb, 0x15, 0x1e, 0x63, 0xbc, 0x01, 0x2b, 0x72, 0x90, 0x5b, 0x80, 0x38, 0x9b, 0x62, 0xd0, 0x33, 0x6e, 0x75, 0x17, 0x06, 0xb1, 0x68}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x52, 0xd0, 0xc1, 0x2f, 0x33, 0xc6, 0xf6, 0x85, 0x4a, 0xa7, 0x97, 0x11, 0xd4, 0x76, 0xef, 0x1b, 0xf3, 0xab, 0x71, 0xe5, 0xa3, 0x6f, 0x5d, 0xa5, 0xfa, 0xbe, 0xf6, 0x37, 0xe9, 0xb9, 0xe5, 0xbd}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + gcp_GCPSEVES = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xd5, 0xcf, 0xdd, 0x15, 0x80, 0xe9, 0xa0, 0x85, 0x0c, 0xae, 0x8d, 0x65, 0x78, 0x9d, 0x61, 0xe4, 0xdd, 0x3f, 0xba, 0x16, 0x99, 0x9c, 0x7f, 0x42, 0x94, 0xd3, 0x6b, 0x4b, 0x65, 0xf1, 0xc2, 0x3d}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x1f, 0xd1, 0x45, 0xeb, 0x90, 0xfe, 0x3a, 0x84, 0x8c, 0x80, 0x6a, 0xa9, 0x15, 0x87, 0x87, 0x4e, 0xd1, 0x07, 0xef, 0xfa, 0x9e, 0x85, 0xca, 0x00, 0xd0, 0x2f, 0x82, 0x3c, 0x1b, 0x2f, 0xd9, 0x82}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x4b, 0x1d, 0x7d, 0x97, 0xda, 0xad, 0x3a, 0x65, 0x3f, 0x22, 0x6f, 0x20, 0x7b, 0x84, 0x53, 0xf6, 0x2c, 0x74, 0x84, 0x6e, 0xaa, 0x08, 0xd9, 0x90, 0x02, 0xcc, 0x71, 0xc4, 0x12, 0xa6, 0x04, 0x07}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + gcp_GCPSEVSNP = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xd9, 0x65, 0x09, 0xa5, 0x13, 0xea, 0xdb, 0x13, 0xbf, 0x1e, 0x5d, 0xaa, 0x50, 0x19, 0x79, 0x8d, 0x95, 0x34, 0x2b, 0xe6, 0x1d, 0x49, 0x79, 0xb9, 0xda, 0x6f, 0xe8, 0x55, 0x92, 0x91, 0x4e, 0xc1}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x3d, 0x28, 0x5d, 0xcf, 0x44, 0xb0, 0x65, 0xc9, 0xf5, 0xc6, 0x2d, 0xdf, 0x1c, 0x22, 0x9c, 0xd0, 0x3a, 0x46, 0x86, 0xb4, 0x78, 0x96, 0x07, 0x95, 0xb8, 0x80, 0xc6, 0xc5, 0xa7, 0x08, 0x81, 0x97}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x1c, 0xe1, 0x9e, 0x22, 0x2f, 0x0d, 0x37, 0x58, 0x0a, 0x1b, 0xb5, 0xa4, 0xcf, 0x24, 0xd2, 0x69, 0xdc, 0xe9, 0x9d, 0x6e, 0x31, 0xad, 0xd8, 0x3a, 0x21, 0x0e, 0x9e, 0x7a, 0xca, 0x55, 0x28, 0x69}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + openstack_QEMUVTPM = M{4: {Expected: []byte{0xec, 0xa4, 0x27, 0x43, 0xda, 0x51, 0xa3, 0xce, 0x6d, 0x06, 0x71, 0x45, 0xc0, 0x56, 0xe2, 0x31, 0x7a, 0x18, 0x5c, 0x58, 0x1f, 0x20, 0x25, 0xe8, 0x2d, 0xa5, 0xab, 0xaf, 0xec, 0x57, 0x98, 0xee}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xaf, 0x85, 0xe3, 0xb4, 0xae, 0xe4, 0x33, 0x1a, 0xe7, 0x67, 0xbd, 0x4e, 0xc3, 0xd8, 0x2c, 0x26, 0xf4, 0xfa, 0x84, 0x9a, 0x2d, 0xe3, 0xfb, 0x52, 0xc1, 0xf1, 0x55, 0xc2, 0x60, 0xd7, 0x15, 0x7f}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xa5, 0x47, 0x7b, 0xd8, 0xb1, 0x42, 0x89, 0xc0, 0x57, 0xca, 0x0e, 0xd3, 0x22, 0x04, 0x69, 0x4c, 0xf6, 0x80, 0xc0, 0xa5, 0x90, 0x85, 0x4a, 0x78, 0x5e, 0xd5, 0xf4, 0x57, 0x6e, 0x84, 0x5e, 0xd0}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} qemu_QEMUTDX M - qemu_QEMUVTPM = M{4: {Expected: []byte{0xff, 0xf4, 0x4d, 0xe4, 0xa1, 0xff, 0xcf, 0x5c, 0x70, 0x19, 0xc4, 0xbb, 0x8c, 0x88, 0xe1, 0xed, 0x5e, 0x6d, 0xe1, 0x66, 0x59, 0xb4, 0x4c, 0x2b, 0x74, 0x62, 0xec, 0x25, 0xb4, 0x36, 0x4b, 0xd5}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x37, 0xca, 0x5c, 0xda, 0xa2, 0x95, 0xee, 0x37, 0xb2, 0xeb, 0xa8, 0xc2, 0xac, 0x31, 0x30, 0x7f, 0xea, 0x3c, 0x1c, 0x49, 0xec, 0xdd, 0x3f, 0x12, 0xfd, 0x39, 0xc1, 0x7f, 0xe8, 0xf1, 0x31, 0x1c}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xb3, 0xe4, 0xe9, 0x59, 0x10, 0x18, 0x38, 0x79, 0x76, 0x8b, 0xca, 0x1d, 0x16, 0x6f, 0xfb, 0x41, 0x29, 0xe0, 0x47, 0xee, 0x10, 0xa0, 0x71, 0xa8, 0xeb, 0x90, 0x58, 0x00, 0x3a, 0x87, 0x21, 0xaa}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + qemu_QEMUVTPM = M{4: {Expected: []byte{0xa3, 0x56, 0x94, 0x45, 0x69, 0xab, 0x04, 0x94, 0x64, 0xc5, 0xaf, 0x83, 0xd4, 0x93, 0x7e, 0x36, 0x26, 0xf8, 0x75, 0x6d, 0x1b, 0xad, 0x82, 0x98, 0xaa, 0x7a, 0x0e, 0x9c, 0x36, 0x12, 0xe6, 0x4f}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xb7, 0x6e, 0x36, 0x14, 0x92, 0x5d, 0x87, 0x23, 0xa9, 0x83, 0x21, 0x07, 0xfc, 0x58, 0x86, 0x59, 0x7a, 0x26, 0xf8, 0x7f, 0xbd, 0x19, 0xd0, 0x4a, 0x3c, 0xfc, 0xc8, 0x90, 0x5a, 0x89, 0x60, 0x42}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xec, 0x93, 0x9c, 0x28, 0xa7, 0xfe, 0xbf, 0xb6, 0xfb, 0x21, 0x06, 0x36, 0x5a, 0x88, 0x82, 0x9d, 0x14, 0x61, 0x60, 0x93, 0x76, 0x2d, 0xd3, 0x11, 0x5b, 0xda, 0x08, 0x38, 0x64, 0x6a, 0x53, 0xe9}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} ) diff --git a/internal/config/image_enterprise.go b/internal/config/image_enterprise.go index 14a5fefd4..30dab1b2a 100644 --- a/internal/config/image_enterprise.go +++ b/internal/config/image_enterprise.go @@ -10,5 +10,5 @@ package config const ( // defaultImage is the default image to use. - defaultImage = "ref/main/stream/nightly/v2.23.0-pre.0.20250430113110-c5ef866cdc63" + defaultImage = "ref/main/stream/nightly/v2.24.0-pre.0.20250506164353-dd8539f54b44" ) From 01f7d90e63396a140f60a01d77109b268ad1ea26 Mon Sep 17 00:00:00 2001 From: Moritz Sanft <58110325+msanft@users.noreply.github.com> Date: Wed, 7 May 2025 08:19:26 +0200 Subject: [PATCH 255/311] renovate: add missing comma (#3805) --- renovate.json5 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/renovate.json5 b/renovate.json5 index e29519123..369bffaf1 100644 --- a/renovate.json5 +++ b/renovate.json5 @@ -89,7 +89,7 @@ // Group update of rules_go dependencies. groupName: 'rules_go dependencies', matchManagers: [ - 'gomod' + 'gomod', 'bazel', 'bazel-module', ], From b21e5a3cd37074a59d00aac8b3cb15efa2f6d684 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 7 May 2025 09:19:12 +0200 Subject: [PATCH 256/311] deps: update ubuntu:24.04 Docker digest to 6015f66 (#3809) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- 3rdparty/gcp-guest-agent/Dockerfile | 2 +- docs/screencasts/docker/Dockerfile | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/3rdparty/gcp-guest-agent/Dockerfile b/3rdparty/gcp-guest-agent/Dockerfile index 0afa19e2c..0053c34a8 100644 --- a/3rdparty/gcp-guest-agent/Dockerfile +++ b/3rdparty/gcp-guest-agent/Dockerfile @@ -1,4 +1,4 @@ -FROM ubuntu:24.04@sha256:1e622c5f073b4f6bfad6632f2616c7f59ef256e96fe78bf6a595d1dc4376ac02 as build +FROM ubuntu:24.04@sha256:6015f66923d7afbc53558d7ccffd325d43b4e249f41a6e93eef074c9505d2233 as build # Install packages RUN apt-get update && apt-get install -y \ diff --git a/docs/screencasts/docker/Dockerfile b/docs/screencasts/docker/Dockerfile index d524ff7e2..404593d4d 100644 --- a/docs/screencasts/docker/Dockerfile +++ b/docs/screencasts/docker/Dockerfile @@ -1,4 +1,4 @@ -FROM ubuntu:24.04@sha256:1e622c5f073b4f6bfad6632f2616c7f59ef256e96fe78bf6a595d1dc4376ac02 +FROM ubuntu:24.04@sha256:6015f66923d7afbc53558d7ccffd325d43b4e249f41a6e93eef074c9505d2233 # Install requirements RUN apt-get update && apt-get install -y software-properties-common &&\ From 53a4db167ad83396c79a62adb11c60a15d21147e Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 7 May 2025 09:59:56 +0200 Subject: [PATCH 257/311] deps: update dependency numpy to v2.2.5 (#3811) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/actions/e2e_benchmark/evaluate/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/actions/e2e_benchmark/evaluate/requirements.txt b/.github/actions/e2e_benchmark/evaluate/requirements.txt index 598e2ec34..159c6136f 100644 --- a/.github/actions/e2e_benchmark/evaluate/requirements.txt +++ b/.github/actions/e2e_benchmark/evaluate/requirements.txt @@ -1,3 +1,3 @@ -numpy ==2.2.4 +numpy ==2.2.5 matplotlib ==3.10.1 Pillow ==11.2.1 \ No newline at end of file From 4b2a04adcf436b0d7a55eedb254725cfad4b34b2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Wei=C3=9Fe?= <66256922+daniel-weisse@users.noreply.github.com> Date: Wed, 7 May 2025 10:13:43 +0200 Subject: [PATCH 258/311] codeowners: remove derpsteb (#3815) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Daniel Weiße --- CODEOWNERS | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/CODEOWNERS b/CODEOWNERS index 6061a39c1..9b9c14fcf 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -4,7 +4,7 @@ /bazel @burgerdev /bootstrapper @msanft /cli/internal/cloudcmd @daniel-weisse -/cli/internal/cmd/upgrade* @derpsteb +/cli/internal/cmd/upgrade* @daniel-weisse /cli/internal/libvirt @daniel-weisse /cli/internal/terraform @elchead /csi @daniel-weisse @@ -12,9 +12,9 @@ /disk-mapper @daniel-weisse /docs @thomasten /e2e @msanft -/hack/azure-snp-report-verify @derpsteb +/hack/azure-snp-report-verify @msanft /hack/bazel-deps-mirror @burgerdev -/hack/cli-k8s-compatibility @derpsteb +/hack/cli-k8s-compatibility @burgerdev /hack/clidocgen @thomasten /hack/fetch-broken-e2e @msanft /hack/gocoverage @msanft @@ -25,12 +25,12 @@ /hack/tools @msanft /hack/versioninfogen @daniel-weisse /image @msanft -/internal/api @derpsteb +/internal/api @daniel-weisse /internal/atls @thomasten /internal/attestation @daniel-weisse /internal/cloud @msanft -/internal/compatibility @derpsteb -/internal/config @derpsteb +/internal/compatibility @daniel-weisse +/internal/config @msanft /internal/constellation/featureset @thomasten /internal/constellation/helm @burgerdev /internal/constellation/kubecmd @daniel-weisse @@ -49,7 +49,7 @@ /internal/nodestate @daniel-weisse /internal/osimage @msanft /internal/retry @msanft -/internal/semver @derpsteb +/internal/semver @daniel-weisse /internal/sigstore @elchead /internal/staticupload @msanft /internal/versions @msanft From 3febe0c109283961a5ae80c1da3b6ed8f64636dd Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 7 May 2025 10:47:22 +0200 Subject: [PATCH 259/311] deps: update Terraform dependencies (#3813) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .../infrastructure/gcp/.terraform.lock.hcl | 48 +++++++-------- terraform/infrastructure/gcp/main.tf | 2 +- .../gcp/modules/instance_group/main.tf | 2 +- .../modules/internal_load_balancer/main.tf | 2 +- .../gcp/modules/jump_host/main.tf | 2 +- .../gcp/modules/loadbalancer/main.tf | 2 +- .../iam/gcp/.terraform.lock.hcl | 48 +++++++-------- terraform/infrastructure/iam/gcp/main.tf | 2 +- .../infrastructure/qemu/.terraform.lock.hcl | 58 +++++++++---------- terraform/infrastructure/qemu/main.tf | 2 +- 10 files changed, 83 insertions(+), 85 deletions(-) diff --git a/terraform/infrastructure/gcp/.terraform.lock.hcl b/terraform/infrastructure/gcp/.terraform.lock.hcl index f377ab6cd..d5d21c147 100644 --- a/terraform/infrastructure/gcp/.terraform.lock.hcl +++ b/terraform/infrastructure/gcp/.terraform.lock.hcl @@ -2,31 +2,31 @@ # Manual edits may be lost in future updates. provider "registry.terraform.io/hashicorp/google" { - version = "6.33.0" - constraints = "6.33.0" + version = "6.34.0" + constraints = "6.34.0" hashes = [ - "h1:8Xy1cSwUTCftZTIO3oyYvgFBowa8/HW6Wl46LOYDjoI=", - "h1:AlkT9Eys3pPXY76S2M59nCDnzIue5kTtsbIbLj0bXs8=", - "h1:DEEWZgiDMsh5+a1ovKYKpvZgRC93/1+nURiHrovSm8c=", - "h1:DcahHEtKQIGjIJUvl168KcejcYPTdPytt+Yknct3X6Q=", - "h1:DrsQdtT4+qF+usfEaQjtCBqI+FBMj2Ot6jkJmxEyRmo=", - "h1:Kr/C2M8lMDB2QtcqD0ILwDf9tfvWaF317X0YE3vAnOA=", - "h1:ZUGZ+h/Jg4oW9pza39/p0zrDS/NNiIWkTnjDxhNasMo=", - "h1:boMceijxldXypXsaGn9gLoJSRumDGV+FkmYSxQnZX5I=", - "h1:dE46Z+wn22tD2wsOiiBQBEz1fNQ21pgVVMovqs/7teI=", - "h1:eL6YpveAOaWvd5k6quARhWcckG64OxA8hBn89Xc3CZc=", - "h1:kKjowTW4x4Doc0gjOfZp2l7FJKjsHgCUm6n3l6q5PsI=", - "zh:1bce89797564bc71f8907cdf0e232ed523a403997d663ce82dd61cef468d54d4", - "zh:296eed917e311422470fc7df194b52cd45f5bb26ba92a27e1a2d5716a0c47f7f", - "zh:3a21a1c06ea4c3021a9a9dc40e020ea0596be1c833ba609643366c9a7a04ff23", - "zh:44c7307bf53264b42ae4d1fe1780c6be34d22a16f93b24ba4c9536389f20213a", - "zh:4518f045317222cbcb532db676ac7707bc2fdddbe62a9df2e68e6e6953c9e911", - "zh:4f40f809222142997023eb08c4fc0527d8d0abd27e21b6d2df9a6aba79c672fe", - "zh:6f0bdaebf11e78f24f2036935f49d907eb99283081ecdaef3e3f45eb7562566f", - "zh:93933870c585f32074243a83eee967c5ed5307b825c4f88a80bb9895fc90a2d7", - "zh:ae75d0bfeffc2b461c4f904e84d69c0bec5381f90c6b79c31d23fd0ae20da34e", - "zh:b808692d49208df953a51b74b2ce6343f9d17c881949b9e00afbc245fdcd5aba", - "zh:e69ac3486fd7556792895d50d9ed17e7550cc107731926f98cc2a9e8fa74002d", + "h1:+40eD71Xl75UpZvbbitnVt1BvUOcx9WksqOnlBB2c9Q=", + "h1:1Gd57Ulq+OB9khkO09ouHI4LmFw9E+r9sjiSyXPuCF4=", + "h1:59cmRCN+mhq61+EZPbi77PKsGOfs6ImIIOfYSMDbUrU=", + "h1:ES6HIEg3JgeQhxpSuesr4XuiPU8FesYdNNoI/5oWX9w=", + "h1:LRFx7b919RKd4E9kF+1MB3x+uzanH6CsVsZDTdTeH30=", + "h1:VTZlsNbNnV4+zOsckNzuC7mSXRcj1jpqmEfbcTGOC2Y=", + "h1:fhSIABKEWQm4hZ1q2t4t1XpaanvSkvetfYlnYsQKMuw=", + "h1:h/C3fL+6ZLj5ht+P7sjLIZuTeeDq7xEi5Fe/63E4IOY=", + "h1:mhaYgm/7zhVdNzDannBKLjIEa4PUvvrOR+FwyRwKwa4=", + "h1:nvjIIAonvo1MkIOavdMaRlEaG1W4rkBVz71Ab9Y3JDU=", + "h1:yjtTSeGR3SChg+fxMIjI/TpIdvTPTsjAABmXJ5cYwxs=", + "zh:1835b5bc8b6a7fb06d4463438584e19af1123aaf279fa8fa571f710ab921bea3", + "zh:19d3f81877844deafcae22aba9d03bff046d980f572c5e93075f8c2886020b4b", + "zh:5720dd174f3cdc6beb0c290a3d5f928e9bf7fbe98febacf3b0a5c3c767a5ca0c", + "zh:70ec4a7b2b102003b0bfecd04bb24ece5c9a8f1ed9c02157c1931022fcfbb6f4", + "zh:726d751e4124f6d0998681455ee20ffca29774a36564ebca07c59247b735bcf5", + "zh:81b367a2ec6bc3a7cd04e55e55da349e7494714cafb2f4e7e4ab4a4a70bb0c1c", + "zh:856588076bbfe269f51e0bbf98580cc8086e5cb9f2c1e14907c7398c6bcd3881", + "zh:9cba3201401c2577690915498b17d958e24bf6648ccb4547c5a5196a80901edb", + "zh:c4e3f6951d8d8318d1b2b670149f0c53aecf3e659ca313e70ec985c8b3ab06ec", + "zh:d4b532ba25ffbd1d320d7f25fb1b11a0f4ef2aa9b9a7b9c1956fb228c8ec51ec", + "zh:d631f15923a8cde32a9f077a186efb17b3c2eb2a8d068db1dac1532cf4b98624", "zh:f569b65999264a9416862bca5cd2a6177d94ccb0424f3a4ef424428912b9cb3c", ] } diff --git a/terraform/infrastructure/gcp/main.tf b/terraform/infrastructure/gcp/main.tf index e2a7a3f09..956f687a8 100644 --- a/terraform/infrastructure/gcp/main.tf +++ b/terraform/infrastructure/gcp/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { google = { source = "hashicorp/google" - version = "6.33.0" + version = "6.34.0" } random = { diff --git a/terraform/infrastructure/gcp/modules/instance_group/main.tf b/terraform/infrastructure/gcp/modules/instance_group/main.tf index f07303dea..b645c67fc 100644 --- a/terraform/infrastructure/gcp/modules/instance_group/main.tf +++ b/terraform/infrastructure/gcp/modules/instance_group/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { google = { source = "hashicorp/google" - version = "6.33.0" + version = "6.34.0" } random = { diff --git a/terraform/infrastructure/gcp/modules/internal_load_balancer/main.tf b/terraform/infrastructure/gcp/modules/internal_load_balancer/main.tf index 7ee13409d..f695aa001 100644 --- a/terraform/infrastructure/gcp/modules/internal_load_balancer/main.tf +++ b/terraform/infrastructure/gcp/modules/internal_load_balancer/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { google = { source = "hashicorp/google" - version = "6.33.0" + version = "6.34.0" } } } diff --git a/terraform/infrastructure/gcp/modules/jump_host/main.tf b/terraform/infrastructure/gcp/modules/jump_host/main.tf index 9ab602bab..f5a273fa9 100644 --- a/terraform/infrastructure/gcp/modules/jump_host/main.tf +++ b/terraform/infrastructure/gcp/modules/jump_host/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { google = { source = "hashicorp/google" - version = "6.33.0" + version = "6.34.0" } } } diff --git a/terraform/infrastructure/gcp/modules/loadbalancer/main.tf b/terraform/infrastructure/gcp/modules/loadbalancer/main.tf index 37a4082f6..5866d1591 100644 --- a/terraform/infrastructure/gcp/modules/loadbalancer/main.tf +++ b/terraform/infrastructure/gcp/modules/loadbalancer/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { google = { source = "hashicorp/google" - version = "6.33.0" + version = "6.34.0" } } } diff --git a/terraform/infrastructure/iam/gcp/.terraform.lock.hcl b/terraform/infrastructure/iam/gcp/.terraform.lock.hcl index edf4c2549..8a832b962 100644 --- a/terraform/infrastructure/iam/gcp/.terraform.lock.hcl +++ b/terraform/infrastructure/iam/gcp/.terraform.lock.hcl @@ -2,31 +2,31 @@ # Manual edits may be lost in future updates. provider "registry.terraform.io/hashicorp/google" { - version = "6.33.0" - constraints = "6.33.0" + version = "6.34.0" + constraints = "6.34.0" hashes = [ - "h1:8Xy1cSwUTCftZTIO3oyYvgFBowa8/HW6Wl46LOYDjoI=", - "h1:AlkT9Eys3pPXY76S2M59nCDnzIue5kTtsbIbLj0bXs8=", - "h1:DEEWZgiDMsh5+a1ovKYKpvZgRC93/1+nURiHrovSm8c=", - "h1:DcahHEtKQIGjIJUvl168KcejcYPTdPytt+Yknct3X6Q=", - "h1:DrsQdtT4+qF+usfEaQjtCBqI+FBMj2Ot6jkJmxEyRmo=", - "h1:Kr/C2M8lMDB2QtcqD0ILwDf9tfvWaF317X0YE3vAnOA=", - "h1:ZUGZ+h/Jg4oW9pza39/p0zrDS/NNiIWkTnjDxhNasMo=", - "h1:boMceijxldXypXsaGn9gLoJSRumDGV+FkmYSxQnZX5I=", - "h1:dE46Z+wn22tD2wsOiiBQBEz1fNQ21pgVVMovqs/7teI=", - "h1:eL6YpveAOaWvd5k6quARhWcckG64OxA8hBn89Xc3CZc=", - "h1:kKjowTW4x4Doc0gjOfZp2l7FJKjsHgCUm6n3l6q5PsI=", - "zh:1bce89797564bc71f8907cdf0e232ed523a403997d663ce82dd61cef468d54d4", - "zh:296eed917e311422470fc7df194b52cd45f5bb26ba92a27e1a2d5716a0c47f7f", - "zh:3a21a1c06ea4c3021a9a9dc40e020ea0596be1c833ba609643366c9a7a04ff23", - "zh:44c7307bf53264b42ae4d1fe1780c6be34d22a16f93b24ba4c9536389f20213a", - "zh:4518f045317222cbcb532db676ac7707bc2fdddbe62a9df2e68e6e6953c9e911", - "zh:4f40f809222142997023eb08c4fc0527d8d0abd27e21b6d2df9a6aba79c672fe", - "zh:6f0bdaebf11e78f24f2036935f49d907eb99283081ecdaef3e3f45eb7562566f", - "zh:93933870c585f32074243a83eee967c5ed5307b825c4f88a80bb9895fc90a2d7", - "zh:ae75d0bfeffc2b461c4f904e84d69c0bec5381f90c6b79c31d23fd0ae20da34e", - "zh:b808692d49208df953a51b74b2ce6343f9d17c881949b9e00afbc245fdcd5aba", - "zh:e69ac3486fd7556792895d50d9ed17e7550cc107731926f98cc2a9e8fa74002d", + "h1:+40eD71Xl75UpZvbbitnVt1BvUOcx9WksqOnlBB2c9Q=", + "h1:1Gd57Ulq+OB9khkO09ouHI4LmFw9E+r9sjiSyXPuCF4=", + "h1:59cmRCN+mhq61+EZPbi77PKsGOfs6ImIIOfYSMDbUrU=", + "h1:ES6HIEg3JgeQhxpSuesr4XuiPU8FesYdNNoI/5oWX9w=", + "h1:LRFx7b919RKd4E9kF+1MB3x+uzanH6CsVsZDTdTeH30=", + "h1:VTZlsNbNnV4+zOsckNzuC7mSXRcj1jpqmEfbcTGOC2Y=", + "h1:fhSIABKEWQm4hZ1q2t4t1XpaanvSkvetfYlnYsQKMuw=", + "h1:h/C3fL+6ZLj5ht+P7sjLIZuTeeDq7xEi5Fe/63E4IOY=", + "h1:mhaYgm/7zhVdNzDannBKLjIEa4PUvvrOR+FwyRwKwa4=", + "h1:nvjIIAonvo1MkIOavdMaRlEaG1W4rkBVz71Ab9Y3JDU=", + "h1:yjtTSeGR3SChg+fxMIjI/TpIdvTPTsjAABmXJ5cYwxs=", + "zh:1835b5bc8b6a7fb06d4463438584e19af1123aaf279fa8fa571f710ab921bea3", + "zh:19d3f81877844deafcae22aba9d03bff046d980f572c5e93075f8c2886020b4b", + "zh:5720dd174f3cdc6beb0c290a3d5f928e9bf7fbe98febacf3b0a5c3c767a5ca0c", + "zh:70ec4a7b2b102003b0bfecd04bb24ece5c9a8f1ed9c02157c1931022fcfbb6f4", + "zh:726d751e4124f6d0998681455ee20ffca29774a36564ebca07c59247b735bcf5", + "zh:81b367a2ec6bc3a7cd04e55e55da349e7494714cafb2f4e7e4ab4a4a70bb0c1c", + "zh:856588076bbfe269f51e0bbf98580cc8086e5cb9f2c1e14907c7398c6bcd3881", + "zh:9cba3201401c2577690915498b17d958e24bf6648ccb4547c5a5196a80901edb", + "zh:c4e3f6951d8d8318d1b2b670149f0c53aecf3e659ca313e70ec985c8b3ab06ec", + "zh:d4b532ba25ffbd1d320d7f25fb1b11a0f4ef2aa9b9a7b9c1956fb228c8ec51ec", + "zh:d631f15923a8cde32a9f077a186efb17b3c2eb2a8d068db1dac1532cf4b98624", "zh:f569b65999264a9416862bca5cd2a6177d94ccb0424f3a4ef424428912b9cb3c", ] } diff --git a/terraform/infrastructure/iam/gcp/main.tf b/terraform/infrastructure/iam/gcp/main.tf index ca142b06e..8fdad8338 100644 --- a/terraform/infrastructure/iam/gcp/main.tf +++ b/terraform/infrastructure/iam/gcp/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { google = { source = "hashicorp/google" - version = "6.33.0" + version = "6.34.0" } } } diff --git a/terraform/infrastructure/qemu/.terraform.lock.hcl b/terraform/infrastructure/qemu/.terraform.lock.hcl index be6d3c75f..1796c477f 100644 --- a/terraform/infrastructure/qemu/.terraform.lock.hcl +++ b/terraform/infrastructure/qemu/.terraform.lock.hcl @@ -67,36 +67,34 @@ provider "registry.terraform.io/hashicorp/random" { } provider "registry.terraform.io/kreuzwerker/docker" { - version = "3.4.0" - constraints = "3.4.0" + version = "3.5.0" + constraints = "3.5.0" hashes = [ - "h1:/0AxyNFTAOGHjK9A7itMWMRu+D9K9hQfqa2FvOry+2Y=", - "h1:2wSmEjObbh6eNgY+gQyT11ZY5aNNsZ3+pRHsWCk31Zk=", - "h1:47rfwMIGCa4ZpupQNWCd+k2gtdbHOPUdvZoQZ5a+WxU=", - "h1:6dA29FjSUUmHVMz8tTnZjzKAkxqjKIuomny2f8uf1Gc=", - "h1:8ku1cRoi2qstR8ovp5cLzXGgfznTsDAIggVbH8ZI/6Y=", - "h1:BGsI/s5glyzFpc5KC9ja+a5Y7HIuiadAh+YIKiOiztw=", - "h1:D+Tp3ZMoqcfsiSyYWYBF0NEMeqSXRN5NgH1JYs2Sigs=", - "h1:IVgAZw/yRWyR3QwcIuezK8PbGQbnO+byCxmHXnvJiEg=", - "h1:So/hIA5RHwL2XLkKmapmqLRUCEynbyXaIqwGGgB1PsI=", - "h1:UItox6gGOenEPI1nnyIRhDYn4dpm+cHsi9KiGNvHOwc=", - "h1:cJXTOPBncTcubVH2Hk/p0Dwx+v7toUjScPv/KV2QaE0=", - "h1:lSEVqt/29WJ+SYGVNUpQN23HUw4yMbKpR7NI4grRgL0=", - "h1:pVOc8txX1iyJdvMqGb1fJcV/Stllc+sB9ytH5c7kWXM=", - "h1:tfPa22t0+5dTw4mDKLGVR3BMJsRTpiDybcc+ybCiHlk=", - "zh:047b59cc0904601d579e759eb2a333504136d96d74c6288a49fc768f9ab41b66", - "zh:0a00959bff0b101791c6eb6ccbed6135f5e6f9cadc642317343a046de3f22529", - "zh:163dab50c1c1b9d6ef4c63aab4973ef4f9ee465c2165f623e38c3dc2aff8856a", - "zh:1c9824f99659aa1157d33b26f4aaca699c55848653c9a9f7e298785ac04fd47b", - "zh:1ccb13c7ae388155528a5bea493a932296d8575ef9afe69f50e825a60a7694c8", - "zh:28af734b390dbde7a44c0cfe396f127cfbf2bc24429478d8b7c78ebbfa8c6e6f", - "zh:4b785578233f9e20f8537b9f360be0ac9b40603302804d32ff36363dcd870437", - "zh:5eb0fa2ccb4307923a40248e7f88738b7bdb719224fe475673f92dbe8acddea1", - "zh:b070a49c5c17118ec69dd000d10ec22e24e5364731497c2889fdcd34615d0749", - "zh:bb8306c644e95021a0aabc0ba3adc9d9cf3577254c0cd322a4f2be8b4d9b20f1", - "zh:d3ebfbb0e791d54599dbb6fa0ab9734f6fd1d4a5f5cb2cb43b1facda05a833db", - "zh:d504d3b6cee7a1e16e74c157a421d7bfdd48e668d50d4da5a8b051ac17b6c735", - "zh:df365517e653946affbd4b322ccf21f80d613102ac667bef903691d6ea856356", - "zh:f07d852519beadbb5586848ac2015fb7ba12db54fea72a6defeab77b5754db2a", + "h1:2m9zj6qkquTHzwXFp+8NpA6e7n6RgckdzvLcBfCCaX4=", + "h1:5fbzStQvS4Ec+/QKefUVDf/pabuwGBpVgLYeigOpMe8=", + "h1:5ykMfyIfMooAmowvmPXc7sVdkhkATrOSkq98Ca0T4ZQ=", + "h1:CIiLFn0SJ+1b2ArewLFjDThJ6rxFf54u9FATgZD9Kac=", + "h1:GSPQAzIJs+b3Ypy9YUTvF4/RrA8Uawx+liA+cQ7RaP4=", + "h1:TYbKlCFkOOI9hh63nbWT6yvd/0PfBONtMO4jkGvu8Us=", + "h1:TzYSjwiML0arIOHzYWD7dLMZZEg0jLHTiSNNNB9c0H8=", + "h1:bU1vBUeUoyaGMkforubnY6O1udOLwYWReXTnneZ8sDk=", + "h1:d+4qP/GCkGnPyfzSa19M49n+6FkIe1BmuEl+HXSDYXs=", + "h1:f7cuN7GkUm4ucgZzr0DwzdbbXrRUmKvmUHkKL40Zg7U=", + "h1:j0REIQY6zq1P0iDUdo5pGZQZy85/EK5ckvRqqzYMMLQ=", + "h1:q00T95a38TRhPJ90y8okMMGQtbOQPROMr+sCbU/mP8Y=", + "h1:qXkfTd57rY0sp++8oU+qSeSMLRLLOZu7jWEJONOkwek=", + "zh:01fa6b2f9c44fc0f286f27941d3866adb749e34235f25b9d731b4f45f9c8a601", + "zh:0f945042448360b3f44662db4dceb7287236a950cf936bc973735acc7cded206", + "zh:44f1e6b5b451d072e84dffe61dbf2c3fbbb4a9f8e98f921a99025ac19c6adbb6", + "zh:5724f8af7c2bbd0f019114421dd46e7c8983ec7ea9444a03fc3a770510b47f03", + "zh:790d0b9bc941d1953a739da5426b6a5efa4db97a9c4bb30c52019536abc40661", + "zh:7b89c7cf131a33604a9b8c3fd7a94b28446beba633bbf52e6e37ea3fef643421", + "zh:7e59eb91e253a3f04b40e1e0b45b027fed0e69fed78cd996788a23d92f02137d", + "zh:9caf1c13d1c6ed6a3b7aa11a61b56623b6bd30a6a1e396558c3dbe82370f34f5", + "zh:ba5b46ae242953fbec32f9f93dc5a81fd2e6962df68f17c670c0533040c74b42", + "zh:cae081982d5931ad265223c09824f2b3cd58a1fe307ccc701188d688ad217e6e", + "zh:cda2545056b6028d84505b18aaf20e7c769f6665fe27e16d2c52e35d23840689", + "zh:e41f2b9901202cb2cf7929005340ffc498ab1ca813005e364af4016a85634b5e", + "zh:e84272077a0287bc68523134292d9b12af54e200e413a89ae37f5788c063de5d", ] } diff --git a/terraform/infrastructure/qemu/main.tf b/terraform/infrastructure/qemu/main.tf index 4e9d43630..3c01a07a9 100644 --- a/terraform/infrastructure/qemu/main.tf +++ b/terraform/infrastructure/qemu/main.tf @@ -6,7 +6,7 @@ terraform { } docker = { source = "kreuzwerker/docker" - version = "3.4.0" + version = "3.5.0" } random = { source = "hashicorp/random" From b0d011fb2c7101476cdf8b884082ce718ef44e25 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Wei=C3=9Fe?= <66256922+daniel-weisse@users.noreply.github.com> Date: Wed, 7 May 2025 11:22:33 +0200 Subject: [PATCH 260/311] renovate: exclude s3proxy pseudo-versions upgrades (#3814) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Daniel Weiße --- renovate.json5 | 2 +- s3proxy/deploy/deployment-s3proxy.yaml | 2 +- s3proxy/deploy/s3proxy/values.yaml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/renovate.json5 b/renovate.json5 index 369bffaf1..cba66f393 100644 --- a/renovate.json5 +++ b/renovate.json5 @@ -30,7 +30,6 @@ ignoreDeps: [ 'github.com/edgelesssys/constellation/v2', 'github.com/daniel-weisse/go-cryptsetup', - // Only update once they fixed dependency violations on their side. 'github.com/google/go-tpm-tools', ], @@ -252,6 +251,7 @@ matchPackageNames: [ 'ghcr.io/edgelesssys/{/,}**', '!ghcr.io/edgelesssys/cloud-provider-gcp', + '!ghcr.io/edgelesssys/constellation/s3proxy', ], versioning: 'semver', // Allow packages of ghcr.io/edgelesssys to update to unstable prereleases. diff --git a/s3proxy/deploy/deployment-s3proxy.yaml b/s3proxy/deploy/deployment-s3proxy.yaml index aa8e4b1f0..73c7bf098 100644 --- a/s3proxy/deploy/deployment-s3proxy.yaml +++ b/s3proxy/deploy/deployment-s3proxy.yaml @@ -72,7 +72,7 @@ spec: spec: containers: - name: s3proxy - image: ghcr.io/edgelesssys/constellation/s3proxy:v2.13.0-pre + image: ghcr.io/edgelesssys/constellation/s3proxy:v2.23.0 args: - "--level=-1" ports: diff --git a/s3proxy/deploy/s3proxy/values.yaml b/s3proxy/deploy/s3proxy/values.yaml index 7beedbbd7..8a12a2743 100644 --- a/s3proxy/deploy/s3proxy/values.yaml +++ b/s3proxy/deploy/s3proxy/values.yaml @@ -3,7 +3,7 @@ awsAccessKeyID: "replaceme" awsSecretAccessKey: "replaceme" # Pod image to deploy. -image: "ghcr.io/edgelesssys/constellation/s3proxy:v2.23.0-pre.0.20250409150110-8e6c93474149" +image: "ghcr.io/edgelesssys/constellation/s3proxy:v2.23.0" # Control if multipart uploads are blocked. allowMultipart: false From 1a8bf5f5e17bac01682d5c0712b8dca558982bcd Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 7 May 2025 11:37:07 +0200 Subject: [PATCH 261/311] deps: update ghcr.io/edgelesssys/constellation/s3proxy Docker tag to v2.23.1 (#3816) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- s3proxy/deploy/s3proxy/values.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/s3proxy/deploy/s3proxy/values.yaml b/s3proxy/deploy/s3proxy/values.yaml index 8a12a2743..d70f349e3 100644 --- a/s3proxy/deploy/s3proxy/values.yaml +++ b/s3proxy/deploy/s3proxy/values.yaml @@ -3,7 +3,7 @@ awsAccessKeyID: "replaceme" awsSecretAccessKey: "replaceme" # Pod image to deploy. -image: "ghcr.io/edgelesssys/constellation/s3proxy:v2.23.0" +image: "ghcr.io/edgelesssys/constellation/s3proxy:v2.23.1" # Control if multipart uploads are blocked. allowMultipart: false From fd17a8d605c2824e929d7bb6a18f5b00f1656707 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 7 May 2025 11:37:29 +0200 Subject: [PATCH 262/311] deps: update ghcr.io/edgelesssys/gcp-guest-agent Docker tag to v20250502 (#3808) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- internal/versions/versions.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/versions/versions.go b/internal/versions/versions.go index 73659b802..0e82917bf 100644 --- a/internal/versions/versions.go +++ b/internal/versions/versions.go @@ -169,7 +169,7 @@ const ( // GcpGuestImage image for GCP guest agent. // Check for new versions at https://github.com/GoogleCloudPlatform/guest-agent/releases and update in /.github/workflows/build-gcp-guest-agent.yml. - GcpGuestImage = "ghcr.io/edgelesssys/gcp-guest-agent:v20250331.0.0@sha256:89bf155b7ae723bcdcde604e0aa0f5aa98b549c86026504f140755d01a44bc07" // renovate:container + GcpGuestImage = "ghcr.io/edgelesssys/gcp-guest-agent:v20250502.1.0@sha256:024faa0724b52d4d03117861aa7db533395d6e336d1bdf1f81f8e8d74baada5a" // renovate:container // NodeMaintenanceOperatorImage is the image for the node maintenance operator. NodeMaintenanceOperatorImage = "quay.io/medik8s/node-maintenance-operator:v0.17.0@sha256:bf1c5758b3d266dd6234422d156c67ffdd47f50f70ce17d5cef1de6065030337" // renovate:container // LogstashImage is the container image of logstash, used for log collection by debugd. From 8d2e9b90dd67580daf30e4418f64fb1eb3d5763b Mon Sep 17 00:00:00 2001 From: Adrian Stobbe Date: Wed, 7 May 2025 13:20:32 +0200 Subject: [PATCH 263/311] docs: GCP iam migration (#3778) --- cli/internal/cloudcmd/iamupgrade.go | 3 --- docs/docs/getting-started/install.md | 5 +++++ docs/docs/reference/migration.md | 6 ++++++ docs/versioned_docs/version-2.23/getting-started/install.md | 5 +++++ docs/versioned_docs/version-2.23/reference/migration.md | 6 ++++++ 5 files changed, 22 insertions(+), 3 deletions(-) diff --git a/cli/internal/cloudcmd/iamupgrade.go b/cli/internal/cloudcmd/iamupgrade.go index 642903294..729af5d29 100644 --- a/cli/internal/cloudcmd/iamupgrade.go +++ b/cli/internal/cloudcmd/iamupgrade.go @@ -22,9 +22,6 @@ import ( // UpgradeRequiresIAMMigration returns true if the given cloud provider requires an IAM migration. func UpgradeRequiresIAMMigration(provider cloudprovider.Provider) bool { switch provider { - case cloudprovider.GCP: - // TODO(@3u13r): remove this case after the v2.22.0 release - return true default: return false } diff --git a/docs/docs/getting-started/install.md b/docs/docs/getting-started/install.md index f120b865a..f072407d8 100644 --- a/docs/docs/getting-started/install.md +++ b/docs/docs/getting-started/install.md @@ -263,6 +263,11 @@ To [create a Constellation cluster](../workflows/create.md), you need the follow * `compute.firewalls.delete` * `compute.firewalls.get` * `compute.firewalls.update` +* `compute.forwardingRules.create` +* `compute.forwardingRules.delete` +* `compute.forwardingRules.get` +* `compute.forwardingRules.setLabels` +* `compute.forwardingRules.list` * `compute.globalAddresses.create` * `compute.globalAddresses.delete` * `compute.globalAddresses.get` diff --git a/docs/docs/reference/migration.md b/docs/docs/reference/migration.md index 36bfb1462..eb55d650b 100644 --- a/docs/docs/reference/migration.md +++ b/docs/docs/reference/migration.md @@ -3,6 +3,12 @@ This document describes breaking changes and migrations between Constellation releases. Use [`constellation config migrate`](./cli.md#constellation-config-migrate) to automatically update an old config file to a new format. +## Migrations to v2.23.0 + +### GCP + +GCP will require the additional permission `compute.forwardingRules.list`. Please update your IAM roles using `constellation iam upgrade apply`. + ## Migrations to v2.19.1 ### Azure diff --git a/docs/versioned_docs/version-2.23/getting-started/install.md b/docs/versioned_docs/version-2.23/getting-started/install.md index f120b865a..f072407d8 100644 --- a/docs/versioned_docs/version-2.23/getting-started/install.md +++ b/docs/versioned_docs/version-2.23/getting-started/install.md @@ -263,6 +263,11 @@ To [create a Constellation cluster](../workflows/create.md), you need the follow * `compute.firewalls.delete` * `compute.firewalls.get` * `compute.firewalls.update` +* `compute.forwardingRules.create` +* `compute.forwardingRules.delete` +* `compute.forwardingRules.get` +* `compute.forwardingRules.setLabels` +* `compute.forwardingRules.list` * `compute.globalAddresses.create` * `compute.globalAddresses.delete` * `compute.globalAddresses.get` diff --git a/docs/versioned_docs/version-2.23/reference/migration.md b/docs/versioned_docs/version-2.23/reference/migration.md index 36bfb1462..eb55d650b 100644 --- a/docs/versioned_docs/version-2.23/reference/migration.md +++ b/docs/versioned_docs/version-2.23/reference/migration.md @@ -3,6 +3,12 @@ This document describes breaking changes and migrations between Constellation releases. Use [`constellation config migrate`](./cli.md#constellation-config-migrate) to automatically update an old config file to a new format. +## Migrations to v2.23.0 + +### GCP + +GCP will require the additional permission `compute.forwardingRules.list`. Please update your IAM roles using `constellation iam upgrade apply`. + ## Migrations to v2.19.1 ### Azure From 7eff1c3b97abcf6d7961001e4b9dab908fb14991 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 7 May 2025 15:45:36 +0200 Subject: [PATCH 264/311] deps: update dependency kubernetes-sigs/cri-tools to v1.33.0 (#3800) * deps: update dependency kubernetes-sigs/cri-tools to v1.33.0 * deps: tidy all modules --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: edgelessci --- internal/versions/versions.go | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/internal/versions/versions.go b/internal/versions/versions.go index 0e82917bf..5ef41bf91 100644 --- a/internal/versions/versions.go +++ b/internal/versions/versions.go @@ -207,8 +207,8 @@ var VersionConfigs = map[ValidK8sVersion]KubernetesVersion{ Extract: true, }, { - Url: "https://github.com/kubernetes-sigs/cri-tools/releases/download/v1.32.0/crictl-v1.32.0-linux-amd64.tar.gz", // renovate:crictl-release - Hash: "sha256:f050b71d3a73a91a4e0990b90143ed04dcd100cc66f953736fcb6a2730e283c4", + Url: "https://github.com/kubernetes-sigs/cri-tools/releases/download/v1.33.0/crictl-v1.33.0-linux-amd64.tar.gz", // renovate:crictl-release + Hash: "sha256:8307399e714626e69d1213a4cd18c8dec3d0201ecdac009b1802115df8973f0f", InstallPath: constants.BinDir, Extract: true, }, @@ -274,8 +274,8 @@ var VersionConfigs = map[ValidK8sVersion]KubernetesVersion{ Extract: true, }, { - Url: "https://github.com/kubernetes-sigs/cri-tools/releases/download/v1.32.0/crictl-v1.32.0-linux-amd64.tar.gz", // renovate:crictl-release - Hash: "sha256:f050b71d3a73a91a4e0990b90143ed04dcd100cc66f953736fcb6a2730e283c4", + Url: "https://github.com/kubernetes-sigs/cri-tools/releases/download/v1.33.0/crictl-v1.33.0-linux-amd64.tar.gz", // renovate:crictl-release + Hash: "sha256:8307399e714626e69d1213a4cd18c8dec3d0201ecdac009b1802115df8973f0f", InstallPath: constants.BinDir, Extract: true, }, @@ -341,8 +341,8 @@ var VersionConfigs = map[ValidK8sVersion]KubernetesVersion{ Extract: true, }, { - Url: "https://github.com/kubernetes-sigs/cri-tools/releases/download/v1.32.0/crictl-v1.32.0-linux-amd64.tar.gz", // renovate:crictl-release - Hash: "sha256:f050b71d3a73a91a4e0990b90143ed04dcd100cc66f953736fcb6a2730e283c4", + Url: "https://github.com/kubernetes-sigs/cri-tools/releases/download/v1.33.0/crictl-v1.33.0-linux-amd64.tar.gz", // renovate:crictl-release + Hash: "sha256:8307399e714626e69d1213a4cd18c8dec3d0201ecdac009b1802115df8973f0f", InstallPath: constants.BinDir, Extract: true, }, From cda8d7c9439e33019e9ba0d2f5f2af206e8cdafb Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 8 May 2025 09:08:51 +0200 Subject: [PATCH 265/311] deps: update Go dependencies (#3818) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- go.mod | 14 +++++++------- go.sum | 28 ++++++++++++++-------------- 2 files changed, 21 insertions(+), 21 deletions(-) diff --git a/go.mod b/go.mod index 5fd2256dd..df0b12174 100644 --- a/go.mod +++ b/go.mod @@ -33,7 +33,7 @@ require ( cloud.google.com/go/kms v1.21.2 cloud.google.com/go/secretmanager v1.14.7 cloud.google.com/go/storage v1.53.0 - dario.cat/mergo v1.0.1 + dario.cat/mergo v1.0.2 github.com/Azure/azure-sdk-for-go v68.0.0+incompatible github.com/Azure/azure-sdk-for-go/sdk/azcore v1.18.0 github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.9.0 @@ -50,7 +50,7 @@ require ( github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.75 github.com/aws/aws-sdk-go-v2/service/autoscaling v1.52.4 github.com/aws/aws-sdk-go-v2/service/cloudfront v1.46.0 - github.com/aws/aws-sdk-go-v2/service/ec2 v1.214.0 + github.com/aws/aws-sdk-go-v2/service/ec2 v1.216.0 github.com/aws/aws-sdk-go-v2/service/elasticloadbalancingv2 v1.45.2 github.com/aws/aws-sdk-go-v2/service/resourcegroupstaggingapi v1.26.3 github.com/aws/aws-sdk-go-v2/service/s3 v1.79.3 @@ -75,7 +75,7 @@ require ( github.com/google/uuid v1.6.0 github.com/googleapis/gax-go/v2 v2.14.1 github.com/gophercloud/gophercloud/v2 v2.7.0 - github.com/gophercloud/utils/v2 v2.0.0-20250505075637-4ac8ddd08bb6 + github.com/gophercloud/utils/v2 v2.0.0-20250506092640-af27464b6166 github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.3.2 github.com/hashicorp/go-kms-wrapping/v2 v2.0.18 github.com/hashicorp/go-kms-wrapping/wrappers/awskms/v2 v2.0.11 @@ -103,7 +103,7 @@ require ( github.com/samber/slog-multi v1.4.0 github.com/schollz/progressbar/v3 v3.18.0 github.com/secure-systems-lab/go-securesystemslib v0.9.0 - github.com/siderolabs/talos/pkg/machinery v1.10.0 + github.com/siderolabs/talos/pkg/machinery v1.10.1 github.com/sigstore/rekor v1.3.10 github.com/sigstore/sigstore v1.9.4 github.com/spf13/afero v1.14.0 @@ -122,7 +122,7 @@ require ( golang.org/x/sys v0.33.0 golang.org/x/text v0.25.0 golang.org/x/tools v0.33.0 - google.golang.org/api v0.231.0 + google.golang.org/api v0.232.0 google.golang.org/grpc v1.72.0 google.golang.org/protobuf v1.36.6 gopkg.in/yaml.v3 v3.0.1 @@ -376,7 +376,7 @@ require ( go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.27.0 // indirect golang.org/x/net v0.40.0 // indirect - golang.org/x/oauth2 v0.29.0 // indirect + golang.org/x/oauth2 v0.30.0 // indirect golang.org/x/sync v0.14.0 // indirect golang.org/x/term v0.32.0 // indirect golang.org/x/time v0.11.0 // indirect @@ -384,7 +384,7 @@ require ( google.golang.org/appengine v1.6.8 // indirect google.golang.org/genproto v0.0.0-20250303144028-a0af3efb3deb // indirect google.golang.org/genproto/googleapis/api v0.0.0-20250425173222-7b384671a197 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20250425173222-7b384671a197 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20250428153025-10db94c68c34 // indirect gopkg.in/evanphx/json-patch.v4 v4.12.0 // indirect gopkg.in/inf.v0 v0.9.1 // indirect k8s.io/cli-runtime v0.32.2 // indirect diff --git a/go.sum b/go.sum index 3cd201b26..c309f94c1 100644 --- a/go.sum +++ b/go.sum @@ -26,8 +26,8 @@ cloud.google.com/go/storage v1.53.0 h1:gg0ERZwL17pJ+Cz3cD2qS60w1WMDnwcm5YPAIQBHU cloud.google.com/go/storage v1.53.0/go.mod h1:7/eO2a/srr9ImZW9k5uufcNahT2+fPb8w5it1i5boaA= cloud.google.com/go/trace v1.11.3 h1:c+I4YFjxRQjvAhRmSsmjpASUKq88chOX854ied0K/pE= cloud.google.com/go/trace v1.11.3/go.mod h1:pt7zCYiDSQjC9Y2oqCsh9jF4GStB/hmjrYLsxRR27q8= -dario.cat/mergo v1.0.1 h1:Ra4+bf83h2ztPIQYNP99R6m+Y7KfnARDfID+a+vLl4s= -dario.cat/mergo v1.0.1/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk= +dario.cat/mergo v1.0.2 h1:85+piFYR1tMbRrLcDwR18y4UKJ3aH1Tbzi24VRW1TK8= +dario.cat/mergo v1.0.2/go.mod h1:E/hbnu0NxMFBjpMIE34DRGLWqDy0g5FuKDhCb31ngxA= filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA= filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4= github.com/AdaLogics/go-fuzz-headers v0.0.0-20230811130428-ced1acdcaa24 h1:bvDV9vkmnHYOMsOr4WLk+Vo07yKIzd94sVoIqshQ4bU= @@ -160,8 +160,8 @@ github.com/aws/aws-sdk-go-v2/service/autoscaling v1.52.4 h1:vzLD0FyNU4uxf2QE5UDG github.com/aws/aws-sdk-go-v2/service/autoscaling v1.52.4/go.mod h1:CDqMoc3KRdZJ8qziW96J35lKH01Wq3B2aihtHj2JbRs= github.com/aws/aws-sdk-go-v2/service/cloudfront v1.46.0 h1:wdm9Pjye5PSQ+ELMHXOh7SQhiXLDk2iONZ+fDmISi28= github.com/aws/aws-sdk-go-v2/service/cloudfront v1.46.0/go.mod h1:FIBJ48TS+qJb+Ne4qJ+0NeIhtPTVXItXooTeNeVI4Po= -github.com/aws/aws-sdk-go-v2/service/ec2 v1.214.0 h1:cFR69no3REgjwiGNHhSeB8IZ1sGrLAoLqHACMNuN+j4= -github.com/aws/aws-sdk-go-v2/service/ec2 v1.214.0/go.mod h1:ouvGEfHbLaIlWwpDpOVWPWR+YwO0HDv3vm5tYLq8ImY= +github.com/aws/aws-sdk-go-v2/service/ec2 v1.216.0 h1:VOcXyD/1CE7X9ApGWxLnPOabNLJL7KAjtZK56cXd9mg= +github.com/aws/aws-sdk-go-v2/service/ec2 v1.216.0/go.mod h1:ouvGEfHbLaIlWwpDpOVWPWR+YwO0HDv3vm5tYLq8ImY= github.com/aws/aws-sdk-go-v2/service/elasticloadbalancingv2 v1.45.2 h1:vX70Z4lNSr7XsioU0uJq5yvxgI50sB66MvD+V/3buS4= github.com/aws/aws-sdk-go-v2/service/elasticloadbalancingv2 v1.45.2/go.mod h1:xnCC3vFBfOKpU6PcsCKL2ktgBTZfOwTGxj6V8/X3IS4= github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.3 h1:eAh2A4b5IzM/lum78bZ590jy36+d/aFLgKF/4Vd1xPE= @@ -464,8 +464,8 @@ github.com/googleapis/gax-go/v2 v2.14.1 h1:hb0FFeiPaQskmvakKu5EbCbpntQn48jyHuvrk github.com/googleapis/gax-go/v2 v2.14.1/go.mod h1:Hb/NubMaVM88SrNkvl8X/o8XWwDJEPqouaLeN2IUxoA= github.com/gophercloud/gophercloud/v2 v2.7.0 h1:o0m4kgVcPgHlcXiWAjoVxGd8QCmvM5VU+YM71pFbn0E= github.com/gophercloud/gophercloud/v2 v2.7.0/go.mod h1:Ki/ILhYZr/5EPebrPL9Ej+tUg4lqx71/YH2JWVeU+Qk= -github.com/gophercloud/utils/v2 v2.0.0-20250505075637-4ac8ddd08bb6 h1:Nfhbr8km42sm1hM30Q1H38TL0mmBYDnzQG9dF4lxk5Y= -github.com/gophercloud/utils/v2 v2.0.0-20250505075637-4ac8ddd08bb6/go.mod h1:fVKgSRN8s0z1GWqzs5lEY/ISuKJM/Rzce6OwPm2PDbI= +github.com/gophercloud/utils/v2 v2.0.0-20250506092640-af27464b6166 h1:U82pil2tMV/BkeWmy3eKT9mTmodSfwOw+Czl/s5eBrw= +github.com/gophercloud/utils/v2 v2.0.0-20250506092640-af27464b6166/go.mod h1:WypkO28BNmRXS8EPyW6I58L3qrBUy3w60schxwx7ZVc= github.com/gorilla/handlers v1.5.1 h1:9lRY6j8DEeeBT10CvO9hGW0gmky0BprnvDI5vfhUHH4= github.com/gorilla/handlers v1.5.1/go.mod h1:t8XrUpc4KVXb7HGyJ4/cEnwQiaxrX/hz1Zv/4g96P1Q= github.com/gorilla/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY= @@ -769,8 +769,8 @@ github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 h1:n661drycOFuPLCN github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3/go.mod h1:A0bzQcvG0E7Rwjx0REVgAGH58e96+X0MeOfepqsbeW4= github.com/shopspring/decimal v1.4.0 h1:bxl37RwXBklmTi0C79JfXCEBD1cqqHt0bbgBAGFp81k= github.com/shopspring/decimal v1.4.0/go.mod h1:gawqmDU56v4yIKSwfBSFip1HdCCXN8/+DMd9qYNcwME= -github.com/siderolabs/talos/pkg/machinery v1.10.0 h1:XMwL9OBULHfGWcwMwPS9BhxPD1r/lcySbZspDLcX064= -github.com/siderolabs/talos/pkg/machinery v1.10.0/go.mod h1:MVJs1hsKm7N2GkQVeByjoDoLJmU/VhQO0cLJRZPxlZk= +github.com/siderolabs/talos/pkg/machinery v1.10.1 h1:iMG+I06ppz0Bj2Ex8NCSUBsbB6rK/gW9nCF01/TM2tU= +github.com/siderolabs/talos/pkg/machinery v1.10.1/go.mod h1:MVJs1hsKm7N2GkQVeByjoDoLJmU/VhQO0cLJRZPxlZk= github.com/sigstore/protobuf-specs v0.4.1 h1:5SsMqZbdkcO/DNHudaxuCUEjj6x29tS2Xby1BxGU7Zc= github.com/sigstore/protobuf-specs v0.4.1/go.mod h1:+gXR+38nIa2oEupqDdzg4qSBT0Os+sP7oYv6alWewWc= github.com/sigstore/rekor v1.3.10 h1:/mSvRo4MZ/59ECIlARhyykAlQlkmeAQpvBPlmJtZOCU= @@ -938,8 +938,8 @@ golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= golang.org/x/net v0.40.0 h1:79Xs7wF06Gbdcg4kdCCIQArK11Z1hr5POQ6+fIYHNuY= golang.org/x/net v0.40.0/go.mod h1:y0hY0exeL2Pku80/zKK7tpntoX23cqL3Oa6njdgRtds= -golang.org/x/oauth2 v0.29.0 h1:WdYw2tdTK1S8olAzWHdgeqfy+Mtm9XNhv/xJsY65d98= -golang.org/x/oauth2 v0.29.0/go.mod h1:onh5ek6nERTohokkhCD/y2cV4Do3fxFHFuAejCkRWT8= +golang.org/x/oauth2 v0.30.0 h1:dnDm7JmhM45NNpd8FDDeLhK6FwqbOf4MLCM9zb1BOHI= +golang.org/x/oauth2 v0.30.0/go.mod h1:B++QgG3ZKulg6sRPGD/mqlHQs5rB3Ml9erfeDY7xKlU= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -1012,8 +1012,8 @@ golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8T golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= gomodules.xyz/jsonpatch/v2 v2.4.0 h1:Ci3iUJyx9UeRx7CeFN8ARgGbkESwJK+KB9lLcWxY/Zw= gomodules.xyz/jsonpatch/v2 v2.4.0/go.mod h1:AH3dM2RI6uoBZxn3LVrfvJ3E0/9dG4cSrbuBJT4moAY= -google.golang.org/api v0.231.0 h1:LbUD5FUl0C4qwia2bjXhCMH65yz1MLPzA/0OYEsYY7Q= -google.golang.org/api v0.231.0/go.mod h1:H52180fPI/QQlUc0F4xWfGZILdv09GCWKt2bcsn164A= +google.golang.org/api v0.232.0 h1:qGnmaIMf7KcuwHOlF3mERVzChloDYwRfOJOrHt8YC3I= +google.golang.org/api v0.232.0/go.mod h1:p9QCfBWZk1IJETUdbTKloR5ToFdKbYh2fkjsUL6vNoY= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.6.8 h1:IhEN5q69dyKagZPYMSdIjS2HqprW324FRQZJcGqPAsM= google.golang.org/appengine v1.6.8/go.mod h1:1jJ3jBArFh5pcgW8gCtRJnepW8FzD1V44FJffLiz/Ds= @@ -1021,8 +1021,8 @@ google.golang.org/genproto v0.0.0-20250303144028-a0af3efb3deb h1:ITgPrl429bc6+2Z google.golang.org/genproto v0.0.0-20250303144028-a0af3efb3deb/go.mod h1:sAo5UzpjUwgFBCzupwhcLcxHVDK7vG5IqI30YnwX2eE= google.golang.org/genproto/googleapis/api v0.0.0-20250425173222-7b384671a197 h1:9DuBh3k1jUho2DHdxH+kbJwthIAq02vGvZNrD2ggF+Y= google.golang.org/genproto/googleapis/api v0.0.0-20250425173222-7b384671a197/go.mod h1:Cd8IzgPo5Akum2c9R6FsXNaZbH3Jpa2gpHlW89FqlyQ= -google.golang.org/genproto/googleapis/rpc v0.0.0-20250425173222-7b384671a197 h1:29cjnHVylHwTzH66WfFZqgSQgnxzvWE+jvBwpZCLRxY= -google.golang.org/genproto/googleapis/rpc v0.0.0-20250425173222-7b384671a197/go.mod h1:qQ0YXyHHx3XkvlzUtpXDkS29lDSafHMZBAZDc03LQ3A= +google.golang.org/genproto/googleapis/rpc v0.0.0-20250428153025-10db94c68c34 h1:h6p3mQqrmT1XkHVTfzLdNz1u7IhINeZkz67/xTbOuWs= +google.golang.org/genproto/googleapis/rpc v0.0.0-20250428153025-10db94c68c34/go.mod h1:qQ0YXyHHx3XkvlzUtpXDkS29lDSafHMZBAZDc03LQ3A= google.golang.org/grpc v1.72.0 h1:S7UkcVa60b5AAQTaO6ZKamFp1zMZSU0fGDK2WZLbBnM= google.golang.org/grpc v1.72.0/go.mod h1:wH5Aktxcg25y1I3w7H69nHfXdOG3UiadoBtjh3izSDM= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= From 8ec3bb86cf981f9215b8bf539fa9acf01ac175d0 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 8 May 2025 14:04:03 +0200 Subject: [PATCH 266/311] deps: update bazel (core) (#3812) * deps: update bazel (core) * deps: tidy all modules * deps: tidy all modules --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: edgelessci --- MODULE.bazel | 2 +- MODULE.bazel.lock | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/MODULE.bazel b/MODULE.bazel index 554604683..46a6e9d71 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -8,7 +8,7 @@ use_repo(bazel_lib, "jq_toolchains") use_repo(bazel_lib, "yq_toolchains") bazel_dep(name = "bazel_skylib", version = "1.7.1") -bazel_dep(name = "gazelle", version = "0.42.0") +bazel_dep(name = "gazelle", version = "0.43.0") bazel_dep(name = "hermetic_cc_toolchain", version = "3.2.0") bazel_dep(name = "rules_cc", version = "0.1.1") bazel_dep(name = "rules_go", version = "0.54.0", repo_name = "io_bazel_rules_go") diff --git a/MODULE.bazel.lock b/MODULE.bazel.lock index b0c428365..eea45219b 100644 --- a/MODULE.bazel.lock +++ b/MODULE.bazel.lock @@ -47,8 +47,8 @@ "https://bcr.bazel.build/modules/gazelle/0.33.0/MODULE.bazel": "a13a0f279b462b784fb8dd52a4074526c4a2afe70e114c7d09066097a46b3350", "https://bcr.bazel.build/modules/gazelle/0.34.0/MODULE.bazel": "abdd8ce4d70978933209db92e436deb3a8b737859e9354fb5fd11fb5c2004c8a", "https://bcr.bazel.build/modules/gazelle/0.36.0/MODULE.bazel": "e375d5d6e9a6ca59b0cb38b0540bc9a05b6aa926d322f2de268ad267a2ee74c0", - "https://bcr.bazel.build/modules/gazelle/0.42.0/MODULE.bazel": "fa140a7c019f3a22779ba7c6132ffff9d2d10a51dba2f3304dee61523d11fef4", - "https://bcr.bazel.build/modules/gazelle/0.42.0/source.json": "eb6f7b0cb76c52d2679164910a01fa6ddcee409e6a7fee06e602ef259f65165c", + "https://bcr.bazel.build/modules/gazelle/0.43.0/MODULE.bazel": "846e1fe396eefc0f9ddad2b33e9bd364dd993fc2f42a88e31590fe0b0eefa3f0", + "https://bcr.bazel.build/modules/gazelle/0.43.0/source.json": "021a77f6625906d9d176e2fa351175e842622a5d45989312f2ad4924aab72df6", "https://bcr.bazel.build/modules/google_benchmark/1.8.2/MODULE.bazel": "a70cf1bba851000ba93b58ae2f6d76490a9feb74192e57ab8e8ff13c34ec50cb", "https://bcr.bazel.build/modules/googletest/1.11.0/MODULE.bazel": "3a83f095183f66345ca86aa13c58b59f9f94a2f81999c093d4eeaa2d262d12f4", "https://bcr.bazel.build/modules/googletest/1.14.0.bcr.1/MODULE.bazel": "22c31a561553727960057361aa33bf20fb2e98584bc4fec007906e27053f80c6", From f66be95f905ee8adaa7b6bd2fb2c1f507559e50f Mon Sep 17 00:00:00 2001 From: edgelessci <71088502+edgelessci@users.noreply.github.com> Date: Fri, 9 May 2025 08:17:45 +0200 Subject: [PATCH 267/311] image: update measurements and image version (#3821) Co-authored-by: edgelessci --- .../measurements/measurements_enterprise.go | 16 ++++++++-------- internal/config/image_enterprise.go | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/internal/attestation/measurements/measurements_enterprise.go b/internal/attestation/measurements/measurements_enterprise.go index 176beec2e..8d2794461 100644 --- a/internal/attestation/measurements/measurements_enterprise.go +++ b/internal/attestation/measurements/measurements_enterprise.go @@ -19,14 +19,14 @@ package measurements // revive:disable:var-naming var ( - aws_AWSNitroTPM = M{0: {Expected: []byte{0x73, 0x7f, 0x76, 0x7a, 0x12, 0xf5, 0x4e, 0x70, 0xee, 0xcb, 0xc8, 0x68, 0x40, 0x11, 0x32, 0x3a, 0xe2, 0xfe, 0x2d, 0xd9, 0xf9, 0x07, 0x85, 0x57, 0x79, 0x69, 0xd7, 0xa2, 0x01, 0x3e, 0x8c, 0x12}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x35, 0x05, 0x54, 0xd6, 0x72, 0x5c, 0x06, 0x2e, 0xc0, 0xf6, 0xee, 0xc7, 0xc5, 0xd4, 0xec, 0x05, 0x71, 0x35, 0xc6, 0x33, 0x10, 0x97, 0x62, 0x51, 0xd3, 0x4d, 0xcc, 0xa8, 0xd6, 0x64, 0xe6, 0x75}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x2c, 0x19, 0x1c, 0x1d, 0x3f, 0xad, 0x03, 0x22, 0xd2, 0x21, 0x82, 0x63, 0x1a, 0xb8, 0x18, 0x0d, 0x65, 0x36, 0x3e, 0xa3, 0x62, 0x3c, 0x9b, 0xd1, 0x4f, 0xe7, 0xc1, 0xfd, 0x96, 0x61, 0x40, 0x44}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xb1, 0x3e, 0xb9, 0xc6, 0xa6, 0x4d, 0x0b, 0xe3, 0xe1, 0x50, 0x15, 0xdf, 0x31, 0xf5, 0x55, 0x6b, 0xb8, 0x4e, 0x72, 0xf6, 0xde, 0x30, 0x37, 0xcf, 0x9b, 0x5f, 0x32, 0x63, 0x74, 0xb9, 0xb8, 0xff}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - aws_AWSSEVSNP = M{0: {Expected: []byte{0xd6, 0xdf, 0x85, 0x53, 0x58, 0xf5, 0xb1, 0x0f, 0x06, 0xf0, 0xfa, 0xb3, 0xf4, 0x08, 0xad, 0x26, 0xcd, 0x16, 0x5a, 0x29, 0x49, 0xba, 0xd6, 0x9e, 0x2c, 0xc7, 0x56, 0x92, 0x52, 0x9e, 0x66, 0x2a}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x9a, 0x47, 0x02, 0xda, 0x5a, 0x4d, 0xe5, 0x97, 0x90, 0x95, 0x54, 0x9d, 0x17, 0x97, 0xb0, 0x85, 0xd2, 0x7a, 0xb9, 0xef, 0x17, 0xc8, 0xbd, 0x31, 0x09, 0xad, 0x67, 0x22, 0x57, 0x8e, 0xa0, 0x56}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xa1, 0x53, 0x84, 0x07, 0x39, 0x13, 0x5a, 0x4d, 0xe8, 0x95, 0x24, 0x67, 0x33, 0x2c, 0x4d, 0xd4, 0x3c, 0x00, 0x9e, 0x67, 0x07, 0xaa, 0xd4, 0xc1, 0x1b, 0xc9, 0xfe, 0xdb, 0x99, 0x61, 0x03, 0x23}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xb0, 0x7f, 0xe5, 0x10, 0x0e, 0xd3, 0x15, 0x94, 0x2d, 0xe6, 0x24, 0x15, 0x69, 0x49, 0xb2, 0x0c, 0xc1, 0x22, 0x43, 0x3f, 0xe2, 0xea, 0x8d, 0x60, 0xd0, 0x63, 0xbf, 0x2e, 0x70, 0x2b, 0xbc, 0x54}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - azure_AzureSEVSNP = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x32, 0xc8, 0x19, 0x7b, 0xf9, 0xcb, 0x9e, 0xb1, 0x6c, 0x94, 0x7c, 0xaf, 0xf8, 0x35, 0xeb, 0xe6, 0x62, 0x75, 0x67, 0x95, 0x92, 0x0e, 0x7b, 0x1c, 0x61, 0x9f, 0xbe, 0x98, 0xed, 0x04, 0x06, 0x99}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x32, 0xe7, 0x17, 0xc2, 0xa9, 0x67, 0x24, 0x66, 0xf8, 0xe9, 0x43, 0xfc, 0x40, 0x66, 0x62, 0xd1, 0xa1, 0xf1, 0x1d, 0xc4, 0xe7, 0x2f, 0x8e, 0x21, 0x9a, 0x5f, 0x49, 0xae, 0x25, 0xbd, 0x67, 0x6e}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xc0, 0x57, 0x6d, 0x2e, 0x92, 0xc3, 0x8e, 0xb8, 0xee, 0x2a, 0x92, 0x3a, 0x04, 0x05, 0x2e, 0x34, 0x33, 0xda, 0xf2, 0x9d, 0x9d, 0x14, 0x33, 0x14, 0x36, 0x48, 0xbf, 0x83, 0xb5, 0xd2, 0x44, 0xaf}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - azure_AzureTDX = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x9a, 0xbe, 0x97, 0xa3, 0x44, 0xda, 0x59, 0x42, 0xf4, 0xda, 0x68, 0xf6, 0x2e, 0xeb, 0xaf, 0x98, 0x86, 0x99, 0x85, 0x69, 0xf1, 0x41, 0x4e, 0xf0, 0x0f, 0xa3, 0x6f, 0x9d, 0x2e, 0x55, 0x3a, 0xd4}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x0b, 0x29, 0xaa, 0x2b, 0x77, 0x95, 0x16, 0x1f, 0x74, 0xa0, 0xe1, 0x88, 0xb3, 0xcc, 0x16, 0xb8, 0xbc, 0x76, 0x62, 0xe1, 0xfa, 0x8d, 0xf2, 0xd5, 0x7e, 0xec, 0xfd, 0xf1, 0x73, 0x19, 0x45, 0x61}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x8b, 0xa8, 0xcb, 0x41, 0x74, 0x43, 0xf9, 0x93, 0x05, 0xa4, 0x6a, 0x95, 0x90, 0xf9, 0xd3, 0xc8, 0xb6, 0x5e, 0x4b, 0x09, 0x3c, 0x38, 0x47, 0x82, 0x19, 0x19, 0x9f, 0x11, 0x31, 0x43, 0x46, 0x2d}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + aws_AWSNitroTPM = M{0: {Expected: []byte{0x73, 0x7f, 0x76, 0x7a, 0x12, 0xf5, 0x4e, 0x70, 0xee, 0xcb, 0xc8, 0x68, 0x40, 0x11, 0x32, 0x3a, 0xe2, 0xfe, 0x2d, 0xd9, 0xf9, 0x07, 0x85, 0x57, 0x79, 0x69, 0xd7, 0xa2, 0x01, 0x3e, 0x8c, 0x12}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x54, 0xdc, 0x2c, 0x86, 0xdc, 0x84, 0xaf, 0x88, 0xa8, 0xbd, 0x1b, 0x93, 0xd7, 0xd9, 0x10, 0xa0, 0x36, 0xca, 0xd9, 0x96, 0x9d, 0x2a, 0xb8, 0x7f, 0x27, 0xfa, 0x32, 0x83, 0xb9, 0xd9, 0x61, 0x5c}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x6f, 0x76, 0xbc, 0x73, 0xfe, 0x1e, 0x31, 0xa8, 0x19, 0x86, 0x01, 0x59, 0xde, 0x9c, 0xe7, 0xfc, 0xe9, 0x86, 0x89, 0x91, 0xb6, 0xe1, 0xb0, 0xcc, 0xc8, 0x69, 0xd0, 0x29, 0xb7, 0x04, 0x56, 0x00}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x7d, 0x2a, 0xfb, 0x0e, 0xf6, 0xe9, 0x9b, 0xf9, 0xc3, 0xe4, 0x3e, 0x41, 0xdd, 0xf2, 0xd2, 0xee, 0x4e, 0xff, 0x40, 0x7b, 0x2f, 0xf1, 0x9e, 0x22, 0xa2, 0xc4, 0xcd, 0x0c, 0xd6, 0xa3, 0x08, 0x36}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + aws_AWSSEVSNP = M{0: {Expected: []byte{0xd6, 0xdf, 0x85, 0x53, 0x58, 0xf5, 0xb1, 0x0f, 0x06, 0xf0, 0xfa, 0xb3, 0xf4, 0x08, 0xad, 0x26, 0xcd, 0x16, 0x5a, 0x29, 0x49, 0xba, 0xd6, 0x9e, 0x2c, 0xc7, 0x56, 0x92, 0x52, 0x9e, 0x66, 0x2a}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x73, 0x9a, 0xb2, 0xb0, 0xb0, 0x19, 0xc0, 0x73, 0x52, 0x20, 0x1a, 0x36, 0x0d, 0x9c, 0xf4, 0xd1, 0x4d, 0x4e, 0x3a, 0x19, 0x2e, 0xd3, 0xf0, 0x9e, 0x3f, 0x85, 0x69, 0x33, 0xc9, 0xe7, 0xad, 0x24}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x5e, 0x98, 0x21, 0x3f, 0xff, 0x32, 0x6b, 0x67, 0x85, 0x7a, 0x92, 0x8b, 0xe5, 0xb8, 0xc1, 0xf6, 0x8b, 0xe0, 0x9b, 0x9b, 0xb0, 0x6c, 0xed, 0x6c, 0x5e, 0x24, 0x2a, 0x11, 0xa6, 0xca, 0xf5, 0x3e}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x5b, 0x2b, 0x8c, 0x45, 0xe0, 0xae, 0x14, 0xb2, 0xd7, 0x70, 0x66, 0xa7, 0x00, 0xb1, 0x2c, 0x33, 0x2c, 0x59, 0x8d, 0x83, 0x12, 0x15, 0x85, 0xc3, 0xc2, 0xb1, 0xd6, 0xe1, 0x82, 0x88, 0x00, 0xf2}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + azure_AzureSEVSNP = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x7f, 0xe5, 0xbe, 0xbc, 0x84, 0xdf, 0xb6, 0xcc, 0xac, 0x88, 0x2e, 0x0d, 0x94, 0x05, 0xb7, 0x0d, 0x38, 0x3a, 0x2f, 0x76, 0x90, 0x5d, 0x55, 0x09, 0xb1, 0x35, 0x17, 0x38, 0xcb, 0xb5, 0x05, 0xf5}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x08, 0xa8, 0xea, 0x18, 0xc8, 0xe4, 0x52, 0x14, 0x6d, 0xb7, 0xf1, 0xb3, 0x79, 0x4b, 0x9a, 0xb9, 0x52, 0xf8, 0xf2, 0x93, 0x03, 0xc1, 0x33, 0xf7, 0xb3, 0xf9, 0x00, 0xcf, 0xc6, 0x74, 0x2f, 0x26}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x3e, 0x4a, 0x74, 0x99, 0x78, 0xc6, 0x53, 0xd8, 0x58, 0x26, 0x40, 0x40, 0x0f, 0xf0, 0x57, 0xeb, 0x6d, 0xd2, 0xeb, 0x96, 0x6e, 0x89, 0x13, 0x5b, 0xc0, 0x00, 0xfc, 0x26, 0x65, 0x1f, 0x64, 0x34}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + azure_AzureTDX = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x26, 0xa4, 0x8c, 0xc8, 0x8a, 0x93, 0x60, 0x7d, 0x8f, 0x68, 0x07, 0xf7, 0x56, 0xca, 0x69, 0xce, 0x18, 0x17, 0x23, 0x3e, 0x33, 0x72, 0x58, 0x37, 0x5a, 0x9c, 0x63, 0x0b, 0x8e, 0x32, 0xc2, 0xe9}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x09, 0xb4, 0xbd, 0x8d, 0x08, 0x77, 0x1a, 0xc7, 0x84, 0x83, 0x8f, 0x36, 0xe8, 0x9f, 0x87, 0x57, 0xad, 0xf7, 0x52, 0x1e, 0xe2, 0x97, 0x45, 0x60, 0xbd, 0x5a, 0x00, 0xd8, 0xf4, 0x94, 0x9f, 0x08}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x21, 0x6b, 0xbc, 0x85, 0x53, 0x38, 0x75, 0xea, 0xef, 0x5f, 0xb0, 0xd6, 0x6a, 0x8a, 0xd0, 0x36, 0xe2, 0x76, 0xe1, 0xfb, 0xc1, 0xed, 0x12, 0xc2, 0xe5, 0xa1, 0x8a, 0xa8, 0x4f, 0x99, 0x4a, 0x74}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} azure_AzureTrustedLaunch M - gcp_GCPSEVES = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xd5, 0xcf, 0xdd, 0x15, 0x80, 0xe9, 0xa0, 0x85, 0x0c, 0xae, 0x8d, 0x65, 0x78, 0x9d, 0x61, 0xe4, 0xdd, 0x3f, 0xba, 0x16, 0x99, 0x9c, 0x7f, 0x42, 0x94, 0xd3, 0x6b, 0x4b, 0x65, 0xf1, 0xc2, 0x3d}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x1f, 0xd1, 0x45, 0xeb, 0x90, 0xfe, 0x3a, 0x84, 0x8c, 0x80, 0x6a, 0xa9, 0x15, 0x87, 0x87, 0x4e, 0xd1, 0x07, 0xef, 0xfa, 0x9e, 0x85, 0xca, 0x00, 0xd0, 0x2f, 0x82, 0x3c, 0x1b, 0x2f, 0xd9, 0x82}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x4b, 0x1d, 0x7d, 0x97, 0xda, 0xad, 0x3a, 0x65, 0x3f, 0x22, 0x6f, 0x20, 0x7b, 0x84, 0x53, 0xf6, 0x2c, 0x74, 0x84, 0x6e, 0xaa, 0x08, 0xd9, 0x90, 0x02, 0xcc, 0x71, 0xc4, 0x12, 0xa6, 0x04, 0x07}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - gcp_GCPSEVSNP = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xd9, 0x65, 0x09, 0xa5, 0x13, 0xea, 0xdb, 0x13, 0xbf, 0x1e, 0x5d, 0xaa, 0x50, 0x19, 0x79, 0x8d, 0x95, 0x34, 0x2b, 0xe6, 0x1d, 0x49, 0x79, 0xb9, 0xda, 0x6f, 0xe8, 0x55, 0x92, 0x91, 0x4e, 0xc1}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x3d, 0x28, 0x5d, 0xcf, 0x44, 0xb0, 0x65, 0xc9, 0xf5, 0xc6, 0x2d, 0xdf, 0x1c, 0x22, 0x9c, 0xd0, 0x3a, 0x46, 0x86, 0xb4, 0x78, 0x96, 0x07, 0x95, 0xb8, 0x80, 0xc6, 0xc5, 0xa7, 0x08, 0x81, 0x97}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x1c, 0xe1, 0x9e, 0x22, 0x2f, 0x0d, 0x37, 0x58, 0x0a, 0x1b, 0xb5, 0xa4, 0xcf, 0x24, 0xd2, 0x69, 0xdc, 0xe9, 0x9d, 0x6e, 0x31, 0xad, 0xd8, 0x3a, 0x21, 0x0e, 0x9e, 0x7a, 0xca, 0x55, 0x28, 0x69}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - openstack_QEMUVTPM = M{4: {Expected: []byte{0xec, 0xa4, 0x27, 0x43, 0xda, 0x51, 0xa3, 0xce, 0x6d, 0x06, 0x71, 0x45, 0xc0, 0x56, 0xe2, 0x31, 0x7a, 0x18, 0x5c, 0x58, 0x1f, 0x20, 0x25, 0xe8, 0x2d, 0xa5, 0xab, 0xaf, 0xec, 0x57, 0x98, 0xee}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xaf, 0x85, 0xe3, 0xb4, 0xae, 0xe4, 0x33, 0x1a, 0xe7, 0x67, 0xbd, 0x4e, 0xc3, 0xd8, 0x2c, 0x26, 0xf4, 0xfa, 0x84, 0x9a, 0x2d, 0xe3, 0xfb, 0x52, 0xc1, 0xf1, 0x55, 0xc2, 0x60, 0xd7, 0x15, 0x7f}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xa5, 0x47, 0x7b, 0xd8, 0xb1, 0x42, 0x89, 0xc0, 0x57, 0xca, 0x0e, 0xd3, 0x22, 0x04, 0x69, 0x4c, 0xf6, 0x80, 0xc0, 0xa5, 0x90, 0x85, 0x4a, 0x78, 0x5e, 0xd5, 0xf4, 0x57, 0x6e, 0x84, 0x5e, 0xd0}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + gcp_GCPSEVES = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x79, 0xfc, 0xe7, 0x97, 0xcf, 0xa7, 0x4e, 0xd1, 0x5e, 0x42, 0x00, 0x74, 0x28, 0x6c, 0x61, 0x78, 0x42, 0x99, 0x5a, 0x83, 0xd8, 0x33, 0x93, 0x9c, 0x56, 0x41, 0x8a, 0xba, 0xe1, 0xe0, 0xaf, 0x5d}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x66, 0x33, 0xe1, 0xc9, 0xb1, 0x75, 0x46, 0x6d, 0xed, 0xc1, 0x0e, 0xa0, 0x83, 0xdf, 0x93, 0x77, 0xb3, 0xe9, 0xc3, 0xa3, 0x54, 0x00, 0x33, 0xe2, 0x4b, 0x35, 0x48, 0x61, 0x25, 0x3c, 0x43, 0x1e}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xb0, 0x07, 0xb6, 0x7c, 0x2e, 0x81, 0xba, 0xf5, 0xb0, 0x04, 0x18, 0x9d, 0x08, 0xfa, 0xf0, 0x9b, 0xeb, 0xd9, 0x46, 0x59, 0x55, 0xa2, 0x1b, 0x2b, 0x30, 0x7d, 0xe5, 0x48, 0x50, 0x01, 0x94, 0x4b}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + gcp_GCPSEVSNP = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xc2, 0x77, 0x1b, 0x97, 0xbe, 0xf0, 0xe9, 0x7b, 0x63, 0x6f, 0x96, 0xad, 0x64, 0x93, 0x0e, 0x28, 0x2f, 0x3c, 0xce, 0x91, 0x6f, 0x3f, 0xae, 0x3d, 0xd6, 0xb8, 0xed, 0x21, 0xf7, 0x75, 0xd3, 0xd8}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x28, 0x3b, 0x0e, 0x0a, 0x94, 0x13, 0xfa, 0x09, 0x19, 0x02, 0x83, 0x01, 0x90, 0x02, 0xe9, 0xb9, 0x96, 0x15, 0x03, 0x65, 0x55, 0x93, 0xa7, 0x70, 0xe7, 0x62, 0xb9, 0x98, 0x66, 0x9f, 0x0a, 0xac}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xa4, 0xe4, 0x8e, 0x8e, 0xae, 0xd7, 0x8b, 0x1a, 0x40, 0x99, 0x1e, 0x77, 0x56, 0x80, 0x5d, 0xa7, 0x7f, 0xd5, 0x78, 0xcc, 0xec, 0xad, 0xa0, 0x04, 0xa0, 0x7a, 0xb3, 0x35, 0x78, 0xfd, 0x2b, 0x77}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + openstack_QEMUVTPM = M{4: {Expected: []byte{0xa8, 0x30, 0x65, 0xd3, 0xc2, 0xbf, 0x9c, 0x0c, 0x38, 0x62, 0xc9, 0xf6, 0x31, 0xa5, 0x51, 0xb8, 0xc9, 0x3f, 0x0a, 0x6f, 0x41, 0xa4, 0xec, 0xc2, 0x12, 0xf8, 0xc1, 0xb0, 0x1c, 0x74, 0x52, 0xd5}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x4f, 0xfe, 0xf9, 0xb3, 0x7e, 0xa8, 0x5a, 0xa2, 0x34, 0xab, 0x22, 0x04, 0x00, 0xc0, 0x31, 0xc2, 0xc3, 0xe0, 0xe9, 0xf1, 0xc4, 0x08, 0x67, 0x18, 0x96, 0x52, 0xb0, 0x16, 0x11, 0xd3, 0x68, 0x0f}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xca, 0x4b, 0x00, 0xcb, 0x85, 0xb7, 0x26, 0x31, 0x49, 0xc8, 0x7d, 0x5e, 0xd2, 0xaf, 0xcc, 0xe6, 0x8f, 0x10, 0x26, 0x90, 0x65, 0xde, 0x74, 0xcf, 0xc8, 0x04, 0x72, 0x00, 0x9d, 0xab, 0x68, 0x26}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} qemu_QEMUTDX M - qemu_QEMUVTPM = M{4: {Expected: []byte{0xa3, 0x56, 0x94, 0x45, 0x69, 0xab, 0x04, 0x94, 0x64, 0xc5, 0xaf, 0x83, 0xd4, 0x93, 0x7e, 0x36, 0x26, 0xf8, 0x75, 0x6d, 0x1b, 0xad, 0x82, 0x98, 0xaa, 0x7a, 0x0e, 0x9c, 0x36, 0x12, 0xe6, 0x4f}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xb7, 0x6e, 0x36, 0x14, 0x92, 0x5d, 0x87, 0x23, 0xa9, 0x83, 0x21, 0x07, 0xfc, 0x58, 0x86, 0x59, 0x7a, 0x26, 0xf8, 0x7f, 0xbd, 0x19, 0xd0, 0x4a, 0x3c, 0xfc, 0xc8, 0x90, 0x5a, 0x89, 0x60, 0x42}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xec, 0x93, 0x9c, 0x28, 0xa7, 0xfe, 0xbf, 0xb6, 0xfb, 0x21, 0x06, 0x36, 0x5a, 0x88, 0x82, 0x9d, 0x14, 0x61, 0x60, 0x93, 0x76, 0x2d, 0xd3, 0x11, 0x5b, 0xda, 0x08, 0x38, 0x64, 0x6a, 0x53, 0xe9}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + qemu_QEMUVTPM = M{4: {Expected: []byte{0xe7, 0x61, 0x78, 0x2a, 0xe5, 0xb8, 0xde, 0xb9, 0x81, 0x2a, 0x8f, 0x1c, 0x26, 0xac, 0xe0, 0x18, 0x78, 0xfd, 0x76, 0x8d, 0xdf, 0xc7, 0x4d, 0x7b, 0x4a, 0xfb, 0xee, 0xa0, 0x01, 0x6c, 0xbb, 0x39}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xfc, 0x1e, 0x0c, 0x38, 0xa5, 0x07, 0x4c, 0x39, 0xc8, 0x54, 0x77, 0x26, 0x76, 0x4e, 0xcd, 0x00, 0xcd, 0x9f, 0xfd, 0x37, 0x77, 0xf2, 0x6f, 0x4e, 0x67, 0x07, 0xaa, 0x26, 0x43, 0xaa, 0x4a, 0xe6}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x57, 0xf2, 0x5a, 0x9d, 0xaa, 0x99, 0x54, 0x7a, 0xa4, 0x14, 0x87, 0xa3, 0x0b, 0x05, 0xe6, 0xc3, 0x57, 0x6c, 0x3d, 0xa2, 0x55, 0x84, 0xdb, 0x19, 0x31, 0xd1, 0xea, 0x62, 0xf7, 0x71, 0x5c, 0xdb}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} ) diff --git a/internal/config/image_enterprise.go b/internal/config/image_enterprise.go index 30dab1b2a..d936fe24f 100644 --- a/internal/config/image_enterprise.go +++ b/internal/config/image_enterprise.go @@ -10,5 +10,5 @@ package config const ( // defaultImage is the default image to use. - defaultImage = "ref/main/stream/nightly/v2.24.0-pre.0.20250506164353-dd8539f54b44" + defaultImage = "ref/main/stream/nightly/v2.24.0-pre.0.20250508140403-8ec3bb86cf98" ) From 823c891135007800283e543e6b8aa4a69a29c5c1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Wei=C3=9Fe?= <66256922+daniel-weisse@users.noreply.github.com> Date: Fri, 9 May 2025 10:30:38 +0200 Subject: [PATCH 268/311] ci: run e2e cleanup daily (#3819) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * ci: run e2e cleanup job once daily * ci: dont abort cleanup on first error * ci: clean up leftover resources from release workflows --------- Signed-off-by: Daniel Weiße --- .../e2e_cleanup_timeframe/e2e-cleanup.sh | 39 +++++++++---------- ...e2e-cleanup-weekly.yml => e2e-cleanup.yml} | 4 +- 2 files changed, 20 insertions(+), 23 deletions(-) rename .github/workflows/{e2e-cleanup-weekly.yml => e2e-cleanup.yml} (89%) diff --git a/.github/actions/e2e_cleanup_timeframe/e2e-cleanup.sh b/.github/actions/e2e_cleanup_timeframe/e2e-cleanup.sh index a88e714c5..d6d0365cb 100755 --- a/.github/actions/e2e_cleanup_timeframe/e2e-cleanup.sh +++ b/.github/actions/e2e_cleanup_timeframe/e2e-cleanup.sh @@ -2,7 +2,7 @@ # get_e2e_test_ids_on_date gets all workflow IDs of workflows that contain "e2e" on a specific date. function get_e2e_test_ids_on_date { - ids="$(gh run list --created "$1" --status failure --json createdAt,workflowName,databaseId --jq '.[] | select(.workflowName | contains("e2e") and (contains("MiniConstellation") | not)) | .databaseId' -L1000 -R edgelesssys/constellation || exit 1)" + ids="$(gh run list --created "$1" --status failure --json createdAt,workflowName,databaseId --jq '.[] | select(.workflowName | (contains("e2e") or contains("Release")) and (contains("MiniConstellation") | not)) | .databaseId' -L1000 -R edgelesssys/constellation || exit 1)" echo "${ids}" } @@ -11,24 +11,15 @@ function download_tfstate_artifact { gh run download "$1" -p "terraform-state-*" -R edgelesssys/constellation > /dev/null } -# delete_resources runs terraform destroy on the constellation-terraform subfolder of a given folder. -function delete_resources { - if [[ -d "$1/constellation-terraform" ]]; then - cd "$1/constellation-terraform" || exit 1 - terraform init > /dev/null || exit 1 # first, install plugins - terraform destroy -auto-approve || exit 1 - cd ../../ || exit 1 - fi -} - -# delete_iam_config runs terraform destroy on the constellation-iam-terraform subfolder of a given folder. -function delete_iam_config { - if [[ -d "$1/constellation-iam-terraform" ]]; then - cd "$1/constellation-iam-terraform" || exit 1 - terraform init > /dev/null || exit 1 # first, install plugins - terraform destroy -auto-approve || exit 1 - cd ../../ || exit 1 +# delete_terraform_resources runs terraform destroy on the given folder. +function delete_terraform_resources { + delete_err=0 + if pushd "${1}/${2}"; then + terraform init > /dev/null || delete_err=1 # first, install plugins + terraform destroy -auto-approve || delete_err=1 + popd || exit 1 fi + return "${delete_err}" } # check if the password for artifact decryption was given @@ -42,7 +33,7 @@ artifact_pwd=${ENCRYPTION_SECRET} shopt -s nullglob start_date=$(date "+%Y-%m-%d") -end_date=$(date --date "-7 day" "+%Y-%m-%d") +end_date=$(date --date "-4 day" "+%Y-%m-%d") dates_to_clean=() # get all dates of the last week @@ -85,13 +76,19 @@ export TF_PLUGIN_CACHE_DIR="${HOME}/tf_plugin_cache" echo "[*] created terraform cache directory ${TF_PLUGIN_CACHE_DIR}" echo "[*] deleting resources" +error_occurred=0 for directory in ./terraform-state-*; do echo " deleting resources in ${directory}" - delete_resources "${directory}" + delete_terraform_resources "${directory}" "constellation-terraform" || echo "[!] deleting resources failed" && error_occurred=1 echo " deleting IAM configuration in ${directory}" - delete_iam_config "${directory}" + delete_terraform_resources "${directory}" "constellation-iam-terraform" || echo "[!] deleting IAM resources failed" && error_occurred=1 echo " deleting directory ${directory}" rm -rf "${directory}" done +if [[ ${error_occurred} -ne 0 ]]; then + echo "[!] Errors occurred during resource deletion." + exit 1 +fi + exit 0 diff --git a/.github/workflows/e2e-cleanup-weekly.yml b/.github/workflows/e2e-cleanup.yml similarity index 89% rename from .github/workflows/e2e-cleanup-weekly.yml rename to .github/workflows/e2e-cleanup.yml index da557ae08..67e5bf0ff 100644 --- a/.github/workflows/e2e-cleanup-weekly.yml +++ b/.github/workflows/e2e-cleanup.yml @@ -1,8 +1,8 @@ -name: e2e weekly cleanup +name: e2e cleanup on: schedule: - - cron: "0 0 * * 0" # At 00:00 every Sunday UTC + - cron: "0 0 * * *" # At 00:00 every day workflow_dispatch: From 04a5cdf6b84aae83a9e5250d3b83ed763c50382e Mon Sep 17 00:00:00 2001 From: Markus Rudy Date: Fri, 9 May 2025 11:19:38 +0200 Subject: [PATCH 269/311] helm: force app creds in GCP CCM (#3822) --- .../charts/ccm/templates/gcp-cm.yaml | 8 +++++++- .../charts/ccm/templates/gcp-cm.yaml | 2 +- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/internal/constellation/helm/charts/edgeless/constellation-services/charts/ccm/templates/gcp-cm.yaml b/internal/constellation/helm/charts/edgeless/constellation-services/charts/ccm/templates/gcp-cm.yaml index 06a971465..220c3efc6 100644 --- a/internal/constellation/helm/charts/edgeless/constellation-services/charts/ccm/templates/gcp-cm.yaml +++ b/internal/constellation/helm/charts/edgeless/constellation-services/charts/ccm/templates/gcp-cm.yaml @@ -5,5 +5,11 @@ metadata: name: gceconf namespace: {{ .Release.Namespace }} data: - gce.conf: "[global]\nproject-id = {{.Values.GCP.projectID }}\nuse-metadata-server = true\nnode-tags = constellation-{{ .Values.GCP.uid }}\nregional = true\n" + gce.conf: | + [global] + project-id = {{.Values.GCP.projectID }} + use-metadata-server = true + node-tags = constellation-{{ .Values.GCP.uid }} + regional = true + token-url = nil # This forces use of GOOGLE_APPLICATION_CREDENTIALS. {{- end -}} diff --git a/internal/constellation/helm/testdata/GCP/constellation-services/charts/ccm/templates/gcp-cm.yaml b/internal/constellation/helm/testdata/GCP/constellation-services/charts/ccm/templates/gcp-cm.yaml index 5855fb988..c0ed7d331 100644 --- a/internal/constellation/helm/testdata/GCP/constellation-services/charts/ccm/templates/gcp-cm.yaml +++ b/internal/constellation/helm/testdata/GCP/constellation-services/charts/ccm/templates/gcp-cm.yaml @@ -4,4 +4,4 @@ metadata: name: gceconf namespace: testNamespace data: - gce.conf: "[global]\nproject-id = 42424242424242\nuse-metadata-server = true\nnode-tags = constellation-242424242424\nregional = true\n" + gce.conf: "[global]\nproject-id = 42424242424242\nuse-metadata-server = true\nnode-tags = constellation-242424242424\nregional = true\ntoken-url = nil # This forces use of GOOGLE_APPLICATION_CREDENTIALS." From 85ed31405b35f684bc94168006c218d02e42d92a Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 9 May 2025 23:16:44 +0200 Subject: [PATCH 270/311] deps: update dependency matplotlib to v3.10.3 (#3820) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/actions/e2e_benchmark/evaluate/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/actions/e2e_benchmark/evaluate/requirements.txt b/.github/actions/e2e_benchmark/evaluate/requirements.txt index 159c6136f..8d98451ba 100644 --- a/.github/actions/e2e_benchmark/evaluate/requirements.txt +++ b/.github/actions/e2e_benchmark/evaluate/requirements.txt @@ -1,3 +1,3 @@ numpy ==2.2.5 -matplotlib ==3.10.1 +matplotlib ==3.10.3 Pillow ==11.2.1 \ No newline at end of file From 9fe3702430c66050bb917da7708cbfc58856f821 Mon Sep 17 00:00:00 2001 From: edgelessci <71088502+edgelessci@users.noreply.github.com> Date: Sun, 11 May 2025 11:38:13 +0200 Subject: [PATCH 271/311] image: update locked rpms (#3824) Co-authored-by: edgelessci --- image/mirror/SHA256SUMS | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/image/mirror/SHA256SUMS b/image/mirror/SHA256SUMS index f9cc6340b..796826902 100644 --- a/image/mirror/SHA256SUMS +++ b/image/mirror/SHA256SUMS @@ -25,8 +25,8 @@ d941a78ffb6e2e0b4c24d0097d0351ced8796edde90208b4bddee459bce0a949 cpio-2.15-1.fc faa23cb6a7a612c0a6e874c788c5add967c5e193bd38c2e6093b82b38a162f81 cracklib-2.9.11-5.fc40.i686.rpm ea1f43ef9a4b02a9c66726ee386f090145696fb93dff80d593ac82126f8037ec cracklib-2.9.11-5.fc40.x86_64.rpm fe24641e69545c428890a4b094f015c03f65a6c30c3db7bb0de7672bab66bfd6 cracklib-dicts-2.9.11-5.fc40.x86_64.rpm -f3f3e5f6a1c1bee67c0c6598a48143c36827f90a095897d649580a174468cdbc criu-4.0-1.fc40.x86_64.rpm -bbdb6014e2bd87db1bb2d4795a57cbb08bfdb03777c2b9730a3f45f7977fc4c9 criu-libs-4.0-1.fc40.x86_64.rpm +cb6318cb928c70696f1fc3a79469c0343905b4b69c5d9789e9932b10b4584357 criu-4.1-2.fc40.x86_64.rpm +05a1dbc9f2e3585df8f9930327a7e6f7f59b396359db92787086e1fdb73634b2 criu-libs-4.1-2.fc40.x86_64.rpm 0a8ee60884b6739bc0fffed6c47a94eae524e73cbd9c942420f6ffdfcd39086b crun-1.20-2.fc40.x86_64.rpm d7a62ff0193375607d28d8fe7eedf3ff5b6ddac154e1474d79787b9f32ae298d crypto-policies-20241011-1.git5930b9a.fc40.noarch.rpm 0f1d436f879fa30f18adca576a1f91bb1a8d1ac42cff5f35c1d15e6dffc506fa crypto-policies-scripts-20241011-1.git5930b9a.fc40.noarch.rpm @@ -81,12 +81,12 @@ c4cc69bf3a2655b9ee9ac23492d377bac57811c5b4f81fbf43537520ee33c7af gawk-all-langp 554a68e692ccdd0cf71ea67a4c550bac910685465f17eee503732d48ccda9c90 gettext-libs-0.22.5-4.fc40.x86_64.rpm 046971e9f5f0c88737854e1c9e02cce8f5854633575984b235cf3f8b11ec7b91 gettext-runtime-0.22.5-4.fc40.x86_64.rpm 6afaddcff936e900b9d3ab379ddac5c8dd0aa323924b973bf2fa9fc819dc3638 glib2-2.80.5-1.fc40.x86_64.rpm -07ae5eea58ee6f3c79cbd8a196a688362ed3f6a8c7d5438c4ef81cb5c1945fe3 glibc-2.39-37.fc40.i686.rpm -4f4ea118bba40108c179d9282b985864982791a32ee62e7479b30df8c713a5ff glibc-2.39-37.fc40.x86_64.rpm -361ad86f312b98a6e7bccd70955b10e48e128310daf0401dfe187f1532e951e2 glibc-common-2.39-37.fc40.x86_64.rpm -571e6718794b51639d56009b1ca9e2e3695092e3240c45cab4fb327d567a7814 glibc-gconv-extra-2.39-37.fc40.i686.rpm -d94ce03982cc4137789225c1cc2db730b265ebae0f2afde55dc8d9b9850fd9f1 glibc-gconv-extra-2.39-37.fc40.x86_64.rpm -9730234c5c0c9ba9ee3e1a4d7a108f23fa69bcc074cb3be52034170b93d759ff glibc-minimal-langpack-2.39-37.fc40.x86_64.rpm +ee01787bf89f4f3b1ee7dc269844bae2fc672b1af4ac5e241e570391fbeeab3b glibc-2.39-38.fc40.i686.rpm +b64c709529bedb9d3e62c892fe79b67f186c499d54d1e7985713ddb5fded7a59 glibc-2.39-38.fc40.x86_64.rpm +5cdec5bdfe58752fca36279d5cd25e08a6b37a086020f2573937304a5b770dc6 glibc-common-2.39-38.fc40.x86_64.rpm +e8ab57f139980b93c17a9598a40cac5a81be37216526be8115235a57ce5a9df7 glibc-gconv-extra-2.39-38.fc40.i686.rpm +4deff99dffc791e504d9e1d9b5c19f3a053a14291d2168ffd33fdcd24180323b glibc-gconv-extra-2.39-38.fc40.x86_64.rpm +8556a19ce4e3a9977f2d1cdb2f1885eef6401140609264e2c50a8161874d22ac glibc-minimal-langpack-2.39-38.fc40.x86_64.rpm b054d6a9ee3477e935686b327aa47379bd1909eac4ce06c4c45dff1a201ecb49 gmp-6.2.1-8.fc40.x86_64.rpm 0a8b1b3fb625e4d1864ad6726f583e2db5db7f10d9f3564b5916ca7fed1b71cb gnupg2-2.4.4-1.fc40.x86_64.rpm 4425dbd35ab65f25b092d12ac56c4b565371a1c52ac882c8896dbeae7d52bbb1 gnupg2-smime-2.4.4-1.fc40.x86_64.rpm @@ -189,7 +189,7 @@ bb9ceaba0d3283777777524e8c99b8eaa2155e9000d8e3ef5d0ece336f8c1392 libpsl-0.21.5- 210e797a265da7111c1a59eca95f9e301ad05c5c8772aed54af9363e5684950b libpwquality-1.4.5-9.fc40.x86_64.rpm 571fad7baa286ca36a2b2cdb171d22142ba82b99663ec0408b5db99514773956 libseccomp-2.5.5-1.fc40.i686.rpm 91668f5d08a663948c7d888d7cdef3248285c5d9fbe369ae031d7ca31c6e398c libseccomp-2.5.5-1.fc40.x86_64.rpm -280edce0c5cda3a725edaca0db10a16d1c4b24b849a8ddfeac066ddb84057e6e libsecret-0.21.4-2.fc40.x86_64.rpm +e4d4e12303eeee24bd19b7c1010abf5a275577f5c6aa59ccbd15887e0f5f09ee libsecret-0.21.7-2.fc40.x86_64.rpm 69161fabb22dd4c5c8aeab0b6465dafe06117ce5173aaf4dce425a10cb11c434 libselinux-3.7-5.fc40.i686.rpm 2070bdf786c926400739254f08568ccf564ce613ddacacb36b6a9a499345aa5e libselinux-3.7-5.fc40.x86_64.rpm aca271d814ee3be14c09963985011c201315a186d3e3b634af8d59cd5eb01208 libselinux-utils-3.7-5.fc40.x86_64.rpm @@ -310,7 +310,7 @@ c48c149f4aebfe44d649eea6f7a8eaa229dc8db71ff70b66c7403aa9bd072820 rpm-libs-4.19. 7bebda41ea91faf8cf8911a403c051eb59d444e60f8091d14d10987b713f39ff rpm-plugin-audit-4.19.1.1-1.fc40.x86_64.rpm d400a4e4440bea56566fb1e9582d86d1ac2e07745d37fa6e71f43a8fea05217c rpm-plugin-selinux-4.19.1.1-1.fc40.x86_64.rpm ce3b3148bb617e132c2ae9a28cc9f1990f806bc45722489f4c09f4d90821b6cd rpm-sequoia-1.7.0-5.fc40.x86_64.rpm -193f8c9ed008172d801fd512e1ca1c0d726f9d871bf088d47155c5ad3e0734bb runc-1.2.5-1.fc40.x86_64.rpm +216aedc28a4144469041eade68f57149e2a7ab91c5f4f46eba18b6fc6effcb73 runc-1.3.0-1.fc40.x86_64.rpm 5dbd069183076ed8048c839c31f713c0f6080fb9ebfdda92ac550030688e811b sbsigntools-0.9.5-6.fc40.x86_64.rpm 6a21b2c132a54fd6d9acb846d0a96289ab739b745cdc4c2b31bdbf6b2434a1a7 sed-4.9-1.fc40.x86_64.rpm 4ea87bc61621f2465a6db2bf14144acd37230132fc84a2d3af485067646e37e1 selinux-policy-40.30-1.fc40.noarch.rpm @@ -352,9 +352,9 @@ cf0306ceed1c6b3be39060d85f16b1953b464d3a625488b170d3b7aadf600645 which-2.21-41. 4ede95a2fa3bc0ae617c8bf3a375b800163d58733b4829b15d9f038505d79fee whois-nls-5.5.20-3.fc40.noarch.rpm e2195010e857f56b19246f8b821f9391922880b7691b3728a413f540edc890a6 xkeyboard-config-2.41-1.fc40.noarch.rpm 69b64249d3c26a5efbd0ffa5802aa08033822c2d4378a4f44261618de6d38e4d xxd-9.1.1275-1.fc40.x86_64.rpm -ee599a1c4d7ee635e54ec137af4dded83f433b9c8a5976f75ecdcd000b5246e3 xz-5.4.6-3.fc40.x86_64.rpm -b92ef78d8ab424c22130e457d0ef691d8197bff61c3b8852205d1b02baba3819 xz-libs-5.4.6-3.fc40.i686.rpm -b6ee44b3d7e494b0364f26b7d0b169a8092180af787423cd5e8a47dc0f738a66 xz-libs-5.4.6-3.fc40.x86_64.rpm +9a0f6eb8d2784d7e3ee062c5deb3b9af41e7e6c6d115b6da8420bde453e41744 xz-5.8.1-2.fc40.x86_64.rpm +c6d64a788bfbbedc6eeab2347274864cade272c4ad69d77cb30d8b602e25e7f0 xz-libs-5.8.1-2.fc40.i686.rpm +cbad4c25b1acbf152273c2fae29e42ddffa03414938a7c755b5afa5f2ba45a26 xz-libs-5.8.1-2.fc40.x86_64.rpm 9e263e0a9b656178519de20733f3e0950fef494aa056daaa2004b522ba50b952 yajl-2.1.0-23.fc40.x86_64.rpm ffab1c8720480b498f65d0d480825ccd890e4f797c3850712879eb04a4739690 zlib-ng-compat-2.1.7-2.fc40.i686.rpm e50b69054de16d757f5667e3acf2e7439302c91a9c418243467f288dfb79f6ea zlib-ng-compat-2.1.7-2.fc40.x86_64.rpm From fe10b96a5c243270267e3a1cba0b6775592a19e0 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 12 May 2025 07:29:08 +0200 Subject: [PATCH 272/311] deps: update K8s constrained Azure versions (#3825) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- internal/versions/versions.go | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/internal/versions/versions.go b/internal/versions/versions.go index 5ef41bf91..9361fe576 100644 --- a/internal/versions/versions.go +++ b/internal/versions/versions.go @@ -252,10 +252,10 @@ var VersionConfigs = map[ValidK8sVersion]KubernetesVersion{ CloudControllerManagerImageAWS: "registry.k8s.io/provider-aws/cloud-controller-manager:v1.29.8@sha256:3f8e7be967f76b328123d53846c21dcd930b60094f9f4abd8bf5ab0fe108e6e4", // renovate:container // CloudControllerManagerImageAzure is the CCM image used on Azure. // Check for newer versions at https://github.com/kubernetes-sigs/cloud-provider-azure/blob/master/README.md. - CloudControllerManagerImageAzure: "mcr.microsoft.com/oss/kubernetes/azure-cloud-controller-manager:v1.29.14@sha256:42c22d1f403770565d5933bf41bbf895c93d98f5fedd85decd24a31a8a7d6daf", // renovate:container + CloudControllerManagerImageAzure: "mcr.microsoft.com/oss/kubernetes/azure-cloud-controller-manager:v1.29.15@sha256:22e562ab13b52c8725add9cf87b5c91b2ca7da75bbf08529163890616ffe4ca7", // renovate:container // CloudNodeManagerImageAzure is the cloud-node-manager image used on Azure. // Check for newer versions at https://github.com/kubernetes-sigs/cloud-provider-azure/blob/master/README.md. - CloudNodeManagerImageAzure: "mcr.microsoft.com/oss/kubernetes/azure-cloud-node-manager:v1.29.14@sha256:d275905bfdb7d777e2baef64cf47165378a87a7a61bcc1106ffca2857c919047", // renovate:container + CloudNodeManagerImageAzure: "mcr.microsoft.com/oss/kubernetes/azure-cloud-node-manager:v1.29.15@sha256:049bf87e7df4653c191b31228b3868627ce2268328158ef39270ca25f3e55b39", // renovate:container // CloudControllerManagerImageGCP is the CCM image used on GCP. CloudControllerManagerImageGCP: "ghcr.io/edgelesssys/cloud-provider-gcp:v29.5.1@sha256:ebbc6f5755725b6c2c81ca1d1580e2feba83572c41608b739c50f85b2e5de936", // renovate:container // CloudControllerManagerImageOpenStack is the CCM image used on OpenStack. @@ -319,10 +319,10 @@ var VersionConfigs = map[ValidK8sVersion]KubernetesVersion{ CloudControllerManagerImageAWS: "registry.k8s.io/provider-aws/cloud-controller-manager:v1.30.8@sha256:f4e82b924e967656d8df9f467c9c1915509e94e228b53840a7f9f2367e1ba9f5", // renovate:container // CloudControllerManagerImageAzure is the CCM image used on Azure. // Check for newer versions at https://github.com/kubernetes-sigs/cloud-provider-azure/blob/master/README.md. - CloudControllerManagerImageAzure: "mcr.microsoft.com/oss/kubernetes/azure-cloud-controller-manager:v1.30.11@sha256:79ae741641e0ced9e2a1d841c6f9bd63c2bbf263f18e8a3802f7c5149e8ea4cb", // renovate:container + CloudControllerManagerImageAzure: "mcr.microsoft.com/oss/kubernetes/azure-cloud-controller-manager:v1.30.12@sha256:6ad276146282674bc5bfd3b344eedcd5c95fb21b2b575ae9441feda3949e2b7f", // renovate:container // CloudNodeManagerImageAzure is the cloud-node-manager image used on Azure. // Check for newer versions at https://github.com/kubernetes-sigs/cloud-provider-azure/blob/master/README.md. - CloudNodeManagerImageAzure: "mcr.microsoft.com/oss/kubernetes/azure-cloud-node-manager:v1.30.11@sha256:5eed23f5b1820cb00f1a628c8aa69b57098f4c70950a192c84696a0bc10f3d96", // renovate:container + CloudNodeManagerImageAzure: "mcr.microsoft.com/oss/kubernetes/azure-cloud-node-manager:v1.30.12@sha256:5725b02ca72e3d8204e2f12b50845a261772db87ab722621bc9f1aba9c5197c7", // renovate:container // CloudControllerManagerImageGCP is the CCM image used on GCP. CloudControllerManagerImageGCP: "ghcr.io/edgelesssys/cloud-provider-gcp:v30.1.4@sha256:0c3695a18d3825492196facb092e5fe56e466fa8517cde5a206fe21630c1da13", // renovate:container // CloudControllerManagerImageOpenStack is the CCM image used on OpenStack. @@ -386,10 +386,10 @@ var VersionConfigs = map[ValidK8sVersion]KubernetesVersion{ CloudControllerManagerImageAWS: "registry.k8s.io/provider-aws/cloud-controller-manager:v1.31.5@sha256:6f94a695828de888c8efc57e3243db9e788709767f687a6a8cb07c2e42158862", // renovate:container // CloudControllerManagerImageAzure is the CCM image used on Azure. // Check for newer versions at https://github.com/kubernetes-sigs/cloud-provider-azure/blob/master/README.md. - CloudControllerManagerImageAzure: "mcr.microsoft.com/oss/kubernetes/azure-cloud-controller-manager:v1.31.5@sha256:8bb9399cf6c1c4ccf71962d4c704fa0795838b4b4256ef3565fe3370db7eff14", // renovate:container + CloudControllerManagerImageAzure: "mcr.microsoft.com/oss/kubernetes/azure-cloud-controller-manager:v1.31.6@sha256:d54893f220256659d40d1cf4d47f2df4453fcf24e3bbad420733653ab20a1b6a", // renovate:container // CloudNodeManagerImageAzure is the cloud-node-manager image used on Azure. // Check for newer versions at https://github.com/kubernetes-sigs/cloud-provider-azure/blob/master/README.md. - CloudNodeManagerImageAzure: "mcr.microsoft.com/oss/kubernetes/azure-cloud-node-manager:v1.31.5@sha256:476eda4f625b2d6069b6da6b0e70ab6960b0e89a9d19198051b10499e2794c4e", // renovate:container + CloudNodeManagerImageAzure: "mcr.microsoft.com/oss/kubernetes/azure-cloud-node-manager:v1.31.6@sha256:b1201e7ce23e574f8b7e391ff061bc00f2d82e1b0b943f3770924b1f88db887e", // renovate:container // CloudControllerManagerImageGCP is the CCM image used on GCP. CloudControllerManagerImageGCP: "ghcr.io/edgelesssys/cloud-provider-gcp:v30.1.4@sha256:0c3695a18d3825492196facb092e5fe56e466fa8517cde5a206fe21630c1da13", // renovate:container // CloudControllerManagerImageOpenStack is the CCM image used on OpenStack. From 0c73a3ed257e1e8b25fb5321bed26ab6eb3b58ab Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 12 May 2025 08:18:10 +0200 Subject: [PATCH 273/311] deps: update Go dependencies (#3826) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- go.mod | 6 +++--- go.sum | 12 ++++++------ 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/go.mod b/go.mod index df0b12174..d2dc9db78 100644 --- a/go.mod +++ b/go.mod @@ -49,8 +49,8 @@ require ( github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.30 github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.75 github.com/aws/aws-sdk-go-v2/service/autoscaling v1.52.4 - github.com/aws/aws-sdk-go-v2/service/cloudfront v1.46.0 - github.com/aws/aws-sdk-go-v2/service/ec2 v1.216.0 + github.com/aws/aws-sdk-go-v2/service/cloudfront v1.46.1 + github.com/aws/aws-sdk-go-v2/service/ec2 v1.217.0 github.com/aws/aws-sdk-go-v2/service/elasticloadbalancingv2 v1.45.2 github.com/aws/aws-sdk-go-v2/service/resourcegroupstaggingapi v1.26.3 github.com/aws/aws-sdk-go-v2/service/s3 v1.79.3 @@ -70,7 +70,7 @@ require ( github.com/golang-jwt/jwt/v5 v5.2.2 github.com/google/go-sev-guest v0.13.0 github.com/google/go-tdx-guest v0.3.2-0.20250505161510-9efd53b4a100 - github.com/google/go-tpm v0.9.4 + github.com/google/go-tpm v0.9.5 github.com/google/go-tpm-tools v0.4.4 github.com/google/uuid v1.6.0 github.com/googleapis/gax-go/v2 v2.14.1 diff --git a/go.sum b/go.sum index c309f94c1..a08bab1d3 100644 --- a/go.sum +++ b/go.sum @@ -158,10 +158,10 @@ github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.34 h1:ZNTqv4nIdE/DiBfUUfXcLZ/Spcu github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.34/go.mod h1:zf7Vcd1ViW7cPqYWEHLHJkS50X0JS2IKz9Cgaj6ugrs= github.com/aws/aws-sdk-go-v2/service/autoscaling v1.52.4 h1:vzLD0FyNU4uxf2QE5UDG0jSEitiJXbVEUwf2Sk3usF4= github.com/aws/aws-sdk-go-v2/service/autoscaling v1.52.4/go.mod h1:CDqMoc3KRdZJ8qziW96J35lKH01Wq3B2aihtHj2JbRs= -github.com/aws/aws-sdk-go-v2/service/cloudfront v1.46.0 h1:wdm9Pjye5PSQ+ELMHXOh7SQhiXLDk2iONZ+fDmISi28= -github.com/aws/aws-sdk-go-v2/service/cloudfront v1.46.0/go.mod h1:FIBJ48TS+qJb+Ne4qJ+0NeIhtPTVXItXooTeNeVI4Po= -github.com/aws/aws-sdk-go-v2/service/ec2 v1.216.0 h1:VOcXyD/1CE7X9ApGWxLnPOabNLJL7KAjtZK56cXd9mg= -github.com/aws/aws-sdk-go-v2/service/ec2 v1.216.0/go.mod h1:ouvGEfHbLaIlWwpDpOVWPWR+YwO0HDv3vm5tYLq8ImY= +github.com/aws/aws-sdk-go-v2/service/cloudfront v1.46.1 h1:6xZNYtuVwzBs8k+TmraERt0vL68Ppg9aUi+aTQmPaVM= +github.com/aws/aws-sdk-go-v2/service/cloudfront v1.46.1/go.mod h1:FIBJ48TS+qJb+Ne4qJ+0NeIhtPTVXItXooTeNeVI4Po= +github.com/aws/aws-sdk-go-v2/service/ec2 v1.217.0 h1:Bzfj/H0nvEcdqnt5TVL7X0wBlwvPe0OXDt7UqcQmr9Q= +github.com/aws/aws-sdk-go-v2/service/ec2 v1.217.0/go.mod h1:ouvGEfHbLaIlWwpDpOVWPWR+YwO0HDv3vm5tYLq8ImY= github.com/aws/aws-sdk-go-v2/service/elasticloadbalancingv2 v1.45.2 h1:vX70Z4lNSr7XsioU0uJq5yvxgI50sB66MvD+V/3buS4= github.com/aws/aws-sdk-go-v2/service/elasticloadbalancingv2 v1.45.2/go.mod h1:xnCC3vFBfOKpU6PcsCKL2ktgBTZfOwTGxj6V8/X3IS4= github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.3 h1:eAh2A4b5IzM/lum78bZ590jy36+d/aFLgKF/4Vd1xPE= @@ -436,8 +436,8 @@ github.com/google/go-sev-guest v0.13.0 h1:DJB6ACdykyweMU0HGOp/TQ7cjsnbV2ecbYunu2 github.com/google/go-sev-guest v0.13.0/go.mod h1:SK9vW+uyfuzYdVN0m8BShL3OQCtXZe/JPF7ZkpD3760= github.com/google/go-tdx-guest v0.3.2-0.20250505161510-9efd53b4a100 h1:E5ArM6vmtaUbgTZM8W3G+bgseO3i5l8BpJCKuUH7WVc= github.com/google/go-tdx-guest v0.3.2-0.20250505161510-9efd53b4a100/go.mod h1:uHy3VaNXNXhl0fiPxKqTxieeouqQmW6A0EfLcaeCYBk= -github.com/google/go-tpm v0.9.4 h1:awZRf9FwOeTunQmHoDYSHJps3ie6f1UlhS1fOdPEt1I= -github.com/google/go-tpm v0.9.4/go.mod h1:h9jEsEECg7gtLis0upRBQU+GhYVH6jMjrFxI8u6bVUY= +github.com/google/go-tpm v0.9.5 h1:ocUmnDebX54dnW+MQWGQRbdaAcJELsa6PqZhJ48KwVU= +github.com/google/go-tpm v0.9.5/go.mod h1:h9jEsEECg7gtLis0upRBQU+GhYVH6jMjrFxI8u6bVUY= github.com/google/go-tpm-tools v0.4.4 h1:oiQfAIkc6xTy9Fl5NKTeTJkBTlXdHsxAofmQyxBKY98= github.com/google/go-tpm-tools v0.4.4/go.mod h1:T8jXkp2s+eltnCDIsXR84/MTcVU9Ja7bh3Mit0pa4AY= github.com/google/go-tspi v0.3.0 h1:ADtq8RKfP+jrTyIWIZDIYcKOMecRqNJFOew2IT0Inus= From 228e1e76fdc7197a1f00a00f7f922bb4fd7d0759 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Wei=C3=9Fe?= <66256922+daniel-weisse@users.noreply.github.com> Date: Mon, 12 May 2025 11:24:11 +0200 Subject: [PATCH 274/311] ci: dont fail if Azure resources were already deleted (#3827) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * ci: dont fail if Azure resources were already deleted * ci: fix error assignement --------- Signed-off-by: Daniel Weiße --- .../e2e_cleanup_timeframe/e2e-cleanup.sh | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/.github/actions/e2e_cleanup_timeframe/e2e-cleanup.sh b/.github/actions/e2e_cleanup_timeframe/e2e-cleanup.sh index d6d0365cb..0796ae1a0 100755 --- a/.github/actions/e2e_cleanup_timeframe/e2e-cleanup.sh +++ b/.github/actions/e2e_cleanup_timeframe/e2e-cleanup.sh @@ -15,6 +15,14 @@ function download_tfstate_artifact { function delete_terraform_resources { delete_err=0 if pushd "${1}/${2}"; then + # Workaround for cleaning up Azure resources + # We include a data source that is only used to generate output + # If this data source is deleted before we call terraform destroy, + # terraform will first try to evaluate the data source and fail, + # causing the destroy to fail as well. + sed -i '/data "azurerm_user_assigned_identity" "uaid" {/,/}/d' main.tf + sed -i '/output "user_assigned_identity_client_id" {/,/}/d' outputs.tf + terraform init > /dev/null || delete_err=1 # first, install plugins terraform destroy -auto-approve || delete_err=1 popd || exit 1 @@ -79,9 +87,15 @@ echo "[*] deleting resources" error_occurred=0 for directory in ./terraform-state-*; do echo " deleting resources in ${directory}" - delete_terraform_resources "${directory}" "constellation-terraform" || echo "[!] deleting resources failed" && error_occurred=1 + if ! delete_terraform_resources "${directory}" "constellation-terraform"; then + echo "[!] deleting resources failed" + error_occurred=1 + fi echo " deleting IAM configuration in ${directory}" - delete_terraform_resources "${directory}" "constellation-iam-terraform" || echo "[!] deleting IAM resources failed" && error_occurred=1 + if ! delete_terraform_resources "${directory}" "constellation-iam-terraform"; then + echo "[!] deleting IAM resources failed" + error_occurred=1 + fi echo " deleting directory ${directory}" rm -rf "${directory}" done From 9d719df5a4b7857f83ecbc602debf7f2818ade26 Mon Sep 17 00:00:00 2001 From: edgelessci <71088502+edgelessci@users.noreply.github.com> Date: Mon, 12 May 2025 21:02:22 +0200 Subject: [PATCH 275/311] chore: update CI for v2.23.1 (#3795) Co-authored-by: edgelessci --- .github/workflows/e2e-test-release.yml | 2 +- .github/workflows/e2e-test-weekly.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/e2e-test-release.yml b/.github/workflows/e2e-test-release.yml index 365f24ebe..9ab1ebbe1 100644 --- a/.github/workflows/e2e-test-release.yml +++ b/.github/workflows/e2e-test-release.yml @@ -229,7 +229,7 @@ jobs: fail-fast: false max-parallel: 1 matrix: - fromVersion: ["v2.23.0"] + fromVersion: ["v2.23.1"] attestationVariant: ["gcp-sev-snp", "azure-sev-snp", "azure-tdx", "aws-sev-snp"] name: Run upgrade tests secrets: inherit diff --git a/.github/workflows/e2e-test-weekly.yml b/.github/workflows/e2e-test-weekly.yml index 1bbcb389d..1b6deb5fb 100644 --- a/.github/workflows/e2e-test-weekly.yml +++ b/.github/workflows/e2e-test-weekly.yml @@ -446,7 +446,7 @@ jobs: fail-fast: false max-parallel: 1 matrix: - fromVersion: ["v2.23.0"] + fromVersion: ["v2.23.1"] attestationVariant: ["gcp-sev-snp", "azure-sev-snp", "azure-tdx", "aws-sev-snp"] name: Run upgrade tests secrets: inherit From b566e98b2d47b791d30000357410345b61fe7a35 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 13 May 2025 08:31:04 +0200 Subject: [PATCH 276/311] deps: update GitHub action dependencies (#3829) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/actions/cdbg_deploy/action.yml | 4 ++-- .github/actions/constellation_destroy/action.yml | 2 +- .github/actions/constellation_iam_destroy/action.yml | 2 +- .github/actions/e2e_attestationconfigapi/action.yml | 2 +- .github/actions/e2e_benchmark/action.yml | 2 +- .github/actions/e2e_cleanup_timeframe/action.yml | 2 +- .github/actions/e2e_test/action.yml | 4 ++-- .github/actions/e2e_verify/action.yml | 2 +- .github/actions/find_latest_image/action.yml | 2 +- .github/actions/select_image/action.yml | 2 +- .github/workflows/build-ccm-gcp.yml | 4 ++-- .github/workflows/build-os-image-scheduled.yml | 4 ++-- .github/workflows/build-os-image.yml | 2 +- .github/workflows/check-links.yml | 2 +- .github/workflows/codeql.yml | 4 ++-- .github/workflows/e2e-test-provider-example.yml | 2 +- .github/workflows/e2e-upgrade.yml | 6 +++--- .github/workflows/on-release.yml | 2 +- .github/workflows/purge-main.yml | 2 +- .github/workflows/release.yml | 4 ++-- .github/workflows/test-operator-codegen.yml | 4 ++-- .github/workflows/test-tidy.yml | 2 +- .github/workflows/test-unittest.yml | 2 +- .github/workflows/update-rpms.yml | 2 +- .github/workflows/versionsapi.yml | 6 +++--- 25 files changed, 36 insertions(+), 36 deletions(-) diff --git a/.github/actions/cdbg_deploy/action.yml b/.github/actions/cdbg_deploy/action.yml index e9169d802..c5aa2ab39 100644 --- a/.github/actions/cdbg_deploy/action.yml +++ b/.github/actions/cdbg_deploy/action.yml @@ -61,7 +61,7 @@ runs: - name: Login to AWS (IAM service principal) if: inputs.cloudProvider == 'aws' - uses: aws-actions/configure-aws-credentials@ececac1a45f3b08a01d2dd070d28d111c5fe6722 # v4.1.0 + uses: aws-actions/configure-aws-credentials@f24d7193d98baebaeacc7e2227925dd47cc267f5 # v4.2.0 with: role-to-assume: arn:aws:iam::795746500882:role/GithubActionsE2EIAM aws-region: eu-central-1 @@ -80,7 +80,7 @@ runs: - name: Login to AWS (Cluster service principal) if: inputs.cloudProvider == 'aws' - uses: aws-actions/configure-aws-credentials@ececac1a45f3b08a01d2dd070d28d111c5fe6722 # v4.1.0 + uses: aws-actions/configure-aws-credentials@f24d7193d98baebaeacc7e2227925dd47cc267f5 # v4.2.0 with: role-to-assume: arn:aws:iam::795746500882:role/GithubActionsE2ECluster aws-region: eu-central-1 diff --git a/.github/actions/constellation_destroy/action.yml b/.github/actions/constellation_destroy/action.yml index dd31e99b6..74b5d3a7c 100644 --- a/.github/actions/constellation_destroy/action.yml +++ b/.github/actions/constellation_destroy/action.yml @@ -67,7 +67,7 @@ runs: - name: Login to AWS (Cluster role) if: inputs.cloudProvider == 'aws' - uses: aws-actions/configure-aws-credentials@ececac1a45f3b08a01d2dd070d28d111c5fe6722 # v4.1.0 + uses: aws-actions/configure-aws-credentials@f24d7193d98baebaeacc7e2227925dd47cc267f5 # v4.2.0 with: role-to-assume: arn:aws:iam::795746500882:role/GithubActionsE2ECluster aws-region: eu-central-1 diff --git a/.github/actions/constellation_iam_destroy/action.yml b/.github/actions/constellation_iam_destroy/action.yml index bebb77a2b..2178f53f9 100644 --- a/.github/actions/constellation_iam_destroy/action.yml +++ b/.github/actions/constellation_iam_destroy/action.yml @@ -23,7 +23,7 @@ runs: - name: Login to AWS (IAM role) if: inputs.cloudProvider == 'aws' - uses: aws-actions/configure-aws-credentials@ececac1a45f3b08a01d2dd070d28d111c5fe6722 # v4.1.0 + uses: aws-actions/configure-aws-credentials@f24d7193d98baebaeacc7e2227925dd47cc267f5 # v4.2.0 with: role-to-assume: arn:aws:iam::795746500882:role/GithubActionsE2EIAM aws-region: eu-central-1 diff --git a/.github/actions/e2e_attestationconfigapi/action.yml b/.github/actions/e2e_attestationconfigapi/action.yml index 91537cc8d..891c3d28c 100644 --- a/.github/actions/e2e_attestationconfigapi/action.yml +++ b/.github/actions/e2e_attestationconfigapi/action.yml @@ -19,7 +19,7 @@ runs: uses: ./.github/actions/setup_bazel_nix - name: Login to AWS - uses: aws-actions/configure-aws-credentials@ececac1a45f3b08a01d2dd070d28d111c5fe6722 # v4.1.0 + uses: aws-actions/configure-aws-credentials@f24d7193d98baebaeacc7e2227925dd47cc267f5 # v4.2.0 with: role-to-assume: arn:aws:iam::795746500882:role/GithubTestResourceAPI aws-region: eu-west-1 diff --git a/.github/actions/e2e_benchmark/action.yml b/.github/actions/e2e_benchmark/action.yml index 8a6e1c834..c8bd6abe0 100644 --- a/.github/actions/e2e_benchmark/action.yml +++ b/.github/actions/e2e_benchmark/action.yml @@ -166,7 +166,7 @@ runs: encryptionSecret: ${{ inputs.encryptionSecret }} - name: Assume AWS role to retrieve and update benchmarks in S3 - uses: aws-actions/configure-aws-credentials@ececac1a45f3b08a01d2dd070d28d111c5fe6722 # v4.1.0 + uses: aws-actions/configure-aws-credentials@f24d7193d98baebaeacc7e2227925dd47cc267f5 # v4.2.0 with: role-to-assume: arn:aws:iam::795746500882:role/GithubActionUpdateBenchmarks aws-region: us-east-2 diff --git a/.github/actions/e2e_cleanup_timeframe/action.yml b/.github/actions/e2e_cleanup_timeframe/action.yml index dba809fc2..67cd82066 100644 --- a/.github/actions/e2e_cleanup_timeframe/action.yml +++ b/.github/actions/e2e_cleanup_timeframe/action.yml @@ -22,7 +22,7 @@ runs: using: "composite" steps: - name: Authenticate AWS - uses: aws-actions/configure-aws-credentials@ececac1a45f3b08a01d2dd070d28d111c5fe6722 # v4.1.0 + uses: aws-actions/configure-aws-credentials@f24d7193d98baebaeacc7e2227925dd47cc267f5 # v4.2.0 with: role-to-assume: arn:aws:iam::795746500882:role/GithubActionsE2EDestroy aws-region: eu-central-1 diff --git a/.github/actions/e2e_test/action.yml b/.github/actions/e2e_test/action.yml index 0b032b91f..6814450af 100644 --- a/.github/actions/e2e_test/action.yml +++ b/.github/actions/e2e_test/action.yml @@ -227,7 +227,7 @@ runs: - name: Login to AWS (IAM role) if: inputs.cloudProvider == 'aws' - uses: aws-actions/configure-aws-credentials@ececac1a45f3b08a01d2dd070d28d111c5fe6722 # v4.1.0 + uses: aws-actions/configure-aws-credentials@f24d7193d98baebaeacc7e2227925dd47cc267f5 # v4.2.0 with: role-to-assume: arn:aws:iam::795746500882:role/GithubActionsE2EIAM aws-region: eu-central-1 @@ -298,7 +298,7 @@ runs: - name: Login to AWS (Cluster role) if: inputs.cloudProvider == 'aws' - uses: aws-actions/configure-aws-credentials@ececac1a45f3b08a01d2dd070d28d111c5fe6722 # v4.1.0 + uses: aws-actions/configure-aws-credentials@f24d7193d98baebaeacc7e2227925dd47cc267f5 # v4.2.0 with: role-to-assume: arn:aws:iam::795746500882:role/GithubActionsE2ECluster aws-region: eu-central-1 diff --git a/.github/actions/e2e_verify/action.yml b/.github/actions/e2e_verify/action.yml index 54ed1ebeb..ad019814e 100644 --- a/.github/actions/e2e_verify/action.yml +++ b/.github/actions/e2e_verify/action.yml @@ -82,7 +82,7 @@ runs: - name: Login to AWS if: github.ref_name == 'main' - uses: aws-actions/configure-aws-credentials@ececac1a45f3b08a01d2dd070d28d111c5fe6722 # v4.1.0 + uses: aws-actions/configure-aws-credentials@f24d7193d98baebaeacc7e2227925dd47cc267f5 # v4.2.0 with: role-to-assume: arn:aws:iam::795746500882:role/GitHubConstellationImagePipeline aws-region: eu-central-1 diff --git a/.github/actions/find_latest_image/action.yml b/.github/actions/find_latest_image/action.yml index 8dabff672..b9bee4689 100644 --- a/.github/actions/find_latest_image/action.yml +++ b/.github/actions/find_latest_image/action.yml @@ -38,7 +38,7 @@ runs: - name: Login to AWS if: inputs.imageVersion == '' - uses: aws-actions/configure-aws-credentials@ececac1a45f3b08a01d2dd070d28d111c5fe6722 # v4.1.0 + uses: aws-actions/configure-aws-credentials@f24d7193d98baebaeacc7e2227925dd47cc267f5 # v4.2.0 with: role-to-assume: arn:aws:iam::795746500882:role/GithubConstellationVersionsAPIRead aws-region: eu-central-1 diff --git a/.github/actions/select_image/action.yml b/.github/actions/select_image/action.yml index 66ae26207..738d254b5 100644 --- a/.github/actions/select_image/action.yml +++ b/.github/actions/select_image/action.yml @@ -18,7 +18,7 @@ runs: using: "composite" steps: - name: Login to AWS - uses: aws-actions/configure-aws-credentials@ececac1a45f3b08a01d2dd070d28d111c5fe6722 # v4.1.0 + uses: aws-actions/configure-aws-credentials@f24d7193d98baebaeacc7e2227925dd47cc267f5 # v4.2.0 with: role-to-assume: arn:aws:iam::795746500882:role/GithubConstellationVersionsAPIRead aws-region: eu-central-1 diff --git a/.github/workflows/build-ccm-gcp.yml b/.github/workflows/build-ccm-gcp.yml index 0a8a60263..1d347b26d 100644 --- a/.github/workflows/build-ccm-gcp.yml +++ b/.github/workflows/build-ccm-gcp.yml @@ -29,9 +29,9 @@ jobs: fetch-depth: 0 - name: Setup Go environment - uses: actions/setup-go@0aaccfd150d50ccaeb58ebd88d36e91967a5f35b # v5.4.0 + uses: actions/setup-go@d35c59abb061a4a6fb18e82ac0862c26744d6ab5 # v5.5.0 with: - go-version: "1.24.2" + go-version: "1.24.3" cache: false - name: Install Crane diff --git a/.github/workflows/build-os-image-scheduled.yml b/.github/workflows/build-os-image-scheduled.yml index 60251bc5a..e42c2ebfa 100644 --- a/.github/workflows/build-os-image-scheduled.yml +++ b/.github/workflows/build-os-image-scheduled.yml @@ -65,9 +65,9 @@ jobs: token: ${{ secrets.CI_COMMIT_PUSH_PR }} - name: Setup Go environment - uses: actions/setup-go@0aaccfd150d50ccaeb58ebd88d36e91967a5f35b # v5.4.0 + uses: actions/setup-go@d35c59abb061a4a6fb18e82ac0862c26744d6ab5 # v5.5.0 with: - go-version: "1.24.2" + go-version: "1.24.3" cache: false - name: Determine version diff --git a/.github/workflows/build-os-image.yml b/.github/workflows/build-os-image.yml index de4db988a..7ee131ee5 100644 --- a/.github/workflows/build-os-image.yml +++ b/.github/workflows/build-os-image.yml @@ -147,7 +147,7 @@ jobs: useCache: "false" - name: Login to AWS - uses: aws-actions/configure-aws-credentials@ececac1a45f3b08a01d2dd070d28d111c5fe6722 # v4.1.0 + uses: aws-actions/configure-aws-credentials@f24d7193d98baebaeacc7e2227925dd47cc267f5 # v4.2.0 with: role-to-assume: arn:aws:iam::795746500882:role/GitHubConstellationImagePipeline aws-region: eu-central-1 diff --git a/.github/workflows/check-links.yml b/.github/workflows/check-links.yml index 31fbbfea6..598a64445 100644 --- a/.github/workflows/check-links.yml +++ b/.github/workflows/check-links.yml @@ -25,7 +25,7 @@ jobs: ref: ${{ !github.event.pull_request.head.repo.fork && github.head_ref || '' }} - name: Link Checker - uses: lycheeverse/lychee-action@1d97d84f0bc547f7b25f4c2170d87d810dc2fb2c # v2.4.0 + uses: lycheeverse/lychee-action@82202e5e9c2f4ef1a55a3d02563e1cb6041e5332 # v2.4.1 with: args: "--config ./.lychee.toml './**/*.md' './**/*.html'" fail: true diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index 707cdaa66..d5bf7ba56 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -38,9 +38,9 @@ jobs: - name: Setup Go environment if: matrix.language == 'go' - uses: actions/setup-go@0aaccfd150d50ccaeb58ebd88d36e91967a5f35b # v5.4.0 + uses: actions/setup-go@d35c59abb061a4a6fb18e82ac0862c26744d6ab5 # v5.5.0 with: - go-version: "1.24.2" + go-version: "1.24.3" cache: false - name: Initialize CodeQL diff --git a/.github/workflows/e2e-test-provider-example.yml b/.github/workflows/e2e-test-provider-example.yml index 1c4f88012..15c852ec0 100644 --- a/.github/workflows/e2e-test-provider-example.yml +++ b/.github/workflows/e2e-test-provider-example.yml @@ -154,7 +154,7 @@ jobs: - name: Login to AWS (IAM + Cluster role) if: steps.determine.outputs.cloudProvider == 'aws' - uses: aws-actions/configure-aws-credentials@ececac1a45f3b08a01d2dd070d28d111c5fe6722 # v4.1.0 + uses: aws-actions/configure-aws-credentials@f24d7193d98baebaeacc7e2227925dd47cc267f5 # v4.2.0 with: role-to-assume: arn:aws:iam::795746500882:role/GithubActionsE2ETerraform aws-region: eu-central-1 diff --git a/.github/workflows/e2e-upgrade.yml b/.github/workflows/e2e-upgrade.yml index 4a4813022..e416c6f7e 100644 --- a/.github/workflows/e2e-upgrade.yml +++ b/.github/workflows/e2e-upgrade.yml @@ -274,7 +274,7 @@ jobs: path: build/constellation - name: Login to AWS - uses: aws-actions/configure-aws-credentials@ececac1a45f3b08a01d2dd070d28d111c5fe6722 # v4.1.0 + uses: aws-actions/configure-aws-credentials@f24d7193d98baebaeacc7e2227925dd47cc267f5 # v4.2.0 with: role-to-assume: arn:aws:iam::795746500882:role/GithubConstellationVersionsAPIRead aws-region: eu-central-1 @@ -296,7 +296,7 @@ jobs: - name: Login to AWS (IAM role) if: needs.generate-input-parameters.outputs.cloudProvider == 'aws' - uses: aws-actions/configure-aws-credentials@ececac1a45f3b08a01d2dd070d28d111c5fe6722 # v4.1.0 + uses: aws-actions/configure-aws-credentials@f24d7193d98baebaeacc7e2227925dd47cc267f5 # v4.2.0 with: role-to-assume: arn:aws:iam::795746500882:role/GithubActionsE2EIAM aws-region: eu-central-1 @@ -347,7 +347,7 @@ jobs: - name: Login to AWS (Cluster role) if: always() && needs.generate-input-parameters.outputs.cloudProvider == 'aws' - uses: aws-actions/configure-aws-credentials@ececac1a45f3b08a01d2dd070d28d111c5fe6722 # v4.1.0 + uses: aws-actions/configure-aws-credentials@f24d7193d98baebaeacc7e2227925dd47cc267f5 # v4.2.0 with: role-to-assume: arn:aws:iam::795746500882:role/GithubActionsE2ECluster aws-region: eu-central-1 diff --git a/.github/workflows/on-release.yml b/.github/workflows/on-release.yml index 1744a7472..d968fcf98 100644 --- a/.github/workflows/on-release.yml +++ b/.github/workflows/on-release.yml @@ -142,7 +142,7 @@ jobs: - uses: ./.github/actions/setup_bazel_nix - name: Login to AWS - uses: aws-actions/configure-aws-credentials@ececac1a45f3b08a01d2dd070d28d111c5fe6722 # v4.1.0 + uses: aws-actions/configure-aws-credentials@f24d7193d98baebaeacc7e2227925dd47cc267f5 # v4.2.0 with: role-to-assume: arn:aws:iam::795746500882:role/GitHubConstellationImagePipeline aws-region: eu-central-1 diff --git a/.github/workflows/purge-main.yml b/.github/workflows/purge-main.yml index dd57947d7..92d2a547f 100644 --- a/.github/workflows/purge-main.yml +++ b/.github/workflows/purge-main.yml @@ -23,7 +23,7 @@ jobs: ref: ${{ github.head_ref }} - name: Login to AWS - uses: aws-actions/configure-aws-credentials@ececac1a45f3b08a01d2dd070d28d111c5fe6722 # v4.1.0 + uses: aws-actions/configure-aws-credentials@f24d7193d98baebaeacc7e2227925dd47cc267f5 # v4.2.0 with: role-to-assume: arn:aws:iam::795746500882:role/GithubConstellationVersionsAPIRead aws-region: eu-central-1 diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 1108d88e8..08e09da18 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -271,9 +271,9 @@ jobs: ref: ${{ needs.verify-inputs.outputs.WORKING_BRANCH }} - name: Setup Go environment - uses: actions/setup-go@0aaccfd150d50ccaeb58ebd88d36e91967a5f35b # v5.4.0 + uses: actions/setup-go@d35c59abb061a4a6fb18e82ac0862c26744d6ab5 # v5.5.0 with: - go-version: "1.24.2" + go-version: "1.24.3" cache: true - name: Build generateMeasurements tool diff --git a/.github/workflows/test-operator-codegen.yml b/.github/workflows/test-operator-codegen.yml index 0966d1933..b2f92ba7f 100644 --- a/.github/workflows/test-operator-codegen.yml +++ b/.github/workflows/test-operator-codegen.yml @@ -26,9 +26,9 @@ jobs: ref: ${{ !github.event.pull_request.head.repo.fork && github.head_ref || '' }} - name: Setup Go environment - uses: actions/setup-go@0aaccfd150d50ccaeb58ebd88d36e91967a5f35b # v5.4.0 + uses: actions/setup-go@d35c59abb061a4a6fb18e82ac0862c26744d6ab5 # v5.5.0 with: - go-version: "1.24.2" + go-version: "1.24.3" cache: true - name: Run code generation diff --git a/.github/workflows/test-tidy.yml b/.github/workflows/test-tidy.yml index a0d925840..0dcb83b4e 100644 --- a/.github/workflows/test-tidy.yml +++ b/.github/workflows/test-tidy.yml @@ -37,7 +37,7 @@ jobs: - name: Assume AWS role to upload Bazel dependencies to S3 if: startsWith(github.head_ref, 'renovate/') - uses: aws-actions/configure-aws-credentials@ececac1a45f3b08a01d2dd070d28d111c5fe6722 # v4.1.0 + uses: aws-actions/configure-aws-credentials@f24d7193d98baebaeacc7e2227925dd47cc267f5 # v4.2.0 with: role-to-assume: arn:aws:iam::795746500882:role/GithubConstellationMirrorWrite aws-region: eu-central-1 diff --git a/.github/workflows/test-unittest.yml b/.github/workflows/test-unittest.yml index 9a99831f0..84f986347 100644 --- a/.github/workflows/test-unittest.yml +++ b/.github/workflows/test-unittest.yml @@ -49,7 +49,7 @@ jobs: rm -rf awscliv2.zip aws - name: Login to AWS (IAM role) - uses: aws-actions/configure-aws-credentials@ececac1a45f3b08a01d2dd070d28d111c5fe6722 # v4.1.0 + uses: aws-actions/configure-aws-credentials@f24d7193d98baebaeacc7e2227925dd47cc267f5 # v4.2.0 with: role-to-assume: arn:aws:iam::795746500882:role/GithubActionGocoverage aws-region: eu-central-1 diff --git a/.github/workflows/update-rpms.yml b/.github/workflows/update-rpms.yml index 8a5d67cd7..b15603cef 100644 --- a/.github/workflows/update-rpms.yml +++ b/.github/workflows/update-rpms.yml @@ -18,7 +18,7 @@ jobs: token: ${{ secrets.CI_COMMIT_PUSH_PR }} - name: Assume AWS role to upload Bazel dependencies to S3 - uses: aws-actions/configure-aws-credentials@ececac1a45f3b08a01d2dd070d28d111c5fe6722 # v4.1.0 + uses: aws-actions/configure-aws-credentials@f24d7193d98baebaeacc7e2227925dd47cc267f5 # v4.2.0 with: role-to-assume: arn:aws:iam::795746500882:role/GithubConstellationMirrorWrite aws-region: eu-central-1 diff --git a/.github/workflows/versionsapi.yml b/.github/workflows/versionsapi.yml index b7e1cced3..dbc9ce77c 100644 --- a/.github/workflows/versionsapi.yml +++ b/.github/workflows/versionsapi.yml @@ -149,21 +149,21 @@ jobs: - name: Login to AWS without write access if: steps.check-rights.outputs.write == 'false' - uses: aws-actions/configure-aws-credentials@ececac1a45f3b08a01d2dd070d28d111c5fe6722 # v4.1.0 + uses: aws-actions/configure-aws-credentials@f24d7193d98baebaeacc7e2227925dd47cc267f5 # v4.2.0 with: role-to-assume: arn:aws:iam::795746500882:role/GithubConstellationVersionsAPIRead aws-region: eu-central-1 - name: Login to AWS with write access if: steps.check-rights.outputs.write == 'true' && steps.check-rights.outputs.auth == 'false' - uses: aws-actions/configure-aws-credentials@ececac1a45f3b08a01d2dd070d28d111c5fe6722 # v4.1.0 + uses: aws-actions/configure-aws-credentials@f24d7193d98baebaeacc7e2227925dd47cc267f5 # v4.2.0 with: role-to-assume: arn:aws:iam::795746500882:role/GithubConstellationVersionsAPIWrite aws-region: eu-central-1 - name: Login to AWS with write and image remove access if: steps.check-rights.outputs.write == 'true' && steps.check-rights.outputs.auth == 'true' - uses: aws-actions/configure-aws-credentials@ececac1a45f3b08a01d2dd070d28d111c5fe6722 # v4.1.0 + uses: aws-actions/configure-aws-credentials@f24d7193d98baebaeacc7e2227925dd47cc267f5 # v4.2.0 with: role-to-assume: arn:aws:iam::795746500882:role/GithubConstellationVersionsAPIRemove aws-region: eu-central-1 From 93aa194d4b80db623abc930e3e1fb9349f4d8f0d Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 14 May 2025 07:57:18 +0200 Subject: [PATCH 277/311] deps: update bufbuild/buf to v1.54.0 (#3828) * deps: update bufbuild/buf to v1.54.0 * deps: tidy all modules --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: edgelessci --- bazel/toolchains/ci_deps.bzl | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/bazel/toolchains/ci_deps.bzl b/bazel/toolchains/ci_deps.bzl index 3f3e1f1ad..f6354e6ca 100644 --- a/bazel/toolchains/ci_deps.bzl +++ b/bazel/toolchains/ci_deps.bzl @@ -270,44 +270,44 @@ def _buf_deps(): strip_prefix = "buf/bin", build_file_content = """exports_files(["buf"], visibility = ["//visibility:public"])""", urls = [ - "https://cdn.confidential.cloud/constellation/cas/sha256/2dc9793f94806f3e4b0158a36e33680e2b962be50c12a7785ccb3da00d2fb2e7", - "https://github.com/bufbuild/buf/releases/download/v1.53.0/buf-Linux-x86_64.tar.gz", + "https://cdn.confidential.cloud/constellation/cas/sha256/fa10faf16973f3861992cc2687b651350d70eafd467aea72cf0994556c2a0927", + "https://github.com/bufbuild/buf/releases/download/v1.54.0/buf-Linux-x86_64.tar.gz", ], type = "tar.gz", - sha256 = "2dc9793f94806f3e4b0158a36e33680e2b962be50c12a7785ccb3da00d2fb2e7", + sha256 = "fa10faf16973f3861992cc2687b651350d70eafd467aea72cf0994556c2a0927", ) http_archive( name = "com_github_bufbuild_buf_linux_arm64", strip_prefix = "buf/bin", build_file_content = """exports_files(["buf"], visibility = ["//visibility:public"])""", urls = [ - "https://cdn.confidential.cloud/constellation/cas/sha256/4b5a40388c6a6608c29c7961fefc97ea10585e684038b1e6f9716f2216eaf9a9", - "https://github.com/bufbuild/buf/releases/download/v1.53.0/buf-Linux-aarch64.tar.gz", + "https://cdn.confidential.cloud/constellation/cas/sha256/f41ef4431858556ece6a77662d6b9317fa4406585998cb3dffb7403b3e86713e", + "https://github.com/bufbuild/buf/releases/download/v1.54.0/buf-Linux-aarch64.tar.gz", ], type = "tar.gz", - sha256 = "4b5a40388c6a6608c29c7961fefc97ea10585e684038b1e6f9716f2216eaf9a9", + sha256 = "f41ef4431858556ece6a77662d6b9317fa4406585998cb3dffb7403b3e86713e", ) http_archive( name = "com_github_bufbuild_buf_darwin_amd64", strip_prefix = "buf/bin", build_file_content = """exports_files(["buf"], visibility = ["//visibility:public"])""", urls = [ - "https://cdn.confidential.cloud/constellation/cas/sha256/44f1c88c597694b607902adc7da5f0742511f3c379cc08058b140bcb5e8a4b11", - "https://github.com/bufbuild/buf/releases/download/v1.53.0/buf-Darwin-x86_64.tar.gz", + "https://cdn.confidential.cloud/constellation/cas/sha256/22c9836a836b867e49e9d0ef223fd934cbf2690e7400facddb9be07b8809f889", + "https://github.com/bufbuild/buf/releases/download/v1.54.0/buf-Darwin-x86_64.tar.gz", ], type = "tar.gz", - sha256 = "44f1c88c597694b607902adc7da5f0742511f3c379cc08058b140bcb5e8a4b11", + sha256 = "22c9836a836b867e49e9d0ef223fd934cbf2690e7400facddb9be07b8809f889", ) http_archive( name = "com_github_bufbuild_buf_darwin_arm64", strip_prefix = "buf/bin", build_file_content = """exports_files(["buf"], visibility = ["//visibility:public"])""", urls = [ - "https://cdn.confidential.cloud/constellation/cas/sha256/3a12862c5e27fe57e27b3c4dec6aae3e923ec626b1b443eb2310a3487066735f", - "https://github.com/bufbuild/buf/releases/download/v1.53.0/buf-Darwin-arm64.tar.gz", + "https://cdn.confidential.cloud/constellation/cas/sha256/f01f32a690efab3ef22a1c821aebc0c4bec7ca63faddbf64408d7d614e9d7f92", + "https://github.com/bufbuild/buf/releases/download/v1.54.0/buf-Darwin-arm64.tar.gz", ], type = "tar.gz", - sha256 = "3a12862c5e27fe57e27b3c4dec6aae3e923ec626b1b443eb2310a3487066735f", + sha256 = "f01f32a690efab3ef22a1c821aebc0c4bec7ca63faddbf64408d7d614e9d7f92", ) def _talos_docgen_deps(): From b6eb6eb280e2fda7d976da1ccc739312e1394aea Mon Sep 17 00:00:00 2001 From: edgelessci <71088502+edgelessci@users.noreply.github.com> Date: Wed, 14 May 2025 07:57:38 +0200 Subject: [PATCH 278/311] image: update measurements and image version (#3830) Co-authored-by: edgelessci --- .../measurements/measurements_enterprise.go | 16 ++++++++-------- internal/config/image_enterprise.go | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/internal/attestation/measurements/measurements_enterprise.go b/internal/attestation/measurements/measurements_enterprise.go index 8d2794461..9e27e1b05 100644 --- a/internal/attestation/measurements/measurements_enterprise.go +++ b/internal/attestation/measurements/measurements_enterprise.go @@ -19,14 +19,14 @@ package measurements // revive:disable:var-naming var ( - aws_AWSNitroTPM = M{0: {Expected: []byte{0x73, 0x7f, 0x76, 0x7a, 0x12, 0xf5, 0x4e, 0x70, 0xee, 0xcb, 0xc8, 0x68, 0x40, 0x11, 0x32, 0x3a, 0xe2, 0xfe, 0x2d, 0xd9, 0xf9, 0x07, 0x85, 0x57, 0x79, 0x69, 0xd7, 0xa2, 0x01, 0x3e, 0x8c, 0x12}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x54, 0xdc, 0x2c, 0x86, 0xdc, 0x84, 0xaf, 0x88, 0xa8, 0xbd, 0x1b, 0x93, 0xd7, 0xd9, 0x10, 0xa0, 0x36, 0xca, 0xd9, 0x96, 0x9d, 0x2a, 0xb8, 0x7f, 0x27, 0xfa, 0x32, 0x83, 0xb9, 0xd9, 0x61, 0x5c}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x6f, 0x76, 0xbc, 0x73, 0xfe, 0x1e, 0x31, 0xa8, 0x19, 0x86, 0x01, 0x59, 0xde, 0x9c, 0xe7, 0xfc, 0xe9, 0x86, 0x89, 0x91, 0xb6, 0xe1, 0xb0, 0xcc, 0xc8, 0x69, 0xd0, 0x29, 0xb7, 0x04, 0x56, 0x00}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x7d, 0x2a, 0xfb, 0x0e, 0xf6, 0xe9, 0x9b, 0xf9, 0xc3, 0xe4, 0x3e, 0x41, 0xdd, 0xf2, 0xd2, 0xee, 0x4e, 0xff, 0x40, 0x7b, 0x2f, 0xf1, 0x9e, 0x22, 0xa2, 0xc4, 0xcd, 0x0c, 0xd6, 0xa3, 0x08, 0x36}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - aws_AWSSEVSNP = M{0: {Expected: []byte{0xd6, 0xdf, 0x85, 0x53, 0x58, 0xf5, 0xb1, 0x0f, 0x06, 0xf0, 0xfa, 0xb3, 0xf4, 0x08, 0xad, 0x26, 0xcd, 0x16, 0x5a, 0x29, 0x49, 0xba, 0xd6, 0x9e, 0x2c, 0xc7, 0x56, 0x92, 0x52, 0x9e, 0x66, 0x2a}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x73, 0x9a, 0xb2, 0xb0, 0xb0, 0x19, 0xc0, 0x73, 0x52, 0x20, 0x1a, 0x36, 0x0d, 0x9c, 0xf4, 0xd1, 0x4d, 0x4e, 0x3a, 0x19, 0x2e, 0xd3, 0xf0, 0x9e, 0x3f, 0x85, 0x69, 0x33, 0xc9, 0xe7, 0xad, 0x24}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x5e, 0x98, 0x21, 0x3f, 0xff, 0x32, 0x6b, 0x67, 0x85, 0x7a, 0x92, 0x8b, 0xe5, 0xb8, 0xc1, 0xf6, 0x8b, 0xe0, 0x9b, 0x9b, 0xb0, 0x6c, 0xed, 0x6c, 0x5e, 0x24, 0x2a, 0x11, 0xa6, 0xca, 0xf5, 0x3e}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x5b, 0x2b, 0x8c, 0x45, 0xe0, 0xae, 0x14, 0xb2, 0xd7, 0x70, 0x66, 0xa7, 0x00, 0xb1, 0x2c, 0x33, 0x2c, 0x59, 0x8d, 0x83, 0x12, 0x15, 0x85, 0xc3, 0xc2, 0xb1, 0xd6, 0xe1, 0x82, 0x88, 0x00, 0xf2}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - azure_AzureSEVSNP = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x7f, 0xe5, 0xbe, 0xbc, 0x84, 0xdf, 0xb6, 0xcc, 0xac, 0x88, 0x2e, 0x0d, 0x94, 0x05, 0xb7, 0x0d, 0x38, 0x3a, 0x2f, 0x76, 0x90, 0x5d, 0x55, 0x09, 0xb1, 0x35, 0x17, 0x38, 0xcb, 0xb5, 0x05, 0xf5}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x08, 0xa8, 0xea, 0x18, 0xc8, 0xe4, 0x52, 0x14, 0x6d, 0xb7, 0xf1, 0xb3, 0x79, 0x4b, 0x9a, 0xb9, 0x52, 0xf8, 0xf2, 0x93, 0x03, 0xc1, 0x33, 0xf7, 0xb3, 0xf9, 0x00, 0xcf, 0xc6, 0x74, 0x2f, 0x26}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x3e, 0x4a, 0x74, 0x99, 0x78, 0xc6, 0x53, 0xd8, 0x58, 0x26, 0x40, 0x40, 0x0f, 0xf0, 0x57, 0xeb, 0x6d, 0xd2, 0xeb, 0x96, 0x6e, 0x89, 0x13, 0x5b, 0xc0, 0x00, 0xfc, 0x26, 0x65, 0x1f, 0x64, 0x34}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - azure_AzureTDX = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x26, 0xa4, 0x8c, 0xc8, 0x8a, 0x93, 0x60, 0x7d, 0x8f, 0x68, 0x07, 0xf7, 0x56, 0xca, 0x69, 0xce, 0x18, 0x17, 0x23, 0x3e, 0x33, 0x72, 0x58, 0x37, 0x5a, 0x9c, 0x63, 0x0b, 0x8e, 0x32, 0xc2, 0xe9}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x09, 0xb4, 0xbd, 0x8d, 0x08, 0x77, 0x1a, 0xc7, 0x84, 0x83, 0x8f, 0x36, 0xe8, 0x9f, 0x87, 0x57, 0xad, 0xf7, 0x52, 0x1e, 0xe2, 0x97, 0x45, 0x60, 0xbd, 0x5a, 0x00, 0xd8, 0xf4, 0x94, 0x9f, 0x08}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x21, 0x6b, 0xbc, 0x85, 0x53, 0x38, 0x75, 0xea, 0xef, 0x5f, 0xb0, 0xd6, 0x6a, 0x8a, 0xd0, 0x36, 0xe2, 0x76, 0xe1, 0xfb, 0xc1, 0xed, 0x12, 0xc2, 0xe5, 0xa1, 0x8a, 0xa8, 0x4f, 0x99, 0x4a, 0x74}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + aws_AWSNitroTPM = M{0: {Expected: []byte{0x73, 0x7f, 0x76, 0x7a, 0x12, 0xf5, 0x4e, 0x70, 0xee, 0xcb, 0xc8, 0x68, 0x40, 0x11, 0x32, 0x3a, 0xe2, 0xfe, 0x2d, 0xd9, 0xf9, 0x07, 0x85, 0x57, 0x79, 0x69, 0xd7, 0xa2, 0x01, 0x3e, 0x8c, 0x12}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xb3, 0x6d, 0x21, 0xc6, 0x46, 0x38, 0xf5, 0xc2, 0x1d, 0xb2, 0x8a, 0x77, 0x9c, 0xa4, 0x27, 0x68, 0x36, 0x60, 0x95, 0xdf, 0x47, 0xca, 0x13, 0x67, 0x03, 0xde, 0x7e, 0x67, 0x98, 0x86, 0x9d, 0x46}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xc5, 0x53, 0x68, 0x16, 0xc8, 0x10, 0x29, 0xb7, 0xbd, 0x18, 0x01, 0x9d, 0xb0, 0x14, 0x0c, 0x69, 0x86, 0xd7, 0xc5, 0x2a, 0xd6, 0x32, 0xf7, 0xfe, 0x15, 0x67, 0x6e, 0xd4, 0x72, 0xf4, 0xec, 0x14}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x83, 0xa8, 0x89, 0xd9, 0xe1, 0xc3, 0x2b, 0x06, 0x42, 0x9a, 0x74, 0x17, 0xc8, 0x23, 0xf3, 0x04, 0x67, 0x7e, 0xb8, 0xb3, 0xfc, 0xf2, 0x1c, 0x94, 0xc9, 0x33, 0x93, 0x14, 0xe7, 0x91, 0x2e, 0xd2}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + aws_AWSSEVSNP = M{0: {Expected: []byte{0xd6, 0xdf, 0x85, 0x53, 0x58, 0xf5, 0xb1, 0x0f, 0x06, 0xf0, 0xfa, 0xb3, 0xf4, 0x08, 0xad, 0x26, 0xcd, 0x16, 0x5a, 0x29, 0x49, 0xba, 0xd6, 0x9e, 0x2c, 0xc7, 0x56, 0x92, 0x52, 0x9e, 0x66, 0x2a}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xc0, 0x19, 0x07, 0x25, 0x9e, 0x7f, 0x0d, 0xb3, 0xc8, 0xaa, 0x42, 0xc1, 0x5d, 0xae, 0x82, 0xe8, 0xcf, 0x12, 0xb1, 0x8e, 0xe0, 0x8e, 0x01, 0x9c, 0x33, 0xf5, 0xef, 0x56, 0x44, 0xe6, 0xd6, 0x58}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x0c, 0x96, 0x03, 0x9f, 0x53, 0x0e, 0x8c, 0xd6, 0xa0, 0xe5, 0xed, 0x31, 0xbc, 0x13, 0xed, 0xba, 0x02, 0xd7, 0x57, 0x04, 0xfb, 0xbf, 0x08, 0x52, 0xf7, 0x88, 0xd8, 0x91, 0xd2, 0x01, 0xa4, 0x01}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xa3, 0xab, 0xda, 0x5d, 0x6f, 0xec, 0x95, 0xdc, 0xb0, 0x9a, 0x70, 0x74, 0x77, 0x09, 0x64, 0x08, 0xbc, 0xb1, 0xdc, 0xa1, 0xbe, 0xd0, 0xaf, 0xe2, 0xb9, 0xbf, 0xc3, 0x2c, 0x2b, 0x31, 0xff, 0x67}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + azure_AzureSEVSNP = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xbc, 0x25, 0xf5, 0xc1, 0xc2, 0x23, 0xab, 0x54, 0xee, 0xd0, 0xa2, 0x29, 0x62, 0xcd, 0xdc, 0xa4, 0x76, 0x9e, 0xe9, 0x03, 0xd9, 0x61, 0x0f, 0xb1, 0x0d, 0x55, 0xca, 0xf7, 0x40, 0x51, 0x09, 0x22}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xec, 0xe5, 0xcd, 0xa3, 0x11, 0xab, 0xca, 0xbb, 0xa9, 0xc0, 0xec, 0xae, 0x5d, 0xea, 0x5a, 0x35, 0x49, 0xec, 0xc4, 0x2d, 0x7c, 0x39, 0x5f, 0x31, 0xe9, 0x94, 0xd0, 0x17, 0x30, 0x1a, 0xe3, 0xb9}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x5f, 0x8f, 0x35, 0xa1, 0xd3, 0xed, 0x63, 0x97, 0x0a, 0xad, 0x01, 0x8d, 0xea, 0x08, 0x77, 0xb8, 0xcd, 0x37, 0xb4, 0xb5, 0x7c, 0xe2, 0x2a, 0x2b, 0x0a, 0x0e, 0xe6, 0x16, 0xd0, 0x10, 0x33, 0x1d}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + azure_AzureTDX = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xee, 0x5a, 0x25, 0x61, 0x5f, 0xab, 0x89, 0x54, 0xd6, 0x09, 0xca, 0x17, 0x8d, 0x01, 0x6c, 0x9e, 0x51, 0x6c, 0x37, 0xc7, 0xd7, 0x05, 0x95, 0xad, 0x1b, 0xf8, 0x7b, 0xef, 0x1b, 0x59, 0xd8, 0x17}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x7b, 0x75, 0xba, 0x53, 0x88, 0x81, 0x7a, 0x85, 0x66, 0xf2, 0xa8, 0x45, 0xc8, 0x61, 0x85, 0xa7, 0xd1, 0x9f, 0x6a, 0xc2, 0x53, 0x3e, 0xf8, 0xfa, 0xa1, 0x12, 0x02, 0x67, 0x91, 0x05, 0x84, 0x90}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xf7, 0x31, 0x0d, 0x08, 0x37, 0x3c, 0xd8, 0x68, 0x40, 0x01, 0x5a, 0x33, 0xbd, 0x5c, 0x07, 0x66, 0x81, 0x3e, 0x4a, 0xca, 0x94, 0x42, 0x5b, 0x19, 0x35, 0x7d, 0x06, 0x91, 0x3c, 0x79, 0xbb, 0xb6}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} azure_AzureTrustedLaunch M - gcp_GCPSEVES = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x79, 0xfc, 0xe7, 0x97, 0xcf, 0xa7, 0x4e, 0xd1, 0x5e, 0x42, 0x00, 0x74, 0x28, 0x6c, 0x61, 0x78, 0x42, 0x99, 0x5a, 0x83, 0xd8, 0x33, 0x93, 0x9c, 0x56, 0x41, 0x8a, 0xba, 0xe1, 0xe0, 0xaf, 0x5d}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x66, 0x33, 0xe1, 0xc9, 0xb1, 0x75, 0x46, 0x6d, 0xed, 0xc1, 0x0e, 0xa0, 0x83, 0xdf, 0x93, 0x77, 0xb3, 0xe9, 0xc3, 0xa3, 0x54, 0x00, 0x33, 0xe2, 0x4b, 0x35, 0x48, 0x61, 0x25, 0x3c, 0x43, 0x1e}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xb0, 0x07, 0xb6, 0x7c, 0x2e, 0x81, 0xba, 0xf5, 0xb0, 0x04, 0x18, 0x9d, 0x08, 0xfa, 0xf0, 0x9b, 0xeb, 0xd9, 0x46, 0x59, 0x55, 0xa2, 0x1b, 0x2b, 0x30, 0x7d, 0xe5, 0x48, 0x50, 0x01, 0x94, 0x4b}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - gcp_GCPSEVSNP = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xc2, 0x77, 0x1b, 0x97, 0xbe, 0xf0, 0xe9, 0x7b, 0x63, 0x6f, 0x96, 0xad, 0x64, 0x93, 0x0e, 0x28, 0x2f, 0x3c, 0xce, 0x91, 0x6f, 0x3f, 0xae, 0x3d, 0xd6, 0xb8, 0xed, 0x21, 0xf7, 0x75, 0xd3, 0xd8}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x28, 0x3b, 0x0e, 0x0a, 0x94, 0x13, 0xfa, 0x09, 0x19, 0x02, 0x83, 0x01, 0x90, 0x02, 0xe9, 0xb9, 0x96, 0x15, 0x03, 0x65, 0x55, 0x93, 0xa7, 0x70, 0xe7, 0x62, 0xb9, 0x98, 0x66, 0x9f, 0x0a, 0xac}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xa4, 0xe4, 0x8e, 0x8e, 0xae, 0xd7, 0x8b, 0x1a, 0x40, 0x99, 0x1e, 0x77, 0x56, 0x80, 0x5d, 0xa7, 0x7f, 0xd5, 0x78, 0xcc, 0xec, 0xad, 0xa0, 0x04, 0xa0, 0x7a, 0xb3, 0x35, 0x78, 0xfd, 0x2b, 0x77}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - openstack_QEMUVTPM = M{4: {Expected: []byte{0xa8, 0x30, 0x65, 0xd3, 0xc2, 0xbf, 0x9c, 0x0c, 0x38, 0x62, 0xc9, 0xf6, 0x31, 0xa5, 0x51, 0xb8, 0xc9, 0x3f, 0x0a, 0x6f, 0x41, 0xa4, 0xec, 0xc2, 0x12, 0xf8, 0xc1, 0xb0, 0x1c, 0x74, 0x52, 0xd5}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x4f, 0xfe, 0xf9, 0xb3, 0x7e, 0xa8, 0x5a, 0xa2, 0x34, 0xab, 0x22, 0x04, 0x00, 0xc0, 0x31, 0xc2, 0xc3, 0xe0, 0xe9, 0xf1, 0xc4, 0x08, 0x67, 0x18, 0x96, 0x52, 0xb0, 0x16, 0x11, 0xd3, 0x68, 0x0f}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xca, 0x4b, 0x00, 0xcb, 0x85, 0xb7, 0x26, 0x31, 0x49, 0xc8, 0x7d, 0x5e, 0xd2, 0xaf, 0xcc, 0xe6, 0x8f, 0x10, 0x26, 0x90, 0x65, 0xde, 0x74, 0xcf, 0xc8, 0x04, 0x72, 0x00, 0x9d, 0xab, 0x68, 0x26}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + gcp_GCPSEVES = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xe3, 0x17, 0x6b, 0xea, 0xaa, 0x3a, 0xfc, 0x44, 0x48, 0xc0, 0x36, 0x99, 0x41, 0x65, 0xec, 0xf3, 0xc5, 0x0c, 0xda, 0x16, 0xbf, 0x6e, 0x92, 0xb1, 0xae, 0xdc, 0x0f, 0x6b, 0x79, 0xa9, 0x7f, 0x16}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xe6, 0xb8, 0xc0, 0xa3, 0x2e, 0x3e, 0xe8, 0x67, 0xf8, 0xc8, 0xb9, 0x28, 0xb0, 0x49, 0xeb, 0x1c, 0x22, 0x47, 0xd3, 0xd1, 0x75, 0xc5, 0x23, 0xad, 0x4a, 0x7d, 0x1c, 0xa0, 0xee, 0x44, 0x46, 0xfe}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x95, 0xa9, 0x8f, 0x81, 0x2a, 0xaf, 0x8a, 0xdd, 0x5e, 0x06, 0x97, 0x3f, 0x0f, 0xe0, 0x7b, 0x50, 0xc5, 0x98, 0xfd, 0xd7, 0xba, 0xb8, 0x1a, 0xf6, 0xab, 0x0b, 0x25, 0x71, 0x64, 0xf0, 0x7d, 0x33}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + gcp_GCPSEVSNP = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xd4, 0x3b, 0x2c, 0xb9, 0x0d, 0x39, 0xac, 0xa4, 0xa1, 0x3c, 0xe3, 0x71, 0xf3, 0x02, 0x4a, 0x21, 0x2b, 0xbf, 0xfd, 0xe1, 0x5c, 0xab, 0xb9, 0xc4, 0x0a, 0x3c, 0x02, 0x50, 0xbb, 0xcb, 0x05, 0x7b}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x34, 0xda, 0x89, 0xb7, 0x24, 0x1e, 0x0e, 0xd5, 0x59, 0x82, 0xc9, 0x4b, 0x6d, 0x09, 0x66, 0xa4, 0x38, 0xaf, 0xcc, 0xf8, 0x1a, 0x8c, 0xf6, 0x4b, 0x92, 0x9e, 0xe7, 0x41, 0xa5, 0xb4, 0x36, 0x6d}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x02, 0x18, 0xc4, 0x3d, 0x75, 0x58, 0xf1, 0x90, 0x1e, 0x45, 0x70, 0x84, 0xe2, 0x19, 0xe9, 0xbb, 0xd5, 0x95, 0x1f, 0x4c, 0x84, 0x5b, 0x3f, 0xe5, 0xa6, 0xa7, 0x30, 0xeb, 0xfa, 0x25, 0x32, 0xd3}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + openstack_QEMUVTPM = M{4: {Expected: []byte{0x1d, 0x89, 0x05, 0xd1, 0x10, 0xc0, 0x34, 0xc3, 0xad, 0xc8, 0x3d, 0x36, 0x14, 0xca, 0x81, 0x6f, 0x4a, 0x0b, 0x7e, 0x60, 0xd3, 0xc0, 0xfc, 0x41, 0xb7, 0x9c, 0x67, 0xa1, 0x79, 0x16, 0x53, 0xcb}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xfd, 0xfe, 0xb2, 0xfd, 0x64, 0x8d, 0x19, 0x1e, 0x8d, 0x01, 0x2a, 0x50, 0x52, 0x40, 0x55, 0x2c, 0x32, 0xe4, 0xd8, 0x6b, 0x30, 0xa9, 0xc7, 0x8d, 0x34, 0x0d, 0x00, 0xda, 0x8e, 0x72, 0xb9, 0x3a}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x35, 0x17, 0xc8, 0x2a, 0x07, 0xf3, 0x26, 0x82, 0xa9, 0x11, 0xbf, 0xa8, 0xc2, 0x8c, 0xdd, 0x16, 0x43, 0xdd, 0x21, 0x7c, 0x06, 0x78, 0x10, 0x52, 0x85, 0xf4, 0xec, 0x0d, 0x1a, 0x84, 0xba, 0x2d}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} qemu_QEMUTDX M - qemu_QEMUVTPM = M{4: {Expected: []byte{0xe7, 0x61, 0x78, 0x2a, 0xe5, 0xb8, 0xde, 0xb9, 0x81, 0x2a, 0x8f, 0x1c, 0x26, 0xac, 0xe0, 0x18, 0x78, 0xfd, 0x76, 0x8d, 0xdf, 0xc7, 0x4d, 0x7b, 0x4a, 0xfb, 0xee, 0xa0, 0x01, 0x6c, 0xbb, 0x39}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xfc, 0x1e, 0x0c, 0x38, 0xa5, 0x07, 0x4c, 0x39, 0xc8, 0x54, 0x77, 0x26, 0x76, 0x4e, 0xcd, 0x00, 0xcd, 0x9f, 0xfd, 0x37, 0x77, 0xf2, 0x6f, 0x4e, 0x67, 0x07, 0xaa, 0x26, 0x43, 0xaa, 0x4a, 0xe6}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x57, 0xf2, 0x5a, 0x9d, 0xaa, 0x99, 0x54, 0x7a, 0xa4, 0x14, 0x87, 0xa3, 0x0b, 0x05, 0xe6, 0xc3, 0x57, 0x6c, 0x3d, 0xa2, 0x55, 0x84, 0xdb, 0x19, 0x31, 0xd1, 0xea, 0x62, 0xf7, 0x71, 0x5c, 0xdb}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + qemu_QEMUVTPM = M{4: {Expected: []byte{0xae, 0x00, 0x7e, 0x18, 0x37, 0x60, 0x33, 0x2e, 0xbb, 0x45, 0x35, 0x64, 0x6f, 0x5d, 0xa6, 0x9f, 0xff, 0xe4, 0xb9, 0x52, 0x54, 0x9c, 0x77, 0x61, 0x10, 0xa6, 0x07, 0xf0, 0xbe, 0xb7, 0x61, 0xee}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x8f, 0xe7, 0x72, 0xdb, 0xe9, 0xc9, 0x1f, 0x45, 0x4f, 0x2e, 0xcc, 0x97, 0x98, 0x6d, 0x51, 0x69, 0x90, 0x16, 0x21, 0x40, 0x57, 0x75, 0x33, 0xcb, 0x7e, 0xed, 0xfb, 0x11, 0xd1, 0x99, 0xe3, 0x75}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x5d, 0x58, 0xd0, 0x6d, 0xf4, 0x70, 0xfa, 0xbf, 0x2f, 0xec, 0x79, 0xa7, 0x22, 0x8c, 0x13, 0x21, 0xc3, 0x71, 0x75, 0xa0, 0x58, 0x3d, 0xcb, 0xf6, 0x63, 0x59, 0x09, 0x83, 0xf3, 0xa3, 0xe8, 0x49}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} ) diff --git a/internal/config/image_enterprise.go b/internal/config/image_enterprise.go index d936fe24f..dc1246ae6 100644 --- a/internal/config/image_enterprise.go +++ b/internal/config/image_enterprise.go @@ -10,5 +10,5 @@ package config const ( // defaultImage is the default image to use. - defaultImage = "ref/main/stream/nightly/v2.24.0-pre.0.20250508140403-8ec3bb86cf98" + defaultImage = "ref/main/stream/nightly/v2.24.0-pre.0.20250513083104-b566e98b2d47" ) From e03aa0606e27790e0468f57fab21fa493ea0ba07 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 14 May 2025 10:39:44 +0200 Subject: [PATCH 279/311] deps: update Terraform dependencies (#3831) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .../vpn/on-prem-terraform/.terraform.lock.hcl | 48 +++++++-------- dev-docs/howto/vpn/on-prem-terraform/main.tf | 2 +- .../azure-terraform/.terraform.lock.hcl | 48 +++++++-------- .../miniconstellation/azure-terraform/main.tf | 2 +- e2e/miniconstellation/.terraform.lock.hcl | 48 +++++++-------- e2e/miniconstellation/main.tf | 2 +- .../examples/full/aws/main.tf | 2 +- .../examples/full/azure/main.tf | 2 +- .../examples/full/gcp/main.tf | 2 +- .../examples/full/stackit/main.tf | 2 +- .../infrastructure/azure/.terraform.lock.hcl | 48 +++++++-------- terraform/infrastructure/azure/main.tf | 2 +- .../modules/load_balancer_backend/main.tf | 2 +- .../azure/modules/scale_set/main.tf | 2 +- .../infrastructure/gcp/.terraform.lock.hcl | 48 +++++++-------- terraform/infrastructure/gcp/main.tf | 2 +- .../gcp/modules/instance_group/main.tf | 2 +- .../modules/internal_load_balancer/main.tf | 2 +- .../gcp/modules/jump_host/main.tf | 2 +- .../gcp/modules/loadbalancer/main.tf | 2 +- .../iam/azure/.terraform.lock.hcl | 48 +++++++-------- terraform/infrastructure/iam/azure/main.tf | 2 +- .../iam/gcp/.terraform.lock.hcl | 48 +++++++-------- terraform/infrastructure/iam/gcp/main.tf | 2 +- .../openstack/.terraform.lock.hcl | 60 +++++++++---------- terraform/infrastructure/openstack/main.tf | 2 +- .../modules/stackit_loadbalancer/main.tf | 2 +- 27 files changed, 217 insertions(+), 217 deletions(-) diff --git a/dev-docs/howto/vpn/on-prem-terraform/.terraform.lock.hcl b/dev-docs/howto/vpn/on-prem-terraform/.terraform.lock.hcl index 726e0edba..832939064 100644 --- a/dev-docs/howto/vpn/on-prem-terraform/.terraform.lock.hcl +++ b/dev-docs/howto/vpn/on-prem-terraform/.terraform.lock.hcl @@ -2,31 +2,31 @@ # Manual edits may be lost in future updates. provider "registry.terraform.io/hashicorp/azurerm" { - version = "4.27.0" - constraints = "4.27.0" + version = "4.28.0" + constraints = "4.28.0" hashes = [ - "h1:/siiXbMpe2dyybB+a+3sglgC0fqgcwTIbpQbOTg6hnw=", - "h1:2LGw0R82Sed+v5O3+GKLBP/s/wB+rwjG0hGMeW07Mb0=", - "h1:2fs47aLDaEm93ANXXVRdTjlbUBmFBZRsFjyshKoPE3o=", - "h1:LGcjQ6+b+1am/E3u4N2G2+n3yVZrEsjW8DVQ4rMiWCs=", - "h1:ZNq+aXF3EFrQTaO1lxTZfGQhD/9nA1tcFN+HCx9jPGc=", - "h1:ammVs7Gcf8CxMZb/rjvmE3/YuW28DZ34BoWqMq9nvcQ=", - "h1:blf243zIVL7XojJI5rjyMXBwR4cjq4QcyRtIDrSanQs=", - "h1:hSh710nvwI0hStJ+iW9y6YiVKt8aUjOBWb3oshjlQ4M=", - "h1:hmAzHk4XVbrGQ5iJJj1QdFx0aWNW9Hjh+GIE6S8G5I8=", - "h1:nvIa9Z9GdI3/J7U4oMR2w/h/JZ66M1ozUPh/jHn5pXU=", - "h1:sVv383rmZlQYdIPkdSjbTGPi5Yu/Bxm/qRXZUYqvWcg=", - "zh:0c69edea1995bd3bd9e61980757169c35bf22281b660b5c755b6cb13d08d29d2", - "zh:25b86bf7b9678371d8573983954c571696f3e64a3967133be3b835da36307106", - "zh:49921cff4f26a49bafada60cd07dabb52c5eb35231059ed928a4f4722e269c82", - "zh:4b986166531f9fd1289f01d8220519443e74888a21da512c1b841b006dad6215", - "zh:53fb65b2ca4df637f03e4748a100a7d7fc77249e307c03e294d6259cec0310f6", - "zh:5c0d021a387ca4e2a5a01da009746a08c45f08e971c10d9bda54539d7264d671", - "zh:600043f2b20dc5a45275e43f175c19fe8b6e8e9557a0c884aef018f1f63de90e", - "zh:a0284f6f38912f67bb4cb7829fda3fa75be81fea6a9b21119965c2a839430092", - "zh:a7ac0576e2069ef77557042c6b5157ded364fbd355b2f9bf7f5441622424086e", - "zh:c5db0bcafe986868e28cc6225b68b2d1cf4bf631939d260ca845f17a9aa1677d", - "zh:ce620c0eb71b1fdd925828b30cf232a869abccf1c459180f2f991c4166315251", + "h1:9d1K3ixylgQjb0pnauzfSde4Ov18dAU4xIJI67IsClk=", + "h1:TblPrHpizApX/fMAvBkliFH9+h9ZkztI0MgjIKxvkt4=", + "h1:UEBGe47w8ed89mKtiO/wvbXmvg46ctgNtjExwoABG0w=", + "h1:Y3P2tfRDRogYuKQBbRWBBWye51u0/O+KlW8XQXMPIAc=", + "h1:b/Lys2QZPazq5wiaTuEvqptyesakJtlo+jtMlNx/YCU=", + "h1:b7rIhedcBt9s6RBnyv4f1F2qrExPFEoGw89PvV4TFZY=", + "h1:iBqZB8RIuUiCP8Z0YHGJbZ0ismLAJVdievq/dwmQuw0=", + "h1:vjvQjYMNNEwVKEnfMWRNLPzfuq7PugOM1Fqia07X2Mo=", + "h1:wQm1FmPs46Iqb+lOhZfBuOnzjUvQdCOgQtEZi6Y1FzU=", + "h1:xS+Np3D2SB8BdyXPPDTUEogBTLHocUr1OsJ3br4G4eU=", + "h1:yK6rbNL1Eft/AEStzzxfbxW5R3iFNEKi0HySqedehHg=", + "zh:1bacb9be85f095b1fa99cf465f01ad4f462389a862d8b302ea6239f0ab891884", + "zh:23626c2ee394eb5640565e8814216bc6a9774fde2705bcb8a7f84207e395ec3b", + "zh:391db081c4f17111196b3cc259b68cdb7faf2e8a775f3d3c7589bdd79b3f20cb", + "zh:534ca243c67f9d1051cd44f5eb8909dbe67ee9285b0cfdf5642aa52bad9fe457", + "zh:59a642160e20a792d306761f4173184adfe12a43bdf620be32399ac9fc62c452", + "zh:974d792562506d0a1d7ba2099219255ba1bfd77801afe7d37b6e77926d41f802", + "zh:a9abf9dad2b77be300fa25d01fb02d6a49e4c3be3459bc236d721c9d9d9af738", + "zh:aa3c397b8c011c1fd7ae99274bcdd260ab766025b558249b90eb78fe40f60576", + "zh:c83e1bdf8649cd6b45cd7ae21ea4e699e0a33efdd6451e0f8ef0b056477a8b67", + "zh:d5a55a03478091dba6d3d3c857477353b268ebf4549ca60e777ddb34cdd50144", + "zh:da8c354a28b568fa5f337751140a8918b1aa0103175ae0c03a30f621b1a99076", "zh:f569b65999264a9416862bca5cd2a6177d94ccb0424f3a4ef424428912b9cb3c", ] } diff --git a/dev-docs/howto/vpn/on-prem-terraform/main.tf b/dev-docs/howto/vpn/on-prem-terraform/main.tf index 28c564b3b..9b9f08bbb 100644 --- a/dev-docs/howto/vpn/on-prem-terraform/main.tf +++ b/dev-docs/howto/vpn/on-prem-terraform/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { azurerm = { source = "hashicorp/azurerm" - version = "4.27.0" + version = "4.28.0" } random = { source = "hashicorp/random" diff --git a/dev-docs/miniconstellation/azure-terraform/.terraform.lock.hcl b/dev-docs/miniconstellation/azure-terraform/.terraform.lock.hcl index 5c4ef5fba..66b457a5c 100644 --- a/dev-docs/miniconstellation/azure-terraform/.terraform.lock.hcl +++ b/dev-docs/miniconstellation/azure-terraform/.terraform.lock.hcl @@ -2,31 +2,31 @@ # Manual edits may be lost in future updates. provider "registry.terraform.io/hashicorp/azurerm" { - version = "4.27.0" - constraints = "4.27.0" + version = "4.28.0" + constraints = "4.28.0" hashes = [ - "h1:/siiXbMpe2dyybB+a+3sglgC0fqgcwTIbpQbOTg6hnw=", - "h1:2LGw0R82Sed+v5O3+GKLBP/s/wB+rwjG0hGMeW07Mb0=", - "h1:2fs47aLDaEm93ANXXVRdTjlbUBmFBZRsFjyshKoPE3o=", - "h1:LGcjQ6+b+1am/E3u4N2G2+n3yVZrEsjW8DVQ4rMiWCs=", - "h1:ZNq+aXF3EFrQTaO1lxTZfGQhD/9nA1tcFN+HCx9jPGc=", - "h1:ammVs7Gcf8CxMZb/rjvmE3/YuW28DZ34BoWqMq9nvcQ=", - "h1:blf243zIVL7XojJI5rjyMXBwR4cjq4QcyRtIDrSanQs=", - "h1:hSh710nvwI0hStJ+iW9y6YiVKt8aUjOBWb3oshjlQ4M=", - "h1:hmAzHk4XVbrGQ5iJJj1QdFx0aWNW9Hjh+GIE6S8G5I8=", - "h1:nvIa9Z9GdI3/J7U4oMR2w/h/JZ66M1ozUPh/jHn5pXU=", - "h1:sVv383rmZlQYdIPkdSjbTGPi5Yu/Bxm/qRXZUYqvWcg=", - "zh:0c69edea1995bd3bd9e61980757169c35bf22281b660b5c755b6cb13d08d29d2", - "zh:25b86bf7b9678371d8573983954c571696f3e64a3967133be3b835da36307106", - "zh:49921cff4f26a49bafada60cd07dabb52c5eb35231059ed928a4f4722e269c82", - "zh:4b986166531f9fd1289f01d8220519443e74888a21da512c1b841b006dad6215", - "zh:53fb65b2ca4df637f03e4748a100a7d7fc77249e307c03e294d6259cec0310f6", - "zh:5c0d021a387ca4e2a5a01da009746a08c45f08e971c10d9bda54539d7264d671", - "zh:600043f2b20dc5a45275e43f175c19fe8b6e8e9557a0c884aef018f1f63de90e", - "zh:a0284f6f38912f67bb4cb7829fda3fa75be81fea6a9b21119965c2a839430092", - "zh:a7ac0576e2069ef77557042c6b5157ded364fbd355b2f9bf7f5441622424086e", - "zh:c5db0bcafe986868e28cc6225b68b2d1cf4bf631939d260ca845f17a9aa1677d", - "zh:ce620c0eb71b1fdd925828b30cf232a869abccf1c459180f2f991c4166315251", + "h1:9d1K3ixylgQjb0pnauzfSde4Ov18dAU4xIJI67IsClk=", + "h1:TblPrHpizApX/fMAvBkliFH9+h9ZkztI0MgjIKxvkt4=", + "h1:UEBGe47w8ed89mKtiO/wvbXmvg46ctgNtjExwoABG0w=", + "h1:Y3P2tfRDRogYuKQBbRWBBWye51u0/O+KlW8XQXMPIAc=", + "h1:b/Lys2QZPazq5wiaTuEvqptyesakJtlo+jtMlNx/YCU=", + "h1:b7rIhedcBt9s6RBnyv4f1F2qrExPFEoGw89PvV4TFZY=", + "h1:iBqZB8RIuUiCP8Z0YHGJbZ0ismLAJVdievq/dwmQuw0=", + "h1:vjvQjYMNNEwVKEnfMWRNLPzfuq7PugOM1Fqia07X2Mo=", + "h1:wQm1FmPs46Iqb+lOhZfBuOnzjUvQdCOgQtEZi6Y1FzU=", + "h1:xS+Np3D2SB8BdyXPPDTUEogBTLHocUr1OsJ3br4G4eU=", + "h1:yK6rbNL1Eft/AEStzzxfbxW5R3iFNEKi0HySqedehHg=", + "zh:1bacb9be85f095b1fa99cf465f01ad4f462389a862d8b302ea6239f0ab891884", + "zh:23626c2ee394eb5640565e8814216bc6a9774fde2705bcb8a7f84207e395ec3b", + "zh:391db081c4f17111196b3cc259b68cdb7faf2e8a775f3d3c7589bdd79b3f20cb", + "zh:534ca243c67f9d1051cd44f5eb8909dbe67ee9285b0cfdf5642aa52bad9fe457", + "zh:59a642160e20a792d306761f4173184adfe12a43bdf620be32399ac9fc62c452", + "zh:974d792562506d0a1d7ba2099219255ba1bfd77801afe7d37b6e77926d41f802", + "zh:a9abf9dad2b77be300fa25d01fb02d6a49e4c3be3459bc236d721c9d9d9af738", + "zh:aa3c397b8c011c1fd7ae99274bcdd260ab766025b558249b90eb78fe40f60576", + "zh:c83e1bdf8649cd6b45cd7ae21ea4e699e0a33efdd6451e0f8ef0b056477a8b67", + "zh:d5a55a03478091dba6d3d3c857477353b268ebf4549ca60e777ddb34cdd50144", + "zh:da8c354a28b568fa5f337751140a8918b1aa0103175ae0c03a30f621b1a99076", "zh:f569b65999264a9416862bca5cd2a6177d94ccb0424f3a4ef424428912b9cb3c", ] } diff --git a/dev-docs/miniconstellation/azure-terraform/main.tf b/dev-docs/miniconstellation/azure-terraform/main.tf index 7bf5669d2..23dbada00 100644 --- a/dev-docs/miniconstellation/azure-terraform/main.tf +++ b/dev-docs/miniconstellation/azure-terraform/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { azurerm = { source = "hashicorp/azurerm" - version = "4.27.0" + version = "4.28.0" } random = { source = "hashicorp/random" diff --git a/e2e/miniconstellation/.terraform.lock.hcl b/e2e/miniconstellation/.terraform.lock.hcl index 055f3180e..d59c23b7a 100644 --- a/e2e/miniconstellation/.terraform.lock.hcl +++ b/e2e/miniconstellation/.terraform.lock.hcl @@ -2,31 +2,31 @@ # Manual edits may be lost in future updates. provider "registry.terraform.io/hashicorp/azurerm" { - version = "4.27.0" - constraints = "4.27.0" + version = "4.28.0" + constraints = "4.28.0" hashes = [ - "h1:/siiXbMpe2dyybB+a+3sglgC0fqgcwTIbpQbOTg6hnw=", - "h1:2LGw0R82Sed+v5O3+GKLBP/s/wB+rwjG0hGMeW07Mb0=", - "h1:2fs47aLDaEm93ANXXVRdTjlbUBmFBZRsFjyshKoPE3o=", - "h1:LGcjQ6+b+1am/E3u4N2G2+n3yVZrEsjW8DVQ4rMiWCs=", - "h1:ZNq+aXF3EFrQTaO1lxTZfGQhD/9nA1tcFN+HCx9jPGc=", - "h1:ammVs7Gcf8CxMZb/rjvmE3/YuW28DZ34BoWqMq9nvcQ=", - "h1:blf243zIVL7XojJI5rjyMXBwR4cjq4QcyRtIDrSanQs=", - "h1:hSh710nvwI0hStJ+iW9y6YiVKt8aUjOBWb3oshjlQ4M=", - "h1:hmAzHk4XVbrGQ5iJJj1QdFx0aWNW9Hjh+GIE6S8G5I8=", - "h1:nvIa9Z9GdI3/J7U4oMR2w/h/JZ66M1ozUPh/jHn5pXU=", - "h1:sVv383rmZlQYdIPkdSjbTGPi5Yu/Bxm/qRXZUYqvWcg=", - "zh:0c69edea1995bd3bd9e61980757169c35bf22281b660b5c755b6cb13d08d29d2", - "zh:25b86bf7b9678371d8573983954c571696f3e64a3967133be3b835da36307106", - "zh:49921cff4f26a49bafada60cd07dabb52c5eb35231059ed928a4f4722e269c82", - "zh:4b986166531f9fd1289f01d8220519443e74888a21da512c1b841b006dad6215", - "zh:53fb65b2ca4df637f03e4748a100a7d7fc77249e307c03e294d6259cec0310f6", - "zh:5c0d021a387ca4e2a5a01da009746a08c45f08e971c10d9bda54539d7264d671", - "zh:600043f2b20dc5a45275e43f175c19fe8b6e8e9557a0c884aef018f1f63de90e", - "zh:a0284f6f38912f67bb4cb7829fda3fa75be81fea6a9b21119965c2a839430092", - "zh:a7ac0576e2069ef77557042c6b5157ded364fbd355b2f9bf7f5441622424086e", - "zh:c5db0bcafe986868e28cc6225b68b2d1cf4bf631939d260ca845f17a9aa1677d", - "zh:ce620c0eb71b1fdd925828b30cf232a869abccf1c459180f2f991c4166315251", + "h1:9d1K3ixylgQjb0pnauzfSde4Ov18dAU4xIJI67IsClk=", + "h1:TblPrHpizApX/fMAvBkliFH9+h9ZkztI0MgjIKxvkt4=", + "h1:UEBGe47w8ed89mKtiO/wvbXmvg46ctgNtjExwoABG0w=", + "h1:Y3P2tfRDRogYuKQBbRWBBWye51u0/O+KlW8XQXMPIAc=", + "h1:b/Lys2QZPazq5wiaTuEvqptyesakJtlo+jtMlNx/YCU=", + "h1:b7rIhedcBt9s6RBnyv4f1F2qrExPFEoGw89PvV4TFZY=", + "h1:iBqZB8RIuUiCP8Z0YHGJbZ0ismLAJVdievq/dwmQuw0=", + "h1:vjvQjYMNNEwVKEnfMWRNLPzfuq7PugOM1Fqia07X2Mo=", + "h1:wQm1FmPs46Iqb+lOhZfBuOnzjUvQdCOgQtEZi6Y1FzU=", + "h1:xS+Np3D2SB8BdyXPPDTUEogBTLHocUr1OsJ3br4G4eU=", + "h1:yK6rbNL1Eft/AEStzzxfbxW5R3iFNEKi0HySqedehHg=", + "zh:1bacb9be85f095b1fa99cf465f01ad4f462389a862d8b302ea6239f0ab891884", + "zh:23626c2ee394eb5640565e8814216bc6a9774fde2705bcb8a7f84207e395ec3b", + "zh:391db081c4f17111196b3cc259b68cdb7faf2e8a775f3d3c7589bdd79b3f20cb", + "zh:534ca243c67f9d1051cd44f5eb8909dbe67ee9285b0cfdf5642aa52bad9fe457", + "zh:59a642160e20a792d306761f4173184adfe12a43bdf620be32399ac9fc62c452", + "zh:974d792562506d0a1d7ba2099219255ba1bfd77801afe7d37b6e77926d41f802", + "zh:a9abf9dad2b77be300fa25d01fb02d6a49e4c3be3459bc236d721c9d9d9af738", + "zh:aa3c397b8c011c1fd7ae99274bcdd260ab766025b558249b90eb78fe40f60576", + "zh:c83e1bdf8649cd6b45cd7ae21ea4e699e0a33efdd6451e0f8ef0b056477a8b67", + "zh:d5a55a03478091dba6d3d3c857477353b268ebf4549ca60e777ddb34cdd50144", + "zh:da8c354a28b568fa5f337751140a8918b1aa0103175ae0c03a30f621b1a99076", "zh:f569b65999264a9416862bca5cd2a6177d94ccb0424f3a4ef424428912b9cb3c", ] } diff --git a/e2e/miniconstellation/main.tf b/e2e/miniconstellation/main.tf index 77db49c2a..ea48fdac8 100644 --- a/e2e/miniconstellation/main.tf +++ b/e2e/miniconstellation/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { azurerm = { source = "hashicorp/azurerm" - version = "4.27.0" + version = "4.28.0" } tls = { source = "hashicorp/tls" diff --git a/terraform-provider-constellation/examples/full/aws/main.tf b/terraform-provider-constellation/examples/full/aws/main.tf index 8c1671267..03856e81b 100644 --- a/terraform-provider-constellation/examples/full/aws/main.tf +++ b/terraform-provider-constellation/examples/full/aws/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { constellation = { source = "edgelesssys/constellation" - version = "2.23.0" // replace with the version you want to use + version = "2.23.1" // replace with the version you want to use } random = { source = "hashicorp/random" diff --git a/terraform-provider-constellation/examples/full/azure/main.tf b/terraform-provider-constellation/examples/full/azure/main.tf index 3bab0d94d..761406f61 100644 --- a/terraform-provider-constellation/examples/full/azure/main.tf +++ b/terraform-provider-constellation/examples/full/azure/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { constellation = { source = "edgelesssys/constellation" - version = "2.23.0" // replace with the version you want to use + version = "2.23.1" // replace with the version you want to use } random = { source = "hashicorp/random" diff --git a/terraform-provider-constellation/examples/full/gcp/main.tf b/terraform-provider-constellation/examples/full/gcp/main.tf index 01a05350d..c16906785 100644 --- a/terraform-provider-constellation/examples/full/gcp/main.tf +++ b/terraform-provider-constellation/examples/full/gcp/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { constellation = { source = "edgelesssys/constellation" - version = "2.23.0" // replace with the version you want to use + version = "2.23.1" // replace with the version you want to use } random = { source = "hashicorp/random" diff --git a/terraform-provider-constellation/examples/full/stackit/main.tf b/terraform-provider-constellation/examples/full/stackit/main.tf index 90e239fc6..403e57e02 100644 --- a/terraform-provider-constellation/examples/full/stackit/main.tf +++ b/terraform-provider-constellation/examples/full/stackit/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { constellation = { source = "edgelesssys/constellation" - version = "2.23.0" // replace with the version you want to use + version = "2.23.1" // replace with the version you want to use } random = { source = "hashicorp/random" diff --git a/terraform/infrastructure/azure/.terraform.lock.hcl b/terraform/infrastructure/azure/.terraform.lock.hcl index 726e0edba..832939064 100644 --- a/terraform/infrastructure/azure/.terraform.lock.hcl +++ b/terraform/infrastructure/azure/.terraform.lock.hcl @@ -2,31 +2,31 @@ # Manual edits may be lost in future updates. provider "registry.terraform.io/hashicorp/azurerm" { - version = "4.27.0" - constraints = "4.27.0" + version = "4.28.0" + constraints = "4.28.0" hashes = [ - "h1:/siiXbMpe2dyybB+a+3sglgC0fqgcwTIbpQbOTg6hnw=", - "h1:2LGw0R82Sed+v5O3+GKLBP/s/wB+rwjG0hGMeW07Mb0=", - "h1:2fs47aLDaEm93ANXXVRdTjlbUBmFBZRsFjyshKoPE3o=", - "h1:LGcjQ6+b+1am/E3u4N2G2+n3yVZrEsjW8DVQ4rMiWCs=", - "h1:ZNq+aXF3EFrQTaO1lxTZfGQhD/9nA1tcFN+HCx9jPGc=", - "h1:ammVs7Gcf8CxMZb/rjvmE3/YuW28DZ34BoWqMq9nvcQ=", - "h1:blf243zIVL7XojJI5rjyMXBwR4cjq4QcyRtIDrSanQs=", - "h1:hSh710nvwI0hStJ+iW9y6YiVKt8aUjOBWb3oshjlQ4M=", - "h1:hmAzHk4XVbrGQ5iJJj1QdFx0aWNW9Hjh+GIE6S8G5I8=", - "h1:nvIa9Z9GdI3/J7U4oMR2w/h/JZ66M1ozUPh/jHn5pXU=", - "h1:sVv383rmZlQYdIPkdSjbTGPi5Yu/Bxm/qRXZUYqvWcg=", - "zh:0c69edea1995bd3bd9e61980757169c35bf22281b660b5c755b6cb13d08d29d2", - "zh:25b86bf7b9678371d8573983954c571696f3e64a3967133be3b835da36307106", - "zh:49921cff4f26a49bafada60cd07dabb52c5eb35231059ed928a4f4722e269c82", - "zh:4b986166531f9fd1289f01d8220519443e74888a21da512c1b841b006dad6215", - "zh:53fb65b2ca4df637f03e4748a100a7d7fc77249e307c03e294d6259cec0310f6", - "zh:5c0d021a387ca4e2a5a01da009746a08c45f08e971c10d9bda54539d7264d671", - "zh:600043f2b20dc5a45275e43f175c19fe8b6e8e9557a0c884aef018f1f63de90e", - "zh:a0284f6f38912f67bb4cb7829fda3fa75be81fea6a9b21119965c2a839430092", - "zh:a7ac0576e2069ef77557042c6b5157ded364fbd355b2f9bf7f5441622424086e", - "zh:c5db0bcafe986868e28cc6225b68b2d1cf4bf631939d260ca845f17a9aa1677d", - "zh:ce620c0eb71b1fdd925828b30cf232a869abccf1c459180f2f991c4166315251", + "h1:9d1K3ixylgQjb0pnauzfSde4Ov18dAU4xIJI67IsClk=", + "h1:TblPrHpizApX/fMAvBkliFH9+h9ZkztI0MgjIKxvkt4=", + "h1:UEBGe47w8ed89mKtiO/wvbXmvg46ctgNtjExwoABG0w=", + "h1:Y3P2tfRDRogYuKQBbRWBBWye51u0/O+KlW8XQXMPIAc=", + "h1:b/Lys2QZPazq5wiaTuEvqptyesakJtlo+jtMlNx/YCU=", + "h1:b7rIhedcBt9s6RBnyv4f1F2qrExPFEoGw89PvV4TFZY=", + "h1:iBqZB8RIuUiCP8Z0YHGJbZ0ismLAJVdievq/dwmQuw0=", + "h1:vjvQjYMNNEwVKEnfMWRNLPzfuq7PugOM1Fqia07X2Mo=", + "h1:wQm1FmPs46Iqb+lOhZfBuOnzjUvQdCOgQtEZi6Y1FzU=", + "h1:xS+Np3D2SB8BdyXPPDTUEogBTLHocUr1OsJ3br4G4eU=", + "h1:yK6rbNL1Eft/AEStzzxfbxW5R3iFNEKi0HySqedehHg=", + "zh:1bacb9be85f095b1fa99cf465f01ad4f462389a862d8b302ea6239f0ab891884", + "zh:23626c2ee394eb5640565e8814216bc6a9774fde2705bcb8a7f84207e395ec3b", + "zh:391db081c4f17111196b3cc259b68cdb7faf2e8a775f3d3c7589bdd79b3f20cb", + "zh:534ca243c67f9d1051cd44f5eb8909dbe67ee9285b0cfdf5642aa52bad9fe457", + "zh:59a642160e20a792d306761f4173184adfe12a43bdf620be32399ac9fc62c452", + "zh:974d792562506d0a1d7ba2099219255ba1bfd77801afe7d37b6e77926d41f802", + "zh:a9abf9dad2b77be300fa25d01fb02d6a49e4c3be3459bc236d721c9d9d9af738", + "zh:aa3c397b8c011c1fd7ae99274bcdd260ab766025b558249b90eb78fe40f60576", + "zh:c83e1bdf8649cd6b45cd7ae21ea4e699e0a33efdd6451e0f8ef0b056477a8b67", + "zh:d5a55a03478091dba6d3d3c857477353b268ebf4549ca60e777ddb34cdd50144", + "zh:da8c354a28b568fa5f337751140a8918b1aa0103175ae0c03a30f621b1a99076", "zh:f569b65999264a9416862bca5cd2a6177d94ccb0424f3a4ef424428912b9cb3c", ] } diff --git a/terraform/infrastructure/azure/main.tf b/terraform/infrastructure/azure/main.tf index a94a1cd94..01433fcbe 100644 --- a/terraform/infrastructure/azure/main.tf +++ b/terraform/infrastructure/azure/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { azurerm = { source = "hashicorp/azurerm" - version = "4.27.0" + version = "4.28.0" } random = { source = "hashicorp/random" diff --git a/terraform/infrastructure/azure/modules/load_balancer_backend/main.tf b/terraform/infrastructure/azure/modules/load_balancer_backend/main.tf index 44e279bc6..a599e6999 100644 --- a/terraform/infrastructure/azure/modules/load_balancer_backend/main.tf +++ b/terraform/infrastructure/azure/modules/load_balancer_backend/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { azurerm = { source = "hashicorp/azurerm" - version = "4.27.0" + version = "4.28.0" } } } diff --git a/terraform/infrastructure/azure/modules/scale_set/main.tf b/terraform/infrastructure/azure/modules/scale_set/main.tf index 7782000ef..2659ec027 100644 --- a/terraform/infrastructure/azure/modules/scale_set/main.tf +++ b/terraform/infrastructure/azure/modules/scale_set/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { azurerm = { source = "hashicorp/azurerm" - version = "4.27.0" + version = "4.28.0" } random = { source = "hashicorp/random" diff --git a/terraform/infrastructure/gcp/.terraform.lock.hcl b/terraform/infrastructure/gcp/.terraform.lock.hcl index d5d21c147..4f2fcb3a4 100644 --- a/terraform/infrastructure/gcp/.terraform.lock.hcl +++ b/terraform/infrastructure/gcp/.terraform.lock.hcl @@ -2,31 +2,31 @@ # Manual edits may be lost in future updates. provider "registry.terraform.io/hashicorp/google" { - version = "6.34.0" - constraints = "6.34.0" + version = "6.35.0" + constraints = "6.35.0" hashes = [ - "h1:+40eD71Xl75UpZvbbitnVt1BvUOcx9WksqOnlBB2c9Q=", - "h1:1Gd57Ulq+OB9khkO09ouHI4LmFw9E+r9sjiSyXPuCF4=", - "h1:59cmRCN+mhq61+EZPbi77PKsGOfs6ImIIOfYSMDbUrU=", - "h1:ES6HIEg3JgeQhxpSuesr4XuiPU8FesYdNNoI/5oWX9w=", - "h1:LRFx7b919RKd4E9kF+1MB3x+uzanH6CsVsZDTdTeH30=", - "h1:VTZlsNbNnV4+zOsckNzuC7mSXRcj1jpqmEfbcTGOC2Y=", - "h1:fhSIABKEWQm4hZ1q2t4t1XpaanvSkvetfYlnYsQKMuw=", - "h1:h/C3fL+6ZLj5ht+P7sjLIZuTeeDq7xEi5Fe/63E4IOY=", - "h1:mhaYgm/7zhVdNzDannBKLjIEa4PUvvrOR+FwyRwKwa4=", - "h1:nvjIIAonvo1MkIOavdMaRlEaG1W4rkBVz71Ab9Y3JDU=", - "h1:yjtTSeGR3SChg+fxMIjI/TpIdvTPTsjAABmXJ5cYwxs=", - "zh:1835b5bc8b6a7fb06d4463438584e19af1123aaf279fa8fa571f710ab921bea3", - "zh:19d3f81877844deafcae22aba9d03bff046d980f572c5e93075f8c2886020b4b", - "zh:5720dd174f3cdc6beb0c290a3d5f928e9bf7fbe98febacf3b0a5c3c767a5ca0c", - "zh:70ec4a7b2b102003b0bfecd04bb24ece5c9a8f1ed9c02157c1931022fcfbb6f4", - "zh:726d751e4124f6d0998681455ee20ffca29774a36564ebca07c59247b735bcf5", - "zh:81b367a2ec6bc3a7cd04e55e55da349e7494714cafb2f4e7e4ab4a4a70bb0c1c", - "zh:856588076bbfe269f51e0bbf98580cc8086e5cb9f2c1e14907c7398c6bcd3881", - "zh:9cba3201401c2577690915498b17d958e24bf6648ccb4547c5a5196a80901edb", - "zh:c4e3f6951d8d8318d1b2b670149f0c53aecf3e659ca313e70ec985c8b3ab06ec", - "zh:d4b532ba25ffbd1d320d7f25fb1b11a0f4ef2aa9b9a7b9c1956fb228c8ec51ec", - "zh:d631f15923a8cde32a9f077a186efb17b3c2eb2a8d068db1dac1532cf4b98624", + "h1:36Rel1YhHm59b4qPfPDShmhsWxuDwUXexWDzr0KVNvM=", + "h1:3vCwmfdWYzv+cvjMT2ZbCGIX2QR1sqK3gU3Y79ef2bA=", + "h1:AMNRbWDZ/f8SDNjjbHihr+dCJuQvzjBBwRcyQ5hHubg=", + "h1:C/DeErZ6xlYeEMta+wFUCnXKL4X57i8JOG6ukecZCDg=", + "h1:CJKihKbsYi8PEBFt8wcIwY0PWcLqYjcfT6Yt2xNS1R4=", + "h1:CfN4SgJEs+WRxOW5jGVNO8sX/EmTIxcptk3eWiocXQQ=", + "h1:EKH+bJA8Spgw1C7K+lwWwj3VdCo5Be2f+Uf/lAEnW/4=", + "h1:MgOEEt6tmoecnF5XhSwH6NVlOlVeuullrerheY15xZc=", + "h1:XNON8oBC1Q0EtuAAT3w1/+rTW/K9hz6sc/4+oIwhXoQ=", + "h1:cwsqYGV0m2nME4R39OiG8YbDyayea5l2aahm9y/YHB0=", + "h1:r9qIIUqixCGkty+PnpgJNdvuMyBkrM7dgnup0h8tff8=", + "zh:0f7b8da0050470b074c2c5124359a407a15298dc3374cb2fbf5d243f7a390712", + "zh:27a8774e750a8b6ff296240d74ba322c3ac626ea847e150d745c014440c66927", + "zh:3cf134f088f31811f35c5996282b316308ad7a02b801cc84712696d536ef57e3", + "zh:3e08b3b451b33101f5d65fddc0d4f00e53260fcc8702ddd3d2ebab93b3553df1", + "zh:5fe57182514244b410c33d1b7bde8b1a78442323d97b13d0b08ad0fac884ad55", + "zh:6db9431b1bb9ac198eb5e0e6706d2c12ad5d47961e09d731be91cfd97f17c18b", + "zh:76309d66d6806f75639126a49db996b51496fa64d2313466f46f476284802ab3", + "zh:897c2cb1411dfed658419de9be24a2b82f64e236449f45f76d9a13c244c872de", + "zh:a5b4e8771fe4547979a767c60cf44b590f52f296d75f161bfa032c6fe6364bc2", + "zh:bb3297ad9bdf20b9d460fe0801ae3d555460bad3bfbf0c062094afa27125afc1", + "zh:cb7ed92b9af88f29f8faef4de844d57d3f4aeccce92edf3b4a33e8b4c6049b38", "zh:f569b65999264a9416862bca5cd2a6177d94ccb0424f3a4ef424428912b9cb3c", ] } diff --git a/terraform/infrastructure/gcp/main.tf b/terraform/infrastructure/gcp/main.tf index 956f687a8..c60e57e0c 100644 --- a/terraform/infrastructure/gcp/main.tf +++ b/terraform/infrastructure/gcp/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { google = { source = "hashicorp/google" - version = "6.34.0" + version = "6.35.0" } random = { diff --git a/terraform/infrastructure/gcp/modules/instance_group/main.tf b/terraform/infrastructure/gcp/modules/instance_group/main.tf index b645c67fc..753c9bbdf 100644 --- a/terraform/infrastructure/gcp/modules/instance_group/main.tf +++ b/terraform/infrastructure/gcp/modules/instance_group/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { google = { source = "hashicorp/google" - version = "6.34.0" + version = "6.35.0" } random = { diff --git a/terraform/infrastructure/gcp/modules/internal_load_balancer/main.tf b/terraform/infrastructure/gcp/modules/internal_load_balancer/main.tf index f695aa001..c43254114 100644 --- a/terraform/infrastructure/gcp/modules/internal_load_balancer/main.tf +++ b/terraform/infrastructure/gcp/modules/internal_load_balancer/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { google = { source = "hashicorp/google" - version = "6.34.0" + version = "6.35.0" } } } diff --git a/terraform/infrastructure/gcp/modules/jump_host/main.tf b/terraform/infrastructure/gcp/modules/jump_host/main.tf index f5a273fa9..08736578a 100644 --- a/terraform/infrastructure/gcp/modules/jump_host/main.tf +++ b/terraform/infrastructure/gcp/modules/jump_host/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { google = { source = "hashicorp/google" - version = "6.34.0" + version = "6.35.0" } } } diff --git a/terraform/infrastructure/gcp/modules/loadbalancer/main.tf b/terraform/infrastructure/gcp/modules/loadbalancer/main.tf index 5866d1591..0b1d154e8 100644 --- a/terraform/infrastructure/gcp/modules/loadbalancer/main.tf +++ b/terraform/infrastructure/gcp/modules/loadbalancer/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { google = { source = "hashicorp/google" - version = "6.34.0" + version = "6.35.0" } } } diff --git a/terraform/infrastructure/iam/azure/.terraform.lock.hcl b/terraform/infrastructure/iam/azure/.terraform.lock.hcl index 05c66a7fa..70b3f09eb 100644 --- a/terraform/infrastructure/iam/azure/.terraform.lock.hcl +++ b/terraform/infrastructure/iam/azure/.terraform.lock.hcl @@ -32,31 +32,31 @@ provider "registry.terraform.io/hashicorp/azuread" { } provider "registry.terraform.io/hashicorp/azurerm" { - version = "4.27.0" - constraints = "4.27.0" + version = "4.28.0" + constraints = "4.28.0" hashes = [ - "h1:/siiXbMpe2dyybB+a+3sglgC0fqgcwTIbpQbOTg6hnw=", - "h1:2LGw0R82Sed+v5O3+GKLBP/s/wB+rwjG0hGMeW07Mb0=", - "h1:2fs47aLDaEm93ANXXVRdTjlbUBmFBZRsFjyshKoPE3o=", - "h1:LGcjQ6+b+1am/E3u4N2G2+n3yVZrEsjW8DVQ4rMiWCs=", - "h1:ZNq+aXF3EFrQTaO1lxTZfGQhD/9nA1tcFN+HCx9jPGc=", - "h1:ammVs7Gcf8CxMZb/rjvmE3/YuW28DZ34BoWqMq9nvcQ=", - "h1:blf243zIVL7XojJI5rjyMXBwR4cjq4QcyRtIDrSanQs=", - "h1:hSh710nvwI0hStJ+iW9y6YiVKt8aUjOBWb3oshjlQ4M=", - "h1:hmAzHk4XVbrGQ5iJJj1QdFx0aWNW9Hjh+GIE6S8G5I8=", - "h1:nvIa9Z9GdI3/J7U4oMR2w/h/JZ66M1ozUPh/jHn5pXU=", - "h1:sVv383rmZlQYdIPkdSjbTGPi5Yu/Bxm/qRXZUYqvWcg=", - "zh:0c69edea1995bd3bd9e61980757169c35bf22281b660b5c755b6cb13d08d29d2", - "zh:25b86bf7b9678371d8573983954c571696f3e64a3967133be3b835da36307106", - "zh:49921cff4f26a49bafada60cd07dabb52c5eb35231059ed928a4f4722e269c82", - "zh:4b986166531f9fd1289f01d8220519443e74888a21da512c1b841b006dad6215", - "zh:53fb65b2ca4df637f03e4748a100a7d7fc77249e307c03e294d6259cec0310f6", - "zh:5c0d021a387ca4e2a5a01da009746a08c45f08e971c10d9bda54539d7264d671", - "zh:600043f2b20dc5a45275e43f175c19fe8b6e8e9557a0c884aef018f1f63de90e", - "zh:a0284f6f38912f67bb4cb7829fda3fa75be81fea6a9b21119965c2a839430092", - "zh:a7ac0576e2069ef77557042c6b5157ded364fbd355b2f9bf7f5441622424086e", - "zh:c5db0bcafe986868e28cc6225b68b2d1cf4bf631939d260ca845f17a9aa1677d", - "zh:ce620c0eb71b1fdd925828b30cf232a869abccf1c459180f2f991c4166315251", + "h1:9d1K3ixylgQjb0pnauzfSde4Ov18dAU4xIJI67IsClk=", + "h1:TblPrHpizApX/fMAvBkliFH9+h9ZkztI0MgjIKxvkt4=", + "h1:UEBGe47w8ed89mKtiO/wvbXmvg46ctgNtjExwoABG0w=", + "h1:Y3P2tfRDRogYuKQBbRWBBWye51u0/O+KlW8XQXMPIAc=", + "h1:b/Lys2QZPazq5wiaTuEvqptyesakJtlo+jtMlNx/YCU=", + "h1:b7rIhedcBt9s6RBnyv4f1F2qrExPFEoGw89PvV4TFZY=", + "h1:iBqZB8RIuUiCP8Z0YHGJbZ0ismLAJVdievq/dwmQuw0=", + "h1:vjvQjYMNNEwVKEnfMWRNLPzfuq7PugOM1Fqia07X2Mo=", + "h1:wQm1FmPs46Iqb+lOhZfBuOnzjUvQdCOgQtEZi6Y1FzU=", + "h1:xS+Np3D2SB8BdyXPPDTUEogBTLHocUr1OsJ3br4G4eU=", + "h1:yK6rbNL1Eft/AEStzzxfbxW5R3iFNEKi0HySqedehHg=", + "zh:1bacb9be85f095b1fa99cf465f01ad4f462389a862d8b302ea6239f0ab891884", + "zh:23626c2ee394eb5640565e8814216bc6a9774fde2705bcb8a7f84207e395ec3b", + "zh:391db081c4f17111196b3cc259b68cdb7faf2e8a775f3d3c7589bdd79b3f20cb", + "zh:534ca243c67f9d1051cd44f5eb8909dbe67ee9285b0cfdf5642aa52bad9fe457", + "zh:59a642160e20a792d306761f4173184adfe12a43bdf620be32399ac9fc62c452", + "zh:974d792562506d0a1d7ba2099219255ba1bfd77801afe7d37b6e77926d41f802", + "zh:a9abf9dad2b77be300fa25d01fb02d6a49e4c3be3459bc236d721c9d9d9af738", + "zh:aa3c397b8c011c1fd7ae99274bcdd260ab766025b558249b90eb78fe40f60576", + "zh:c83e1bdf8649cd6b45cd7ae21ea4e699e0a33efdd6451e0f8ef0b056477a8b67", + "zh:d5a55a03478091dba6d3d3c857477353b268ebf4549ca60e777ddb34cdd50144", + "zh:da8c354a28b568fa5f337751140a8918b1aa0103175ae0c03a30f621b1a99076", "zh:f569b65999264a9416862bca5cd2a6177d94ccb0424f3a4ef424428912b9cb3c", ] } diff --git a/terraform/infrastructure/iam/azure/main.tf b/terraform/infrastructure/iam/azure/main.tf index ede9a0a6a..7e516dc78 100644 --- a/terraform/infrastructure/iam/azure/main.tf +++ b/terraform/infrastructure/iam/azure/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { azurerm = { source = "hashicorp/azurerm" - version = "4.27.0" + version = "4.28.0" } azuread = { source = "hashicorp/azuread" diff --git a/terraform/infrastructure/iam/gcp/.terraform.lock.hcl b/terraform/infrastructure/iam/gcp/.terraform.lock.hcl index 8a832b962..d1216f0b7 100644 --- a/terraform/infrastructure/iam/gcp/.terraform.lock.hcl +++ b/terraform/infrastructure/iam/gcp/.terraform.lock.hcl @@ -2,31 +2,31 @@ # Manual edits may be lost in future updates. provider "registry.terraform.io/hashicorp/google" { - version = "6.34.0" - constraints = "6.34.0" + version = "6.35.0" + constraints = "6.35.0" hashes = [ - "h1:+40eD71Xl75UpZvbbitnVt1BvUOcx9WksqOnlBB2c9Q=", - "h1:1Gd57Ulq+OB9khkO09ouHI4LmFw9E+r9sjiSyXPuCF4=", - "h1:59cmRCN+mhq61+EZPbi77PKsGOfs6ImIIOfYSMDbUrU=", - "h1:ES6HIEg3JgeQhxpSuesr4XuiPU8FesYdNNoI/5oWX9w=", - "h1:LRFx7b919RKd4E9kF+1MB3x+uzanH6CsVsZDTdTeH30=", - "h1:VTZlsNbNnV4+zOsckNzuC7mSXRcj1jpqmEfbcTGOC2Y=", - "h1:fhSIABKEWQm4hZ1q2t4t1XpaanvSkvetfYlnYsQKMuw=", - "h1:h/C3fL+6ZLj5ht+P7sjLIZuTeeDq7xEi5Fe/63E4IOY=", - "h1:mhaYgm/7zhVdNzDannBKLjIEa4PUvvrOR+FwyRwKwa4=", - "h1:nvjIIAonvo1MkIOavdMaRlEaG1W4rkBVz71Ab9Y3JDU=", - "h1:yjtTSeGR3SChg+fxMIjI/TpIdvTPTsjAABmXJ5cYwxs=", - "zh:1835b5bc8b6a7fb06d4463438584e19af1123aaf279fa8fa571f710ab921bea3", - "zh:19d3f81877844deafcae22aba9d03bff046d980f572c5e93075f8c2886020b4b", - "zh:5720dd174f3cdc6beb0c290a3d5f928e9bf7fbe98febacf3b0a5c3c767a5ca0c", - "zh:70ec4a7b2b102003b0bfecd04bb24ece5c9a8f1ed9c02157c1931022fcfbb6f4", - "zh:726d751e4124f6d0998681455ee20ffca29774a36564ebca07c59247b735bcf5", - "zh:81b367a2ec6bc3a7cd04e55e55da349e7494714cafb2f4e7e4ab4a4a70bb0c1c", - "zh:856588076bbfe269f51e0bbf98580cc8086e5cb9f2c1e14907c7398c6bcd3881", - "zh:9cba3201401c2577690915498b17d958e24bf6648ccb4547c5a5196a80901edb", - "zh:c4e3f6951d8d8318d1b2b670149f0c53aecf3e659ca313e70ec985c8b3ab06ec", - "zh:d4b532ba25ffbd1d320d7f25fb1b11a0f4ef2aa9b9a7b9c1956fb228c8ec51ec", - "zh:d631f15923a8cde32a9f077a186efb17b3c2eb2a8d068db1dac1532cf4b98624", + "h1:36Rel1YhHm59b4qPfPDShmhsWxuDwUXexWDzr0KVNvM=", + "h1:3vCwmfdWYzv+cvjMT2ZbCGIX2QR1sqK3gU3Y79ef2bA=", + "h1:AMNRbWDZ/f8SDNjjbHihr+dCJuQvzjBBwRcyQ5hHubg=", + "h1:C/DeErZ6xlYeEMta+wFUCnXKL4X57i8JOG6ukecZCDg=", + "h1:CJKihKbsYi8PEBFt8wcIwY0PWcLqYjcfT6Yt2xNS1R4=", + "h1:CfN4SgJEs+WRxOW5jGVNO8sX/EmTIxcptk3eWiocXQQ=", + "h1:EKH+bJA8Spgw1C7K+lwWwj3VdCo5Be2f+Uf/lAEnW/4=", + "h1:MgOEEt6tmoecnF5XhSwH6NVlOlVeuullrerheY15xZc=", + "h1:XNON8oBC1Q0EtuAAT3w1/+rTW/K9hz6sc/4+oIwhXoQ=", + "h1:cwsqYGV0m2nME4R39OiG8YbDyayea5l2aahm9y/YHB0=", + "h1:r9qIIUqixCGkty+PnpgJNdvuMyBkrM7dgnup0h8tff8=", + "zh:0f7b8da0050470b074c2c5124359a407a15298dc3374cb2fbf5d243f7a390712", + "zh:27a8774e750a8b6ff296240d74ba322c3ac626ea847e150d745c014440c66927", + "zh:3cf134f088f31811f35c5996282b316308ad7a02b801cc84712696d536ef57e3", + "zh:3e08b3b451b33101f5d65fddc0d4f00e53260fcc8702ddd3d2ebab93b3553df1", + "zh:5fe57182514244b410c33d1b7bde8b1a78442323d97b13d0b08ad0fac884ad55", + "zh:6db9431b1bb9ac198eb5e0e6706d2c12ad5d47961e09d731be91cfd97f17c18b", + "zh:76309d66d6806f75639126a49db996b51496fa64d2313466f46f476284802ab3", + "zh:897c2cb1411dfed658419de9be24a2b82f64e236449f45f76d9a13c244c872de", + "zh:a5b4e8771fe4547979a767c60cf44b590f52f296d75f161bfa032c6fe6364bc2", + "zh:bb3297ad9bdf20b9d460fe0801ae3d555460bad3bfbf0c062094afa27125afc1", + "zh:cb7ed92b9af88f29f8faef4de844d57d3f4aeccce92edf3b4a33e8b4c6049b38", "zh:f569b65999264a9416862bca5cd2a6177d94ccb0424f3a4ef424428912b9cb3c", ] } diff --git a/terraform/infrastructure/iam/gcp/main.tf b/terraform/infrastructure/iam/gcp/main.tf index 8fdad8338..15b5dd3be 100644 --- a/terraform/infrastructure/iam/gcp/main.tf +++ b/terraform/infrastructure/iam/gcp/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { google = { source = "hashicorp/google" - version = "6.34.0" + version = "6.35.0" } } } diff --git a/terraform/infrastructure/openstack/.terraform.lock.hcl b/terraform/infrastructure/openstack/.terraform.lock.hcl index 86a589448..292f31c77 100644 --- a/terraform/infrastructure/openstack/.terraform.lock.hcl +++ b/terraform/infrastructure/openstack/.terraform.lock.hcl @@ -32,38 +32,38 @@ provider "registry.terraform.io/hashicorp/random" { } provider "registry.terraform.io/stackitcloud/stackit" { - version = "0.51.0" - constraints = "0.51.0" + version = "0.53.0" + constraints = "0.53.0" hashes = [ - "h1:5UYV1rCmD8XNl/xSwQsHQ2zKN7ccED2+5PuXxRWln+c=", - "h1:62gvzvEhhzOm1cHP1XrD1qd9dqQBDOkMTDQ4qU/Rxu4=", - "h1:EU0+pckjjXLrSz7Z0J/TnLxc0+zyr3qbXTSfDnTtElA=", - "h1:JjVR1/dJEqLoB4TF5Nkv4H4csjyIwuRHKalwzH71abw=", - "h1:UgfM5sdoUpnySBu6QbAxvpX+MQbBT8mhwHpbPFBPaAk=", - "h1:W96oj+eA9B/OrXeLIg9UFSHzBZxk6v4EVxeerXB+2JA=", - "h1:eOPPx/ScpHMU3SDFzDZBHee/7f/5x7TvZxisGTvmfT8=", - "h1:gRMgYk3J20Kq3GBR0L+V1qWh+NG1zdQIkE3VQUbe0qI=", - "h1:iHJmAHQyrRjfy1V6LjJDuv1Af4+L8yB8YIeAeiECv1s=", - "h1:tbWlbAe5SBeccMYM92wY9WuP/VvVtSkNojubRfUKI/U=", - "h1:txfLsQccATH/oFbqfWKOQbFX3KyBnzleE5LDqk75MUY=", - "h1:xEq9g1RuX4WIA3KNHyYgnBfWwY7mNn3yQGlFn/WbX9o=", - "h1:yBML4ZTfTS33BJVugZRA9HMPcAbiDnE/YoxuKzyUm4s=", - "h1:ys4E1krqYqjri7HLIO4mOQgRgR/z33oFhCS0yLI+XJA=", + "h1:BVPETE48KhoqyKYClDhUBstmFzRiAcuxe27hQZwDK+Q=", + "h1:FcdIzdfUZY6BPCCng9WImmsfJcRH+iAr8DgRI4Fia04=", + "h1:KhLsCQC08QvAiBFb1LhfpfNSTPUes1JJUOuTPmDbn2c=", + "h1:KpyF8wGtsxPKJjDla/r93FftL7qFCe/MtiN+1ug1+No=", + "h1:P6OSZsAasyZIgC2xllDldPv4Bvg6uXPPNzxkicTwuq0=", + "h1:P7uxrCcb0itwa44WmUpAfb/bpg74lT+yDiAcveM0aa8=", + "h1:QPX1BtGEBa51bKpsGPPqV0Ssuhn64xJcEohBtyEY3Pg=", + "h1:RmmMw2xkNYRFyuI3qqL1JpnIWSXLV51DSSZeil8Ec6w=", + "h1:RwiKzxuiJ+dOvaFQ/A92zLGz5JLN+0fA7riYFrNKZ9Y=", + "h1:To9R3LyIlT+S/6d/tcgQgxaKB3UWoaaNBAhbWs5wYGM=", + "h1:UQpT+MqZyPRX5usq1u77GUDTW5UFVcvh+fkDItGZfzM=", + "h1:bLlVOzfu3fje3M81Whny1yQiOC89r4x4Akw6JNzy2fk=", + "h1:hQasTcIA5yfYrgbelOcceatBDj8//shVvNfUAZyOOAc=", + "h1:xXlBF8c3btnkAIgBiipcpsvbMK6n2+/8OqNAGxBhni8=", "zh:0dde99e7b343fa01f8eefc378171fb8621bedb20f59157d6cc8e3d46c738105f", - "zh:2d920411cbf4976d0fdf0d0d3f0403929b0c1e21ca3c3aa09031651b8bd1f614", - "zh:4067b3b21b50d55485edda9da11fd0df4188a05e02c3bc9332ad24f6a5c977e8", - "zh:46e25c4058e5ff5b321e2f3c23521acba4722b626cb427ed17f970515e3efb8c", - "zh:4bbe1904333a5dc00584915b94271e8482ca06586de4f345d3b1f019057d5dff", - "zh:7480e6d7deb519fc15f28156fe09b201f73c0654944526ac3da3510c902feaa9", - "zh:7868dd37c44423a9bb5b5fbd883171d2c36fd4507f7545de355caffbf20c2b99", - "zh:a5b47602355cb1611673fcb26f972529f5d6fe0e11a47b1b916e610ecb10fc86", - "zh:aefa5b9a0eefecac09e10c8c4d0ff2109b9a9eabd163fa34b48116f7a205b66f", - "zh:c6a5b0737198add8bed3affc072b09ee87f928c4c25437fe1a5871b6d454c879", - "zh:d07dcbc92463ebe2f28f9125b74e362ccf32f4d5bc71ee339c6d28dce7229a8d", - "zh:d63dd003fbe2752694d70e1accce9bb8d118e6332ac7a08a844109b93c98e8f2", - "zh:f32ebcb26ae57d7c7480e07b5a42eec57ee410097072c216485ceca3254a98f2", - "zh:f3b78e090125cb02136677cc7faf5a3a317a620132c0211bfd6fe63e66de2807", - "zh:f5db68035985aba0b6a8b66da7b653dbb02b4dcc8f0f8efc6ff243b7bad16d99", + "zh:27df5dd8cd7af79080e071d8c3ef81d792ee7665b569255ec4c931fa5595b7b5", + "zh:452f8ee8dabc0bdf8ec623d186061750a527bb02225c9810f412c46d142bb73a", + "zh:48512ed6362d537687a74f5ddd36ed288e36b8f47ad6ead78c71f5152912c777", + "zh:4e4b2be9cda9f866b47bf4c9b3a9d3c9c8a0c6006d66e9a33f54317694ea48a1", + "zh:5239ec2377e1d186b465b07bd1c71793d7a142a1bfe155abdf84d60d8189b1bc", + "zh:5e506b9e423ff1c65482bd8dcee629cef0789b0879d1b2d61c1e478c4506b2eb", + "zh:705762fa6bfc02ccab39a8b544f9090f63d6e49364c09ac4a2f29878ff53235f", + "zh:882ceb507151aff47ec57808adb2a7104686be46ee34963eecb0fabfd771caf8", + "zh:ab2ba4430a0eb433ee6d0b99c738c6addbcab6bd921b7ed660d55fc979515c29", + "zh:b26b03356b44e6eacaa84aa4170aee4b9afe78f18c48ec209a6a1c0bfe7f4d47", + "zh:b77ddbc99c4a77b1c2410ba7526498be6ee723bb3b42c5dd4e712408119224bf", + "zh:c808c34807aeb34aa0e66ee9c25b523b398925682fa7c0f6b0115dd0e91b2c33", + "zh:d76c00fddbc80140825757f71b22d1c3a64978a4792b52bfde3747ee93f8e7fa", + "zh:fb03cb807d9817693a001bed3334c5636fd61fb745d611b14b013bfdcf066068", ] } diff --git a/terraform/infrastructure/openstack/main.tf b/terraform/infrastructure/openstack/main.tf index 95dd65837..325279818 100644 --- a/terraform/infrastructure/openstack/main.tf +++ b/terraform/infrastructure/openstack/main.tf @@ -7,7 +7,7 @@ terraform { stackit = { source = "stackitcloud/stackit" - version = "0.51.0" + version = "0.53.0" } random = { diff --git a/terraform/infrastructure/openstack/modules/stackit_loadbalancer/main.tf b/terraform/infrastructure/openstack/modules/stackit_loadbalancer/main.tf index 70d7e7c36..50179a534 100644 --- a/terraform/infrastructure/openstack/modules/stackit_loadbalancer/main.tf +++ b/terraform/infrastructure/openstack/modules/stackit_loadbalancer/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { stackit = { source = "stackitcloud/stackit" - version = "0.51.0" + version = "0.53.0" } } } From ba9dcb87ed0aad70c8628e0f0c412b33fe1d536c Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 15 May 2025 16:31:44 +0200 Subject: [PATCH 280/311] deps: update ghcr.io/edgelesssys/gcp-guest-agent Docker tag to v20250508 (#3832) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- internal/versions/versions.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/versions/versions.go b/internal/versions/versions.go index 9361fe576..896337321 100644 --- a/internal/versions/versions.go +++ b/internal/versions/versions.go @@ -169,7 +169,7 @@ const ( // GcpGuestImage image for GCP guest agent. // Check for new versions at https://github.com/GoogleCloudPlatform/guest-agent/releases and update in /.github/workflows/build-gcp-guest-agent.yml. - GcpGuestImage = "ghcr.io/edgelesssys/gcp-guest-agent:v20250502.1.0@sha256:024faa0724b52d4d03117861aa7db533395d6e336d1bdf1f81f8e8d74baada5a" // renovate:container + GcpGuestImage = "ghcr.io/edgelesssys/gcp-guest-agent:v20250508.0.0@sha256:ed3e1a4ae394bcc8d00bdd9255ba5092fd7d6274f1f888a199bf2797861879b0" // renovate:container // NodeMaintenanceOperatorImage is the image for the node maintenance operator. NodeMaintenanceOperatorImage = "quay.io/medik8s/node-maintenance-operator:v0.17.0@sha256:bf1c5758b3d266dd6234422d156c67ffdd47f50f70ce17d5cef1de6065030337" // renovate:container // LogstashImage is the container image of logstash, used for log collection by debugd. From c0a8cca7084c144163e693ed6f56440240b2e03d Mon Sep 17 00:00:00 2001 From: edgelessci <71088502+edgelessci@users.noreply.github.com> Date: Fri, 16 May 2025 08:02:02 +0200 Subject: [PATCH 281/311] image: update measurements and image version (#3834) Co-authored-by: edgelessci --- .../measurements/measurements_enterprise.go | 16 ++++++++-------- internal/config/image_enterprise.go | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/internal/attestation/measurements/measurements_enterprise.go b/internal/attestation/measurements/measurements_enterprise.go index 9e27e1b05..ae1ffe88c 100644 --- a/internal/attestation/measurements/measurements_enterprise.go +++ b/internal/attestation/measurements/measurements_enterprise.go @@ -19,14 +19,14 @@ package measurements // revive:disable:var-naming var ( - aws_AWSNitroTPM = M{0: {Expected: []byte{0x73, 0x7f, 0x76, 0x7a, 0x12, 0xf5, 0x4e, 0x70, 0xee, 0xcb, 0xc8, 0x68, 0x40, 0x11, 0x32, 0x3a, 0xe2, 0xfe, 0x2d, 0xd9, 0xf9, 0x07, 0x85, 0x57, 0x79, 0x69, 0xd7, 0xa2, 0x01, 0x3e, 0x8c, 0x12}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xb3, 0x6d, 0x21, 0xc6, 0x46, 0x38, 0xf5, 0xc2, 0x1d, 0xb2, 0x8a, 0x77, 0x9c, 0xa4, 0x27, 0x68, 0x36, 0x60, 0x95, 0xdf, 0x47, 0xca, 0x13, 0x67, 0x03, 0xde, 0x7e, 0x67, 0x98, 0x86, 0x9d, 0x46}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xc5, 0x53, 0x68, 0x16, 0xc8, 0x10, 0x29, 0xb7, 0xbd, 0x18, 0x01, 0x9d, 0xb0, 0x14, 0x0c, 0x69, 0x86, 0xd7, 0xc5, 0x2a, 0xd6, 0x32, 0xf7, 0xfe, 0x15, 0x67, 0x6e, 0xd4, 0x72, 0xf4, 0xec, 0x14}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x83, 0xa8, 0x89, 0xd9, 0xe1, 0xc3, 0x2b, 0x06, 0x42, 0x9a, 0x74, 0x17, 0xc8, 0x23, 0xf3, 0x04, 0x67, 0x7e, 0xb8, 0xb3, 0xfc, 0xf2, 0x1c, 0x94, 0xc9, 0x33, 0x93, 0x14, 0xe7, 0x91, 0x2e, 0xd2}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - aws_AWSSEVSNP = M{0: {Expected: []byte{0xd6, 0xdf, 0x85, 0x53, 0x58, 0xf5, 0xb1, 0x0f, 0x06, 0xf0, 0xfa, 0xb3, 0xf4, 0x08, 0xad, 0x26, 0xcd, 0x16, 0x5a, 0x29, 0x49, 0xba, 0xd6, 0x9e, 0x2c, 0xc7, 0x56, 0x92, 0x52, 0x9e, 0x66, 0x2a}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xc0, 0x19, 0x07, 0x25, 0x9e, 0x7f, 0x0d, 0xb3, 0xc8, 0xaa, 0x42, 0xc1, 0x5d, 0xae, 0x82, 0xe8, 0xcf, 0x12, 0xb1, 0x8e, 0xe0, 0x8e, 0x01, 0x9c, 0x33, 0xf5, 0xef, 0x56, 0x44, 0xe6, 0xd6, 0x58}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x0c, 0x96, 0x03, 0x9f, 0x53, 0x0e, 0x8c, 0xd6, 0xa0, 0xe5, 0xed, 0x31, 0xbc, 0x13, 0xed, 0xba, 0x02, 0xd7, 0x57, 0x04, 0xfb, 0xbf, 0x08, 0x52, 0xf7, 0x88, 0xd8, 0x91, 0xd2, 0x01, 0xa4, 0x01}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xa3, 0xab, 0xda, 0x5d, 0x6f, 0xec, 0x95, 0xdc, 0xb0, 0x9a, 0x70, 0x74, 0x77, 0x09, 0x64, 0x08, 0xbc, 0xb1, 0xdc, 0xa1, 0xbe, 0xd0, 0xaf, 0xe2, 0xb9, 0xbf, 0xc3, 0x2c, 0x2b, 0x31, 0xff, 0x67}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - azure_AzureSEVSNP = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xbc, 0x25, 0xf5, 0xc1, 0xc2, 0x23, 0xab, 0x54, 0xee, 0xd0, 0xa2, 0x29, 0x62, 0xcd, 0xdc, 0xa4, 0x76, 0x9e, 0xe9, 0x03, 0xd9, 0x61, 0x0f, 0xb1, 0x0d, 0x55, 0xca, 0xf7, 0x40, 0x51, 0x09, 0x22}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xec, 0xe5, 0xcd, 0xa3, 0x11, 0xab, 0xca, 0xbb, 0xa9, 0xc0, 0xec, 0xae, 0x5d, 0xea, 0x5a, 0x35, 0x49, 0xec, 0xc4, 0x2d, 0x7c, 0x39, 0x5f, 0x31, 0xe9, 0x94, 0xd0, 0x17, 0x30, 0x1a, 0xe3, 0xb9}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x5f, 0x8f, 0x35, 0xa1, 0xd3, 0xed, 0x63, 0x97, 0x0a, 0xad, 0x01, 0x8d, 0xea, 0x08, 0x77, 0xb8, 0xcd, 0x37, 0xb4, 0xb5, 0x7c, 0xe2, 0x2a, 0x2b, 0x0a, 0x0e, 0xe6, 0x16, 0xd0, 0x10, 0x33, 0x1d}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - azure_AzureTDX = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xee, 0x5a, 0x25, 0x61, 0x5f, 0xab, 0x89, 0x54, 0xd6, 0x09, 0xca, 0x17, 0x8d, 0x01, 0x6c, 0x9e, 0x51, 0x6c, 0x37, 0xc7, 0xd7, 0x05, 0x95, 0xad, 0x1b, 0xf8, 0x7b, 0xef, 0x1b, 0x59, 0xd8, 0x17}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x7b, 0x75, 0xba, 0x53, 0x88, 0x81, 0x7a, 0x85, 0x66, 0xf2, 0xa8, 0x45, 0xc8, 0x61, 0x85, 0xa7, 0xd1, 0x9f, 0x6a, 0xc2, 0x53, 0x3e, 0xf8, 0xfa, 0xa1, 0x12, 0x02, 0x67, 0x91, 0x05, 0x84, 0x90}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xf7, 0x31, 0x0d, 0x08, 0x37, 0x3c, 0xd8, 0x68, 0x40, 0x01, 0x5a, 0x33, 0xbd, 0x5c, 0x07, 0x66, 0x81, 0x3e, 0x4a, 0xca, 0x94, 0x42, 0x5b, 0x19, 0x35, 0x7d, 0x06, 0x91, 0x3c, 0x79, 0xbb, 0xb6}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + aws_AWSNitroTPM = M{0: {Expected: []byte{0x73, 0x7f, 0x76, 0x7a, 0x12, 0xf5, 0x4e, 0x70, 0xee, 0xcb, 0xc8, 0x68, 0x40, 0x11, 0x32, 0x3a, 0xe2, 0xfe, 0x2d, 0xd9, 0xf9, 0x07, 0x85, 0x57, 0x79, 0x69, 0xd7, 0xa2, 0x01, 0x3e, 0x8c, 0x12}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x73, 0xa3, 0x8e, 0x0d, 0x77, 0x89, 0x63, 0x9a, 0xe4, 0xc8, 0xa8, 0x66, 0x45, 0xa8, 0x11, 0xd3, 0x14, 0xa0, 0xa1, 0xf9, 0x62, 0x00, 0x18, 0xf9, 0x68, 0xb5, 0xec, 0x57, 0x04, 0xc3, 0xd7, 0x0b}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xf5, 0x67, 0x80, 0x1a, 0x50, 0x03, 0xd9, 0xef, 0x20, 0xd8, 0x7d, 0x2f, 0xc7, 0x6b, 0xeb, 0xb0, 0xd6, 0x28, 0x48, 0xb1, 0xbc, 0xed, 0x0c, 0xc5, 0x0f, 0x84, 0xae, 0xdb, 0x57, 0x37, 0x75, 0xf0}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x56, 0xa9, 0x8c, 0x3c, 0x70, 0x72, 0xfc, 0x9c, 0x4e, 0xb1, 0x1e, 0xe4, 0xbb, 0x65, 0x2e, 0xa8, 0xdd, 0x71, 0xbb, 0x54, 0xc8, 0x13, 0xc9, 0xe5, 0x42, 0x39, 0xa2, 0x0b, 0x0c, 0xc2, 0x9d, 0xc0}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + aws_AWSSEVSNP = M{0: {Expected: []byte{0xd6, 0xdf, 0x85, 0x53, 0x58, 0xf5, 0xb1, 0x0f, 0x06, 0xf0, 0xfa, 0xb3, 0xf4, 0x08, 0xad, 0x26, 0xcd, 0x16, 0x5a, 0x29, 0x49, 0xba, 0xd6, 0x9e, 0x2c, 0xc7, 0x56, 0x92, 0x52, 0x9e, 0x66, 0x2a}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x98, 0x4a, 0x55, 0x3b, 0xb5, 0x19, 0xa9, 0x87, 0x4c, 0x76, 0x0c, 0xd0, 0xed, 0x3c, 0x00, 0x4c, 0xcf, 0x35, 0xdc, 0x5c, 0x45, 0x35, 0x46, 0x36, 0x34, 0x84, 0xfa, 0xa6, 0xa6, 0x5a, 0xb2, 0xac}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xcf, 0xbf, 0x4d, 0xaf, 0x0c, 0xf1, 0xd0, 0xf6, 0x6b, 0x62, 0xe6, 0xda, 0x12, 0xd3, 0x96, 0xc3, 0x20, 0x35, 0x2d, 0x87, 0x26, 0x09, 0x87, 0xeb, 0x5c, 0x79, 0x1a, 0xb9, 0x1d, 0xa9, 0xaf, 0x02}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x34, 0xb2, 0xd3, 0x62, 0x2b, 0xbc, 0xb0, 0x6f, 0x92, 0x4d, 0xb6, 0xd6, 0x2f, 0x73, 0x0b, 0x79, 0x28, 0x33, 0x3b, 0x43, 0xb7, 0xf0, 0x1b, 0xe6, 0x49, 0x31, 0x7b, 0x81, 0x4e, 0x09, 0x43, 0xa7}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + azure_AzureSEVSNP = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x52, 0x2c, 0xc5, 0x99, 0x86, 0x9c, 0xce, 0xa4, 0xa2, 0x98, 0x9c, 0x11, 0x93, 0xaf, 0xa6, 0x38, 0x96, 0xde, 0x5a, 0xe5, 0xa8, 0x04, 0x62, 0x52, 0x86, 0x6a, 0xf9, 0x85, 0xe3, 0x0b, 0x0e, 0xf6}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xb5, 0xbf, 0x47, 0x5a, 0x0a, 0x34, 0xe3, 0xdc, 0xd2, 0x89, 0x90, 0xdb, 0x6d, 0x0f, 0xc2, 0xe0, 0x0a, 0x93, 0x4e, 0x05, 0xfa, 0x3e, 0xe5, 0x8b, 0x5c, 0x20, 0x24, 0xab, 0xb8, 0x7a, 0x09, 0xa8}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x68, 0x73, 0xa7, 0xcf, 0xc2, 0x4d, 0xe1, 0x9d, 0x55, 0x5b, 0x4e, 0x4c, 0xc7, 0x48, 0x9b, 0xb6, 0xc9, 0x4d, 0xc4, 0xda, 0xa1, 0xcb, 0x88, 0x31, 0xb8, 0x8e, 0x0f, 0x20, 0x27, 0x7c, 0xc2, 0xa9}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + azure_AzureTDX = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xeb, 0x2f, 0xda, 0x44, 0x76, 0x10, 0xc8, 0x8a, 0xfb, 0x7a, 0xdb, 0x62, 0x31, 0x9b, 0xf5, 0x43, 0xac, 0x01, 0xdf, 0xf1, 0xc8, 0xe3, 0xbd, 0xc2, 0xaa, 0x83, 0x24, 0x08, 0xc5, 0xf2, 0x66, 0xca}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xd2, 0x45, 0xd8, 0x15, 0xdd, 0xbc, 0xb4, 0x26, 0x2a, 0x53, 0xb0, 0x14, 0x2d, 0x72, 0x91, 0xcc, 0x88, 0x6b, 0xe1, 0x53, 0x09, 0xb3, 0x7f, 0xab, 0x04, 0x74, 0x68, 0x0d, 0x26, 0x73, 0xe4, 0xaf}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xa8, 0x88, 0x9e, 0xea, 0x7f, 0xf1, 0x9e, 0x8b, 0x74, 0x9c, 0x3f, 0x28, 0x7e, 0xd3, 0xa6, 0xe7, 0x23, 0x2e, 0x02, 0xfa, 0x01, 0xfd, 0x06, 0x1a, 0x56, 0xc9, 0xe7, 0xae, 0xfd, 0x43, 0x60, 0x3b}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} azure_AzureTrustedLaunch M - gcp_GCPSEVES = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xe3, 0x17, 0x6b, 0xea, 0xaa, 0x3a, 0xfc, 0x44, 0x48, 0xc0, 0x36, 0x99, 0x41, 0x65, 0xec, 0xf3, 0xc5, 0x0c, 0xda, 0x16, 0xbf, 0x6e, 0x92, 0xb1, 0xae, 0xdc, 0x0f, 0x6b, 0x79, 0xa9, 0x7f, 0x16}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xe6, 0xb8, 0xc0, 0xa3, 0x2e, 0x3e, 0xe8, 0x67, 0xf8, 0xc8, 0xb9, 0x28, 0xb0, 0x49, 0xeb, 0x1c, 0x22, 0x47, 0xd3, 0xd1, 0x75, 0xc5, 0x23, 0xad, 0x4a, 0x7d, 0x1c, 0xa0, 0xee, 0x44, 0x46, 0xfe}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x95, 0xa9, 0x8f, 0x81, 0x2a, 0xaf, 0x8a, 0xdd, 0x5e, 0x06, 0x97, 0x3f, 0x0f, 0xe0, 0x7b, 0x50, 0xc5, 0x98, 0xfd, 0xd7, 0xba, 0xb8, 0x1a, 0xf6, 0xab, 0x0b, 0x25, 0x71, 0x64, 0xf0, 0x7d, 0x33}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - gcp_GCPSEVSNP = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xd4, 0x3b, 0x2c, 0xb9, 0x0d, 0x39, 0xac, 0xa4, 0xa1, 0x3c, 0xe3, 0x71, 0xf3, 0x02, 0x4a, 0x21, 0x2b, 0xbf, 0xfd, 0xe1, 0x5c, 0xab, 0xb9, 0xc4, 0x0a, 0x3c, 0x02, 0x50, 0xbb, 0xcb, 0x05, 0x7b}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x34, 0xda, 0x89, 0xb7, 0x24, 0x1e, 0x0e, 0xd5, 0x59, 0x82, 0xc9, 0x4b, 0x6d, 0x09, 0x66, 0xa4, 0x38, 0xaf, 0xcc, 0xf8, 0x1a, 0x8c, 0xf6, 0x4b, 0x92, 0x9e, 0xe7, 0x41, 0xa5, 0xb4, 0x36, 0x6d}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x02, 0x18, 0xc4, 0x3d, 0x75, 0x58, 0xf1, 0x90, 0x1e, 0x45, 0x70, 0x84, 0xe2, 0x19, 0xe9, 0xbb, 0xd5, 0x95, 0x1f, 0x4c, 0x84, 0x5b, 0x3f, 0xe5, 0xa6, 0xa7, 0x30, 0xeb, 0xfa, 0x25, 0x32, 0xd3}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - openstack_QEMUVTPM = M{4: {Expected: []byte{0x1d, 0x89, 0x05, 0xd1, 0x10, 0xc0, 0x34, 0xc3, 0xad, 0xc8, 0x3d, 0x36, 0x14, 0xca, 0x81, 0x6f, 0x4a, 0x0b, 0x7e, 0x60, 0xd3, 0xc0, 0xfc, 0x41, 0xb7, 0x9c, 0x67, 0xa1, 0x79, 0x16, 0x53, 0xcb}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xfd, 0xfe, 0xb2, 0xfd, 0x64, 0x8d, 0x19, 0x1e, 0x8d, 0x01, 0x2a, 0x50, 0x52, 0x40, 0x55, 0x2c, 0x32, 0xe4, 0xd8, 0x6b, 0x30, 0xa9, 0xc7, 0x8d, 0x34, 0x0d, 0x00, 0xda, 0x8e, 0x72, 0xb9, 0x3a}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x35, 0x17, 0xc8, 0x2a, 0x07, 0xf3, 0x26, 0x82, 0xa9, 0x11, 0xbf, 0xa8, 0xc2, 0x8c, 0xdd, 0x16, 0x43, 0xdd, 0x21, 0x7c, 0x06, 0x78, 0x10, 0x52, 0x85, 0xf4, 0xec, 0x0d, 0x1a, 0x84, 0xba, 0x2d}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + gcp_GCPSEVES = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x6a, 0xb9, 0xc8, 0xd3, 0x7d, 0x79, 0x49, 0xe8, 0x01, 0xa3, 0xe3, 0xf3, 0x18, 0xd3, 0x34, 0x62, 0xfb, 0xd4, 0x96, 0xf9, 0x61, 0xde, 0xd5, 0xc5, 0xe6, 0xfb, 0xa8, 0x83, 0xe6, 0x36, 0xb2, 0x1c}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x72, 0x5c, 0x17, 0x8b, 0x8b, 0x62, 0x45, 0xa7, 0x69, 0xe4, 0x3b, 0xa3, 0xa5, 0x7b, 0xee, 0xb9, 0xcf, 0x68, 0x54, 0xdd, 0x7e, 0x9f, 0xe4, 0x48, 0xb7, 0xc5, 0xb0, 0x4d, 0xda, 0xc8, 0xdb, 0x87}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x78, 0x74, 0x49, 0x06, 0xa1, 0x9b, 0xa0, 0x15, 0x94, 0x58, 0xa5, 0x1c, 0x46, 0xcd, 0xa6, 0xe2, 0x39, 0x39, 0x44, 0x20, 0x54, 0xd5, 0xf3, 0xa4, 0x06, 0x7e, 0xa9, 0x8d, 0xe9, 0xd0, 0x04, 0x94}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + gcp_GCPSEVSNP = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x04, 0xc0, 0x75, 0xd0, 0x9b, 0x7e, 0x4e, 0xcf, 0xb5, 0x16, 0x89, 0x6b, 0x26, 0x50, 0x9e, 0x33, 0xd1, 0xc1, 0x64, 0x10, 0x82, 0xd2, 0x4c, 0x95, 0xb1, 0x8d, 0x56, 0xec, 0x0c, 0x3d, 0x83, 0x25}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xc3, 0x94, 0x1e, 0x53, 0xda, 0x29, 0x96, 0x2e, 0xfc, 0x9f, 0xf4, 0x4e, 0x9d, 0xde, 0x62, 0x4c, 0xdf, 0xa2, 0x71, 0xed, 0x15, 0x49, 0x19, 0xed, 0xe8, 0xec, 0xf2, 0xbc, 0x67, 0x80, 0x8b, 0x62}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xbd, 0xd1, 0x4b, 0x35, 0xe0, 0xe6, 0x03, 0xea, 0xb0, 0xaa, 0x55, 0x5b, 0x4b, 0x94, 0xdc, 0x1f, 0x53, 0x46, 0x47, 0x58, 0xc8, 0x8b, 0xad, 0x00, 0x7f, 0x0f, 0x06, 0x94, 0xa5, 0xa8, 0xfa, 0x6a}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + openstack_QEMUVTPM = M{4: {Expected: []byte{0x5d, 0x50, 0x7b, 0xa0, 0x21, 0xd3, 0xbe, 0xba, 0x8f, 0x3b, 0x32, 0xff, 0xa9, 0x44, 0xa3, 0xdb, 0x16, 0x39, 0x91, 0xdb, 0xad, 0x0f, 0xd7, 0xe7, 0xf0, 0x50, 0x19, 0xa7, 0x49, 0xc0, 0x32, 0xbd}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x33, 0x6f, 0x51, 0x2a, 0x64, 0x17, 0x0c, 0x97, 0xe9, 0x0f, 0x5c, 0xa3, 0xdf, 0x81, 0x6c, 0x81, 0xb7, 0xd2, 0x2f, 0xec, 0xc6, 0x97, 0x15, 0x54, 0x51, 0xff, 0x6b, 0x27, 0x9d, 0x45, 0x80, 0xc6}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xa8, 0x42, 0xd2, 0x06, 0x43, 0x6c, 0x79, 0x7c, 0x72, 0x44, 0x7f, 0xa1, 0x01, 0x87, 0xa3, 0x74, 0x61, 0xbb, 0x32, 0xd3, 0x92, 0x52, 0xb1, 0x2b, 0x24, 0xe9, 0xaf, 0x0f, 0x28, 0x7b, 0x03, 0xd2}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} qemu_QEMUTDX M - qemu_QEMUVTPM = M{4: {Expected: []byte{0xae, 0x00, 0x7e, 0x18, 0x37, 0x60, 0x33, 0x2e, 0xbb, 0x45, 0x35, 0x64, 0x6f, 0x5d, 0xa6, 0x9f, 0xff, 0xe4, 0xb9, 0x52, 0x54, 0x9c, 0x77, 0x61, 0x10, 0xa6, 0x07, 0xf0, 0xbe, 0xb7, 0x61, 0xee}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x8f, 0xe7, 0x72, 0xdb, 0xe9, 0xc9, 0x1f, 0x45, 0x4f, 0x2e, 0xcc, 0x97, 0x98, 0x6d, 0x51, 0x69, 0x90, 0x16, 0x21, 0x40, 0x57, 0x75, 0x33, 0xcb, 0x7e, 0xed, 0xfb, 0x11, 0xd1, 0x99, 0xe3, 0x75}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x5d, 0x58, 0xd0, 0x6d, 0xf4, 0x70, 0xfa, 0xbf, 0x2f, 0xec, 0x79, 0xa7, 0x22, 0x8c, 0x13, 0x21, 0xc3, 0x71, 0x75, 0xa0, 0x58, 0x3d, 0xcb, 0xf6, 0x63, 0x59, 0x09, 0x83, 0xf3, 0xa3, 0xe8, 0x49}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + qemu_QEMUVTPM = M{4: {Expected: []byte{0x72, 0x44, 0xa4, 0x36, 0x64, 0x9a, 0x60, 0xf7, 0xbc, 0x3a, 0xb6, 0x88, 0xe0, 0xd4, 0xbf, 0x81, 0xe5, 0xc7, 0xc9, 0x88, 0xf8, 0x16, 0x26, 0x09, 0x64, 0xb5, 0x08, 0xea, 0xef, 0x17, 0xf0, 0x1e}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x2a, 0x00, 0x6f, 0x8c, 0x3d, 0xa3, 0xa2, 0x80, 0x42, 0x2c, 0x7c, 0xbb, 0x4f, 0x1e, 0x47, 0x08, 0x8d, 0x91, 0x97, 0xec, 0xf9, 0x39, 0x0f, 0xd8, 0x96, 0x5b, 0x50, 0x12, 0xed, 0xf6, 0x1e, 0x14}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x0d, 0x4e, 0xfa, 0xf6, 0xa3, 0xf4, 0x74, 0xa2, 0xc9, 0x10, 0xda, 0xae, 0xea, 0x8e, 0x98, 0x7c, 0x1f, 0x61, 0x38, 0x95, 0xa4, 0x11, 0x24, 0x3f, 0x16, 0x20, 0x4c, 0x75, 0x24, 0xc2, 0x35, 0x10}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} ) diff --git a/internal/config/image_enterprise.go b/internal/config/image_enterprise.go index dc1246ae6..5bcebcc8c 100644 --- a/internal/config/image_enterprise.go +++ b/internal/config/image_enterprise.go @@ -10,5 +10,5 @@ package config const ( // defaultImage is the default image to use. - defaultImage = "ref/main/stream/nightly/v2.24.0-pre.0.20250513083104-b566e98b2d47" + defaultImage = "ref/main/stream/nightly/v2.24.0-pre.0.20250515163144-ba9dcb87ed0a" ) From 5cb48e6f6ed57dceb822474955852ba399bb2434 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 19 May 2025 08:23:30 +0200 Subject: [PATCH 282/311] deps: update dependency numpy to v2.2.6 (#3835) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/actions/e2e_benchmark/evaluate/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/actions/e2e_benchmark/evaluate/requirements.txt b/.github/actions/e2e_benchmark/evaluate/requirements.txt index 8d98451ba..fa4ee448b 100644 --- a/.github/actions/e2e_benchmark/evaluate/requirements.txt +++ b/.github/actions/e2e_benchmark/evaluate/requirements.txt @@ -1,3 +1,3 @@ -numpy ==2.2.5 +numpy ==2.2.6 matplotlib ==3.10.3 Pillow ==11.2.1 \ No newline at end of file From 3c1ff17f2eb7775b86c21292f9c5b52c56f31e1a Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 19 May 2025 08:57:56 +0200 Subject: [PATCH 283/311] deps: update Kubernetes versions (#3833) * deps: update Kubernetes versions * deps: tidy all modules --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: edgelessci --- docs/docs/architecture/versions.md | 4 +- internal/versions/versions.go | 44 +++++++++---------- .../docs/resources/cluster.md | 2 +- 3 files changed, 25 insertions(+), 25 deletions(-) diff --git a/docs/docs/architecture/versions.md b/docs/docs/architecture/versions.md index d5cbc987b..931e4660f 100644 --- a/docs/docs/architecture/versions.md +++ b/docs/docs/architecture/versions.md @@ -17,5 +17,5 @@ The following Kubernetes versions are currently supported: * v1.29.15 -* v1.30.12 -* v1.31.8 +* v1.30.13 +* v1.31.9 diff --git a/internal/versions/versions.go b/internal/versions/versions.go index 896337321..1ae3ec291 100644 --- a/internal/versions/versions.go +++ b/internal/versions/versions.go @@ -183,9 +183,9 @@ const ( //nolint:revive V1_29 ValidK8sVersion = "v1.29.15" // renovate:kubernetes-release //nolint:revive - V1_30 ValidK8sVersion = "v1.30.12" // renovate:kubernetes-release + V1_30 ValidK8sVersion = "v1.30.13" // renovate:kubernetes-release //nolint:revive - V1_31 ValidK8sVersion = "v1.31.8" // renovate:kubernetes-release + V1_31 ValidK8sVersion = "v1.31.9" // renovate:kubernetes-release // Default k8s version deployed by Constellation. Default ValidK8sVersion = V1_30 @@ -265,7 +265,7 @@ var VersionConfigs = map[ValidK8sVersion]KubernetesVersion{ ClusterAutoscalerImage: "registry.k8s.io/autoscaling/cluster-autoscaler:v1.29.5@sha256:76865740be7c965b35ee1524931bb4abfe4c27b5bfad280e84068cd6653ee7bb", // renovate:container }, V1_30: { - ClusterVersion: "v1.30.12", // renovate:kubernetes-release + ClusterVersion: "v1.30.13", // renovate:kubernetes-release KubernetesComponents: components.Components{ { Url: "https://github.com/containernetworking/plugins/releases/download/v1.7.1/cni-plugins-linux-amd64-v1.7.1.tgz", // renovate:cni-plugins-release @@ -280,33 +280,33 @@ var VersionConfigs = map[ValidK8sVersion]KubernetesVersion{ Extract: true, }, { - Url: "https://dl.k8s.io/v1.30.12/bin/linux/amd64/kubelet", // renovate:kubernetes-release - Hash: "sha256:aab260aa88dd27f785bdb64e7e5be0173bcd1a871d0fa84d5dc7736469f7c395", + Url: "https://dl.k8s.io/v1.30.13/bin/linux/amd64/kubelet", // renovate:kubernetes-release + Hash: "sha256:b8d8c3cc0c13b2e42c1d83ab6c03024825bc01887c923fd6f8568ebe066ec28e", InstallPath: constants.KubeletPath, Extract: false, }, { - Url: "https://dl.k8s.io/v1.30.12/bin/linux/amd64/kubeadm", // renovate:kubernetes-release - Hash: "sha256:88422e8b3749b5eaf50a9889a56ee5615cd8a027711f26c6687788e758b949f8", + Url: "https://dl.k8s.io/v1.30.13/bin/linux/amd64/kubeadm", // renovate:kubernetes-release + Hash: "sha256:dbea796b7b716f7b30ea99e021c3730ef3debace4c8a62c88abfc266b3ab7a96", InstallPath: constants.KubeadmPath, Extract: false, }, { - Url: "https://dl.k8s.io/v1.30.12/bin/linux/amd64/kubectl", // renovate:kubernetes-release - Hash: "sha256:261a3c4eb12e09207b9e08f0b43d547220569317ed8d7a22638572100ace5b80", + Url: "https://dl.k8s.io/v1.30.13/bin/linux/amd64/kubectl", // renovate:kubernetes-release + Hash: "sha256:b92bd89b27386b671841d5970b926b645c2ae44e5ca0663cff0f1c836a1530ee", InstallPath: constants.KubectlPath, Extract: false, }, { - Url: "data:application/json;base64,W3sib3AiOiJyZXBsYWNlIiwicGF0aCI6Ii9zcGVjL2NvbnRhaW5lcnMvMC9pbWFnZSIsInZhbHVlIjoicmVnaXN0cnkuazhzLmlvL2t1YmUtYXBpc2VydmVyOnYxLjMwLjEyQHNoYTI1Njo0ODc4NjgyZjdhMDQ0Mjc0ZDQyMzk5YTYzMTZlZjQ1MmM1NDExYWFmZDRhZDk5Y2M1N2RlNzIzNWNhNDkwZTRlIn1d", + Url: "data:application/json;base64,W3sib3AiOiJyZXBsYWNlIiwicGF0aCI6Ii9zcGVjL2NvbnRhaW5lcnMvMC9pbWFnZSIsInZhbHVlIjoicmVnaXN0cnkuazhzLmlvL2t1YmUtYXBpc2VydmVyOnYxLjMwLjEzQHNoYTI1NjpiZDY4ZDgxYzIwYWQ1NzgxYWRlYzlmNmVhZTI0YzgzZDZmNjZjM2FmYzBkNGJhYTMyZDNmMmQ4NjVjODJkNDM2In1d", InstallPath: patchFilePath("kube-apiserver"), }, { - Url: "data:application/json;base64,W3sib3AiOiJyZXBsYWNlIiwicGF0aCI6Ii9zcGVjL2NvbnRhaW5lcnMvMC9pbWFnZSIsInZhbHVlIjoicmVnaXN0cnkuazhzLmlvL2t1YmUtY29udHJvbGxlci1tYW5hZ2VyOnYxLjMwLjEyQHNoYTI1NjozYTM2NzExZDA0MDlkNTY1YjM3MGExOGQwYzE5MzM5ZTkzZDRmMWIxZjJiM2ZkMzgyZWIzMWM3MTRjNDYzYjc0In1d", + Url: "data:application/json;base64,W3sib3AiOiJyZXBsYWNlIiwicGF0aCI6Ii9zcGVjL2NvbnRhaW5lcnMvMC9pbWFnZSIsInZhbHVlIjoicmVnaXN0cnkuazhzLmlvL2t1YmUtY29udHJvbGxlci1tYW5hZ2VyOnYxLjMwLjEzQHNoYTI1NjpiODVhNWQ3ODVjYzAwYjAzNjEzZjY3YTdhZmNhMWU5MWIyYTBjY2Y0Y2VkOGU2OWQzOGJkYTVmNjg2OTgwZjNmIn1d", InstallPath: patchFilePath("kube-controller-manager"), }, { - Url: "data:application/json;base64,W3sib3AiOiJyZXBsYWNlIiwicGF0aCI6Ii9zcGVjL2NvbnRhaW5lcnMvMC9pbWFnZSIsInZhbHVlIjoicmVnaXN0cnkuazhzLmlvL2t1YmUtc2NoZWR1bGVyOnYxLjMwLjEyQHNoYTI1Njo1MjFjODQzZDAxMDI1YmU3ZDRlMjQ2ZGRlZThjZGU3NDU1NmViOTgxM2M2MDZkNmRiOWYwZjAzMjM2ZjZkMDI5In1d", + Url: "data:application/json;base64,W3sib3AiOiJyZXBsYWNlIiwicGF0aCI6Ii9zcGVjL2NvbnRhaW5lcnMvMC9pbWFnZSIsInZhbHVlIjoicmVnaXN0cnkuazhzLmlvL2t1YmUtc2NoZWR1bGVyOnYxLjMwLjEzQHNoYTI1NjpiZmE1ZjEwZGMzZTE0MzE2Nzg1ZjIzZjhlMWY0ZTRkYmM1NTZiMDMzMjcwZDkxMTg1ZmNhMDU3NzM1M2NhZDMzIn1d", InstallPath: patchFilePath("kube-scheduler"), }, { @@ -332,7 +332,7 @@ var VersionConfigs = map[ValidK8sVersion]KubernetesVersion{ ClusterAutoscalerImage: "registry.k8s.io/autoscaling/cluster-autoscaler:v1.30.4@sha256:f508cac11c8300f27529ed73f8d80f9b1949f819e8f8787f28afcb8e47ceb2b4", // renovate:container }, V1_31: { - ClusterVersion: "v1.31.8", // renovate:kubernetes-release + ClusterVersion: "v1.31.9", // renovate:kubernetes-release KubernetesComponents: components.Components{ { Url: "https://github.com/containernetworking/plugins/releases/download/v1.7.1/cni-plugins-linux-amd64-v1.7.1.tgz", // renovate:cni-plugins-release @@ -347,33 +347,33 @@ var VersionConfigs = map[ValidK8sVersion]KubernetesVersion{ Extract: true, }, { - Url: "https://dl.k8s.io/v1.31.8/bin/linux/amd64/kubelet", // renovate:kubernetes-release - Hash: "sha256:02697f8d14fc36089954380730f300df78b63dada1dc6f52d8e60bd5ce217d48", + Url: "https://dl.k8s.io/v1.31.9/bin/linux/amd64/kubelet", // renovate:kubernetes-release + Hash: "sha256:4e5e2bce4e80575a253654877f0156393d79647a36afb784da27f3ddef446456", InstallPath: constants.KubeletPath, Extract: false, }, { - Url: "https://dl.k8s.io/v1.31.8/bin/linux/amd64/kubeadm", // renovate:kubernetes-release - Hash: "sha256:b979b58548902a152b0ab89265347c34aac9f1c7e9666953806267d033f0d63b", + Url: "https://dl.k8s.io/v1.31.9/bin/linux/amd64/kubeadm", // renovate:kubernetes-release + Hash: "sha256:9653845e48754df94842cce1ef76874e7f4c1a32d782dd0c7e6cf12e3a718dde", InstallPath: constants.KubeadmPath, Extract: false, }, { - Url: "https://dl.k8s.io/v1.31.8/bin/linux/amd64/kubectl", // renovate:kubernetes-release - Hash: "sha256:be0aa44a50a9aada4e9402e361ffb0d5bb1fd4f6950751399fcaf3b8b936a746", + Url: "https://dl.k8s.io/v1.31.9/bin/linux/amd64/kubectl", // renovate:kubernetes-release + Hash: "sha256:720d31a15368ad56993c127a7d4fa2688a8520029c2e6be86b1a877ad6f92624", InstallPath: constants.KubectlPath, Extract: false, }, { - Url: "data:application/json;base64,W3sib3AiOiJyZXBsYWNlIiwicGF0aCI6Ii9zcGVjL2NvbnRhaW5lcnMvMC9pbWFnZSIsInZhbHVlIjoicmVnaXN0cnkuazhzLmlvL2t1YmUtYXBpc2VydmVyOnYxLjMxLjhAc2hhMjU2OjMwMDkwZGI2YTdkNTM3OTkxNjNjZTgyZGFlOWU4ZGRiNjQ1ZmQ0N2RiOTNmMmVjOWRhMGNjNzg3ZmQ4MjU2MjUifV0=", + Url: "data:application/json;base64,W3sib3AiOiJyZXBsYWNlIiwicGF0aCI6Ii9zcGVjL2NvbnRhaW5lcnMvMC9pbWFnZSIsInZhbHVlIjoicmVnaXN0cnkuazhzLmlvL2t1YmUtYXBpc2VydmVyOnYxLjMxLjlAc2hhMjU2OjViNjhmMGRmMjIwMTM0MjJkYzhmYjlkZGZjZmY1MTNlYjZmYzkyZjlkYmY4YWFlNDE1NTVjODk1ZWZlZjVhMjAifV0=", InstallPath: patchFilePath("kube-apiserver"), }, { - Url: "data:application/json;base64,W3sib3AiOiJyZXBsYWNlIiwicGF0aCI6Ii9zcGVjL2NvbnRhaW5lcnMvMC9pbWFnZSIsInZhbHVlIjoicmVnaXN0cnkuazhzLmlvL2t1YmUtY29udHJvbGxlci1tYW5hZ2VyOnYxLjMxLjhAc2hhMjU2OjI5ZWFkZGM2NDc5MmE2ODlkZjQ4NTA2ZTc4YmJjNjQxZDA2M2FjOGJiOTJkMmU2NmFlMmFkMDU5Nzc0MjA3NDcifV0=", + Url: "data:application/json;base64,W3sib3AiOiJyZXBsYWNlIiwicGF0aCI6Ii9zcGVjL2NvbnRhaW5lcnMvMC9pbWFnZSIsInZhbHVlIjoicmVnaXN0cnkuazhzLmlvL2t1YmUtY29udHJvbGxlci1tYW5hZ2VyOnYxLjMxLjlAc2hhMjU2OmJlOWU3OTg3ZDMyM2IzOGExMmUyODQzNmNmZjZkNmVjNmZjMzFmZmRkM2VhMTFlYWE5ZDc0ODUyZTlkMzEyNDgifV0=", InstallPath: patchFilePath("kube-controller-manager"), }, { - Url: "data:application/json;base64,W3sib3AiOiJyZXBsYWNlIiwicGF0aCI6Ii9zcGVjL2NvbnRhaW5lcnMvMC9pbWFnZSIsInZhbHVlIjoicmVnaXN0cnkuazhzLmlvL2t1YmUtc2NoZWR1bGVyOnYxLjMxLjhAc2hhMjU2OjIyOTk0YTI2MzJlODEwNTk3MjA0ODBiOWY2YmRlYjEzM2IwOGQ1ODQ5MmQwYjM2ZGZkNmU5NzY4YjE1OWIyMmEifV0=", + Url: "data:application/json;base64,W3sib3AiOiJyZXBsYWNlIiwicGF0aCI6Ii9zcGVjL2NvbnRhaW5lcnMvMC9pbWFnZSIsInZhbHVlIjoicmVnaXN0cnkuazhzLmlvL2t1YmUtc2NoZWR1bGVyOnYxLjMxLjlAc2hhMjU2OmViMzU4YzczNDZiYjE3YWIyYzYzOWMzZmY4YWI3NmExNDdkZWM3YWU2MDlmNWMwYzI4MDAyMzNlNDIyNTNlZDEifV0=", InstallPath: patchFilePath("kube-scheduler"), }, { diff --git a/terraform-provider-constellation/docs/resources/cluster.md b/terraform-provider-constellation/docs/resources/cluster.md index 5a9c13bcf..a88026a23 100644 --- a/terraform-provider-constellation/docs/resources/cluster.md +++ b/terraform-provider-constellation/docs/resources/cluster.md @@ -69,7 +69,7 @@ resource "constellation_cluster" "azure_example" { See the [full list of CSPs](https://docs.edgeless.systems/constellation/overview/clouds) that Constellation supports. - `image` (Attributes) Constellation OS Image to use on the nodes. (see [below for nested schema](#nestedatt--image)) - `init_secret` (String) Secret used for initialization of the cluster. -- `kubernetes_version` (String) The Kubernetes version to use for the cluster. The supported versions are [v1.29.15 v1.30.12 v1.31.8]. +- `kubernetes_version` (String) The Kubernetes version to use for the cluster. The supported versions are [v1.29.15 v1.30.13 v1.31.9]. - `master_secret` (String) Hex-encoded 32-byte master secret for the cluster. - `master_secret_salt` (String) Hex-encoded 32-byte master secret salt for the cluster. - `measurement_salt` (String) Hex-encoded 32-byte measurement salt for the cluster. From 36bfca97f8eb15e42f1f60aecd5ae98e6fd7d2fc Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 19 May 2025 10:33:37 +0200 Subject: [PATCH 284/311] deps: update Go dependencies (#3836) * deps: update Go dependencies * constellation-node-operator: update etcd types --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Moritz Sanft --- go.mod | 97 ++++++------ go.sum | 145 +++++++++--------- .../internal/etcd/etcd.go | 2 +- .../internal/etcd/etcd_test.go | 2 +- 4 files changed, 123 insertions(+), 123 deletions(-) diff --git a/go.mod b/go.mod index d2dc9db78..f0d3fa6c0 100644 --- a/go.mod +++ b/go.mod @@ -11,32 +11,32 @@ replace github.com/martinjungblut/go-cryptsetup => github.com/daniel-weisse/go-c // See this issue: https://github.com/kubernetes/kubernetes/issues/79384 // And this README: https://github.com/kubernetes/kubernetes/blob/master/staging/README.md replace ( - k8s.io/cloud-provider => k8s.io/cloud-provider v0.33.0 - k8s.io/controller-manager => k8s.io/controller-manager v0.33.0 - k8s.io/cri-client => k8s.io/cri-client v0.33.0 - k8s.io/csi-translation-lib => k8s.io/csi-translation-lib v0.33.0 - k8s.io/dynamic-resource-allocation => k8s.io/dynamic-resource-allocation v0.33.0 - k8s.io/endpointslice => k8s.io/endpointslice v0.33.0 - k8s.io/externaljwt => k8s.io/externaljwt v0.33.0 - k8s.io/kube-aggregator => k8s.io/kube-aggregator v0.33.0 - k8s.io/kube-controller-manager => k8s.io/kube-controller-manager v0.33.0 - k8s.io/kube-proxy => k8s.io/kube-proxy v0.33.0 - k8s.io/kube-scheduler => k8s.io/kube-scheduler v0.33.0 - k8s.io/legacy-cloud-providers => k8s.io/legacy-cloud-providers v0.30.12 - k8s.io/pod-security-admission => k8s.io/pod-security-admission v0.33.0 - k8s.io/sample-apiserver => k8s.io/sample-apiserver v0.33.0 + k8s.io/cloud-provider => k8s.io/cloud-provider v0.33.1 + k8s.io/controller-manager => k8s.io/controller-manager v0.33.1 + k8s.io/cri-client => k8s.io/cri-client v0.33.1 + k8s.io/csi-translation-lib => k8s.io/csi-translation-lib v0.33.1 + k8s.io/dynamic-resource-allocation => k8s.io/dynamic-resource-allocation v0.33.1 + k8s.io/endpointslice => k8s.io/endpointslice v0.33.1 + k8s.io/externaljwt => k8s.io/externaljwt v0.33.1 + k8s.io/kube-aggregator => k8s.io/kube-aggregator v0.33.1 + k8s.io/kube-controller-manager => k8s.io/kube-controller-manager v0.33.1 + k8s.io/kube-proxy => k8s.io/kube-proxy v0.33.1 + k8s.io/kube-scheduler => k8s.io/kube-scheduler v0.33.1 + k8s.io/legacy-cloud-providers => k8s.io/legacy-cloud-providers v0.30.13 + k8s.io/pod-security-admission => k8s.io/pod-security-admission v0.33.1 + k8s.io/sample-apiserver => k8s.io/sample-apiserver v0.33.1 ) require ( cloud.google.com/go/compute v1.37.0 - cloud.google.com/go/compute/metadata v0.6.0 + cloud.google.com/go/compute/metadata v0.7.0 cloud.google.com/go/kms v1.21.2 cloud.google.com/go/secretmanager v1.14.7 - cloud.google.com/go/storage v1.53.0 + cloud.google.com/go/storage v1.54.0 dario.cat/mergo v1.0.2 github.com/Azure/azure-sdk-for-go v68.0.0+incompatible github.com/Azure/azure-sdk-for-go/sdk/azcore v1.18.0 - github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.9.0 + github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.10.0 github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v6 v6.4.0 github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/network/armnetwork/v6 v6.2.0 github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/azsecrets v1.3.1 @@ -50,7 +50,7 @@ require ( github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.75 github.com/aws/aws-sdk-go-v2/service/autoscaling v1.52.4 github.com/aws/aws-sdk-go-v2/service/cloudfront v1.46.1 - github.com/aws/aws-sdk-go-v2/service/ec2 v1.217.0 + github.com/aws/aws-sdk-go-v2/service/ec2 v1.218.0 github.com/aws/aws-sdk-go-v2/service/elasticloadbalancingv2 v1.45.2 github.com/aws/aws-sdk-go-v2/service/resourcegroupstaggingapi v1.26.3 github.com/aws/aws-sdk-go-v2/service/s3 v1.79.3 @@ -73,7 +73,7 @@ require ( github.com/google/go-tpm v0.9.5 github.com/google/go-tpm-tools v0.4.4 github.com/google/uuid v1.6.0 - github.com/googleapis/gax-go/v2 v2.14.1 + github.com/googleapis/gax-go/v2 v2.14.2 github.com/gophercloud/gophercloud/v2 v2.7.0 github.com/gophercloud/utils/v2 v2.0.0-20250506092640-af27464b6166 github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.3.2 @@ -85,12 +85,12 @@ require ( github.com/hashicorp/hc-install v0.9.2 github.com/hashicorp/hcl/v2 v2.23.0 github.com/hashicorp/terraform-exec v0.23.0 - github.com/hashicorp/terraform-json v0.24.0 - github.com/hashicorp/terraform-plugin-framework v1.14.1 - github.com/hashicorp/terraform-plugin-framework-validators v0.17.0 - github.com/hashicorp/terraform-plugin-go v0.26.0 + github.com/hashicorp/terraform-json v0.25.0 + github.com/hashicorp/terraform-plugin-framework v1.15.0 + github.com/hashicorp/terraform-plugin-framework-validators v0.18.0 + github.com/hashicorp/terraform-plugin-go v0.27.0 github.com/hashicorp/terraform-plugin-log v0.9.0 - github.com/hashicorp/terraform-plugin-testing v1.12.0 + github.com/hashicorp/terraform-plugin-testing v1.13.0 github.com/hexops/gotextdiff v1.0.3 github.com/martinjungblut/go-cryptsetup v0.0.0-20220520180014-fd0874fd07a6 github.com/mattn/go-isatty v0.0.20 @@ -103,7 +103,7 @@ require ( github.com/samber/slog-multi v1.4.0 github.com/schollz/progressbar/v3 v3.18.0 github.com/secure-systems-lab/go-securesystemslib v0.9.0 - github.com/siderolabs/talos/pkg/machinery v1.10.1 + github.com/siderolabs/talos/pkg/machinery v1.10.2 github.com/sigstore/rekor v1.3.10 github.com/sigstore/sigstore v1.9.4 github.com/spf13/afero v1.14.0 @@ -112,9 +112,9 @@ require ( github.com/stretchr/testify v1.10.0 github.com/tink-crypto/tink-go/v2 v2.4.0 github.com/vincent-petithory/dataurl v1.0.0 - go.etcd.io/etcd/api/v3 v3.5.21 - go.etcd.io/etcd/client/pkg/v3 v3.5.21 - go.etcd.io/etcd/client/v3 v3.5.21 + go.etcd.io/etcd/api/v3 v3.6.0 + go.etcd.io/etcd/client/pkg/v3 v3.6.0 + go.etcd.io/etcd/client/v3 v3.6.0 go.uber.org/goleak v1.3.0 golang.org/x/crypto v0.38.0 golang.org/x/exp v0.0.0-20250506013437-ce4c2cf36ca6 @@ -122,20 +122,20 @@ require ( golang.org/x/sys v0.33.0 golang.org/x/text v0.25.0 golang.org/x/tools v0.33.0 - google.golang.org/api v0.232.0 - google.golang.org/grpc v1.72.0 + google.golang.org/api v0.233.0 + google.golang.org/grpc v1.72.1 google.golang.org/protobuf v1.36.6 gopkg.in/yaml.v3 v3.0.1 helm.sh/helm/v3 v3.17.3 - k8s.io/api v0.33.0 - k8s.io/apiextensions-apiserver v0.33.0 - k8s.io/apimachinery v0.33.0 - k8s.io/apiserver v0.33.0 - k8s.io/client-go v0.33.0 - k8s.io/cluster-bootstrap v0.33.0 - k8s.io/kubelet v0.33.0 - k8s.io/kubernetes v1.33.0 - k8s.io/mount-utils v0.33.0 + k8s.io/api v0.33.1 + k8s.io/apiextensions-apiserver v0.33.1 + k8s.io/apimachinery v0.33.1 + k8s.io/apiserver v0.33.1 + k8s.io/client-go v0.33.1 + k8s.io/cluster-bootstrap v0.33.1 + k8s.io/kubelet v0.33.1 + k8s.io/kubernetes v1.33.1 + k8s.io/mount-utils v0.33.1 k8s.io/utils v0.0.0-20250502105355-0f33e8f1c979 libvirt.org/go/libvirt v1.11002.0 sigs.k8s.io/controller-runtime v0.20.4 @@ -144,12 +144,12 @@ require ( require ( cel.dev/expr v0.23.1 // indirect - cloud.google.com/go v0.120.1 // indirect + cloud.google.com/go v0.121.0 // indirect cloud.google.com/go/auth v0.16.1 // indirect cloud.google.com/go/auth/oauth2adapt v0.2.8 // indirect cloud.google.com/go/iam v1.5.2 // indirect cloud.google.com/go/longrunning v0.6.7 // indirect - cloud.google.com/go/monitoring v1.24.0 // indirect + cloud.google.com/go/monitoring v1.24.2 // indirect github.com/AdaLogics/go-fuzz-headers v0.0.0-20230811130428-ced1acdcaa24 // indirect github.com/Azure/azure-sdk-for-go/sdk/internal v1.11.1 // indirect github.com/Azure/azure-sdk-for-go/sdk/keyvault/azkeys v0.10.0 // indirect @@ -268,13 +268,14 @@ require ( github.com/gorilla/websocket v1.5.4-0.20250319132907-e064f32e3674 // indirect github.com/gosuri/uitable v0.0.4 // indirect github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79 // indirect + github.com/grpc-ecosystem/grpc-gateway/v2 v2.26.3 // indirect github.com/hashicorp/errwrap v1.1.0 // indirect github.com/hashicorp/go-checkpoint v0.5.0 // indirect github.com/hashicorp/go-cleanhttp v0.5.2 // indirect github.com/hashicorp/go-cty v1.5.0 // indirect github.com/hashicorp/go-hclog v1.6.3 // indirect github.com/hashicorp/go-multierror v1.1.1 // indirect - github.com/hashicorp/go-plugin v1.6.2 // indirect + github.com/hashicorp/go-plugin v1.6.3 // indirect github.com/hashicorp/go-retryablehttp v0.7.7 // indirect github.com/hashicorp/go-secure-stdlib/awsutil v0.1.6 // indirect github.com/hashicorp/go-secure-stdlib/parseutil v0.1.9 // indirect @@ -282,8 +283,8 @@ require ( github.com/hashicorp/go-sockaddr v1.0.6 // indirect github.com/hashicorp/go-uuid v1.0.3 // indirect github.com/hashicorp/logutils v1.0.0 // indirect - github.com/hashicorp/terraform-plugin-sdk/v2 v2.36.1 // indirect - github.com/hashicorp/terraform-registry-address v0.2.4 // indirect + github.com/hashicorp/terraform-plugin-sdk/v2 v2.37.0 // indirect + github.com/hashicorp/terraform-registry-address v0.2.5 // indirect github.com/hashicorp/terraform-svchost v0.1.1 // indirect github.com/hashicorp/yamux v0.1.1 // indirect github.com/huandu/xstrings v1.5.0 // indirect @@ -382,13 +383,13 @@ require ( golang.org/x/time v0.11.0 // indirect gomodules.xyz/jsonpatch/v2 v2.4.0 // indirect google.golang.org/appengine v1.6.8 // indirect - google.golang.org/genproto v0.0.0-20250303144028-a0af3efb3deb // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20250425173222-7b384671a197 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20250428153025-10db94c68c34 // indirect + google.golang.org/genproto v0.0.0-20250505200425-f936aa4a68b2 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20250505200425-f936aa4a68b2 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20250505200425-f936aa4a68b2 // indirect gopkg.in/evanphx/json-patch.v4 v4.12.0 // indirect gopkg.in/inf.v0 v0.9.1 // indirect k8s.io/cli-runtime v0.32.2 // indirect - k8s.io/component-base v0.33.0 // indirect + k8s.io/component-base v0.33.1 // indirect k8s.io/klog/v2 v2.130.1 // indirect k8s.io/kube-openapi v0.0.0-20250318190949-c8a335a9a2ff // indirect k8s.io/kubectl v0.32.2 // indirect diff --git a/go.sum b/go.sum index a08bab1d3..3ac076772 100644 --- a/go.sum +++ b/go.sum @@ -1,15 +1,15 @@ cel.dev/expr v0.23.1 h1:K4KOtPCJQjVggkARsjG9RWXP6O4R73aHeJMa/dmCQQg= cel.dev/expr v0.23.1/go.mod h1:hLPLo1W4QUmuYdA72RBX06QTs6MXw941piREPl3Yfiw= -cloud.google.com/go v0.120.1 h1:Z+5V7yd383+9617XDCyszmK5E4wJRJL+tquMfDj9hLM= -cloud.google.com/go v0.120.1/go.mod h1:56Vs7sf/i2jYM6ZL9NYlC82r04PThNcPS5YgFmb0rp8= +cloud.google.com/go v0.121.0 h1:pgfwva8nGw7vivjZiRfrmglGWiCJBP+0OmDpenG/Fwg= +cloud.google.com/go v0.121.0/go.mod h1:rS7Kytwheu/y9buoDmu5EIpMMCI4Mb8ND4aeN4Vwj7Q= cloud.google.com/go/auth v0.16.1 h1:XrXauHMd30LhQYVRHLGvJiYeczweKQXZxsTbV9TiguU= cloud.google.com/go/auth v0.16.1/go.mod h1:1howDHJ5IETh/LwYs3ZxvlkXF48aSqqJUM+5o02dNOI= cloud.google.com/go/auth/oauth2adapt v0.2.8 h1:keo8NaayQZ6wimpNSmW5OPc283g65QNIiLpZnkHRbnc= cloud.google.com/go/auth/oauth2adapt v0.2.8/go.mod h1:XQ9y31RkqZCcwJWNSx2Xvric3RrU88hAYYbjDWYDL+c= cloud.google.com/go/compute v1.37.0 h1:XxtZlXYkZXub3LNaLu90TTemcFqIU1yZ4E4q9VlR39A= cloud.google.com/go/compute v1.37.0/go.mod h1:AsK4VqrSyXBo4SMbRtfAO1VfaMjUEjEwv1UB/AwVp5Q= -cloud.google.com/go/compute/metadata v0.6.0 h1:A6hENjEsCDtC1k8byVsgwvVcioamEHvZ4j01OwKxG9I= -cloud.google.com/go/compute/metadata v0.6.0/go.mod h1:FjyFAW1MW0C203CEOMDTu3Dk1FlqW3Rga40jzHL4hfg= +cloud.google.com/go/compute/metadata v0.7.0 h1:PBWF+iiAerVNe8UCHxdOt6eHLVc3ydFeOCw78U8ytSU= +cloud.google.com/go/compute/metadata v0.7.0/go.mod h1:j5MvL9PprKL39t166CoB1uVHfQMs4tFQZZcKwksXUjo= cloud.google.com/go/iam v1.5.2 h1:qgFRAGEmd8z6dJ/qyEchAuL9jpswyODjA2lS+w234g8= cloud.google.com/go/iam v1.5.2/go.mod h1:SE1vg0N81zQqLzQEwxL2WI6yhetBdbNQuTvIKCSkUHE= cloud.google.com/go/kms v1.21.2 h1:c/PRUSMNQ8zXrc1sdAUnsenWWaNXN+PzTXfXOcSFdoE= @@ -18,14 +18,14 @@ cloud.google.com/go/logging v1.13.0 h1:7j0HgAp0B94o1YRDqiqm26w4q1rDMH7XNRU34lJXH cloud.google.com/go/logging v1.13.0/go.mod h1:36CoKh6KA/M0PbhPKMq6/qety2DCAErbhXT62TuXALA= cloud.google.com/go/longrunning v0.6.7 h1:IGtfDWHhQCgCjwQjV9iiLnUta9LBCo8R9QmAFsS/PrE= cloud.google.com/go/longrunning v0.6.7/go.mod h1:EAFV3IZAKmM56TyiE6VAP3VoTzhZzySwI/YI1s/nRsY= -cloud.google.com/go/monitoring v1.24.0 h1:csSKiCJ+WVRgNkRzzz3BPoGjFhjPY23ZTcaenToJxMM= -cloud.google.com/go/monitoring v1.24.0/go.mod h1:Bd1PRK5bmQBQNnuGwHBfUamAV1ys9049oEPHnn4pcsc= +cloud.google.com/go/monitoring v1.24.2 h1:5OTsoJ1dXYIiMiuL+sYscLc9BumrL3CarVLL7dd7lHM= +cloud.google.com/go/monitoring v1.24.2/go.mod h1:x7yzPWcgDRnPEv3sI+jJGBkwl5qINf+6qY4eq0I9B4U= cloud.google.com/go/secretmanager v1.14.7 h1:VkscIRzj7GcmZyO4z9y1EH7Xf81PcoiAo7MtlD+0O80= cloud.google.com/go/secretmanager v1.14.7/go.mod h1:uRuB4F6NTFbg0vLQ6HsT7PSsfbY7FqHbtJP1J94qxGc= -cloud.google.com/go/storage v1.53.0 h1:gg0ERZwL17pJ+Cz3cD2qS60w1WMDnwcm5YPAIQBHUAw= -cloud.google.com/go/storage v1.53.0/go.mod h1:7/eO2a/srr9ImZW9k5uufcNahT2+fPb8w5it1i5boaA= -cloud.google.com/go/trace v1.11.3 h1:c+I4YFjxRQjvAhRmSsmjpASUKq88chOX854ied0K/pE= -cloud.google.com/go/trace v1.11.3/go.mod h1:pt7zCYiDSQjC9Y2oqCsh9jF4GStB/hmjrYLsxRR27q8= +cloud.google.com/go/storage v1.54.0 h1:Du3XEyliAiftfyW0bwfdppm2MMLdpVAfiIg4T2nAI+0= +cloud.google.com/go/storage v1.54.0/go.mod h1:hIi9Boe8cHxTyaeqh7KMMwKg088VblFK46C2x/BWaZE= +cloud.google.com/go/trace v1.11.6 h1:2O2zjPzqPYAHrn3OKl029qlqG6W8ZdYaOWRyr8NgMT4= +cloud.google.com/go/trace v1.11.6/go.mod h1:GA855OeDEBiBMzcckLPE2kDunIpC72N+Pq8WFieFjnI= dario.cat/mergo v1.0.2 h1:85+piFYR1tMbRrLcDwR18y4UKJ3aH1Tbzi24VRW1TK8= dario.cat/mergo v1.0.2/go.mod h1:E/hbnu0NxMFBjpMIE34DRGLWqDy0g5FuKDhCb31ngxA= filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA= @@ -38,8 +38,8 @@ github.com/Azure/azure-sdk-for-go v68.0.0+incompatible h1:fcYLmCpyNYRnvJbPerq7U0 github.com/Azure/azure-sdk-for-go v68.0.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= github.com/Azure/azure-sdk-for-go/sdk/azcore v1.18.0 h1:Gt0j3wceWMwPmiazCa8MzMA0MfhmPIz0Qp0FJ6qcM0U= github.com/Azure/azure-sdk-for-go/sdk/azcore v1.18.0/go.mod h1:Ot/6aikWnKWi4l9QB7qVSwa8iMphQNqkWALMoNT3rzM= -github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.9.0 h1:OVoM452qUFBrX+URdH3VpR299ma4kfom0yB0URYky9g= -github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.9.0/go.mod h1:kUjrAo8bgEwLeZ/CmHqNl3Z/kPm7y6FKfxxK0izYUg4= +github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.10.0 h1:j8BorDEigD8UFOSZQiSqAMOOleyQOOQPnUAwV+Ls1gA= +github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.10.0/go.mod h1:JdM5psgjfBf5fo2uWOZhflPWyDBZ/O/CNAH9CtsuZE4= github.com/Azure/azure-sdk-for-go/sdk/azidentity/cache v0.3.2 h1:yz1bePFlP5Vws5+8ez6T3HWXPmwOK7Yvq8QxDBD3SKY= github.com/Azure/azure-sdk-for-go/sdk/azidentity/cache v0.3.2/go.mod h1:Pa9ZNPuoNu/GztvBSKk9J1cDJW6vk/n0zLtV4mgd8N8= github.com/Azure/azure-sdk-for-go/sdk/internal v1.11.1 h1:FPKJS1T+clwv+OLGt13a8UjqeRuh0O4SJ3lUriThc+4= @@ -160,8 +160,8 @@ github.com/aws/aws-sdk-go-v2/service/autoscaling v1.52.4 h1:vzLD0FyNU4uxf2QE5UDG github.com/aws/aws-sdk-go-v2/service/autoscaling v1.52.4/go.mod h1:CDqMoc3KRdZJ8qziW96J35lKH01Wq3B2aihtHj2JbRs= github.com/aws/aws-sdk-go-v2/service/cloudfront v1.46.1 h1:6xZNYtuVwzBs8k+TmraERt0vL68Ppg9aUi+aTQmPaVM= github.com/aws/aws-sdk-go-v2/service/cloudfront v1.46.1/go.mod h1:FIBJ48TS+qJb+Ne4qJ+0NeIhtPTVXItXooTeNeVI4Po= -github.com/aws/aws-sdk-go-v2/service/ec2 v1.217.0 h1:Bzfj/H0nvEcdqnt5TVL7X0wBlwvPe0OXDt7UqcQmr9Q= -github.com/aws/aws-sdk-go-v2/service/ec2 v1.217.0/go.mod h1:ouvGEfHbLaIlWwpDpOVWPWR+YwO0HDv3vm5tYLq8ImY= +github.com/aws/aws-sdk-go-v2/service/ec2 v1.218.0 h1:QPYsTfcPpPhkF+37pxLcl3xbQz2SRxsShQNB6VCkvLo= +github.com/aws/aws-sdk-go-v2/service/ec2 v1.218.0/go.mod h1:ouvGEfHbLaIlWwpDpOVWPWR+YwO0HDv3vm5tYLq8ImY= github.com/aws/aws-sdk-go-v2/service/elasticloadbalancingv2 v1.45.2 h1:vX70Z4lNSr7XsioU0uJq5yvxgI50sB66MvD+V/3buS4= github.com/aws/aws-sdk-go-v2/service/elasticloadbalancingv2 v1.45.2/go.mod h1:xnCC3vFBfOKpU6PcsCKL2ktgBTZfOwTGxj6V8/X3IS4= github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.3 h1:eAh2A4b5IzM/lum78bZ590jy36+d/aFLgKF/4Vd1xPE= @@ -460,8 +460,8 @@ github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/googleapis/enterprise-certificate-proxy v0.3.6 h1:GW/XbdyBFQ8Qe+YAmFU9uHLo7OnF5tL52HFAgMmyrf4= github.com/googleapis/enterprise-certificate-proxy v0.3.6/go.mod h1:MkHOF77EYAE7qfSuSS9PU6g4Nt4e11cnsDUowfwewLA= -github.com/googleapis/gax-go/v2 v2.14.1 h1:hb0FFeiPaQskmvakKu5EbCbpntQn48jyHuvrkurSS/Q= -github.com/googleapis/gax-go/v2 v2.14.1/go.mod h1:Hb/NubMaVM88SrNkvl8X/o8XWwDJEPqouaLeN2IUxoA= +github.com/googleapis/gax-go/v2 v2.14.2 h1:eBLnkZ9635krYIPD+ag1USrOAI0Nr0QYF3+/3GqO0k0= +github.com/googleapis/gax-go/v2 v2.14.2/go.mod h1:ON64QhlJkhVtSqp4v1uaK92VyZ2gmvDQsweuyLV+8+w= github.com/gophercloud/gophercloud/v2 v2.7.0 h1:o0m4kgVcPgHlcXiWAjoVxGd8QCmvM5VU+YM71pFbn0E= github.com/gophercloud/gophercloud/v2 v2.7.0/go.mod h1:Ki/ILhYZr/5EPebrPL9Ej+tUg4lqx71/YH2JWVeU+Qk= github.com/gophercloud/utils/v2 v2.0.0-20250506092640-af27464b6166 h1:U82pil2tMV/BkeWmy3eKT9mTmodSfwOw+Czl/s5eBrw= @@ -478,7 +478,6 @@ github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79 h1:+ngKgrYPPJr github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.3.2 h1:sGm2vDRFUrQJO/Veii4h4zG2vvqG6uWNkBHSTqXOZk0= github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.3.2/go.mod h1:wd1YpapPLivG6nQgbf7ZkG1hhSOXDhhn4MLTknx2aAc= -github.com/grpc-ecosystem/grpc-gateway v1.16.0 h1:gmcG1KaJ57LophUzW0Hy8NmPhnMZb4M0+kPpLofRdBo= github.com/grpc-ecosystem/grpc-gateway/v2 v2.26.3 h1:5ZPtiqj0JL5oKWmcsq4VMaAW5ukBEgSGXEN89zeH1Jo= github.com/grpc-ecosystem/grpc-gateway/v2 v2.26.3/go.mod h1:ndYquD05frm2vACXE1nsccT4oJzjhw2arTS2cpUD1PI= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= @@ -504,8 +503,8 @@ github.com/hashicorp/go-kms-wrapping/wrappers/gcpckms/v2 v2.0.13 h1:NGBZnF+yPRZ3 github.com/hashicorp/go-kms-wrapping/wrappers/gcpckms/v2 v2.0.13/go.mod h1:4Xb+6d8VPeDcUNuh4toPqJlDpkajeJyIQeg36TtWhKw= github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= -github.com/hashicorp/go-plugin v1.6.2 h1:zdGAEd0V1lCaU0u+MxWQhtSDQmahpkwOun8U8EiRVog= -github.com/hashicorp/go-plugin v1.6.2/go.mod h1:CkgLQ5CZqNmdL9U9JzM532t8ZiYQ35+pj3b1FD37R0Q= +github.com/hashicorp/go-plugin v1.6.3 h1:xgHB+ZUSYeuJi96WtxEjzi23uh7YQpznjGh0U0UUrwg= +github.com/hashicorp/go-plugin v1.6.3/go.mod h1:MRobyh+Wc/nYy1V4KAXUiYfzxoYhs7V1mlH1Z7iY2h0= github.com/hashicorp/go-retryablehttp v0.7.7 h1:C8hUCYzor8PIfXHa4UrZkU4VvK8o9ISHxT2Q8+VepXU= github.com/hashicorp/go-retryablehttp v0.7.7/go.mod h1:pkQpWZeYWskR+D1tR2O5OcBFOxfA7DoAO6xtkuQnHTk= github.com/hashicorp/go-secure-stdlib/awsutil v0.1.6 h1:W9WN8p6moV1fjKLkeqEgkAMu5rauy9QeYDAmIaPuuiA= @@ -531,22 +530,22 @@ github.com/hashicorp/logutils v1.0.0 h1:dLEQVugN8vlakKOUE3ihGLTZJRB4j+M2cdTm/ORI github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64= github.com/hashicorp/terraform-exec v0.23.0 h1:MUiBM1s0CNlRFsCLJuM5wXZrzA3MnPYEsiXmzATMW/I= github.com/hashicorp/terraform-exec v0.23.0/go.mod h1:mA+qnx1R8eePycfwKkCRk3Wy65mwInvlpAeOwmA7vlY= -github.com/hashicorp/terraform-json v0.24.0 h1:rUiyF+x1kYawXeRth6fKFm/MdfBS6+lW4NbeATsYz8Q= -github.com/hashicorp/terraform-json v0.24.0/go.mod h1:Nfj5ubo9xbu9uiAoZVBsNOjvNKB66Oyrvtit74kC7ow= -github.com/hashicorp/terraform-plugin-framework v1.14.1 h1:jaT1yvU/kEKEsxnbrn4ZHlgcxyIfjvZ41BLdlLk52fY= -github.com/hashicorp/terraform-plugin-framework v1.14.1/go.mod h1:xNUKmvTs6ldbwTuId5euAtg37dTxuyj3LHS3uj7BHQ4= -github.com/hashicorp/terraform-plugin-framework-validators v0.17.0 h1:0uYQcqqgW3BMyyve07WJgpKorXST3zkpzvrOnf3mpbg= -github.com/hashicorp/terraform-plugin-framework-validators v0.17.0/go.mod h1:VwdfgE/5Zxm43flraNa0VjcvKQOGVrcO4X8peIri0T0= -github.com/hashicorp/terraform-plugin-go v0.26.0 h1:cuIzCv4qwigug3OS7iKhpGAbZTiypAfFQmw8aE65O2M= -github.com/hashicorp/terraform-plugin-go v0.26.0/go.mod h1:+CXjuLDiFgqR+GcrM5a2E2Kal5t5q2jb0E3D57tTdNY= +github.com/hashicorp/terraform-json v0.25.0 h1:rmNqc/CIfcWawGiwXmRuiXJKEiJu1ntGoxseG1hLhoQ= +github.com/hashicorp/terraform-json v0.25.0/go.mod h1:sMKS8fiRDX4rVlR6EJUMudg1WcanxCMoWwTLkgZP/vc= +github.com/hashicorp/terraform-plugin-framework v1.15.0 h1:LQ2rsOfmDLxcn5EeIwdXFtr03FVsNktbbBci8cOKdb4= +github.com/hashicorp/terraform-plugin-framework v1.15.0/go.mod h1:hxrNI/GY32KPISpWqlCoTLM9JZsGH3CyYlir09bD/fI= +github.com/hashicorp/terraform-plugin-framework-validators v0.18.0 h1:OQnlOt98ua//rCw+QhBbSqfW3QbwtVrcdWeQN5gI3Hw= +github.com/hashicorp/terraform-plugin-framework-validators v0.18.0/go.mod h1:lZvZvagw5hsJwuY7mAY6KUz45/U6fiDR0CzQAwWD0CA= +github.com/hashicorp/terraform-plugin-go v0.27.0 h1:ujykws/fWIdsi6oTUT5Or4ukvEan4aN9lY+LOxVP8EE= +github.com/hashicorp/terraform-plugin-go v0.27.0/go.mod h1:FDa2Bb3uumkTGSkTFpWSOwWJDwA7bf3vdP3ltLDTH6o= github.com/hashicorp/terraform-plugin-log v0.9.0 h1:i7hOA+vdAItN1/7UrfBqBwvYPQ9TFvymaRGZED3FCV0= github.com/hashicorp/terraform-plugin-log v0.9.0/go.mod h1:rKL8egZQ/eXSyDqzLUuwUYLVdlYeamldAHSxjUFADow= -github.com/hashicorp/terraform-plugin-sdk/v2 v2.36.1 h1:WNMsTLkZf/3ydlgsuXePa3jvZFwAJhruxTxP/c1Viuw= -github.com/hashicorp/terraform-plugin-sdk/v2 v2.36.1/go.mod h1:P6o64QS97plG44iFzSM6rAn6VJIC/Sy9a9IkEtl79K4= -github.com/hashicorp/terraform-plugin-testing v1.12.0 h1:tpIe+T5KBkA1EO6aT704SPLedHUo55RenguLHcaSBdI= -github.com/hashicorp/terraform-plugin-testing v1.12.0/go.mod h1:jbDQUkT9XRjAh1Bvyufq+PEH1Xs4RqIdpOQumSgSXBM= -github.com/hashicorp/terraform-registry-address v0.2.4 h1:JXu/zHB2Ymg/TGVCRu10XqNa4Sh2bWcqCNyKWjnCPJA= -github.com/hashicorp/terraform-registry-address v0.2.4/go.mod h1:tUNYTVyCtU4OIGXXMDp7WNcJ+0W1B4nmstVDgHMjfAU= +github.com/hashicorp/terraform-plugin-sdk/v2 v2.37.0 h1:NFPMacTrY/IdcIcnUB+7hsore1ZaRWU9cnB6jFoBnIM= +github.com/hashicorp/terraform-plugin-sdk/v2 v2.37.0/go.mod h1:QYmYnLfsosrxjCnGY1p9c7Zj6n9thnEE+7RObeYs3fA= +github.com/hashicorp/terraform-plugin-testing v1.13.0 h1:vTELm6x3Z4H9VO3fbz71wbJhbs/5dr5DXfIwi3GMmPY= +github.com/hashicorp/terraform-plugin-testing v1.13.0/go.mod h1:b/hl6YZLm9fjeud/3goqh/gdqhZXbRfbHMkEiY9dZwc= +github.com/hashicorp/terraform-registry-address v0.2.5 h1:2GTftHqmUhVOeuu9CW3kwDkRe4pcBDq0uuK5VJngU1M= +github.com/hashicorp/terraform-registry-address v0.2.5/go.mod h1:PpzXWINwB5kuVS5CA7m1+eO2f1jKb5ZDIxrOPfpnGkg= github.com/hashicorp/terraform-svchost v0.1.1 h1:EZZimZ1GxdqFRinZ1tpJwVxxt49xc/S52uzrw4x0jKQ= github.com/hashicorp/terraform-svchost v0.1.1/go.mod h1:mNsjQfZyf/Jhz35v6/0LWcv26+X7JPS+buii2c9/ctc= github.com/hashicorp/yamux v0.1.1 h1:yrQxtgseBDrq9Y652vSRDvsKCJKOUD+GzTS4Y0Y8pvE= @@ -737,8 +736,8 @@ github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsT github.com/prometheus/procfs v0.0.3/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ= github.com/prometheus/procfs v0.15.1 h1:YagwOFzUgYfKKHX6Dr+sHT7km/hxC76UB0learggepc= github.com/prometheus/procfs v0.15.1/go.mod h1:fB45yRUv8NstnjriLhBQLuOUt+WW4BsoGhij/e3PBqk= -github.com/redis/go-redis/v9 v9.7.3 h1:YpPyAayJV+XErNsatSElgRZZVCwXX9QzkKYNvO7x0wM= -github.com/redis/go-redis/v9 v9.7.3/go.mod h1:bGUrSggJ9X9GUmZpZNEOQKaANxSGgOEBRltRTZHSvrA= +github.com/redis/go-redis/v9 v9.8.0 h1:q3nRvjrlge/6UD7eTu/DSg2uYiU2mCL0G/uzBWqhicI= +github.com/redis/go-redis/v9 v9.8.0/go.mod h1:huWgSWd8mW6+m0VPhJjSSQ+d6Nh1VICQ6Q5lHuCH/Iw= github.com/regclient/regclient v0.8.3 h1:AFAPu/vmOYGyY22AIgzdBUKbzH+83lEpRioRYJ/reCs= github.com/regclient/regclient v0.8.3/go.mod h1:gjQh5uBVZoo/CngchghtQh9Hx81HOMKRRDd5WPcPkbk= github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= @@ -769,8 +768,8 @@ github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 h1:n661drycOFuPLCN github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3/go.mod h1:A0bzQcvG0E7Rwjx0REVgAGH58e96+X0MeOfepqsbeW4= github.com/shopspring/decimal v1.4.0 h1:bxl37RwXBklmTi0C79JfXCEBD1cqqHt0bbgBAGFp81k= github.com/shopspring/decimal v1.4.0/go.mod h1:gawqmDU56v4yIKSwfBSFip1HdCCXN8/+DMd9qYNcwME= -github.com/siderolabs/talos/pkg/machinery v1.10.1 h1:iMG+I06ppz0Bj2Ex8NCSUBsbB6rK/gW9nCF01/TM2tU= -github.com/siderolabs/talos/pkg/machinery v1.10.1/go.mod h1:MVJs1hsKm7N2GkQVeByjoDoLJmU/VhQO0cLJRZPxlZk= +github.com/siderolabs/talos/pkg/machinery v1.10.2 h1:i9aNYmFSpiSOVM7dlAL5iNMYnFG19087x2QLJ0MbTEE= +github.com/siderolabs/talos/pkg/machinery v1.10.2/go.mod h1:MVJs1hsKm7N2GkQVeByjoDoLJmU/VhQO0cLJRZPxlZk= github.com/sigstore/protobuf-specs v0.4.1 h1:5SsMqZbdkcO/DNHudaxuCUEjj6x29tS2Xby1BxGU7Zc= github.com/sigstore/protobuf-specs v0.4.1/go.mod h1:+gXR+38nIa2oEupqDdzg4qSBT0Os+sP7oYv6alWewWc= github.com/sigstore/rekor v1.3.10 h1:/mSvRo4MZ/59ECIlARhyykAlQlkmeAQpvBPlmJtZOCU= @@ -860,12 +859,12 @@ github.com/zclconf/go-cty-debug v0.0.0-20240509010212-0d6042c53940 h1:4r45xpDWB6 github.com/zclconf/go-cty-debug v0.0.0-20240509010212-0d6042c53940/go.mod h1:CmBdvvj3nqzfzJ6nTCIwDTPZ56aVGvDrmztiO5g3qrM= github.com/zeebo/errs v1.4.0 h1:XNdoD/RRMKP7HD0UhJnIzUy74ISdGGxURlYG8HSWSfM= github.com/zeebo/errs v1.4.0/go.mod h1:sgbWHsvVuTPHcqJJGQ1WhI5KbWlHYz+2+2C/LSEtCw4= -go.etcd.io/etcd/api/v3 v3.5.21 h1:A6O2/JDb3tvHhiIz3xf9nJ7REHvtEFJJ3veW3FbCnS8= -go.etcd.io/etcd/api/v3 v3.5.21/go.mod h1:c3aH5wcvXv/9dqIw2Y810LDXJfhSYdHQ0vxmP3CCHVY= -go.etcd.io/etcd/client/pkg/v3 v3.5.21 h1:lPBu71Y7osQmzlflM9OfeIV2JlmpBjqBNlLtcoBqUTc= -go.etcd.io/etcd/client/pkg/v3 v3.5.21/go.mod h1:BgqT/IXPjK9NkeSDjbzwsHySX3yIle2+ndz28nVsjUs= -go.etcd.io/etcd/client/v3 v3.5.21 h1:T6b1Ow6fNjOLOtM0xSoKNQt1ASPCLWrF9XMHcH9pEyY= -go.etcd.io/etcd/client/v3 v3.5.21/go.mod h1:mFYy67IOqmbRf/kRUvsHixzo3iG+1OF2W2+jVIQRAnU= +go.etcd.io/etcd/api/v3 v3.6.0 h1:vdbkcUBGLf1vfopoGE/uS3Nv0KPyIpUV/HM6w9yx2kM= +go.etcd.io/etcd/api/v3 v3.6.0/go.mod h1:Wt5yZqEmxgTNJGHob7mTVBJDZNXiHPtXTcPab37iFOw= +go.etcd.io/etcd/client/pkg/v3 v3.6.0 h1:nchnPqpuxvv3UuGGHaz0DQKYi5EIW5wOYsgUNRc365k= +go.etcd.io/etcd/client/pkg/v3 v3.6.0/go.mod h1:Jv5SFWMnGvIBn8o3OaBq/PnT0jjsX8iNokAUessNjoA= +go.etcd.io/etcd/client/v3 v3.6.0 h1:/yjKzD+HW5v/3DVj9tpwFxzNbu8hjcKID183ug9duWk= +go.etcd.io/etcd/client/v3 v3.6.0/go.mod h1:Jzk/Knqe06pkOZPHXsQ0+vNDvMQrgIqJ0W8DwPdMJMg= go.mongodb.org/mongo-driver v1.14.0 h1:P98w8egYRjYe3XDjxhYJagTokP/H6HzlsnojRgZRd80= go.mongodb.org/mongo-driver v1.14.0/go.mod h1:Vzb0Mk/pa7e6cWw85R4F/endUC3u0U9jGcNU603k65c= go.mozilla.org/pkcs7 v0.0.0-20200128120323-432b2356ecb1 h1:A/5uWzF44DlIgdm/PQFwfMkW0JX+cIcQi/SwLAmZP5M= @@ -1012,19 +1011,19 @@ golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8T golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= gomodules.xyz/jsonpatch/v2 v2.4.0 h1:Ci3iUJyx9UeRx7CeFN8ARgGbkESwJK+KB9lLcWxY/Zw= gomodules.xyz/jsonpatch/v2 v2.4.0/go.mod h1:AH3dM2RI6uoBZxn3LVrfvJ3E0/9dG4cSrbuBJT4moAY= -google.golang.org/api v0.232.0 h1:qGnmaIMf7KcuwHOlF3mERVzChloDYwRfOJOrHt8YC3I= -google.golang.org/api v0.232.0/go.mod h1:p9QCfBWZk1IJETUdbTKloR5ToFdKbYh2fkjsUL6vNoY= +google.golang.org/api v0.233.0 h1:iGZfjXAJiUFSSaekVB7LzXl6tRfEKhUN7FkZN++07tI= +google.golang.org/api v0.233.0/go.mod h1:TCIVLLlcwunlMpZIhIp7Ltk77W+vUSdUKAAIlbxY44c= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.6.8 h1:IhEN5q69dyKagZPYMSdIjS2HqprW324FRQZJcGqPAsM= google.golang.org/appengine v1.6.8/go.mod h1:1jJ3jBArFh5pcgW8gCtRJnepW8FzD1V44FJffLiz/Ds= -google.golang.org/genproto v0.0.0-20250303144028-a0af3efb3deb h1:ITgPrl429bc6+2ZraNSzMDk3I95nmQln2fuPstKwFDE= -google.golang.org/genproto v0.0.0-20250303144028-a0af3efb3deb/go.mod h1:sAo5UzpjUwgFBCzupwhcLcxHVDK7vG5IqI30YnwX2eE= -google.golang.org/genproto/googleapis/api v0.0.0-20250425173222-7b384671a197 h1:9DuBh3k1jUho2DHdxH+kbJwthIAq02vGvZNrD2ggF+Y= -google.golang.org/genproto/googleapis/api v0.0.0-20250425173222-7b384671a197/go.mod h1:Cd8IzgPo5Akum2c9R6FsXNaZbH3Jpa2gpHlW89FqlyQ= -google.golang.org/genproto/googleapis/rpc v0.0.0-20250428153025-10db94c68c34 h1:h6p3mQqrmT1XkHVTfzLdNz1u7IhINeZkz67/xTbOuWs= -google.golang.org/genproto/googleapis/rpc v0.0.0-20250428153025-10db94c68c34/go.mod h1:qQ0YXyHHx3XkvlzUtpXDkS29lDSafHMZBAZDc03LQ3A= -google.golang.org/grpc v1.72.0 h1:S7UkcVa60b5AAQTaO6ZKamFp1zMZSU0fGDK2WZLbBnM= -google.golang.org/grpc v1.72.0/go.mod h1:wH5Aktxcg25y1I3w7H69nHfXdOG3UiadoBtjh3izSDM= +google.golang.org/genproto v0.0.0-20250505200425-f936aa4a68b2 h1:1tXaIXCracvtsRxSBsYDiSBN0cuJvM7QYW+MrpIRY78= +google.golang.org/genproto v0.0.0-20250505200425-f936aa4a68b2/go.mod h1:49MsLSx0oWMOZqcpB3uL8ZOkAh1+TndpJ8ONoCBWiZk= +google.golang.org/genproto/googleapis/api v0.0.0-20250505200425-f936aa4a68b2 h1:vPV0tzlsK6EzEDHNNH5sa7Hs9bd7iXR7B1tSiPepkV0= +google.golang.org/genproto/googleapis/api v0.0.0-20250505200425-f936aa4a68b2/go.mod h1:pKLAc5OolXC3ViWGI62vvC0n10CpwAtRcTNCFwTKBEw= +google.golang.org/genproto/googleapis/rpc v0.0.0-20250505200425-f936aa4a68b2 h1:IqsN8hx+lWLqlN+Sc3DoMy/watjofWiU8sRFgQ8fhKM= +google.golang.org/genproto/googleapis/rpc v0.0.0-20250505200425-f936aa4a68b2/go.mod h1:qQ0YXyHHx3XkvlzUtpXDkS29lDSafHMZBAZDc03LQ3A= +google.golang.org/grpc v1.72.1 h1:HR03wO6eyZ7lknl75XlxABNVLLFc2PAb6mHlYh756mA= +google.golang.org/grpc v1.72.1/go.mod h1:wH5Aktxcg25y1I3w7H69nHfXdOG3UiadoBtjh3izSDM= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.36.6 h1:z1NpPI8ku2WgiWnf+t9wTPsn6eP1L7ksHUlkfLvd9xY= @@ -1053,34 +1052,34 @@ gotest.tools/v3 v3.4.0 h1:ZazjZUfuVeZGLAmlKKuyv3IKP5orXcwtOwDQH6YVr6o= gotest.tools/v3 v3.4.0/go.mod h1:CtbdzLSsqVhDgMtKsx03ird5YTGB3ar27v0u/yKBW5g= helm.sh/helm/v3 v3.17.3 h1:3n5rW3D0ArjFl0p4/oWO8IbY/HKaNNwJtOQFdH2AZHg= helm.sh/helm/v3 v3.17.3/go.mod h1:+uJKMH/UiMzZQOALR3XUf3BLIoczI2RKKD6bMhPh4G8= -k8s.io/api v0.33.0 h1:yTgZVn1XEe6opVpP1FylmNrIFWuDqe2H0V8CT5gxfIU= -k8s.io/api v0.33.0/go.mod h1:CTO61ECK/KU7haa3qq8sarQ0biLq2ju405IZAd9zsiM= -k8s.io/apiextensions-apiserver v0.33.0 h1:d2qpYL7Mngbsc1taA4IjJPRJ9ilnsXIrndH+r9IimOs= -k8s.io/apiextensions-apiserver v0.33.0/go.mod h1:VeJ8u9dEEN+tbETo+lFkwaaZPg6uFKLGj5vyNEwwSzc= -k8s.io/apimachinery v0.33.0 h1:1a6kHrJxb2hs4t8EE5wuR/WxKDwGN1FKH3JvDtA0CIQ= -k8s.io/apimachinery v0.33.0/go.mod h1:BHW0YOu7n22fFv/JkYOEfkUYNRN0fj0BlvMFWA7b+SM= -k8s.io/apiserver v0.33.0 h1:QqcM6c+qEEjkOODHppFXRiw/cE2zP85704YrQ9YaBbc= -k8s.io/apiserver v0.33.0/go.mod h1:EixYOit0YTxt8zrO2kBU7ixAtxFce9gKGq367nFmqI8= +k8s.io/api v0.33.1 h1:tA6Cf3bHnLIrUK4IqEgb2v++/GYUtqiu9sRVk3iBXyw= +k8s.io/api v0.33.1/go.mod h1:87esjTn9DRSRTD4fWMXamiXxJhpOIREjWOSjsW1kEHw= +k8s.io/apiextensions-apiserver v0.33.1 h1:N7ccbSlRN6I2QBcXevB73PixX2dQNIW0ZRuguEE91zI= +k8s.io/apiextensions-apiserver v0.33.1/go.mod h1:uNQ52z1A1Gu75QSa+pFK5bcXc4hq7lpOXbweZgi4dqA= +k8s.io/apimachinery v0.33.1 h1:mzqXWV8tW9Rw4VeW9rEkqvnxj59k1ezDUl20tFK/oM4= +k8s.io/apimachinery v0.33.1/go.mod h1:BHW0YOu7n22fFv/JkYOEfkUYNRN0fj0BlvMFWA7b+SM= +k8s.io/apiserver v0.33.1 h1:yLgLUPDVC6tHbNcw5uE9mo1T6ELhJj7B0geifra3Qdo= +k8s.io/apiserver v0.33.1/go.mod h1:VMbE4ArWYLO01omz+k8hFjAdYfc3GVAYPrhP2tTKccs= k8s.io/cli-runtime v0.32.2 h1:aKQR4foh9qeyckKRkNXUccP9moxzffyndZAvr+IXMks= k8s.io/cli-runtime v0.32.2/go.mod h1:a/JpeMztz3xDa7GCyyShcwe55p8pbcCVQxvqZnIwXN8= -k8s.io/client-go v0.33.0 h1:UASR0sAYVUzs2kYuKn/ZakZlcs2bEHaizrrHUZg0G98= -k8s.io/client-go v0.33.0/go.mod h1:kGkd+l/gNGg8GYWAPr0xF1rRKvVWvzh9vmZAMXtaKOg= -k8s.io/cluster-bootstrap v0.33.0 h1:a1njmBk8ha+TNK8HqfLkuMyC6Q9qvnm5eZzBLpwEW/A= -k8s.io/cluster-bootstrap v0.33.0/go.mod h1:YL0riHER19bZOT5Pdpl1ynbypadaEoWfg3Ywnl0Pb5s= -k8s.io/component-base v0.33.0 h1:Ot4PyJI+0JAD9covDhwLp9UNkUja209OzsJ4FzScBNk= -k8s.io/component-base v0.33.0/go.mod h1:aXYZLbw3kihdkOPMDhWbjGCO6sg+luw554KP51t8qCU= +k8s.io/client-go v0.33.1 h1:ZZV/Ks2g92cyxWkRRnfUDsnhNn28eFpt26aGc8KbXF4= +k8s.io/client-go v0.33.1/go.mod h1:JAsUrl1ArO7uRVFWfcj6kOomSlCv+JpvIsp6usAGefA= +k8s.io/cluster-bootstrap v0.33.1 h1:esGY+qXFJ78myppBzMVqqj37ReGLOJpQNslRiqmQGes= +k8s.io/cluster-bootstrap v0.33.1/go.mod h1:YA4FsgPShsVoP84DkBJEkCKDgsH4PpgTa0NzNBf6y4I= +k8s.io/component-base v0.33.1 h1:EoJ0xA+wr77T+G8p6T3l4efT2oNwbqBVKR71E0tBIaI= +k8s.io/component-base v0.33.1/go.mod h1:guT/w/6piyPfTgq7gfvgetyXMIh10zuXA6cRRm3rDuY= k8s.io/klog/v2 v2.130.1 h1:n9Xl7H1Xvksem4KFG4PYbdQCQxqc/tTUyrgXaOhHSzk= k8s.io/klog/v2 v2.130.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE= k8s.io/kube-openapi v0.0.0-20250318190949-c8a335a9a2ff h1:/usPimJzUKKu+m+TE36gUyGcf03XZEP0ZIKgKj35LS4= k8s.io/kube-openapi v0.0.0-20250318190949-c8a335a9a2ff/go.mod h1:5jIi+8yX4RIb8wk3XwBo5Pq2ccx4FP10ohkbSKCZoK8= k8s.io/kubectl v0.32.2 h1:TAkag6+XfSBgkqK9I7ZvwtF0WVtUAvK8ZqTt+5zi1Us= k8s.io/kubectl v0.32.2/go.mod h1:+h/NQFSPxiDZYX/WZaWw9fwYezGLISP0ud8nQKg+3g8= -k8s.io/kubelet v0.33.0 h1:4pJA2Ge6Rp0kDNV76KH7pTBiaV2T1a1874QHMcubuSU= -k8s.io/kubelet v0.33.0/go.mod h1:iDnxbJQMy9DUNaML5L/WUlt3uJtNLWh7ZAe0JSp4Yi0= -k8s.io/kubernetes v1.33.0 h1:BP5Y5yIzUZVeBuE/ESZvnw6TNxjXbLsCckIkljE+R0U= -k8s.io/kubernetes v1.33.0/go.mod h1:2nWuPk0seE4+6sd0x60wQ6rYEXcV7SoeMbU0YbFm/5k= -k8s.io/mount-utils v0.33.0 h1:hH6EcCcax4lFNIERaGMj6d7oGMW1qW3eTCwHUuLtLog= -k8s.io/mount-utils v0.33.0/go.mod h1:1JR4rKymg8B8bCPo618hpSAdrpO6XLh0Acqok/xVwPE= +k8s.io/kubelet v0.33.1 h1:x4LCw1/iZVWOKA4RoITnuB8gMHnw31HPB3S0EF0EexE= +k8s.io/kubelet v0.33.1/go.mod h1:8WpdC9M95VmsqIdGSQrajXooTfT5otEj8pGWOm+KKfQ= +k8s.io/kubernetes v1.33.1 h1:86+VVY/f11taZdpEZrNciLw1MIQhu6BFXf/OMFn5EUg= +k8s.io/kubernetes v1.33.1/go.mod h1:2nWuPk0seE4+6sd0x60wQ6rYEXcV7SoeMbU0YbFm/5k= +k8s.io/mount-utils v0.33.1 h1:hodPhfyoK+gG0SgnYwx1iPrlnpaESZiJ9GFzF5V/imE= +k8s.io/mount-utils v0.33.1/go.mod h1:1JR4rKymg8B8bCPo618hpSAdrpO6XLh0Acqok/xVwPE= k8s.io/utils v0.0.0-20250502105355-0f33e8f1c979 h1:jgJW5IePPXLGB8e/1wvd0Ich9QE97RvvF3a8J3fP/Lg= k8s.io/utils v0.0.0-20250502105355-0f33e8f1c979/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= libvirt.org/go/libvirt v1.11002.0 h1:cb8KJG3D97pc/hxQ2n6P82hRX3rlgdzO7bih6W1AAQ8= diff --git a/operators/constellation-node-operator/internal/etcd/etcd.go b/operators/constellation-node-operator/internal/etcd/etcd.go index 5f4e33c89..60f00a145 100644 --- a/operators/constellation-node-operator/internal/etcd/etcd.go +++ b/operators/constellation-node-operator/internal/etcd/etcd.go @@ -127,7 +127,7 @@ func getInitialEndpoints(k8sClient client.Client) ([]string, error) { } type etcdClient interface { - MemberList(ctx context.Context) (*clientv3.MemberListResponse, error) + MemberList(ctx context.Context, opts ...clientv3.OpOption) (*clientv3.MemberListResponse, error) MemberRemove(ctx context.Context, memberID uint64) (*clientv3.MemberRemoveResponse, error) Sync(ctx context.Context) error Close() error diff --git a/operators/constellation-node-operator/internal/etcd/etcd_test.go b/operators/constellation-node-operator/internal/etcd/etcd_test.go index 2edd97452..b7c64f401 100644 --- a/operators/constellation-node-operator/internal/etcd/etcd_test.go +++ b/operators/constellation-node-operator/internal/etcd/etcd_test.go @@ -185,7 +185,7 @@ type stubEtcdClient struct { closeErr error } -func (c *stubEtcdClient) MemberList(_ context.Context) (*clientv3.MemberListResponse, error) { +func (c *stubEtcdClient) MemberList(_ context.Context, _ ...clientv3.OpOption) (*clientv3.MemberListResponse, error) { return &clientv3.MemberListResponse{ Members: c.members, }, c.listErr From 5b0073ffe87a3bfb5592e1686ac4a16d3ba553ca Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 20 May 2025 08:31:47 +0200 Subject: [PATCH 285/311] deps: update GitHub action dependencies (#3837) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/actions/build_micro_service/action.yml | 2 +- .github/actions/cdbg_deploy/action.yml | 4 ++-- .github/actions/constellation_destroy/action.yml | 2 +- .github/actions/constellation_iam_destroy/action.yml | 2 +- .github/actions/e2e_attestationconfigapi/action.yml | 2 +- .github/actions/e2e_benchmark/action.yml | 2 +- .github/actions/e2e_cleanup_timeframe/action.yml | 2 +- .github/actions/e2e_test/action.yml | 4 ++-- .github/actions/e2e_verify/action.yml | 2 +- .github/actions/find_latest_image/action.yml | 2 +- .github/actions/select_image/action.yml | 2 +- .github/workflows/build-ccm-gcp.yml | 2 +- .github/workflows/build-gcp-guest-agent.yml | 2 +- .github/workflows/build-os-image.yml | 2 +- .github/workflows/codeql.yml | 4 ++-- .github/workflows/e2e-test-provider-example.yml | 2 +- .github/workflows/e2e-upgrade.yml | 6 +++--- .github/workflows/on-release.yml | 2 +- .github/workflows/purge-main.yml | 2 +- .github/workflows/scorecard.yml | 2 +- .github/workflows/test-tidy.yml | 2 +- .github/workflows/test-unittest.yml | 2 +- .github/workflows/update-rpms.yml | 2 +- .github/workflows/versionsapi.yml | 6 +++--- 24 files changed, 31 insertions(+), 31 deletions(-) diff --git a/.github/actions/build_micro_service/action.yml b/.github/actions/build_micro_service/action.yml index b87302d5c..84813d865 100644 --- a/.github/actions/build_micro_service/action.yml +++ b/.github/actions/build_micro_service/action.yml @@ -62,7 +62,7 @@ runs: - name: Build and push container image id: build-micro-service - uses: docker/build-push-action@14487ce63c7a62a4a324b0bfb37086795e31c6c1 # v6.16.0 + uses: docker/build-push-action@1dc73863535b631f98b2378be8619f83b136f4a0 # v6.17.0 with: context: . file: ${{ inputs.dockerfile }} diff --git a/.github/actions/cdbg_deploy/action.yml b/.github/actions/cdbg_deploy/action.yml index c5aa2ab39..a51c54b6a 100644 --- a/.github/actions/cdbg_deploy/action.yml +++ b/.github/actions/cdbg_deploy/action.yml @@ -61,7 +61,7 @@ runs: - name: Login to AWS (IAM service principal) if: inputs.cloudProvider == 'aws' - uses: aws-actions/configure-aws-credentials@f24d7193d98baebaeacc7e2227925dd47cc267f5 # v4.2.0 + uses: aws-actions/configure-aws-credentials@b47578312673ae6fa5b5096b330d9fbac3d116df # v4.2.1 with: role-to-assume: arn:aws:iam::795746500882:role/GithubActionsE2EIAM aws-region: eu-central-1 @@ -80,7 +80,7 @@ runs: - name: Login to AWS (Cluster service principal) if: inputs.cloudProvider == 'aws' - uses: aws-actions/configure-aws-credentials@f24d7193d98baebaeacc7e2227925dd47cc267f5 # v4.2.0 + uses: aws-actions/configure-aws-credentials@b47578312673ae6fa5b5096b330d9fbac3d116df # v4.2.1 with: role-to-assume: arn:aws:iam::795746500882:role/GithubActionsE2ECluster aws-region: eu-central-1 diff --git a/.github/actions/constellation_destroy/action.yml b/.github/actions/constellation_destroy/action.yml index 74b5d3a7c..c09148efa 100644 --- a/.github/actions/constellation_destroy/action.yml +++ b/.github/actions/constellation_destroy/action.yml @@ -67,7 +67,7 @@ runs: - name: Login to AWS (Cluster role) if: inputs.cloudProvider == 'aws' - uses: aws-actions/configure-aws-credentials@f24d7193d98baebaeacc7e2227925dd47cc267f5 # v4.2.0 + uses: aws-actions/configure-aws-credentials@b47578312673ae6fa5b5096b330d9fbac3d116df # v4.2.1 with: role-to-assume: arn:aws:iam::795746500882:role/GithubActionsE2ECluster aws-region: eu-central-1 diff --git a/.github/actions/constellation_iam_destroy/action.yml b/.github/actions/constellation_iam_destroy/action.yml index 2178f53f9..98109d740 100644 --- a/.github/actions/constellation_iam_destroy/action.yml +++ b/.github/actions/constellation_iam_destroy/action.yml @@ -23,7 +23,7 @@ runs: - name: Login to AWS (IAM role) if: inputs.cloudProvider == 'aws' - uses: aws-actions/configure-aws-credentials@f24d7193d98baebaeacc7e2227925dd47cc267f5 # v4.2.0 + uses: aws-actions/configure-aws-credentials@b47578312673ae6fa5b5096b330d9fbac3d116df # v4.2.1 with: role-to-assume: arn:aws:iam::795746500882:role/GithubActionsE2EIAM aws-region: eu-central-1 diff --git a/.github/actions/e2e_attestationconfigapi/action.yml b/.github/actions/e2e_attestationconfigapi/action.yml index 891c3d28c..9ffad3040 100644 --- a/.github/actions/e2e_attestationconfigapi/action.yml +++ b/.github/actions/e2e_attestationconfigapi/action.yml @@ -19,7 +19,7 @@ runs: uses: ./.github/actions/setup_bazel_nix - name: Login to AWS - uses: aws-actions/configure-aws-credentials@f24d7193d98baebaeacc7e2227925dd47cc267f5 # v4.2.0 + uses: aws-actions/configure-aws-credentials@b47578312673ae6fa5b5096b330d9fbac3d116df # v4.2.1 with: role-to-assume: arn:aws:iam::795746500882:role/GithubTestResourceAPI aws-region: eu-west-1 diff --git a/.github/actions/e2e_benchmark/action.yml b/.github/actions/e2e_benchmark/action.yml index c8bd6abe0..ee741c19f 100644 --- a/.github/actions/e2e_benchmark/action.yml +++ b/.github/actions/e2e_benchmark/action.yml @@ -166,7 +166,7 @@ runs: encryptionSecret: ${{ inputs.encryptionSecret }} - name: Assume AWS role to retrieve and update benchmarks in S3 - uses: aws-actions/configure-aws-credentials@f24d7193d98baebaeacc7e2227925dd47cc267f5 # v4.2.0 + uses: aws-actions/configure-aws-credentials@b47578312673ae6fa5b5096b330d9fbac3d116df # v4.2.1 with: role-to-assume: arn:aws:iam::795746500882:role/GithubActionUpdateBenchmarks aws-region: us-east-2 diff --git a/.github/actions/e2e_cleanup_timeframe/action.yml b/.github/actions/e2e_cleanup_timeframe/action.yml index 67cd82066..c77be2431 100644 --- a/.github/actions/e2e_cleanup_timeframe/action.yml +++ b/.github/actions/e2e_cleanup_timeframe/action.yml @@ -22,7 +22,7 @@ runs: using: "composite" steps: - name: Authenticate AWS - uses: aws-actions/configure-aws-credentials@f24d7193d98baebaeacc7e2227925dd47cc267f5 # v4.2.0 + uses: aws-actions/configure-aws-credentials@b47578312673ae6fa5b5096b330d9fbac3d116df # v4.2.1 with: role-to-assume: arn:aws:iam::795746500882:role/GithubActionsE2EDestroy aws-region: eu-central-1 diff --git a/.github/actions/e2e_test/action.yml b/.github/actions/e2e_test/action.yml index 6814450af..3f1efe4c1 100644 --- a/.github/actions/e2e_test/action.yml +++ b/.github/actions/e2e_test/action.yml @@ -227,7 +227,7 @@ runs: - name: Login to AWS (IAM role) if: inputs.cloudProvider == 'aws' - uses: aws-actions/configure-aws-credentials@f24d7193d98baebaeacc7e2227925dd47cc267f5 # v4.2.0 + uses: aws-actions/configure-aws-credentials@b47578312673ae6fa5b5096b330d9fbac3d116df # v4.2.1 with: role-to-assume: arn:aws:iam::795746500882:role/GithubActionsE2EIAM aws-region: eu-central-1 @@ -298,7 +298,7 @@ runs: - name: Login to AWS (Cluster role) if: inputs.cloudProvider == 'aws' - uses: aws-actions/configure-aws-credentials@f24d7193d98baebaeacc7e2227925dd47cc267f5 # v4.2.0 + uses: aws-actions/configure-aws-credentials@b47578312673ae6fa5b5096b330d9fbac3d116df # v4.2.1 with: role-to-assume: arn:aws:iam::795746500882:role/GithubActionsE2ECluster aws-region: eu-central-1 diff --git a/.github/actions/e2e_verify/action.yml b/.github/actions/e2e_verify/action.yml index ad019814e..6803124f6 100644 --- a/.github/actions/e2e_verify/action.yml +++ b/.github/actions/e2e_verify/action.yml @@ -82,7 +82,7 @@ runs: - name: Login to AWS if: github.ref_name == 'main' - uses: aws-actions/configure-aws-credentials@f24d7193d98baebaeacc7e2227925dd47cc267f5 # v4.2.0 + uses: aws-actions/configure-aws-credentials@b47578312673ae6fa5b5096b330d9fbac3d116df # v4.2.1 with: role-to-assume: arn:aws:iam::795746500882:role/GitHubConstellationImagePipeline aws-region: eu-central-1 diff --git a/.github/actions/find_latest_image/action.yml b/.github/actions/find_latest_image/action.yml index b9bee4689..2495df405 100644 --- a/.github/actions/find_latest_image/action.yml +++ b/.github/actions/find_latest_image/action.yml @@ -38,7 +38,7 @@ runs: - name: Login to AWS if: inputs.imageVersion == '' - uses: aws-actions/configure-aws-credentials@f24d7193d98baebaeacc7e2227925dd47cc267f5 # v4.2.0 + uses: aws-actions/configure-aws-credentials@b47578312673ae6fa5b5096b330d9fbac3d116df # v4.2.1 with: role-to-assume: arn:aws:iam::795746500882:role/GithubConstellationVersionsAPIRead aws-region: eu-central-1 diff --git a/.github/actions/select_image/action.yml b/.github/actions/select_image/action.yml index 738d254b5..6af36480d 100644 --- a/.github/actions/select_image/action.yml +++ b/.github/actions/select_image/action.yml @@ -18,7 +18,7 @@ runs: using: "composite" steps: - name: Login to AWS - uses: aws-actions/configure-aws-credentials@f24d7193d98baebaeacc7e2227925dd47cc267f5 # v4.2.0 + uses: aws-actions/configure-aws-credentials@b47578312673ae6fa5b5096b330d9fbac3d116df # v4.2.1 with: role-to-assume: arn:aws:iam::795746500882:role/GithubConstellationVersionsAPIRead aws-region: eu-central-1 diff --git a/.github/workflows/build-ccm-gcp.yml b/.github/workflows/build-ccm-gcp.yml index 1d347b26d..1954f242c 100644 --- a/.github/workflows/build-ccm-gcp.yml +++ b/.github/workflows/build-ccm-gcp.yml @@ -113,7 +113,7 @@ jobs: - name: Build and push container image id: build - uses: docker/build-push-action@14487ce63c7a62a4a324b0bfb37086795e31c6c1 # v6.16.0 + uses: docker/build-push-action@1dc73863535b631f98b2378be8619f83b136f4a0 # v6.17.0 with: context: ./cloud-provider-gcp push: ${{ github.ref_name == 'main' }} diff --git a/.github/workflows/build-gcp-guest-agent.yml b/.github/workflows/build-gcp-guest-agent.yml index 977b34eb9..bcd766a1f 100644 --- a/.github/workflows/build-gcp-guest-agent.yml +++ b/.github/workflows/build-gcp-guest-agent.yml @@ -114,7 +114,7 @@ jobs: - name: Build and push container image if: steps.needs-build.outputs.out == 'true' id: build - uses: docker/build-push-action@14487ce63c7a62a4a324b0bfb37086795e31c6c1 # v6.16.0 + uses: docker/build-push-action@1dc73863535b631f98b2378be8619f83b136f4a0 # v6.17.0 with: context: ./guest-agent file: ./constellation/3rdparty/gcp-guest-agent/Dockerfile diff --git a/.github/workflows/build-os-image.yml b/.github/workflows/build-os-image.yml index 7ee131ee5..50783089a 100644 --- a/.github/workflows/build-os-image.yml +++ b/.github/workflows/build-os-image.yml @@ -147,7 +147,7 @@ jobs: useCache: "false" - name: Login to AWS - uses: aws-actions/configure-aws-credentials@f24d7193d98baebaeacc7e2227925dd47cc267f5 # v4.2.0 + uses: aws-actions/configure-aws-credentials@b47578312673ae6fa5b5096b330d9fbac3d116df # v4.2.1 with: role-to-assume: arn:aws:iam::795746500882:role/GitHubConstellationImagePipeline aws-region: eu-central-1 diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index d5bf7ba56..8c77ddacb 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -44,7 +44,7 @@ jobs: cache: false - name: Initialize CodeQL - uses: github/codeql-action/init@60168efe1c415ce0f5521ea06d5c2062adbeed1b # v3.28.17 + uses: github/codeql-action/init@ff0a06e83cb2de871e5a09832bc6a81e7276941f # v3.28.18 with: languages: ${{ matrix.language }} @@ -63,6 +63,6 @@ jobs: echo "::endgroup::" - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@60168efe1c415ce0f5521ea06d5c2062adbeed1b # v3.28.17 + uses: github/codeql-action/analyze@ff0a06e83cb2de871e5a09832bc6a81e7276941f # v3.28.18 with: category: "/language:${{ matrix.language }}" diff --git a/.github/workflows/e2e-test-provider-example.yml b/.github/workflows/e2e-test-provider-example.yml index 15c852ec0..43eacd005 100644 --- a/.github/workflows/e2e-test-provider-example.yml +++ b/.github/workflows/e2e-test-provider-example.yml @@ -154,7 +154,7 @@ jobs: - name: Login to AWS (IAM + Cluster role) if: steps.determine.outputs.cloudProvider == 'aws' - uses: aws-actions/configure-aws-credentials@f24d7193d98baebaeacc7e2227925dd47cc267f5 # v4.2.0 + uses: aws-actions/configure-aws-credentials@b47578312673ae6fa5b5096b330d9fbac3d116df # v4.2.1 with: role-to-assume: arn:aws:iam::795746500882:role/GithubActionsE2ETerraform aws-region: eu-central-1 diff --git a/.github/workflows/e2e-upgrade.yml b/.github/workflows/e2e-upgrade.yml index e416c6f7e..cd7c6bc1b 100644 --- a/.github/workflows/e2e-upgrade.yml +++ b/.github/workflows/e2e-upgrade.yml @@ -274,7 +274,7 @@ jobs: path: build/constellation - name: Login to AWS - uses: aws-actions/configure-aws-credentials@f24d7193d98baebaeacc7e2227925dd47cc267f5 # v4.2.0 + uses: aws-actions/configure-aws-credentials@b47578312673ae6fa5b5096b330d9fbac3d116df # v4.2.1 with: role-to-assume: arn:aws:iam::795746500882:role/GithubConstellationVersionsAPIRead aws-region: eu-central-1 @@ -296,7 +296,7 @@ jobs: - name: Login to AWS (IAM role) if: needs.generate-input-parameters.outputs.cloudProvider == 'aws' - uses: aws-actions/configure-aws-credentials@f24d7193d98baebaeacc7e2227925dd47cc267f5 # v4.2.0 + uses: aws-actions/configure-aws-credentials@b47578312673ae6fa5b5096b330d9fbac3d116df # v4.2.1 with: role-to-assume: arn:aws:iam::795746500882:role/GithubActionsE2EIAM aws-region: eu-central-1 @@ -347,7 +347,7 @@ jobs: - name: Login to AWS (Cluster role) if: always() && needs.generate-input-parameters.outputs.cloudProvider == 'aws' - uses: aws-actions/configure-aws-credentials@f24d7193d98baebaeacc7e2227925dd47cc267f5 # v4.2.0 + uses: aws-actions/configure-aws-credentials@b47578312673ae6fa5b5096b330d9fbac3d116df # v4.2.1 with: role-to-assume: arn:aws:iam::795746500882:role/GithubActionsE2ECluster aws-region: eu-central-1 diff --git a/.github/workflows/on-release.yml b/.github/workflows/on-release.yml index d968fcf98..73fe2c3b1 100644 --- a/.github/workflows/on-release.yml +++ b/.github/workflows/on-release.yml @@ -142,7 +142,7 @@ jobs: - uses: ./.github/actions/setup_bazel_nix - name: Login to AWS - uses: aws-actions/configure-aws-credentials@f24d7193d98baebaeacc7e2227925dd47cc267f5 # v4.2.0 + uses: aws-actions/configure-aws-credentials@b47578312673ae6fa5b5096b330d9fbac3d116df # v4.2.1 with: role-to-assume: arn:aws:iam::795746500882:role/GitHubConstellationImagePipeline aws-region: eu-central-1 diff --git a/.github/workflows/purge-main.yml b/.github/workflows/purge-main.yml index 92d2a547f..5a64705c4 100644 --- a/.github/workflows/purge-main.yml +++ b/.github/workflows/purge-main.yml @@ -23,7 +23,7 @@ jobs: ref: ${{ github.head_ref }} - name: Login to AWS - uses: aws-actions/configure-aws-credentials@f24d7193d98baebaeacc7e2227925dd47cc267f5 # v4.2.0 + uses: aws-actions/configure-aws-credentials@b47578312673ae6fa5b5096b330d9fbac3d116df # v4.2.1 with: role-to-assume: arn:aws:iam::795746500882:role/GithubConstellationVersionsAPIRead aws-region: eu-central-1 diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml index 9d2cb438d..ccde82ebc 100644 --- a/.github/workflows/scorecard.yml +++ b/.github/workflows/scorecard.yml @@ -37,6 +37,6 @@ jobs: retention-days: 5 - name: Upload to code-scanning - uses: github/codeql-action/upload-sarif@60168efe1c415ce0f5521ea06d5c2062adbeed1b # v3.28.17 + uses: github/codeql-action/upload-sarif@ff0a06e83cb2de871e5a09832bc6a81e7276941f # v3.28.18 with: sarif_file: results.sarif diff --git a/.github/workflows/test-tidy.yml b/.github/workflows/test-tidy.yml index 0dcb83b4e..25f06e174 100644 --- a/.github/workflows/test-tidy.yml +++ b/.github/workflows/test-tidy.yml @@ -37,7 +37,7 @@ jobs: - name: Assume AWS role to upload Bazel dependencies to S3 if: startsWith(github.head_ref, 'renovate/') - uses: aws-actions/configure-aws-credentials@f24d7193d98baebaeacc7e2227925dd47cc267f5 # v4.2.0 + uses: aws-actions/configure-aws-credentials@b47578312673ae6fa5b5096b330d9fbac3d116df # v4.2.1 with: role-to-assume: arn:aws:iam::795746500882:role/GithubConstellationMirrorWrite aws-region: eu-central-1 diff --git a/.github/workflows/test-unittest.yml b/.github/workflows/test-unittest.yml index 84f986347..7b64254dd 100644 --- a/.github/workflows/test-unittest.yml +++ b/.github/workflows/test-unittest.yml @@ -49,7 +49,7 @@ jobs: rm -rf awscliv2.zip aws - name: Login to AWS (IAM role) - uses: aws-actions/configure-aws-credentials@f24d7193d98baebaeacc7e2227925dd47cc267f5 # v4.2.0 + uses: aws-actions/configure-aws-credentials@b47578312673ae6fa5b5096b330d9fbac3d116df # v4.2.1 with: role-to-assume: arn:aws:iam::795746500882:role/GithubActionGocoverage aws-region: eu-central-1 diff --git a/.github/workflows/update-rpms.yml b/.github/workflows/update-rpms.yml index b15603cef..c7146607e 100644 --- a/.github/workflows/update-rpms.yml +++ b/.github/workflows/update-rpms.yml @@ -18,7 +18,7 @@ jobs: token: ${{ secrets.CI_COMMIT_PUSH_PR }} - name: Assume AWS role to upload Bazel dependencies to S3 - uses: aws-actions/configure-aws-credentials@f24d7193d98baebaeacc7e2227925dd47cc267f5 # v4.2.0 + uses: aws-actions/configure-aws-credentials@b47578312673ae6fa5b5096b330d9fbac3d116df # v4.2.1 with: role-to-assume: arn:aws:iam::795746500882:role/GithubConstellationMirrorWrite aws-region: eu-central-1 diff --git a/.github/workflows/versionsapi.yml b/.github/workflows/versionsapi.yml index dbc9ce77c..27acd9287 100644 --- a/.github/workflows/versionsapi.yml +++ b/.github/workflows/versionsapi.yml @@ -149,21 +149,21 @@ jobs: - name: Login to AWS without write access if: steps.check-rights.outputs.write == 'false' - uses: aws-actions/configure-aws-credentials@f24d7193d98baebaeacc7e2227925dd47cc267f5 # v4.2.0 + uses: aws-actions/configure-aws-credentials@b47578312673ae6fa5b5096b330d9fbac3d116df # v4.2.1 with: role-to-assume: arn:aws:iam::795746500882:role/GithubConstellationVersionsAPIRead aws-region: eu-central-1 - name: Login to AWS with write access if: steps.check-rights.outputs.write == 'true' && steps.check-rights.outputs.auth == 'false' - uses: aws-actions/configure-aws-credentials@f24d7193d98baebaeacc7e2227925dd47cc267f5 # v4.2.0 + uses: aws-actions/configure-aws-credentials@b47578312673ae6fa5b5096b330d9fbac3d116df # v4.2.1 with: role-to-assume: arn:aws:iam::795746500882:role/GithubConstellationVersionsAPIWrite aws-region: eu-central-1 - name: Login to AWS with write and image remove access if: steps.check-rights.outputs.write == 'true' && steps.check-rights.outputs.auth == 'true' - uses: aws-actions/configure-aws-credentials@f24d7193d98baebaeacc7e2227925dd47cc267f5 # v4.2.0 + uses: aws-actions/configure-aws-credentials@b47578312673ae6fa5b5096b330d9fbac3d116df # v4.2.1 with: role-to-assume: arn:aws:iam::795746500882:role/GithubConstellationVersionsAPIRemove aws-region: eu-central-1 From acec15484685d612a15f59d40e182e897aaab113 Mon Sep 17 00:00:00 2001 From: edgelessci <71088502+edgelessci@users.noreply.github.com> Date: Wed, 21 May 2025 08:19:25 +0200 Subject: [PATCH 286/311] image: update measurements and image version (#3838) Co-authored-by: edgelessci --- .../measurements/measurements_enterprise.go | 16 ++++++++-------- internal/config/image_enterprise.go | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/internal/attestation/measurements/measurements_enterprise.go b/internal/attestation/measurements/measurements_enterprise.go index ae1ffe88c..92209c6d1 100644 --- a/internal/attestation/measurements/measurements_enterprise.go +++ b/internal/attestation/measurements/measurements_enterprise.go @@ -19,14 +19,14 @@ package measurements // revive:disable:var-naming var ( - aws_AWSNitroTPM = M{0: {Expected: []byte{0x73, 0x7f, 0x76, 0x7a, 0x12, 0xf5, 0x4e, 0x70, 0xee, 0xcb, 0xc8, 0x68, 0x40, 0x11, 0x32, 0x3a, 0xe2, 0xfe, 0x2d, 0xd9, 0xf9, 0x07, 0x85, 0x57, 0x79, 0x69, 0xd7, 0xa2, 0x01, 0x3e, 0x8c, 0x12}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x73, 0xa3, 0x8e, 0x0d, 0x77, 0x89, 0x63, 0x9a, 0xe4, 0xc8, 0xa8, 0x66, 0x45, 0xa8, 0x11, 0xd3, 0x14, 0xa0, 0xa1, 0xf9, 0x62, 0x00, 0x18, 0xf9, 0x68, 0xb5, 0xec, 0x57, 0x04, 0xc3, 0xd7, 0x0b}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xf5, 0x67, 0x80, 0x1a, 0x50, 0x03, 0xd9, 0xef, 0x20, 0xd8, 0x7d, 0x2f, 0xc7, 0x6b, 0xeb, 0xb0, 0xd6, 0x28, 0x48, 0xb1, 0xbc, 0xed, 0x0c, 0xc5, 0x0f, 0x84, 0xae, 0xdb, 0x57, 0x37, 0x75, 0xf0}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x56, 0xa9, 0x8c, 0x3c, 0x70, 0x72, 0xfc, 0x9c, 0x4e, 0xb1, 0x1e, 0xe4, 0xbb, 0x65, 0x2e, 0xa8, 0xdd, 0x71, 0xbb, 0x54, 0xc8, 0x13, 0xc9, 0xe5, 0x42, 0x39, 0xa2, 0x0b, 0x0c, 0xc2, 0x9d, 0xc0}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - aws_AWSSEVSNP = M{0: {Expected: []byte{0xd6, 0xdf, 0x85, 0x53, 0x58, 0xf5, 0xb1, 0x0f, 0x06, 0xf0, 0xfa, 0xb3, 0xf4, 0x08, 0xad, 0x26, 0xcd, 0x16, 0x5a, 0x29, 0x49, 0xba, 0xd6, 0x9e, 0x2c, 0xc7, 0x56, 0x92, 0x52, 0x9e, 0x66, 0x2a}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x98, 0x4a, 0x55, 0x3b, 0xb5, 0x19, 0xa9, 0x87, 0x4c, 0x76, 0x0c, 0xd0, 0xed, 0x3c, 0x00, 0x4c, 0xcf, 0x35, 0xdc, 0x5c, 0x45, 0x35, 0x46, 0x36, 0x34, 0x84, 0xfa, 0xa6, 0xa6, 0x5a, 0xb2, 0xac}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xcf, 0xbf, 0x4d, 0xaf, 0x0c, 0xf1, 0xd0, 0xf6, 0x6b, 0x62, 0xe6, 0xda, 0x12, 0xd3, 0x96, 0xc3, 0x20, 0x35, 0x2d, 0x87, 0x26, 0x09, 0x87, 0xeb, 0x5c, 0x79, 0x1a, 0xb9, 0x1d, 0xa9, 0xaf, 0x02}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x34, 0xb2, 0xd3, 0x62, 0x2b, 0xbc, 0xb0, 0x6f, 0x92, 0x4d, 0xb6, 0xd6, 0x2f, 0x73, 0x0b, 0x79, 0x28, 0x33, 0x3b, 0x43, 0xb7, 0xf0, 0x1b, 0xe6, 0x49, 0x31, 0x7b, 0x81, 0x4e, 0x09, 0x43, 0xa7}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - azure_AzureSEVSNP = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x52, 0x2c, 0xc5, 0x99, 0x86, 0x9c, 0xce, 0xa4, 0xa2, 0x98, 0x9c, 0x11, 0x93, 0xaf, 0xa6, 0x38, 0x96, 0xde, 0x5a, 0xe5, 0xa8, 0x04, 0x62, 0x52, 0x86, 0x6a, 0xf9, 0x85, 0xe3, 0x0b, 0x0e, 0xf6}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xb5, 0xbf, 0x47, 0x5a, 0x0a, 0x34, 0xe3, 0xdc, 0xd2, 0x89, 0x90, 0xdb, 0x6d, 0x0f, 0xc2, 0xe0, 0x0a, 0x93, 0x4e, 0x05, 0xfa, 0x3e, 0xe5, 0x8b, 0x5c, 0x20, 0x24, 0xab, 0xb8, 0x7a, 0x09, 0xa8}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x68, 0x73, 0xa7, 0xcf, 0xc2, 0x4d, 0xe1, 0x9d, 0x55, 0x5b, 0x4e, 0x4c, 0xc7, 0x48, 0x9b, 0xb6, 0xc9, 0x4d, 0xc4, 0xda, 0xa1, 0xcb, 0x88, 0x31, 0xb8, 0x8e, 0x0f, 0x20, 0x27, 0x7c, 0xc2, 0xa9}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - azure_AzureTDX = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xeb, 0x2f, 0xda, 0x44, 0x76, 0x10, 0xc8, 0x8a, 0xfb, 0x7a, 0xdb, 0x62, 0x31, 0x9b, 0xf5, 0x43, 0xac, 0x01, 0xdf, 0xf1, 0xc8, 0xe3, 0xbd, 0xc2, 0xaa, 0x83, 0x24, 0x08, 0xc5, 0xf2, 0x66, 0xca}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xd2, 0x45, 0xd8, 0x15, 0xdd, 0xbc, 0xb4, 0x26, 0x2a, 0x53, 0xb0, 0x14, 0x2d, 0x72, 0x91, 0xcc, 0x88, 0x6b, 0xe1, 0x53, 0x09, 0xb3, 0x7f, 0xab, 0x04, 0x74, 0x68, 0x0d, 0x26, 0x73, 0xe4, 0xaf}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xa8, 0x88, 0x9e, 0xea, 0x7f, 0xf1, 0x9e, 0x8b, 0x74, 0x9c, 0x3f, 0x28, 0x7e, 0xd3, 0xa6, 0xe7, 0x23, 0x2e, 0x02, 0xfa, 0x01, 0xfd, 0x06, 0x1a, 0x56, 0xc9, 0xe7, 0xae, 0xfd, 0x43, 0x60, 0x3b}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + aws_AWSNitroTPM = M{0: {Expected: []byte{0x73, 0x7f, 0x76, 0x7a, 0x12, 0xf5, 0x4e, 0x70, 0xee, 0xcb, 0xc8, 0x68, 0x40, 0x11, 0x32, 0x3a, 0xe2, 0xfe, 0x2d, 0xd9, 0xf9, 0x07, 0x85, 0x57, 0x79, 0x69, 0xd7, 0xa2, 0x01, 0x3e, 0x8c, 0x12}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x4f, 0x65, 0xb9, 0x4e, 0xb0, 0x72, 0x35, 0xd5, 0xa7, 0xb2, 0x61, 0xda, 0x6e, 0x4a, 0x33, 0x1f, 0xaf, 0xa1, 0xc0, 0x43, 0xa5, 0x5c, 0x8b, 0x4d, 0xf8, 0xf3, 0xa7, 0x27, 0x4e, 0x5d, 0x80, 0xe6}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x6a, 0x51, 0xe9, 0x9a, 0x37, 0x30, 0x81, 0x05, 0x94, 0x23, 0x95, 0x58, 0xba, 0xf8, 0x70, 0x57, 0xe6, 0x35, 0x70, 0x94, 0x9e, 0x5d, 0x79, 0x81, 0x18, 0xff, 0x2e, 0x26, 0x94, 0x88, 0xc0, 0x23}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x9b, 0x09, 0xae, 0xa2, 0x43, 0xd9, 0x8d, 0xb8, 0xc5, 0xe7, 0xc2, 0x15, 0x2a, 0xb8, 0xee, 0x19, 0xf8, 0x1d, 0xd7, 0x22, 0x7e, 0x2b, 0x92, 0xbd, 0xef, 0xba, 0xf6, 0x01, 0xa5, 0xe0, 0x2e, 0xcb}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + aws_AWSSEVSNP = M{0: {Expected: []byte{0xd6, 0xdf, 0x85, 0x53, 0x58, 0xf5, 0xb1, 0x0f, 0x06, 0xf0, 0xfa, 0xb3, 0xf4, 0x08, 0xad, 0x26, 0xcd, 0x16, 0x5a, 0x29, 0x49, 0xba, 0xd6, 0x9e, 0x2c, 0xc7, 0x56, 0x92, 0x52, 0x9e, 0x66, 0x2a}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x6d, 0x28, 0x7f, 0x6a, 0x46, 0xf4, 0xa1, 0xed, 0x3a, 0xe5, 0x27, 0x3d, 0xfe, 0xb8, 0x82, 0x12, 0xe9, 0x89, 0x84, 0xbd, 0x59, 0x42, 0x7e, 0xa3, 0x86, 0x43, 0x6d, 0x5e, 0xaf, 0x1b, 0x70, 0xa5}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x0b, 0xff, 0x09, 0xd9, 0xb4, 0xbb, 0xb1, 0xa4, 0x66, 0x89, 0xf6, 0x11, 0x29, 0x13, 0x25, 0x17, 0x86, 0xba, 0x72, 0x75, 0x13, 0x90, 0x41, 0x27, 0x0b, 0xf6, 0xb1, 0x32, 0xfa, 0x1e, 0xae, 0x68}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xc9, 0x9b, 0x47, 0xde, 0xc1, 0x25, 0x77, 0x41, 0x25, 0x30, 0xff, 0x8c, 0x98, 0x92, 0xb6, 0xa9, 0xb8, 0xe8, 0xc4, 0xb5, 0xcc, 0xfc, 0xae, 0x69, 0xd0, 0x43, 0xce, 0xd4, 0xe9, 0x3f, 0x5c, 0xc0}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + azure_AzureSEVSNP = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x94, 0x11, 0x3a, 0x82, 0xf8, 0x29, 0x94, 0x63, 0x06, 0x30, 0xab, 0xae, 0x0e, 0x60, 0x64, 0xf1, 0x54, 0x0f, 0xf9, 0x3b, 0xa8, 0xae, 0xab, 0x75, 0x6d, 0x60, 0x5f, 0xdf, 0x52, 0x9f, 0x2e, 0xdc}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x32, 0x93, 0x52, 0x29, 0x97, 0x9c, 0x14, 0x01, 0x32, 0xb7, 0xe9, 0x7f, 0x43, 0x8f, 0xbb, 0x97, 0x43, 0x55, 0x80, 0xb6, 0xb2, 0xfc, 0xc1, 0x81, 0x10, 0x29, 0x36, 0x2e, 0xf7, 0x37, 0x36, 0xb9}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x8a, 0xd7, 0xf9, 0x59, 0xe6, 0xa0, 0x77, 0xbe, 0xec, 0xf4, 0xeb, 0x47, 0x44, 0xca, 0xad, 0x0f, 0x83, 0x4c, 0xf6, 0xf0, 0x5c, 0x27, 0x1a, 0x89, 0x49, 0x9d, 0x0e, 0x77, 0x7b, 0xa5, 0x29, 0x4a}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + azure_AzureTDX = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x91, 0x3c, 0x11, 0xfa, 0xfd, 0xe9, 0xcd, 0x7f, 0x11, 0xeb, 0x8e, 0xc6, 0x3f, 0x86, 0x57, 0x64, 0x0c, 0xb0, 0xf4, 0xa6, 0xb4, 0x16, 0x1d, 0xc2, 0x60, 0xc2, 0x5b, 0x64, 0xf1, 0xfd, 0xaf, 0xed}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x3c, 0x89, 0x68, 0xce, 0x17, 0xee, 0x05, 0xd8, 0x52, 0x58, 0x7f, 0x9b, 0x7b, 0x39, 0x89, 0x6d, 0x42, 0x73, 0xf1, 0x45, 0xf3, 0x1a, 0x51, 0xc6, 0x57, 0x87, 0x50, 0x00, 0x9a, 0xbe, 0x21, 0x66}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x08, 0xc1, 0xe9, 0xe5, 0xc8, 0x4e, 0xf7, 0x57, 0xde, 0x2a, 0xae, 0xf1, 0x90, 0xc9, 0x72, 0x64, 0x1b, 0x0f, 0x80, 0x3b, 0xad, 0x9f, 0x98, 0xf2, 0xa3, 0xa1, 0x95, 0x8c, 0x95, 0xf0, 0x17, 0xdd}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} azure_AzureTrustedLaunch M - gcp_GCPSEVES = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x6a, 0xb9, 0xc8, 0xd3, 0x7d, 0x79, 0x49, 0xe8, 0x01, 0xa3, 0xe3, 0xf3, 0x18, 0xd3, 0x34, 0x62, 0xfb, 0xd4, 0x96, 0xf9, 0x61, 0xde, 0xd5, 0xc5, 0xe6, 0xfb, 0xa8, 0x83, 0xe6, 0x36, 0xb2, 0x1c}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x72, 0x5c, 0x17, 0x8b, 0x8b, 0x62, 0x45, 0xa7, 0x69, 0xe4, 0x3b, 0xa3, 0xa5, 0x7b, 0xee, 0xb9, 0xcf, 0x68, 0x54, 0xdd, 0x7e, 0x9f, 0xe4, 0x48, 0xb7, 0xc5, 0xb0, 0x4d, 0xda, 0xc8, 0xdb, 0x87}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x78, 0x74, 0x49, 0x06, 0xa1, 0x9b, 0xa0, 0x15, 0x94, 0x58, 0xa5, 0x1c, 0x46, 0xcd, 0xa6, 0xe2, 0x39, 0x39, 0x44, 0x20, 0x54, 0xd5, 0xf3, 0xa4, 0x06, 0x7e, 0xa9, 0x8d, 0xe9, 0xd0, 0x04, 0x94}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - gcp_GCPSEVSNP = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x04, 0xc0, 0x75, 0xd0, 0x9b, 0x7e, 0x4e, 0xcf, 0xb5, 0x16, 0x89, 0x6b, 0x26, 0x50, 0x9e, 0x33, 0xd1, 0xc1, 0x64, 0x10, 0x82, 0xd2, 0x4c, 0x95, 0xb1, 0x8d, 0x56, 0xec, 0x0c, 0x3d, 0x83, 0x25}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xc3, 0x94, 0x1e, 0x53, 0xda, 0x29, 0x96, 0x2e, 0xfc, 0x9f, 0xf4, 0x4e, 0x9d, 0xde, 0x62, 0x4c, 0xdf, 0xa2, 0x71, 0xed, 0x15, 0x49, 0x19, 0xed, 0xe8, 0xec, 0xf2, 0xbc, 0x67, 0x80, 0x8b, 0x62}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xbd, 0xd1, 0x4b, 0x35, 0xe0, 0xe6, 0x03, 0xea, 0xb0, 0xaa, 0x55, 0x5b, 0x4b, 0x94, 0xdc, 0x1f, 0x53, 0x46, 0x47, 0x58, 0xc8, 0x8b, 0xad, 0x00, 0x7f, 0x0f, 0x06, 0x94, 0xa5, 0xa8, 0xfa, 0x6a}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - openstack_QEMUVTPM = M{4: {Expected: []byte{0x5d, 0x50, 0x7b, 0xa0, 0x21, 0xd3, 0xbe, 0xba, 0x8f, 0x3b, 0x32, 0xff, 0xa9, 0x44, 0xa3, 0xdb, 0x16, 0x39, 0x91, 0xdb, 0xad, 0x0f, 0xd7, 0xe7, 0xf0, 0x50, 0x19, 0xa7, 0x49, 0xc0, 0x32, 0xbd}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x33, 0x6f, 0x51, 0x2a, 0x64, 0x17, 0x0c, 0x97, 0xe9, 0x0f, 0x5c, 0xa3, 0xdf, 0x81, 0x6c, 0x81, 0xb7, 0xd2, 0x2f, 0xec, 0xc6, 0x97, 0x15, 0x54, 0x51, 0xff, 0x6b, 0x27, 0x9d, 0x45, 0x80, 0xc6}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xa8, 0x42, 0xd2, 0x06, 0x43, 0x6c, 0x79, 0x7c, 0x72, 0x44, 0x7f, 0xa1, 0x01, 0x87, 0xa3, 0x74, 0x61, 0xbb, 0x32, 0xd3, 0x92, 0x52, 0xb1, 0x2b, 0x24, 0xe9, 0xaf, 0x0f, 0x28, 0x7b, 0x03, 0xd2}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + gcp_GCPSEVES = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x6d, 0xe2, 0xc6, 0xa3, 0x2f, 0x49, 0x93, 0x3c, 0x59, 0xe0, 0x40, 0x92, 0x9f, 0x32, 0xc3, 0x26, 0x75, 0xb2, 0xf4, 0x25, 0xb1, 0x7d, 0xb6, 0x9d, 0xf8, 0x69, 0xab, 0xfc, 0x88, 0x84, 0x31, 0xf6}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xee, 0x0f, 0x10, 0xec, 0x8c, 0x1a, 0x03, 0xde, 0x3e, 0xc3, 0xe6, 0xc6, 0x4e, 0x6f, 0x68, 0x60, 0xd9, 0x5d, 0x8b, 0xeb, 0x7f, 0x07, 0x68, 0xc9, 0x8c, 0xbf, 0x68, 0x02, 0x42, 0xf5, 0x9a, 0x0c}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xbb, 0x0f, 0xa4, 0x62, 0xf4, 0xa8, 0xe4, 0x0d, 0xa5, 0xc1, 0x22, 0x70, 0x32, 0xcc, 0x94, 0xb2, 0xbd, 0x86, 0x8e, 0x3d, 0x60, 0xf8, 0x5b, 0x15, 0xa7, 0x3f, 0x7a, 0x9e, 0x68, 0xbc, 0x71, 0xad}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + gcp_GCPSEVSNP = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x45, 0x7b, 0x05, 0xc6, 0x90, 0x92, 0xa7, 0x1b, 0x5c, 0x06, 0xbe, 0x9c, 0xe8, 0x70, 0xd1, 0x47, 0xe7, 0x24, 0x96, 0x7d, 0xe7, 0xee, 0x0b, 0x5e, 0xac, 0xe6, 0x1b, 0x5c, 0x7f, 0x09, 0x9d, 0xc5}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xda, 0x74, 0x7d, 0x76, 0xb1, 0xbf, 0xb3, 0x25, 0xbe, 0x40, 0x6a, 0x1d, 0x4f, 0x42, 0x6d, 0xbc, 0x1c, 0xc5, 0x2a, 0xe9, 0xbc, 0x4e, 0x4d, 0x4e, 0x3e, 0xfa, 0x74, 0x0c, 0x8b, 0xc7, 0xfd, 0x9a}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xa0, 0x42, 0x57, 0xa4, 0xd4, 0x4d, 0x69, 0xd3, 0x4f, 0xa3, 0xa5, 0x78, 0xf0, 0xfa, 0x95, 0x19, 0x34, 0x83, 0xbb, 0xb6, 0xbb, 0xa5, 0xa0, 0x18, 0x99, 0x3c, 0x35, 0xdf, 0xb2, 0x2a, 0xf3, 0x9e}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + openstack_QEMUVTPM = M{4: {Expected: []byte{0xf1, 0x98, 0xf6, 0xc8, 0x03, 0x15, 0x8f, 0x8c, 0xe4, 0xc9, 0x4f, 0x40, 0x91, 0x64, 0x05, 0xb4, 0xd9, 0x0d, 0xd4, 0xb1, 0x08, 0xad, 0x44, 0xcb, 0x6f, 0xef, 0x60, 0x58, 0x5f, 0x13, 0x09, 0xf6}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x25, 0x7b, 0x0c, 0x7f, 0x5b, 0x36, 0x7f, 0xd7, 0x6d, 0xd1, 0x60, 0xbe, 0x01, 0xbb, 0x8e, 0x87, 0x02, 0x6c, 0x87, 0xc9, 0x20, 0x41, 0xb3, 0xd0, 0x1c, 0x32, 0xa4, 0xb8, 0xfa, 0x0b, 0x2f, 0x51}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x27, 0xf9, 0x9e, 0x75, 0x7f, 0x4e, 0x12, 0x45, 0x94, 0xf1, 0x3c, 0xce, 0xa9, 0xdc, 0x6a, 0xc1, 0x82, 0xd4, 0x55, 0x24, 0x71, 0x59, 0xcd, 0xf5, 0x23, 0x27, 0x48, 0x94, 0xbc, 0xda, 0xb0, 0x2d}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} qemu_QEMUTDX M - qemu_QEMUVTPM = M{4: {Expected: []byte{0x72, 0x44, 0xa4, 0x36, 0x64, 0x9a, 0x60, 0xf7, 0xbc, 0x3a, 0xb6, 0x88, 0xe0, 0xd4, 0xbf, 0x81, 0xe5, 0xc7, 0xc9, 0x88, 0xf8, 0x16, 0x26, 0x09, 0x64, 0xb5, 0x08, 0xea, 0xef, 0x17, 0xf0, 0x1e}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x2a, 0x00, 0x6f, 0x8c, 0x3d, 0xa3, 0xa2, 0x80, 0x42, 0x2c, 0x7c, 0xbb, 0x4f, 0x1e, 0x47, 0x08, 0x8d, 0x91, 0x97, 0xec, 0xf9, 0x39, 0x0f, 0xd8, 0x96, 0x5b, 0x50, 0x12, 0xed, 0xf6, 0x1e, 0x14}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x0d, 0x4e, 0xfa, 0xf6, 0xa3, 0xf4, 0x74, 0xa2, 0xc9, 0x10, 0xda, 0xae, 0xea, 0x8e, 0x98, 0x7c, 0x1f, 0x61, 0x38, 0x95, 0xa4, 0x11, 0x24, 0x3f, 0x16, 0x20, 0x4c, 0x75, 0x24, 0xc2, 0x35, 0x10}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + qemu_QEMUVTPM = M{4: {Expected: []byte{0x49, 0xaf, 0xff, 0xe4, 0x16, 0x24, 0x65, 0xa9, 0xfa, 0xe8, 0x36, 0xb0, 0x24, 0x3b, 0x6a, 0x44, 0x00, 0xc7, 0xc3, 0xec, 0xfb, 0x3a, 0x18, 0x93, 0x49, 0x7c, 0xd7, 0x0a, 0xf5, 0xd3, 0x78, 0x85}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xa0, 0x88, 0xbc, 0x76, 0x67, 0x9f, 0x50, 0x9d, 0x27, 0x61, 0x75, 0xcb, 0xce, 0x31, 0x64, 0x27, 0xce, 0xb9, 0xca, 0xfa, 0xa6, 0x18, 0xa7, 0x00, 0x6c, 0x66, 0x83, 0x5b, 0x2a, 0x23, 0x57, 0x56}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x69, 0xd5, 0x4e, 0x8a, 0xf2, 0x5a, 0xa2, 0xf7, 0xa5, 0x04, 0x3a, 0x82, 0xae, 0x92, 0x82, 0x8d, 0x06, 0xea, 0xff, 0x7c, 0x7e, 0xed, 0xab, 0xa6, 0x9a, 0xde, 0x47, 0xe8, 0x2a, 0xc8, 0xb3, 0xa2}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} ) diff --git a/internal/config/image_enterprise.go b/internal/config/image_enterprise.go index 5bcebcc8c..4313d856c 100644 --- a/internal/config/image_enterprise.go +++ b/internal/config/image_enterprise.go @@ -10,5 +10,5 @@ package config const ( // defaultImage is the default image to use. - defaultImage = "ref/main/stream/nightly/v2.24.0-pre.0.20250515163144-ba9dcb87ed0a" + defaultImage = "ref/main/stream/nightly/v2.24.0-pre.0.20250520083147-5b0073ffe87a" ) From 2835db3b1e2d8a0b3c12275e5bae7f2cd81f7f44 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 21 May 2025 15:22:12 +0200 Subject: [PATCH 287/311] deps: update bazel (modules) (#3817) * deps: update bazel (modules) * bazel: add rules_shell dependency * deps: tidy all modules --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Moritz Sanft <58110325+msanft@users.noreply.github.com> Co-authored-by: edgelessci --- MODULE.bazel | 7 +- MODULE.bazel.lock | 2824 +---------------------------- bazel/sh/BUILD.bazel | 2 + bazel/sh/def.bzl | 8 +- e2e/miniconstellation/BUILD.bazel | 1 + image/mirror/BUILD.bazel | 2 + 6 files changed, 45 insertions(+), 2799 deletions(-) diff --git a/MODULE.bazel b/MODULE.bazel index 46a6e9d71..13876ce45 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -1,6 +1,6 @@ module(name = "constellation") -bazel_dep(name = "aspect_bazel_lib", version = "2.14.0") +bazel_dep(name = "aspect_bazel_lib", version = "2.16.0") bazel_lib = use_extension("@aspect_bazel_lib//lib:extensions.bzl", "toolchains") bazel_lib.yq() @@ -14,9 +14,10 @@ bazel_dep(name = "rules_cc", version = "0.1.1") bazel_dep(name = "rules_go", version = "0.54.0", repo_name = "io_bazel_rules_go") bazel_dep(name = "rules_pkg", version = "1.1.0") bazel_dep(name = "rules_proto", version = "7.1.0") -bazel_dep(name = "rules_python", version = "1.3.0") +bazel_dep(name = "rules_python", version = "1.4.1") +bazel_dep(name = "rules_shell", version = "0.4.1") -bazel_dep(name = "buildifier_prebuilt", version = "8.0.1", dev_dependency = True) +bazel_dep(name = "buildifier_prebuilt", version = "8.0.3", dev_dependency = True) go_sdk = use_extension("@io_bazel_rules_go//go:extensions.bzl", "go_sdk") go_sdk.download( diff --git a/MODULE.bazel.lock b/MODULE.bazel.lock index eea45219b..18b6cd2c4 100644 --- a/MODULE.bazel.lock +++ b/MODULE.bazel.lock @@ -12,8 +12,8 @@ "https://bcr.bazel.build/modules/abseil-cpp/20240116.1/source.json": "9be551b8d4e3ef76875c0d744b5d6a504a27e3ae67bc6b28f46415fd2d2957da", "https://bcr.bazel.build/modules/apple_support/1.5.0/MODULE.bazel": "50341a62efbc483e8a2a6aec30994a58749bd7b885e18dd96aa8c33031e558ef", "https://bcr.bazel.build/modules/apple_support/1.5.0/source.json": "eb98a7627c0bc486b57f598ad8da50f6625d974c8f723e9ea71bd39f709c9862", - "https://bcr.bazel.build/modules/aspect_bazel_lib/2.14.0/MODULE.bazel": "2b31ffcc9bdc8295b2167e07a757dbbc9ac8906e7028e5170a3708cecaac119f", - "https://bcr.bazel.build/modules/aspect_bazel_lib/2.14.0/source.json": "0cf1826853b0bef8b5cd19c0610d717500f5521aa2b38b72b2ec302ac5e7526c", + "https://bcr.bazel.build/modules/aspect_bazel_lib/2.16.0/MODULE.bazel": "852f9ebbda017572a7c113a2434592dd3b2f55cd9a0faea3d4be5a09a59e4900", + "https://bcr.bazel.build/modules/aspect_bazel_lib/2.16.0/source.json": "87ffed720a2ba7cfe209d9ccc1be59e21ec3d434124ec126ab90e5913e9cb13b", "https://bcr.bazel.build/modules/bazel_features/1.1.0/MODULE.bazel": "cfd42ff3b815a5f39554d97182657f8c4b9719568eb7fded2b9135f084bf760b", "https://bcr.bazel.build/modules/bazel_features/1.1.1/MODULE.bazel": "27b8c79ef57efe08efccbd9dd6ef70d61b4798320b8d3c134fd571f78963dbcd", "https://bcr.bazel.build/modules/bazel_features/1.11.0/MODULE.bazel": "f9382337dd5a474c3b7d334c2f83e50b6eaedc284253334cf823044a26de03e8", @@ -39,8 +39,8 @@ "https://bcr.bazel.build/modules/bazel_skylib/1.7.0/MODULE.bazel": "0db596f4563de7938de764cc8deeabec291f55e8ec15299718b93c4423e9796d", "https://bcr.bazel.build/modules/bazel_skylib/1.7.1/MODULE.bazel": "3120d80c5861aa616222ec015332e5f8d3171e062e3e804a2a0253e1be26e59b", "https://bcr.bazel.build/modules/bazel_skylib/1.7.1/source.json": "f121b43eeefc7c29efbd51b83d08631e2347297c95aac9764a701f2a6a2bb953", - "https://bcr.bazel.build/modules/buildifier_prebuilt/8.0.1/MODULE.bazel": "66ea722b98a7ce0b790d913e82163ebe04509073b269539403936d8f65bef027", - "https://bcr.bazel.build/modules/buildifier_prebuilt/8.0.1/source.json": "1bebf90699bb94cb232b417a6e20ac8b21ad4ccfbcb506116635825c4c87b10b", + "https://bcr.bazel.build/modules/buildifier_prebuilt/8.0.3/MODULE.bazel": "4791b031727d1183c183a0b8fd5fc0fe8d8834c45f9a22efd26be6c962b9cfee", + "https://bcr.bazel.build/modules/buildifier_prebuilt/8.0.3/source.json": "68ee16210562f325ff961aabeb4d46ed10e6638b5e842cd48d8d83dea220dfbd", "https://bcr.bazel.build/modules/buildozer/7.1.2/MODULE.bazel": "2e8dd40ede9c454042645fd8d8d0cd1527966aa5c919de86661e62953cd73d84", "https://bcr.bazel.build/modules/buildozer/7.1.2/source.json": "c9028a501d2db85793a6996205c8de120944f50a0d570438fcae0457a5f9d1f8", "https://bcr.bazel.build/modules/gazelle/0.32.0/MODULE.bazel": "b499f58a5d0d3537f3cf5b76d8ada18242f64ec474d8391247438bf04f58c7b8", @@ -146,11 +146,12 @@ "https://bcr.bazel.build/modules/rules_python/0.31.0/MODULE.bazel": "93a43dc47ee570e6ec9f5779b2e64c1476a6ce921c48cc9a1678a91dd5f8fd58", "https://bcr.bazel.build/modules/rules_python/0.4.0/MODULE.bazel": "9208ee05fd48bf09ac60ed269791cf17fb343db56c8226a720fbb1cdf467166c", "https://bcr.bazel.build/modules/rules_python/1.0.0/MODULE.bazel": "898a3d999c22caa585eb062b600f88654bf92efb204fa346fb55f6f8edffca43", - "https://bcr.bazel.build/modules/rules_python/1.3.0/MODULE.bazel": "8361d57eafb67c09b75bf4bbe6be360e1b8f4f18118ab48037f2bd50aa2ccb13", - "https://bcr.bazel.build/modules/rules_python/1.3.0/source.json": "25932f917cd279c7baefa6cb1d3fa8750a7a29de522024449b19af6eab51f4a0", + "https://bcr.bazel.build/modules/rules_python/1.4.1/MODULE.bazel": "8991ad45bdc25018301d6b7e1d3626afc3c8af8aaf4bc04f23d0b99c938b73a6", + "https://bcr.bazel.build/modules/rules_python/1.4.1/source.json": "8ec8c90c70ccacc4de8ca1b97f599e756fb59173e898ee08b733006650057c07", "https://bcr.bazel.build/modules/rules_shell/0.2.0/MODULE.bazel": "fda8a652ab3c7d8fee214de05e7a9916d8b28082234e8d2c0094505c5268ed3c", "https://bcr.bazel.build/modules/rules_shell/0.3.0/MODULE.bazel": "de4402cd12f4cc8fda2354fce179fdb068c0b9ca1ec2d2b17b3e21b24c1a937b", - "https://bcr.bazel.build/modules/rules_shell/0.3.0/source.json": "c55ed591aa5009401ddf80ded9762ac32c358d2517ee7820be981e2de9756cf3", + "https://bcr.bazel.build/modules/rules_shell/0.4.1/MODULE.bazel": "00e501db01bbf4e3e1dd1595959092c2fadf2087b2852d3f553b5370f5633592", + "https://bcr.bazel.build/modules/rules_shell/0.4.1/source.json": "4757bd277fe1567763991c4425b483477bb82e35e777a56fd846eb5cceda324a", "https://bcr.bazel.build/modules/stardoc/0.5.1/MODULE.bazel": "1a05d92974d0c122f5ccf09291442580317cdd859f07a8655f1db9a60374f9f8", "https://bcr.bazel.build/modules/stardoc/0.5.3/MODULE.bazel": "c7f6948dae6999bf0db32c1858ae345f112cacf98f174c7a8bb707e41b974f1c", "https://bcr.bazel.build/modules/stardoc/0.6.2/MODULE.bazel": "7060193196395f5dd668eda046ccbeacebfd98efc77fed418dbe2b82ffaa39fd", @@ -196,8 +197,8 @@ }, "@@buildifier_prebuilt~//:defs.bzl%buildifier_prebuilt_deps_extension": { "general": { - "bzlTransitiveDigest": "rGFwP53kZJt1xitZcYx6affAvfHqnyxx2HCrewFcWTc=", - "usagesDigest": "sy21t1r/nZFzoEm0sKKNEtD2MI9TRY4JhsxxM03nWJw=", + "bzlTransitiveDigest": "iJF3Ti5GHJEiRxMrIeawImDqrsi/K3YJ2iOANQ9PgTY=", + "usagesDigest": "7usdeKzpXVqoKoZ61Dnl/vDdUwqpKKsBnVxdfeIzpH4=", "recordedFileInputs": {}, "recordedDirentsInputs": {}, "envVariables": {}, @@ -207,11 +208,11 @@ "ruleClassName": "http_file", "attributes": { "urls": [ - "https://github.com/bazelbuild/buildtools/releases/download/v8.0.1/buildifier-darwin-amd64" + "https://github.com/bazelbuild/buildtools/releases/download/v8.0.3/buildifier-darwin-amd64" ], "downloaded_file_path": "buildifier", "executable": true, - "sha256": "802b013211dbcf91e3c0658ba33ecb3932ef5a6f6764a0b13efcec4e2df04c83" + "sha256": "b7a3152cde0b3971b1107f2274afe778c5c154dcdf6c9c669a231e3c004f047e" } }, "buildifier_darwin_arm64": { @@ -219,11 +220,11 @@ "ruleClassName": "http_file", "attributes": { "urls": [ - "https://github.com/bazelbuild/buildtools/releases/download/v8.0.1/buildifier-darwin-arm64" + "https://github.com/bazelbuild/buildtools/releases/download/v8.0.3/buildifier-darwin-arm64" ], "downloaded_file_path": "buildifier", "executable": true, - "sha256": "833e2afc331b9ad8f6b038ad3d69ceeaf97651900bf2a3a45f54f42cafe0bfd3" + "sha256": "674c663f7b5cd03c002f8ca834a8c1c008ccb527a0a2a132d08a7a355883b22d" } }, "buildifier_linux_amd64": { @@ -231,11 +232,11 @@ "ruleClassName": "http_file", "attributes": { "urls": [ - "https://github.com/bazelbuild/buildtools/releases/download/v8.0.1/buildifier-linux-amd64" + "https://github.com/bazelbuild/buildtools/releases/download/v8.0.3/buildifier-linux-amd64" ], "downloaded_file_path": "buildifier", "executable": true, - "sha256": "1976053ed4decd6dd93170885b4387eddc76ec70dc2697b2e91a9af83269418a" + "sha256": "c969487c1af85e708576c8dfdd0bb4681eae58aad79e68ae48882c70871841b7" } }, "buildifier_linux_arm64": { @@ -243,11 +244,11 @@ "ruleClassName": "http_file", "attributes": { "urls": [ - "https://github.com/bazelbuild/buildtools/releases/download/v8.0.1/buildifier-linux-arm64" + "https://github.com/bazelbuild/buildtools/releases/download/v8.0.3/buildifier-linux-arm64" ], "downloaded_file_path": "buildifier", "executable": true, - "sha256": "93078c57763493bdc2914ed340544500b8f3497341a62e90f00e9e184c4d9c2c" + "sha256": "bdd9b92e2c65d46affeecaefb54e68d34c272d1f4a8c5b54929a3e92ab78820a" } }, "buildifier_windows_amd64": { @@ -255,11 +256,11 @@ "ruleClassName": "http_file", "attributes": { "urls": [ - "https://github.com/bazelbuild/buildtools/releases/download/v8.0.1/buildifier-windows-amd64.exe" + "https://github.com/bazelbuild/buildtools/releases/download/v8.0.3/buildifier-windows-amd64.exe" ], "downloaded_file_path": "buildifier.exe", "executable": true, - "sha256": "6edc9247e6d42d27fb67b9509bb795d159a12468faa89e9f290dcadc26571c31" + "sha256": "63a242f57e253efe7b9573d739c08a3d0e628efd84015c8dad17d87b6429e443" } }, "buildozer_darwin_amd64": { @@ -267,11 +268,11 @@ "ruleClassName": "http_file", "attributes": { "urls": [ - "https://github.com/bazelbuild/buildtools/releases/download/v8.0.1/buildozer-darwin-amd64" + "https://github.com/bazelbuild/buildtools/releases/download/v8.0.3/buildozer-darwin-amd64" ], "downloaded_file_path": "buildozer", "executable": true, - "sha256": "799be47db682fb06bfc677438d0c910032dda783606b1eec77669f2c1a17c65a" + "sha256": "7aa7929faddcee5a879135356bb4d38af3e895893c78d361e7cdb8dfb3e7d5e4" } }, "buildozer_darwin_arm64": { @@ -279,11 +280,11 @@ "ruleClassName": "http_file", "attributes": { "urls": [ - "https://github.com/bazelbuild/buildtools/releases/download/v8.0.1/buildozer-darwin-arm64" + "https://github.com/bazelbuild/buildtools/releases/download/v8.0.3/buildozer-darwin-arm64" ], "downloaded_file_path": "buildozer", "executable": true, - "sha256": "118f2ff581c49e03aeb77e34fddebab10923b93e381185e43e0c1835ba189cd9" + "sha256": "33b776862c31bfb4e2e6e88186cae02746d9084da8b7341930e77d42718277cc" } }, "buildozer_linux_amd64": { @@ -291,11 +292,11 @@ "ruleClassName": "http_file", "attributes": { "urls": [ - "https://github.com/bazelbuild/buildtools/releases/download/v8.0.1/buildozer-linux-amd64" + "https://github.com/bazelbuild/buildtools/releases/download/v8.0.3/buildozer-linux-amd64" ], "downloaded_file_path": "buildozer", "executable": true, - "sha256": "4f5a91d4f7fb61ff4d39cdedb7dcf93bb17f3b7737b07175ad4456dc6bdafac1" + "sha256": "775d17118aecd023352e75611dbe7c12a340e23615ffb270a1dec3f339239949" } }, "buildozer_linux_arm64": { @@ -303,11 +304,11 @@ "ruleClassName": "http_file", "attributes": { "urls": [ - "https://github.com/bazelbuild/buildtools/releases/download/v8.0.1/buildozer-linux-arm64" + "https://github.com/bazelbuild/buildtools/releases/download/v8.0.3/buildozer-linux-arm64" ], "downloaded_file_path": "buildozer", "executable": true, - "sha256": "a7eec1ddcf5075ef3b869f1bf476fce174f0226a35f7e20734caa5a55b10ce26" + "sha256": "058ad60f279a7b1db339bb287aed2056a992eddfe1b5d2e56d86256bdc9a93b3" } }, "buildozer_windows_amd64": { @@ -315,18 +316,18 @@ "ruleClassName": "http_file", "attributes": { "urls": [ - "https://github.com/bazelbuild/buildtools/releases/download/v8.0.1/buildozer-windows-amd64.exe" + "https://github.com/bazelbuild/buildtools/releases/download/v8.0.3/buildozer-windows-amd64.exe" ], "downloaded_file_path": "buildozer.exe", "executable": true, - "sha256": "3b51ae3dd0221eb9d43614206f0886ea36d78e6bb4f8dea69f7bc4cc285d1f15" + "sha256": "5ba106b25230e0e321b7259bee325ae6fa5b5771e54163ad865b1d18856f59ca" } }, "buildifier_prebuilt_toolchains": { "bzlFile": "@@buildifier_prebuilt~//:defs.bzl", "ruleClassName": "_buildifier_toolchain_setup", "attributes": { - "assets_json": "[{\"arch\":\"amd64\",\"name\":\"buildifier\",\"platform\":\"darwin\",\"sha256\":\"802b013211dbcf91e3c0658ba33ecb3932ef5a6f6764a0b13efcec4e2df04c83\",\"version\":\"v8.0.1\"},{\"arch\":\"arm64\",\"name\":\"buildifier\",\"platform\":\"darwin\",\"sha256\":\"833e2afc331b9ad8f6b038ad3d69ceeaf97651900bf2a3a45f54f42cafe0bfd3\",\"version\":\"v8.0.1\"},{\"arch\":\"amd64\",\"name\":\"buildifier\",\"platform\":\"linux\",\"sha256\":\"1976053ed4decd6dd93170885b4387eddc76ec70dc2697b2e91a9af83269418a\",\"version\":\"v8.0.1\"},{\"arch\":\"arm64\",\"name\":\"buildifier\",\"platform\":\"linux\",\"sha256\":\"93078c57763493bdc2914ed340544500b8f3497341a62e90f00e9e184c4d9c2c\",\"version\":\"v8.0.1\"},{\"arch\":\"amd64\",\"name\":\"buildifier\",\"platform\":\"windows\",\"sha256\":\"6edc9247e6d42d27fb67b9509bb795d159a12468faa89e9f290dcadc26571c31\",\"version\":\"v8.0.1\"},{\"arch\":\"amd64\",\"name\":\"buildozer\",\"platform\":\"darwin\",\"sha256\":\"799be47db682fb06bfc677438d0c910032dda783606b1eec77669f2c1a17c65a\",\"version\":\"v8.0.1\"},{\"arch\":\"arm64\",\"name\":\"buildozer\",\"platform\":\"darwin\",\"sha256\":\"118f2ff581c49e03aeb77e34fddebab10923b93e381185e43e0c1835ba189cd9\",\"version\":\"v8.0.1\"},{\"arch\":\"amd64\",\"name\":\"buildozer\",\"platform\":\"linux\",\"sha256\":\"4f5a91d4f7fb61ff4d39cdedb7dcf93bb17f3b7737b07175ad4456dc6bdafac1\",\"version\":\"v8.0.1\"},{\"arch\":\"arm64\",\"name\":\"buildozer\",\"platform\":\"linux\",\"sha256\":\"a7eec1ddcf5075ef3b869f1bf476fce174f0226a35f7e20734caa5a55b10ce26\",\"version\":\"v8.0.1\"},{\"arch\":\"amd64\",\"name\":\"buildozer\",\"platform\":\"windows\",\"sha256\":\"3b51ae3dd0221eb9d43614206f0886ea36d78e6bb4f8dea69f7bc4cc285d1f15\",\"version\":\"v8.0.1\"}]" + "assets_json": "[{\"arch\":\"amd64\",\"name\":\"buildifier\",\"platform\":\"darwin\",\"sha256\":\"b7a3152cde0b3971b1107f2274afe778c5c154dcdf6c9c669a231e3c004f047e\",\"version\":\"v8.0.3\"},{\"arch\":\"arm64\",\"name\":\"buildifier\",\"platform\":\"darwin\",\"sha256\":\"674c663f7b5cd03c002f8ca834a8c1c008ccb527a0a2a132d08a7a355883b22d\",\"version\":\"v8.0.3\"},{\"arch\":\"amd64\",\"name\":\"buildifier\",\"platform\":\"linux\",\"sha256\":\"c969487c1af85e708576c8dfdd0bb4681eae58aad79e68ae48882c70871841b7\",\"version\":\"v8.0.3\"},{\"arch\":\"arm64\",\"name\":\"buildifier\",\"platform\":\"linux\",\"sha256\":\"bdd9b92e2c65d46affeecaefb54e68d34c272d1f4a8c5b54929a3e92ab78820a\",\"version\":\"v8.0.3\"},{\"arch\":\"amd64\",\"name\":\"buildifier\",\"platform\":\"windows\",\"sha256\":\"63a242f57e253efe7b9573d739c08a3d0e628efd84015c8dad17d87b6429e443\",\"version\":\"v8.0.3\"},{\"arch\":\"amd64\",\"name\":\"buildozer\",\"platform\":\"darwin\",\"sha256\":\"7aa7929faddcee5a879135356bb4d38af3e895893c78d361e7cdb8dfb3e7d5e4\",\"version\":\"v8.0.3\"},{\"arch\":\"arm64\",\"name\":\"buildozer\",\"platform\":\"darwin\",\"sha256\":\"33b776862c31bfb4e2e6e88186cae02746d9084da8b7341930e77d42718277cc\",\"version\":\"v8.0.3\"},{\"arch\":\"amd64\",\"name\":\"buildozer\",\"platform\":\"linux\",\"sha256\":\"775d17118aecd023352e75611dbe7c12a340e23615ffb270a1dec3f339239949\",\"version\":\"v8.0.3\"},{\"arch\":\"arm64\",\"name\":\"buildozer\",\"platform\":\"linux\",\"sha256\":\"058ad60f279a7b1db339bb287aed2056a992eddfe1b5d2e56d86256bdc9a93b3\",\"version\":\"v8.0.3\"},{\"arch\":\"amd64\",\"name\":\"buildozer\",\"platform\":\"windows\",\"sha256\":\"5ba106b25230e0e321b7259bee325ae6fa5b5771e54163ad865b1d18856f59ca\",\"version\":\"v8.0.3\"}]" } } }, @@ -563,2771 +564,10 @@ ] } }, - "@@rules_python~//python/extensions:pip.bzl%pip": { - "general": { - "bzlTransitiveDigest": "t2sNZ+esCBM7KBCD9MlBA5Y3Yk5SQj8V+JMUGkiANSM=", - "usagesDigest": "lABgNFDx2B8eu1/8FW60KMkCqsChEDxlIL/ERa0nIFc=", - "recordedFileInputs": { - "@@rules_python~//tools/publish/requirements_linux.txt": "d576e0d8542df61396a9b38deeaa183c24135ed5e8e73bb9622f298f2671811e", - "@@rules_fuzzing~//fuzzing/requirements.txt": "ab04664be026b632a0d2a2446c4f65982b7654f5b6851d2f9d399a19b7242a5b", - "@@rules_python~//tools/publish/requirements_windows.txt": "d18538a3982beab378fd5687f4db33162ee1ece69801f9a451661b1b64286b76", - "@@protobuf~//python/requirements.txt": "983be60d3cec4b319dcab6d48aeb3f5b2f7c3350f26b3a9e97486c37967c73c5", - "@@rules_python~//tools/publish/requirements_darwin.txt": "095d4a4f3d639dce831cd493367631cd51b53665292ab20194bac2c0c6458fa8" - }, - "recordedDirentsInputs": {}, - "envVariables": { - "RULES_PYTHON_REPO_DEBUG": null, - "RULES_PYTHON_REPO_DEBUG_VERBOSITY": null - }, - "generatedRepoSpecs": { - "pip_deps_310_numpy": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@pip_deps//{name}:{target}", - "python_interpreter_target": "@@rules_python~~python~python_3_10_host//:python", - "repo": "pip_deps_310", - "requirement": "numpy<=1.26.1" - } - }, - "pip_deps_310_setuptools": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@pip_deps//{name}:{target}", - "python_interpreter_target": "@@rules_python~~python~python_3_10_host//:python", - "repo": "pip_deps_310", - "requirement": "setuptools<=70.3.0" - } - }, - "pip_deps_311_numpy": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@pip_deps//{name}:{target}", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "pip_deps_311", - "requirement": "numpy<=1.26.1" - } - }, - "pip_deps_311_setuptools": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@pip_deps//{name}:{target}", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "pip_deps_311", - "requirement": "setuptools<=70.3.0" - } - }, - "pip_deps_312_numpy": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@pip_deps//{name}:{target}", - "python_interpreter_target": "@@rules_python~~python~python_3_12_host//:python", - "repo": "pip_deps_312", - "requirement": "numpy<=1.26.1" - } - }, - "pip_deps_312_setuptools": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@pip_deps//{name}:{target}", - "python_interpreter_target": "@@rules_python~~python~python_3_12_host//:python", - "repo": "pip_deps_312", - "requirement": "setuptools<=70.3.0" - } - }, - "pip_deps_38_numpy": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@pip_deps//{name}:{target}", - "python_interpreter_target": "@@rules_python~~python~python_3_8_host//:python", - "repo": "pip_deps_38", - "requirement": "numpy<=1.26.1" - } - }, - "pip_deps_38_setuptools": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@pip_deps//{name}:{target}", - "python_interpreter_target": "@@rules_python~~python~python_3_8_host//:python", - "repo": "pip_deps_38", - "requirement": "setuptools<=70.3.0" - } - }, - "pip_deps_39_numpy": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@pip_deps//{name}:{target}", - "python_interpreter_target": "@@rules_python~~python~python_3_9_host//:python", - "repo": "pip_deps_39", - "requirement": "numpy<=1.26.1" - } - }, - "pip_deps_39_setuptools": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@pip_deps//{name}:{target}", - "python_interpreter_target": "@@rules_python~~python~python_3_9_host//:python", - "repo": "pip_deps_39", - "requirement": "setuptools<=70.3.0" - } - }, - "rules_fuzzing_py_deps_310_absl_py": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_fuzzing_py_deps//{name}:{target}", - "extra_pip_args": [ - "--require-hashes" - ], - "python_interpreter_target": "@@rules_python~~python~python_3_10_host//:python", - "repo": "rules_fuzzing_py_deps_310", - "requirement": "absl-py==2.0.0 --hash=sha256:9a28abb62774ae4e8edbe2dd4c49ffcd45a6a848952a5eccc6a49f3f0fc1e2f3" - } - }, - "rules_fuzzing_py_deps_310_six": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_fuzzing_py_deps//{name}:{target}", - "extra_pip_args": [ - "--require-hashes" - ], - "python_interpreter_target": "@@rules_python~~python~python_3_10_host//:python", - "repo": "rules_fuzzing_py_deps_310", - "requirement": "six==1.16.0 --hash=sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254" - } - }, - "rules_fuzzing_py_deps_311_absl_py": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_fuzzing_py_deps//{name}:{target}", - "extra_pip_args": [ - "--require-hashes" - ], - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_fuzzing_py_deps_311", - "requirement": "absl-py==2.0.0 --hash=sha256:9a28abb62774ae4e8edbe2dd4c49ffcd45a6a848952a5eccc6a49f3f0fc1e2f3" - } - }, - "rules_fuzzing_py_deps_311_six": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_fuzzing_py_deps//{name}:{target}", - "extra_pip_args": [ - "--require-hashes" - ], - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_fuzzing_py_deps_311", - "requirement": "six==1.16.0 --hash=sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254" - } - }, - "rules_fuzzing_py_deps_312_absl_py": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_fuzzing_py_deps//{name}:{target}", - "extra_pip_args": [ - "--require-hashes" - ], - "python_interpreter_target": "@@rules_python~~python~python_3_12_host//:python", - "repo": "rules_fuzzing_py_deps_312", - "requirement": "absl-py==2.0.0 --hash=sha256:9a28abb62774ae4e8edbe2dd4c49ffcd45a6a848952a5eccc6a49f3f0fc1e2f3" - } - }, - "rules_fuzzing_py_deps_312_six": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_fuzzing_py_deps//{name}:{target}", - "extra_pip_args": [ - "--require-hashes" - ], - "python_interpreter_target": "@@rules_python~~python~python_3_12_host//:python", - "repo": "rules_fuzzing_py_deps_312", - "requirement": "six==1.16.0 --hash=sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254" - } - }, - "rules_fuzzing_py_deps_38_absl_py": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_fuzzing_py_deps//{name}:{target}", - "extra_pip_args": [ - "--require-hashes" - ], - "python_interpreter_target": "@@rules_python~~python~python_3_8_host//:python", - "repo": "rules_fuzzing_py_deps_38", - "requirement": "absl-py==2.0.0 --hash=sha256:9a28abb62774ae4e8edbe2dd4c49ffcd45a6a848952a5eccc6a49f3f0fc1e2f3" - } - }, - "rules_fuzzing_py_deps_38_six": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_fuzzing_py_deps//{name}:{target}", - "extra_pip_args": [ - "--require-hashes" - ], - "python_interpreter_target": "@@rules_python~~python~python_3_8_host//:python", - "repo": "rules_fuzzing_py_deps_38", - "requirement": "six==1.16.0 --hash=sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254" - } - }, - "rules_fuzzing_py_deps_39_absl_py": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_fuzzing_py_deps//{name}:{target}", - "extra_pip_args": [ - "--require-hashes" - ], - "python_interpreter_target": "@@rules_python~~python~python_3_9_host//:python", - "repo": "rules_fuzzing_py_deps_39", - "requirement": "absl-py==2.0.0 --hash=sha256:9a28abb62774ae4e8edbe2dd4c49ffcd45a6a848952a5eccc6a49f3f0fc1e2f3" - } - }, - "rules_fuzzing_py_deps_39_six": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_fuzzing_py_deps//{name}:{target}", - "extra_pip_args": [ - "--require-hashes" - ], - "python_interpreter_target": "@@rules_python~~python~python_3_9_host//:python", - "repo": "rules_fuzzing_py_deps_39", - "requirement": "six==1.16.0 --hash=sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254" - } - }, - "rules_python_publish_deps_311_backports_tarfile_py3_none_any_77e284d7": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "backports.tarfile-1.2.0-py3-none-any.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "backports-tarfile==1.2.0", - "sha256": "77e284d754527b01fb1e6fa8a1afe577858ebe4e9dad8919e34c862cb399bc34", - "urls": [ - "https://files.pythonhosted.org/packages/b9/fa/123043af240e49752f1c4bd24da5053b6bd00cad78c2be53c0d1e8b975bc/backports.tarfile-1.2.0-py3-none-any.whl" - ] - } - }, - "rules_python_publish_deps_311_backports_tarfile_sdist_d75e02c2": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "extra_pip_args": [ - "--index-url", - "https://pypi.org/simple" - ], - "filename": "backports_tarfile-1.2.0.tar.gz", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "backports-tarfile==1.2.0", - "sha256": "d75e02c268746e1b8144c278978b6e98e85de6ad16f8e4b0844a154557eca991", - "urls": [ - "https://files.pythonhosted.org/packages/86/72/cd9b395f25e290e633655a100af28cb253e4393396264a98bd5f5951d50f/backports_tarfile-1.2.0.tar.gz" - ] - } - }, - "rules_python_publish_deps_311_certifi_py3_none_any_922820b5": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "certifi-2024.8.30-py3-none-any.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "certifi==2024.8.30", - "sha256": "922820b53db7a7257ffbda3f597266d435245903d80737e34f8a45ff3e3230d8", - "urls": [ - "https://files.pythonhosted.org/packages/12/90/3c9ff0512038035f59d279fddeb79f5f1eccd8859f06d6163c58798b9487/certifi-2024.8.30-py3-none-any.whl" - ] - } - }, - "rules_python_publish_deps_311_certifi_sdist_bec941d2": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "extra_pip_args": [ - "--index-url", - "https://pypi.org/simple" - ], - "filename": "certifi-2024.8.30.tar.gz", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "certifi==2024.8.30", - "sha256": "bec941d2aa8195e248a60b31ff9f0558284cf01a52591ceda73ea9afffd69fd9", - "urls": [ - "https://files.pythonhosted.org/packages/b0/ee/9b19140fe824b367c04c5e1b369942dd754c4c5462d5674002f75c4dedc1/certifi-2024.8.30.tar.gz" - ] - } - }, - "rules_python_publish_deps_311_cffi_cp311_cp311_manylinux_2_17_aarch64_a1ed2dd2": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64" - ], - "filename": "cffi-1.17.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "cffi==1.17.1", - "sha256": "a1ed2dd2972641495a3ec98445e09766f077aee98a1c896dcb4ad0d303628e41", - "urls": [ - "https://files.pythonhosted.org/packages/2e/ea/70ce63780f096e16ce8588efe039d3c4f91deb1dc01e9c73a287939c79a6/cffi-1.17.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" - ] - } - }, - "rules_python_publish_deps_311_cffi_cp311_cp311_manylinux_2_17_s390x_a24ed04c": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64" - ], - "filename": "cffi-1.17.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "cffi==1.17.1", - "sha256": "a24ed04c8ffd54b0729c07cee15a81d964e6fee0e3d4d342a27b020d22959dc6", - "urls": [ - "https://files.pythonhosted.org/packages/62/12/ce8710b5b8affbcdd5c6e367217c242524ad17a02fe5beec3ee339f69f85/cffi-1.17.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl" - ] - } - }, - "rules_python_publish_deps_311_cffi_cp311_cp311_manylinux_2_17_x86_64_610faea7": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64" - ], - "filename": "cffi-1.17.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "cffi==1.17.1", - "sha256": "610faea79c43e44c71e1ec53a554553fa22321b65fae24889706c0a84d4ad86d", - "urls": [ - "https://files.pythonhosted.org/packages/ff/6b/d45873c5e0242196f042d555526f92aa9e0c32355a1be1ff8c27f077fd37/cffi-1.17.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" - ] - } - }, - "rules_python_publish_deps_311_cffi_cp311_cp311_musllinux_1_1_aarch64_a9b15d49": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64" - ], - "filename": "cffi-1.17.1-cp311-cp311-musllinux_1_1_aarch64.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "cffi==1.17.1", - "sha256": "a9b15d491f3ad5d692e11f6b71f7857e7835eb677955c00cc0aefcd0669adaf6", - "urls": [ - "https://files.pythonhosted.org/packages/1a/52/d9a0e523a572fbccf2955f5abe883cfa8bcc570d7faeee06336fbd50c9fc/cffi-1.17.1-cp311-cp311-musllinux_1_1_aarch64.whl" - ] - } - }, - "rules_python_publish_deps_311_cffi_cp311_cp311_musllinux_1_1_x86_64_fc48c783": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64" - ], - "filename": "cffi-1.17.1-cp311-cp311-musllinux_1_1_x86_64.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "cffi==1.17.1", - "sha256": "fc48c783f9c87e60831201f2cce7f3b2e4846bf4d8728eabe54d60700b318a0b", - "urls": [ - "https://files.pythonhosted.org/packages/f8/4a/34599cac7dfcd888ff54e801afe06a19c17787dfd94495ab0c8d35fe99fb/cffi-1.17.1-cp311-cp311-musllinux_1_1_x86_64.whl" - ] - } - }, - "rules_python_publish_deps_311_cffi_sdist_1c39c601": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64" - ], - "extra_pip_args": [ - "--index-url", - "https://pypi.org/simple" - ], - "filename": "cffi-1.17.1.tar.gz", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "cffi==1.17.1", - "sha256": "1c39c6016c32bc48dd54561950ebd6836e1670f2ae46128f67cf49e789c52824", - "urls": [ - "https://files.pythonhosted.org/packages/fc/97/c783634659c2920c3fc70419e3af40972dbaf758daa229a7d6ea6135c90d/cffi-1.17.1.tar.gz" - ] - } - }, - "rules_python_publish_deps_311_charset_normalizer_cp311_cp311_macosx_10_9_universal2_0d99dd8f": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "charset_normalizer-3.4.0-cp311-cp311-macosx_10_9_universal2.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "charset-normalizer==3.4.0", - "sha256": "0d99dd8ff461990f12d6e42c7347fd9ab2532fb70e9621ba520f9e8637161d7c", - "urls": [ - "https://files.pythonhosted.org/packages/9c/61/73589dcc7a719582bf56aae309b6103d2762b526bffe189d635a7fcfd998/charset_normalizer-3.4.0-cp311-cp311-macosx_10_9_universal2.whl" - ] - } - }, - "rules_python_publish_deps_311_charset_normalizer_cp311_cp311_macosx_10_9_x86_64_c57516e5": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "charset_normalizer-3.4.0-cp311-cp311-macosx_10_9_x86_64.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "charset-normalizer==3.4.0", - "sha256": "c57516e58fd17d03ebe67e181a4e4e2ccab1168f8c2976c6a334d4f819fe5944", - "urls": [ - "https://files.pythonhosted.org/packages/77/d5/8c982d58144de49f59571f940e329ad6e8615e1e82ef84584c5eeb5e1d72/charset_normalizer-3.4.0-cp311-cp311-macosx_10_9_x86_64.whl" - ] - } - }, - "rules_python_publish_deps_311_charset_normalizer_cp311_cp311_macosx_11_0_arm64_6dba5d19": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "charset_normalizer-3.4.0-cp311-cp311-macosx_11_0_arm64.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "charset-normalizer==3.4.0", - "sha256": "6dba5d19c4dfab08e58d5b36304b3f92f3bd5d42c1a3fa37b5ba5cdf6dfcbcee", - "urls": [ - "https://files.pythonhosted.org/packages/bf/19/411a64f01ee971bed3231111b69eb56f9331a769072de479eae7de52296d/charset_normalizer-3.4.0-cp311-cp311-macosx_11_0_arm64.whl" - ] - } - }, - "rules_python_publish_deps_311_charset_normalizer_cp311_cp311_manylinux_2_17_aarch64_bf4475b8": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "charset-normalizer==3.4.0", - "sha256": "bf4475b82be41b07cc5e5ff94810e6a01f276e37c2d55571e3fe175e467a1a1c", - "urls": [ - "https://files.pythonhosted.org/packages/4c/92/97509850f0d00e9f14a46bc751daabd0ad7765cff29cdfb66c68b6dad57f/charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" - ] - } - }, - "rules_python_publish_deps_311_charset_normalizer_cp311_cp311_manylinux_2_17_s390x_8ff4e7cd": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "charset-normalizer==3.4.0", - "sha256": "8ff4e7cdfdb1ab5698e675ca622e72d58a6fa2a8aa58195de0c0061288e6e3ea", - "urls": [ - "https://files.pythonhosted.org/packages/13/bc/87c2c9f2c144bedfa62f894c3007cd4530ba4b5351acb10dc786428a50f0/charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl" - ] - } - }, - "rules_python_publish_deps_311_charset_normalizer_cp311_cp311_manylinux_2_17_x86_64_3710a975": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "charset-normalizer==3.4.0", - "sha256": "3710a9751938947e6327ea9f3ea6332a09bf0ba0c09cae9cb1f250bd1f1549bc", - "urls": [ - "https://files.pythonhosted.org/packages/eb/5b/6f10bad0f6461fa272bfbbdf5d0023b5fb9bc6217c92bf068fa5a99820f5/charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" - ] - } - }, - "rules_python_publish_deps_311_charset_normalizer_cp311_cp311_musllinux_1_2_aarch64_47334db7": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_aarch64.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "charset-normalizer==3.4.0", - "sha256": "47334db71978b23ebcf3c0f9f5ee98b8d65992b65c9c4f2d34c2eaf5bcaf0594", - "urls": [ - "https://files.pythonhosted.org/packages/d7/a1/493919799446464ed0299c8eef3c3fad0daf1c3cd48bff9263c731b0d9e2/charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_aarch64.whl" - ] - } - }, - "rules_python_publish_deps_311_charset_normalizer_cp311_cp311_musllinux_1_2_s390x_63bc5c4a": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_s390x.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "charset-normalizer==3.4.0", - "sha256": "63bc5c4ae26e4bc6be6469943b8253c0fd4e4186c43ad46e713ea61a0ba49129", - "urls": [ - "https://files.pythonhosted.org/packages/8d/c9/27e41d481557be53d51e60750b85aa40eaf52b841946b3cdeff363105737/charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_s390x.whl" - ] - } - }, - "rules_python_publish_deps_311_charset_normalizer_cp311_cp311_musllinux_1_2_x86_64_bcb4f8ea": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_x86_64.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "charset-normalizer==3.4.0", - "sha256": "bcb4f8ea87d03bc51ad04add8ceaf9b0f085ac045ab4d74e73bbc2dc033f0236", - "urls": [ - "https://files.pythonhosted.org/packages/ee/44/4f62042ca8cdc0cabf87c0fc00ae27cd8b53ab68be3605ba6d071f742ad3/charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_x86_64.whl" - ] - } - }, - "rules_python_publish_deps_311_charset_normalizer_cp311_cp311_win_amd64_cee4373f": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "charset_normalizer-3.4.0-cp311-cp311-win_amd64.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "charset-normalizer==3.4.0", - "sha256": "cee4373f4d3ad28f1ab6290684d8e2ebdb9e7a1b74fdc39e4c211995f77bec27", - "urls": [ - "https://files.pythonhosted.org/packages/0b/6e/b13bd47fa9023b3699e94abf565b5a2f0b0be6e9ddac9812182596ee62e4/charset_normalizer-3.4.0-cp311-cp311-win_amd64.whl" - ] - } - }, - "rules_python_publish_deps_311_charset_normalizer_py3_none_any_fe9f97fe": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "charset_normalizer-3.4.0-py3-none-any.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "charset-normalizer==3.4.0", - "sha256": "fe9f97feb71aa9896b81973a7bbada8c49501dc73e58a10fcef6663af95e5079", - "urls": [ - "https://files.pythonhosted.org/packages/bf/9b/08c0432272d77b04803958a4598a51e2a4b51c06640af8b8f0f908c18bf2/charset_normalizer-3.4.0-py3-none-any.whl" - ] - } - }, - "rules_python_publish_deps_311_charset_normalizer_sdist_223217c3": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "extra_pip_args": [ - "--index-url", - "https://pypi.org/simple" - ], - "filename": "charset_normalizer-3.4.0.tar.gz", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "charset-normalizer==3.4.0", - "sha256": "223217c3d4f82c3ac5e29032b3f1c2eb0fb591b72161f86d93f5719079dae93e", - "urls": [ - "https://files.pythonhosted.org/packages/f2/4f/e1808dc01273379acc506d18f1504eb2d299bd4131743b9fc54d7be4df1e/charset_normalizer-3.4.0.tar.gz" - ] - } - }, - "rules_python_publish_deps_311_cryptography_cp39_abi3_manylinux_2_17_aarch64_846da004": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64" - ], - "filename": "cryptography-43.0.3-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "cryptography==43.0.3", - "sha256": "846da004a5804145a5f441b8530b4bf35afbf7da70f82409f151695b127213d5", - "urls": [ - "https://files.pythonhosted.org/packages/2f/78/55356eb9075d0be6e81b59f45c7b48df87f76a20e73893872170471f3ee8/cryptography-43.0.3-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" - ] - } - }, - "rules_python_publish_deps_311_cryptography_cp39_abi3_manylinux_2_17_x86_64_0f996e72": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64" - ], - "filename": "cryptography-43.0.3-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "cryptography==43.0.3", - "sha256": "0f996e7268af62598f2fc1204afa98a3b5712313a55c4c9d434aef49cadc91d4", - "urls": [ - "https://files.pythonhosted.org/packages/2a/2c/488776a3dc843f95f86d2f957ca0fc3407d0242b50bede7fad1e339be03f/cryptography-43.0.3-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" - ] - } - }, - "rules_python_publish_deps_311_cryptography_cp39_abi3_manylinux_2_28_aarch64_f7b178f1": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64" - ], - "filename": "cryptography-43.0.3-cp39-abi3-manylinux_2_28_aarch64.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "cryptography==43.0.3", - "sha256": "f7b178f11ed3664fd0e995a47ed2b5ff0a12d893e41dd0494f406d1cf555cab7", - "urls": [ - "https://files.pythonhosted.org/packages/7c/04/2345ca92f7a22f601a9c62961741ef7dd0127c39f7310dffa0041c80f16f/cryptography-43.0.3-cp39-abi3-manylinux_2_28_aarch64.whl" - ] - } - }, - "rules_python_publish_deps_311_cryptography_cp39_abi3_manylinux_2_28_x86_64_c2e6fc39": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64" - ], - "filename": "cryptography-43.0.3-cp39-abi3-manylinux_2_28_x86_64.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "cryptography==43.0.3", - "sha256": "c2e6fc39c4ab499049df3bdf567f768a723a5e8464816e8f009f121a5a9f4405", - "urls": [ - "https://files.pythonhosted.org/packages/ac/25/e715fa0bc24ac2114ed69da33adf451a38abb6f3f24ec207908112e9ba53/cryptography-43.0.3-cp39-abi3-manylinux_2_28_x86_64.whl" - ] - } - }, - "rules_python_publish_deps_311_cryptography_cp39_abi3_musllinux_1_2_aarch64_e1be4655": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64" - ], - "filename": "cryptography-43.0.3-cp39-abi3-musllinux_1_2_aarch64.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "cryptography==43.0.3", - "sha256": "e1be4655c7ef6e1bbe6b5d0403526601323420bcf414598955968c9ef3eb7d16", - "urls": [ - "https://files.pythonhosted.org/packages/21/ce/b9c9ff56c7164d8e2edfb6c9305045fbc0df4508ccfdb13ee66eb8c95b0e/cryptography-43.0.3-cp39-abi3-musllinux_1_2_aarch64.whl" - ] - } - }, - "rules_python_publish_deps_311_cryptography_cp39_abi3_musllinux_1_2_x86_64_df6b6c6d": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64" - ], - "filename": "cryptography-43.0.3-cp39-abi3-musllinux_1_2_x86_64.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "cryptography==43.0.3", - "sha256": "df6b6c6d742395dd77a23ea3728ab62f98379eff8fb61be2744d4679ab678f73", - "urls": [ - "https://files.pythonhosted.org/packages/2a/33/b3682992ab2e9476b9c81fff22f02c8b0a1e6e1d49ee1750a67d85fd7ed2/cryptography-43.0.3-cp39-abi3-musllinux_1_2_x86_64.whl" - ] - } - }, - "rules_python_publish_deps_311_cryptography_sdist_315b9001": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64" - ], - "extra_pip_args": [ - "--index-url", - "https://pypi.org/simple" - ], - "filename": "cryptography-43.0.3.tar.gz", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "cryptography==43.0.3", - "sha256": "315b9001266a492a6ff443b61238f956b214dbec9910a081ba5b6646a055a805", - "urls": [ - "https://files.pythonhosted.org/packages/0d/05/07b55d1fa21ac18c3a8c79f764e2514e6f6a9698f1be44994f5adf0d29db/cryptography-43.0.3.tar.gz" - ] - } - }, - "rules_python_publish_deps_311_docutils_py3_none_any_dafca5b9": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "docutils-0.21.2-py3-none-any.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "docutils==0.21.2", - "sha256": "dafca5b9e384f0e419294eb4d2ff9fa826435bf15f15b7bd45723e8ad76811b2", - "urls": [ - "https://files.pythonhosted.org/packages/8f/d7/9322c609343d929e75e7e5e6255e614fcc67572cfd083959cdef3b7aad79/docutils-0.21.2-py3-none-any.whl" - ] - } - }, - "rules_python_publish_deps_311_docutils_sdist_3a6b1873": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "extra_pip_args": [ - "--index-url", - "https://pypi.org/simple" - ], - "filename": "docutils-0.21.2.tar.gz", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "docutils==0.21.2", - "sha256": "3a6b18732edf182daa3cd12775bbb338cf5691468f91eeeb109deff6ebfa986f", - "urls": [ - "https://files.pythonhosted.org/packages/ae/ed/aefcc8cd0ba62a0560c3c18c33925362d46c6075480bfa4df87b28e169a9/docutils-0.21.2.tar.gz" - ] - } - }, - "rules_python_publish_deps_311_idna_py3_none_any_946d195a": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "idna-3.10-py3-none-any.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "idna==3.10", - "sha256": "946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3", - "urls": [ - "https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl" - ] - } - }, - "rules_python_publish_deps_311_idna_sdist_12f65c9b": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "extra_pip_args": [ - "--index-url", - "https://pypi.org/simple" - ], - "filename": "idna-3.10.tar.gz", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "idna==3.10", - "sha256": "12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9", - "urls": [ - "https://files.pythonhosted.org/packages/f1/70/7703c29685631f5a7590aa73f1f1d3fa9a380e654b86af429e0934a32f7d/idna-3.10.tar.gz" - ] - } - }, - "rules_python_publish_deps_311_importlib_metadata_py3_none_any_45e54197": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "importlib_metadata-8.5.0-py3-none-any.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "importlib-metadata==8.5.0", - "sha256": "45e54197d28b7a7f1559e60b95e7c567032b602131fbd588f1497f47880aa68b", - "urls": [ - "https://files.pythonhosted.org/packages/a0/d9/a1e041c5e7caa9a05c925f4bdbdfb7f006d1f74996af53467bc394c97be7/importlib_metadata-8.5.0-py3-none-any.whl" - ] - } - }, - "rules_python_publish_deps_311_importlib_metadata_sdist_71522656": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "extra_pip_args": [ - "--index-url", - "https://pypi.org/simple" - ], - "filename": "importlib_metadata-8.5.0.tar.gz", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "importlib-metadata==8.5.0", - "sha256": "71522656f0abace1d072b9e5481a48f07c138e00f079c38c8f883823f9c26bd7", - "urls": [ - "https://files.pythonhosted.org/packages/cd/12/33e59336dca5be0c398a7482335911a33aa0e20776128f038019f1a95f1b/importlib_metadata-8.5.0.tar.gz" - ] - } - }, - "rules_python_publish_deps_311_jaraco_classes_py3_none_any_f662826b": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "jaraco.classes-3.4.0-py3-none-any.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "jaraco-classes==3.4.0", - "sha256": "f662826b6bed8cace05e7ff873ce0f9283b5c924470fe664fff1c2f00f581790", - "urls": [ - "https://files.pythonhosted.org/packages/7f/66/b15ce62552d84bbfcec9a4873ab79d993a1dd4edb922cbfccae192bd5b5f/jaraco.classes-3.4.0-py3-none-any.whl" - ] - } - }, - "rules_python_publish_deps_311_jaraco_classes_sdist_47a024b5": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "extra_pip_args": [ - "--index-url", - "https://pypi.org/simple" - ], - "filename": "jaraco.classes-3.4.0.tar.gz", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "jaraco-classes==3.4.0", - "sha256": "47a024b51d0239c0dd8c8540c6c7f484be3b8fcf0b2d85c13825780d3b3f3acd", - "urls": [ - "https://files.pythonhosted.org/packages/06/c0/ed4a27bc5571b99e3cff68f8a9fa5b56ff7df1c2251cc715a652ddd26402/jaraco.classes-3.4.0.tar.gz" - ] - } - }, - "rules_python_publish_deps_311_jaraco_context_py3_none_any_f797fc48": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "jaraco.context-6.0.1-py3-none-any.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "jaraco-context==6.0.1", - "sha256": "f797fc481b490edb305122c9181830a3a5b76d84ef6d1aef2fb9b47ab956f9e4", - "urls": [ - "https://files.pythonhosted.org/packages/ff/db/0c52c4cf5e4bd9f5d7135ec7669a3a767af21b3a308e1ed3674881e52b62/jaraco.context-6.0.1-py3-none-any.whl" - ] - } - }, - "rules_python_publish_deps_311_jaraco_context_sdist_9bae4ea5": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "extra_pip_args": [ - "--index-url", - "https://pypi.org/simple" - ], - "filename": "jaraco_context-6.0.1.tar.gz", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "jaraco-context==6.0.1", - "sha256": "9bae4ea555cf0b14938dc0aee7c9f32ed303aa20a3b73e7dc80111628792d1b3", - "urls": [ - "https://files.pythonhosted.org/packages/df/ad/f3777b81bf0b6e7bc7514a1656d3e637b2e8e15fab2ce3235730b3e7a4e6/jaraco_context-6.0.1.tar.gz" - ] - } - }, - "rules_python_publish_deps_311_jaraco_functools_py3_none_any_ad159f13": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "jaraco.functools-4.1.0-py3-none-any.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "jaraco-functools==4.1.0", - "sha256": "ad159f13428bc4acbf5541ad6dec511f91573b90fba04df61dafa2a1231cf649", - "urls": [ - "https://files.pythonhosted.org/packages/9f/4f/24b319316142c44283d7540e76c7b5a6dbd5db623abd86bb7b3491c21018/jaraco.functools-4.1.0-py3-none-any.whl" - ] - } - }, - "rules_python_publish_deps_311_jaraco_functools_sdist_70f7e0e2": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "extra_pip_args": [ - "--index-url", - "https://pypi.org/simple" - ], - "filename": "jaraco_functools-4.1.0.tar.gz", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "jaraco-functools==4.1.0", - "sha256": "70f7e0e2ae076498e212562325e805204fc092d7b4c17e0e86c959e249701a9d", - "urls": [ - "https://files.pythonhosted.org/packages/ab/23/9894b3df5d0a6eb44611c36aec777823fc2e07740dabbd0b810e19594013/jaraco_functools-4.1.0.tar.gz" - ] - } - }, - "rules_python_publish_deps_311_jeepney_py3_none_any_c0a454ad": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64" - ], - "filename": "jeepney-0.8.0-py3-none-any.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "jeepney==0.8.0", - "sha256": "c0a454ad016ca575060802ee4d590dd912e35c122fa04e70306de3d076cce755", - "urls": [ - "https://files.pythonhosted.org/packages/ae/72/2a1e2290f1ab1e06f71f3d0f1646c9e4634e70e1d37491535e19266e8dc9/jeepney-0.8.0-py3-none-any.whl" - ] - } - }, - "rules_python_publish_deps_311_jeepney_sdist_5efe48d2": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64" - ], - "extra_pip_args": [ - "--index-url", - "https://pypi.org/simple" - ], - "filename": "jeepney-0.8.0.tar.gz", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "jeepney==0.8.0", - "sha256": "5efe48d255973902f6badc3ce55e2aa6c5c3b3bc642059ef3a91247bcfcc5806", - "urls": [ - "https://files.pythonhosted.org/packages/d6/f4/154cf374c2daf2020e05c3c6a03c91348d59b23c5366e968feb198306fdf/jeepney-0.8.0.tar.gz" - ] - } - }, - "rules_python_publish_deps_311_keyring_py3_none_any_5426f817": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "keyring-25.4.1-py3-none-any.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "keyring==25.4.1", - "sha256": "5426f817cf7f6f007ba5ec722b1bcad95a75b27d780343772ad76b17cb47b0bf", - "urls": [ - "https://files.pythonhosted.org/packages/83/25/e6d59e5f0a0508d0dca8bb98c7f7fd3772fc943ac3f53d5ab18a218d32c0/keyring-25.4.1-py3-none-any.whl" - ] - } - }, - "rules_python_publish_deps_311_keyring_sdist_b07ebc55": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "extra_pip_args": [ - "--index-url", - "https://pypi.org/simple" - ], - "filename": "keyring-25.4.1.tar.gz", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "keyring==25.4.1", - "sha256": "b07ebc55f3e8ed86ac81dd31ef14e81ace9dd9c3d4b5d77a6e9a2016d0d71a1b", - "urls": [ - "https://files.pythonhosted.org/packages/a5/1c/2bdbcfd5d59dc6274ffb175bc29aa07ecbfab196830e0cfbde7bd861a2ea/keyring-25.4.1.tar.gz" - ] - } - }, - "rules_python_publish_deps_311_markdown_it_py_py3_none_any_35521684": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "markdown_it_py-3.0.0-py3-none-any.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "markdown-it-py==3.0.0", - "sha256": "355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1", - "urls": [ - "https://files.pythonhosted.org/packages/42/d7/1ec15b46af6af88f19b8e5ffea08fa375d433c998b8a7639e76935c14f1f/markdown_it_py-3.0.0-py3-none-any.whl" - ] - } - }, - "rules_python_publish_deps_311_markdown_it_py_sdist_e3f60a94": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "extra_pip_args": [ - "--index-url", - "https://pypi.org/simple" - ], - "filename": "markdown-it-py-3.0.0.tar.gz", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "markdown-it-py==3.0.0", - "sha256": "e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb", - "urls": [ - "https://files.pythonhosted.org/packages/38/71/3b932df36c1a044d397a1f92d1cf91ee0a503d91e470cbd670aa66b07ed0/markdown-it-py-3.0.0.tar.gz" - ] - } - }, - "rules_python_publish_deps_311_mdurl_py3_none_any_84008a41": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "mdurl-0.1.2-py3-none-any.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "mdurl==0.1.2", - "sha256": "84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8", - "urls": [ - "https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl" - ] - } - }, - "rules_python_publish_deps_311_mdurl_sdist_bb413d29": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "extra_pip_args": [ - "--index-url", - "https://pypi.org/simple" - ], - "filename": "mdurl-0.1.2.tar.gz", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "mdurl==0.1.2", - "sha256": "bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba", - "urls": [ - "https://files.pythonhosted.org/packages/d6/54/cfe61301667036ec958cb99bd3efefba235e65cdeb9c84d24a8293ba1d90/mdurl-0.1.2.tar.gz" - ] - } - }, - "rules_python_publish_deps_311_more_itertools_py3_none_any_037b0d32": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "more_itertools-10.5.0-py3-none-any.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "more-itertools==10.5.0", - "sha256": "037b0d3203ce90cca8ab1defbbdac29d5f993fc20131f3664dc8d6acfa872aef", - "urls": [ - "https://files.pythonhosted.org/packages/48/7e/3a64597054a70f7c86eb0a7d4fc315b8c1ab932f64883a297bdffeb5f967/more_itertools-10.5.0-py3-none-any.whl" - ] - } - }, - "rules_python_publish_deps_311_more_itertools_sdist_5482bfef": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "extra_pip_args": [ - "--index-url", - "https://pypi.org/simple" - ], - "filename": "more-itertools-10.5.0.tar.gz", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "more-itertools==10.5.0", - "sha256": "5482bfef7849c25dc3c6dd53a6173ae4795da2a41a80faea6700d9f5846c5da6", - "urls": [ - "https://files.pythonhosted.org/packages/51/78/65922308c4248e0eb08ebcbe67c95d48615cc6f27854b6f2e57143e9178f/more-itertools-10.5.0.tar.gz" - ] - } - }, - "rules_python_publish_deps_311_nh3_cp37_abi3_macosx_10_12_x86_64_14c5a72e": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "nh3-0.2.18-cp37-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "nh3==0.2.18", - "sha256": "14c5a72e9fe82aea5fe3072116ad4661af5cf8e8ff8fc5ad3450f123e4925e86", - "urls": [ - "https://files.pythonhosted.org/packages/b3/89/1daff5d9ba5a95a157c092c7c5f39b8dd2b1ddb4559966f808d31cfb67e0/nh3-0.2.18-cp37-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl" - ] - } - }, - "rules_python_publish_deps_311_nh3_cp37_abi3_macosx_10_12_x86_64_7b7c2a3c": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "nh3-0.2.18-cp37-abi3-macosx_10_12_x86_64.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "nh3==0.2.18", - "sha256": "7b7c2a3c9eb1a827d42539aa64091640bd275b81e097cd1d8d82ef91ffa2e811", - "urls": [ - "https://files.pythonhosted.org/packages/2c/b6/42fc3c69cabf86b6b81e4c051a9b6e249c5ba9f8155590222c2622961f58/nh3-0.2.18-cp37-abi3-macosx_10_12_x86_64.whl" - ] - } - }, - "rules_python_publish_deps_311_nh3_cp37_abi3_manylinux_2_17_aarch64_42c64511": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "nh3-0.2.18-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "nh3==0.2.18", - "sha256": "42c64511469005058cd17cc1537578eac40ae9f7200bedcfd1fc1a05f4f8c200", - "urls": [ - "https://files.pythonhosted.org/packages/45/b9/833f385403abaf0023c6547389ec7a7acf141ddd9d1f21573723a6eab39a/nh3-0.2.18-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl" - ] - } - }, - "rules_python_publish_deps_311_nh3_cp37_abi3_manylinux_2_17_armv7l_0411beb0": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "nh3-0.2.18-cp37-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "nh3==0.2.18", - "sha256": "0411beb0589eacb6734f28d5497ca2ed379eafab8ad8c84b31bb5c34072b7164", - "urls": [ - "https://files.pythonhosted.org/packages/05/2b/85977d9e11713b5747595ee61f381bc820749daf83f07b90b6c9964cf932/nh3-0.2.18-cp37-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl" - ] - } - }, - "rules_python_publish_deps_311_nh3_cp37_abi3_manylinux_2_17_ppc64_5f36b271": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "nh3-0.2.18-cp37-abi3-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "nh3==0.2.18", - "sha256": "5f36b271dae35c465ef5e9090e1fdaba4a60a56f0bb0ba03e0932a66f28b9189", - "urls": [ - "https://files.pythonhosted.org/packages/72/f2/5c894d5265ab80a97c68ca36f25c8f6f0308abac649aaf152b74e7e854a8/nh3-0.2.18-cp37-abi3-manylinux_2_17_ppc64.manylinux2014_ppc64.whl" - ] - } - }, - "rules_python_publish_deps_311_nh3_cp37_abi3_manylinux_2_17_s390x_19aaba96": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "nh3-0.2.18-cp37-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "nh3==0.2.18", - "sha256": "19aaba96e0f795bd0a6c56291495ff59364f4300d4a39b29a0abc9cb3774a84b", - "urls": [ - "https://files.pythonhosted.org/packages/c2/a8/3bb02d0c60a03ad3a112b76c46971e9480efa98a8946677b5a59f60130ca/nh3-0.2.18-cp37-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl" - ] - } - }, - "rules_python_publish_deps_311_nh3_cp37_abi3_manylinux_2_17_x86_64_de3ceed6": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "nh3-0.2.18-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "nh3==0.2.18", - "sha256": "de3ceed6e661954871d6cd78b410213bdcb136f79aafe22aa7182e028b8c7307", - "urls": [ - "https://files.pythonhosted.org/packages/1b/63/6ab90d0e5225ab9780f6c9fb52254fa36b52bb7c188df9201d05b647e5e1/nh3-0.2.18-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl" - ] - } - }, - "rules_python_publish_deps_311_nh3_cp37_abi3_musllinux_1_2_aarch64_f0eca9ca": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "nh3-0.2.18-cp37-abi3-musllinux_1_2_aarch64.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "nh3==0.2.18", - "sha256": "f0eca9ca8628dbb4e916ae2491d72957fdd35f7a5d326b7032a345f111ac07fe", - "urls": [ - "https://files.pythonhosted.org/packages/a3/da/0c4e282bc3cff4a0adf37005fa1fb42257673fbc1bbf7d1ff639ec3d255a/nh3-0.2.18-cp37-abi3-musllinux_1_2_aarch64.whl" - ] - } - }, - "rules_python_publish_deps_311_nh3_cp37_abi3_musllinux_1_2_armv7l_3a157ab1": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "nh3-0.2.18-cp37-abi3-musllinux_1_2_armv7l.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "nh3==0.2.18", - "sha256": "3a157ab149e591bb638a55c8c6bcb8cdb559c8b12c13a8affaba6cedfe51713a", - "urls": [ - "https://files.pythonhosted.org/packages/de/81/c291231463d21da5f8bba82c8167a6d6893cc5419b0639801ee5d3aeb8a9/nh3-0.2.18-cp37-abi3-musllinux_1_2_armv7l.whl" - ] - } - }, - "rules_python_publish_deps_311_nh3_cp37_abi3_musllinux_1_2_x86_64_36c95d4b": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "nh3-0.2.18-cp37-abi3-musllinux_1_2_x86_64.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "nh3==0.2.18", - "sha256": "36c95d4b70530b320b365659bb5034341316e6a9b30f0b25fa9c9eff4c27a204", - "urls": [ - "https://files.pythonhosted.org/packages/eb/61/73a007c74c37895fdf66e0edcd881f5eaa17a348ff02f4bb4bc906d61085/nh3-0.2.18-cp37-abi3-musllinux_1_2_x86_64.whl" - ] - } - }, - "rules_python_publish_deps_311_nh3_cp37_abi3_win_amd64_8ce0f819": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "nh3-0.2.18-cp37-abi3-win_amd64.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "nh3==0.2.18", - "sha256": "8ce0f819d2f1933953fca255db2471ad58184a60508f03e6285e5114b6254844", - "urls": [ - "https://files.pythonhosted.org/packages/26/8d/53c5b19c4999bdc6ba95f246f4ef35ca83d7d7423e5e38be43ad66544e5d/nh3-0.2.18-cp37-abi3-win_amd64.whl" - ] - } - }, - "rules_python_publish_deps_311_nh3_sdist_94a16692": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "extra_pip_args": [ - "--index-url", - "https://pypi.org/simple" - ], - "filename": "nh3-0.2.18.tar.gz", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "nh3==0.2.18", - "sha256": "94a166927e53972a9698af9542ace4e38b9de50c34352b962f4d9a7d4c927af4", - "urls": [ - "https://files.pythonhosted.org/packages/62/73/10df50b42ddb547a907deeb2f3c9823022580a7a47281e8eae8e003a9639/nh3-0.2.18.tar.gz" - ] - } - }, - "rules_python_publish_deps_311_pkginfo_py3_none_any_889a6da2": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "pkginfo-1.10.0-py3-none-any.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "pkginfo==1.10.0", - "sha256": "889a6da2ed7ffc58ab5b900d888ddce90bce912f2d2de1dc1c26f4cb9fe65097", - "urls": [ - "https://files.pythonhosted.org/packages/56/09/054aea9b7534a15ad38a363a2bd974c20646ab1582a387a95b8df1bfea1c/pkginfo-1.10.0-py3-none-any.whl" - ] - } - }, - "rules_python_publish_deps_311_pkginfo_sdist_5df73835": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "extra_pip_args": [ - "--index-url", - "https://pypi.org/simple" - ], - "filename": "pkginfo-1.10.0.tar.gz", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "pkginfo==1.10.0", - "sha256": "5df73835398d10db79f8eecd5cd86b1f6d29317589ea70796994d49399af6297", - "urls": [ - "https://files.pythonhosted.org/packages/2f/72/347ec5be4adc85c182ed2823d8d1c7b51e13b9a6b0c1aae59582eca652df/pkginfo-1.10.0.tar.gz" - ] - } - }, - "rules_python_publish_deps_311_pycparser_py3_none_any_c3702b6d": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64" - ], - "filename": "pycparser-2.22-py3-none-any.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "pycparser==2.22", - "sha256": "c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc", - "urls": [ - "https://files.pythonhosted.org/packages/13/a3/a812df4e2dd5696d1f351d58b8fe16a405b234ad2886a0dab9183fb78109/pycparser-2.22-py3-none-any.whl" - ] - } - }, - "rules_python_publish_deps_311_pycparser_sdist_491c8be9": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64" - ], - "extra_pip_args": [ - "--index-url", - "https://pypi.org/simple" - ], - "filename": "pycparser-2.22.tar.gz", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "pycparser==2.22", - "sha256": "491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6", - "urls": [ - "https://files.pythonhosted.org/packages/1d/b2/31537cf4b1ca988837256c910a668b553fceb8f069bedc4b1c826024b52c/pycparser-2.22.tar.gz" - ] - } - }, - "rules_python_publish_deps_311_pygments_py3_none_any_b8e6aca0": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "pygments-2.18.0-py3-none-any.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "pygments==2.18.0", - "sha256": "b8e6aca0523f3ab76fee51799c488e38782ac06eafcf95e7ba832985c8e7b13a", - "urls": [ - "https://files.pythonhosted.org/packages/f7/3f/01c8b82017c199075f8f788d0d906b9ffbbc5a47dc9918a945e13d5a2bda/pygments-2.18.0-py3-none-any.whl" - ] - } - }, - "rules_python_publish_deps_311_pygments_sdist_786ff802": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "extra_pip_args": [ - "--index-url", - "https://pypi.org/simple" - ], - "filename": "pygments-2.18.0.tar.gz", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "pygments==2.18.0", - "sha256": "786ff802f32e91311bff3889f6e9a86e81505fe99f2735bb6d60ae0c5004f199", - "urls": [ - "https://files.pythonhosted.org/packages/8e/62/8336eff65bcbc8e4cb5d05b55faf041285951b6e80f33e2bff2024788f31/pygments-2.18.0.tar.gz" - ] - } - }, - "rules_python_publish_deps_311_pywin32_ctypes_py3_none_any_8a151337": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_windows_x86_64" - ], - "filename": "pywin32_ctypes-0.2.3-py3-none-any.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "pywin32-ctypes==0.2.3", - "sha256": "8a1513379d709975552d202d942d9837758905c8d01eb82b8bcc30918929e7b8", - "urls": [ - "https://files.pythonhosted.org/packages/de/3d/8161f7711c017e01ac9f008dfddd9410dff3674334c233bde66e7ba65bbf/pywin32_ctypes-0.2.3-py3-none-any.whl" - ] - } - }, - "rules_python_publish_deps_311_pywin32_ctypes_sdist_d162dc04": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_windows_x86_64" - ], - "extra_pip_args": [ - "--index-url", - "https://pypi.org/simple" - ], - "filename": "pywin32-ctypes-0.2.3.tar.gz", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "pywin32-ctypes==0.2.3", - "sha256": "d162dc04946d704503b2edc4d55f3dba5c1d539ead017afa00142c38b9885755", - "urls": [ - "https://files.pythonhosted.org/packages/85/9f/01a1a99704853cb63f253eea009390c88e7131c67e66a0a02099a8c917cb/pywin32-ctypes-0.2.3.tar.gz" - ] - } - }, - "rules_python_publish_deps_311_readme_renderer_py3_none_any_2fbca89b": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "readme_renderer-44.0-py3-none-any.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "readme-renderer==44.0", - "sha256": "2fbca89b81a08526aadf1357a8c2ae889ec05fb03f5da67f9769c9a592166151", - "urls": [ - "https://files.pythonhosted.org/packages/e1/67/921ec3024056483db83953ae8e48079ad62b92db7880013ca77632921dd0/readme_renderer-44.0-py3-none-any.whl" - ] - } - }, - "rules_python_publish_deps_311_readme_renderer_sdist_8712034e": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "extra_pip_args": [ - "--index-url", - "https://pypi.org/simple" - ], - "filename": "readme_renderer-44.0.tar.gz", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "readme-renderer==44.0", - "sha256": "8712034eabbfa6805cacf1402b4eeb2a73028f72d1166d6f5cb7f9c047c5d1e1", - "urls": [ - "https://files.pythonhosted.org/packages/5a/a9/104ec9234c8448c4379768221ea6df01260cd6c2ce13182d4eac531c8342/readme_renderer-44.0.tar.gz" - ] - } - }, - "rules_python_publish_deps_311_requests_py3_none_any_70761cfe": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "requests-2.32.3-py3-none-any.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "requests==2.32.3", - "sha256": "70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6", - "urls": [ - "https://files.pythonhosted.org/packages/f9/9b/335f9764261e915ed497fcdeb11df5dfd6f7bf257d4a6a2a686d80da4d54/requests-2.32.3-py3-none-any.whl" - ] - } - }, - "rules_python_publish_deps_311_requests_sdist_55365417": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "extra_pip_args": [ - "--index-url", - "https://pypi.org/simple" - ], - "filename": "requests-2.32.3.tar.gz", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "requests==2.32.3", - "sha256": "55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760", - "urls": [ - "https://files.pythonhosted.org/packages/63/70/2bf7780ad2d390a8d301ad0b550f1581eadbd9a20f896afe06353c2a2913/requests-2.32.3.tar.gz" - ] - } - }, - "rules_python_publish_deps_311_requests_toolbelt_py2_none_any_cccfdd66": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "requests_toolbelt-1.0.0-py2.py3-none-any.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "requests-toolbelt==1.0.0", - "sha256": "cccfdd665f0a24fcf4726e690f65639d272bb0637b9b92dfd91a5568ccf6bd06", - "urls": [ - "https://files.pythonhosted.org/packages/3f/51/d4db610ef29373b879047326cbf6fa98b6c1969d6f6dc423279de2b1be2c/requests_toolbelt-1.0.0-py2.py3-none-any.whl" - ] - } - }, - "rules_python_publish_deps_311_requests_toolbelt_sdist_7681a0a3": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "extra_pip_args": [ - "--index-url", - "https://pypi.org/simple" - ], - "filename": "requests-toolbelt-1.0.0.tar.gz", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "requests-toolbelt==1.0.0", - "sha256": "7681a0a3d047012b5bdc0ee37d7f8f07ebe76ab08caeccfc3921ce23c88d5bc6", - "urls": [ - "https://files.pythonhosted.org/packages/f3/61/d7545dafb7ac2230c70d38d31cbfe4cc64f7144dc41f6e4e4b78ecd9f5bb/requests-toolbelt-1.0.0.tar.gz" - ] - } - }, - "rules_python_publish_deps_311_rfc3986_py2_none_any_50b1502b": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "rfc3986-2.0.0-py2.py3-none-any.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "rfc3986==2.0.0", - "sha256": "50b1502b60e289cb37883f3dfd34532b8873c7de9f49bb546641ce9cbd256ebd", - "urls": [ - "https://files.pythonhosted.org/packages/ff/9a/9afaade874b2fa6c752c36f1548f718b5b83af81ed9b76628329dab81c1b/rfc3986-2.0.0-py2.py3-none-any.whl" - ] - } - }, - "rules_python_publish_deps_311_rfc3986_sdist_97aacf9d": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "extra_pip_args": [ - "--index-url", - "https://pypi.org/simple" - ], - "filename": "rfc3986-2.0.0.tar.gz", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "rfc3986==2.0.0", - "sha256": "97aacf9dbd4bfd829baad6e6309fa6573aaf1be3f6fa735c8ab05e46cecb261c", - "urls": [ - "https://files.pythonhosted.org/packages/85/40/1520d68bfa07ab5a6f065a186815fb6610c86fe957bc065754e47f7b0840/rfc3986-2.0.0.tar.gz" - ] - } - }, - "rules_python_publish_deps_311_rich_py3_none_any_6049d5e6": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "rich-13.9.4-py3-none-any.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "rich==13.9.4", - "sha256": "6049d5e6ec054bf2779ab3358186963bac2ea89175919d699e378b99738c2a90", - "urls": [ - "https://files.pythonhosted.org/packages/19/71/39c7c0d87f8d4e6c020a393182060eaefeeae6c01dab6a84ec346f2567df/rich-13.9.4-py3-none-any.whl" - ] - } - }, - "rules_python_publish_deps_311_rich_sdist_43959497": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "extra_pip_args": [ - "--index-url", - "https://pypi.org/simple" - ], - "filename": "rich-13.9.4.tar.gz", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "rich==13.9.4", - "sha256": "439594978a49a09530cff7ebc4b5c7103ef57baf48d5ea3184f21d9a2befa098", - "urls": [ - "https://files.pythonhosted.org/packages/ab/3a/0316b28d0761c6734d6bc14e770d85506c986c85ffb239e688eeaab2c2bc/rich-13.9.4.tar.gz" - ] - } - }, - "rules_python_publish_deps_311_secretstorage_py3_none_any_f356e662": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64" - ], - "filename": "SecretStorage-3.3.3-py3-none-any.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "secretstorage==3.3.3", - "sha256": "f356e6628222568e3af06f2eba8df495efa13b3b63081dafd4f7d9a7b7bc9f99", - "urls": [ - "https://files.pythonhosted.org/packages/54/24/b4293291fa1dd830f353d2cb163295742fa87f179fcc8a20a306a81978b7/SecretStorage-3.3.3-py3-none-any.whl" - ] - } - }, - "rules_python_publish_deps_311_secretstorage_sdist_2403533e": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64" - ], - "extra_pip_args": [ - "--index-url", - "https://pypi.org/simple" - ], - "filename": "SecretStorage-3.3.3.tar.gz", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "secretstorage==3.3.3", - "sha256": "2403533ef369eca6d2ba81718576c5e0f564d5cca1b58f73a8b23e7d4eeebd77", - "urls": [ - "https://files.pythonhosted.org/packages/53/a4/f48c9d79cb507ed1373477dbceaba7401fd8a23af63b837fa61f1dcd3691/SecretStorage-3.3.3.tar.gz" - ] - } - }, - "rules_python_publish_deps_311_twine_py3_none_any_215dbe7b": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "twine-5.1.1-py3-none-any.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "twine==5.1.1", - "sha256": "215dbe7b4b94c2c50a7315c0275d2258399280fbb7d04182c7e55e24b5f93997", - "urls": [ - "https://files.pythonhosted.org/packages/5d/ec/00f9d5fd040ae29867355e559a94e9a8429225a0284a3f5f091a3878bfc0/twine-5.1.1-py3-none-any.whl" - ] - } - }, - "rules_python_publish_deps_311_twine_sdist_9aa08251": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "extra_pip_args": [ - "--index-url", - "https://pypi.org/simple" - ], - "filename": "twine-5.1.1.tar.gz", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "twine==5.1.1", - "sha256": "9aa0825139c02b3434d913545c7b847a21c835e11597f5255842d457da2322db", - "urls": [ - "https://files.pythonhosted.org/packages/77/68/bd982e5e949ef8334e6f7dcf76ae40922a8750aa2e347291ae1477a4782b/twine-5.1.1.tar.gz" - ] - } - }, - "rules_python_publish_deps_311_urllib3_py3_none_any_ca899ca0": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "urllib3-2.2.3-py3-none-any.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "urllib3==2.2.3", - "sha256": "ca899ca043dcb1bafa3e262d73aa25c465bfb49e0bd9dd5d59f1d0acba2f8fac", - "urls": [ - "https://files.pythonhosted.org/packages/ce/d9/5f4c13cecde62396b0d3fe530a50ccea91e7dfc1ccf0e09c228841bb5ba8/urllib3-2.2.3-py3-none-any.whl" - ] - } - }, - "rules_python_publish_deps_311_urllib3_sdist_e7d814a8": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "extra_pip_args": [ - "--index-url", - "https://pypi.org/simple" - ], - "filename": "urllib3-2.2.3.tar.gz", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "urllib3==2.2.3", - "sha256": "e7d814a81dad81e6caf2ec9fdedb284ecc9c73076b62654547cc64ccdcae26e9", - "urls": [ - "https://files.pythonhosted.org/packages/ed/63/22ba4ebfe7430b76388e7cd448d5478814d3032121827c12a2cc287e2260/urllib3-2.2.3.tar.gz" - ] - } - }, - "rules_python_publish_deps_311_zipp_py3_none_any_a817ac80": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "filename": "zipp-3.20.2-py3-none-any.whl", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "zipp==3.20.2", - "sha256": "a817ac80d6cf4b23bf7f2828b7cabf326f15a001bea8b1f9b49631780ba28350", - "urls": [ - "https://files.pythonhosted.org/packages/62/8b/5ba542fa83c90e09eac972fc9baca7a88e7e7ca4b221a89251954019308b/zipp-3.20.2-py3-none-any.whl" - ] - } - }, - "rules_python_publish_deps_311_zipp_sdist_bc9eb26f": { - "bzlFile": "@@rules_python~//python/private/pypi:whl_library.bzl", - "ruleClassName": "whl_library", - "attributes": { - "dep_template": "@rules_python_publish_deps//{name}:{target}", - "experimental_target_platforms": [ - "cp311_linux_aarch64", - "cp311_linux_arm", - "cp311_linux_ppc", - "cp311_linux_s390x", - "cp311_linux_x86_64", - "cp311_osx_aarch64", - "cp311_osx_x86_64", - "cp311_windows_x86_64" - ], - "extra_pip_args": [ - "--index-url", - "https://pypi.org/simple" - ], - "filename": "zipp-3.20.2.tar.gz", - "python_interpreter_target": "@@rules_python~~python~python_3_11_host//:python", - "repo": "rules_python_publish_deps_311", - "requirement": "zipp==3.20.2", - "sha256": "bc9eb26f4506fda01b81bcde0ca78103b6e62f991b381fec825435c836edbc29", - "urls": [ - "https://files.pythonhosted.org/packages/54/bf/5c0000c44ebc80123ecbdddba1f5dcd94a5ada602a9c225d84b5aaa55e86/zipp-3.20.2.tar.gz" - ] - } - }, - "pip_deps": { - "bzlFile": "@@rules_python~//python/private/pypi:hub_repository.bzl", - "ruleClassName": "hub_repository", - "attributes": { - "repo_name": "pip_deps", - "extra_hub_aliases": {}, - "whl_map": { - "numpy": "{\"pip_deps_310_numpy\":[{\"version\":\"3.10\"}],\"pip_deps_311_numpy\":[{\"version\":\"3.11\"}],\"pip_deps_312_numpy\":[{\"version\":\"3.12\"}],\"pip_deps_38_numpy\":[{\"version\":\"3.8\"}],\"pip_deps_39_numpy\":[{\"version\":\"3.9\"}]}", - "setuptools": "{\"pip_deps_310_setuptools\":[{\"version\":\"3.10\"}],\"pip_deps_311_setuptools\":[{\"version\":\"3.11\"}],\"pip_deps_312_setuptools\":[{\"version\":\"3.12\"}],\"pip_deps_38_setuptools\":[{\"version\":\"3.8\"}],\"pip_deps_39_setuptools\":[{\"version\":\"3.9\"}]}" - }, - "packages": [ - "numpy", - "setuptools" - ], - "groups": {} - } - }, - "rules_fuzzing_py_deps": { - "bzlFile": "@@rules_python~//python/private/pypi:hub_repository.bzl", - "ruleClassName": "hub_repository", - "attributes": { - "repo_name": "rules_fuzzing_py_deps", - "extra_hub_aliases": {}, - "whl_map": { - "absl_py": "{\"rules_fuzzing_py_deps_310_absl_py\":[{\"version\":\"3.10\"}],\"rules_fuzzing_py_deps_311_absl_py\":[{\"version\":\"3.11\"}],\"rules_fuzzing_py_deps_312_absl_py\":[{\"version\":\"3.12\"}],\"rules_fuzzing_py_deps_38_absl_py\":[{\"version\":\"3.8\"}],\"rules_fuzzing_py_deps_39_absl_py\":[{\"version\":\"3.9\"}]}", - "six": "{\"rules_fuzzing_py_deps_310_six\":[{\"version\":\"3.10\"}],\"rules_fuzzing_py_deps_311_six\":[{\"version\":\"3.11\"}],\"rules_fuzzing_py_deps_312_six\":[{\"version\":\"3.12\"}],\"rules_fuzzing_py_deps_38_six\":[{\"version\":\"3.8\"}],\"rules_fuzzing_py_deps_39_six\":[{\"version\":\"3.9\"}]}" - }, - "packages": [ - "absl_py", - "six" - ], - "groups": {} - } - }, - "rules_python_publish_deps": { - "bzlFile": "@@rules_python~//python/private/pypi:hub_repository.bzl", - "ruleClassName": "hub_repository", - "attributes": { - "repo_name": "rules_python_publish_deps", - "extra_hub_aliases": {}, - "whl_map": { - "backports_tarfile": "{\"rules_python_publish_deps_311_backports_tarfile_py3_none_any_77e284d7\":[{\"filename\":\"backports.tarfile-1.2.0-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_backports_tarfile_sdist_d75e02c2\":[{\"filename\":\"backports_tarfile-1.2.0.tar.gz\",\"version\":\"3.11\"}]}", - "certifi": "{\"rules_python_publish_deps_311_certifi_py3_none_any_922820b5\":[{\"filename\":\"certifi-2024.8.30-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_certifi_sdist_bec941d2\":[{\"filename\":\"certifi-2024.8.30.tar.gz\",\"version\":\"3.11\"}]}", - "cffi": "{\"rules_python_publish_deps_311_cffi_cp311_cp311_manylinux_2_17_aarch64_a1ed2dd2\":[{\"filename\":\"cffi-1.17.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_cffi_cp311_cp311_manylinux_2_17_s390x_a24ed04c\":[{\"filename\":\"cffi-1.17.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_cffi_cp311_cp311_manylinux_2_17_x86_64_610faea7\":[{\"filename\":\"cffi-1.17.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_cffi_cp311_cp311_musllinux_1_1_aarch64_a9b15d49\":[{\"filename\":\"cffi-1.17.1-cp311-cp311-musllinux_1_1_aarch64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_cffi_cp311_cp311_musllinux_1_1_x86_64_fc48c783\":[{\"filename\":\"cffi-1.17.1-cp311-cp311-musllinux_1_1_x86_64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_cffi_sdist_1c39c601\":[{\"filename\":\"cffi-1.17.1.tar.gz\",\"version\":\"3.11\"}]}", - "charset_normalizer": "{\"rules_python_publish_deps_311_charset_normalizer_cp311_cp311_macosx_10_9_universal2_0d99dd8f\":[{\"filename\":\"charset_normalizer-3.4.0-cp311-cp311-macosx_10_9_universal2.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_charset_normalizer_cp311_cp311_macosx_10_9_x86_64_c57516e5\":[{\"filename\":\"charset_normalizer-3.4.0-cp311-cp311-macosx_10_9_x86_64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_charset_normalizer_cp311_cp311_macosx_11_0_arm64_6dba5d19\":[{\"filename\":\"charset_normalizer-3.4.0-cp311-cp311-macosx_11_0_arm64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_charset_normalizer_cp311_cp311_manylinux_2_17_aarch64_bf4475b8\":[{\"filename\":\"charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_charset_normalizer_cp311_cp311_manylinux_2_17_s390x_8ff4e7cd\":[{\"filename\":\"charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_charset_normalizer_cp311_cp311_manylinux_2_17_x86_64_3710a975\":[{\"filename\":\"charset_normalizer-3.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_charset_normalizer_cp311_cp311_musllinux_1_2_aarch64_47334db7\":[{\"filename\":\"charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_aarch64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_charset_normalizer_cp311_cp311_musllinux_1_2_s390x_63bc5c4a\":[{\"filename\":\"charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_s390x.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_charset_normalizer_cp311_cp311_musllinux_1_2_x86_64_bcb4f8ea\":[{\"filename\":\"charset_normalizer-3.4.0-cp311-cp311-musllinux_1_2_x86_64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_charset_normalizer_cp311_cp311_win_amd64_cee4373f\":[{\"filename\":\"charset_normalizer-3.4.0-cp311-cp311-win_amd64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_charset_normalizer_py3_none_any_fe9f97fe\":[{\"filename\":\"charset_normalizer-3.4.0-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_charset_normalizer_sdist_223217c3\":[{\"filename\":\"charset_normalizer-3.4.0.tar.gz\",\"version\":\"3.11\"}]}", - "cryptography": "{\"rules_python_publish_deps_311_cryptography_cp39_abi3_manylinux_2_17_aarch64_846da004\":[{\"filename\":\"cryptography-43.0.3-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_cryptography_cp39_abi3_manylinux_2_17_x86_64_0f996e72\":[{\"filename\":\"cryptography-43.0.3-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_cryptography_cp39_abi3_manylinux_2_28_aarch64_f7b178f1\":[{\"filename\":\"cryptography-43.0.3-cp39-abi3-manylinux_2_28_aarch64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_cryptography_cp39_abi3_manylinux_2_28_x86_64_c2e6fc39\":[{\"filename\":\"cryptography-43.0.3-cp39-abi3-manylinux_2_28_x86_64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_cryptography_cp39_abi3_musllinux_1_2_aarch64_e1be4655\":[{\"filename\":\"cryptography-43.0.3-cp39-abi3-musllinux_1_2_aarch64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_cryptography_cp39_abi3_musllinux_1_2_x86_64_df6b6c6d\":[{\"filename\":\"cryptography-43.0.3-cp39-abi3-musllinux_1_2_x86_64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_cryptography_sdist_315b9001\":[{\"filename\":\"cryptography-43.0.3.tar.gz\",\"version\":\"3.11\"}]}", - "docutils": "{\"rules_python_publish_deps_311_docutils_py3_none_any_dafca5b9\":[{\"filename\":\"docutils-0.21.2-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_docutils_sdist_3a6b1873\":[{\"filename\":\"docutils-0.21.2.tar.gz\",\"version\":\"3.11\"}]}", - "idna": "{\"rules_python_publish_deps_311_idna_py3_none_any_946d195a\":[{\"filename\":\"idna-3.10-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_idna_sdist_12f65c9b\":[{\"filename\":\"idna-3.10.tar.gz\",\"version\":\"3.11\"}]}", - "importlib_metadata": "{\"rules_python_publish_deps_311_importlib_metadata_py3_none_any_45e54197\":[{\"filename\":\"importlib_metadata-8.5.0-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_importlib_metadata_sdist_71522656\":[{\"filename\":\"importlib_metadata-8.5.0.tar.gz\",\"version\":\"3.11\"}]}", - "jaraco_classes": "{\"rules_python_publish_deps_311_jaraco_classes_py3_none_any_f662826b\":[{\"filename\":\"jaraco.classes-3.4.0-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_jaraco_classes_sdist_47a024b5\":[{\"filename\":\"jaraco.classes-3.4.0.tar.gz\",\"version\":\"3.11\"}]}", - "jaraco_context": "{\"rules_python_publish_deps_311_jaraco_context_py3_none_any_f797fc48\":[{\"filename\":\"jaraco.context-6.0.1-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_jaraco_context_sdist_9bae4ea5\":[{\"filename\":\"jaraco_context-6.0.1.tar.gz\",\"version\":\"3.11\"}]}", - "jaraco_functools": "{\"rules_python_publish_deps_311_jaraco_functools_py3_none_any_ad159f13\":[{\"filename\":\"jaraco.functools-4.1.0-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_jaraco_functools_sdist_70f7e0e2\":[{\"filename\":\"jaraco_functools-4.1.0.tar.gz\",\"version\":\"3.11\"}]}", - "jeepney": "{\"rules_python_publish_deps_311_jeepney_py3_none_any_c0a454ad\":[{\"filename\":\"jeepney-0.8.0-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_jeepney_sdist_5efe48d2\":[{\"filename\":\"jeepney-0.8.0.tar.gz\",\"version\":\"3.11\"}]}", - "keyring": "{\"rules_python_publish_deps_311_keyring_py3_none_any_5426f817\":[{\"filename\":\"keyring-25.4.1-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_keyring_sdist_b07ebc55\":[{\"filename\":\"keyring-25.4.1.tar.gz\",\"version\":\"3.11\"}]}", - "markdown_it_py": "{\"rules_python_publish_deps_311_markdown_it_py_py3_none_any_35521684\":[{\"filename\":\"markdown_it_py-3.0.0-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_markdown_it_py_sdist_e3f60a94\":[{\"filename\":\"markdown-it-py-3.0.0.tar.gz\",\"version\":\"3.11\"}]}", - "mdurl": "{\"rules_python_publish_deps_311_mdurl_py3_none_any_84008a41\":[{\"filename\":\"mdurl-0.1.2-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_mdurl_sdist_bb413d29\":[{\"filename\":\"mdurl-0.1.2.tar.gz\",\"version\":\"3.11\"}]}", - "more_itertools": "{\"rules_python_publish_deps_311_more_itertools_py3_none_any_037b0d32\":[{\"filename\":\"more_itertools-10.5.0-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_more_itertools_sdist_5482bfef\":[{\"filename\":\"more-itertools-10.5.0.tar.gz\",\"version\":\"3.11\"}]}", - "nh3": "{\"rules_python_publish_deps_311_nh3_cp37_abi3_macosx_10_12_x86_64_14c5a72e\":[{\"filename\":\"nh3-0.2.18-cp37-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_nh3_cp37_abi3_macosx_10_12_x86_64_7b7c2a3c\":[{\"filename\":\"nh3-0.2.18-cp37-abi3-macosx_10_12_x86_64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_nh3_cp37_abi3_manylinux_2_17_aarch64_42c64511\":[{\"filename\":\"nh3-0.2.18-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_nh3_cp37_abi3_manylinux_2_17_armv7l_0411beb0\":[{\"filename\":\"nh3-0.2.18-cp37-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_nh3_cp37_abi3_manylinux_2_17_ppc64_5f36b271\":[{\"filename\":\"nh3-0.2.18-cp37-abi3-manylinux_2_17_ppc64.manylinux2014_ppc64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_nh3_cp37_abi3_manylinux_2_17_s390x_19aaba96\":[{\"filename\":\"nh3-0.2.18-cp37-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_nh3_cp37_abi3_manylinux_2_17_x86_64_de3ceed6\":[{\"filename\":\"nh3-0.2.18-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_nh3_cp37_abi3_musllinux_1_2_aarch64_f0eca9ca\":[{\"filename\":\"nh3-0.2.18-cp37-abi3-musllinux_1_2_aarch64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_nh3_cp37_abi3_musllinux_1_2_armv7l_3a157ab1\":[{\"filename\":\"nh3-0.2.18-cp37-abi3-musllinux_1_2_armv7l.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_nh3_cp37_abi3_musllinux_1_2_x86_64_36c95d4b\":[{\"filename\":\"nh3-0.2.18-cp37-abi3-musllinux_1_2_x86_64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_nh3_cp37_abi3_win_amd64_8ce0f819\":[{\"filename\":\"nh3-0.2.18-cp37-abi3-win_amd64.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_nh3_sdist_94a16692\":[{\"filename\":\"nh3-0.2.18.tar.gz\",\"version\":\"3.11\"}]}", - "pkginfo": "{\"rules_python_publish_deps_311_pkginfo_py3_none_any_889a6da2\":[{\"filename\":\"pkginfo-1.10.0-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_pkginfo_sdist_5df73835\":[{\"filename\":\"pkginfo-1.10.0.tar.gz\",\"version\":\"3.11\"}]}", - "pycparser": "{\"rules_python_publish_deps_311_pycparser_py3_none_any_c3702b6d\":[{\"filename\":\"pycparser-2.22-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_pycparser_sdist_491c8be9\":[{\"filename\":\"pycparser-2.22.tar.gz\",\"version\":\"3.11\"}]}", - "pygments": "{\"rules_python_publish_deps_311_pygments_py3_none_any_b8e6aca0\":[{\"filename\":\"pygments-2.18.0-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_pygments_sdist_786ff802\":[{\"filename\":\"pygments-2.18.0.tar.gz\",\"version\":\"3.11\"}]}", - "pywin32_ctypes": "{\"rules_python_publish_deps_311_pywin32_ctypes_py3_none_any_8a151337\":[{\"filename\":\"pywin32_ctypes-0.2.3-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_pywin32_ctypes_sdist_d162dc04\":[{\"filename\":\"pywin32-ctypes-0.2.3.tar.gz\",\"version\":\"3.11\"}]}", - "readme_renderer": "{\"rules_python_publish_deps_311_readme_renderer_py3_none_any_2fbca89b\":[{\"filename\":\"readme_renderer-44.0-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_readme_renderer_sdist_8712034e\":[{\"filename\":\"readme_renderer-44.0.tar.gz\",\"version\":\"3.11\"}]}", - "requests": "{\"rules_python_publish_deps_311_requests_py3_none_any_70761cfe\":[{\"filename\":\"requests-2.32.3-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_requests_sdist_55365417\":[{\"filename\":\"requests-2.32.3.tar.gz\",\"version\":\"3.11\"}]}", - "requests_toolbelt": "{\"rules_python_publish_deps_311_requests_toolbelt_py2_none_any_cccfdd66\":[{\"filename\":\"requests_toolbelt-1.0.0-py2.py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_requests_toolbelt_sdist_7681a0a3\":[{\"filename\":\"requests-toolbelt-1.0.0.tar.gz\",\"version\":\"3.11\"}]}", - "rfc3986": "{\"rules_python_publish_deps_311_rfc3986_py2_none_any_50b1502b\":[{\"filename\":\"rfc3986-2.0.0-py2.py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_rfc3986_sdist_97aacf9d\":[{\"filename\":\"rfc3986-2.0.0.tar.gz\",\"version\":\"3.11\"}]}", - "rich": "{\"rules_python_publish_deps_311_rich_py3_none_any_6049d5e6\":[{\"filename\":\"rich-13.9.4-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_rich_sdist_43959497\":[{\"filename\":\"rich-13.9.4.tar.gz\",\"version\":\"3.11\"}]}", - "secretstorage": "{\"rules_python_publish_deps_311_secretstorage_py3_none_any_f356e662\":[{\"filename\":\"SecretStorage-3.3.3-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_secretstorage_sdist_2403533e\":[{\"filename\":\"SecretStorage-3.3.3.tar.gz\",\"version\":\"3.11\"}]}", - "twine": "{\"rules_python_publish_deps_311_twine_py3_none_any_215dbe7b\":[{\"filename\":\"twine-5.1.1-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_twine_sdist_9aa08251\":[{\"filename\":\"twine-5.1.1.tar.gz\",\"version\":\"3.11\"}]}", - "urllib3": "{\"rules_python_publish_deps_311_urllib3_py3_none_any_ca899ca0\":[{\"filename\":\"urllib3-2.2.3-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_urllib3_sdist_e7d814a8\":[{\"filename\":\"urllib3-2.2.3.tar.gz\",\"version\":\"3.11\"}]}", - "zipp": "{\"rules_python_publish_deps_311_zipp_py3_none_any_a817ac80\":[{\"filename\":\"zipp-3.20.2-py3-none-any.whl\",\"version\":\"3.11\"}],\"rules_python_publish_deps_311_zipp_sdist_bc9eb26f\":[{\"filename\":\"zipp-3.20.2.tar.gz\",\"version\":\"3.11\"}]}" - }, - "packages": [ - "backports_tarfile", - "certifi", - "charset_normalizer", - "docutils", - "idna", - "importlib_metadata", - "jaraco_classes", - "jaraco_context", - "jaraco_functools", - "keyring", - "markdown_it_py", - "mdurl", - "more_itertools", - "nh3", - "pkginfo", - "pygments", - "readme_renderer", - "requests", - "requests_toolbelt", - "rfc3986", - "rich", - "twine", - "urllib3", - "zipp" - ], - "groups": {} - } - } - }, - "moduleExtensionMetadata": { - "useAllRepos": "NO", - "reproducible": false - }, - "recordedRepoMappingEntries": [ - [ - "bazel_features~", - "bazel_features_globals", - "bazel_features~~version_extension~bazel_features_globals" - ], - [ - "bazel_features~", - "bazel_features_version", - "bazel_features~~version_extension~bazel_features_version" - ], - [ - "rules_python~", - "bazel_features", - "bazel_features~" - ], - [ - "rules_python~", - "bazel_skylib", - "bazel_skylib~" - ], - [ - "rules_python~", - "bazel_tools", - "bazel_tools" - ], - [ - "rules_python~", - "pypi__build", - "rules_python~~internal_deps~pypi__build" - ], - [ - "rules_python~", - "pypi__click", - "rules_python~~internal_deps~pypi__click" - ], - [ - "rules_python~", - "pypi__colorama", - "rules_python~~internal_deps~pypi__colorama" - ], - [ - "rules_python~", - "pypi__importlib_metadata", - "rules_python~~internal_deps~pypi__importlib_metadata" - ], - [ - "rules_python~", - "pypi__installer", - "rules_python~~internal_deps~pypi__installer" - ], - [ - "rules_python~", - "pypi__more_itertools", - "rules_python~~internal_deps~pypi__more_itertools" - ], - [ - "rules_python~", - "pypi__packaging", - "rules_python~~internal_deps~pypi__packaging" - ], - [ - "rules_python~", - "pypi__pep517", - "rules_python~~internal_deps~pypi__pep517" - ], - [ - "rules_python~", - "pypi__pip", - "rules_python~~internal_deps~pypi__pip" - ], - [ - "rules_python~", - "pypi__pip_tools", - "rules_python~~internal_deps~pypi__pip_tools" - ], - [ - "rules_python~", - "pypi__pyproject_hooks", - "rules_python~~internal_deps~pypi__pyproject_hooks" - ], - [ - "rules_python~", - "pypi__setuptools", - "rules_python~~internal_deps~pypi__setuptools" - ], - [ - "rules_python~", - "pypi__tomli", - "rules_python~~internal_deps~pypi__tomli" - ], - [ - "rules_python~", - "pypi__wheel", - "rules_python~~internal_deps~pypi__wheel" - ], - [ - "rules_python~", - "pypi__zipp", - "rules_python~~internal_deps~pypi__zipp" - ], - [ - "rules_python~", - "pythons_hub", - "rules_python~~python~pythons_hub" - ], - [ - "rules_python~~python~pythons_hub", - "python_3_10_host", - "rules_python~~python~python_3_10_host" - ], - [ - "rules_python~~python~pythons_hub", - "python_3_11_host", - "rules_python~~python~python_3_11_host" - ], - [ - "rules_python~~python~pythons_hub", - "python_3_12_host", - "rules_python~~python~python_3_12_host" - ], - [ - "rules_python~~python~pythons_hub", - "python_3_8_host", - "rules_python~~python~python_3_8_host" - ], - [ - "rules_python~~python~pythons_hub", - "python_3_9_host", - "rules_python~~python~python_3_9_host" - ] - ] - } - }, "@@rules_python~//python/uv:uv.bzl%uv": { "general": { "bzlTransitiveDigest": "Xpqjnjzy6zZ90Es9Wa888ZLHhn7IsNGbph/e6qoxzw8=", - "usagesDigest": "qI5PVlIum/YAnGJg5oXGHzDkMFWt2aNSUZY4G8PBbic=", + "usagesDigest": "Tx9xMlyNlKU8Dq4pnYUJ8g2T1PHLiGoAs42AGwUIqh8=", "recordedFileInputs": {}, "recordedDirentsInputs": {}, "envVariables": {}, diff --git a/bazel/sh/BUILD.bazel b/bazel/sh/BUILD.bazel index cac8fda5a..7a347a852 100644 --- a/bazel/sh/BUILD.bazel +++ b/bazel/sh/BUILD.bazel @@ -1,3 +1,5 @@ +load("@rules_shell//shell:sh_library.bzl", "sh_library") + exports_files([ "repo_command.sh.in", "noop_warn.sh.in", diff --git a/bazel/sh/def.bzl b/bazel/sh/def.bzl index 5f2129017..4ddad1fe0 100644 --- a/bazel/sh/def.bzl +++ b/bazel/sh/def.bzl @@ -1,6 +1,8 @@ """Bazel rules for CI and dev tooling""" load("@bazel_skylib//lib:shell.bzl", "shell") +load("@rules_shell//shell:sh_binary.bzl", "sh_binary") +load("@rules_shell//shell:sh_test.bzl", "sh_test") def _sh_template_impl(ctx): out_file = ctx.actions.declare_file(ctx.label.name + ".bash") @@ -66,8 +68,7 @@ def sh_template(name, **kwargs): template = template, toolchains = toolchains, ) - - native.sh_binary( + sh_binary( name = name, srcs = [script_name], data = [script_name] + data, @@ -95,8 +96,7 @@ def sh_test_template(name, **kwargs): substitutions = substitutions, template = template, ) - - native.sh_test( + sh_test( name = name, srcs = [script_name], data = [script_name] + data, diff --git a/e2e/miniconstellation/BUILD.bazel b/e2e/miniconstellation/BUILD.bazel index e8df73984..47dd3b278 100644 --- a/e2e/miniconstellation/BUILD.bazel +++ b/e2e/miniconstellation/BUILD.bazel @@ -1,4 +1,5 @@ load("@com_github_ash2k_bazel_tools//multirun:def.bzl", "multirun") +load("@rules_shell//shell:sh_library.bzl", "sh_library") load("//bazel/sh:def.bzl", "sh_template") filegroup( diff --git a/image/mirror/BUILD.bazel b/image/mirror/BUILD.bazel index 56b425add..014001e9d 100644 --- a/image/mirror/BUILD.bazel +++ b/image/mirror/BUILD.bazel @@ -1,3 +1,5 @@ +load("@rules_shell//shell:sh_binary.bzl", "sh_binary") + sh_binary( name = "update_packages", srcs = ["update_packages.sh"], From 0c75bd06e3d77a382a5aadfd4cd26c32c474eae2 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 22 May 2025 09:51:50 +0200 Subject: [PATCH 288/311] deps: update ghcr.io/edgelesssys/gcp-guest-agent Docker tag to v20250515 (#3840) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- internal/versions/versions.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/versions/versions.go b/internal/versions/versions.go index 1ae3ec291..044f65aed 100644 --- a/internal/versions/versions.go +++ b/internal/versions/versions.go @@ -169,7 +169,7 @@ const ( // GcpGuestImage image for GCP guest agent. // Check for new versions at https://github.com/GoogleCloudPlatform/guest-agent/releases and update in /.github/workflows/build-gcp-guest-agent.yml. - GcpGuestImage = "ghcr.io/edgelesssys/gcp-guest-agent:v20250508.0.0@sha256:ed3e1a4ae394bcc8d00bdd9255ba5092fd7d6274f1f888a199bf2797861879b0" // renovate:container + GcpGuestImage = "ghcr.io/edgelesssys/gcp-guest-agent:v20250515.0.0@sha256:3b5bfa54ebe97ada83fcaf0a0879dcfdc986a7a4ec20443b7398e432d7a15de9" // renovate:container // NodeMaintenanceOperatorImage is the image for the node maintenance operator. NodeMaintenanceOperatorImage = "quay.io/medik8s/node-maintenance-operator:v0.17.0@sha256:bf1c5758b3d266dd6234422d156c67ffdd47f50f70ce17d5cef1de6065030337" // renovate:container // LogstashImage is the container image of logstash, used for log collection by debugd. From 01f9a30017c4037389e6266839775d2d61578751 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 22 May 2025 09:52:04 +0200 Subject: [PATCH 289/311] deps: update Terraform dependencies (#3839) * deps: update Terraform dependencies * deps: tidy all modules --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: edgelessci --- .../vpn/on-prem-terraform/.terraform.lock.hcl | 48 +++++----- dev-docs/howto/vpn/on-prem-terraform/main.tf | 2 +- .../azure-terraform/.terraform.lock.hcl | 48 +++++----- .../miniconstellation/azure-terraform/main.tf | 2 +- e2e/miniconstellation/.terraform.lock.hcl | 48 +++++----- e2e/miniconstellation/main.tf | 2 +- .../infrastructure/aws/.terraform.lock.hcl | 57 ++++------- terraform/infrastructure/aws/main.tf | 2 +- .../aws/modules/instance_group/main.tf | 2 +- .../aws/modules/jump_host/main.tf | 2 +- .../aws/modules/load_balancer_target/main.tf | 2 +- .../aws/modules/public_private_subnet/main.tf | 2 +- .../infrastructure/azure/.terraform.lock.hcl | 48 +++++----- terraform/infrastructure/azure/main.tf | 2 +- .../modules/load_balancer_backend/main.tf | 2 +- .../azure/modules/scale_set/main.tf | 2 +- .../infrastructure/gcp/.terraform.lock.hcl | 48 +++++----- terraform/infrastructure/gcp/main.tf | 2 +- .../gcp/modules/instance_group/main.tf | 2 +- .../modules/internal_load_balancer/main.tf | 2 +- .../gcp/modules/jump_host/main.tf | 2 +- .../gcp/modules/loadbalancer/main.tf | 2 +- .../iam/aws/.terraform.lock.hcl | 57 ++++------- terraform/infrastructure/iam/aws/main.tf | 2 +- .../iam/azure/.terraform.lock.hcl | 96 +++++++++---------- terraform/infrastructure/iam/azure/main.tf | 4 +- .../iam/gcp/.terraform.lock.hcl | 48 +++++----- terraform/infrastructure/iam/gcp/main.tf | 2 +- 28 files changed, 254 insertions(+), 284 deletions(-) diff --git a/dev-docs/howto/vpn/on-prem-terraform/.terraform.lock.hcl b/dev-docs/howto/vpn/on-prem-terraform/.terraform.lock.hcl index 832939064..a4e090c0d 100644 --- a/dev-docs/howto/vpn/on-prem-terraform/.terraform.lock.hcl +++ b/dev-docs/howto/vpn/on-prem-terraform/.terraform.lock.hcl @@ -2,31 +2,31 @@ # Manual edits may be lost in future updates. provider "registry.terraform.io/hashicorp/azurerm" { - version = "4.28.0" - constraints = "4.28.0" + version = "4.29.0" + constraints = "4.29.0" hashes = [ - "h1:9d1K3ixylgQjb0pnauzfSde4Ov18dAU4xIJI67IsClk=", - "h1:TblPrHpizApX/fMAvBkliFH9+h9ZkztI0MgjIKxvkt4=", - "h1:UEBGe47w8ed89mKtiO/wvbXmvg46ctgNtjExwoABG0w=", - "h1:Y3P2tfRDRogYuKQBbRWBBWye51u0/O+KlW8XQXMPIAc=", - "h1:b/Lys2QZPazq5wiaTuEvqptyesakJtlo+jtMlNx/YCU=", - "h1:b7rIhedcBt9s6RBnyv4f1F2qrExPFEoGw89PvV4TFZY=", - "h1:iBqZB8RIuUiCP8Z0YHGJbZ0ismLAJVdievq/dwmQuw0=", - "h1:vjvQjYMNNEwVKEnfMWRNLPzfuq7PugOM1Fqia07X2Mo=", - "h1:wQm1FmPs46Iqb+lOhZfBuOnzjUvQdCOgQtEZi6Y1FzU=", - "h1:xS+Np3D2SB8BdyXPPDTUEogBTLHocUr1OsJ3br4G4eU=", - "h1:yK6rbNL1Eft/AEStzzxfbxW5R3iFNEKi0HySqedehHg=", - "zh:1bacb9be85f095b1fa99cf465f01ad4f462389a862d8b302ea6239f0ab891884", - "zh:23626c2ee394eb5640565e8814216bc6a9774fde2705bcb8a7f84207e395ec3b", - "zh:391db081c4f17111196b3cc259b68cdb7faf2e8a775f3d3c7589bdd79b3f20cb", - "zh:534ca243c67f9d1051cd44f5eb8909dbe67ee9285b0cfdf5642aa52bad9fe457", - "zh:59a642160e20a792d306761f4173184adfe12a43bdf620be32399ac9fc62c452", - "zh:974d792562506d0a1d7ba2099219255ba1bfd77801afe7d37b6e77926d41f802", - "zh:a9abf9dad2b77be300fa25d01fb02d6a49e4c3be3459bc236d721c9d9d9af738", - "zh:aa3c397b8c011c1fd7ae99274bcdd260ab766025b558249b90eb78fe40f60576", - "zh:c83e1bdf8649cd6b45cd7ae21ea4e699e0a33efdd6451e0f8ef0b056477a8b67", - "zh:d5a55a03478091dba6d3d3c857477353b268ebf4549ca60e777ddb34cdd50144", - "zh:da8c354a28b568fa5f337751140a8918b1aa0103175ae0c03a30f621b1a99076", + "h1:Bde/KCh2xGVCBx/JnixC3I2fmoRTwHXgsapfQ5QG8eg=", + "h1:IyINmgNiLfWx3Istkt5Mz+IJrDhSMhj3/qQeJlC4qS4=", + "h1:KEJAt0mJAACyIKUB5mCk/wqtxKMhivdeW8w6byz5Ll4=", + "h1:Y4gTSs+ZE5YSJVXG2qmsbXmv9Daq5aGM8Ip/GE6nev8=", + "h1:YtcHvTVfVBKbMCp9esoj527R1UK/hU0Zmo3pyQb8YhQ=", + "h1:atJdgnuqk+w3v4Zzhw2B1FZeYYA4su9JfanwNsx+c8o=", + "h1:c9tmtEdVTb9siGa3hVxPrMVl9ij5zijnD02JMHcHjrE=", + "h1:eN0KhMGVepEPpSA+YN5Kaz/v9PFKCafbkqqBzpLJf+g=", + "h1:hNVKlXTx2duXnR6SNKtyQMx7zSIlrxBu66Z0gbyfv3c=", + "h1:jC2GJo4VzTKnKociUDLVv8/+u9Mz+4scZrqbEasV+Y0=", + "h1:m3xYvc9X0pec0Zd1dpn82ALQ+6vwz56RnF/3CbkI2Eg=", + "zh:16590eea68c7c8aedb7af19f690eb34ab6636ef417b3fa9e06ca038fdb4c44b8", + "zh:1c907dfe44d00a54aa63d443004add90188f9a53ef3e919aff8aba92f715f42b", + "zh:258a0ff4198d80cae33c89091cd556d84c1b522c4416458484f23719a0cdf4cc", + "zh:587f5e9b2b33e51b18fb0f372025c961c3f57f2958b388459dd8432412650bda", + "zh:6318ca03bd9dbac272a75bb193688c7d4c4b45c7460289820528f31bcd6c3fe9", + "zh:63e4e8128e26e4c3e0c3b6582ef527245eb35eb5c80ad278dc675ebdf71edeaf", + "zh:845c898a27a84a15ba26e95ee66ac9563f81bc672b5ca216af82d87fe09bd5f8", + "zh:8fa6434fa212d5501185f0adc985d3a3c1e0f449c78f040a4ca640cb1e809cac", + "zh:9b49c0d72ab19aab43b2b48d23c5dddbbe29afae1569a987e6f20ed4c80ddf4c", + "zh:b14cc1ee5e3acf52490de7dd9791cce7953c0ee4bcccf0306aafd256568bd69f", + "zh:cd444836b2579fa42bfca2ae6145d394c41b6438b1ae01078c060bfaf803bb4d", "zh:f569b65999264a9416862bca5cd2a6177d94ccb0424f3a4ef424428912b9cb3c", ] } diff --git a/dev-docs/howto/vpn/on-prem-terraform/main.tf b/dev-docs/howto/vpn/on-prem-terraform/main.tf index 9b9f08bbb..b22ed0fd8 100644 --- a/dev-docs/howto/vpn/on-prem-terraform/main.tf +++ b/dev-docs/howto/vpn/on-prem-terraform/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { azurerm = { source = "hashicorp/azurerm" - version = "4.28.0" + version = "4.29.0" } random = { source = "hashicorp/random" diff --git a/dev-docs/miniconstellation/azure-terraform/.terraform.lock.hcl b/dev-docs/miniconstellation/azure-terraform/.terraform.lock.hcl index 66b457a5c..84170c34d 100644 --- a/dev-docs/miniconstellation/azure-terraform/.terraform.lock.hcl +++ b/dev-docs/miniconstellation/azure-terraform/.terraform.lock.hcl @@ -2,31 +2,31 @@ # Manual edits may be lost in future updates. provider "registry.terraform.io/hashicorp/azurerm" { - version = "4.28.0" - constraints = "4.28.0" + version = "4.29.0" + constraints = "4.29.0" hashes = [ - "h1:9d1K3ixylgQjb0pnauzfSde4Ov18dAU4xIJI67IsClk=", - "h1:TblPrHpizApX/fMAvBkliFH9+h9ZkztI0MgjIKxvkt4=", - "h1:UEBGe47w8ed89mKtiO/wvbXmvg46ctgNtjExwoABG0w=", - "h1:Y3P2tfRDRogYuKQBbRWBBWye51u0/O+KlW8XQXMPIAc=", - "h1:b/Lys2QZPazq5wiaTuEvqptyesakJtlo+jtMlNx/YCU=", - "h1:b7rIhedcBt9s6RBnyv4f1F2qrExPFEoGw89PvV4TFZY=", - "h1:iBqZB8RIuUiCP8Z0YHGJbZ0ismLAJVdievq/dwmQuw0=", - "h1:vjvQjYMNNEwVKEnfMWRNLPzfuq7PugOM1Fqia07X2Mo=", - "h1:wQm1FmPs46Iqb+lOhZfBuOnzjUvQdCOgQtEZi6Y1FzU=", - "h1:xS+Np3D2SB8BdyXPPDTUEogBTLHocUr1OsJ3br4G4eU=", - "h1:yK6rbNL1Eft/AEStzzxfbxW5R3iFNEKi0HySqedehHg=", - "zh:1bacb9be85f095b1fa99cf465f01ad4f462389a862d8b302ea6239f0ab891884", - "zh:23626c2ee394eb5640565e8814216bc6a9774fde2705bcb8a7f84207e395ec3b", - "zh:391db081c4f17111196b3cc259b68cdb7faf2e8a775f3d3c7589bdd79b3f20cb", - "zh:534ca243c67f9d1051cd44f5eb8909dbe67ee9285b0cfdf5642aa52bad9fe457", - "zh:59a642160e20a792d306761f4173184adfe12a43bdf620be32399ac9fc62c452", - "zh:974d792562506d0a1d7ba2099219255ba1bfd77801afe7d37b6e77926d41f802", - "zh:a9abf9dad2b77be300fa25d01fb02d6a49e4c3be3459bc236d721c9d9d9af738", - "zh:aa3c397b8c011c1fd7ae99274bcdd260ab766025b558249b90eb78fe40f60576", - "zh:c83e1bdf8649cd6b45cd7ae21ea4e699e0a33efdd6451e0f8ef0b056477a8b67", - "zh:d5a55a03478091dba6d3d3c857477353b268ebf4549ca60e777ddb34cdd50144", - "zh:da8c354a28b568fa5f337751140a8918b1aa0103175ae0c03a30f621b1a99076", + "h1:Bde/KCh2xGVCBx/JnixC3I2fmoRTwHXgsapfQ5QG8eg=", + "h1:IyINmgNiLfWx3Istkt5Mz+IJrDhSMhj3/qQeJlC4qS4=", + "h1:KEJAt0mJAACyIKUB5mCk/wqtxKMhivdeW8w6byz5Ll4=", + "h1:Y4gTSs+ZE5YSJVXG2qmsbXmv9Daq5aGM8Ip/GE6nev8=", + "h1:YtcHvTVfVBKbMCp9esoj527R1UK/hU0Zmo3pyQb8YhQ=", + "h1:atJdgnuqk+w3v4Zzhw2B1FZeYYA4su9JfanwNsx+c8o=", + "h1:c9tmtEdVTb9siGa3hVxPrMVl9ij5zijnD02JMHcHjrE=", + "h1:eN0KhMGVepEPpSA+YN5Kaz/v9PFKCafbkqqBzpLJf+g=", + "h1:hNVKlXTx2duXnR6SNKtyQMx7zSIlrxBu66Z0gbyfv3c=", + "h1:jC2GJo4VzTKnKociUDLVv8/+u9Mz+4scZrqbEasV+Y0=", + "h1:m3xYvc9X0pec0Zd1dpn82ALQ+6vwz56RnF/3CbkI2Eg=", + "zh:16590eea68c7c8aedb7af19f690eb34ab6636ef417b3fa9e06ca038fdb4c44b8", + "zh:1c907dfe44d00a54aa63d443004add90188f9a53ef3e919aff8aba92f715f42b", + "zh:258a0ff4198d80cae33c89091cd556d84c1b522c4416458484f23719a0cdf4cc", + "zh:587f5e9b2b33e51b18fb0f372025c961c3f57f2958b388459dd8432412650bda", + "zh:6318ca03bd9dbac272a75bb193688c7d4c4b45c7460289820528f31bcd6c3fe9", + "zh:63e4e8128e26e4c3e0c3b6582ef527245eb35eb5c80ad278dc675ebdf71edeaf", + "zh:845c898a27a84a15ba26e95ee66ac9563f81bc672b5ca216af82d87fe09bd5f8", + "zh:8fa6434fa212d5501185f0adc985d3a3c1e0f449c78f040a4ca640cb1e809cac", + "zh:9b49c0d72ab19aab43b2b48d23c5dddbbe29afae1569a987e6f20ed4c80ddf4c", + "zh:b14cc1ee5e3acf52490de7dd9791cce7953c0ee4bcccf0306aafd256568bd69f", + "zh:cd444836b2579fa42bfca2ae6145d394c41b6438b1ae01078c060bfaf803bb4d", "zh:f569b65999264a9416862bca5cd2a6177d94ccb0424f3a4ef424428912b9cb3c", ] } diff --git a/dev-docs/miniconstellation/azure-terraform/main.tf b/dev-docs/miniconstellation/azure-terraform/main.tf index 23dbada00..9aeeebe21 100644 --- a/dev-docs/miniconstellation/azure-terraform/main.tf +++ b/dev-docs/miniconstellation/azure-terraform/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { azurerm = { source = "hashicorp/azurerm" - version = "4.28.0" + version = "4.29.0" } random = { source = "hashicorp/random" diff --git a/e2e/miniconstellation/.terraform.lock.hcl b/e2e/miniconstellation/.terraform.lock.hcl index d59c23b7a..87cddd3bb 100644 --- a/e2e/miniconstellation/.terraform.lock.hcl +++ b/e2e/miniconstellation/.terraform.lock.hcl @@ -2,31 +2,31 @@ # Manual edits may be lost in future updates. provider "registry.terraform.io/hashicorp/azurerm" { - version = "4.28.0" - constraints = "4.28.0" + version = "4.29.0" + constraints = "4.29.0" hashes = [ - "h1:9d1K3ixylgQjb0pnauzfSde4Ov18dAU4xIJI67IsClk=", - "h1:TblPrHpizApX/fMAvBkliFH9+h9ZkztI0MgjIKxvkt4=", - "h1:UEBGe47w8ed89mKtiO/wvbXmvg46ctgNtjExwoABG0w=", - "h1:Y3P2tfRDRogYuKQBbRWBBWye51u0/O+KlW8XQXMPIAc=", - "h1:b/Lys2QZPazq5wiaTuEvqptyesakJtlo+jtMlNx/YCU=", - "h1:b7rIhedcBt9s6RBnyv4f1F2qrExPFEoGw89PvV4TFZY=", - "h1:iBqZB8RIuUiCP8Z0YHGJbZ0ismLAJVdievq/dwmQuw0=", - "h1:vjvQjYMNNEwVKEnfMWRNLPzfuq7PugOM1Fqia07X2Mo=", - "h1:wQm1FmPs46Iqb+lOhZfBuOnzjUvQdCOgQtEZi6Y1FzU=", - "h1:xS+Np3D2SB8BdyXPPDTUEogBTLHocUr1OsJ3br4G4eU=", - "h1:yK6rbNL1Eft/AEStzzxfbxW5R3iFNEKi0HySqedehHg=", - "zh:1bacb9be85f095b1fa99cf465f01ad4f462389a862d8b302ea6239f0ab891884", - "zh:23626c2ee394eb5640565e8814216bc6a9774fde2705bcb8a7f84207e395ec3b", - "zh:391db081c4f17111196b3cc259b68cdb7faf2e8a775f3d3c7589bdd79b3f20cb", - "zh:534ca243c67f9d1051cd44f5eb8909dbe67ee9285b0cfdf5642aa52bad9fe457", - "zh:59a642160e20a792d306761f4173184adfe12a43bdf620be32399ac9fc62c452", - "zh:974d792562506d0a1d7ba2099219255ba1bfd77801afe7d37b6e77926d41f802", - "zh:a9abf9dad2b77be300fa25d01fb02d6a49e4c3be3459bc236d721c9d9d9af738", - "zh:aa3c397b8c011c1fd7ae99274bcdd260ab766025b558249b90eb78fe40f60576", - "zh:c83e1bdf8649cd6b45cd7ae21ea4e699e0a33efdd6451e0f8ef0b056477a8b67", - "zh:d5a55a03478091dba6d3d3c857477353b268ebf4549ca60e777ddb34cdd50144", - "zh:da8c354a28b568fa5f337751140a8918b1aa0103175ae0c03a30f621b1a99076", + "h1:Bde/KCh2xGVCBx/JnixC3I2fmoRTwHXgsapfQ5QG8eg=", + "h1:IyINmgNiLfWx3Istkt5Mz+IJrDhSMhj3/qQeJlC4qS4=", + "h1:KEJAt0mJAACyIKUB5mCk/wqtxKMhivdeW8w6byz5Ll4=", + "h1:Y4gTSs+ZE5YSJVXG2qmsbXmv9Daq5aGM8Ip/GE6nev8=", + "h1:YtcHvTVfVBKbMCp9esoj527R1UK/hU0Zmo3pyQb8YhQ=", + "h1:atJdgnuqk+w3v4Zzhw2B1FZeYYA4su9JfanwNsx+c8o=", + "h1:c9tmtEdVTb9siGa3hVxPrMVl9ij5zijnD02JMHcHjrE=", + "h1:eN0KhMGVepEPpSA+YN5Kaz/v9PFKCafbkqqBzpLJf+g=", + "h1:hNVKlXTx2duXnR6SNKtyQMx7zSIlrxBu66Z0gbyfv3c=", + "h1:jC2GJo4VzTKnKociUDLVv8/+u9Mz+4scZrqbEasV+Y0=", + "h1:m3xYvc9X0pec0Zd1dpn82ALQ+6vwz56RnF/3CbkI2Eg=", + "zh:16590eea68c7c8aedb7af19f690eb34ab6636ef417b3fa9e06ca038fdb4c44b8", + "zh:1c907dfe44d00a54aa63d443004add90188f9a53ef3e919aff8aba92f715f42b", + "zh:258a0ff4198d80cae33c89091cd556d84c1b522c4416458484f23719a0cdf4cc", + "zh:587f5e9b2b33e51b18fb0f372025c961c3f57f2958b388459dd8432412650bda", + "zh:6318ca03bd9dbac272a75bb193688c7d4c4b45c7460289820528f31bcd6c3fe9", + "zh:63e4e8128e26e4c3e0c3b6582ef527245eb35eb5c80ad278dc675ebdf71edeaf", + "zh:845c898a27a84a15ba26e95ee66ac9563f81bc672b5ca216af82d87fe09bd5f8", + "zh:8fa6434fa212d5501185f0adc985d3a3c1e0f449c78f040a4ca640cb1e809cac", + "zh:9b49c0d72ab19aab43b2b48d23c5dddbbe29afae1569a987e6f20ed4c80ddf4c", + "zh:b14cc1ee5e3acf52490de7dd9791cce7953c0ee4bcccf0306aafd256568bd69f", + "zh:cd444836b2579fa42bfca2ae6145d394c41b6438b1ae01078c060bfaf803bb4d", "zh:f569b65999264a9416862bca5cd2a6177d94ccb0424f3a4ef424428912b9cb3c", ] } diff --git a/e2e/miniconstellation/main.tf b/e2e/miniconstellation/main.tf index ea48fdac8..2054a63a9 100644 --- a/e2e/miniconstellation/main.tf +++ b/e2e/miniconstellation/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { azurerm = { source = "hashicorp/azurerm" - version = "4.28.0" + version = "4.29.0" } tls = { source = "hashicorp/tls" diff --git a/terraform/infrastructure/aws/.terraform.lock.hcl b/terraform/infrastructure/aws/.terraform.lock.hcl index ffda752a4..4914aaf10 100644 --- a/terraform/infrastructure/aws/.terraform.lock.hcl +++ b/terraform/infrastructure/aws/.terraform.lock.hcl @@ -2,38 +2,29 @@ # Manual edits may be lost in future updates. provider "registry.terraform.io/hashicorp/aws" { - version = "5.97.0" - constraints = "5.97.0" + version = "5.98.0" + constraints = "5.98.0" hashes = [ - "h1:0cMARQKxeJIHYi+p1Yg391n3oytz92H0/E/gdTSo1vg=", - "h1:2vyaumyNsiPVqJsMQwaSbrrssj6HcJVspxJawhu0UsU=", - "h1:7S6mkqyB8tdNhgukHGMZEbEpkp0uGmBAuNB/u9cSXss=", - "h1:953uFkvlqGOHtO6j+aeJELqmwI5z7uV28TnkKYy6pSA=", - "h1:BEBRvS6L1361geJqMvEG5edra5NDbYO1X7LpzKtEl4s=", - "h1:GDDvO45gw0VNyoEy6ShUvfqQl8P5tfxiSej3638yBqo=", - "h1:MFzR9nx3IOChf9ctdlJiSVA5Wr+fzUs5Yyr/xo5XKT4=", - "h1:U4C3lmRwLC8WbE9bJ2/iKLkxHRZga48Elto/FelLzDc=", - "h1:WbQUOeVoJXKb9glRLC7pRYUGX5nS7dkpYt5gmjfjYe0=", - "h1:WwuqNl8roShq7eOWRKLd6FDFRrr90XwEBVDp+7/9MWU=", - "h1:Y60/O4cEWdXZhV5Yq3pZ1CEE/3aCJYdNj3s13KyjtMs=", - "h1:lI0I9GziJsdymNBcj+MJloqwD8fbogJw3EiR60j5FYU=", - "h1:rIcRZfPZXOp3lUPM+TVqvO2JTWOqUuzQ7DDQ3wb9q60=", - "h1:rUDE0OgA+6IiEA+w0cPp3/QQNH4SpjFjYcQ6p7byKS4=", - "zh:02790ad98b767d8f24d28e8be623f348bcb45590205708334d52de2fb14f5a95", - "zh:088b4398a161e45762dc28784fcc41c4fa95bd6549cb708b82de577f2d39ffc7", - "zh:0c381a457b7af391c43fc0167919443f6105ad2702bde4d02ddea9fd7c9d3539", - "zh:1a4b57a5043dcca64d8b8bae8b30ef4f6b98ed2144f792f39c4e816d3f1e2c56", - "zh:1bf00a67f39e67664337bde065180d41d952242801ebcd1c777061d4ffaa1cc1", - "zh:24c549f53d6bd022af31426d3e78f21264d8a72409821669e7fd41966ae68b2b", - "zh:3abda50bbddb35d86081fe39522e995280aea7f004582c4af22112c03ac8b375", - "zh:7388ed7f21ce2eb46bd9066626ce5f3e2a5705f67f643acce8ae71972f66eaf6", - "zh:96740f2ff94e5df2b2d29a5035a1a1026fe821f61712b2099b224fb2c2277663", + "h1:/RMObGCrfJlVoQCf9h88hFkSyLafDXnw6r0yi4gpO80=", + "h1:KgOCdSG6euSc2lquuFlISJU/CzQTRhAO7WoaASxLZRc=", + "h1:neMFK/kP1KT6cTGID+Tkkt8L7PsN9XqwrPDGXVw3WVY=", + "h1:tSqQC0adIJ0VWRrbChyEGjGuWKwibrz+/YJ2Q1ZOs2Y=", + "h1:tfWnOmzoWOvwOGlUx0HrxCfUZq3YHhlkeEbMccAYiec=", + "zh:23377bd90204b6203b904f48f53edcae3294eb072d8fc18a4531c0cde531a3a1", + "zh:2e55a6ea14cc43b08cf82d43063e96c5c2f58ee953c2628523d0ee918fe3b609", + "zh:4885a817c16fdaaeddc5031edc9594c1f300db0e5b23be7cd76a473e7dcc7b4f", + "zh:6ca7177ad4e5c9d93dee4be1ac0792b37107df04657fddfe0c976f36abdd18b5", + "zh:78bf8eb0a67bae5dede09666676c7a38c9fb8d1b80a90ba06cf36ae268257d6f", + "zh:874b5a99457a3f88e2915df8773120846b63d820868a8f43082193f3dc84adcb", + "zh:95e1e4cf587cde4537ac9dfee9e94270652c812ab31fce3a431778c053abf354", "zh:9b12af85486a96aedd8d7984b0ff811a4b42e3d88dad1a3fb4c0b580d04fa425", - "zh:9f399f8e8683a3a3a6d63a41c7c3a5a5f266eedef40ea69eba75bacf03699879", - "zh:bcf2b288d4706ebd198f75d2159663d657535483331107f2cdef381f10688baf", - "zh:cc76c8a9fc3bad05a8779c1f80fe8c388734f1ec1dd0affa863343490527b466", - "zh:de4359cf1b057bfe7a563be93829ec64bf72e7a2b85a72d075238081ef5eb1db", - "zh:e208fa77051a1f9fa1eff6c5c58aabdcab0de1695b97cdea7b8dd81df3e0ed73", + "zh:a75145b58b241d64570803e6565c72467cd664633df32678755b51871f553e50", + "zh:aa31b13d0b0e8432940d6892a48b6268721fa54a02ed62ee42745186ee32f58d", + "zh:ae4565770f76672ce8e96528cbb66afdade1f91383123c079c7fdeafcb3d2877", + "zh:b99f042c45bf6aa69dd73f3f6d9cbe0b495b30442c526e0b3810089c059ba724", + "zh:bbb38e86d926ef101cefafe8fe090c57f2b1356eac9fc5ec81af310c50375897", + "zh:d03c89988ba4a0bd3cfc8659f951183ae7027aa8018a7ca1e53a300944af59cb", + "zh:d179ef28843fe663fc63169291a211898199009f0d3f63f0a6f65349e77727ec", ] } @@ -43,15 +34,9 @@ provider "registry.terraform.io/hashicorp/random" { hashes = [ "h1:0hcNr59VEJbhZYwuDE/ysmyTS0evkfcLarlni+zATPM=", "h1:356j/3XnXEKr9nyicLUufzoF4Yr6hRy481KIxRVpK0c=", - "h1:Def/iHM4HihJCIxQ8AYoxtoVL5lVlYx0V7bX91pxwgM=", "h1:KG4NuIBl1mRWU0KD/BGfCi1YN/j3F7H4YgeeM7iSdNs=", "h1:Lmv2TxyKKm9Vt4uxcPZHw1uf0Ax/yYizJlilbLSZN8E=", "h1:hkKSY5xI4R1H4Yrg10HHbtOoxZif2dXa9HFPSbaVg5o=", - "h1:khu3pu9zeUMd6Ev+yH6cQ1S4+xpzx8wqwwFwADYGeRI=", - "h1:l35vnL76rzaOjhhJQiaWviW0noK2YzHeHN0/vIXJnHk=", - "h1:nWZjMYzp+nsqD3xslcihzq1Enxv33a7iC8/I8CTBcHA=", - "h1:pSMn/cwmyHB6V67lToGmCHfJFfzA711vV+E1cGP0LBg=", - "h1:w+NoF7vNMFS+qrU2XUEm0/wnuIZxPC733qOOfLVOdfk=", "zh:14829603a32e4bc4d05062f059e545a91e27ff033756b48afbae6b3c835f508f", "zh:1527fb07d9fea400d70e9e6eb4a2b918d5060d604749b6f1c361518e7da546dc", "zh:1e86bcd7ebec85ba336b423ba1db046aeaa3c0e5f921039b3f1a6fc2f978feab", diff --git a/terraform/infrastructure/aws/main.tf b/terraform/infrastructure/aws/main.tf index 1c7ba9afd..6c85d2817 100644 --- a/terraform/infrastructure/aws/main.tf +++ b/terraform/infrastructure/aws/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { aws = { source = "hashicorp/aws" - version = "5.97.0" + version = "5.98.0" } random = { source = "hashicorp/random" diff --git a/terraform/infrastructure/aws/modules/instance_group/main.tf b/terraform/infrastructure/aws/modules/instance_group/main.tf index 071b4dc3f..5a271c970 100644 --- a/terraform/infrastructure/aws/modules/instance_group/main.tf +++ b/terraform/infrastructure/aws/modules/instance_group/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { aws = { source = "hashicorp/aws" - version = "5.97.0" + version = "5.98.0" } random = { source = "hashicorp/random" diff --git a/terraform/infrastructure/aws/modules/jump_host/main.tf b/terraform/infrastructure/aws/modules/jump_host/main.tf index 2dc8b9e94..f2a34429e 100644 --- a/terraform/infrastructure/aws/modules/jump_host/main.tf +++ b/terraform/infrastructure/aws/modules/jump_host/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { aws = { source = "hashicorp/aws" - version = "5.97.0" + version = "5.98.0" } } } diff --git a/terraform/infrastructure/aws/modules/load_balancer_target/main.tf b/terraform/infrastructure/aws/modules/load_balancer_target/main.tf index 132d12f1c..798ec3511 100644 --- a/terraform/infrastructure/aws/modules/load_balancer_target/main.tf +++ b/terraform/infrastructure/aws/modules/load_balancer_target/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { aws = { source = "hashicorp/aws" - version = "5.97.0" + version = "5.98.0" } } } diff --git a/terraform/infrastructure/aws/modules/public_private_subnet/main.tf b/terraform/infrastructure/aws/modules/public_private_subnet/main.tf index e972fa937..a749fe351 100644 --- a/terraform/infrastructure/aws/modules/public_private_subnet/main.tf +++ b/terraform/infrastructure/aws/modules/public_private_subnet/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { aws = { source = "hashicorp/aws" - version = "5.97.0" + version = "5.98.0" } } } diff --git a/terraform/infrastructure/azure/.terraform.lock.hcl b/terraform/infrastructure/azure/.terraform.lock.hcl index 832939064..a4e090c0d 100644 --- a/terraform/infrastructure/azure/.terraform.lock.hcl +++ b/terraform/infrastructure/azure/.terraform.lock.hcl @@ -2,31 +2,31 @@ # Manual edits may be lost in future updates. provider "registry.terraform.io/hashicorp/azurerm" { - version = "4.28.0" - constraints = "4.28.0" + version = "4.29.0" + constraints = "4.29.0" hashes = [ - "h1:9d1K3ixylgQjb0pnauzfSde4Ov18dAU4xIJI67IsClk=", - "h1:TblPrHpizApX/fMAvBkliFH9+h9ZkztI0MgjIKxvkt4=", - "h1:UEBGe47w8ed89mKtiO/wvbXmvg46ctgNtjExwoABG0w=", - "h1:Y3P2tfRDRogYuKQBbRWBBWye51u0/O+KlW8XQXMPIAc=", - "h1:b/Lys2QZPazq5wiaTuEvqptyesakJtlo+jtMlNx/YCU=", - "h1:b7rIhedcBt9s6RBnyv4f1F2qrExPFEoGw89PvV4TFZY=", - "h1:iBqZB8RIuUiCP8Z0YHGJbZ0ismLAJVdievq/dwmQuw0=", - "h1:vjvQjYMNNEwVKEnfMWRNLPzfuq7PugOM1Fqia07X2Mo=", - "h1:wQm1FmPs46Iqb+lOhZfBuOnzjUvQdCOgQtEZi6Y1FzU=", - "h1:xS+Np3D2SB8BdyXPPDTUEogBTLHocUr1OsJ3br4G4eU=", - "h1:yK6rbNL1Eft/AEStzzxfbxW5R3iFNEKi0HySqedehHg=", - "zh:1bacb9be85f095b1fa99cf465f01ad4f462389a862d8b302ea6239f0ab891884", - "zh:23626c2ee394eb5640565e8814216bc6a9774fde2705bcb8a7f84207e395ec3b", - "zh:391db081c4f17111196b3cc259b68cdb7faf2e8a775f3d3c7589bdd79b3f20cb", - "zh:534ca243c67f9d1051cd44f5eb8909dbe67ee9285b0cfdf5642aa52bad9fe457", - "zh:59a642160e20a792d306761f4173184adfe12a43bdf620be32399ac9fc62c452", - "zh:974d792562506d0a1d7ba2099219255ba1bfd77801afe7d37b6e77926d41f802", - "zh:a9abf9dad2b77be300fa25d01fb02d6a49e4c3be3459bc236d721c9d9d9af738", - "zh:aa3c397b8c011c1fd7ae99274bcdd260ab766025b558249b90eb78fe40f60576", - "zh:c83e1bdf8649cd6b45cd7ae21ea4e699e0a33efdd6451e0f8ef0b056477a8b67", - "zh:d5a55a03478091dba6d3d3c857477353b268ebf4549ca60e777ddb34cdd50144", - "zh:da8c354a28b568fa5f337751140a8918b1aa0103175ae0c03a30f621b1a99076", + "h1:Bde/KCh2xGVCBx/JnixC3I2fmoRTwHXgsapfQ5QG8eg=", + "h1:IyINmgNiLfWx3Istkt5Mz+IJrDhSMhj3/qQeJlC4qS4=", + "h1:KEJAt0mJAACyIKUB5mCk/wqtxKMhivdeW8w6byz5Ll4=", + "h1:Y4gTSs+ZE5YSJVXG2qmsbXmv9Daq5aGM8Ip/GE6nev8=", + "h1:YtcHvTVfVBKbMCp9esoj527R1UK/hU0Zmo3pyQb8YhQ=", + "h1:atJdgnuqk+w3v4Zzhw2B1FZeYYA4su9JfanwNsx+c8o=", + "h1:c9tmtEdVTb9siGa3hVxPrMVl9ij5zijnD02JMHcHjrE=", + "h1:eN0KhMGVepEPpSA+YN5Kaz/v9PFKCafbkqqBzpLJf+g=", + "h1:hNVKlXTx2duXnR6SNKtyQMx7zSIlrxBu66Z0gbyfv3c=", + "h1:jC2GJo4VzTKnKociUDLVv8/+u9Mz+4scZrqbEasV+Y0=", + "h1:m3xYvc9X0pec0Zd1dpn82ALQ+6vwz56RnF/3CbkI2Eg=", + "zh:16590eea68c7c8aedb7af19f690eb34ab6636ef417b3fa9e06ca038fdb4c44b8", + "zh:1c907dfe44d00a54aa63d443004add90188f9a53ef3e919aff8aba92f715f42b", + "zh:258a0ff4198d80cae33c89091cd556d84c1b522c4416458484f23719a0cdf4cc", + "zh:587f5e9b2b33e51b18fb0f372025c961c3f57f2958b388459dd8432412650bda", + "zh:6318ca03bd9dbac272a75bb193688c7d4c4b45c7460289820528f31bcd6c3fe9", + "zh:63e4e8128e26e4c3e0c3b6582ef527245eb35eb5c80ad278dc675ebdf71edeaf", + "zh:845c898a27a84a15ba26e95ee66ac9563f81bc672b5ca216af82d87fe09bd5f8", + "zh:8fa6434fa212d5501185f0adc985d3a3c1e0f449c78f040a4ca640cb1e809cac", + "zh:9b49c0d72ab19aab43b2b48d23c5dddbbe29afae1569a987e6f20ed4c80ddf4c", + "zh:b14cc1ee5e3acf52490de7dd9791cce7953c0ee4bcccf0306aafd256568bd69f", + "zh:cd444836b2579fa42bfca2ae6145d394c41b6438b1ae01078c060bfaf803bb4d", "zh:f569b65999264a9416862bca5cd2a6177d94ccb0424f3a4ef424428912b9cb3c", ] } diff --git a/terraform/infrastructure/azure/main.tf b/terraform/infrastructure/azure/main.tf index 01433fcbe..490c57cd0 100644 --- a/terraform/infrastructure/azure/main.tf +++ b/terraform/infrastructure/azure/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { azurerm = { source = "hashicorp/azurerm" - version = "4.28.0" + version = "4.29.0" } random = { source = "hashicorp/random" diff --git a/terraform/infrastructure/azure/modules/load_balancer_backend/main.tf b/terraform/infrastructure/azure/modules/load_balancer_backend/main.tf index a599e6999..4b466bf65 100644 --- a/terraform/infrastructure/azure/modules/load_balancer_backend/main.tf +++ b/terraform/infrastructure/azure/modules/load_balancer_backend/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { azurerm = { source = "hashicorp/azurerm" - version = "4.28.0" + version = "4.29.0" } } } diff --git a/terraform/infrastructure/azure/modules/scale_set/main.tf b/terraform/infrastructure/azure/modules/scale_set/main.tf index 2659ec027..d78b84c72 100644 --- a/terraform/infrastructure/azure/modules/scale_set/main.tf +++ b/terraform/infrastructure/azure/modules/scale_set/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { azurerm = { source = "hashicorp/azurerm" - version = "4.28.0" + version = "4.29.0" } random = { source = "hashicorp/random" diff --git a/terraform/infrastructure/gcp/.terraform.lock.hcl b/terraform/infrastructure/gcp/.terraform.lock.hcl index 4f2fcb3a4..5e188a8ce 100644 --- a/terraform/infrastructure/gcp/.terraform.lock.hcl +++ b/terraform/infrastructure/gcp/.terraform.lock.hcl @@ -2,31 +2,31 @@ # Manual edits may be lost in future updates. provider "registry.terraform.io/hashicorp/google" { - version = "6.35.0" - constraints = "6.35.0" + version = "6.36.0" + constraints = "6.36.0" hashes = [ - "h1:36Rel1YhHm59b4qPfPDShmhsWxuDwUXexWDzr0KVNvM=", - "h1:3vCwmfdWYzv+cvjMT2ZbCGIX2QR1sqK3gU3Y79ef2bA=", - "h1:AMNRbWDZ/f8SDNjjbHihr+dCJuQvzjBBwRcyQ5hHubg=", - "h1:C/DeErZ6xlYeEMta+wFUCnXKL4X57i8JOG6ukecZCDg=", - "h1:CJKihKbsYi8PEBFt8wcIwY0PWcLqYjcfT6Yt2xNS1R4=", - "h1:CfN4SgJEs+WRxOW5jGVNO8sX/EmTIxcptk3eWiocXQQ=", - "h1:EKH+bJA8Spgw1C7K+lwWwj3VdCo5Be2f+Uf/lAEnW/4=", - "h1:MgOEEt6tmoecnF5XhSwH6NVlOlVeuullrerheY15xZc=", - "h1:XNON8oBC1Q0EtuAAT3w1/+rTW/K9hz6sc/4+oIwhXoQ=", - "h1:cwsqYGV0m2nME4R39OiG8YbDyayea5l2aahm9y/YHB0=", - "h1:r9qIIUqixCGkty+PnpgJNdvuMyBkrM7dgnup0h8tff8=", - "zh:0f7b8da0050470b074c2c5124359a407a15298dc3374cb2fbf5d243f7a390712", - "zh:27a8774e750a8b6ff296240d74ba322c3ac626ea847e150d745c014440c66927", - "zh:3cf134f088f31811f35c5996282b316308ad7a02b801cc84712696d536ef57e3", - "zh:3e08b3b451b33101f5d65fddc0d4f00e53260fcc8702ddd3d2ebab93b3553df1", - "zh:5fe57182514244b410c33d1b7bde8b1a78442323d97b13d0b08ad0fac884ad55", - "zh:6db9431b1bb9ac198eb5e0e6706d2c12ad5d47961e09d731be91cfd97f17c18b", - "zh:76309d66d6806f75639126a49db996b51496fa64d2313466f46f476284802ab3", - "zh:897c2cb1411dfed658419de9be24a2b82f64e236449f45f76d9a13c244c872de", - "zh:a5b4e8771fe4547979a767c60cf44b590f52f296d75f161bfa032c6fe6364bc2", - "zh:bb3297ad9bdf20b9d460fe0801ae3d555460bad3bfbf0c062094afa27125afc1", - "zh:cb7ed92b9af88f29f8faef4de844d57d3f4aeccce92edf3b4a33e8b4c6049b38", + "h1:7UUG6owE+FafOHh0JK8BTM0yOlO7/XbHiEDh087fd0E=", + "h1:80HOG2KFPy07zgflMevKhsKrU8tEFvVncVMZOiffqV0=", + "h1:8aaMc8jT1GL3I15Aiz9Lr6k8+u79Fo3D6KA4Np+JUI8=", + "h1:aQ8E+XveXDO6zbqO1upcKqkrWr+5dwxowmQgMZ/zgrM=", + "h1:e/3n+WKR/ikY8m/MIAHOvH1HFY1fng76SEpnvGStxMU=", + "h1:fcjI1cXeKYJDWcgUXL+UPD23HIN4IDJjlc7XVD3i3Bc=", + "h1:iQx5xJnQvBN2aUdQbWZQPmtuT0xjfaNpFJD3qzOvC7U=", + "h1:kRbYOLtROkOjc3XMgptzFWKdgRCjyf2FH0UTlCJXkg8=", + "h1:lxi5P8TBMfiKk88FI4xM2Lnwlk2+Q3r9oa4yrg83x1w=", + "h1:m085EpkXRmg1TqRbPP6RxdVmlwJJujvyfMtznvURS04=", + "h1:vvvbnteZLIMosgsxO6YXDgxGYdU5BuSxPD1w4f4LV6c=", + "zh:0a67432c04d4c74829632cc5669b8c5988f837259333307e07c2915a0529b3fb", + "zh:4559afe21bb59e8fb9e3e7414ea65b6be233e8f217e8683dd0e9c347ecadf910", + "zh:58a34fe3b28271deba9a44db1e704c2844f2e30e252ded5f200a8f9af170d52d", + "zh:6b07f388b4fb2189d9fe3a058831e5c755092f7bd5f7388a1c0d9583f8c43ef0", + "zh:6fae25f93bf4a6fd59ce0f9d05e8551b65b4be7084f5e6e5f528ab011dbbef6a", + "zh:73be19906c569f1d46b8f88d3e846bd8dabd6ed65d8ba9a91f67da5365b534dc", + "zh:7b047330342f600e92c02e248f72eefae1a2e01c16ef45cc533942eb73c49c06", + "zh:9fecf5cdf1a16b9b9c1e83dc6129a40bfbc9e640252d2afddd34dc61de213330", + "zh:c557ea7357880615af290452ff06bc23bd3821132783240bd7cd75aadf16a04a", + "zh:dc11ad9a0b595b70490326563ea5f77de9c69aba0ee959971392e46b10a3c246", + "zh:ed8dc5d5ce3d8e3c1648c3fc6f48a19da9ed38d0157c33019c74b7790480c29f", "zh:f569b65999264a9416862bca5cd2a6177d94ccb0424f3a4ef424428912b9cb3c", ] } diff --git a/terraform/infrastructure/gcp/main.tf b/terraform/infrastructure/gcp/main.tf index c60e57e0c..215c86a8c 100644 --- a/terraform/infrastructure/gcp/main.tf +++ b/terraform/infrastructure/gcp/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { google = { source = "hashicorp/google" - version = "6.35.0" + version = "6.36.0" } random = { diff --git a/terraform/infrastructure/gcp/modules/instance_group/main.tf b/terraform/infrastructure/gcp/modules/instance_group/main.tf index 753c9bbdf..b24f5d61f 100644 --- a/terraform/infrastructure/gcp/modules/instance_group/main.tf +++ b/terraform/infrastructure/gcp/modules/instance_group/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { google = { source = "hashicorp/google" - version = "6.35.0" + version = "6.36.0" } random = { diff --git a/terraform/infrastructure/gcp/modules/internal_load_balancer/main.tf b/terraform/infrastructure/gcp/modules/internal_load_balancer/main.tf index c43254114..7c73433ce 100644 --- a/terraform/infrastructure/gcp/modules/internal_load_balancer/main.tf +++ b/terraform/infrastructure/gcp/modules/internal_load_balancer/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { google = { source = "hashicorp/google" - version = "6.35.0" + version = "6.36.0" } } } diff --git a/terraform/infrastructure/gcp/modules/jump_host/main.tf b/terraform/infrastructure/gcp/modules/jump_host/main.tf index 08736578a..3b5682526 100644 --- a/terraform/infrastructure/gcp/modules/jump_host/main.tf +++ b/terraform/infrastructure/gcp/modules/jump_host/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { google = { source = "hashicorp/google" - version = "6.35.0" + version = "6.36.0" } } } diff --git a/terraform/infrastructure/gcp/modules/loadbalancer/main.tf b/terraform/infrastructure/gcp/modules/loadbalancer/main.tf index 0b1d154e8..0ee6bc477 100644 --- a/terraform/infrastructure/gcp/modules/loadbalancer/main.tf +++ b/terraform/infrastructure/gcp/modules/loadbalancer/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { google = { source = "hashicorp/google" - version = "6.35.0" + version = "6.36.0" } } } diff --git a/terraform/infrastructure/iam/aws/.terraform.lock.hcl b/terraform/infrastructure/iam/aws/.terraform.lock.hcl index ffda752a4..4914aaf10 100644 --- a/terraform/infrastructure/iam/aws/.terraform.lock.hcl +++ b/terraform/infrastructure/iam/aws/.terraform.lock.hcl @@ -2,38 +2,29 @@ # Manual edits may be lost in future updates. provider "registry.terraform.io/hashicorp/aws" { - version = "5.97.0" - constraints = "5.97.0" + version = "5.98.0" + constraints = "5.98.0" hashes = [ - "h1:0cMARQKxeJIHYi+p1Yg391n3oytz92H0/E/gdTSo1vg=", - "h1:2vyaumyNsiPVqJsMQwaSbrrssj6HcJVspxJawhu0UsU=", - "h1:7S6mkqyB8tdNhgukHGMZEbEpkp0uGmBAuNB/u9cSXss=", - "h1:953uFkvlqGOHtO6j+aeJELqmwI5z7uV28TnkKYy6pSA=", - "h1:BEBRvS6L1361geJqMvEG5edra5NDbYO1X7LpzKtEl4s=", - "h1:GDDvO45gw0VNyoEy6ShUvfqQl8P5tfxiSej3638yBqo=", - "h1:MFzR9nx3IOChf9ctdlJiSVA5Wr+fzUs5Yyr/xo5XKT4=", - "h1:U4C3lmRwLC8WbE9bJ2/iKLkxHRZga48Elto/FelLzDc=", - "h1:WbQUOeVoJXKb9glRLC7pRYUGX5nS7dkpYt5gmjfjYe0=", - "h1:WwuqNl8roShq7eOWRKLd6FDFRrr90XwEBVDp+7/9MWU=", - "h1:Y60/O4cEWdXZhV5Yq3pZ1CEE/3aCJYdNj3s13KyjtMs=", - "h1:lI0I9GziJsdymNBcj+MJloqwD8fbogJw3EiR60j5FYU=", - "h1:rIcRZfPZXOp3lUPM+TVqvO2JTWOqUuzQ7DDQ3wb9q60=", - "h1:rUDE0OgA+6IiEA+w0cPp3/QQNH4SpjFjYcQ6p7byKS4=", - "zh:02790ad98b767d8f24d28e8be623f348bcb45590205708334d52de2fb14f5a95", - "zh:088b4398a161e45762dc28784fcc41c4fa95bd6549cb708b82de577f2d39ffc7", - "zh:0c381a457b7af391c43fc0167919443f6105ad2702bde4d02ddea9fd7c9d3539", - "zh:1a4b57a5043dcca64d8b8bae8b30ef4f6b98ed2144f792f39c4e816d3f1e2c56", - "zh:1bf00a67f39e67664337bde065180d41d952242801ebcd1c777061d4ffaa1cc1", - "zh:24c549f53d6bd022af31426d3e78f21264d8a72409821669e7fd41966ae68b2b", - "zh:3abda50bbddb35d86081fe39522e995280aea7f004582c4af22112c03ac8b375", - "zh:7388ed7f21ce2eb46bd9066626ce5f3e2a5705f67f643acce8ae71972f66eaf6", - "zh:96740f2ff94e5df2b2d29a5035a1a1026fe821f61712b2099b224fb2c2277663", + "h1:/RMObGCrfJlVoQCf9h88hFkSyLafDXnw6r0yi4gpO80=", + "h1:KgOCdSG6euSc2lquuFlISJU/CzQTRhAO7WoaASxLZRc=", + "h1:neMFK/kP1KT6cTGID+Tkkt8L7PsN9XqwrPDGXVw3WVY=", + "h1:tSqQC0adIJ0VWRrbChyEGjGuWKwibrz+/YJ2Q1ZOs2Y=", + "h1:tfWnOmzoWOvwOGlUx0HrxCfUZq3YHhlkeEbMccAYiec=", + "zh:23377bd90204b6203b904f48f53edcae3294eb072d8fc18a4531c0cde531a3a1", + "zh:2e55a6ea14cc43b08cf82d43063e96c5c2f58ee953c2628523d0ee918fe3b609", + "zh:4885a817c16fdaaeddc5031edc9594c1f300db0e5b23be7cd76a473e7dcc7b4f", + "zh:6ca7177ad4e5c9d93dee4be1ac0792b37107df04657fddfe0c976f36abdd18b5", + "zh:78bf8eb0a67bae5dede09666676c7a38c9fb8d1b80a90ba06cf36ae268257d6f", + "zh:874b5a99457a3f88e2915df8773120846b63d820868a8f43082193f3dc84adcb", + "zh:95e1e4cf587cde4537ac9dfee9e94270652c812ab31fce3a431778c053abf354", "zh:9b12af85486a96aedd8d7984b0ff811a4b42e3d88dad1a3fb4c0b580d04fa425", - "zh:9f399f8e8683a3a3a6d63a41c7c3a5a5f266eedef40ea69eba75bacf03699879", - "zh:bcf2b288d4706ebd198f75d2159663d657535483331107f2cdef381f10688baf", - "zh:cc76c8a9fc3bad05a8779c1f80fe8c388734f1ec1dd0affa863343490527b466", - "zh:de4359cf1b057bfe7a563be93829ec64bf72e7a2b85a72d075238081ef5eb1db", - "zh:e208fa77051a1f9fa1eff6c5c58aabdcab0de1695b97cdea7b8dd81df3e0ed73", + "zh:a75145b58b241d64570803e6565c72467cd664633df32678755b51871f553e50", + "zh:aa31b13d0b0e8432940d6892a48b6268721fa54a02ed62ee42745186ee32f58d", + "zh:ae4565770f76672ce8e96528cbb66afdade1f91383123c079c7fdeafcb3d2877", + "zh:b99f042c45bf6aa69dd73f3f6d9cbe0b495b30442c526e0b3810089c059ba724", + "zh:bbb38e86d926ef101cefafe8fe090c57f2b1356eac9fc5ec81af310c50375897", + "zh:d03c89988ba4a0bd3cfc8659f951183ae7027aa8018a7ca1e53a300944af59cb", + "zh:d179ef28843fe663fc63169291a211898199009f0d3f63f0a6f65349e77727ec", ] } @@ -43,15 +34,9 @@ provider "registry.terraform.io/hashicorp/random" { hashes = [ "h1:0hcNr59VEJbhZYwuDE/ysmyTS0evkfcLarlni+zATPM=", "h1:356j/3XnXEKr9nyicLUufzoF4Yr6hRy481KIxRVpK0c=", - "h1:Def/iHM4HihJCIxQ8AYoxtoVL5lVlYx0V7bX91pxwgM=", "h1:KG4NuIBl1mRWU0KD/BGfCi1YN/j3F7H4YgeeM7iSdNs=", "h1:Lmv2TxyKKm9Vt4uxcPZHw1uf0Ax/yYizJlilbLSZN8E=", "h1:hkKSY5xI4R1H4Yrg10HHbtOoxZif2dXa9HFPSbaVg5o=", - "h1:khu3pu9zeUMd6Ev+yH6cQ1S4+xpzx8wqwwFwADYGeRI=", - "h1:l35vnL76rzaOjhhJQiaWviW0noK2YzHeHN0/vIXJnHk=", - "h1:nWZjMYzp+nsqD3xslcihzq1Enxv33a7iC8/I8CTBcHA=", - "h1:pSMn/cwmyHB6V67lToGmCHfJFfzA711vV+E1cGP0LBg=", - "h1:w+NoF7vNMFS+qrU2XUEm0/wnuIZxPC733qOOfLVOdfk=", "zh:14829603a32e4bc4d05062f059e545a91e27ff033756b48afbae6b3c835f508f", "zh:1527fb07d9fea400d70e9e6eb4a2b918d5060d604749b6f1c361518e7da546dc", "zh:1e86bcd7ebec85ba336b423ba1db046aeaa3c0e5f921039b3f1a6fc2f978feab", diff --git a/terraform/infrastructure/iam/aws/main.tf b/terraform/infrastructure/iam/aws/main.tf index 04cafde89..c1298689e 100644 --- a/terraform/infrastructure/iam/aws/main.tf +++ b/terraform/infrastructure/iam/aws/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { aws = { source = "hashicorp/aws" - version = "5.97.0" + version = "5.98.0" } random = { source = "hashicorp/random" diff --git a/terraform/infrastructure/iam/azure/.terraform.lock.hcl b/terraform/infrastructure/iam/azure/.terraform.lock.hcl index 70b3f09eb..931a0a0fb 100644 --- a/terraform/infrastructure/iam/azure/.terraform.lock.hcl +++ b/terraform/infrastructure/iam/azure/.terraform.lock.hcl @@ -2,61 +2,61 @@ # Manual edits may be lost in future updates. provider "registry.terraform.io/hashicorp/azuread" { - version = "3.3.0" - constraints = "3.3.0" + version = "3.4.0" + constraints = "3.4.0" hashes = [ - "h1:/wmoU/Z8L3uRe8+VNCSpEosDSawIRW6maw8a+dvyY1M=", - "h1:0YbXRJRN1x5O4gunTzqArmGzNvhwOd1LFMPv1absUx4=", - "h1:0w7nznGwAYU1QK8bBRbL+/gG6Fsd4ed4DsJCM7iz6YQ=", - "h1:7b5PAtdKnfmIZ8RpzcmM92BXuwfn/tEbdfqkt2IBScE=", - "h1:8hJQ0UGYYl799mdFm5HOhVPw3CsZCOg7ZWg4jXW8Ye4=", - "h1:Ad7fZUA3pJkgJ4d37JN3MWChgtTUpO8Deil56hNv3ro=", - "h1:CmjUkS5xnsVJ6QHzooWNYg2iowb++EcGIWSCoMiUlbM=", - "h1:IrIdxafjoENorektWrxmz9jx8uzH0OrGdUtt7vvHbJk=", - "h1:bX9NNrxI01bzrr+6tLaO8dGFtVjj+mANKVnplitfOyA=", - "h1:t05I6gITCFA5DV+2k/iomK/Me80bGXq/v58AbjOM8PY=", - "h1:tBMyj2ufCNi1ljs4kdm9K1VF32R7k5cLj/JkLs343Qw=", + "h1:/+HxxFGciTGycNTDUPkcbALGsV+qcCPit8UyYX1Beho=", + "h1:2rAM1pT8sXeViTLMU7Tvd5sDSYuZeavFPVbe5xWgJ3A=", + "h1:CkN8DpmNYWU9mvlrmOpzFdPofGjKgrnL8leImrSL9Uk=", + "h1:D4wPDjiMNuWQcB1cYQIbS9M68QwQ2BQ8TdcamU3ig3k=", + "h1:ELINo/Jm4IDo5uZp1deObsOmcx3Lco1IEEowVVDzgtw=", + "h1:KeA9a60dssTVEFWkAuJ2lxztHyYB9bKmUfYanW2POSo=", + "h1:Rxzm2bElqWCmoNZvs/kjr4vPocw4v9Bw4HQHOtYWjzg=", + "h1:k4Gpl4uNxQgm8hDS3jjnzHEmp72Vrw6+bxNn4m4rxu0=", + "h1:mpZ2ZiLutwDNqOLoZwNKZgHSGn5vMvtA+00GKbaWb5U=", + "h1:qQNUA7kQIX30KkARDCpiZy1MFL/j9LiuSCzbOTHSsjo=", + "h1:rfO7hSYJLdpff/s2iuooHtxNacwKq5n03IwvVQ+xbSI=", + "zh:035a6d6e6aa7f117969702873c27344ec4ddd88f676cebc1088316fb26d5c95a", + "zh:11f86935174d8223699cae00b3a705ded1d75a4efb6d4723d3788f5446e1eaa5", + "zh:16d52b5bf8eefa98cd2793122be0c5a7b41767caedbd8a08786aeefb3d0c6856", "zh:1c3e89cf19118fc07d7b04257251fc9897e722c16e0a0df7b07fcd261f8c12e7", - "zh:2cb6dcfa5a3fd04f14b1976455b73f14a15f9f45069fa5fa198f87625df5751a", - "zh:3de1c29f4eb1a176a7f3039a470f26281228f9527a81ebedb86820dd9d5b0007", - "zh:498ef951e158caf10365b39cd95789f5a034c3ef6fca288b37520af0cc2f81e5", - "zh:7b8c8bda91a2b28b9371ac60c2c87a3967d0ca232ab868203062599fca4c832f", - "zh:9b109748e2ccad027d710548491bc8cc0399b69a9b779ac59d53745a95129e3a", - "zh:9d38831a614f67e09ca4bf2377a06e6dda9130a60437f4d73aa422d982b9f17f", - "zh:b6fa6920334e7495118784d15500d676fda4e9c924a03fb5e333faf6646fd15f", - "zh:c01171e3c1b1a6bcc9516f5fc44e4880c67a30541ae66ecf18d3aa0eb92457ad", - "zh:cd3bda1e87953a5288808a10ca9383baa14b4dee623e21a43048f95179bf0323", - "zh:df06f222c38fc37a074e00650e7699927b11a64b1f4170bfa7d823029662a778", - "zh:df502d004558a92808450fc9a7b6f17700d918e3037d21cba73d61e56466e785", + "zh:2fe201c7a1c17279f7674c160861296015d9b9d120de598999d169398ce285c9", + "zh:37bb91dff5b751f0c86a02a12980bdb5935d2ca6cdd249d9eef7eca619f628c0", + "zh:7533a35300e411893a024f858e722e50107dfd7212236d396ebf2ca2b13b7bcc", + "zh:88a95b2cb606439ae2f60ebe63a800580e232e94bc1b02ac7d25d25be10cb511", + "zh:c7b138b6bc34d8a1eff91742b38bce1718d9c50c343393fdfc918bef022ed74f", + "zh:cab09fda45b8a9a9896aedb22f5829745b7e9a01abb8077696bccb170fb01b5f", + "zh:cc4a29f074f1cc25f3abd3a41444f68307f3eb08c4d5f79f60a012b632c1ea05", + "zh:e30e9fe8e04271431cb730a1a888b6da5afeae385e2e53ff7b4114066c1250db", ] } provider "registry.terraform.io/hashicorp/azurerm" { - version = "4.28.0" - constraints = "4.28.0" + version = "4.29.0" + constraints = "4.29.0" hashes = [ - "h1:9d1K3ixylgQjb0pnauzfSde4Ov18dAU4xIJI67IsClk=", - "h1:TblPrHpizApX/fMAvBkliFH9+h9ZkztI0MgjIKxvkt4=", - "h1:UEBGe47w8ed89mKtiO/wvbXmvg46ctgNtjExwoABG0w=", - "h1:Y3P2tfRDRogYuKQBbRWBBWye51u0/O+KlW8XQXMPIAc=", - "h1:b/Lys2QZPazq5wiaTuEvqptyesakJtlo+jtMlNx/YCU=", - "h1:b7rIhedcBt9s6RBnyv4f1F2qrExPFEoGw89PvV4TFZY=", - "h1:iBqZB8RIuUiCP8Z0YHGJbZ0ismLAJVdievq/dwmQuw0=", - "h1:vjvQjYMNNEwVKEnfMWRNLPzfuq7PugOM1Fqia07X2Mo=", - "h1:wQm1FmPs46Iqb+lOhZfBuOnzjUvQdCOgQtEZi6Y1FzU=", - "h1:xS+Np3D2SB8BdyXPPDTUEogBTLHocUr1OsJ3br4G4eU=", - "h1:yK6rbNL1Eft/AEStzzxfbxW5R3iFNEKi0HySqedehHg=", - "zh:1bacb9be85f095b1fa99cf465f01ad4f462389a862d8b302ea6239f0ab891884", - "zh:23626c2ee394eb5640565e8814216bc6a9774fde2705bcb8a7f84207e395ec3b", - "zh:391db081c4f17111196b3cc259b68cdb7faf2e8a775f3d3c7589bdd79b3f20cb", - "zh:534ca243c67f9d1051cd44f5eb8909dbe67ee9285b0cfdf5642aa52bad9fe457", - "zh:59a642160e20a792d306761f4173184adfe12a43bdf620be32399ac9fc62c452", - "zh:974d792562506d0a1d7ba2099219255ba1bfd77801afe7d37b6e77926d41f802", - "zh:a9abf9dad2b77be300fa25d01fb02d6a49e4c3be3459bc236d721c9d9d9af738", - "zh:aa3c397b8c011c1fd7ae99274bcdd260ab766025b558249b90eb78fe40f60576", - "zh:c83e1bdf8649cd6b45cd7ae21ea4e699e0a33efdd6451e0f8ef0b056477a8b67", - "zh:d5a55a03478091dba6d3d3c857477353b268ebf4549ca60e777ddb34cdd50144", - "zh:da8c354a28b568fa5f337751140a8918b1aa0103175ae0c03a30f621b1a99076", + "h1:Bde/KCh2xGVCBx/JnixC3I2fmoRTwHXgsapfQ5QG8eg=", + "h1:IyINmgNiLfWx3Istkt5Mz+IJrDhSMhj3/qQeJlC4qS4=", + "h1:KEJAt0mJAACyIKUB5mCk/wqtxKMhivdeW8w6byz5Ll4=", + "h1:Y4gTSs+ZE5YSJVXG2qmsbXmv9Daq5aGM8Ip/GE6nev8=", + "h1:YtcHvTVfVBKbMCp9esoj527R1UK/hU0Zmo3pyQb8YhQ=", + "h1:atJdgnuqk+w3v4Zzhw2B1FZeYYA4su9JfanwNsx+c8o=", + "h1:c9tmtEdVTb9siGa3hVxPrMVl9ij5zijnD02JMHcHjrE=", + "h1:eN0KhMGVepEPpSA+YN5Kaz/v9PFKCafbkqqBzpLJf+g=", + "h1:hNVKlXTx2duXnR6SNKtyQMx7zSIlrxBu66Z0gbyfv3c=", + "h1:jC2GJo4VzTKnKociUDLVv8/+u9Mz+4scZrqbEasV+Y0=", + "h1:m3xYvc9X0pec0Zd1dpn82ALQ+6vwz56RnF/3CbkI2Eg=", + "zh:16590eea68c7c8aedb7af19f690eb34ab6636ef417b3fa9e06ca038fdb4c44b8", + "zh:1c907dfe44d00a54aa63d443004add90188f9a53ef3e919aff8aba92f715f42b", + "zh:258a0ff4198d80cae33c89091cd556d84c1b522c4416458484f23719a0cdf4cc", + "zh:587f5e9b2b33e51b18fb0f372025c961c3f57f2958b388459dd8432412650bda", + "zh:6318ca03bd9dbac272a75bb193688c7d4c4b45c7460289820528f31bcd6c3fe9", + "zh:63e4e8128e26e4c3e0c3b6582ef527245eb35eb5c80ad278dc675ebdf71edeaf", + "zh:845c898a27a84a15ba26e95ee66ac9563f81bc672b5ca216af82d87fe09bd5f8", + "zh:8fa6434fa212d5501185f0adc985d3a3c1e0f449c78f040a4ca640cb1e809cac", + "zh:9b49c0d72ab19aab43b2b48d23c5dddbbe29afae1569a987e6f20ed4c80ddf4c", + "zh:b14cc1ee5e3acf52490de7dd9791cce7953c0ee4bcccf0306aafd256568bd69f", + "zh:cd444836b2579fa42bfca2ae6145d394c41b6438b1ae01078c060bfaf803bb4d", "zh:f569b65999264a9416862bca5cd2a6177d94ccb0424f3a4ef424428912b9cb3c", ] } diff --git a/terraform/infrastructure/iam/azure/main.tf b/terraform/infrastructure/iam/azure/main.tf index 7e516dc78..fe1672165 100644 --- a/terraform/infrastructure/iam/azure/main.tf +++ b/terraform/infrastructure/iam/azure/main.tf @@ -2,11 +2,11 @@ terraform { required_providers { azurerm = { source = "hashicorp/azurerm" - version = "4.28.0" + version = "4.29.0" } azuread = { source = "hashicorp/azuread" - version = "3.3.0" + version = "3.4.0" } } } diff --git a/terraform/infrastructure/iam/gcp/.terraform.lock.hcl b/terraform/infrastructure/iam/gcp/.terraform.lock.hcl index d1216f0b7..2fbbe32c2 100644 --- a/terraform/infrastructure/iam/gcp/.terraform.lock.hcl +++ b/terraform/infrastructure/iam/gcp/.terraform.lock.hcl @@ -2,31 +2,31 @@ # Manual edits may be lost in future updates. provider "registry.terraform.io/hashicorp/google" { - version = "6.35.0" - constraints = "6.35.0" + version = "6.36.0" + constraints = "6.36.0" hashes = [ - "h1:36Rel1YhHm59b4qPfPDShmhsWxuDwUXexWDzr0KVNvM=", - "h1:3vCwmfdWYzv+cvjMT2ZbCGIX2QR1sqK3gU3Y79ef2bA=", - "h1:AMNRbWDZ/f8SDNjjbHihr+dCJuQvzjBBwRcyQ5hHubg=", - "h1:C/DeErZ6xlYeEMta+wFUCnXKL4X57i8JOG6ukecZCDg=", - "h1:CJKihKbsYi8PEBFt8wcIwY0PWcLqYjcfT6Yt2xNS1R4=", - "h1:CfN4SgJEs+WRxOW5jGVNO8sX/EmTIxcptk3eWiocXQQ=", - "h1:EKH+bJA8Spgw1C7K+lwWwj3VdCo5Be2f+Uf/lAEnW/4=", - "h1:MgOEEt6tmoecnF5XhSwH6NVlOlVeuullrerheY15xZc=", - "h1:XNON8oBC1Q0EtuAAT3w1/+rTW/K9hz6sc/4+oIwhXoQ=", - "h1:cwsqYGV0m2nME4R39OiG8YbDyayea5l2aahm9y/YHB0=", - "h1:r9qIIUqixCGkty+PnpgJNdvuMyBkrM7dgnup0h8tff8=", - "zh:0f7b8da0050470b074c2c5124359a407a15298dc3374cb2fbf5d243f7a390712", - "zh:27a8774e750a8b6ff296240d74ba322c3ac626ea847e150d745c014440c66927", - "zh:3cf134f088f31811f35c5996282b316308ad7a02b801cc84712696d536ef57e3", - "zh:3e08b3b451b33101f5d65fddc0d4f00e53260fcc8702ddd3d2ebab93b3553df1", - "zh:5fe57182514244b410c33d1b7bde8b1a78442323d97b13d0b08ad0fac884ad55", - "zh:6db9431b1bb9ac198eb5e0e6706d2c12ad5d47961e09d731be91cfd97f17c18b", - "zh:76309d66d6806f75639126a49db996b51496fa64d2313466f46f476284802ab3", - "zh:897c2cb1411dfed658419de9be24a2b82f64e236449f45f76d9a13c244c872de", - "zh:a5b4e8771fe4547979a767c60cf44b590f52f296d75f161bfa032c6fe6364bc2", - "zh:bb3297ad9bdf20b9d460fe0801ae3d555460bad3bfbf0c062094afa27125afc1", - "zh:cb7ed92b9af88f29f8faef4de844d57d3f4aeccce92edf3b4a33e8b4c6049b38", + "h1:7UUG6owE+FafOHh0JK8BTM0yOlO7/XbHiEDh087fd0E=", + "h1:80HOG2KFPy07zgflMevKhsKrU8tEFvVncVMZOiffqV0=", + "h1:8aaMc8jT1GL3I15Aiz9Lr6k8+u79Fo3D6KA4Np+JUI8=", + "h1:aQ8E+XveXDO6zbqO1upcKqkrWr+5dwxowmQgMZ/zgrM=", + "h1:e/3n+WKR/ikY8m/MIAHOvH1HFY1fng76SEpnvGStxMU=", + "h1:fcjI1cXeKYJDWcgUXL+UPD23HIN4IDJjlc7XVD3i3Bc=", + "h1:iQx5xJnQvBN2aUdQbWZQPmtuT0xjfaNpFJD3qzOvC7U=", + "h1:kRbYOLtROkOjc3XMgptzFWKdgRCjyf2FH0UTlCJXkg8=", + "h1:lxi5P8TBMfiKk88FI4xM2Lnwlk2+Q3r9oa4yrg83x1w=", + "h1:m085EpkXRmg1TqRbPP6RxdVmlwJJujvyfMtznvURS04=", + "h1:vvvbnteZLIMosgsxO6YXDgxGYdU5BuSxPD1w4f4LV6c=", + "zh:0a67432c04d4c74829632cc5669b8c5988f837259333307e07c2915a0529b3fb", + "zh:4559afe21bb59e8fb9e3e7414ea65b6be233e8f217e8683dd0e9c347ecadf910", + "zh:58a34fe3b28271deba9a44db1e704c2844f2e30e252ded5f200a8f9af170d52d", + "zh:6b07f388b4fb2189d9fe3a058831e5c755092f7bd5f7388a1c0d9583f8c43ef0", + "zh:6fae25f93bf4a6fd59ce0f9d05e8551b65b4be7084f5e6e5f528ab011dbbef6a", + "zh:73be19906c569f1d46b8f88d3e846bd8dabd6ed65d8ba9a91f67da5365b534dc", + "zh:7b047330342f600e92c02e248f72eefae1a2e01c16ef45cc533942eb73c49c06", + "zh:9fecf5cdf1a16b9b9c1e83dc6129a40bfbc9e640252d2afddd34dc61de213330", + "zh:c557ea7357880615af290452ff06bc23bd3821132783240bd7cd75aadf16a04a", + "zh:dc11ad9a0b595b70490326563ea5f77de9c69aba0ee959971392e46b10a3c246", + "zh:ed8dc5d5ce3d8e3c1648c3fc6f48a19da9ed38d0157c33019c74b7790480c29f", "zh:f569b65999264a9416862bca5cd2a6177d94ccb0424f3a4ef424428912b9cb3c", ] } diff --git a/terraform/infrastructure/iam/gcp/main.tf b/terraform/infrastructure/iam/gcp/main.tf index 15b5dd3be..3c45be09e 100644 --- a/terraform/infrastructure/iam/gcp/main.tf +++ b/terraform/infrastructure/iam/gcp/main.tf @@ -2,7 +2,7 @@ terraform { required_providers { google = { source = "hashicorp/google" - version = "6.35.0" + version = "6.36.0" } } } From 7163c5909da1aed60dd1609fdbdd61cc00002396 Mon Sep 17 00:00:00 2001 From: edgelessci <71088502+edgelessci@users.noreply.github.com> Date: Fri, 23 May 2025 07:32:57 +0200 Subject: [PATCH 290/311] image: update measurements and image version (#3841) Co-authored-by: edgelessci --- .../measurements/measurements_enterprise.go | 16 ++++++++-------- internal/config/image_enterprise.go | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/internal/attestation/measurements/measurements_enterprise.go b/internal/attestation/measurements/measurements_enterprise.go index 92209c6d1..6d17aec12 100644 --- a/internal/attestation/measurements/measurements_enterprise.go +++ b/internal/attestation/measurements/measurements_enterprise.go @@ -19,14 +19,14 @@ package measurements // revive:disable:var-naming var ( - aws_AWSNitroTPM = M{0: {Expected: []byte{0x73, 0x7f, 0x76, 0x7a, 0x12, 0xf5, 0x4e, 0x70, 0xee, 0xcb, 0xc8, 0x68, 0x40, 0x11, 0x32, 0x3a, 0xe2, 0xfe, 0x2d, 0xd9, 0xf9, 0x07, 0x85, 0x57, 0x79, 0x69, 0xd7, 0xa2, 0x01, 0x3e, 0x8c, 0x12}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x4f, 0x65, 0xb9, 0x4e, 0xb0, 0x72, 0x35, 0xd5, 0xa7, 0xb2, 0x61, 0xda, 0x6e, 0x4a, 0x33, 0x1f, 0xaf, 0xa1, 0xc0, 0x43, 0xa5, 0x5c, 0x8b, 0x4d, 0xf8, 0xf3, 0xa7, 0x27, 0x4e, 0x5d, 0x80, 0xe6}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x6a, 0x51, 0xe9, 0x9a, 0x37, 0x30, 0x81, 0x05, 0x94, 0x23, 0x95, 0x58, 0xba, 0xf8, 0x70, 0x57, 0xe6, 0x35, 0x70, 0x94, 0x9e, 0x5d, 0x79, 0x81, 0x18, 0xff, 0x2e, 0x26, 0x94, 0x88, 0xc0, 0x23}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x9b, 0x09, 0xae, 0xa2, 0x43, 0xd9, 0x8d, 0xb8, 0xc5, 0xe7, 0xc2, 0x15, 0x2a, 0xb8, 0xee, 0x19, 0xf8, 0x1d, 0xd7, 0x22, 0x7e, 0x2b, 0x92, 0xbd, 0xef, 0xba, 0xf6, 0x01, 0xa5, 0xe0, 0x2e, 0xcb}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - aws_AWSSEVSNP = M{0: {Expected: []byte{0xd6, 0xdf, 0x85, 0x53, 0x58, 0xf5, 0xb1, 0x0f, 0x06, 0xf0, 0xfa, 0xb3, 0xf4, 0x08, 0xad, 0x26, 0xcd, 0x16, 0x5a, 0x29, 0x49, 0xba, 0xd6, 0x9e, 0x2c, 0xc7, 0x56, 0x92, 0x52, 0x9e, 0x66, 0x2a}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x6d, 0x28, 0x7f, 0x6a, 0x46, 0xf4, 0xa1, 0xed, 0x3a, 0xe5, 0x27, 0x3d, 0xfe, 0xb8, 0x82, 0x12, 0xe9, 0x89, 0x84, 0xbd, 0x59, 0x42, 0x7e, 0xa3, 0x86, 0x43, 0x6d, 0x5e, 0xaf, 0x1b, 0x70, 0xa5}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x0b, 0xff, 0x09, 0xd9, 0xb4, 0xbb, 0xb1, 0xa4, 0x66, 0x89, 0xf6, 0x11, 0x29, 0x13, 0x25, 0x17, 0x86, 0xba, 0x72, 0x75, 0x13, 0x90, 0x41, 0x27, 0x0b, 0xf6, 0xb1, 0x32, 0xfa, 0x1e, 0xae, 0x68}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xc9, 0x9b, 0x47, 0xde, 0xc1, 0x25, 0x77, 0x41, 0x25, 0x30, 0xff, 0x8c, 0x98, 0x92, 0xb6, 0xa9, 0xb8, 0xe8, 0xc4, 0xb5, 0xcc, 0xfc, 0xae, 0x69, 0xd0, 0x43, 0xce, 0xd4, 0xe9, 0x3f, 0x5c, 0xc0}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - azure_AzureSEVSNP = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x94, 0x11, 0x3a, 0x82, 0xf8, 0x29, 0x94, 0x63, 0x06, 0x30, 0xab, 0xae, 0x0e, 0x60, 0x64, 0xf1, 0x54, 0x0f, 0xf9, 0x3b, 0xa8, 0xae, 0xab, 0x75, 0x6d, 0x60, 0x5f, 0xdf, 0x52, 0x9f, 0x2e, 0xdc}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x32, 0x93, 0x52, 0x29, 0x97, 0x9c, 0x14, 0x01, 0x32, 0xb7, 0xe9, 0x7f, 0x43, 0x8f, 0xbb, 0x97, 0x43, 0x55, 0x80, 0xb6, 0xb2, 0xfc, 0xc1, 0x81, 0x10, 0x29, 0x36, 0x2e, 0xf7, 0x37, 0x36, 0xb9}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x8a, 0xd7, 0xf9, 0x59, 0xe6, 0xa0, 0x77, 0xbe, 0xec, 0xf4, 0xeb, 0x47, 0x44, 0xca, 0xad, 0x0f, 0x83, 0x4c, 0xf6, 0xf0, 0x5c, 0x27, 0x1a, 0x89, 0x49, 0x9d, 0x0e, 0x77, 0x7b, 0xa5, 0x29, 0x4a}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - azure_AzureTDX = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x91, 0x3c, 0x11, 0xfa, 0xfd, 0xe9, 0xcd, 0x7f, 0x11, 0xeb, 0x8e, 0xc6, 0x3f, 0x86, 0x57, 0x64, 0x0c, 0xb0, 0xf4, 0xa6, 0xb4, 0x16, 0x1d, 0xc2, 0x60, 0xc2, 0x5b, 0x64, 0xf1, 0xfd, 0xaf, 0xed}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x3c, 0x89, 0x68, 0xce, 0x17, 0xee, 0x05, 0xd8, 0x52, 0x58, 0x7f, 0x9b, 0x7b, 0x39, 0x89, 0x6d, 0x42, 0x73, 0xf1, 0x45, 0xf3, 0x1a, 0x51, 0xc6, 0x57, 0x87, 0x50, 0x00, 0x9a, 0xbe, 0x21, 0x66}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x08, 0xc1, 0xe9, 0xe5, 0xc8, 0x4e, 0xf7, 0x57, 0xde, 0x2a, 0xae, 0xf1, 0x90, 0xc9, 0x72, 0x64, 0x1b, 0x0f, 0x80, 0x3b, 0xad, 0x9f, 0x98, 0xf2, 0xa3, 0xa1, 0x95, 0x8c, 0x95, 0xf0, 0x17, 0xdd}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + aws_AWSNitroTPM = M{0: {Expected: []byte{0x73, 0x7f, 0x76, 0x7a, 0x12, 0xf5, 0x4e, 0x70, 0xee, 0xcb, 0xc8, 0x68, 0x40, 0x11, 0x32, 0x3a, 0xe2, 0xfe, 0x2d, 0xd9, 0xf9, 0x07, 0x85, 0x57, 0x79, 0x69, 0xd7, 0xa2, 0x01, 0x3e, 0x8c, 0x12}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x03, 0x2e, 0x81, 0x8c, 0x29, 0x9d, 0x5c, 0x7a, 0xd9, 0x8d, 0x59, 0xad, 0x7a, 0x08, 0x74, 0x43, 0x71, 0x8e, 0x49, 0xc8, 0x54, 0x0e, 0xc2, 0xd0, 0x1f, 0x5f, 0x2a, 0x88, 0xbf, 0x0d, 0xc8, 0x37}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x00, 0xc2, 0xfd, 0xd0, 0x2e, 0x80, 0x5d, 0x16, 0xef, 0x7d, 0xfc, 0xea, 0x78, 0x94, 0xea, 0xe5, 0x8e, 0xd8, 0x47, 0x75, 0x2c, 0x78, 0xc5, 0x20, 0xf2, 0x5b, 0x52, 0x2b, 0x93, 0xc4, 0x7f, 0xaf}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xda, 0x0a, 0x3e, 0x1d, 0x78, 0x14, 0x56, 0xba, 0xfa, 0xe9, 0xfe, 0x7b, 0xab, 0x39, 0x1b, 0x2e, 0x4d, 0xf4, 0x36, 0xe7, 0x80, 0x28, 0xd3, 0x24, 0x60, 0x55, 0xc6, 0xb4, 0x0f, 0xf4, 0x9f, 0x76}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + aws_AWSSEVSNP = M{0: {Expected: []byte{0xd6, 0xdf, 0x85, 0x53, 0x58, 0xf5, 0xb1, 0x0f, 0x06, 0xf0, 0xfa, 0xb3, 0xf4, 0x08, 0xad, 0x26, 0xcd, 0x16, 0x5a, 0x29, 0x49, 0xba, 0xd6, 0x9e, 0x2c, 0xc7, 0x56, 0x92, 0x52, 0x9e, 0x66, 0x2a}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x28, 0x16, 0xc9, 0x29, 0x57, 0x4a, 0x37, 0xb9, 0xac, 0x3d, 0x16, 0x43, 0x6b, 0xf4, 0x76, 0xd3, 0x66, 0xe3, 0x37, 0x80, 0x94, 0x9f, 0x7e, 0xa0, 0x00, 0x36, 0x1e, 0xde, 0x80, 0x81, 0x41, 0x21}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x04, 0x79, 0x14, 0xce, 0xb9, 0xa4, 0x5f, 0xbd, 0xbf, 0xc6, 0xef, 0x91, 0x79, 0xd9, 0x56, 0x4d, 0xc7, 0x10, 0x3e, 0xc8, 0x73, 0x80, 0x53, 0xa0, 0x02, 0x13, 0x68, 0xba, 0x6d, 0x00, 0x36, 0x8f}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x07, 0xc5, 0xf3, 0x92, 0x70, 0x5f, 0xa1, 0xf3, 0xc7, 0x32, 0x56, 0x1c, 0xf3, 0x4d, 0xf4, 0x2b, 0xbd, 0x14, 0x00, 0xf7, 0x76, 0xdb, 0xb7, 0x4c, 0xaf, 0x80, 0x16, 0xf8, 0x05, 0x02, 0xb0, 0x97}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + azure_AzureSEVSNP = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x9e, 0xda, 0xa7, 0x9c, 0xf6, 0xa4, 0x48, 0xcd, 0x51, 0x76, 0x82, 0xcd, 0xe1, 0x7a, 0xcd, 0x8a, 0x85, 0xe6, 0x23, 0xd4, 0xed, 0x0f, 0xee, 0x19, 0x5c, 0xc9, 0x51, 0x1d, 0x22, 0xff, 0xf5, 0xf4}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xe9, 0x48, 0xb0, 0xdc, 0xf1, 0x62, 0x0c, 0xe8, 0x07, 0x6e, 0x71, 0x7c, 0x34, 0x59, 0x2c, 0xb9, 0x5e, 0x2a, 0x44, 0xf2, 0xcf, 0xbe, 0x00, 0xbe, 0x0f, 0xaa, 0x53, 0xc3, 0x09, 0x96, 0x14, 0x62}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x16, 0x10, 0x54, 0x9e, 0x02, 0x35, 0x91, 0x4a, 0x25, 0x28, 0x16, 0xd2, 0x22, 0x80, 0x05, 0xc2, 0x0c, 0x2c, 0x82, 0xca, 0xae, 0xdb, 0x67, 0x5d, 0x21, 0x39, 0x46, 0x57, 0xee, 0xf0, 0x96, 0xc1}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + azure_AzureTDX = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x92, 0x79, 0x6b, 0x60, 0xb4, 0x8e, 0x9b, 0xcf, 0xbd, 0x7d, 0xc9, 0x16, 0x12, 0xb6, 0x5b, 0x9c, 0xd2, 0x0b, 0xe0, 0xf3, 0x55, 0xad, 0x8e, 0x4e, 0xdc, 0x42, 0x40, 0x3d, 0xaf, 0x22, 0x4e, 0x1e}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x26, 0x5e, 0xbb, 0x0e, 0x5e, 0x90, 0x3f, 0x76, 0x0b, 0x93, 0xa1, 0x8e, 0x00, 0x79, 0x4d, 0xee, 0x1e, 0x8a, 0xbb, 0xdf, 0x99, 0xa2, 0x38, 0x50, 0x42, 0xa0, 0x18, 0x11, 0xfc, 0x3b, 0x3b, 0x7e}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xf9, 0x41, 0xa5, 0xaa, 0x12, 0xba, 0xfa, 0xf0, 0xe4, 0x96, 0xe6, 0x19, 0x20, 0x2e, 0xd3, 0x10, 0x15, 0x08, 0xcf, 0x42, 0x05, 0xe9, 0xc2, 0xff, 0x70, 0x46, 0x21, 0x7b, 0x01, 0x2f, 0x81, 0xed}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} azure_AzureTrustedLaunch M - gcp_GCPSEVES = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x6d, 0xe2, 0xc6, 0xa3, 0x2f, 0x49, 0x93, 0x3c, 0x59, 0xe0, 0x40, 0x92, 0x9f, 0x32, 0xc3, 0x26, 0x75, 0xb2, 0xf4, 0x25, 0xb1, 0x7d, 0xb6, 0x9d, 0xf8, 0x69, 0xab, 0xfc, 0x88, 0x84, 0x31, 0xf6}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xee, 0x0f, 0x10, 0xec, 0x8c, 0x1a, 0x03, 0xde, 0x3e, 0xc3, 0xe6, 0xc6, 0x4e, 0x6f, 0x68, 0x60, 0xd9, 0x5d, 0x8b, 0xeb, 0x7f, 0x07, 0x68, 0xc9, 0x8c, 0xbf, 0x68, 0x02, 0x42, 0xf5, 0x9a, 0x0c}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xbb, 0x0f, 0xa4, 0x62, 0xf4, 0xa8, 0xe4, 0x0d, 0xa5, 0xc1, 0x22, 0x70, 0x32, 0xcc, 0x94, 0xb2, 0xbd, 0x86, 0x8e, 0x3d, 0x60, 0xf8, 0x5b, 0x15, 0xa7, 0x3f, 0x7a, 0x9e, 0x68, 0xbc, 0x71, 0xad}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - gcp_GCPSEVSNP = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x45, 0x7b, 0x05, 0xc6, 0x90, 0x92, 0xa7, 0x1b, 0x5c, 0x06, 0xbe, 0x9c, 0xe8, 0x70, 0xd1, 0x47, 0xe7, 0x24, 0x96, 0x7d, 0xe7, 0xee, 0x0b, 0x5e, 0xac, 0xe6, 0x1b, 0x5c, 0x7f, 0x09, 0x9d, 0xc5}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xda, 0x74, 0x7d, 0x76, 0xb1, 0xbf, 0xb3, 0x25, 0xbe, 0x40, 0x6a, 0x1d, 0x4f, 0x42, 0x6d, 0xbc, 0x1c, 0xc5, 0x2a, 0xe9, 0xbc, 0x4e, 0x4d, 0x4e, 0x3e, 0xfa, 0x74, 0x0c, 0x8b, 0xc7, 0xfd, 0x9a}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xa0, 0x42, 0x57, 0xa4, 0xd4, 0x4d, 0x69, 0xd3, 0x4f, 0xa3, 0xa5, 0x78, 0xf0, 0xfa, 0x95, 0x19, 0x34, 0x83, 0xbb, 0xb6, 0xbb, 0xa5, 0xa0, 0x18, 0x99, 0x3c, 0x35, 0xdf, 0xb2, 0x2a, 0xf3, 0x9e}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - openstack_QEMUVTPM = M{4: {Expected: []byte{0xf1, 0x98, 0xf6, 0xc8, 0x03, 0x15, 0x8f, 0x8c, 0xe4, 0xc9, 0x4f, 0x40, 0x91, 0x64, 0x05, 0xb4, 0xd9, 0x0d, 0xd4, 0xb1, 0x08, 0xad, 0x44, 0xcb, 0x6f, 0xef, 0x60, 0x58, 0x5f, 0x13, 0x09, 0xf6}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x25, 0x7b, 0x0c, 0x7f, 0x5b, 0x36, 0x7f, 0xd7, 0x6d, 0xd1, 0x60, 0xbe, 0x01, 0xbb, 0x8e, 0x87, 0x02, 0x6c, 0x87, 0xc9, 0x20, 0x41, 0xb3, 0xd0, 0x1c, 0x32, 0xa4, 0xb8, 0xfa, 0x0b, 0x2f, 0x51}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x27, 0xf9, 0x9e, 0x75, 0x7f, 0x4e, 0x12, 0x45, 0x94, 0xf1, 0x3c, 0xce, 0xa9, 0xdc, 0x6a, 0xc1, 0x82, 0xd4, 0x55, 0x24, 0x71, 0x59, 0xcd, 0xf5, 0x23, 0x27, 0x48, 0x94, 0xbc, 0xda, 0xb0, 0x2d}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + gcp_GCPSEVES = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x7f, 0x6d, 0x7c, 0xee, 0x61, 0xc7, 0x03, 0x15, 0x27, 0xe4, 0x3c, 0x82, 0xe5, 0x8b, 0x11, 0x39, 0x2c, 0xce, 0x2a, 0x25, 0xb4, 0xd6, 0x2b, 0xee, 0xcd, 0x5c, 0x65, 0x9a, 0xf3, 0x2a, 0x19, 0x2e}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x55, 0xcd, 0xd3, 0xb8, 0xa4, 0xf4, 0x77, 0x5b, 0x49, 0x98, 0x5b, 0x75, 0x38, 0xa9, 0x98, 0x37, 0x84, 0x3c, 0x96, 0x21, 0x91, 0x74, 0xbf, 0x30, 0x63, 0x1f, 0xd8, 0x08, 0x28, 0x3b, 0x54, 0x19}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x56, 0x5f, 0xd2, 0x44, 0xe7, 0xa2, 0xe9, 0xd1, 0xa6, 0xd7, 0x1d, 0x8a, 0x48, 0x4a, 0x55, 0xa3, 0x2c, 0x28, 0x24, 0x96, 0x11, 0xa1, 0x73, 0x2a, 0x30, 0x7c, 0x71, 0x1a, 0x42, 0xa0, 0xaa, 0x70}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + gcp_GCPSEVSNP = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x1c, 0xf4, 0x82, 0xf1, 0xce, 0x4b, 0xc3, 0x39, 0x9e, 0x11, 0x3f, 0x12, 0x4e, 0xed, 0xcb, 0xa5, 0x1a, 0xb7, 0x3d, 0xb3, 0xa5, 0x0d, 0xc0, 0xa3, 0x96, 0x33, 0x78, 0x2a, 0x1a, 0x31, 0xfa, 0x45}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x4d, 0xdd, 0x52, 0x0e, 0xac, 0x6c, 0xb6, 0xa5, 0xe7, 0xa0, 0x78, 0xef, 0x5c, 0x66, 0x1a, 0x38, 0x3f, 0x79, 0xaf, 0xfb, 0x5c, 0xba, 0xf9, 0x1f, 0x68, 0x82, 0x9c, 0x7d, 0x21, 0x8d, 0xd4, 0xb8}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xcf, 0x13, 0x9a, 0x83, 0xc1, 0x1f, 0x97, 0xb3, 0x3a, 0x82, 0x74, 0xca, 0x94, 0xc1, 0x71, 0x03, 0xd1, 0xf8, 0xba, 0x49, 0xd3, 0x95, 0x57, 0x38, 0x21, 0x38, 0x95, 0x5c, 0x54, 0x31, 0x85, 0xa0}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + openstack_QEMUVTPM = M{4: {Expected: []byte{0x6f, 0x30, 0x36, 0x8f, 0x4f, 0x40, 0xfb, 0xf5, 0x8a, 0x7f, 0x06, 0x7e, 0xdb, 0x4f, 0xec, 0x13, 0xbb, 0x4d, 0xba, 0x20, 0x14, 0xe5, 0x14, 0x81, 0x34, 0xc9, 0xaf, 0x98, 0xdf, 0xf3, 0xbf, 0x58}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xb7, 0xf2, 0x81, 0x20, 0xaf, 0xee, 0x38, 0x2d, 0x0b, 0x95, 0x25, 0xb9, 0x6d, 0xbb, 0x0a, 0x83, 0xc8, 0xdf, 0x87, 0x35, 0x79, 0xd3, 0xa5, 0x5d, 0xc7, 0x6b, 0xed, 0x5c, 0x3d, 0x83, 0xa5, 0x6f}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xaa, 0xfe, 0xca, 0x42, 0x04, 0x1e, 0x6b, 0xee, 0xa0, 0xb3, 0x7e, 0xa6, 0x51, 0xd7, 0x02, 0xaf, 0x98, 0xb0, 0xdf, 0x90, 0xf6, 0xf5, 0x43, 0x63, 0x91, 0x8b, 0x89, 0xb6, 0xc5, 0x40, 0x94, 0x31}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} qemu_QEMUTDX M - qemu_QEMUVTPM = M{4: {Expected: []byte{0x49, 0xaf, 0xff, 0xe4, 0x16, 0x24, 0x65, 0xa9, 0xfa, 0xe8, 0x36, 0xb0, 0x24, 0x3b, 0x6a, 0x44, 0x00, 0xc7, 0xc3, 0xec, 0xfb, 0x3a, 0x18, 0x93, 0x49, 0x7c, 0xd7, 0x0a, 0xf5, 0xd3, 0x78, 0x85}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xa0, 0x88, 0xbc, 0x76, 0x67, 0x9f, 0x50, 0x9d, 0x27, 0x61, 0x75, 0xcb, 0xce, 0x31, 0x64, 0x27, 0xce, 0xb9, 0xca, 0xfa, 0xa6, 0x18, 0xa7, 0x00, 0x6c, 0x66, 0x83, 0x5b, 0x2a, 0x23, 0x57, 0x56}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x69, 0xd5, 0x4e, 0x8a, 0xf2, 0x5a, 0xa2, 0xf7, 0xa5, 0x04, 0x3a, 0x82, 0xae, 0x92, 0x82, 0x8d, 0x06, 0xea, 0xff, 0x7c, 0x7e, 0xed, 0xab, 0xa6, 0x9a, 0xde, 0x47, 0xe8, 0x2a, 0xc8, 0xb3, 0xa2}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + qemu_QEMUVTPM = M{4: {Expected: []byte{0xbe, 0x04, 0x30, 0xfe, 0x6d, 0x26, 0x75, 0xe2, 0x7b, 0xce, 0xef, 0xda, 0xb1, 0xe7, 0xea, 0xee, 0x6f, 0x3f, 0xce, 0x1a, 0xfa, 0x8d, 0x27, 0x24, 0xff, 0xda, 0x0a, 0xc9, 0x64, 0x89, 0x61, 0xfe}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xb9, 0x3c, 0xcc, 0x07, 0xcd, 0x38, 0x26, 0x55, 0x4c, 0xf7, 0x48, 0xb5, 0xa9, 0x7b, 0x07, 0xf0, 0x4f, 0x78, 0x7d, 0x1b, 0x02, 0x00, 0x80, 0xe3, 0x67, 0x07, 0x04, 0x36, 0xf4, 0x43, 0x6a, 0xdd}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x2b, 0x3c, 0xc1, 0xe3, 0x03, 0x0a, 0x74, 0x95, 0x15, 0x49, 0xc5, 0x5d, 0x5b, 0x97, 0xe1, 0xe9, 0x2e, 0xa2, 0x83, 0xbf, 0xd1, 0x8a, 0xd4, 0xd8, 0x75, 0xee, 0x15, 0xbe, 0xb0, 0x5e, 0xc6, 0x58}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} ) diff --git a/internal/config/image_enterprise.go b/internal/config/image_enterprise.go index 4313d856c..a3d38a611 100644 --- a/internal/config/image_enterprise.go +++ b/internal/config/image_enterprise.go @@ -10,5 +10,5 @@ package config const ( // defaultImage is the default image to use. - defaultImage = "ref/main/stream/nightly/v2.24.0-pre.0.20250520083147-5b0073ffe87a" + defaultImage = "ref/main/stream/nightly/v2.24.0-pre.0.20250522095204-01f9a30017c4" ) From b9c8379d5424f804723df5509c78e781d7e9075d Mon Sep 17 00:00:00 2001 From: edgelessci <71088502+edgelessci@users.noreply.github.com> Date: Fri, 30 May 2025 08:35:27 +0200 Subject: [PATCH 291/311] image: update measurements and image version (#3849) Co-authored-by: edgelessci --- .../measurements/measurements_enterprise.go | 16 ++++++++-------- internal/config/image_enterprise.go | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/internal/attestation/measurements/measurements_enterprise.go b/internal/attestation/measurements/measurements_enterprise.go index 6d17aec12..85ddef6b8 100644 --- a/internal/attestation/measurements/measurements_enterprise.go +++ b/internal/attestation/measurements/measurements_enterprise.go @@ -19,14 +19,14 @@ package measurements // revive:disable:var-naming var ( - aws_AWSNitroTPM = M{0: {Expected: []byte{0x73, 0x7f, 0x76, 0x7a, 0x12, 0xf5, 0x4e, 0x70, 0xee, 0xcb, 0xc8, 0x68, 0x40, 0x11, 0x32, 0x3a, 0xe2, 0xfe, 0x2d, 0xd9, 0xf9, 0x07, 0x85, 0x57, 0x79, 0x69, 0xd7, 0xa2, 0x01, 0x3e, 0x8c, 0x12}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x03, 0x2e, 0x81, 0x8c, 0x29, 0x9d, 0x5c, 0x7a, 0xd9, 0x8d, 0x59, 0xad, 0x7a, 0x08, 0x74, 0x43, 0x71, 0x8e, 0x49, 0xc8, 0x54, 0x0e, 0xc2, 0xd0, 0x1f, 0x5f, 0x2a, 0x88, 0xbf, 0x0d, 0xc8, 0x37}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x00, 0xc2, 0xfd, 0xd0, 0x2e, 0x80, 0x5d, 0x16, 0xef, 0x7d, 0xfc, 0xea, 0x78, 0x94, 0xea, 0xe5, 0x8e, 0xd8, 0x47, 0x75, 0x2c, 0x78, 0xc5, 0x20, 0xf2, 0x5b, 0x52, 0x2b, 0x93, 0xc4, 0x7f, 0xaf}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xda, 0x0a, 0x3e, 0x1d, 0x78, 0x14, 0x56, 0xba, 0xfa, 0xe9, 0xfe, 0x7b, 0xab, 0x39, 0x1b, 0x2e, 0x4d, 0xf4, 0x36, 0xe7, 0x80, 0x28, 0xd3, 0x24, 0x60, 0x55, 0xc6, 0xb4, 0x0f, 0xf4, 0x9f, 0x76}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - aws_AWSSEVSNP = M{0: {Expected: []byte{0xd6, 0xdf, 0x85, 0x53, 0x58, 0xf5, 0xb1, 0x0f, 0x06, 0xf0, 0xfa, 0xb3, 0xf4, 0x08, 0xad, 0x26, 0xcd, 0x16, 0x5a, 0x29, 0x49, 0xba, 0xd6, 0x9e, 0x2c, 0xc7, 0x56, 0x92, 0x52, 0x9e, 0x66, 0x2a}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x28, 0x16, 0xc9, 0x29, 0x57, 0x4a, 0x37, 0xb9, 0xac, 0x3d, 0x16, 0x43, 0x6b, 0xf4, 0x76, 0xd3, 0x66, 0xe3, 0x37, 0x80, 0x94, 0x9f, 0x7e, 0xa0, 0x00, 0x36, 0x1e, 0xde, 0x80, 0x81, 0x41, 0x21}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x04, 0x79, 0x14, 0xce, 0xb9, 0xa4, 0x5f, 0xbd, 0xbf, 0xc6, 0xef, 0x91, 0x79, 0xd9, 0x56, 0x4d, 0xc7, 0x10, 0x3e, 0xc8, 0x73, 0x80, 0x53, 0xa0, 0x02, 0x13, 0x68, 0xba, 0x6d, 0x00, 0x36, 0x8f}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x07, 0xc5, 0xf3, 0x92, 0x70, 0x5f, 0xa1, 0xf3, 0xc7, 0x32, 0x56, 0x1c, 0xf3, 0x4d, 0xf4, 0x2b, 0xbd, 0x14, 0x00, 0xf7, 0x76, 0xdb, 0xb7, 0x4c, 0xaf, 0x80, 0x16, 0xf8, 0x05, 0x02, 0xb0, 0x97}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - azure_AzureSEVSNP = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x9e, 0xda, 0xa7, 0x9c, 0xf6, 0xa4, 0x48, 0xcd, 0x51, 0x76, 0x82, 0xcd, 0xe1, 0x7a, 0xcd, 0x8a, 0x85, 0xe6, 0x23, 0xd4, 0xed, 0x0f, 0xee, 0x19, 0x5c, 0xc9, 0x51, 0x1d, 0x22, 0xff, 0xf5, 0xf4}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xe9, 0x48, 0xb0, 0xdc, 0xf1, 0x62, 0x0c, 0xe8, 0x07, 0x6e, 0x71, 0x7c, 0x34, 0x59, 0x2c, 0xb9, 0x5e, 0x2a, 0x44, 0xf2, 0xcf, 0xbe, 0x00, 0xbe, 0x0f, 0xaa, 0x53, 0xc3, 0x09, 0x96, 0x14, 0x62}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x16, 0x10, 0x54, 0x9e, 0x02, 0x35, 0x91, 0x4a, 0x25, 0x28, 0x16, 0xd2, 0x22, 0x80, 0x05, 0xc2, 0x0c, 0x2c, 0x82, 0xca, 0xae, 0xdb, 0x67, 0x5d, 0x21, 0x39, 0x46, 0x57, 0xee, 0xf0, 0x96, 0xc1}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - azure_AzureTDX = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x92, 0x79, 0x6b, 0x60, 0xb4, 0x8e, 0x9b, 0xcf, 0xbd, 0x7d, 0xc9, 0x16, 0x12, 0xb6, 0x5b, 0x9c, 0xd2, 0x0b, 0xe0, 0xf3, 0x55, 0xad, 0x8e, 0x4e, 0xdc, 0x42, 0x40, 0x3d, 0xaf, 0x22, 0x4e, 0x1e}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x26, 0x5e, 0xbb, 0x0e, 0x5e, 0x90, 0x3f, 0x76, 0x0b, 0x93, 0xa1, 0x8e, 0x00, 0x79, 0x4d, 0xee, 0x1e, 0x8a, 0xbb, 0xdf, 0x99, 0xa2, 0x38, 0x50, 0x42, 0xa0, 0x18, 0x11, 0xfc, 0x3b, 0x3b, 0x7e}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xf9, 0x41, 0xa5, 0xaa, 0x12, 0xba, 0xfa, 0xf0, 0xe4, 0x96, 0xe6, 0x19, 0x20, 0x2e, 0xd3, 0x10, 0x15, 0x08, 0xcf, 0x42, 0x05, 0xe9, 0xc2, 0xff, 0x70, 0x46, 0x21, 0x7b, 0x01, 0x2f, 0x81, 0xed}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + aws_AWSNitroTPM = M{0: {Expected: []byte{0x73, 0x7f, 0x76, 0x7a, 0x12, 0xf5, 0x4e, 0x70, 0xee, 0xcb, 0xc8, 0x68, 0x40, 0x11, 0x32, 0x3a, 0xe2, 0xfe, 0x2d, 0xd9, 0xf9, 0x07, 0x85, 0x57, 0x79, 0x69, 0xd7, 0xa2, 0x01, 0x3e, 0x8c, 0x12}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x79, 0x51, 0xc9, 0x4c, 0xbb, 0x8e, 0x6e, 0xa7, 0x7a, 0xc5, 0xf8, 0xdb, 0x86, 0x50, 0x7e, 0xe2, 0x0e, 0x6c, 0xb1, 0x35, 0xcd, 0xf1, 0xcd, 0xe6, 0x7c, 0x32, 0xf9, 0x83, 0xd9, 0xd5, 0x37, 0xe6}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x73, 0x21, 0xaa, 0x60, 0x89, 0x71, 0xe4, 0x0c, 0xbc, 0x25, 0xb3, 0x0f, 0xab, 0x34, 0x56, 0x33, 0x1f, 0xcf, 0x25, 0x44, 0x85, 0xcc, 0x9f, 0x71, 0xba, 0x4f, 0x43, 0x89, 0xaa, 0x1b, 0xbc, 0xaa}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x2f, 0x33, 0x07, 0xdb, 0x16, 0xbf, 0x9a, 0xf9, 0x9e, 0x44, 0xb4, 0xf3, 0x12, 0xb4, 0xc8, 0xf7, 0x48, 0x34, 0xc3, 0x49, 0xcb, 0xcb, 0xb2, 0x6a, 0x03, 0xae, 0x71, 0x69, 0x68, 0xd0, 0x8b, 0x61}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + aws_AWSSEVSNP = M{0: {Expected: []byte{0xd6, 0xdf, 0x85, 0x53, 0x58, 0xf5, 0xb1, 0x0f, 0x06, 0xf0, 0xfa, 0xb3, 0xf4, 0x08, 0xad, 0x26, 0xcd, 0x16, 0x5a, 0x29, 0x49, 0xba, 0xd6, 0x9e, 0x2c, 0xc7, 0x56, 0x92, 0x52, 0x9e, 0x66, 0x2a}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x13, 0x2d, 0x93, 0x9f, 0x79, 0xe4, 0xa0, 0xbc, 0xcf, 0x10, 0xea, 0xc1, 0x42, 0x8a, 0x0c, 0x0d, 0x9c, 0x84, 0x86, 0x17, 0x8f, 0xba, 0x26, 0x88, 0x52, 0xf5, 0x8e, 0xec, 0x36, 0x8a, 0x8c, 0x42}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x5c, 0x6f, 0xdc, 0xe9, 0xef, 0x39, 0xc5, 0x15, 0x78, 0xa3, 0x63, 0x8e, 0x43, 0xe2, 0x39, 0xc6, 0x07, 0x01, 0xa9, 0x62, 0x2d, 0x48, 0xdc, 0xc9, 0x78, 0xe0, 0x9a, 0xfa, 0x81, 0x31, 0x97, 0xd0}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xf5, 0xb8, 0x44, 0xc0, 0xdb, 0xdd, 0x38, 0xd7, 0xfb, 0x37, 0xdb, 0xff, 0x13, 0x76, 0xde, 0x8b, 0xf5, 0xd6, 0x37, 0xb7, 0xf7, 0xab, 0xb0, 0x58, 0x6e, 0x1d, 0x81, 0x18, 0xbc, 0xcd, 0x8b, 0x69}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + azure_AzureSEVSNP = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x38, 0x80, 0x1a, 0xa5, 0xdd, 0x31, 0x80, 0x44, 0xaa, 0x2b, 0x7e, 0x24, 0xd0, 0x19, 0x6e, 0x8c, 0xa7, 0xd1, 0x6a, 0x09, 0x72, 0x37, 0xd5, 0x7f, 0xec, 0x0c, 0x66, 0x7b, 0x01, 0x6b, 0x4d, 0x9a}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x3f, 0x93, 0x85, 0xdd, 0x4c, 0x44, 0x97, 0x85, 0x56, 0x23, 0x11, 0x07, 0x66, 0x59, 0x0f, 0xd6, 0x9d, 0xae, 0x78, 0x70, 0x1e, 0x72, 0x4f, 0xf6, 0xba, 0xc5, 0x9b, 0x81, 0x08, 0x6a, 0x22, 0x5e}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x9b, 0x38, 0x12, 0xdd, 0xc3, 0xb4, 0xd0, 0x6c, 0x32, 0xe2, 0x3c, 0x79, 0x4f, 0xcf, 0x1c, 0x3c, 0x6d, 0x84, 0x8d, 0x47, 0x8a, 0x8f, 0x7e, 0xaa, 0x6f, 0x7f, 0x61, 0x4f, 0xf1, 0x19, 0xc4, 0x0a}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + azure_AzureTDX = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x7a, 0xc2, 0x38, 0x33, 0x98, 0x57, 0x95, 0x96, 0xc7, 0xdc, 0x3c, 0xd7, 0xa3, 0x9f, 0x15, 0x46, 0x5a, 0x48, 0xaf, 0xf9, 0x38, 0xf2, 0x3a, 0xab, 0xd2, 0xeb, 0xa2, 0x07, 0xbd, 0x97, 0x1b, 0x66}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xbd, 0x09, 0x1b, 0xa4, 0x41, 0x3b, 0x5b, 0xc9, 0xfc, 0x41, 0x63, 0x88, 0xd8, 0xc9, 0x67, 0xe5, 0xc0, 0x0f, 0xd5, 0xa6, 0xc6, 0xef, 0x9a, 0xeb, 0x7e, 0x02, 0x08, 0x88, 0x09, 0xf4, 0x0f, 0xb3}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x6f, 0xb1, 0x71, 0x69, 0xf7, 0x7e, 0x64, 0xa3, 0xee, 0x8a, 0xa2, 0x70, 0xb0, 0x00, 0x02, 0xb9, 0x3e, 0x4d, 0x20, 0x6c, 0x6b, 0x29, 0x1b, 0x50, 0x57, 0xba, 0x6a, 0x26, 0x10, 0xef, 0xcf, 0xc0}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} azure_AzureTrustedLaunch M - gcp_GCPSEVES = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x7f, 0x6d, 0x7c, 0xee, 0x61, 0xc7, 0x03, 0x15, 0x27, 0xe4, 0x3c, 0x82, 0xe5, 0x8b, 0x11, 0x39, 0x2c, 0xce, 0x2a, 0x25, 0xb4, 0xd6, 0x2b, 0xee, 0xcd, 0x5c, 0x65, 0x9a, 0xf3, 0x2a, 0x19, 0x2e}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x55, 0xcd, 0xd3, 0xb8, 0xa4, 0xf4, 0x77, 0x5b, 0x49, 0x98, 0x5b, 0x75, 0x38, 0xa9, 0x98, 0x37, 0x84, 0x3c, 0x96, 0x21, 0x91, 0x74, 0xbf, 0x30, 0x63, 0x1f, 0xd8, 0x08, 0x28, 0x3b, 0x54, 0x19}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x56, 0x5f, 0xd2, 0x44, 0xe7, 0xa2, 0xe9, 0xd1, 0xa6, 0xd7, 0x1d, 0x8a, 0x48, 0x4a, 0x55, 0xa3, 0x2c, 0x28, 0x24, 0x96, 0x11, 0xa1, 0x73, 0x2a, 0x30, 0x7c, 0x71, 0x1a, 0x42, 0xa0, 0xaa, 0x70}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - gcp_GCPSEVSNP = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x1c, 0xf4, 0x82, 0xf1, 0xce, 0x4b, 0xc3, 0x39, 0x9e, 0x11, 0x3f, 0x12, 0x4e, 0xed, 0xcb, 0xa5, 0x1a, 0xb7, 0x3d, 0xb3, 0xa5, 0x0d, 0xc0, 0xa3, 0x96, 0x33, 0x78, 0x2a, 0x1a, 0x31, 0xfa, 0x45}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x4d, 0xdd, 0x52, 0x0e, 0xac, 0x6c, 0xb6, 0xa5, 0xe7, 0xa0, 0x78, 0xef, 0x5c, 0x66, 0x1a, 0x38, 0x3f, 0x79, 0xaf, 0xfb, 0x5c, 0xba, 0xf9, 0x1f, 0x68, 0x82, 0x9c, 0x7d, 0x21, 0x8d, 0xd4, 0xb8}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xcf, 0x13, 0x9a, 0x83, 0xc1, 0x1f, 0x97, 0xb3, 0x3a, 0x82, 0x74, 0xca, 0x94, 0xc1, 0x71, 0x03, 0xd1, 0xf8, 0xba, 0x49, 0xd3, 0x95, 0x57, 0x38, 0x21, 0x38, 0x95, 0x5c, 0x54, 0x31, 0x85, 0xa0}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - openstack_QEMUVTPM = M{4: {Expected: []byte{0x6f, 0x30, 0x36, 0x8f, 0x4f, 0x40, 0xfb, 0xf5, 0x8a, 0x7f, 0x06, 0x7e, 0xdb, 0x4f, 0xec, 0x13, 0xbb, 0x4d, 0xba, 0x20, 0x14, 0xe5, 0x14, 0x81, 0x34, 0xc9, 0xaf, 0x98, 0xdf, 0xf3, 0xbf, 0x58}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xb7, 0xf2, 0x81, 0x20, 0xaf, 0xee, 0x38, 0x2d, 0x0b, 0x95, 0x25, 0xb9, 0x6d, 0xbb, 0x0a, 0x83, 0xc8, 0xdf, 0x87, 0x35, 0x79, 0xd3, 0xa5, 0x5d, 0xc7, 0x6b, 0xed, 0x5c, 0x3d, 0x83, 0xa5, 0x6f}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xaa, 0xfe, 0xca, 0x42, 0x04, 0x1e, 0x6b, 0xee, 0xa0, 0xb3, 0x7e, 0xa6, 0x51, 0xd7, 0x02, 0xaf, 0x98, 0xb0, 0xdf, 0x90, 0xf6, 0xf5, 0x43, 0x63, 0x91, 0x8b, 0x89, 0xb6, 0xc5, 0x40, 0x94, 0x31}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + gcp_GCPSEVES = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x8b, 0xd8, 0xad, 0x33, 0x5c, 0x8b, 0x85, 0xa8, 0x27, 0x7b, 0x7d, 0xf4, 0xe6, 0x93, 0x82, 0xd9, 0xb9, 0xa5, 0xd4, 0x21, 0x56, 0x2b, 0xac, 0xeb, 0xd3, 0x5a, 0x93, 0x50, 0x03, 0xd4, 0x66, 0x28}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xe3, 0xe6, 0xe7, 0xdb, 0xa1, 0xc2, 0x72, 0xc7, 0x6c, 0x9c, 0x70, 0x23, 0x99, 0x57, 0x02, 0x1f, 0x40, 0x6c, 0x78, 0xb1, 0xc4, 0x59, 0x7f, 0x96, 0x79, 0xa6, 0xdc, 0xdc, 0x2a, 0x50, 0x14, 0x92}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xb5, 0xe6, 0x59, 0x72, 0x1d, 0xd3, 0x38, 0xa2, 0x25, 0x99, 0x3f, 0x6d, 0xa1, 0x4e, 0x06, 0x0a, 0x56, 0xed, 0xe5, 0xdb, 0xf0, 0xa1, 0x88, 0x1c, 0x58, 0x41, 0x0c, 0x6e, 0xca, 0xa2, 0x9f, 0x89}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + gcp_GCPSEVSNP = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xd1, 0xae, 0xd8, 0x3f, 0x3b, 0x23, 0x92, 0xc6, 0xa9, 0xdc, 0xbd, 0x00, 0x38, 0xe4, 0xd3, 0xa8, 0xeb, 0x76, 0xf6, 0x7b, 0xe9, 0x32, 0xa9, 0x0a, 0xb5, 0x89, 0xe8, 0xa1, 0x72, 0x71, 0xcd, 0xb1}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xa6, 0x13, 0xc7, 0x43, 0x8e, 0x22, 0xe8, 0x39, 0x46, 0x59, 0x05, 0x78, 0xb7, 0x4d, 0xac, 0x09, 0xdd, 0xd8, 0xb8, 0x9c, 0xb7, 0xff, 0xcc, 0xc2, 0x85, 0xe1, 0xc9, 0x02, 0x66, 0x07, 0x5f, 0x6e}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x41, 0x97, 0xf0, 0x12, 0x4a, 0xad, 0xaa, 0x8a, 0x98, 0xa9, 0x85, 0xab, 0x8f, 0x88, 0xb0, 0x03, 0x48, 0x70, 0x6c, 0x8e, 0x2e, 0xa3, 0xac, 0x1d, 0x03, 0xc2, 0xb8, 0x9b, 0x2e, 0x02, 0xd3, 0x2b}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + openstack_QEMUVTPM = M{4: {Expected: []byte{0x68, 0x61, 0xf0, 0x46, 0x09, 0x4b, 0xa4, 0x2a, 0x1b, 0x0e, 0xc0, 0x93, 0x72, 0x21, 0xe0, 0xd3, 0x73, 0x95, 0x7b, 0x25, 0xe2, 0x91, 0xac, 0x0c, 0xf6, 0xed, 0x18, 0xb4, 0x95, 0xd4, 0x80, 0x33}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x07, 0x27, 0x38, 0x5d, 0x6b, 0xd6, 0xe0, 0xc0, 0xc8, 0xb8, 0xdb, 0xfb, 0x8c, 0x3b, 0xe3, 0x53, 0x6d, 0x6f, 0xf1, 0xa2, 0xe5, 0x78, 0x95, 0x56, 0x75, 0xbd, 0x63, 0x6d, 0xc7, 0x51, 0x80, 0xec}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xc0, 0xf2, 0xab, 0x2c, 0xa6, 0xde, 0x51, 0x9a, 0x52, 0xb7, 0xa3, 0xd7, 0x27, 0xa0, 0x2e, 0xd8, 0x3d, 0x8f, 0x17, 0xe6, 0xcd, 0x6d, 0x21, 0x98, 0x08, 0xe4, 0xf6, 0x61, 0x51, 0x01, 0xe7, 0x08}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} qemu_QEMUTDX M - qemu_QEMUVTPM = M{4: {Expected: []byte{0xbe, 0x04, 0x30, 0xfe, 0x6d, 0x26, 0x75, 0xe2, 0x7b, 0xce, 0xef, 0xda, 0xb1, 0xe7, 0xea, 0xee, 0x6f, 0x3f, 0xce, 0x1a, 0xfa, 0x8d, 0x27, 0x24, 0xff, 0xda, 0x0a, 0xc9, 0x64, 0x89, 0x61, 0xfe}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xb9, 0x3c, 0xcc, 0x07, 0xcd, 0x38, 0x26, 0x55, 0x4c, 0xf7, 0x48, 0xb5, 0xa9, 0x7b, 0x07, 0xf0, 0x4f, 0x78, 0x7d, 0x1b, 0x02, 0x00, 0x80, 0xe3, 0x67, 0x07, 0x04, 0x36, 0xf4, 0x43, 0x6a, 0xdd}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x2b, 0x3c, 0xc1, 0xe3, 0x03, 0x0a, 0x74, 0x95, 0x15, 0x49, 0xc5, 0x5d, 0x5b, 0x97, 0xe1, 0xe9, 0x2e, 0xa2, 0x83, 0xbf, 0xd1, 0x8a, 0xd4, 0xd8, 0x75, 0xee, 0x15, 0xbe, 0xb0, 0x5e, 0xc6, 0x58}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + qemu_QEMUVTPM = M{4: {Expected: []byte{0x9c, 0x3b, 0x23, 0x02, 0x09, 0xb8, 0xad, 0x9a, 0xc5, 0x84, 0xc9, 0x69, 0x7a, 0xe0, 0x9b, 0xfd, 0xce, 0x92, 0x06, 0x39, 0x5f, 0x85, 0x5d, 0x1e, 0xfe, 0x12, 0x5d, 0xac, 0x6d, 0x21, 0xb6, 0xd2}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x77, 0x89, 0x58, 0xdd, 0xc1, 0x6a, 0xe3, 0x7c, 0x4e, 0x07, 0xaa, 0x48, 0x1a, 0x98, 0x42, 0xed, 0x5c, 0x97, 0x73, 0x67, 0xc9, 0x9e, 0x5f, 0x52, 0x30, 0xe8, 0x03, 0xcc, 0x4c, 0xa4, 0x35, 0xbf}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x35, 0xe0, 0x3a, 0xb8, 0xa4, 0xf8, 0x7f, 0xe9, 0x84, 0x75, 0x24, 0xfc, 0x46, 0x3b, 0x71, 0xdc, 0x6d, 0x6c, 0x4f, 0x5d, 0x40, 0xc7, 0xa0, 0xb1, 0x19, 0x44, 0x56, 0x49, 0x53, 0x9a, 0x50, 0xd4}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} ) diff --git a/internal/config/image_enterprise.go b/internal/config/image_enterprise.go index a3d38a611..c34d11bec 100644 --- a/internal/config/image_enterprise.go +++ b/internal/config/image_enterprise.go @@ -10,5 +10,5 @@ package config const ( // defaultImage is the default image to use. - defaultImage = "ref/main/stream/nightly/v2.24.0-pre.0.20250522095204-01f9a30017c4" + defaultImage = "ref/main/stream/nightly/v2.24.0-pre.0.20250523073257-7163c5909da1" ) From 4d1dce3505fa0931652470d0bf68655ac92257bb Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 30 May 2025 09:15:27 +0200 Subject: [PATCH 292/311] deps: update Go dependencies (#3842) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- go.mod | 56 +++++++-------- go.sum | 215 +++++++++++++++++++++++---------------------------------- 2 files changed, 112 insertions(+), 159 deletions(-) diff --git a/go.mod b/go.mod index f0d3fa6c0..ab9cc6019 100644 --- a/go.mod +++ b/go.mod @@ -28,9 +28,9 @@ replace ( ) require ( - cloud.google.com/go/compute v1.37.0 + cloud.google.com/go/compute v1.38.0 cloud.google.com/go/compute/metadata v0.7.0 - cloud.google.com/go/kms v1.21.2 + cloud.google.com/go/kms v1.22.0 cloud.google.com/go/secretmanager v1.14.7 cloud.google.com/go/storage v1.54.0 dario.cat/mergo v1.0.2 @@ -47,19 +47,19 @@ require ( github.com/aws/aws-sdk-go-v2/config v1.29.14 github.com/aws/aws-sdk-go-v2/credentials v1.17.67 github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.30 - github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.75 - github.com/aws/aws-sdk-go-v2/service/autoscaling v1.52.4 + github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.77 + github.com/aws/aws-sdk-go-v2/service/autoscaling v1.53.0 github.com/aws/aws-sdk-go-v2/service/cloudfront v1.46.1 - github.com/aws/aws-sdk-go-v2/service/ec2 v1.218.0 + github.com/aws/aws-sdk-go-v2/service/ec2 v1.224.0 github.com/aws/aws-sdk-go-v2/service/elasticloadbalancingv2 v1.45.2 github.com/aws/aws-sdk-go-v2/service/resourcegroupstaggingapi v1.26.3 - github.com/aws/aws-sdk-go-v2/service/s3 v1.79.3 + github.com/aws/aws-sdk-go-v2/service/s3 v1.80.0 github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.35.4 github.com/aws/smithy-go v1.22.3 - github.com/bazelbuild/buildtools v0.0.0-20250427233527-d9ed52af26ee + github.com/bazelbuild/buildtools v0.0.0-20250528073601-fdebdb3800e7 github.com/bazelbuild/rules_go v0.54.0 github.com/coreos/go-systemd/v22 v22.5.0 - github.com/docker/docker v28.1.1+incompatible + github.com/docker/docker v28.2.1+incompatible github.com/edgelesssys/go-azguestattestation v0.0.0-20250408071817-8c4457b235ff github.com/edgelesssys/go-tdx-qpl v0.0.0-20250129202750-607ac61e2377 github.com/foxboron/go-uefi v0.0.0-20250207204325-69fb7dba244f @@ -88,9 +88,9 @@ require ( github.com/hashicorp/terraform-json v0.25.0 github.com/hashicorp/terraform-plugin-framework v1.15.0 github.com/hashicorp/terraform-plugin-framework-validators v0.18.0 - github.com/hashicorp/terraform-plugin-go v0.27.0 + github.com/hashicorp/terraform-plugin-go v0.28.0 github.com/hashicorp/terraform-plugin-log v0.9.0 - github.com/hashicorp/terraform-plugin-testing v1.13.0 + github.com/hashicorp/terraform-plugin-testing v1.13.1 github.com/hexops/gotextdiff v1.0.3 github.com/martinjungblut/go-cryptsetup v0.0.0-20220520180014-fd0874fd07a6 github.com/mattn/go-isatty v0.0.20 @@ -103,7 +103,7 @@ require ( github.com/samber/slog-multi v1.4.0 github.com/schollz/progressbar/v3 v3.18.0 github.com/secure-systems-lab/go-securesystemslib v0.9.0 - github.com/siderolabs/talos/pkg/machinery v1.10.2 + github.com/siderolabs/talos/pkg/machinery v1.10.3 github.com/sigstore/rekor v1.3.10 github.com/sigstore/sigstore v1.9.4 github.com/spf13/afero v1.14.0 @@ -122,11 +122,11 @@ require ( golang.org/x/sys v0.33.0 golang.org/x/text v0.25.0 golang.org/x/tools v0.33.0 - google.golang.org/api v0.233.0 - google.golang.org/grpc v1.72.1 + google.golang.org/api v0.235.0 + google.golang.org/grpc v1.72.2 google.golang.org/protobuf v1.36.6 gopkg.in/yaml.v3 v3.0.1 - helm.sh/helm/v3 v3.17.3 + helm.sh/helm/v3 v3.18.1 k8s.io/api v0.33.1 k8s.io/apiextensions-apiserver v0.33.1 k8s.io/apimachinery v0.33.1 @@ -138,7 +138,7 @@ require ( k8s.io/mount-utils v0.33.1 k8s.io/utils v0.0.0-20250502105355-0f33e8f1c979 libvirt.org/go/libvirt v1.11002.0 - sigs.k8s.io/controller-runtime v0.20.4 + sigs.k8s.io/controller-runtime v0.21.0 sigs.k8s.io/yaml v1.4.0 ) @@ -150,12 +150,11 @@ require ( cloud.google.com/go/iam v1.5.2 // indirect cloud.google.com/go/longrunning v0.6.7 // indirect cloud.google.com/go/monitoring v1.24.2 // indirect - github.com/AdaLogics/go-fuzz-headers v0.0.0-20230811130428-ced1acdcaa24 // indirect github.com/Azure/azure-sdk-for-go/sdk/internal v1.11.1 // indirect github.com/Azure/azure-sdk-for-go/sdk/keyvault/azkeys v0.10.0 // indirect github.com/Azure/azure-sdk-for-go/sdk/keyvault/internal v0.7.1 // indirect github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/internal v1.1.1 // indirect - github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161 // indirect + github.com/Azure/go-ansiterm v0.0.0-20250102033503-faa5f7b0171c // indirect github.com/Azure/go-autorest v14.2.0+incompatible // indirect github.com/Azure/go-autorest/autorest v0.11.29 // indirect github.com/Azure/go-autorest/autorest/adal v0.9.23 // indirect @@ -184,7 +183,7 @@ require ( github.com/aws/aws-sdk-go-v2/internal/ini v1.8.3 // indirect github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.34 // indirect github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.3 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.7.1 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.7.2 // indirect github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.15 // indirect github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.15 // indirect github.com/aws/aws-sdk-go-v2/service/sso v1.25.3 // indirect @@ -199,6 +198,7 @@ require ( github.com/cncf/xds/go v0.0.0-20250121191232-2f005788dc42 // indirect github.com/containerd/containerd v1.7.27 // indirect github.com/containerd/errdefs v1.0.0 // indirect + github.com/containerd/errdefs/pkg v0.3.0 // indirect github.com/containerd/log v0.1.0 // indirect github.com/containerd/platforms v0.2.1 // indirect github.com/coredns/caddy v1.1.1 // indirect @@ -207,13 +207,10 @@ require ( github.com/cpuguy83/go-md2man/v2 v2.0.6 // indirect github.com/cyberphone/json-canonicalization v0.0.0-20220623050100-57a0ce2678a7 // indirect github.com/cyphar/filepath-securejoin v0.4.1 // indirect + github.com/danieljoos/wincred v1.2.1 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/distribution/reference v0.6.0 // indirect - github.com/docker/cli v27.5.0+incompatible // indirect - github.com/docker/distribution v2.8.3+incompatible // indirect - github.com/docker/docker-credential-helpers v0.8.2 // indirect github.com/docker/go-connections v0.5.0 // indirect - github.com/docker/go-metrics v0.0.1 // indirect github.com/docker/go-units v0.5.0 // indirect github.com/docker/libtrust v0.0.0-20160708172513-aabc10ec26b7 // indirect github.com/emicklei/go-restful/v3 v3.11.0 // indirect @@ -264,7 +261,6 @@ require ( github.com/google/s2a-go v0.1.9 // indirect github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 // indirect github.com/googleapis/enterprise-certificate-proxy v0.3.6 // indirect - github.com/gorilla/mux v1.8.1 // indirect github.com/gorilla/websocket v1.5.4-0.20250319132907-e064f32e3674 // indirect github.com/gosuri/uitable v0.0.4 // indirect github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79 // indirect @@ -313,11 +309,10 @@ require ( github.com/mitchellh/mapstructure v1.5.0 // indirect github.com/mitchellh/reflectwalk v1.0.2 // indirect github.com/moby/docker-image-spec v1.3.1 // indirect - github.com/moby/locker v1.0.1 // indirect github.com/moby/spdystream v0.5.0 // indirect github.com/moby/sys/atomicwriter v0.1.0 // indirect github.com/moby/sys/mountinfo v0.7.2 // indirect - github.com/moby/term v0.5.0 // indirect + github.com/moby/term v0.5.2 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/reflect2 v1.0.2 // indirect github.com/monochromegane/go-gitignore v0.0.0-20200626010858-205db1a8cc00 // indirect @@ -337,7 +332,7 @@ require ( github.com/prometheus/common v0.62.0 // indirect github.com/prometheus/procfs v0.15.1 // indirect github.com/rivo/uniseg v0.4.7 // indirect - github.com/rubenv/sql-migrate v1.7.1 // indirect + github.com/rubenv/sql-migrate v1.8.0 // indirect github.com/russross/blackfriday/v2 v2.1.0 // indirect github.com/ryanuber/go-glob v1.0.0 // indirect github.com/samber/lo v1.49.1 // indirect @@ -385,15 +380,16 @@ require ( google.golang.org/appengine v1.6.8 // indirect google.golang.org/genproto v0.0.0-20250505200425-f936aa4a68b2 // indirect google.golang.org/genproto/googleapis/api v0.0.0-20250505200425-f936aa4a68b2 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20250505200425-f936aa4a68b2 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20250512202823-5a2f75b736a9 // indirect gopkg.in/evanphx/json-patch.v4 v4.12.0 // indirect gopkg.in/inf.v0 v0.9.1 // indirect - k8s.io/cli-runtime v0.32.2 // indirect + gotest.tools/v3 v3.4.0 // indirect + k8s.io/cli-runtime v0.33.0 // indirect k8s.io/component-base v0.33.1 // indirect k8s.io/klog/v2 v2.130.1 // indirect k8s.io/kube-openapi v0.0.0-20250318190949-c8a335a9a2ff // indirect - k8s.io/kubectl v0.32.2 // indirect - oras.land/oras-go v1.2.5 // indirect + k8s.io/kubectl v0.33.0 // indirect + oras.land/oras-go/v2 v2.5.0 // indirect sigs.k8s.io/json v0.0.0-20241010143419-9aa6b5e7a4b3 // indirect sigs.k8s.io/kustomize/api v0.19.0 // indirect sigs.k8s.io/kustomize/kyaml v0.19.0 // indirect diff --git a/go.sum b/go.sum index 3ac076772..b443dc210 100644 --- a/go.sum +++ b/go.sum @@ -6,14 +6,14 @@ cloud.google.com/go/auth v0.16.1 h1:XrXauHMd30LhQYVRHLGvJiYeczweKQXZxsTbV9TiguU= cloud.google.com/go/auth v0.16.1/go.mod h1:1howDHJ5IETh/LwYs3ZxvlkXF48aSqqJUM+5o02dNOI= cloud.google.com/go/auth/oauth2adapt v0.2.8 h1:keo8NaayQZ6wimpNSmW5OPc283g65QNIiLpZnkHRbnc= cloud.google.com/go/auth/oauth2adapt v0.2.8/go.mod h1:XQ9y31RkqZCcwJWNSx2Xvric3RrU88hAYYbjDWYDL+c= -cloud.google.com/go/compute v1.37.0 h1:XxtZlXYkZXub3LNaLu90TTemcFqIU1yZ4E4q9VlR39A= -cloud.google.com/go/compute v1.37.0/go.mod h1:AsK4VqrSyXBo4SMbRtfAO1VfaMjUEjEwv1UB/AwVp5Q= +cloud.google.com/go/compute v1.38.0 h1:MilCLYQW2m7Dku8hRIIKo4r0oKastlD74sSu16riYKs= +cloud.google.com/go/compute v1.38.0/go.mod h1:oAFNIuXOmXbK/ssXm3z4nZB8ckPdjltJ7xhHCdbWFZM= cloud.google.com/go/compute/metadata v0.7.0 h1:PBWF+iiAerVNe8UCHxdOt6eHLVc3ydFeOCw78U8ytSU= cloud.google.com/go/compute/metadata v0.7.0/go.mod h1:j5MvL9PprKL39t166CoB1uVHfQMs4tFQZZcKwksXUjo= cloud.google.com/go/iam v1.5.2 h1:qgFRAGEmd8z6dJ/qyEchAuL9jpswyODjA2lS+w234g8= cloud.google.com/go/iam v1.5.2/go.mod h1:SE1vg0N81zQqLzQEwxL2WI6yhetBdbNQuTvIKCSkUHE= -cloud.google.com/go/kms v1.21.2 h1:c/PRUSMNQ8zXrc1sdAUnsenWWaNXN+PzTXfXOcSFdoE= -cloud.google.com/go/kms v1.21.2/go.mod h1:8wkMtHV/9Z8mLXEXr1GK7xPSBdi6knuLXIhqjuWcI6w= +cloud.google.com/go/kms v1.22.0 h1:dBRIj7+GDeeEvatJeTB19oYZNV0aj6wEqSIT/7gLqtk= +cloud.google.com/go/kms v1.22.0/go.mod h1:U7mf8Sva5jpOb4bxYZdtw/9zsbIjrklYwPcvMk34AL8= cloud.google.com/go/logging v1.13.0 h1:7j0HgAp0B94o1YRDqiqm26w4q1rDMH7XNRU34lJXHYc= cloud.google.com/go/logging v1.13.0/go.mod h1:36CoKh6KA/M0PbhPKMq6/qety2DCAErbhXT62TuXALA= cloud.google.com/go/longrunning v0.6.7 h1:IGtfDWHhQCgCjwQjV9iiLnUta9LBCo8R9QmAFsS/PrE= @@ -64,8 +64,8 @@ github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/internal v1.1.1 h1:bFWuo github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/internal v1.1.1/go.mod h1:Vih/3yc6yac2JzU4hzpaDupBJP0Flaia9rXXrU8xyww= github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.6.1 h1:lhZdRq7TIx0GJQvSyX2Si406vrYsov2FXGp/RnSEtcs= github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.6.1/go.mod h1:8cl44BDmi+effbARHMQjgOKA2AYvcohNm7KEt42mSV8= -github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161 h1:L/gRVlceqvL25UVaW/CKtUDjefjrs0SPonmDGUVOYP0= -github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= +github.com/Azure/go-ansiterm v0.0.0-20250102033503-faa5f7b0171c h1:udKWzYgxTojEKWjV8V+WSxDXJ4NFATAsZjh8iIbsQIg= +github.com/Azure/go-ansiterm v0.0.0-20250102033503-faa5f7b0171c/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= github.com/Azure/go-autorest v14.2.0+incompatible h1:V5VMDjClD3GiElqLWO7mz2MxNAK/vTfRHdAubSIPRgs= github.com/Azure/go-autorest v14.2.0+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= github.com/Azure/go-autorest/autorest v0.11.29 h1:I4+HL/JDvErx2LjyzaVxllw2lRDB5/BT2Bm4g20iqYw= @@ -114,16 +114,10 @@ github.com/Masterminds/squirrel v1.5.4 h1:uUcX/aBc8O7Fg9kaISIUsHXdKuqehiXAMQTYX8 github.com/Masterminds/squirrel v1.5.4/go.mod h1:NNaOrjSoIDfDA40n7sr2tPNZRfjzjA400rg+riTZj10= github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY= github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU= -github.com/Microsoft/hcsshim v0.11.7 h1:vl/nj3Bar/CvJSYo7gIQPyRWc9f3c6IeSNavBTSZNZQ= -github.com/Microsoft/hcsshim v0.11.7/go.mod h1:MV8xMfmECjl5HdO7U/3/hFVnkmSBjAjmA09d4bExKcU= github.com/ProtonMail/go-crypto v1.1.6 h1:ZcV+Ropw6Qn0AX9brlQLAUXfqLBc7Bl+f/DmNxpLfdw= github.com/ProtonMail/go-crypto v1.1.6/go.mod h1:rA3QumHc/FZ8pAHreoekgiAbzpNsfQAosU5td4SnOrE= -github.com/Shopify/logrus-bugsnag v0.0.0-20171204204709-577dee27f20d h1:UrqY+r/OJnIp5u0s1SbQ8dVfLCZJsnvazdBP5hS4iRs= -github.com/Shopify/logrus-bugsnag v0.0.0-20171204204709-577dee27f20d/go.mod h1:HI8ITrYtUY+O+ZhtlqUnD8+KwNPOyugEhfP9fdUIaEQ= github.com/agext/levenshtein v1.2.2 h1:0S/Yg6LYmFJ5stwQeRp6EeOcCbj7xiqQSdNelsXvaqE= github.com/agext/levenshtein v1.2.2/go.mod h1:JEDfjyjHDjOF/1e4FlBE/PkbqA9OfWu2ki2W0IB5558= -github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= -github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alessio/shellescape v1.4.1 h1:V7yhSDDn8LP4lc4jS8pFkt0zCnzVJlG5JXy9BVKJUX0= github.com/alessio/shellescape v1.4.1/go.mod h1:PZAiSCk0LJaZkiCSkPv8qIobYglO3FPpyFjDCtHLS30= github.com/apparentlymart/go-textseg/v12 v12.0.0/go.mod h1:S/4uRK2UtaQttw1GenVJEynmyUenKwP++x/+DdGV/Ec= @@ -146,8 +140,8 @@ github.com/aws/aws-sdk-go-v2/credentials v1.17.67 h1:9KxtdcIA/5xPNQyZRgUSpYOE6j9 github.com/aws/aws-sdk-go-v2/credentials v1.17.67/go.mod h1:p3C44m+cfnbv763s52gCqrjaqyPikj9Sg47kUVaNZQQ= github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.30 h1:x793wxmUWVDhshP8WW2mlnXuFrO4cOd3HLBroh1paFw= github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.30/go.mod h1:Jpne2tDnYiFascUEs2AWHJL9Yp7A5ZVy3TNyxaAjD6M= -github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.75 h1:S61/E3N01oral6B3y9hZ2E1iFDqCZPPOBoBQretCnBI= -github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.75/go.mod h1:bDMQbkI1vJbNjnvJYpPTSNYBkI/VIv18ngWb/K84tkk= +github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.77 h1:xaRN9fags7iJznsMEjtcEuON1hGfCZ0y5MVfEMKtrx8= +github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.17.77/go.mod h1:lolsiGkT47AZ3DWqtxgEQM/wVMpayi7YWNjl3wHSRx8= github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.34 h1:ZK5jHhnrioRkUNOc+hOgQKlUL5JeC3S6JgLxtQ+Rm0Q= github.com/aws/aws-sdk-go-v2/internal/configsources v1.3.34/go.mod h1:p4VfIceZokChbA9FzMbRGz5OV+lekcVtHlPKEO0gSZY= github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.6.34 h1:SZwFm17ZUNNg5Np0ioo/gq8Mn6u9w19Mri8DnJ15Jf0= @@ -156,26 +150,26 @@ github.com/aws/aws-sdk-go-v2/internal/ini v1.8.3 h1:bIqFDwgGXXN1Kpp99pDOdKMTTb5d github.com/aws/aws-sdk-go-v2/internal/ini v1.8.3/go.mod h1:H5O/EsxDWyU+LP/V8i5sm8cxoZgc2fdNR9bxlOFrQTo= github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.34 h1:ZNTqv4nIdE/DiBfUUfXcLZ/Spcuz+RjeziUtNJackkM= github.com/aws/aws-sdk-go-v2/internal/v4a v1.3.34/go.mod h1:zf7Vcd1ViW7cPqYWEHLHJkS50X0JS2IKz9Cgaj6ugrs= -github.com/aws/aws-sdk-go-v2/service/autoscaling v1.52.4 h1:vzLD0FyNU4uxf2QE5UDG0jSEitiJXbVEUwf2Sk3usF4= -github.com/aws/aws-sdk-go-v2/service/autoscaling v1.52.4/go.mod h1:CDqMoc3KRdZJ8qziW96J35lKH01Wq3B2aihtHj2JbRs= +github.com/aws/aws-sdk-go-v2/service/autoscaling v1.53.0 h1:uYhWKm7FhOKF5chyd2QSVXWqchI+ikht+aIkDJUIg9U= +github.com/aws/aws-sdk-go-v2/service/autoscaling v1.53.0/go.mod h1:CDqMoc3KRdZJ8qziW96J35lKH01Wq3B2aihtHj2JbRs= github.com/aws/aws-sdk-go-v2/service/cloudfront v1.46.1 h1:6xZNYtuVwzBs8k+TmraERt0vL68Ppg9aUi+aTQmPaVM= github.com/aws/aws-sdk-go-v2/service/cloudfront v1.46.1/go.mod h1:FIBJ48TS+qJb+Ne4qJ+0NeIhtPTVXItXooTeNeVI4Po= -github.com/aws/aws-sdk-go-v2/service/ec2 v1.218.0 h1:QPYsTfcPpPhkF+37pxLcl3xbQz2SRxsShQNB6VCkvLo= -github.com/aws/aws-sdk-go-v2/service/ec2 v1.218.0/go.mod h1:ouvGEfHbLaIlWwpDpOVWPWR+YwO0HDv3vm5tYLq8ImY= +github.com/aws/aws-sdk-go-v2/service/ec2 v1.224.0 h1:i7FB/N5pSvEzNOGHm7n6KQiBx2/X8UkrE/Ppb5Bh3QQ= +github.com/aws/aws-sdk-go-v2/service/ec2 v1.224.0/go.mod h1:ouvGEfHbLaIlWwpDpOVWPWR+YwO0HDv3vm5tYLq8ImY= github.com/aws/aws-sdk-go-v2/service/elasticloadbalancingv2 v1.45.2 h1:vX70Z4lNSr7XsioU0uJq5yvxgI50sB66MvD+V/3buS4= github.com/aws/aws-sdk-go-v2/service/elasticloadbalancingv2 v1.45.2/go.mod h1:xnCC3vFBfOKpU6PcsCKL2ktgBTZfOwTGxj6V8/X3IS4= github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.3 h1:eAh2A4b5IzM/lum78bZ590jy36+d/aFLgKF/4Vd1xPE= github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.12.3/go.mod h1:0yKJC/kb8sAnmlYa6Zs3QVYqaC8ug2AbnNChv5Ox3uA= -github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.7.1 h1:4nm2G6A4pV9rdlWzGMPv4BNtQp22v1hg3yrtkYpeLl8= -github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.7.1/go.mod h1:iu6FSzgt+M2/x3Dk8zhycdIcHjEFb36IS8HVUVFoMg0= +github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.7.2 h1:BCG7DCXEXpNCcpwCxg1oi9pkJWH2+eZzTn9MY56MbVw= +github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.7.2/go.mod h1:iu6FSzgt+M2/x3Dk8zhycdIcHjEFb36IS8HVUVFoMg0= github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.15 h1:dM9/92u2F1JbDaGooxTq18wmmFzbJRfXfVfy96/1CXM= github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.12.15/go.mod h1:SwFBy2vjtA0vZbjjaFtfN045boopadnoVPhu4Fv66vY= github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.15 h1:moLQUoVq91LiqT1nbvzDukyqAlCv89ZmwaHw/ZFlFZg= github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.18.15/go.mod h1:ZH34PJUc8ApjBIfgQCFvkWcUDBtl/WTD+uiYHjd8igA= github.com/aws/aws-sdk-go-v2/service/resourcegroupstaggingapi v1.26.3 h1:P87jejqS8WvQvRWyXlHUylt99VXt0y/WUIFuU6gBU7A= github.com/aws/aws-sdk-go-v2/service/resourcegroupstaggingapi v1.26.3/go.mod h1:cgPfPTC/V3JqwCKed7Q6d0FrgarV7ltz4Bz6S4Q+Dqk= -github.com/aws/aws-sdk-go-v2/service/s3 v1.79.3 h1:BRXS0U76Z8wfF+bnkilA2QwpIch6URlm++yPUt9QPmQ= -github.com/aws/aws-sdk-go-v2/service/s3 v1.79.3/go.mod h1:bNXKFFyaiVvWuR6O16h/I1724+aXe/tAkA9/QS01t5k= +github.com/aws/aws-sdk-go-v2/service/s3 v1.80.0 h1:fV4XIU5sn/x8gjRouoJpDVHj+ExJaUk4prYF+eb6qTs= +github.com/aws/aws-sdk-go-v2/service/s3 v1.80.0/go.mod h1:qbn305Je/IofWBJ4bJz/Q7pDEtnnoInw/dGt71v6rHE= github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.35.4 h1:EKXYJ8kgz4fiqef8xApu7eH0eae2SrVG+oHCLFybMRI= github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.35.4/go.mod h1:yGhDiLKguA3iFJYxbrQkQiNzuy+ddxesSZYWVeeEH5Q= github.com/aws/aws-sdk-go-v2/service/sso v1.25.3 h1:1Gw+9ajCV1jogloEv1RRnvfRFia2cL6c9cuKV2Ps+G8= @@ -186,12 +180,10 @@ github.com/aws/aws-sdk-go-v2/service/sts v1.33.19 h1:1XuUZ8mYJw9B6lzAkXhqHlJd/Xv github.com/aws/aws-sdk-go-v2/service/sts v1.33.19/go.mod h1:cQnB8CUnxbMU82JvlqjKR2HBOm3fe9pWorWBza6MBJ4= github.com/aws/smithy-go v1.22.3 h1:Z//5NuZCSW6R4PhQ93hShNbyBbn8BWCmCVCt+Q8Io5k= github.com/aws/smithy-go v1.22.3/go.mod h1:t1ufH5HMublsJYulve2RKmHDC15xu1f26kHCp/HgceI= -github.com/bazelbuild/buildtools v0.0.0-20250427233527-d9ed52af26ee h1:bCB8uzOXSBWZk4Ss6zaoLjeSU0ZzrykiwDOR31KF4ak= -github.com/bazelbuild/buildtools v0.0.0-20250427233527-d9ed52af26ee/go.mod h1:PLNUetjLa77TCCziPsz0EI8a6CUxgC+1jgmWv0H25tg= +github.com/bazelbuild/buildtools v0.0.0-20250528073601-fdebdb3800e7 h1:DwSCyfDONZ16AnUAmwhhj/fXJwrQZwzgUFnXH33EC34= +github.com/bazelbuild/buildtools v0.0.0-20250528073601-fdebdb3800e7/go.mod h1:PLNUetjLa77TCCziPsz0EI8a6CUxgC+1jgmWv0H25tg= github.com/bazelbuild/rules_go v0.54.0 h1:D9aCU7j5rdRxg2rXOZX5zHZ395XC0KbgC4rnyaQ3ofM= github.com/bazelbuild/rules_go v0.54.0/go.mod h1:T90Gpyq4HDFlsrvtQa2CBdHNJ2P4rAu/uUTmQbanzf0= -github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= -github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= github.com/blang/semver v3.5.1+incompatible h1:cQNTCjp13qL8KC3Nbxr/y2Bqb63oX6wdnnjpJbkM4JQ= @@ -202,12 +194,6 @@ github.com/bshuster-repo/logrus-logstash-hook v1.0.0 h1:e+C0SB5R1pu//O4MQ3f9cFuP github.com/bshuster-repo/logrus-logstash-hook v1.0.0/go.mod h1:zsTqEiSzDgAa/8GZR7E1qaXrhYNDKBYy5/dWPTIflbk= github.com/bufbuild/protocompile v0.6.0 h1:Uu7WiSQ6Yj9DbkdnOe7U4mNKp58y9WDMKDn28/ZlunY= github.com/bufbuild/protocompile v0.6.0/go.mod h1:YNP35qEYoYGme7QMtz5SBCoN4kL4g12jTtjuzRNdjpE= -github.com/bugsnag/bugsnag-go v0.0.0-20141110184014-b1d153021fcd h1:rFt+Y/IK1aEZkEHchZRSq9OQbsSzIT/OrI8YFFmRIng= -github.com/bugsnag/bugsnag-go v0.0.0-20141110184014-b1d153021fcd/go.mod h1:2oa8nejYd4cQ/b0hMIopN0lCRxU0bueqREvZLWFrtK8= -github.com/bugsnag/osext v0.0.0-20130617224835-0dd3f918b21b h1:otBG+dV+YK+Soembjv71DPz3uX/V/6MMlSyD9JBQ6kQ= -github.com/bugsnag/osext v0.0.0-20130617224835-0dd3f918b21b/go.mod h1:obH5gd0BsqsP2LwDJ9aOkm/6J86V6lyAXCoQWGw3K50= -github.com/bugsnag/panicwrap v0.0.0-20151223152923-e2c28503fcd0 h1:nvj0OLI3YqYXer/kZD8Ri1aaunCxIEsOst1BVJswV0o= -github.com/bugsnag/panicwrap v0.0.0-20151223152923-e2c28503fcd0/go.mod h1:D/8v3kj0zr8ZAKg1AQ6crr+5VwKN5eIywRkfhyM/+dE= github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8= github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= @@ -220,14 +206,12 @@ github.com/cloudflare/circl v1.6.0 h1:cr5JKic4HI+LkINy2lg3W2jF8sHCVTBncJr5gIIq7q github.com/cloudflare/circl v1.6.0/go.mod h1:uddAzsPgqdMAYatqJ0lsjX1oECcQLIlRpzZh3pJrofs= github.com/cncf/xds/go v0.0.0-20250121191232-2f005788dc42 h1:Om6kYQYDUk5wWbT0t0q6pvyM49i9XZAv9dDrkDA7gjk= github.com/cncf/xds/go v0.0.0-20250121191232-2f005788dc42/go.mod h1:W+zGtBO5Y1IgJhy4+A9GOqVhqLpfZi+vwmdNXUehLA8= -github.com/containerd/cgroups v1.1.0 h1:v8rEWFl6EoqHB+swVNjVoCJE8o3jX7e8nqBGPLaDFBM= -github.com/containerd/cgroups v1.1.0/go.mod h1:6ppBcbh/NOOUU+dMKrykgaBnK9lCIBxHqJDGwsa1mIw= github.com/containerd/containerd v1.7.27 h1:yFyEyojddO3MIGVER2xJLWoCIn+Up4GaHFquP7hsFII= github.com/containerd/containerd v1.7.27/go.mod h1:xZmPnl75Vc+BLGt4MIfu6bp+fy03gdHAn9bz+FreFR0= -github.com/containerd/continuity v0.4.4 h1:/fNVfTJ7wIl/YPMHjf+5H32uFhl63JucB34PlCpMKII= -github.com/containerd/continuity v0.4.4/go.mod h1:/lNJvtJKUQStBzpVQ1+rasXO1LAWtUQssk28EZvJ3nE= github.com/containerd/errdefs v1.0.0 h1:tg5yIfIlQIrxYtu9ajqY42W3lpS19XqdxRQeEwYG8PI= github.com/containerd/errdefs v1.0.0/go.mod h1:+YBYIdtsnF4Iw6nWZhJcqGSg/dwvV7tyJ/kCkyJ2k+M= +github.com/containerd/errdefs/pkg v0.3.0 h1:9IKJ06FvyNlexW690DXuQNx2KA2cUJXx151Xdx3ZPPE= +github.com/containerd/errdefs/pkg v0.3.0/go.mod h1:NJw6s9HwNuRhnjJhM7pylWwMyAkmCQvQ4GpJHEqRLVk= github.com/containerd/log v0.1.0 h1:TCJt7ioM2cr/tfR8GPbGf9/VRAX8D2B4PjzCpfX540I= github.com/containerd/log v0.1.0/go.mod h1:VRRf09a7mHDIRezVKTRCrOq78v577GXq3bSa3EhrzVo= github.com/containerd/platforms v0.2.1 h1:zvwtM3rz2YHPQsF2CHYM8+KtB5dvhISiXh5ZpSBQv6A= @@ -259,16 +243,12 @@ github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1 github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78= github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc= -github.com/distribution/distribution/v3 v3.0.0-20221208165359-362910506bc2 h1:aBfCb7iqHmDEIp6fBvC/hQUddQfg+3qdYjwzaiP9Hnc= -github.com/distribution/distribution/v3 v3.0.0-20221208165359-362910506bc2/go.mod h1:WHNsWjnIn2V1LYOrME7e8KxSeKunYHsxEm4am0BUtcI= +github.com/distribution/distribution/v3 v3.0.0 h1:q4R8wemdRQDClzoNNStftB2ZAfqOiN6UX90KJc4HjyM= +github.com/distribution/distribution/v3 v3.0.0/go.mod h1:tRNuFoZsUdyRVegq8xGNeds4KLjwLCRin/tTo6i1DhU= github.com/distribution/reference v0.6.0 h1:0IXCQ5g4/QMHHkarYzh5l+u8T3t73zM5QvfrDyIgxBk= github.com/distribution/reference v0.6.0/go.mod h1:BbU0aIcezP1/5jX/8MP0YiH4SdvB5Y4f/wlDRiLyi3E= -github.com/docker/cli v27.5.0+incompatible h1:aMphQkcGtpHixwwhAXJT1rrK/detk2JIvDaFkLctbGM= -github.com/docker/cli v27.5.0+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= -github.com/docker/distribution v2.8.3+incompatible h1:AtKxIZ36LoNK51+Z6RpzLpddBirtxJnzDrHLEKxTAYk= -github.com/docker/distribution v2.8.3+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= -github.com/docker/docker v28.1.1+incompatible h1:49M11BFLsVO1gxY9UX9p/zwkE/rswggs8AdFmXQw51I= -github.com/docker/docker v28.1.1+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/docker v28.2.1+incompatible h1:aTSWVTDStpHbnRu0xBcGoJEjRf5EQKt6nik6Vif8sWw= +github.com/docker/docker v28.2.1+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= github.com/docker/docker-credential-helpers v0.8.2 h1:bX3YxiGzFP5sOXWc3bTPEXdEaZSeVMrFgOr3T+zrFAo= github.com/docker/docker-credential-helpers v0.8.2/go.mod h1:P3ci7E3lwkZg6XiHdRKft1KckHiO9a2rNtyFbZ/ry9M= github.com/docker/go-connections v0.5.0 h1:USnMq7hx7gwdVZq1L49hLXaFtUdTADjXGp+uj1Br63c= @@ -338,9 +318,6 @@ github.com/go-jose/go-jose/v3 v3.0.4 h1:Wp5HA7bLQcKnf6YYao/4kpRpVMp/yf6+pJKV8WFS github.com/go-jose/go-jose/v3 v3.0.4/go.mod h1:5b+7YgP7ZICgJDBdfjZaIt+H/9L9T/YQrVfLAMboGkQ= github.com/go-jose/go-jose/v4 v4.0.5 h1:M6T8+mKZl/+fNNuFHvGIzDz7BTLQPIounk/b9dw3AaE= github.com/go-jose/go-jose/v4 v4.0.5/go.mod h1:s3P1lRrkT8igV8D9OjyL4WRyHvjB6a4JSllnOrmmBOA= -github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= -github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= -github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY= github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= @@ -380,7 +357,6 @@ github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LB github.com/go-sql-driver/mysql v1.8.1/go.mod h1:wEBSXgmK//2ZFJyE+qWnIsVGmvmEKlqwuVSjsCm7DZg= github.com/go-sql-driver/mysql v1.9.1 h1:FrjNGn/BsJQjVRuSa8CBrM5BWA9BWoXXat3KrtSb/iI= github.com/go-sql-driver/mysql v1.9.1/go.mod h1:qn46aNg1333BRMNU69Lq93t8du/dwxI64Gl8i5p1WMU= -github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/go-task/slim-sprig/v3 v3.0.0 h1:sUs3vkvUymDpBKi3qH1YSqBQk9+9D/8M2mN1vB6EwHI= github.com/go-task/slim-sprig/v3 v3.0.0/go.mod h1:W848ghGpv3Qj3dhTPRyJypKRiqCdHZiAzKg9hl15HA8= github.com/go-test/deep v1.1.1 h1:0r/53hagsehfO4bzD2Pgr/+RgHqhmf+k1Bpse2cTu1U= @@ -392,7 +368,6 @@ github.com/godbus/dbus/v5 v5.1.0 h1:4KLkAxT3aOY8Li4FRJe/KvhoNFFxo0m6fNuFUO8QJUk= github.com/godbus/dbus/v5 v5.1.0/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/gofrs/uuid/v5 v5.3.2 h1:2jfO8j3XgSwlz/wHqemAEugfnTlikAYHhnqQ8Xh4fE0= github.com/gofrs/uuid/v5 v5.3.2/go.mod h1:CDOjlDMVAtN56jqyRUZh58JT31Tiw7/oQyEXZV+9bD8= -github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= github.com/golang-jwt/jwt/v4 v4.0.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= @@ -404,15 +379,10 @@ github.com/golang-jwt/jwt/v5 v5.2.2/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVI github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8 h1:f+oWsMOmNPc8JmEHVZIycC7hBoQxHH9pNKQORJNozsQ= github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8/go.mod h1:wcDNUvekVysuuOpQKo3191zZyTpiI6se1N1ULghS0sw= github.com/golang/protobuf v1.1.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= -github.com/gomodule/redigo v1.8.2 h1:H5XSIre1MB5NbPYFp+i1NBbb5qN1W8Y8YAQoAYbkm8k= -github.com/gomodule/redigo v1.8.2/go.mod h1:P9dn9mFrCBvWhGE1wpxx6fgq7BAeLBk+UUUzlpkBYO0= github.com/google/btree v1.1.3 h1:CVpQJjYgC4VbzxeGVHfvZrv1ctoYCAI8vbl07Fcxlyg= github.com/google/btree v1.1.3/go.mod h1:qOPhT0dTNdNzV6Z/lhRX0YXUafgPLFUh+gZMl761Gm4= github.com/google/certificate-transparency-go v1.0.21/go.mod h1:QeJfpSbVSfYc7RgB3gJFj9cbuQMMchQxrWXz8Ruopmg= @@ -422,7 +392,6 @@ github.com/google/gnostic-models v0.6.9 h1:MU/8wDLif2qCXZmzncUQ/BOfxWfthHi63Kqpo github.com/google/gnostic-models v0.6.9/go.mod h1:CiWsm0s6BSQd1hRn8/QmxqB6BesYcbSZxsz9b0KuDBw= github.com/google/go-attestation v0.5.1 h1:jqtOrLk5MNdliTKjPbIPrAaRKJaKW+0LIU2n/brJYms= github.com/google/go-attestation v0.5.1/go.mod h1:KqGatdUhg5kPFkokyzSBDxwSCFyRgIgtRkMp6c3lOBQ= -github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= @@ -466,8 +435,8 @@ github.com/gophercloud/gophercloud/v2 v2.7.0 h1:o0m4kgVcPgHlcXiWAjoVxGd8QCmvM5VU github.com/gophercloud/gophercloud/v2 v2.7.0/go.mod h1:Ki/ILhYZr/5EPebrPL9Ej+tUg4lqx71/YH2JWVeU+Qk= github.com/gophercloud/utils/v2 v2.0.0-20250506092640-af27464b6166 h1:U82pil2tMV/BkeWmy3eKT9mTmodSfwOw+Czl/s5eBrw= github.com/gophercloud/utils/v2 v2.0.0-20250506092640-af27464b6166/go.mod h1:WypkO28BNmRXS8EPyW6I58L3qrBUy3w60schxwx7ZVc= -github.com/gorilla/handlers v1.5.1 h1:9lRY6j8DEeeBT10CvO9hGW0gmky0BprnvDI5vfhUHH4= -github.com/gorilla/handlers v1.5.1/go.mod h1:t8XrUpc4KVXb7HGyJ4/cEnwQiaxrX/hz1Zv/4g96P1Q= +github.com/gorilla/handlers v1.5.2 h1:cLTUSsNkgcwhgRqvCNmdbRWG0A3N4F+M2nWKdScwyEE= +github.com/gorilla/handlers v1.5.2/go.mod h1:dX+xVpaxdSw+q0Qek8SSsl3dfMk3jNddUkMzo0GtH0w= github.com/gorilla/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY= github.com/gorilla/mux v1.8.1/go.mod h1:AKf9I4AEqPTmMytcMc0KkNouC66V3BtZ4qD5fmWSiMQ= github.com/gorilla/websocket v1.5.4-0.20250319132907-e064f32e3674 h1:JeSE6pjso5THxAzdVpqr6/geYxZytqFMBCOtn/ujyeo= @@ -520,8 +489,10 @@ github.com/hashicorp/go-uuid v1.0.3 h1:2gKiV6YVmrJ1i2CKKa9obLvRieoRGviZFL26PcT/C github.com/hashicorp/go-uuid v1.0.3/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= github.com/hashicorp/go-version v1.7.0 h1:5tqGy27NaOTB8yJKUZELlFAS/LTKJkrmONwQKeRZfjY= github.com/hashicorp/go-version v1.7.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= -github.com/hashicorp/golang-lru v0.5.4 h1:YDjusn29QI/Das2iO9M0BHnIbxPeyuCHsjMW+lJfyTc= -github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= +github.com/hashicorp/golang-lru/arc/v2 v2.0.5 h1:l2zaLDubNhW4XO3LnliVj0GXO3+/CGNJAg1dcN2Fpfw= +github.com/hashicorp/golang-lru/arc/v2 v2.0.5/go.mod h1:ny6zBSQZi2JxIeYcv7kt2sH2PXJtirBN7RDhRpxPkxU= +github.com/hashicorp/golang-lru/v2 v2.0.5 h1:wW7h1TG88eUIJ2i69gaE3uNVtEPIagzhGvHgwfx2Vm4= +github.com/hashicorp/golang-lru/v2 v2.0.5/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM= github.com/hashicorp/hc-install v0.9.2 h1:v80EtNX4fCVHqzL9Lg/2xkp62bbvQMnvPQ0G+OmtO24= github.com/hashicorp/hc-install v0.9.2/go.mod h1:XUqBQNnuT4RsxoxiM9ZaUk0NX8hi2h+Lb6/c0OZnC/I= github.com/hashicorp/hcl/v2 v2.23.0 h1:Fphj1/gCylPxHutVSEOf2fBOh1VE4AuLV7+kbJf3qos= @@ -536,14 +507,14 @@ github.com/hashicorp/terraform-plugin-framework v1.15.0 h1:LQ2rsOfmDLxcn5EeIwdXF github.com/hashicorp/terraform-plugin-framework v1.15.0/go.mod h1:hxrNI/GY32KPISpWqlCoTLM9JZsGH3CyYlir09bD/fI= github.com/hashicorp/terraform-plugin-framework-validators v0.18.0 h1:OQnlOt98ua//rCw+QhBbSqfW3QbwtVrcdWeQN5gI3Hw= github.com/hashicorp/terraform-plugin-framework-validators v0.18.0/go.mod h1:lZvZvagw5hsJwuY7mAY6KUz45/U6fiDR0CzQAwWD0CA= -github.com/hashicorp/terraform-plugin-go v0.27.0 h1:ujykws/fWIdsi6oTUT5Or4ukvEan4aN9lY+LOxVP8EE= -github.com/hashicorp/terraform-plugin-go v0.27.0/go.mod h1:FDa2Bb3uumkTGSkTFpWSOwWJDwA7bf3vdP3ltLDTH6o= +github.com/hashicorp/terraform-plugin-go v0.28.0 h1:zJmu2UDwhVN0J+J20RE5huiF3XXlTYVIleaevHZgKPA= +github.com/hashicorp/terraform-plugin-go v0.28.0/go.mod h1:FDa2Bb3uumkTGSkTFpWSOwWJDwA7bf3vdP3ltLDTH6o= github.com/hashicorp/terraform-plugin-log v0.9.0 h1:i7hOA+vdAItN1/7UrfBqBwvYPQ9TFvymaRGZED3FCV0= github.com/hashicorp/terraform-plugin-log v0.9.0/go.mod h1:rKL8egZQ/eXSyDqzLUuwUYLVdlYeamldAHSxjUFADow= github.com/hashicorp/terraform-plugin-sdk/v2 v2.37.0 h1:NFPMacTrY/IdcIcnUB+7hsore1ZaRWU9cnB6jFoBnIM= github.com/hashicorp/terraform-plugin-sdk/v2 v2.37.0/go.mod h1:QYmYnLfsosrxjCnGY1p9c7Zj6n9thnEE+7RObeYs3fA= -github.com/hashicorp/terraform-plugin-testing v1.13.0 h1:vTELm6x3Z4H9VO3fbz71wbJhbs/5dr5DXfIwi3GMmPY= -github.com/hashicorp/terraform-plugin-testing v1.13.0/go.mod h1:b/hl6YZLm9fjeud/3goqh/gdqhZXbRfbHMkEiY9dZwc= +github.com/hashicorp/terraform-plugin-testing v1.13.1 h1:0nhSm8lngGTggqXptU4vunFI0S2XjLAhJg3RylC5aLw= +github.com/hashicorp/terraform-plugin-testing v1.13.1/go.mod h1:b/hl6YZLm9fjeud/3goqh/gdqhZXbRfbHMkEiY9dZwc= github.com/hashicorp/terraform-registry-address v0.2.5 h1:2GTftHqmUhVOeuu9CW3kwDkRe4pcBDq0uuK5VJngU1M= github.com/hashicorp/terraform-registry-address v0.2.5/go.mod h1:PpzXWINwB5kuVS5CA7m1+eO2f1jKb5ZDIxrOPfpnGkg= github.com/hashicorp/terraform-svchost v0.1.1 h1:EZZimZ1GxdqFRinZ1tpJwVxxt49xc/S52uzrw4x0jKQ= @@ -575,11 +546,8 @@ github.com/jmoiron/sqlx v1.4.0 h1:1PLqN7S1UYp5t4SrVVnt4nUVNemrDAtxlulVe+Qgm3o= github.com/jmoiron/sqlx v1.4.0/go.mod h1:ZrZ7UsYB/weZdl2Bxg6jCRO9c3YHl8r3ahlKmRT4JLY= github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= -github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= -github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= -github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/kevinburke/ssh_config v1.2.0 h1:x584FjTGwHzMwvHx18PXxbBVzfnxogHaAReU4gf13a4= github.com/kevinburke/ssh_config v1.2.0/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= github.com/keybase/go-keychain v0.0.1 h1:way+bWYa6lDppZoZcgMbYsvC7GxljxrskdNInRtuthU= @@ -588,8 +556,6 @@ github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/klauspost/compress v1.18.0 h1:c/Cqfb0r+Yi+JtIEq73FWXVkRonBlf0CRNYc8Zttxdo= github.com/klauspost/compress v1.18.0/go.mod h1:2Pp+KzxcywXVXMr50+X0Q/Lsb43OQHYWRCY2AiWywWQ= -github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= @@ -633,7 +599,6 @@ github.com/mattn/go-runewidth v0.0.16/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh github.com/mattn/go-sqlite3 v1.14.22/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y= github.com/mattn/go-sqlite3 v1.14.24 h1:tpSp2G2KyMnnQu99ngJ47EIkWVmliIizyZBfPrBWDRM= github.com/mattn/go-sqlite3 v1.14.24/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y= -github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/miekg/dns v1.1.58 h1:ca2Hdkz+cDg/7eNF6V56jjzuZ4aCAE+DbVkILdQWG/4= github.com/miekg/dns v1.1.58/go.mod h1:Ypv+3b/KadlvW9vJfXOTf300O4UqaHFzFCuHz+rPkBY= github.com/mitchellh/colorstring v0.0.0-20190213212951-d06e56a500db h1:62I3jR2EmQ4l5rM/4FEfDWcRD+abF5XlKShorW5LRoQ= @@ -652,8 +617,6 @@ github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zx github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= github.com/moby/docker-image-spec v1.3.1 h1:jMKff3w6PgbfSa69GfNg+zN/XLhfXJGnEx3Nl2EsFP0= github.com/moby/docker-image-spec v1.3.1/go.mod h1:eKmb5VW8vQEh/BAr2yvVNvuiJuY6UIocYsFu/DxxRpo= -github.com/moby/locker v1.0.1 h1:fOXqR41zeveg4fFODix+1Ch4mj/gT0NE1XJbp/epuBg= -github.com/moby/locker v1.0.1/go.mod h1:S7SDdo5zpBK84bzzVlKr2V0hz+7x9hWbYC/kq7oQppc= github.com/moby/spdystream v0.5.0 h1:7r0J1Si3QO/kjRitvSLVVFUjxMEb/YLj6S9FF62JBCU= github.com/moby/spdystream v0.5.0/go.mod h1:xBAYlnt/ay+11ShkdFKNAG7LsyK/tmNBVvVOwrfMgdI= github.com/moby/sys/atomicwriter v0.1.0 h1:kw5D/EqkBwsBFi0ss9v1VG3wIkVhzGvLklJ+w3A14Sw= @@ -662,15 +625,11 @@ github.com/moby/sys/mountinfo v0.7.2 h1:1shs6aH5s4o5H2zQLn796ADW1wMrIwHsyJ2v9Kou github.com/moby/sys/mountinfo v0.7.2/go.mod h1:1YOa8w8Ih7uW0wALDUgT1dTTSBrZ+HiBLGws92L2RU4= github.com/moby/sys/sequential v0.6.0 h1:qrx7XFUd/5DxtqcoH1h438hF5TmOvzC/lspjy7zgvCU= github.com/moby/sys/sequential v0.6.0/go.mod h1:uyv8EUTrca5PnDsdMGXhZe6CCe8U/UiTWd+lL+7b/Ko= -github.com/moby/sys/userns v0.1.0 h1:tVLXkFOxVu9A64/yh59slHVv9ahO9UIev4JZusOLG/g= -github.com/moby/sys/userns v0.1.0/go.mod h1:IHUYgu/kao6N8YZlp9Cf444ySSvCmDlmzUcYfDHOl28= -github.com/moby/term v0.5.0 h1:xt8Q1nalod/v7BqbG21f8mQPqH+xAaC9C3N3wfWbVP0= -github.com/moby/term v0.5.0/go.mod h1:8FzsFHVUBGZdbDsJw/ot+X+d5HLUbvklYLJ9uGfcI3Y= +github.com/moby/term v0.5.2 h1:6qk3FJAFDs6i/q3W/pQ97SX192qKfZgGjCQqfCJkgzQ= +github.com/moby/term v0.5.2/go.mod h1:d3djjFCrjnB+fl8NJux+EJzu0msscUP+f8it8hPkFLc= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= -github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= github.com/monochromegane/go-gitignore v0.0.0-20200626010858-205db1a8cc00 h1:n6/2gBQ3RWajuToeY6ZtZTIKv2v7ThUy5KKusIT0yc0= @@ -679,7 +638,6 @@ github.com/morikuni/aec v1.0.0 h1:nP9CBfwrvYnBRgY6qfDQkygYDmYwOilePFkwzv4dU8A= github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= -github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f h1:y5//uYreIhSUg3J1GEMiLbxo1LJaP8RfCpH6pymGZus= github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw= github.com/oklog/run v1.0.0 h1:Ru7dDtJNOyC66gQ5dQmaCa0qIsAUFY3sFpK1Xk8igrw= @@ -706,7 +664,6 @@ github.com/pjbgf/sha1cd v0.3.2 h1:a9wb0bp1oC2TGwStyn0Umc/IGKQnEgF0vVaZ8QF8eo4= github.com/pjbgf/sha1cd v0.3.2/go.mod h1:zQWigSxVmsHEZow5qaLtPYxpcKMMQpa09ixqBxuCS6A= github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c h1:+mdjkGKdHQG3305AYmdv1U2eRNDiU2ErMBj1gwrq8eQ= github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c/go.mod h1:7rwL4CYBLnjLxUqIJNnCWiEdr3bn6IUYi15bNlnbCCU= -github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/planetscale/vtprotobuf v0.6.1-0.20241121165744-79df5c4772f2 h1:1sLMdKq4gNANTj0dUibycTLzpIEKVnLnbaEkxws78nw= @@ -718,24 +675,18 @@ github.com/poy/onpar v1.1.2 h1:QaNrNiZx0+Nar5dLgTVp5mXkyoVFIbepjyEoGSnhbAY= github.com/poy/onpar v1.1.2/go.mod h1:6X8FLNoxyr9kkmnlqpK6LSoiOtrO6MICtWwEuWkLjzg= github.com/prashantv/gostub v1.1.0 h1:BTyx3RfQjRHnUWaGF9oQos79AlQ5k8WNktv7VGvVH4g= github.com/prashantv/gostub v1.1.0/go.mod h1:A5zLQHz7ieHGG7is6LLXLz7I8+3LZzsrV0P1IAHhP5U= -github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= -github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= -github.com/prometheus/client_golang v1.1.0/go.mod h1:I1FGZT9+L76gKKOs5djB6ezCbFQP1xR9D75/vuwEF3g= github.com/prometheus/client_golang v1.22.0 h1:rb93p9lokFEsctTys46VnV1kLCDpVZ0a/Y92Vm0Zc6Q= github.com/prometheus/client_golang v1.22.0/go.mod h1:R7ljNsLXhuQXYZYtw6GAE9AZg8Y7vEW5scdCXrWRXC0= -github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= -github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E= github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY= -github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= -github.com/prometheus/common v0.6.0/go.mod h1:eBmuwkDJBwy6iBfxCBob6t6dR6ENT/y+J+Zk0j9GMYc= github.com/prometheus/common v0.62.0 h1:xasJaQlnWAeyHdUBeGjXmutelfJHWMRr+Fg4QszZ2Io= github.com/prometheus/common v0.62.0/go.mod h1:vyBcEuLSvWos9B1+CyL7JZ2up+uFzXhkqml0W5zIY1I= -github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= -github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= -github.com/prometheus/procfs v0.0.3/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ= github.com/prometheus/procfs v0.15.1 h1:YagwOFzUgYfKKHX6Dr+sHT7km/hxC76UB0learggepc= github.com/prometheus/procfs v0.15.1/go.mod h1:fB45yRUv8NstnjriLhBQLuOUt+WW4BsoGhij/e3PBqk= +github.com/redis/go-redis/extra/rediscmd/v9 v9.0.5 h1:EaDatTxkdHG+U3Bk4EUr+DZ7fOGwTfezUiUJMaIcaho= +github.com/redis/go-redis/extra/rediscmd/v9 v9.0.5/go.mod h1:fyalQWdtzDBECAQFBJuQe5bzQ02jGd5Qcbgb97Flm7U= +github.com/redis/go-redis/extra/redisotel/v9 v9.0.5 h1:EfpWLLCyXw8PSM2/XNJLjI3Pb27yVE+gIAfeqp8LUCc= +github.com/redis/go-redis/extra/redisotel/v9 v9.0.5/go.mod h1:WZjPDy7VNzn77AAfnAfVjZNvfJTYfPetfZk5yoSTLaQ= github.com/redis/go-redis/v9 v9.8.0 h1:q3nRvjrlge/6UD7eTu/DSg2uYiU2mCL0G/uzBWqhicI= github.com/redis/go-redis/v9 v9.8.0/go.mod h1:huWgSWd8mW6+m0VPhJjSSQ+d6Nh1VICQ6Q5lHuCH/Iw= github.com/regclient/regclient v0.8.3 h1:AFAPu/vmOYGyY22AIgzdBUKbzH+83lEpRioRYJ/reCs= @@ -746,8 +697,8 @@ github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUc github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ= github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc= -github.com/rubenv/sql-migrate v1.7.1 h1:f/o0WgfO/GqNuVg+6801K/KW3WdDSupzSjDYODmiUq4= -github.com/rubenv/sql-migrate v1.7.1/go.mod h1:Ob2Psprc0/3ggbM6wCzyYVFFuc6FyZrb2AS+ezLDFb4= +github.com/rubenv/sql-migrate v1.8.0 h1:dXnYiJk9k3wetp7GfQbKJcPHjVJL6YK19tKj8t2Ns0o= +github.com/rubenv/sql-migrate v1.8.0/go.mod h1:F2bGFBwCU+pnmbtNYDeKvSuvL6lBVtXDXUUv5t+u1qw= github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/ryanuber/go-glob v1.0.0 h1:iQh3xXAumdQ+4Ufa5b25cRpC5TYKlno6hsv6Cb3pkBk= @@ -768,15 +719,14 @@ github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 h1:n661drycOFuPLCN github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3/go.mod h1:A0bzQcvG0E7Rwjx0REVgAGH58e96+X0MeOfepqsbeW4= github.com/shopspring/decimal v1.4.0 h1:bxl37RwXBklmTi0C79JfXCEBD1cqqHt0bbgBAGFp81k= github.com/shopspring/decimal v1.4.0/go.mod h1:gawqmDU56v4yIKSwfBSFip1HdCCXN8/+DMd9qYNcwME= -github.com/siderolabs/talos/pkg/machinery v1.10.2 h1:i9aNYmFSpiSOVM7dlAL5iNMYnFG19087x2QLJ0MbTEE= -github.com/siderolabs/talos/pkg/machinery v1.10.2/go.mod h1:MVJs1hsKm7N2GkQVeByjoDoLJmU/VhQO0cLJRZPxlZk= +github.com/siderolabs/talos/pkg/machinery v1.10.3 h1:otoAMrxvQBdkdQDPREJH+pa6bebuA7HK3Vb0qgpeIgA= +github.com/siderolabs/talos/pkg/machinery v1.10.3/go.mod h1:gNv/CPK+2tRIhQvmd7h2bgoYGxzoHHWbaejXpNyZvDo= github.com/sigstore/protobuf-specs v0.4.1 h1:5SsMqZbdkcO/DNHudaxuCUEjj6x29tS2Xby1BxGU7Zc= github.com/sigstore/protobuf-specs v0.4.1/go.mod h1:+gXR+38nIa2oEupqDdzg4qSBT0Os+sP7oYv6alWewWc= github.com/sigstore/rekor v1.3.10 h1:/mSvRo4MZ/59ECIlARhyykAlQlkmeAQpvBPlmJtZOCU= github.com/sigstore/rekor v1.3.10/go.mod h1:JvryKJ40O0XA48MdzYUPu0y4fyvqt0C4iSY7ri9iu3A= github.com/sigstore/sigstore v1.9.4 h1:64+OGed80+A4mRlNzRd055vFcgBeDghjZw24rPLZgDU= github.com/sigstore/sigstore v1.9.4/go.mod h1:Q7tGTC3gbtK7c3jcxEmGc2MmK4rRpIRzi3bxRFWKvEY= -github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ= github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= github.com/skeema/knownhosts v1.3.1 h1:X2osQ+RAjK76shCbvhHHHVl3ZlgDm8apHEHFqRjnBY8= @@ -792,7 +742,6 @@ github.com/spf13/pflag v1.0.6/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An github.com/spiffe/go-spiffe/v2 v2.5.0 h1:N2I01KCUkv1FAjZXJMwh95KK1ZIQLYbPfhaxw8WS0hE= github.com/spiffe/go-spiffe/v2 v2.5.0/go.mod h1:P+NxobPc6wXhVtINNtFjNWGBTreew1GBUCwT2wPmb7g= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY= @@ -845,12 +794,6 @@ github.com/xlab/treeprint v1.2.0/go.mod h1:gj5Gd3gPdKtR1ikdDK6fnFLdmIS0X30kTTuNd github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= -github.com/yvasiyarov/go-metrics v0.0.0-20140926110328-57bccd1ccd43 h1:+lm10QQTNSBd8DVTNGHx7o/IKu9HYDvLMffDhbyLccI= -github.com/yvasiyarov/go-metrics v0.0.0-20140926110328-57bccd1ccd43/go.mod h1:aX5oPXxHm3bOH+xeAttToC8pqch2ScQN/JoXYupl6xs= -github.com/yvasiyarov/gorelic v0.0.0-20141212073537-a9bba5b9ab50 h1:hlE8//ciYMztlGpl/VA+Zm1AcTPHYkHJPbHqE6WJUXE= -github.com/yvasiyarov/gorelic v0.0.0-20141212073537-a9bba5b9ab50/go.mod h1:NUSPSUX/bi6SeDMUh6brw0nXpxHnc96TguQh0+r/ssA= -github.com/yvasiyarov/newrelic_platform_go v0.0.0-20140908184405-b21fdbd4370f h1:ERexzlUfuTvpE74urLSbIQW0Z/6hF9t8U4NsJLaioAY= -github.com/yvasiyarov/newrelic_platform_go v0.0.0-20140908184405-b21fdbd4370f/go.mod h1:GlGEuHIJweS1mbCqG+7vt2nvWLzLLnRHbXz5JKd/Qbg= github.com/zalando/go-keyring v0.2.3 h1:v9CUu9phlABObO4LPWycf+zwMG7nlbb3t/B5wa97yms= github.com/zalando/go-keyring v0.2.3/go.mod h1:HL4k+OXQfJUWaMnqyuSOc0drfGPX2b51Du6K+MRgZMk= github.com/zclconf/go-cty v1.16.2 h1:LAJSwc3v81IRBZyUVQDUdZ7hs3SYs9jv0eZJDWHD/70= @@ -869,28 +812,50 @@ go.mongodb.org/mongo-driver v1.14.0 h1:P98w8egYRjYe3XDjxhYJagTokP/H6HzlsnojRgZRd go.mongodb.org/mongo-driver v1.14.0/go.mod h1:Vzb0Mk/pa7e6cWw85R4F/endUC3u0U9jGcNU603k65c= go.mozilla.org/pkcs7 v0.0.0-20200128120323-432b2356ecb1 h1:A/5uWzF44DlIgdm/PQFwfMkW0JX+cIcQi/SwLAmZP5M= go.mozilla.org/pkcs7 v0.0.0-20200128120323-432b2356ecb1/go.mod h1:SNgMg+EgDFwmvSmLRTNKC5fegJjB7v23qTQ0XLGUNHk= -go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0= -go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA= go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A= +go.opentelemetry.io/contrib/bridges/prometheus v0.57.0 h1:UW0+QyeyBVhn+COBec3nGhfnFe5lwB0ic1JBVjzhk0w= +go.opentelemetry.io/contrib/bridges/prometheus v0.57.0/go.mod h1:ppciCHRLsyCio54qbzQv0E4Jyth/fLWDTJYfvWpcSVk= go.opentelemetry.io/contrib/detectors/gcp v1.35.0 h1:bGvFt68+KTiAKFlacHW6AhA56GF2rS0bdD3aJYEnmzA= go.opentelemetry.io/contrib/detectors/gcp v1.35.0/go.mod h1:qGWP8/+ILwMRIUf9uIVLloR1uo5ZYAslM4O6OqUi1DA= +go.opentelemetry.io/contrib/exporters/autoexport v0.57.0 h1:jmTVJ86dP60C01K3slFQa2NQ/Aoi7zA+wy7vMOKD9H4= +go.opentelemetry.io/contrib/exporters/autoexport v0.57.0/go.mod h1:EJBheUMttD/lABFyLXhce47Wr6DPWYReCzaZiXadH7g= go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.60.0 h1:x7wzEgXfnzJcHDwStJT+mxOz4etr2EcexjqhBvmoakw= go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.60.0/go.mod h1:rg+RlpR5dKwaS95IyyZqj5Wd4E13lk/msnTS0Xl9lJM= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.60.0 h1:sbiXRNDSWJOTobXh5HyQKjq6wUC5tNybqjIqDpAY4CU= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.60.0/go.mod h1:69uWxva0WgAA/4bu2Yy70SLDBwZXuQ6PbBpbsa5iZrQ= go.opentelemetry.io/otel v1.35.0 h1:xKWKPxrxB6OtMCbmMY021CqC45J+3Onta9MqjhnusiQ= go.opentelemetry.io/otel v1.35.0/go.mod h1:UEqy8Zp11hpkUrL73gSlELM0DupHoiq72dR+Zqel/+Y= +go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.8.0 h1:WzNab7hOOLzdDF/EoWCt4glhrbMPVMOO5JYTmpz36Ls= +go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.8.0/go.mod h1:hKvJwTzJdp90Vh7p6q/9PAOd55dI6WA6sWj62a/JvSs= +go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.8.0 h1:S+LdBGiQXtJdowoJoQPEtI52syEP/JYBUpjO49EQhV8= +go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.8.0/go.mod h1:5KXybFvPGds3QinJWQT7pmXf+TN5YIa7CNYObWRkj50= +go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.32.0 h1:j7ZSD+5yn+lo3sGV69nW04rRR0jhYnBwjuX3r0HvnK0= +go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.32.0/go.mod h1:WXbYJTUaZXAbYd8lbgGuvih0yuCfOFC5RJoYnoLcGz8= +go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.32.0 h1:t/Qur3vKSkUCcDVaSumWF2PKHt85pc7fRvFuoVT8qFU= +go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.32.0/go.mod h1:Rl61tySSdcOJWoEgYZVtmnKdA0GeKrSqkHC1t+91CH8= go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.33.0 h1:Vh5HayB/0HHfOQA7Ctx69E/Y/DcQSMPpKANYVMQ7fBA= go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.33.0/go.mod h1:cpgtDBaqD/6ok/UG0jT15/uKjAY8mRA53diogHBg3UI= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.33.0 h1:5pojmb1U1AogINhN3SurB+zm/nIcusopeBNp42f45QM= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.33.0/go.mod h1:57gTHJSE5S1tqg+EKsLPlTWhpHMsWlVmer+LA926XiA= go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.33.0 h1:wpMfgF8E1rkrT1Z6meFh1NDtownE9Ii3n3X2GJYjsaU= go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.33.0/go.mod h1:wAy0T/dUbs468uOlkT31xjvqQgEVXv58BRFWEgn5v/0= +go.opentelemetry.io/otel/exporters/prometheus v0.54.0 h1:rFwzp68QMgtzu9PgP3jm9XaMICI6TsofWWPcBDKwlsU= +go.opentelemetry.io/otel/exporters/prometheus v0.54.0/go.mod h1:QyjcV9qDP6VeK5qPyKETvNjmaaEc7+gqjh4SS0ZYzDU= +go.opentelemetry.io/otel/exporters/stdout/stdoutlog v0.8.0 h1:CHXNXwfKWfzS65yrlB2PVds1IBZcdsX8Vepy9of0iRU= +go.opentelemetry.io/otel/exporters/stdout/stdoutlog v0.8.0/go.mod h1:zKU4zUgKiaRxrdovSS2amdM5gOc59slmo/zJwGX+YBg= go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.35.0 h1:PB3Zrjs1sG1GBX51SXyTSoOTqcDglmsk7nT6tkKPb/k= go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.35.0/go.mod h1:U2R3XyVPzn0WX7wOIypPuptulsMcPDPs/oiSVOMVnHY= +go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.32.0 h1:cC2yDI3IQd0Udsux7Qmq8ToKAx1XCilTQECZ0KDZyTw= +go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.32.0/go.mod h1:2PD5Ex6z8CFzDbTdOlwyNIUywRr1DN0ospafJM1wJ+s= +go.opentelemetry.io/otel/log v0.8.0 h1:egZ8vV5atrUWUbnSsHn6vB8R21G2wrKqNiDt3iWertk= +go.opentelemetry.io/otel/log v0.8.0/go.mod h1:M9qvDdUTRCopJcGRKg57+JSQ9LgLBrwwfC32epk5NX8= go.opentelemetry.io/otel/metric v1.35.0 h1:0znxYu2SNyuMSQT4Y9WDWej0VpcsxkuklLa4/siN90M= go.opentelemetry.io/otel/metric v1.35.0/go.mod h1:nKVFgxBZ2fReX6IlyW28MgZojkoAkJGaE8CpgeAU3oE= go.opentelemetry.io/otel/sdk v1.35.0 h1:iPctf8iprVySXSKJffSS79eOjl9pvxV9ZqOWT0QejKY= go.opentelemetry.io/otel/sdk v1.35.0/go.mod h1:+ga1bZliga3DxJ3CQGg3updiaAJoNECOgJREo9KHGQg= +go.opentelemetry.io/otel/sdk/log v0.8.0 h1:zg7GUYXqxk1jnGF/dTdLPrK06xJdrXgqgFLnI4Crxvs= +go.opentelemetry.io/otel/sdk/log v0.8.0/go.mod h1:50iXr0UVwQrYS45KbruFrEt4LvAdCaWWgIrsN3ZQggo= go.opentelemetry.io/otel/sdk/metric v1.35.0 h1:1RriWBmCKgkeHEhM7a2uMjMUfP7MsOF5JpUCaEqEI9o= go.opentelemetry.io/otel/sdk/metric v1.35.0/go.mod h1:is6XYCUMpcKi+ZsOvfluY5YstFnhW0BidkR+gL+qN+w= go.opentelemetry.io/otel/trace v1.35.0 h1:dPpEfJu1sDIqruz7BHFG3c7528f6ddfSWfFDVt/xgMs= @@ -905,7 +870,6 @@ go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8= go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E= -golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= @@ -923,9 +887,7 @@ golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91 golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.24.0 h1:ZfthKaKaT4NrhGVZHO1/WDTwGES4De8KtWO0SIbNJMU= golang.org/x/mod v0.24.0/go.mod h1:IXM97Txy2VM4PJ3gI61r1YEk/gAj6zAHN3AdZt6S9Ww= -golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= @@ -940,8 +902,6 @@ golang.org/x/net v0.40.0/go.mod h1:y0hY0exeL2Pku80/zKK7tpntoX23cqL3Oa6njdgRtds= golang.org/x/oauth2 v0.30.0 h1:dnDm7JmhM45NNpd8FDDeLhK6FwqbOf4MLCM9zb1BOHI= golang.org/x/oauth2 v0.30.0/go.mod h1:B++QgG3ZKulg6sRPGD/mqlHQs5rB3Ml9erfeDY7xKlU= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -949,18 +909,16 @@ golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.14.0 h1:woo0S4Yywslg6hp4eUFjTVOyKt0RookbpAHG4c1HmhQ= golang.org/x/sync v0.14.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= -golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190801041406-cbf593c0f2f3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191008105621-543471e840be/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200602225109-6fdc65e7d980/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210426230700-d19ff857e887/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -1001,6 +959,7 @@ golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGm golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= golang.org/x/tools v0.33.0 h1:4qz2S3zmRxbGIhDIAgjxvFutSvH5EfnsYrRBj0UI0bc= @@ -1011,8 +970,8 @@ golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8T golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= gomodules.xyz/jsonpatch/v2 v2.4.0 h1:Ci3iUJyx9UeRx7CeFN8ARgGbkESwJK+KB9lLcWxY/Zw= gomodules.xyz/jsonpatch/v2 v2.4.0/go.mod h1:AH3dM2RI6uoBZxn3LVrfvJ3E0/9dG4cSrbuBJT4moAY= -google.golang.org/api v0.233.0 h1:iGZfjXAJiUFSSaekVB7LzXl6tRfEKhUN7FkZN++07tI= -google.golang.org/api v0.233.0/go.mod h1:TCIVLLlcwunlMpZIhIp7Ltk77W+vUSdUKAAIlbxY44c= +google.golang.org/api v0.235.0 h1:C3MkpQSRxS1Jy6AkzTGKKrpSCOd2WOGrezZ+icKSkKo= +google.golang.org/api v0.235.0/go.mod h1:QpeJkemzkFKe5VCE/PMv7GsUfn9ZF+u+q1Q7w6ckxTg= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.6.8 h1:IhEN5q69dyKagZPYMSdIjS2HqprW324FRQZJcGqPAsM= google.golang.org/appengine v1.6.8/go.mod h1:1jJ3jBArFh5pcgW8gCtRJnepW8FzD1V44FJffLiz/Ds= @@ -1020,15 +979,14 @@ google.golang.org/genproto v0.0.0-20250505200425-f936aa4a68b2 h1:1tXaIXCracvtsRx google.golang.org/genproto v0.0.0-20250505200425-f936aa4a68b2/go.mod h1:49MsLSx0oWMOZqcpB3uL8ZOkAh1+TndpJ8ONoCBWiZk= google.golang.org/genproto/googleapis/api v0.0.0-20250505200425-f936aa4a68b2 h1:vPV0tzlsK6EzEDHNNH5sa7Hs9bd7iXR7B1tSiPepkV0= google.golang.org/genproto/googleapis/api v0.0.0-20250505200425-f936aa4a68b2/go.mod h1:pKLAc5OolXC3ViWGI62vvC0n10CpwAtRcTNCFwTKBEw= -google.golang.org/genproto/googleapis/rpc v0.0.0-20250505200425-f936aa4a68b2 h1:IqsN8hx+lWLqlN+Sc3DoMy/watjofWiU8sRFgQ8fhKM= -google.golang.org/genproto/googleapis/rpc v0.0.0-20250505200425-f936aa4a68b2/go.mod h1:qQ0YXyHHx3XkvlzUtpXDkS29lDSafHMZBAZDc03LQ3A= -google.golang.org/grpc v1.72.1 h1:HR03wO6eyZ7lknl75XlxABNVLLFc2PAb6mHlYh756mA= -google.golang.org/grpc v1.72.1/go.mod h1:wH5Aktxcg25y1I3w7H69nHfXdOG3UiadoBtjh3izSDM= +google.golang.org/genproto/googleapis/rpc v0.0.0-20250512202823-5a2f75b736a9 h1:IkAfh6J/yllPtpYFU0zZN1hUPYdT0ogkBT/9hMxHjvg= +google.golang.org/genproto/googleapis/rpc v0.0.0-20250512202823-5a2f75b736a9/go.mod h1:qQ0YXyHHx3XkvlzUtpXDkS29lDSafHMZBAZDc03LQ3A= +google.golang.org/grpc v1.72.2 h1:TdbGzwb82ty4OusHWepvFWGLgIbNo1/SUynEN0ssqv8= +google.golang.org/grpc v1.72.2/go.mod h1:wH5Aktxcg25y1I3w7H69nHfXdOG3UiadoBtjh3izSDM= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.36.6 h1:z1NpPI8ku2WgiWnf+t9wTPsn6eP1L7ksHUlkfLvd9xY= google.golang.org/protobuf v1.36.6/go.mod h1:jduwjTPXsFjZGTmRluh+L6NjiWu7pchiJ2/5YcXBHnY= -gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= @@ -1040,7 +998,6 @@ gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= gopkg.in/warnings.v0 v0.1.2 h1:wFXVbFY8DY5/xOe1ECiWdKCzZlxgshcYVNkBHstARME= gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= -gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= @@ -1050,8 +1007,8 @@ gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gotest.tools/v3 v3.4.0 h1:ZazjZUfuVeZGLAmlKKuyv3IKP5orXcwtOwDQH6YVr6o= gotest.tools/v3 v3.4.0/go.mod h1:CtbdzLSsqVhDgMtKsx03ird5YTGB3ar27v0u/yKBW5g= -helm.sh/helm/v3 v3.17.3 h1:3n5rW3D0ArjFl0p4/oWO8IbY/HKaNNwJtOQFdH2AZHg= -helm.sh/helm/v3 v3.17.3/go.mod h1:+uJKMH/UiMzZQOALR3XUf3BLIoczI2RKKD6bMhPh4G8= +helm.sh/helm/v3 v3.18.1 h1:qLhXmtqXOHQb0Xv9HJolOLlah8RWbgyzt50xrtTWAlg= +helm.sh/helm/v3 v3.18.1/go.mod h1:43QHS1W97RcoFJRk36ZBhHdTfykqBlJdsWp3yhzdq8w= k8s.io/api v0.33.1 h1:tA6Cf3bHnLIrUK4IqEgb2v++/GYUtqiu9sRVk3iBXyw= k8s.io/api v0.33.1/go.mod h1:87esjTn9DRSRTD4fWMXamiXxJhpOIREjWOSjsW1kEHw= k8s.io/apiextensions-apiserver v0.33.1 h1:N7ccbSlRN6I2QBcXevB73PixX2dQNIW0ZRuguEE91zI= @@ -1060,8 +1017,8 @@ k8s.io/apimachinery v0.33.1 h1:mzqXWV8tW9Rw4VeW9rEkqvnxj59k1ezDUl20tFK/oM4= k8s.io/apimachinery v0.33.1/go.mod h1:BHW0YOu7n22fFv/JkYOEfkUYNRN0fj0BlvMFWA7b+SM= k8s.io/apiserver v0.33.1 h1:yLgLUPDVC6tHbNcw5uE9mo1T6ELhJj7B0geifra3Qdo= k8s.io/apiserver v0.33.1/go.mod h1:VMbE4ArWYLO01omz+k8hFjAdYfc3GVAYPrhP2tTKccs= -k8s.io/cli-runtime v0.32.2 h1:aKQR4foh9qeyckKRkNXUccP9moxzffyndZAvr+IXMks= -k8s.io/cli-runtime v0.32.2/go.mod h1:a/JpeMztz3xDa7GCyyShcwe55p8pbcCVQxvqZnIwXN8= +k8s.io/cli-runtime v0.33.0 h1:Lbl/pq/1o8BaIuyn+aVLdEPHVN665tBAXUePs8wjX7c= +k8s.io/cli-runtime v0.33.0/go.mod h1:QcA+r43HeUM9jXFJx7A+yiTPfCooau/iCcP1wQh4NFw= k8s.io/client-go v0.33.1 h1:ZZV/Ks2g92cyxWkRRnfUDsnhNn28eFpt26aGc8KbXF4= k8s.io/client-go v0.33.1/go.mod h1:JAsUrl1ArO7uRVFWfcj6kOomSlCv+JpvIsp6usAGefA= k8s.io/cluster-bootstrap v0.33.1 h1:esGY+qXFJ78myppBzMVqqj37ReGLOJpQNslRiqmQGes= @@ -1072,8 +1029,8 @@ k8s.io/klog/v2 v2.130.1 h1:n9Xl7H1Xvksem4KFG4PYbdQCQxqc/tTUyrgXaOhHSzk= k8s.io/klog/v2 v2.130.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE= k8s.io/kube-openapi v0.0.0-20250318190949-c8a335a9a2ff h1:/usPimJzUKKu+m+TE36gUyGcf03XZEP0ZIKgKj35LS4= k8s.io/kube-openapi v0.0.0-20250318190949-c8a335a9a2ff/go.mod h1:5jIi+8yX4RIb8wk3XwBo5Pq2ccx4FP10ohkbSKCZoK8= -k8s.io/kubectl v0.32.2 h1:TAkag6+XfSBgkqK9I7ZvwtF0WVtUAvK8ZqTt+5zi1Us= -k8s.io/kubectl v0.32.2/go.mod h1:+h/NQFSPxiDZYX/WZaWw9fwYezGLISP0ud8nQKg+3g8= +k8s.io/kubectl v0.33.0 h1:HiRb1yqibBSCqic4pRZP+viiOBAnIdwYDpzUFejs07g= +k8s.io/kubectl v0.33.0/go.mod h1:gAlGBuS1Jq1fYZ9AjGWbI/5Vk3M/VW2DK4g10Fpyn/0= k8s.io/kubelet v0.33.1 h1:x4LCw1/iZVWOKA4RoITnuB8gMHnw31HPB3S0EF0EexE= k8s.io/kubelet v0.33.1/go.mod h1:8WpdC9M95VmsqIdGSQrajXooTfT5otEj8pGWOm+KKfQ= k8s.io/kubernetes v1.33.1 h1:86+VVY/f11taZdpEZrNciLw1MIQhu6BFXf/OMFn5EUg= @@ -1084,10 +1041,10 @@ k8s.io/utils v0.0.0-20250502105355-0f33e8f1c979 h1:jgJW5IePPXLGB8e/1wvd0Ich9QE97 k8s.io/utils v0.0.0-20250502105355-0f33e8f1c979/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= libvirt.org/go/libvirt v1.11002.0 h1:cb8KJG3D97pc/hxQ2n6P82hRX3rlgdzO7bih6W1AAQ8= libvirt.org/go/libvirt v1.11002.0/go.mod h1:1WiFE8EjZfq+FCVog+rvr1yatKbKZ9FaFMZgEqxEJqQ= -oras.land/oras-go v1.2.5 h1:XpYuAwAb0DfQsunIyMfeET92emK8km3W4yEzZvUbsTo= -oras.land/oras-go v1.2.5/go.mod h1:PuAwRShRZCsZb7g8Ar3jKKQR/2A/qN+pkYxIOd/FAoo= -sigs.k8s.io/controller-runtime v0.20.4 h1:X3c+Odnxz+iPTRobG4tp092+CvBU9UK0t/bRf+n0DGU= -sigs.k8s.io/controller-runtime v0.20.4/go.mod h1:xg2XB0K5ShQzAgsoujxuKN4LNXR2LfwwHsPj7Iaw+XY= +oras.land/oras-go/v2 v2.5.0 h1:o8Me9kLY74Vp5uw07QXPiitjsw7qNXi8Twd+19Zf02c= +oras.land/oras-go/v2 v2.5.0/go.mod h1:z4eisnLP530vwIOUOJeBIj0aGI0L1C3d53atvCBqZHg= +sigs.k8s.io/controller-runtime v0.21.0 h1:CYfjpEuicjUecRk+KAeyYh+ouUBn4llGyDYytIGcJS8= +sigs.k8s.io/controller-runtime v0.21.0/go.mod h1:OSg14+F65eWqIu4DceX7k/+QRAbTTvxeQSNSOQpukWM= sigs.k8s.io/json v0.0.0-20241010143419-9aa6b5e7a4b3 h1:/Rv+M11QRah1itp8VhT6HoVx1Ray9eB4DBr+K+/sCJ8= sigs.k8s.io/json v0.0.0-20241010143419-9aa6b5e7a4b3/go.mod h1:18nIHnGi6636UCz6m8i4DhaJ65T6EruyzmoQqI2BVDo= sigs.k8s.io/kustomize/api v0.19.0 h1:F+2HB2mU1MSiR9Hp1NEgoU2q9ItNOaBJl0I4Dlus5SQ= From 14fc0b61c33c6f83d81cc2e07ef4f7d580fdda59 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 30 May 2025 09:15:41 +0200 Subject: [PATCH 293/311] deps: update dependency asciinema-player to v3.10.0 (#3847) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- docs/package-lock.json | 8 ++++---- docs/package.json | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/package-lock.json b/docs/package-lock.json index 99f36b953..4e54e1d68 100644 --- a/docs/package-lock.json +++ b/docs/package-lock.json @@ -13,7 +13,7 @@ "@docusaurus/preset-classic": "3.7.0", "@docusaurus/theme-mermaid": "3.7.0", "@mdx-js/react": "3.1.0", - "asciinema-player": "3.9.0", + "asciinema-player": "3.10.0", "clsx": "2.1.1", "prism-react-renderer": "2.4.1", "react": "18.3.1", @@ -6171,9 +6171,9 @@ } }, "node_modules/asciinema-player": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/asciinema-player/-/asciinema-player-3.9.0.tgz", - "integrity": "sha512-SXVFImVzeNr8ZUdNIHABGuzlbnGWTKy245AquAjODsAnv+Lp6vxjYGN0LfA8ns30tnx/ag/bMrTbLq13TpHE6w==", + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/asciinema-player/-/asciinema-player-3.10.0.tgz", + "integrity": "sha512-shoOK6F606nDKZxDVM7JuGSCAyWLePoGRFNlV+FqiP5Sqvyn0BlE7wlbjZyd2X4P1iRhv/HKfVNtnQIxmgphRA==", "license": "Apache-2.0", "dependencies": { "@babel/runtime": "^7.21.0", diff --git a/docs/package.json b/docs/package.json index e6ce2f372..0886691e8 100644 --- a/docs/package.json +++ b/docs/package.json @@ -19,7 +19,7 @@ "@docusaurus/preset-classic": "3.7.0", "@docusaurus/theme-mermaid": "3.7.0", "@mdx-js/react": "3.1.0", - "asciinema-player": "3.9.0", + "asciinema-player": "3.10.0", "clsx": "2.1.1", "prism-react-renderer": "2.4.1", "react": "18.3.1", From b1bfecccf22258ccc484aca9324356b57e6e4e67 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 30 May 2025 09:15:54 +0200 Subject: [PATCH 294/311] deps: update ghcr.io/edgelesssys/gcp-guest-agent Docker tag to v20250521 (#3848) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- internal/versions/versions.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/versions/versions.go b/internal/versions/versions.go index 044f65aed..0b2ed4db1 100644 --- a/internal/versions/versions.go +++ b/internal/versions/versions.go @@ -169,7 +169,7 @@ const ( // GcpGuestImage image for GCP guest agent. // Check for new versions at https://github.com/GoogleCloudPlatform/guest-agent/releases and update in /.github/workflows/build-gcp-guest-agent.yml. - GcpGuestImage = "ghcr.io/edgelesssys/gcp-guest-agent:v20250515.0.0@sha256:3b5bfa54ebe97ada83fcaf0a0879dcfdc986a7a4ec20443b7398e432d7a15de9" // renovate:container + GcpGuestImage = "ghcr.io/edgelesssys/gcp-guest-agent:v20250521.0.0@sha256:7694402241bcc8fdd07ef4054a736702346f8f43d354fcc42187e80862e0467a" // renovate:container // NodeMaintenanceOperatorImage is the image for the node maintenance operator. NodeMaintenanceOperatorImage = "quay.io/medik8s/node-maintenance-operator:v0.17.0@sha256:bf1c5758b3d266dd6234422d156c67ffdd47f50f70ce17d5cef1de6065030337" // renovate:container // LogstashImage is the container image of logstash, used for log collection by debugd. From 6b8d7d45c1e8365ed08ebe03ddd5a7411278101d Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 2 Jun 2025 09:07:56 +0200 Subject: [PATCH 295/311] deps: update Go dependencies (#3851) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- go.mod | 24 ++++++++++++------------ go.sum | 52 ++++++++++++++++++++++++++-------------------------- 2 files changed, 38 insertions(+), 38 deletions(-) diff --git a/go.mod b/go.mod index ab9cc6019..35a403e65 100644 --- a/go.mod +++ b/go.mod @@ -32,7 +32,7 @@ require ( cloud.google.com/go/compute/metadata v0.7.0 cloud.google.com/go/kms v1.22.0 cloud.google.com/go/secretmanager v1.14.7 - cloud.google.com/go/storage v1.54.0 + cloud.google.com/go/storage v1.55.0 dario.cat/mergo v1.0.2 github.com/Azure/azure-sdk-for-go v68.0.0+incompatible github.com/Azure/azure-sdk-for-go/sdk/azcore v1.18.0 @@ -56,10 +56,10 @@ require ( github.com/aws/aws-sdk-go-v2/service/s3 v1.80.0 github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.35.4 github.com/aws/smithy-go v1.22.3 - github.com/bazelbuild/buildtools v0.0.0-20250528073601-fdebdb3800e7 + github.com/bazelbuild/buildtools v0.0.0-20250530102019-b02f80d9ea9c github.com/bazelbuild/rules_go v0.54.0 github.com/coreos/go-systemd/v22 v22.5.0 - github.com/docker/docker v28.2.1+incompatible + github.com/docker/docker v28.2.2+incompatible github.com/edgelesssys/go-azguestattestation v0.0.0-20250408071817-8c4457b235ff github.com/edgelesssys/go-tdx-qpl v0.0.0-20250129202750-607ac61e2377 github.com/foxboron/go-uefi v0.0.0-20250207204325-69fb7dba244f @@ -117,7 +117,7 @@ require ( go.etcd.io/etcd/client/v3 v3.6.0 go.uber.org/goleak v1.3.0 golang.org/x/crypto v0.38.0 - golang.org/x/exp v0.0.0-20250506013437-ce4c2cf36ca6 + golang.org/x/exp v0.0.0-20250531010427-b6e5de432a8b golang.org/x/mod v0.24.0 golang.org/x/sys v0.33.0 golang.org/x/text v0.25.0 @@ -144,7 +144,7 @@ require ( require ( cel.dev/expr v0.23.1 // indirect - cloud.google.com/go v0.121.0 // indirect + cloud.google.com/go v0.121.1 // indirect cloud.google.com/go/auth v0.16.1 // indirect cloud.google.com/go/auth/oauth2adapt v0.2.8 // indirect cloud.google.com/go/iam v1.5.2 // indirect @@ -360,14 +360,14 @@ require ( github.com/zeebo/errs v1.4.0 // indirect go.mongodb.org/mongo-driver v1.14.0 // indirect go.opentelemetry.io/auto/sdk v1.1.0 // indirect - go.opentelemetry.io/contrib/detectors/gcp v1.35.0 // indirect + go.opentelemetry.io/contrib/detectors/gcp v1.36.0 // indirect go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.60.0 // indirect go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.60.0 // indirect - go.opentelemetry.io/otel v1.35.0 // indirect - go.opentelemetry.io/otel/metric v1.35.0 // indirect - go.opentelemetry.io/otel/sdk v1.35.0 // indirect - go.opentelemetry.io/otel/sdk/metric v1.35.0 // indirect - go.opentelemetry.io/otel/trace v1.35.0 // indirect + go.opentelemetry.io/otel v1.36.0 // indirect + go.opentelemetry.io/otel/metric v1.36.0 // indirect + go.opentelemetry.io/otel/sdk v1.36.0 // indirect + go.opentelemetry.io/otel/sdk/metric v1.36.0 // indirect + go.opentelemetry.io/otel/trace v1.36.0 // indirect go.uber.org/automaxprocs v1.6.0 // indirect go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.27.0 // indirect @@ -379,7 +379,7 @@ require ( gomodules.xyz/jsonpatch/v2 v2.4.0 // indirect google.golang.org/appengine v1.6.8 // indirect google.golang.org/genproto v0.0.0-20250505200425-f936aa4a68b2 // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20250505200425-f936aa4a68b2 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20250512202823-5a2f75b736a9 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20250512202823-5a2f75b736a9 // indirect gopkg.in/evanphx/json-patch.v4 v4.12.0 // indirect gopkg.in/inf.v0 v0.9.1 // indirect diff --git a/go.sum b/go.sum index b443dc210..3aa43f0cd 100644 --- a/go.sum +++ b/go.sum @@ -1,7 +1,7 @@ cel.dev/expr v0.23.1 h1:K4KOtPCJQjVggkARsjG9RWXP6O4R73aHeJMa/dmCQQg= cel.dev/expr v0.23.1/go.mod h1:hLPLo1W4QUmuYdA72RBX06QTs6MXw941piREPl3Yfiw= -cloud.google.com/go v0.121.0 h1:pgfwva8nGw7vivjZiRfrmglGWiCJBP+0OmDpenG/Fwg= -cloud.google.com/go v0.121.0/go.mod h1:rS7Kytwheu/y9buoDmu5EIpMMCI4Mb8ND4aeN4Vwj7Q= +cloud.google.com/go v0.121.1 h1:S3kTQSydxmu1JfLRLpKtxRPA7rSrYPRPEUmL/PavVUw= +cloud.google.com/go v0.121.1/go.mod h1:nRFlrHq39MNVWu+zESP2PosMWA0ryJw8KUBZ2iZpxbw= cloud.google.com/go/auth v0.16.1 h1:XrXauHMd30LhQYVRHLGvJiYeczweKQXZxsTbV9TiguU= cloud.google.com/go/auth v0.16.1/go.mod h1:1howDHJ5IETh/LwYs3ZxvlkXF48aSqqJUM+5o02dNOI= cloud.google.com/go/auth/oauth2adapt v0.2.8 h1:keo8NaayQZ6wimpNSmW5OPc283g65QNIiLpZnkHRbnc= @@ -22,8 +22,8 @@ cloud.google.com/go/monitoring v1.24.2 h1:5OTsoJ1dXYIiMiuL+sYscLc9BumrL3CarVLL7d cloud.google.com/go/monitoring v1.24.2/go.mod h1:x7yzPWcgDRnPEv3sI+jJGBkwl5qINf+6qY4eq0I9B4U= cloud.google.com/go/secretmanager v1.14.7 h1:VkscIRzj7GcmZyO4z9y1EH7Xf81PcoiAo7MtlD+0O80= cloud.google.com/go/secretmanager v1.14.7/go.mod h1:uRuB4F6NTFbg0vLQ6HsT7PSsfbY7FqHbtJP1J94qxGc= -cloud.google.com/go/storage v1.54.0 h1:Du3XEyliAiftfyW0bwfdppm2MMLdpVAfiIg4T2nAI+0= -cloud.google.com/go/storage v1.54.0/go.mod h1:hIi9Boe8cHxTyaeqh7KMMwKg088VblFK46C2x/BWaZE= +cloud.google.com/go/storage v1.55.0 h1:NESjdAToN9u1tmhVqhXCaCwYBuvEhZLLv0gBr+2znf0= +cloud.google.com/go/storage v1.55.0/go.mod h1:ztSmTTwzsdXe5syLVS0YsbFxXuvEmEyZj7v7zChEmuY= cloud.google.com/go/trace v1.11.6 h1:2O2zjPzqPYAHrn3OKl029qlqG6W8ZdYaOWRyr8NgMT4= cloud.google.com/go/trace v1.11.6/go.mod h1:GA855OeDEBiBMzcckLPE2kDunIpC72N+Pq8WFieFjnI= dario.cat/mergo v1.0.2 h1:85+piFYR1tMbRrLcDwR18y4UKJ3aH1Tbzi24VRW1TK8= @@ -180,8 +180,8 @@ github.com/aws/aws-sdk-go-v2/service/sts v1.33.19 h1:1XuUZ8mYJw9B6lzAkXhqHlJd/Xv github.com/aws/aws-sdk-go-v2/service/sts v1.33.19/go.mod h1:cQnB8CUnxbMU82JvlqjKR2HBOm3fe9pWorWBza6MBJ4= github.com/aws/smithy-go v1.22.3 h1:Z//5NuZCSW6R4PhQ93hShNbyBbn8BWCmCVCt+Q8Io5k= github.com/aws/smithy-go v1.22.3/go.mod h1:t1ufH5HMublsJYulve2RKmHDC15xu1f26kHCp/HgceI= -github.com/bazelbuild/buildtools v0.0.0-20250528073601-fdebdb3800e7 h1:DwSCyfDONZ16AnUAmwhhj/fXJwrQZwzgUFnXH33EC34= -github.com/bazelbuild/buildtools v0.0.0-20250528073601-fdebdb3800e7/go.mod h1:PLNUetjLa77TCCziPsz0EI8a6CUxgC+1jgmWv0H25tg= +github.com/bazelbuild/buildtools v0.0.0-20250530102019-b02f80d9ea9c h1:nrWEwyf4cOQNry6qdxHVRpdxNeslO37+wGnG0CUTKRo= +github.com/bazelbuild/buildtools v0.0.0-20250530102019-b02f80d9ea9c/go.mod h1:PLNUetjLa77TCCziPsz0EI8a6CUxgC+1jgmWv0H25tg= github.com/bazelbuild/rules_go v0.54.0 h1:D9aCU7j5rdRxg2rXOZX5zHZ395XC0KbgC4rnyaQ3ofM= github.com/bazelbuild/rules_go v0.54.0/go.mod h1:T90Gpyq4HDFlsrvtQa2CBdHNJ2P4rAu/uUTmQbanzf0= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= @@ -247,8 +247,8 @@ github.com/distribution/distribution/v3 v3.0.0 h1:q4R8wemdRQDClzoNNStftB2ZAfqOiN github.com/distribution/distribution/v3 v3.0.0/go.mod h1:tRNuFoZsUdyRVegq8xGNeds4KLjwLCRin/tTo6i1DhU= github.com/distribution/reference v0.6.0 h1:0IXCQ5g4/QMHHkarYzh5l+u8T3t73zM5QvfrDyIgxBk= github.com/distribution/reference v0.6.0/go.mod h1:BbU0aIcezP1/5jX/8MP0YiH4SdvB5Y4f/wlDRiLyi3E= -github.com/docker/docker v28.2.1+incompatible h1:aTSWVTDStpHbnRu0xBcGoJEjRf5EQKt6nik6Vif8sWw= -github.com/docker/docker v28.2.1+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/docker v28.2.2+incompatible h1:CjwRSksz8Yo4+RmQ339Dp/D2tGO5JxwYeqtMOEe0LDw= +github.com/docker/docker v28.2.2+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= github.com/docker/docker-credential-helpers v0.8.2 h1:bX3YxiGzFP5sOXWc3bTPEXdEaZSeVMrFgOr3T+zrFAo= github.com/docker/docker-credential-helpers v0.8.2/go.mod h1:P3ci7E3lwkZg6XiHdRKft1KckHiO9a2rNtyFbZ/ry9M= github.com/docker/go-connections v0.5.0 h1:USnMq7hx7gwdVZq1L49hLXaFtUdTADjXGp+uj1Br63c= @@ -816,16 +816,16 @@ go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJyS go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A= go.opentelemetry.io/contrib/bridges/prometheus v0.57.0 h1:UW0+QyeyBVhn+COBec3nGhfnFe5lwB0ic1JBVjzhk0w= go.opentelemetry.io/contrib/bridges/prometheus v0.57.0/go.mod h1:ppciCHRLsyCio54qbzQv0E4Jyth/fLWDTJYfvWpcSVk= -go.opentelemetry.io/contrib/detectors/gcp v1.35.0 h1:bGvFt68+KTiAKFlacHW6AhA56GF2rS0bdD3aJYEnmzA= -go.opentelemetry.io/contrib/detectors/gcp v1.35.0/go.mod h1:qGWP8/+ILwMRIUf9uIVLloR1uo5ZYAslM4O6OqUi1DA= +go.opentelemetry.io/contrib/detectors/gcp v1.36.0 h1:F7q2tNlCaHY9nMKHR6XH9/qkp8FktLnIcy6jJNyOCQw= +go.opentelemetry.io/contrib/detectors/gcp v1.36.0/go.mod h1:IbBN8uAIIx734PTonTPxAxnjc2pQTxWNkwfstZ+6H2k= go.opentelemetry.io/contrib/exporters/autoexport v0.57.0 h1:jmTVJ86dP60C01K3slFQa2NQ/Aoi7zA+wy7vMOKD9H4= go.opentelemetry.io/contrib/exporters/autoexport v0.57.0/go.mod h1:EJBheUMttD/lABFyLXhce47Wr6DPWYReCzaZiXadH7g= go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.60.0 h1:x7wzEgXfnzJcHDwStJT+mxOz4etr2EcexjqhBvmoakw= go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.60.0/go.mod h1:rg+RlpR5dKwaS95IyyZqj5Wd4E13lk/msnTS0Xl9lJM= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.60.0 h1:sbiXRNDSWJOTobXh5HyQKjq6wUC5tNybqjIqDpAY4CU= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.60.0/go.mod h1:69uWxva0WgAA/4bu2Yy70SLDBwZXuQ6PbBpbsa5iZrQ= -go.opentelemetry.io/otel v1.35.0 h1:xKWKPxrxB6OtMCbmMY021CqC45J+3Onta9MqjhnusiQ= -go.opentelemetry.io/otel v1.35.0/go.mod h1:UEqy8Zp11hpkUrL73gSlELM0DupHoiq72dR+Zqel/+Y= +go.opentelemetry.io/otel v1.36.0 h1:UumtzIklRBY6cI/lllNZlALOF5nNIzJVb16APdvgTXg= +go.opentelemetry.io/otel v1.36.0/go.mod h1:/TcFMXYjyRNh8khOAO9ybYkqaDBb/70aVwkNML4pP8E= go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.8.0 h1:WzNab7hOOLzdDF/EoWCt4glhrbMPVMOO5JYTmpz36Ls= go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.8.0/go.mod h1:hKvJwTzJdp90Vh7p6q/9PAOd55dI6WA6sWj62a/JvSs= go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.8.0 h1:S+LdBGiQXtJdowoJoQPEtI52syEP/JYBUpjO49EQhV8= @@ -844,22 +844,22 @@ go.opentelemetry.io/otel/exporters/prometheus v0.54.0 h1:rFwzp68QMgtzu9PgP3jm9Xa go.opentelemetry.io/otel/exporters/prometheus v0.54.0/go.mod h1:QyjcV9qDP6VeK5qPyKETvNjmaaEc7+gqjh4SS0ZYzDU= go.opentelemetry.io/otel/exporters/stdout/stdoutlog v0.8.0 h1:CHXNXwfKWfzS65yrlB2PVds1IBZcdsX8Vepy9of0iRU= go.opentelemetry.io/otel/exporters/stdout/stdoutlog v0.8.0/go.mod h1:zKU4zUgKiaRxrdovSS2amdM5gOc59slmo/zJwGX+YBg= -go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.35.0 h1:PB3Zrjs1sG1GBX51SXyTSoOTqcDglmsk7nT6tkKPb/k= -go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.35.0/go.mod h1:U2R3XyVPzn0WX7wOIypPuptulsMcPDPs/oiSVOMVnHY= +go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.36.0 h1:rixTyDGXFxRy1xzhKrotaHy3/KXdPhlWARrCgK+eqUY= +go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.36.0/go.mod h1:dowW6UsM9MKbJq5JTz2AMVp3/5iW5I/TStsk8S+CfHw= go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.32.0 h1:cC2yDI3IQd0Udsux7Qmq8ToKAx1XCilTQECZ0KDZyTw= go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.32.0/go.mod h1:2PD5Ex6z8CFzDbTdOlwyNIUywRr1DN0ospafJM1wJ+s= go.opentelemetry.io/otel/log v0.8.0 h1:egZ8vV5atrUWUbnSsHn6vB8R21G2wrKqNiDt3iWertk= go.opentelemetry.io/otel/log v0.8.0/go.mod h1:M9qvDdUTRCopJcGRKg57+JSQ9LgLBrwwfC32epk5NX8= -go.opentelemetry.io/otel/metric v1.35.0 h1:0znxYu2SNyuMSQT4Y9WDWej0VpcsxkuklLa4/siN90M= -go.opentelemetry.io/otel/metric v1.35.0/go.mod h1:nKVFgxBZ2fReX6IlyW28MgZojkoAkJGaE8CpgeAU3oE= -go.opentelemetry.io/otel/sdk v1.35.0 h1:iPctf8iprVySXSKJffSS79eOjl9pvxV9ZqOWT0QejKY= -go.opentelemetry.io/otel/sdk v1.35.0/go.mod h1:+ga1bZliga3DxJ3CQGg3updiaAJoNECOgJREo9KHGQg= +go.opentelemetry.io/otel/metric v1.36.0 h1:MoWPKVhQvJ+eeXWHFBOPoBOi20jh6Iq2CcCREuTYufE= +go.opentelemetry.io/otel/metric v1.36.0/go.mod h1:zC7Ks+yeyJt4xig9DEw9kuUFe5C3zLbVjV2PzT6qzbs= +go.opentelemetry.io/otel/sdk v1.36.0 h1:b6SYIuLRs88ztox4EyrvRti80uXIFy+Sqzoh9kFULbs= +go.opentelemetry.io/otel/sdk v1.36.0/go.mod h1:+lC+mTgD+MUWfjJubi2vvXWcVxyr9rmlshZni72pXeY= go.opentelemetry.io/otel/sdk/log v0.8.0 h1:zg7GUYXqxk1jnGF/dTdLPrK06xJdrXgqgFLnI4Crxvs= go.opentelemetry.io/otel/sdk/log v0.8.0/go.mod h1:50iXr0UVwQrYS45KbruFrEt4LvAdCaWWgIrsN3ZQggo= -go.opentelemetry.io/otel/sdk/metric v1.35.0 h1:1RriWBmCKgkeHEhM7a2uMjMUfP7MsOF5JpUCaEqEI9o= -go.opentelemetry.io/otel/sdk/metric v1.35.0/go.mod h1:is6XYCUMpcKi+ZsOvfluY5YstFnhW0BidkR+gL+qN+w= -go.opentelemetry.io/otel/trace v1.35.0 h1:dPpEfJu1sDIqruz7BHFG3c7528f6ddfSWfFDVt/xgMs= -go.opentelemetry.io/otel/trace v1.35.0/go.mod h1:WUk7DtFp1Aw2MkvqGdwiXYDZZNvA/1J8o6xRXLrIkyc= +go.opentelemetry.io/otel/sdk/metric v1.36.0 h1:r0ntwwGosWGaa0CrSt8cuNuTcccMXERFwHX4dThiPis= +go.opentelemetry.io/otel/sdk/metric v1.36.0/go.mod h1:qTNOhFDfKRwX0yXOqJYegL5WRaW376QbB7P4Pb0qva4= +go.opentelemetry.io/otel/trace v1.36.0 h1:ahxWNuqZjpdiFAyrIoQ4GIiAIhxAunQR6MUoKrsNd4w= +go.opentelemetry.io/otel/trace v1.36.0/go.mod h1:gQ+OnDZzrybY4k4seLzPAWNwVBBVlF2szhehOBB/tGA= go.opentelemetry.io/proto/otlp v1.4.0 h1:TA9WRvW6zMwP+Ssb6fLoUIuirti1gGbP28GcKG1jgeg= go.opentelemetry.io/proto/otlp v1.4.0/go.mod h1:PPBWZIP98o2ElSqI35IHfu7hIhSwvc5N38Jw8pXuGFY= go.uber.org/automaxprocs v1.6.0 h1:O3y2/QNTOdbF+e/dpXNNW7Rx2hZ4sTIPyybbxyNqTUs= @@ -879,8 +879,8 @@ golang.org/x/crypto v0.6.0/go.mod h1:OFC/31mSvZgRz0V1QTNCzfAI1aIRzbiufJtkMIlEp58 golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU= golang.org/x/crypto v0.38.0 h1:jt+WWG8IZlBnVbomuhg2Mdq0+BBQaHbtqHEFEigjUV8= golang.org/x/crypto v0.38.0/go.mod h1:MvrbAqul58NNYPKnOra203SB9vpuZW0e+RRZV+Ggqjw= -golang.org/x/exp v0.0.0-20250506013437-ce4c2cf36ca6 h1:y5zboxd6LQAqYIhHnB48p0ByQ/GnQx2BE33L8BOHQkI= -golang.org/x/exp v0.0.0-20250506013437-ce4c2cf36ca6/go.mod h1:U6Lno4MTRCDY+Ba7aCcauB9T60gsv5s4ralQzP72ZoQ= +golang.org/x/exp v0.0.0-20250531010427-b6e5de432a8b h1:QoALfVG9rhQ/M7vYDScfPdWjGL9dlsVVM5VGh7aKoAA= +golang.org/x/exp v0.0.0-20250531010427-b6e5de432a8b/go.mod h1:U6Lno4MTRCDY+Ba7aCcauB9T60gsv5s4ralQzP72ZoQ= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= @@ -977,8 +977,8 @@ google.golang.org/appengine v1.6.8 h1:IhEN5q69dyKagZPYMSdIjS2HqprW324FRQZJcGqPAs google.golang.org/appengine v1.6.8/go.mod h1:1jJ3jBArFh5pcgW8gCtRJnepW8FzD1V44FJffLiz/Ds= google.golang.org/genproto v0.0.0-20250505200425-f936aa4a68b2 h1:1tXaIXCracvtsRxSBsYDiSBN0cuJvM7QYW+MrpIRY78= google.golang.org/genproto v0.0.0-20250505200425-f936aa4a68b2/go.mod h1:49MsLSx0oWMOZqcpB3uL8ZOkAh1+TndpJ8ONoCBWiZk= -google.golang.org/genproto/googleapis/api v0.0.0-20250505200425-f936aa4a68b2 h1:vPV0tzlsK6EzEDHNNH5sa7Hs9bd7iXR7B1tSiPepkV0= -google.golang.org/genproto/googleapis/api v0.0.0-20250505200425-f936aa4a68b2/go.mod h1:pKLAc5OolXC3ViWGI62vvC0n10CpwAtRcTNCFwTKBEw= +google.golang.org/genproto/googleapis/api v0.0.0-20250512202823-5a2f75b736a9 h1:WvBuA5rjZx9SNIzgcU53OohgZy6lKSus++uY4xLaWKc= +google.golang.org/genproto/googleapis/api v0.0.0-20250512202823-5a2f75b736a9/go.mod h1:W3S/3np0/dPWsWLi1h/UymYctGXaGBM2StwzD0y140U= google.golang.org/genproto/googleapis/rpc v0.0.0-20250512202823-5a2f75b736a9 h1:IkAfh6J/yllPtpYFU0zZN1hUPYdT0ogkBT/9hMxHjvg= google.golang.org/genproto/googleapis/rpc v0.0.0-20250512202823-5a2f75b736a9/go.mod h1:qQ0YXyHHx3XkvlzUtpXDkS29lDSafHMZBAZDc03LQ3A= google.golang.org/grpc v1.72.2 h1:TdbGzwb82ty4OusHWepvFWGLgIbNo1/SUynEN0ssqv8= From b122f941eeef24878398798ffea56293b9d69b44 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 3 Jun 2025 08:01:42 +0200 Subject: [PATCH 296/311] deps: update GitHub action dependencies (#3852) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/actions/build_micro_service/action.yml | 2 +- .github/actions/e2e_sonobuoy/action.yml | 2 +- .github/actions/setup_bazel_nix/action.yml | 2 +- .github/workflows/aws-snp-launchmeasurement.yml | 2 +- .github/workflows/build-ccm-gcp.yml | 2 +- .github/workflows/build-gcp-guest-agent.yml | 2 +- .github/workflows/scorecard.yml | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/.github/actions/build_micro_service/action.yml b/.github/actions/build_micro_service/action.yml index 84813d865..7fecf16a2 100644 --- a/.github/actions/build_micro_service/action.yml +++ b/.github/actions/build_micro_service/action.yml @@ -62,7 +62,7 @@ runs: - name: Build and push container image id: build-micro-service - uses: docker/build-push-action@1dc73863535b631f98b2378be8619f83b136f4a0 # v6.17.0 + uses: docker/build-push-action@263435318d21b8e681c14492fe198d362a7d2c83 # v6.18.0 with: context: . file: ${{ inputs.dockerfile }} diff --git a/.github/actions/e2e_sonobuoy/action.yml b/.github/actions/e2e_sonobuoy/action.yml index 627a2fcad..eb636472f 100644 --- a/.github/actions/e2e_sonobuoy/action.yml +++ b/.github/actions/e2e_sonobuoy/action.yml @@ -70,7 +70,7 @@ runs: - name: Publish test results if: (!env.ACT) && contains(inputs.sonobuoyTestSuiteCmd, '--plugin e2e') - uses: mikepenz/action-junit-report@cf701569b05ccdd861a76b8607a66d76f6fd4857 # v5.5.1 + uses: mikepenz/action-junit-report@65fe03598d8d251738592a497a9e8547a5c48eaa # v5.6.0 with: report_paths: "**/junit_01.xml" fail_on_failure: true diff --git a/.github/actions/setup_bazel_nix/action.yml b/.github/actions/setup_bazel_nix/action.yml index 1066e5d34..b560ac8f6 100644 --- a/.github/actions/setup_bazel_nix/action.yml +++ b/.github/actions/setup_bazel_nix/action.yml @@ -114,7 +114,7 @@ runs: - name: Install nix if: steps.check_inputs.outputs.nixPreinstalled == 'false' - uses: cachix/install-nix-action@526118121621777ccd86f79b04685a9319637641 # v31 + uses: cachix/install-nix-action@17fe5fb4a23ad6cbbe47d6b3f359611ad276644c # v31 with: install_url: "https://releases.nixos.org/nix/nix-${{ steps.check_inputs.outputs.nixVersion }}/install" diff --git a/.github/workflows/aws-snp-launchmeasurement.yml b/.github/workflows/aws-snp-launchmeasurement.yml index 8e72cffb6..d2483d71c 100644 --- a/.github/workflows/aws-snp-launchmeasurement.yml +++ b/.github/workflows/aws-snp-launchmeasurement.yml @@ -17,7 +17,7 @@ jobs: path: constellation - name: Install Nix - uses: cachix/install-nix-action@526118121621777ccd86f79b04685a9319637641 # v31 + uses: cachix/install-nix-action@17fe5fb4a23ad6cbbe47d6b3f359611ad276644c # v31 - name: Download Firmware release id: download-firmware diff --git a/.github/workflows/build-ccm-gcp.yml b/.github/workflows/build-ccm-gcp.yml index 1954f242c..b84514a1c 100644 --- a/.github/workflows/build-ccm-gcp.yml +++ b/.github/workflows/build-ccm-gcp.yml @@ -113,7 +113,7 @@ jobs: - name: Build and push container image id: build - uses: docker/build-push-action@1dc73863535b631f98b2378be8619f83b136f4a0 # v6.17.0 + uses: docker/build-push-action@263435318d21b8e681c14492fe198d362a7d2c83 # v6.18.0 with: context: ./cloud-provider-gcp push: ${{ github.ref_name == 'main' }} diff --git a/.github/workflows/build-gcp-guest-agent.yml b/.github/workflows/build-gcp-guest-agent.yml index bcd766a1f..4fab1d2c4 100644 --- a/.github/workflows/build-gcp-guest-agent.yml +++ b/.github/workflows/build-gcp-guest-agent.yml @@ -114,7 +114,7 @@ jobs: - name: Build and push container image if: steps.needs-build.outputs.out == 'true' id: build - uses: docker/build-push-action@1dc73863535b631f98b2378be8619f83b136f4a0 # v6.17.0 + uses: docker/build-push-action@263435318d21b8e681c14492fe198d362a7d2c83 # v6.18.0 with: context: ./guest-agent file: ./constellation/3rdparty/gcp-guest-agent/Dockerfile diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml index ccde82ebc..08a7faeac 100644 --- a/.github/workflows/scorecard.yml +++ b/.github/workflows/scorecard.yml @@ -23,7 +23,7 @@ jobs: persist-credentials: false - name: Run analysis - uses: ossf/scorecard-action@f49aabe0b5af0936a0987cfb85d86b75731b0186 # v2.4.1 + uses: ossf/scorecard-action@05b42c624433fc40578a4040d5cf5e36ddca8cde # v2.4.2 with: results_file: results.sarif results_format: sarif From 36241455d508907cc822bff2f01292f581c3ea8a Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 3 Jun 2025 09:03:07 +0200 Subject: [PATCH 297/311] deps: update ubuntu:24.04 Docker digest to b59d215 (#3853) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- 3rdparty/gcp-guest-agent/Dockerfile | 2 +- docs/screencasts/docker/Dockerfile | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/3rdparty/gcp-guest-agent/Dockerfile b/3rdparty/gcp-guest-agent/Dockerfile index 0053c34a8..e55a85e58 100644 --- a/3rdparty/gcp-guest-agent/Dockerfile +++ b/3rdparty/gcp-guest-agent/Dockerfile @@ -1,4 +1,4 @@ -FROM ubuntu:24.04@sha256:6015f66923d7afbc53558d7ccffd325d43b4e249f41a6e93eef074c9505d2233 as build +FROM ubuntu:24.04@sha256:b59d21599a2b151e23eea5f6602f4af4d7d31c4e236d22bf0b62b86d2e386b8f as build # Install packages RUN apt-get update && apt-get install -y \ diff --git a/docs/screencasts/docker/Dockerfile b/docs/screencasts/docker/Dockerfile index 404593d4d..d0b0a5a91 100644 --- a/docs/screencasts/docker/Dockerfile +++ b/docs/screencasts/docker/Dockerfile @@ -1,4 +1,4 @@ -FROM ubuntu:24.04@sha256:6015f66923d7afbc53558d7ccffd325d43b4e249f41a6e93eef074c9505d2233 +FROM ubuntu:24.04@sha256:b59d21599a2b151e23eea5f6602f4af4d7d31c4e236d22bf0b62b86d2e386b8f # Install requirements RUN apt-get update && apt-get install -y software-properties-common &&\ From 3e13b07ef50d21ef31027ffdf5ee6e9eafe5323f Mon Sep 17 00:00:00 2001 From: edgelessci <71088502+edgelessci@users.noreply.github.com> Date: Wed, 4 Jun 2025 08:15:23 +0200 Subject: [PATCH 298/311] image: update measurements and image version (#3854) Co-authored-by: edgelessci --- .../measurements/measurements_enterprise.go | 16 ++++++++-------- internal/config/image_enterprise.go | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/internal/attestation/measurements/measurements_enterprise.go b/internal/attestation/measurements/measurements_enterprise.go index 85ddef6b8..20b05a159 100644 --- a/internal/attestation/measurements/measurements_enterprise.go +++ b/internal/attestation/measurements/measurements_enterprise.go @@ -19,14 +19,14 @@ package measurements // revive:disable:var-naming var ( - aws_AWSNitroTPM = M{0: {Expected: []byte{0x73, 0x7f, 0x76, 0x7a, 0x12, 0xf5, 0x4e, 0x70, 0xee, 0xcb, 0xc8, 0x68, 0x40, 0x11, 0x32, 0x3a, 0xe2, 0xfe, 0x2d, 0xd9, 0xf9, 0x07, 0x85, 0x57, 0x79, 0x69, 0xd7, 0xa2, 0x01, 0x3e, 0x8c, 0x12}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x79, 0x51, 0xc9, 0x4c, 0xbb, 0x8e, 0x6e, 0xa7, 0x7a, 0xc5, 0xf8, 0xdb, 0x86, 0x50, 0x7e, 0xe2, 0x0e, 0x6c, 0xb1, 0x35, 0xcd, 0xf1, 0xcd, 0xe6, 0x7c, 0x32, 0xf9, 0x83, 0xd9, 0xd5, 0x37, 0xe6}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x73, 0x21, 0xaa, 0x60, 0x89, 0x71, 0xe4, 0x0c, 0xbc, 0x25, 0xb3, 0x0f, 0xab, 0x34, 0x56, 0x33, 0x1f, 0xcf, 0x25, 0x44, 0x85, 0xcc, 0x9f, 0x71, 0xba, 0x4f, 0x43, 0x89, 0xaa, 0x1b, 0xbc, 0xaa}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x2f, 0x33, 0x07, 0xdb, 0x16, 0xbf, 0x9a, 0xf9, 0x9e, 0x44, 0xb4, 0xf3, 0x12, 0xb4, 0xc8, 0xf7, 0x48, 0x34, 0xc3, 0x49, 0xcb, 0xcb, 0xb2, 0x6a, 0x03, 0xae, 0x71, 0x69, 0x68, 0xd0, 0x8b, 0x61}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - aws_AWSSEVSNP = M{0: {Expected: []byte{0xd6, 0xdf, 0x85, 0x53, 0x58, 0xf5, 0xb1, 0x0f, 0x06, 0xf0, 0xfa, 0xb3, 0xf4, 0x08, 0xad, 0x26, 0xcd, 0x16, 0x5a, 0x29, 0x49, 0xba, 0xd6, 0x9e, 0x2c, 0xc7, 0x56, 0x92, 0x52, 0x9e, 0x66, 0x2a}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x13, 0x2d, 0x93, 0x9f, 0x79, 0xe4, 0xa0, 0xbc, 0xcf, 0x10, 0xea, 0xc1, 0x42, 0x8a, 0x0c, 0x0d, 0x9c, 0x84, 0x86, 0x17, 0x8f, 0xba, 0x26, 0x88, 0x52, 0xf5, 0x8e, 0xec, 0x36, 0x8a, 0x8c, 0x42}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x5c, 0x6f, 0xdc, 0xe9, 0xef, 0x39, 0xc5, 0x15, 0x78, 0xa3, 0x63, 0x8e, 0x43, 0xe2, 0x39, 0xc6, 0x07, 0x01, 0xa9, 0x62, 0x2d, 0x48, 0xdc, 0xc9, 0x78, 0xe0, 0x9a, 0xfa, 0x81, 0x31, 0x97, 0xd0}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xf5, 0xb8, 0x44, 0xc0, 0xdb, 0xdd, 0x38, 0xd7, 0xfb, 0x37, 0xdb, 0xff, 0x13, 0x76, 0xde, 0x8b, 0xf5, 0xd6, 0x37, 0xb7, 0xf7, 0xab, 0xb0, 0x58, 0x6e, 0x1d, 0x81, 0x18, 0xbc, 0xcd, 0x8b, 0x69}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - azure_AzureSEVSNP = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x38, 0x80, 0x1a, 0xa5, 0xdd, 0x31, 0x80, 0x44, 0xaa, 0x2b, 0x7e, 0x24, 0xd0, 0x19, 0x6e, 0x8c, 0xa7, 0xd1, 0x6a, 0x09, 0x72, 0x37, 0xd5, 0x7f, 0xec, 0x0c, 0x66, 0x7b, 0x01, 0x6b, 0x4d, 0x9a}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x3f, 0x93, 0x85, 0xdd, 0x4c, 0x44, 0x97, 0x85, 0x56, 0x23, 0x11, 0x07, 0x66, 0x59, 0x0f, 0xd6, 0x9d, 0xae, 0x78, 0x70, 0x1e, 0x72, 0x4f, 0xf6, 0xba, 0xc5, 0x9b, 0x81, 0x08, 0x6a, 0x22, 0x5e}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x9b, 0x38, 0x12, 0xdd, 0xc3, 0xb4, 0xd0, 0x6c, 0x32, 0xe2, 0x3c, 0x79, 0x4f, 0xcf, 0x1c, 0x3c, 0x6d, 0x84, 0x8d, 0x47, 0x8a, 0x8f, 0x7e, 0xaa, 0x6f, 0x7f, 0x61, 0x4f, 0xf1, 0x19, 0xc4, 0x0a}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - azure_AzureTDX = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x7a, 0xc2, 0x38, 0x33, 0x98, 0x57, 0x95, 0x96, 0xc7, 0xdc, 0x3c, 0xd7, 0xa3, 0x9f, 0x15, 0x46, 0x5a, 0x48, 0xaf, 0xf9, 0x38, 0xf2, 0x3a, 0xab, 0xd2, 0xeb, 0xa2, 0x07, 0xbd, 0x97, 0x1b, 0x66}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xbd, 0x09, 0x1b, 0xa4, 0x41, 0x3b, 0x5b, 0xc9, 0xfc, 0x41, 0x63, 0x88, 0xd8, 0xc9, 0x67, 0xe5, 0xc0, 0x0f, 0xd5, 0xa6, 0xc6, 0xef, 0x9a, 0xeb, 0x7e, 0x02, 0x08, 0x88, 0x09, 0xf4, 0x0f, 0xb3}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x6f, 0xb1, 0x71, 0x69, 0xf7, 0x7e, 0x64, 0xa3, 0xee, 0x8a, 0xa2, 0x70, 0xb0, 0x00, 0x02, 0xb9, 0x3e, 0x4d, 0x20, 0x6c, 0x6b, 0x29, 0x1b, 0x50, 0x57, 0xba, 0x6a, 0x26, 0x10, 0xef, 0xcf, 0xc0}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + aws_AWSNitroTPM = M{0: {Expected: []byte{0x73, 0x7f, 0x76, 0x7a, 0x12, 0xf5, 0x4e, 0x70, 0xee, 0xcb, 0xc8, 0x68, 0x40, 0x11, 0x32, 0x3a, 0xe2, 0xfe, 0x2d, 0xd9, 0xf9, 0x07, 0x85, 0x57, 0x79, 0x69, 0xd7, 0xa2, 0x01, 0x3e, 0x8c, 0x12}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xee, 0xcc, 0xee, 0x28, 0x3f, 0x04, 0xac, 0xd9, 0x80, 0x6b, 0xc8, 0x26, 0x39, 0xb2, 0x41, 0xc5, 0xe2, 0x58, 0xfc, 0xc8, 0x6f, 0x33, 0xbb, 0x07, 0x93, 0x5a, 0x70, 0x60, 0x23, 0xd8, 0x3f, 0x4f}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x76, 0x08, 0x69, 0x6e, 0xde, 0x02, 0x1c, 0x85, 0xfe, 0xe6, 0x92, 0x50, 0x8e, 0x8b, 0xde, 0x1f, 0xb6, 0x6a, 0x4a, 0x1b, 0x8e, 0x0b, 0x93, 0x44, 0x80, 0x90, 0x1f, 0x9f, 0xd1, 0x9e, 0x52, 0x25}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xb1, 0x5c, 0x35, 0x43, 0x4d, 0x64, 0xfe, 0xef, 0x0e, 0xb3, 0x00, 0xf6, 0x49, 0x14, 0x45, 0x44, 0x71, 0xb7, 0x7b, 0x8b, 0xdd, 0x48, 0xf2, 0x01, 0x1a, 0x12, 0xe8, 0x23, 0x4b, 0xfb, 0x0f, 0xd6}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + aws_AWSSEVSNP = M{0: {Expected: []byte{0xd6, 0xdf, 0x85, 0x53, 0x58, 0xf5, 0xb1, 0x0f, 0x06, 0xf0, 0xfa, 0xb3, 0xf4, 0x08, 0xad, 0x26, 0xcd, 0x16, 0x5a, 0x29, 0x49, 0xba, 0xd6, 0x9e, 0x2c, 0xc7, 0x56, 0x92, 0x52, 0x9e, 0x66, 0x2a}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xee, 0x28, 0x39, 0xe8, 0x9c, 0x40, 0xb1, 0xd5, 0xd9, 0x99, 0x6e, 0xbc, 0x2d, 0xb7, 0x10, 0x34, 0x69, 0xd9, 0x23, 0xfd, 0xe5, 0xef, 0xe0, 0x29, 0xc3, 0x95, 0x7a, 0xa7, 0x3c, 0xee, 0x92, 0x02}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x21, 0x6a, 0x24, 0x8c, 0x11, 0xb4, 0xaa, 0x31, 0xe1, 0x3b, 0xba, 0xfd, 0x38, 0xca, 0x28, 0x7d, 0x33, 0x35, 0x7a, 0x2b, 0x11, 0xb7, 0xf8, 0x12, 0x4a, 0x3d, 0x00, 0x95, 0x95, 0x5f, 0xad, 0xa5}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xda, 0x3a, 0xcf, 0xc7, 0xa8, 0x21, 0xf7, 0xee, 0xb5, 0x3f, 0x05, 0xd7, 0x2c, 0xbb, 0x4b, 0x3b, 0x62, 0x2f, 0x10, 0xce, 0x7a, 0xd7, 0x83, 0x8a, 0x58, 0x79, 0xc3, 0xb0, 0xc2, 0x0f, 0x4a, 0xe6}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + azure_AzureSEVSNP = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x6c, 0x2f, 0x52, 0xb7, 0x44, 0x39, 0x13, 0xf1, 0x53, 0x56, 0x82, 0xfb, 0xf3, 0xee, 0x73, 0xfd, 0xcd, 0x6d, 0x02, 0x84, 0xbd, 0xb4, 0x2c, 0xd3, 0x65, 0xd7, 0x64, 0x44, 0x77, 0x69, 0x9e, 0x9d}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xd9, 0x0a, 0x7c, 0xbb, 0x78, 0x52, 0x32, 0xbd, 0x1f, 0x28, 0x91, 0x06, 0x49, 0xe8, 0x71, 0xef, 0xb8, 0xc7, 0xc9, 0x5c, 0x4d, 0xa3, 0xfd, 0x78, 0x84, 0xbc, 0x62, 0x2d, 0x4c, 0xe7, 0xea, 0x58}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x3b, 0x9a, 0xd8, 0x09, 0x19, 0x7b, 0x77, 0x1c, 0xbe, 0xb4, 0xd0, 0x29, 0xba, 0x40, 0xbf, 0x55, 0x96, 0x1b, 0x0f, 0xfc, 0xc9, 0x87, 0x44, 0x46, 0x64, 0x95, 0x74, 0x07, 0x2f, 0xef, 0x02, 0x3a}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + azure_AzureTDX = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x35, 0x48, 0x97, 0xbb, 0xc4, 0x86, 0x2a, 0x19, 0x69, 0x98, 0x1b, 0xf4, 0xd7, 0x1b, 0xff, 0xfd, 0x13, 0x80, 0xc4, 0xfc, 0xe9, 0x11, 0xc0, 0x24, 0xda, 0xc1, 0x81, 0x42, 0x74, 0x63, 0xc3, 0x4e}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x06, 0x8a, 0xbb, 0xf8, 0x78, 0xb1, 0xe0, 0xed, 0x55, 0xce, 0x81, 0x63, 0x63, 0x8d, 0xc0, 0xe3, 0x08, 0xff, 0xe8, 0x39, 0x58, 0x9e, 0x8a, 0xa7, 0x85, 0x75, 0x6f, 0xfe, 0xed, 0x1a, 0xb5, 0xdb}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x12, 0xd4, 0xfa, 0x1e, 0xe5, 0x99, 0x15, 0xe8, 0x69, 0xb4, 0xf6, 0xdb, 0x0a, 0xdd, 0xd2, 0xe1, 0xb6, 0x54, 0x4f, 0x78, 0x5b, 0x7e, 0x93, 0x40, 0x5f, 0x65, 0x3f, 0x75, 0x71, 0x55, 0x08, 0xb5}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} azure_AzureTrustedLaunch M - gcp_GCPSEVES = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x8b, 0xd8, 0xad, 0x33, 0x5c, 0x8b, 0x85, 0xa8, 0x27, 0x7b, 0x7d, 0xf4, 0xe6, 0x93, 0x82, 0xd9, 0xb9, 0xa5, 0xd4, 0x21, 0x56, 0x2b, 0xac, 0xeb, 0xd3, 0x5a, 0x93, 0x50, 0x03, 0xd4, 0x66, 0x28}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xe3, 0xe6, 0xe7, 0xdb, 0xa1, 0xc2, 0x72, 0xc7, 0x6c, 0x9c, 0x70, 0x23, 0x99, 0x57, 0x02, 0x1f, 0x40, 0x6c, 0x78, 0xb1, 0xc4, 0x59, 0x7f, 0x96, 0x79, 0xa6, 0xdc, 0xdc, 0x2a, 0x50, 0x14, 0x92}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xb5, 0xe6, 0x59, 0x72, 0x1d, 0xd3, 0x38, 0xa2, 0x25, 0x99, 0x3f, 0x6d, 0xa1, 0x4e, 0x06, 0x0a, 0x56, 0xed, 0xe5, 0xdb, 0xf0, 0xa1, 0x88, 0x1c, 0x58, 0x41, 0x0c, 0x6e, 0xca, 0xa2, 0x9f, 0x89}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - gcp_GCPSEVSNP = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xd1, 0xae, 0xd8, 0x3f, 0x3b, 0x23, 0x92, 0xc6, 0xa9, 0xdc, 0xbd, 0x00, 0x38, 0xe4, 0xd3, 0xa8, 0xeb, 0x76, 0xf6, 0x7b, 0xe9, 0x32, 0xa9, 0x0a, 0xb5, 0x89, 0xe8, 0xa1, 0x72, 0x71, 0xcd, 0xb1}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xa6, 0x13, 0xc7, 0x43, 0x8e, 0x22, 0xe8, 0x39, 0x46, 0x59, 0x05, 0x78, 0xb7, 0x4d, 0xac, 0x09, 0xdd, 0xd8, 0xb8, 0x9c, 0xb7, 0xff, 0xcc, 0xc2, 0x85, 0xe1, 0xc9, 0x02, 0x66, 0x07, 0x5f, 0x6e}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x41, 0x97, 0xf0, 0x12, 0x4a, 0xad, 0xaa, 0x8a, 0x98, 0xa9, 0x85, 0xab, 0x8f, 0x88, 0xb0, 0x03, 0x48, 0x70, 0x6c, 0x8e, 0x2e, 0xa3, 0xac, 0x1d, 0x03, 0xc2, 0xb8, 0x9b, 0x2e, 0x02, 0xd3, 0x2b}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - openstack_QEMUVTPM = M{4: {Expected: []byte{0x68, 0x61, 0xf0, 0x46, 0x09, 0x4b, 0xa4, 0x2a, 0x1b, 0x0e, 0xc0, 0x93, 0x72, 0x21, 0xe0, 0xd3, 0x73, 0x95, 0x7b, 0x25, 0xe2, 0x91, 0xac, 0x0c, 0xf6, 0xed, 0x18, 0xb4, 0x95, 0xd4, 0x80, 0x33}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x07, 0x27, 0x38, 0x5d, 0x6b, 0xd6, 0xe0, 0xc0, 0xc8, 0xb8, 0xdb, 0xfb, 0x8c, 0x3b, 0xe3, 0x53, 0x6d, 0x6f, 0xf1, 0xa2, 0xe5, 0x78, 0x95, 0x56, 0x75, 0xbd, 0x63, 0x6d, 0xc7, 0x51, 0x80, 0xec}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xc0, 0xf2, 0xab, 0x2c, 0xa6, 0xde, 0x51, 0x9a, 0x52, 0xb7, 0xa3, 0xd7, 0x27, 0xa0, 0x2e, 0xd8, 0x3d, 0x8f, 0x17, 0xe6, 0xcd, 0x6d, 0x21, 0x98, 0x08, 0xe4, 0xf6, 0x61, 0x51, 0x01, 0xe7, 0x08}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + gcp_GCPSEVES = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x20, 0x2a, 0xdb, 0x60, 0xd8, 0x2c, 0x3a, 0x6b, 0x9d, 0xb4, 0x25, 0x05, 0xba, 0x2e, 0xc6, 0xce, 0x2a, 0x8f, 0xbd, 0x8d, 0xa2, 0xb3, 0x89, 0x7f, 0xa2, 0x6b, 0x54, 0xa7, 0xff, 0x10, 0xe5, 0x00}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x71, 0x32, 0xd9, 0xc0, 0xc3, 0x78, 0x11, 0xd3, 0x62, 0x40, 0x9e, 0x51, 0x6e, 0xc9, 0xe4, 0x29, 0x8c, 0xa5, 0x1e, 0x8a, 0x1b, 0x45, 0xee, 0xb1, 0xaa, 0x7a, 0xe1, 0x2e, 0x42, 0xcd, 0x56, 0xdc}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x6b, 0x4c, 0x8f, 0x10, 0xf5, 0x93, 0x66, 0x8c, 0x9a, 0x58, 0x66, 0xee, 0x07, 0x9a, 0x52, 0x38, 0x31, 0x20, 0x19, 0x3b, 0x37, 0x8a, 0xc0, 0xba, 0x92, 0x01, 0xd5, 0x72, 0x89, 0x94, 0x74, 0x7b}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + gcp_GCPSEVSNP = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xb2, 0x48, 0x68, 0x16, 0x98, 0x13, 0xb0, 0x1a, 0xf9, 0xf5, 0x4e, 0xf3, 0xd5, 0xd7, 0xdc, 0x33, 0xbf, 0xcd, 0x08, 0xe8, 0xce, 0xec, 0xa8, 0xd5, 0x31, 0xe9, 0x04, 0xcb, 0x8e, 0x62, 0xe9, 0x69}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x50, 0xfb, 0xb0, 0xcd, 0x2b, 0x7d, 0x8b, 0x88, 0x44, 0x9d, 0x6d, 0xb0, 0xdc, 0xad, 0xcf, 0xa3, 0x39, 0x44, 0x06, 0x94, 0xe0, 0xdc, 0xd4, 0x95, 0x1b, 0x93, 0xb9, 0x1d, 0xeb, 0xec, 0x5e, 0x1d}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x86, 0xc6, 0x08, 0xf6, 0x09, 0x57, 0x5c, 0xc2, 0x7c, 0x3b, 0x90, 0x9e, 0xce, 0x0e, 0xff, 0xdd, 0xbb, 0xae, 0x2b, 0xc6, 0x0d, 0x16, 0x10, 0x15, 0xb9, 0x46, 0x6f, 0x94, 0xff, 0x45, 0x2d, 0xe3}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + openstack_QEMUVTPM = M{4: {Expected: []byte{0x0f, 0x6d, 0x40, 0x85, 0x02, 0x5e, 0x34, 0x4c, 0x6e, 0x41, 0xcd, 0x0f, 0xb9, 0x39, 0xb2, 0xea, 0x14, 0x48, 0xd4, 0xd2, 0x3a, 0x4b, 0x93, 0xb3, 0xe3, 0x8b, 0xcc, 0xc8, 0xdf, 0xca, 0x72, 0x20}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x21, 0xa1, 0x59, 0x89, 0xc8, 0xa2, 0x3b, 0x6a, 0x52, 0x96, 0x3a, 0x13, 0x9d, 0x41, 0xa6, 0x2c, 0xe6, 0x72, 0xaf, 0xee, 0x80, 0x77, 0x02, 0x8f, 0x50, 0xbf, 0x8b, 0x64, 0x0b, 0xc4, 0x1c, 0x57}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xa4, 0xd0, 0x28, 0xaf, 0x39, 0xdb, 0xcb, 0x33, 0xa9, 0x9d, 0x8c, 0xeb, 0x2b, 0x07, 0x8b, 0x71, 0x90, 0x1b, 0x9a, 0x9a, 0xfb, 0xb8, 0x0f, 0xb0, 0x45, 0x9a, 0x05, 0x3c, 0x8d, 0x5e, 0xb2, 0x79}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} qemu_QEMUTDX M - qemu_QEMUVTPM = M{4: {Expected: []byte{0x9c, 0x3b, 0x23, 0x02, 0x09, 0xb8, 0xad, 0x9a, 0xc5, 0x84, 0xc9, 0x69, 0x7a, 0xe0, 0x9b, 0xfd, 0xce, 0x92, 0x06, 0x39, 0x5f, 0x85, 0x5d, 0x1e, 0xfe, 0x12, 0x5d, 0xac, 0x6d, 0x21, 0xb6, 0xd2}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x77, 0x89, 0x58, 0xdd, 0xc1, 0x6a, 0xe3, 0x7c, 0x4e, 0x07, 0xaa, 0x48, 0x1a, 0x98, 0x42, 0xed, 0x5c, 0x97, 0x73, 0x67, 0xc9, 0x9e, 0x5f, 0x52, 0x30, 0xe8, 0x03, 0xcc, 0x4c, 0xa4, 0x35, 0xbf}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x35, 0xe0, 0x3a, 0xb8, 0xa4, 0xf8, 0x7f, 0xe9, 0x84, 0x75, 0x24, 0xfc, 0x46, 0x3b, 0x71, 0xdc, 0x6d, 0x6c, 0x4f, 0x5d, 0x40, 0xc7, 0xa0, 0xb1, 0x19, 0x44, 0x56, 0x49, 0x53, 0x9a, 0x50, 0xd4}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + qemu_QEMUVTPM = M{4: {Expected: []byte{0xd5, 0x74, 0xd9, 0x7b, 0x82, 0xd1, 0xed, 0xcb, 0xc7, 0xb4, 0x97, 0xc0, 0xd0, 0x5e, 0xdf, 0x14, 0xbf, 0x7d, 0xa1, 0x58, 0x48, 0x39, 0x18, 0x95, 0x1c, 0xb3, 0x17, 0x38, 0x94, 0xf0, 0x50, 0x9a}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x8b, 0x00, 0xc5, 0xd3, 0x57, 0xeb, 0x63, 0x7a, 0x25, 0xc5, 0xd8, 0xee, 0x21, 0xe5, 0x31, 0x09, 0xd1, 0xf7, 0x19, 0xc4, 0x53, 0x1f, 0x15, 0xab, 0x80, 0x78, 0xa6, 0xa4, 0xa2, 0x94, 0x7c, 0x7d}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xcd, 0x85, 0xd0, 0x47, 0xe4, 0x58, 0xec, 0xa1, 0xba, 0xa9, 0xe0, 0x33, 0x57, 0x2b, 0x3b, 0x4b, 0xfb, 0x66, 0xaf, 0x56, 0xbf, 0xf9, 0x03, 0x1f, 0x18, 0xf5, 0xa7, 0x3b, 0x68, 0xff, 0x23, 0xfd}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} ) diff --git a/internal/config/image_enterprise.go b/internal/config/image_enterprise.go index c34d11bec..9748f1001 100644 --- a/internal/config/image_enterprise.go +++ b/internal/config/image_enterprise.go @@ -10,5 +10,5 @@ package config const ( // defaultImage is the default image to use. - defaultImage = "ref/main/stream/nightly/v2.24.0-pre.0.20250523073257-7163c5909da1" + defaultImage = "ref/main/stream/nightly/v2.24.0-pre.0.20250603090307-36241455d508" ) From 98067b6051ded5413a9b1f4ed39d1d45fb7558c7 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 5 Jun 2025 13:05:59 +0200 Subject: [PATCH 299/311] deps: update ghcr.io/edgelesssys/gcp-guest-agent Docker tag to v20250603 (#3855) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- internal/versions/versions.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/versions/versions.go b/internal/versions/versions.go index 0b2ed4db1..fce5f1cb2 100644 --- a/internal/versions/versions.go +++ b/internal/versions/versions.go @@ -169,7 +169,7 @@ const ( // GcpGuestImage image for GCP guest agent. // Check for new versions at https://github.com/GoogleCloudPlatform/guest-agent/releases and update in /.github/workflows/build-gcp-guest-agent.yml. - GcpGuestImage = "ghcr.io/edgelesssys/gcp-guest-agent:v20250521.0.0@sha256:7694402241bcc8fdd07ef4054a736702346f8f43d354fcc42187e80862e0467a" // renovate:container + GcpGuestImage = "ghcr.io/edgelesssys/gcp-guest-agent:v20250603.0.0@sha256:5edd1803e712928e4adda9a8be1b357576c0765f62e9a955a6013085556b53a0" // renovate:container // NodeMaintenanceOperatorImage is the image for the node maintenance operator. NodeMaintenanceOperatorImage = "quay.io/medik8s/node-maintenance-operator:v0.17.0@sha256:bf1c5758b3d266dd6234422d156c67ffdd47f50f70ce17d5cef1de6065030337" // renovate:container // LogstashImage is the container image of logstash, used for log collection by debugd. From 9a61bd6a0fe9e35262816b115f147250f0ec20bd Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 6 Jun 2025 14:07:37 +0200 Subject: [PATCH 300/311] deps: update dependency aspect_bazel_lib to v2.17.1 (#3850) * deps: update dependency aspect_bazel_lib to v2.17.1 * deps: tidy all modules --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: edgelessci --- MODULE.bazel | 2 +- MODULE.bazel.lock | 14 ++++++++++++-- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/MODULE.bazel b/MODULE.bazel index 13876ce45..568b3e2f4 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -1,6 +1,6 @@ module(name = "constellation") -bazel_dep(name = "aspect_bazel_lib", version = "2.16.0") +bazel_dep(name = "aspect_bazel_lib", version = "2.17.1") bazel_lib = use_extension("@aspect_bazel_lib//lib:extensions.bzl", "toolchains") bazel_lib.yq() diff --git a/MODULE.bazel.lock b/MODULE.bazel.lock index 18b6cd2c4..31ee038db 100644 --- a/MODULE.bazel.lock +++ b/MODULE.bazel.lock @@ -12,8 +12,10 @@ "https://bcr.bazel.build/modules/abseil-cpp/20240116.1/source.json": "9be551b8d4e3ef76875c0d744b5d6a504a27e3ae67bc6b28f46415fd2d2957da", "https://bcr.bazel.build/modules/apple_support/1.5.0/MODULE.bazel": "50341a62efbc483e8a2a6aec30994a58749bd7b885e18dd96aa8c33031e558ef", "https://bcr.bazel.build/modules/apple_support/1.5.0/source.json": "eb98a7627c0bc486b57f598ad8da50f6625d974c8f723e9ea71bd39f709c9862", - "https://bcr.bazel.build/modules/aspect_bazel_lib/2.16.0/MODULE.bazel": "852f9ebbda017572a7c113a2434592dd3b2f55cd9a0faea3d4be5a09a59e4900", - "https://bcr.bazel.build/modules/aspect_bazel_lib/2.16.0/source.json": "87ffed720a2ba7cfe209d9ccc1be59e21ec3d434124ec126ab90e5913e9cb13b", + "https://bcr.bazel.build/modules/aspect_bazel_lib/2.14.0/MODULE.bazel": "2b31ffcc9bdc8295b2167e07a757dbbc9ac8906e7028e5170a3708cecaac119f", + "https://bcr.bazel.build/modules/aspect_bazel_lib/2.17.1/MODULE.bazel": "9b027af55f619c7c444cead71061578fab6587e5e1303fa4ed61d49d2b1a7262", + "https://bcr.bazel.build/modules/aspect_bazel_lib/2.17.1/source.json": "18435c8f4914c046d6483fae4300d4b2eda06aed6b3cb99e682509dc2bc7e9a1", + "https://bcr.bazel.build/modules/aspect_bazel_lib/2.8.1/MODULE.bazel": "812d2dd42f65dca362152101fbec418029cc8fd34cbad1a2fde905383d705838", "https://bcr.bazel.build/modules/bazel_features/1.1.0/MODULE.bazel": "cfd42ff3b815a5f39554d97182657f8c4b9719568eb7fded2b9135f084bf760b", "https://bcr.bazel.build/modules/bazel_features/1.1.1/MODULE.bazel": "27b8c79ef57efe08efccbd9dd6ef70d61b4798320b8d3c134fd571f78963dbcd", "https://bcr.bazel.build/modules/bazel_features/1.11.0/MODULE.bazel": "f9382337dd5a474c3b7d334c2f83e50b6eaedc284253334cf823044a26de03e8", @@ -56,9 +58,13 @@ "https://bcr.bazel.build/modules/googletest/1.14.0/MODULE.bazel": "cfbcbf3e6eac06ef9d85900f64424708cc08687d1b527f0ef65aa7517af8118f", "https://bcr.bazel.build/modules/hermetic_cc_toolchain/3.2.0/MODULE.bazel": "8e7faec81c1f0fb65fe277ecfc75ea3636ce7bf848f88037fedd58e6eeacc28f", "https://bcr.bazel.build/modules/hermetic_cc_toolchain/3.2.0/source.json": "67c2b76edff27c3ec449a935fc9468996d1a730b52a9a6f97c40c8a06d381630", + "https://bcr.bazel.build/modules/jq.bzl/0.1.0/MODULE.bazel": "2ce69b1af49952cd4121a9c3055faa679e748ce774c7f1fda9657f936cae902f", + "https://bcr.bazel.build/modules/jq.bzl/0.1.0/source.json": "746bf13cac0860f091df5e4911d0c593971cd8796b5ad4e809b2f8e133eee3d5", "https://bcr.bazel.build/modules/jsoncpp/1.9.5/MODULE.bazel": "31271aedc59e815656f5736f282bb7509a97c7ecb43e927ac1a37966e0578075", "https://bcr.bazel.build/modules/jsoncpp/1.9.5/source.json": "4108ee5085dd2885a341c7fab149429db457b3169b86eb081fa245eadf69169d", "https://bcr.bazel.build/modules/libpfm/4.11.0/MODULE.bazel": "45061ff025b301940f1e30d2c16bea596c25b176c8b6b3087e92615adbd52902", + "https://bcr.bazel.build/modules/package_metadata/0.0.2/MODULE.bazel": "fb8d25550742674d63d7b250063d4580ca530499f045d70748b1b142081ebb92", + "https://bcr.bazel.build/modules/package_metadata/0.0.2/source.json": "e53a759a72488d2c0576f57491ef2da0cf4aab05ac0997314012495935531b73", "https://bcr.bazel.build/modules/platforms/0.0.10/MODULE.bazel": "8cb8efaf200bdeb2150d93e162c40f388529a25852b332cec879373771e48ed5", "https://bcr.bazel.build/modules/platforms/0.0.11/MODULE.bazel": "0daefc49732e227caa8bfa834d65dc52e8cc18a2faf80df25e8caea151a9413f", "https://bcr.bazel.build/modules/platforms/0.0.11/source.json": "f7e188b79ebedebfe75e9e1d098b8845226c7992b307e28e1496f23112e8fc29", @@ -158,7 +164,11 @@ "https://bcr.bazel.build/modules/stardoc/0.7.0/MODULE.bazel": "05e3d6d30c099b6770e97da986c53bd31844d7f13d41412480ea265ac9e8079c", "https://bcr.bazel.build/modules/stardoc/0.7.2/MODULE.bazel": "fc152419aa2ea0f51c29583fab1e8c99ddefd5b3778421845606ee628629e0e5", "https://bcr.bazel.build/modules/stardoc/0.7.2/source.json": "58b029e5e901d6802967754adf0a9056747e8176f017cfe3607c0851f4d42216", + "https://bcr.bazel.build/modules/tar.bzl/0.2.1/MODULE.bazel": "52d1c00a80a8cc67acbd01649e83d8dd6a9dc426a6c0b754a04fe8c219c76468", + "https://bcr.bazel.build/modules/tar.bzl/0.2.1/source.json": "600ac6ff61744667a439e7b814ae59c1f29632c3984fccf8000c64c9db8d7bb6", "https://bcr.bazel.build/modules/upb/0.0.0-20220923-a547704/MODULE.bazel": "7298990c00040a0e2f121f6c32544bab27d4452f80d9ce51349b1a28f3005c43", + "https://bcr.bazel.build/modules/yq.bzl/0.1.1/MODULE.bazel": "9039681f9bcb8958ee2c87ffc74bdafba9f4369096a2b5634b88abc0eaefa072", + "https://bcr.bazel.build/modules/yq.bzl/0.1.1/source.json": "2d2bad780a9f2b9195a4a370314d2c17ae95eaa745cefc2e12fbc49759b15aa3", "https://bcr.bazel.build/modules/zlib/1.2.11/MODULE.bazel": "07b389abc85fdbca459b69e2ec656ae5622873af3f845e1c9d80fe179f3effa0", "https://bcr.bazel.build/modules/zlib/1.2.12/MODULE.bazel": "3b1a8834ada2a883674be8cbd36ede1b6ec481477ada359cd2d3ddc562340b27", "https://bcr.bazel.build/modules/zlib/1.3.1.bcr.3/MODULE.bazel": "af322bc08976524477c79d1e45e241b6efbeb918c497e8840b8ab116802dda79", From 3dcb1bf3edb3da837df282284cd91253a38b1a50 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 6 Jun 2025 14:08:06 +0200 Subject: [PATCH 301/311] deps: update docusaurus monorepo to v3.8.0 (#3845) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- docs/package-lock.json | 1412 +++++++++++++++------------------------- docs/package.json | 12 +- 2 files changed, 526 insertions(+), 898 deletions(-) diff --git a/docs/package-lock.json b/docs/package-lock.json index 4e54e1d68..cb381bcac 100644 --- a/docs/package-lock.json +++ b/docs/package-lock.json @@ -9,9 +9,9 @@ "version": "2.0.0", "dependencies": { "@cmfcmf/docusaurus-search-local": "1.2.0", - "@docusaurus/core": "3.7.0", - "@docusaurus/preset-classic": "3.7.0", - "@docusaurus/theme-mermaid": "3.7.0", + "@docusaurus/core": "3.8.0", + "@docusaurus/preset-classic": "3.8.0", + "@docusaurus/theme-mermaid": "3.8.0", "@mdx-js/react": "3.1.0", "asciinema-player": "3.10.0", "clsx": "2.1.1", @@ -20,8 +20,8 @@ "react-dom": "18.3.1" }, "devDependencies": { - "@docusaurus/module-type-aliases": "3.7.0", - "@docusaurus/types": "3.7.0" + "@docusaurus/module-type-aliases": "3.8.0", + "@docusaurus/types": "3.8.0" }, "engines": { "node": ">=16.14" @@ -3450,26 +3450,26 @@ } }, "node_modules/@docsearch/css": { - "version": "3.8.2", - "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-3.8.2.tgz", - "integrity": "sha512-y05ayQFyUmCXze79+56v/4HpycYF3uFqB78pLPrSV5ZKAlDuIAAJNhaRi8tTdRNXh05yxX/TyNnzD6LwSM89vQ==", + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-3.9.0.tgz", + "integrity": "sha512-cQbnVbq0rrBwNAKegIac/t6a8nWoUAn8frnkLFW6YARaRmAQr5/Eoe6Ln2fqkUCZ40KpdrKbpSAmgrkviOxuWA==", "license": "MIT" }, "node_modules/@docsearch/react": { - "version": "3.8.2", - "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-3.8.2.tgz", - "integrity": "sha512-xCRrJQlTt8N9GU0DG4ptwHRkfnSnD/YpdeaXe02iKfqs97TkZJv60yE+1eq/tjPcVnTW8dP5qLP7itifFVV5eg==", + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-3.9.0.tgz", + "integrity": "sha512-mb5FOZYZIkRQ6s/NWnM98k879vu5pscWqTLubLFBO87igYYT4VzVazh4h5o/zCvTIZgEt3PvsCOMOswOUo9yHQ==", "license": "MIT", "dependencies": { - "@algolia/autocomplete-core": "1.17.7", - "@algolia/autocomplete-preset-algolia": "1.17.7", - "@docsearch/css": "3.8.2", + "@algolia/autocomplete-core": "1.17.9", + "@algolia/autocomplete-preset-algolia": "1.17.9", + "@docsearch/css": "3.9.0", "algoliasearch": "^5.14.2" }, "peerDependencies": { - "@types/react": ">= 16.8.0 < 19.0.0", - "react": ">= 16.8.0 < 19.0.0", - "react-dom": ">= 16.8.0 < 19.0.0", + "@types/react": ">= 16.8.0 < 20.0.0", + "react": ">= 16.8.0 < 20.0.0", + "react-dom": ">= 16.8.0 < 20.0.0", "search-insights": ">= 1 < 3" }, "peerDependenciesMeta": { @@ -3487,127 +3487,259 @@ } } }, - "node_modules/@docsearch/react/node_modules/@algolia/client-analytics": { - "version": "5.19.0", - "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-5.19.0.tgz", - "integrity": "sha512-CDW4RwnCHzU10upPJqS6N6YwDpDHno7w6/qXT9KPbPbt8szIIzCHrva4O9KIfx1OhdsHzfGSI5hMAiOOYl4DEQ==", + "node_modules/@docsearch/react/node_modules/@algolia/autocomplete-core": { + "version": "1.17.9", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.17.9.tgz", + "integrity": "sha512-O7BxrpLDPJWWHv/DLA9DRFWs+iY1uOJZkqUwjS5HSZAGcl0hIVCQ97LTLewiZmZ402JYUrun+8NqFP+hCknlbQ==", "license": "MIT", "dependencies": { - "@algolia/client-common": "5.19.0", - "@algolia/requester-browser-xhr": "5.19.0", - "@algolia/requester-fetch": "5.19.0", - "@algolia/requester-node-http": "5.19.0" + "@algolia/autocomplete-plugin-algolia-insights": "1.17.9", + "@algolia/autocomplete-shared": "1.17.9" + } + }, + "node_modules/@docsearch/react/node_modules/@algolia/autocomplete-plugin-algolia-insights": { + "version": "1.17.9", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-plugin-algolia-insights/-/autocomplete-plugin-algolia-insights-1.17.9.tgz", + "integrity": "sha512-u1fEHkCbWF92DBeB/KHeMacsjsoI0wFhjZtlCq2ddZbAehshbZST6Hs0Avkc0s+4UyBGbMDnSuXHLuvRWK5iDQ==", + "license": "MIT", + "dependencies": { + "@algolia/autocomplete-shared": "1.17.9" + }, + "peerDependencies": { + "search-insights": ">= 1 < 3" + } + }, + "node_modules/@docsearch/react/node_modules/@algolia/autocomplete-preset-algolia": { + "version": "1.17.9", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.17.9.tgz", + "integrity": "sha512-Na1OuceSJeg8j7ZWn5ssMu/Ax3amtOwk76u4h5J4eK2Nx2KB5qt0Z4cOapCsxot9VcEN11ADV5aUSlQF4RhGjQ==", + "license": "MIT", + "dependencies": { + "@algolia/autocomplete-shared": "1.17.9" + }, + "peerDependencies": { + "@algolia/client-search": ">= 4.9.1 < 6", + "algoliasearch": ">= 4.9.1 < 6" + } + }, + "node_modules/@docsearch/react/node_modules/@algolia/autocomplete-shared": { + "version": "1.17.9", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.17.9.tgz", + "integrity": "sha512-iDf05JDQ7I0b7JEA/9IektxN/80a2MZ1ToohfmNS3rfeuQnIKI3IJlIafD0xu4StbtQTghx9T3Maa97ytkXenQ==", + "license": "MIT", + "peerDependencies": { + "@algolia/client-search": ">= 4.9.1 < 6", + "algoliasearch": ">= 4.9.1 < 6" + } + }, + "node_modules/@docsearch/react/node_modules/@algolia/client-abtesting": { + "version": "5.25.0", + "resolved": "https://registry.npmjs.org/@algolia/client-abtesting/-/client-abtesting-5.25.0.tgz", + "integrity": "sha512-1pfQulNUYNf1Tk/svbfjfkLBS36zsuph6m+B6gDkPEivFmso/XnRgwDvjAx80WNtiHnmeNjIXdF7Gos8+OLHqQ==", + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.25.0", + "@algolia/requester-browser-xhr": "5.25.0", + "@algolia/requester-fetch": "5.25.0", + "@algolia/requester-node-http": "5.25.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@docsearch/react/node_modules/@algolia/client-analytics": { + "version": "5.25.0", + "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-5.25.0.tgz", + "integrity": "sha512-AFbG6VDJX/o2vDd9hqncj1B6B4Tulk61mY0pzTtzKClyTDlNP0xaUiEKhl6E7KO9I/x0FJF5tDCm0Hn6v5x18A==", + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.25.0", + "@algolia/requester-browser-xhr": "5.25.0", + "@algolia/requester-fetch": "5.25.0", + "@algolia/requester-node-http": "5.25.0" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@docsearch/react/node_modules/@algolia/client-common": { - "version": "5.19.0", - "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.19.0.tgz", - "integrity": "sha512-2ERRbICHXvtj5kfFpY5r8qu9pJII/NAHsdgUXnUitQFwPdPL7wXiupcvZJC7DSntOnE8AE0lM7oDsPhrJfj5nQ==", + "version": "5.25.0", + "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.25.0.tgz", + "integrity": "sha512-il1zS/+Rc6la6RaCdSZ2YbJnkQC6W1wiBO8+SH+DE6CPMWBU6iDVzH0sCKSAtMWl9WBxoN6MhNjGBnCv9Yy2bA==", "license": "MIT", "engines": { "node": ">= 14.0.0" } }, - "node_modules/@docsearch/react/node_modules/@algolia/client-personalization": { - "version": "5.19.0", - "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-5.19.0.tgz", - "integrity": "sha512-B9eoce/fk8NLboGje+pMr72pw+PV7c5Z01On477heTZ7jkxoZ4X92dobeGuEQop61cJ93Gaevd1of4mBr4hu2A==", + "node_modules/@docsearch/react/node_modules/@algolia/client-insights": { + "version": "5.25.0", + "resolved": "https://registry.npmjs.org/@algolia/client-insights/-/client-insights-5.25.0.tgz", + "integrity": "sha512-blbjrUH1siZNfyCGeq0iLQu00w3a4fBXm0WRIM0V8alcAPo7rWjLbMJMrfBtzL9X5ic6wgxVpDADXduGtdrnkw==", "license": "MIT", "dependencies": { - "@algolia/client-common": "5.19.0", - "@algolia/requester-browser-xhr": "5.19.0", - "@algolia/requester-fetch": "5.19.0", - "@algolia/requester-node-http": "5.19.0" + "@algolia/client-common": "5.25.0", + "@algolia/requester-browser-xhr": "5.25.0", + "@algolia/requester-fetch": "5.25.0", + "@algolia/requester-node-http": "5.25.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@docsearch/react/node_modules/@algolia/client-personalization": { + "version": "5.25.0", + "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-5.25.0.tgz", + "integrity": "sha512-aywoEuu1NxChBcHZ1pWaat0Plw7A8jDMwjgRJ00Mcl7wGlwuPt5dJ/LTNcg3McsEUbs2MBNmw0ignXBw9Tbgow==", + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.25.0", + "@algolia/requester-browser-xhr": "5.25.0", + "@algolia/requester-fetch": "5.25.0", + "@algolia/requester-node-http": "5.25.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@docsearch/react/node_modules/@algolia/client-query-suggestions": { + "version": "5.25.0", + "resolved": "https://registry.npmjs.org/@algolia/client-query-suggestions/-/client-query-suggestions-5.25.0.tgz", + "integrity": "sha512-a/W2z6XWKjKjIW1QQQV8PTTj1TXtaKx79uR3NGBdBdGvVdt24KzGAaN7sCr5oP8DW4D3cJt44wp2OY/fZcPAVA==", + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.25.0", + "@algolia/requester-browser-xhr": "5.25.0", + "@algolia/requester-fetch": "5.25.0", + "@algolia/requester-node-http": "5.25.0" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@docsearch/react/node_modules/@algolia/client-search": { - "version": "5.19.0", - "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-5.19.0.tgz", - "integrity": "sha512-Ctg3xXD/1VtcwmkulR5+cKGOMj4r0wC49Y/KZdGQcqpydKn+e86F6l3tb3utLJQVq4lpEJud6kdRykFgcNsp8Q==", + "version": "5.25.0", + "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-5.25.0.tgz", + "integrity": "sha512-9rUYcMIBOrCtYiLX49djyzxqdK9Dya/6Z/8sebPn94BekT+KLOpaZCuc6s0Fpfq7nx5J6YY5LIVFQrtioK9u0g==", "license": "MIT", "dependencies": { - "@algolia/client-common": "5.19.0", - "@algolia/requester-browser-xhr": "5.19.0", - "@algolia/requester-fetch": "5.19.0", - "@algolia/requester-node-http": "5.19.0" + "@algolia/client-common": "5.25.0", + "@algolia/requester-browser-xhr": "5.25.0", + "@algolia/requester-fetch": "5.25.0", + "@algolia/requester-node-http": "5.25.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@docsearch/react/node_modules/@algolia/ingestion": { + "version": "1.25.0", + "resolved": "https://registry.npmjs.org/@algolia/ingestion/-/ingestion-1.25.0.tgz", + "integrity": "sha512-jJeH/Hk+k17Vkokf02lkfYE4A+EJX+UgnMhTLR/Mb+d1ya5WhE+po8p5a/Nxb6lo9OLCRl6w3Hmk1TX1e9gVbQ==", + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.25.0", + "@algolia/requester-browser-xhr": "5.25.0", + "@algolia/requester-fetch": "5.25.0", + "@algolia/requester-node-http": "5.25.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@docsearch/react/node_modules/@algolia/monitoring": { + "version": "1.25.0", + "resolved": "https://registry.npmjs.org/@algolia/monitoring/-/monitoring-1.25.0.tgz", + "integrity": "sha512-Ls3i1AehJ0C6xaHe7kK9vPmzImOn5zBg7Kzj8tRYIcmCWVyuuFwCIsbuIIz/qzUf1FPSWmw0TZrGeTumk2fqXg==", + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.25.0", + "@algolia/requester-browser-xhr": "5.25.0", + "@algolia/requester-fetch": "5.25.0", + "@algolia/requester-node-http": "5.25.0" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@docsearch/react/node_modules/@algolia/recommend": { - "version": "5.19.0", - "resolved": "https://registry.npmjs.org/@algolia/recommend/-/recommend-5.19.0.tgz", - "integrity": "sha512-PbgrMTbUPlmwfJsxjFhal4XqZO2kpBNRjemLVTkUiti4w/+kzcYO4Hg5zaBgVqPwvFDNQ8JS4SS3TBBem88u+g==", + "version": "5.25.0", + "resolved": "https://registry.npmjs.org/@algolia/recommend/-/recommend-5.25.0.tgz", + "integrity": "sha512-79sMdHpiRLXVxSjgw7Pt4R1aNUHxFLHiaTDnN2MQjHwJ1+o3wSseb55T9VXU4kqy3m7TUme3pyRhLk5ip/S4Mw==", "license": "MIT", "dependencies": { - "@algolia/client-common": "5.19.0", - "@algolia/requester-browser-xhr": "5.19.0", - "@algolia/requester-fetch": "5.19.0", - "@algolia/requester-node-http": "5.19.0" + "@algolia/client-common": "5.25.0", + "@algolia/requester-browser-xhr": "5.25.0", + "@algolia/requester-fetch": "5.25.0", + "@algolia/requester-node-http": "5.25.0" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@docsearch/react/node_modules/@algolia/requester-browser-xhr": { - "version": "5.19.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.19.0.tgz", - "integrity": "sha512-GfnhnQBT23mW/VMNs7m1qyEyZzhZz093aY2x8p0era96MMyNv8+FxGek5pjVX0b57tmSCZPf4EqNCpkGcGsmbw==", + "version": "5.25.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.25.0.tgz", + "integrity": "sha512-JLaF23p1SOPBmfEqozUAgKHQrGl3z/Z5RHbggBu6s07QqXXcazEsub5VLonCxGVqTv6a61AAPr8J1G5HgGGjEw==", "license": "MIT", "dependencies": { - "@algolia/client-common": "5.19.0" + "@algolia/client-common": "5.25.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/@docsearch/react/node_modules/@algolia/requester-fetch": { + "version": "5.25.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-fetch/-/requester-fetch-5.25.0.tgz", + "integrity": "sha512-rtzXwqzFi1edkOF6sXxq+HhmRKDy7tz84u0o5t1fXwz0cwx+cjpmxu/6OQKTdOJFS92JUYHsG51Iunie7xbqfQ==", + "license": "MIT", + "dependencies": { + "@algolia/client-common": "5.25.0" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@docsearch/react/node_modules/@algolia/requester-node-http": { - "version": "5.19.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-5.19.0.tgz", - "integrity": "sha512-p6t8ue0XZNjcRiqNkb5QAM0qQRAKsCiebZ6n9JjWA+p8fWf8BvnhO55y2fO28g3GW0Imj7PrAuyBuxq8aDVQwQ==", + "version": "5.25.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-5.25.0.tgz", + "integrity": "sha512-ZO0UKvDyEFvyeJQX0gmZDQEvhLZ2X10K+ps6hViMo1HgE2V8em00SwNsQ+7E/52a+YiBkVWX61pJJJE44juDMQ==", "license": "MIT", "dependencies": { - "@algolia/client-common": "5.19.0" + "@algolia/client-common": "5.25.0" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@docsearch/react/node_modules/algoliasearch": { - "version": "5.19.0", - "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-5.19.0.tgz", - "integrity": "sha512-zrLtGhC63z3sVLDDKGW+SlCRN9eJHFTgdEmoAOpsVh6wgGL1GgTTDou7tpCBjevzgIvi3AIyDAQO3Xjbg5eqZg==", + "version": "5.25.0", + "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-5.25.0.tgz", + "integrity": "sha512-n73BVorL4HIwKlfJKb4SEzAYkR3Buwfwbh+MYxg2mloFph2fFGV58E90QTzdbfzWrLn4HE5Czx/WTjI8fcHaMg==", "license": "MIT", "dependencies": { - "@algolia/client-abtesting": "5.19.0", - "@algolia/client-analytics": "5.19.0", - "@algolia/client-common": "5.19.0", - "@algolia/client-insights": "5.19.0", - "@algolia/client-personalization": "5.19.0", - "@algolia/client-query-suggestions": "5.19.0", - "@algolia/client-search": "5.19.0", - "@algolia/ingestion": "1.19.0", - "@algolia/monitoring": "1.19.0", - "@algolia/recommend": "5.19.0", - "@algolia/requester-browser-xhr": "5.19.0", - "@algolia/requester-fetch": "5.19.0", - "@algolia/requester-node-http": "5.19.0" + "@algolia/client-abtesting": "5.25.0", + "@algolia/client-analytics": "5.25.0", + "@algolia/client-common": "5.25.0", + "@algolia/client-insights": "5.25.0", + "@algolia/client-personalization": "5.25.0", + "@algolia/client-query-suggestions": "5.25.0", + "@algolia/client-search": "5.25.0", + "@algolia/ingestion": "1.25.0", + "@algolia/monitoring": "1.25.0", + "@algolia/recommend": "5.25.0", + "@algolia/requester-browser-xhr": "5.25.0", + "@algolia/requester-fetch": "5.25.0", + "@algolia/requester-node-http": "5.25.0" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@docusaurus/babel": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/babel/-/babel-3.7.0.tgz", - "integrity": "sha512-0H5uoJLm14S/oKV3Keihxvh8RV+vrid+6Gv+2qhuzbqHanawga8tYnsdpjEyt36ucJjqlby2/Md2ObWjA02UXQ==", + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/@docusaurus/babel/-/babel-3.8.0.tgz", + "integrity": "sha512-9EJwSgS6TgB8IzGk1L8XddJLhZod8fXT4ULYMx6SKqyCBqCFpVCEjR/hNXXhnmtVM2irDuzYoVLGWv7srG/VOA==", "license": "MIT", "dependencies": { "@babel/core": "^7.25.9", @@ -3620,8 +3752,8 @@ "@babel/runtime": "^7.25.9", "@babel/runtime-corejs3": "^7.25.9", "@babel/traverse": "^7.25.9", - "@docusaurus/logger": "3.7.0", - "@docusaurus/utils": "3.7.0", + "@docusaurus/logger": "3.8.0", + "@docusaurus/utils": "3.8.0", "babel-plugin-dynamic-import-node": "^2.3.3", "fs-extra": "^11.1.1", "tslib": "^2.6.0" @@ -3631,17 +3763,17 @@ } }, "node_modules/@docusaurus/bundler": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/bundler/-/bundler-3.7.0.tgz", - "integrity": "sha512-CUUT9VlSGukrCU5ctZucykvgCISivct+cby28wJwCC/fkQFgAHRp/GKv2tx38ZmXb7nacrKzFTcp++f9txUYGg==", + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/@docusaurus/bundler/-/bundler-3.8.0.tgz", + "integrity": "sha512-Rq4Z/MSeAHjVzBLirLeMcjLIAQy92pF1OI+2rmt18fSlMARfTGLWRE8Vb+ljQPTOSfJxwDYSzsK6i7XloD2rNA==", "license": "MIT", "dependencies": { "@babel/core": "^7.25.9", - "@docusaurus/babel": "3.7.0", - "@docusaurus/cssnano-preset": "3.7.0", - "@docusaurus/logger": "3.7.0", - "@docusaurus/types": "3.7.0", - "@docusaurus/utils": "3.7.0", + "@docusaurus/babel": "3.8.0", + "@docusaurus/cssnano-preset": "3.8.0", + "@docusaurus/logger": "3.8.0", + "@docusaurus/types": "3.8.0", + "@docusaurus/utils": "3.8.0", "babel-loader": "^9.2.1", "clean-css": "^5.3.2", "copy-webpack-plugin": "^11.0.0", @@ -3655,7 +3787,6 @@ "postcss": "^8.4.26", "postcss-loader": "^7.3.3", "postcss-preset-env": "^10.1.0", - "react-dev-utils": "^12.0.1", "terser-webpack-plugin": "^5.3.9", "tslib": "^2.6.0", "url-loader": "^4.1.1", @@ -3675,18 +3806,18 @@ } }, "node_modules/@docusaurus/core": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-3.7.0.tgz", - "integrity": "sha512-b0fUmaL+JbzDIQaamzpAFpTviiaU4cX3Qz8cuo14+HGBCwa0evEK0UYCBFY3n4cLzL8Op1BueeroUD2LYAIHbQ==", + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-3.8.0.tgz", + "integrity": "sha512-c7u6zFELmSGPEP9WSubhVDjgnpiHgDqMh1qVdCB7rTflh4Jx0msTYmMiO91Ez0KtHj4sIsDsASnjwfJ2IZp3Vw==", "license": "MIT", "dependencies": { - "@docusaurus/babel": "3.7.0", - "@docusaurus/bundler": "3.7.0", - "@docusaurus/logger": "3.7.0", - "@docusaurus/mdx-loader": "3.7.0", - "@docusaurus/utils": "3.7.0", - "@docusaurus/utils-common": "3.7.0", - "@docusaurus/utils-validation": "3.7.0", + "@docusaurus/babel": "3.8.0", + "@docusaurus/bundler": "3.8.0", + "@docusaurus/logger": "3.8.0", + "@docusaurus/mdx-loader": "3.8.0", + "@docusaurus/utils": "3.8.0", + "@docusaurus/utils-common": "3.8.0", + "@docusaurus/utils-validation": "3.8.0", "boxen": "^6.2.1", "chalk": "^4.1.2", "chokidar": "^3.5.3", @@ -3694,19 +3825,19 @@ "combine-promises": "^1.1.0", "commander": "^5.1.0", "core-js": "^3.31.1", - "del": "^6.1.1", "detect-port": "^1.5.1", "escape-html": "^1.0.3", "eta": "^2.2.0", "eval": "^0.1.8", + "execa": "5.1.1", "fs-extra": "^11.1.1", "html-tags": "^3.3.1", "html-webpack-plugin": "^5.6.0", "leven": "^3.1.0", "lodash": "^4.17.21", + "open": "^8.4.0", "p-map": "^4.0.0", "prompts": "^2.4.2", - "react-dev-utils": "^12.0.1", "react-helmet-async": "npm:@slorber/react-helmet-async@1.3.0", "react-loadable": "npm:@docusaurus/react-loadable@6.0.0", "react-loadable-ssr-addon-v5-slorber": "^1.0.1", @@ -3715,7 +3846,7 @@ "react-router-dom": "^5.3.4", "semver": "^7.5.4", "serve-handler": "^6.1.6", - "shelljs": "^0.8.5", + "tinypool": "^1.0.2", "tslib": "^2.6.0", "update-notifier": "^6.0.2", "webpack": "^5.95.0", @@ -3736,9 +3867,9 @@ } }, "node_modules/@docusaurus/cssnano-preset": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-3.7.0.tgz", - "integrity": "sha512-X9GYgruZBSOozg4w4dzv9uOz8oK/EpPVQXkp0MM6Tsgp/nRIU9hJzJ0Pxg1aRa3xCeEQTOimZHcocQFlLwYajQ==", + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-3.8.0.tgz", + "integrity": "sha512-UJ4hAS2T0R4WNy+phwVff2Q0L5+RXW9cwlH6AEphHR5qw3m/yacfWcSK7ort2pMMbDn8uGrD38BTm4oLkuuNoQ==", "license": "MIT", "dependencies": { "cssnano-preset-advanced": "^6.1.2", @@ -3751,9 +3882,9 @@ } }, "node_modules/@docusaurus/logger": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/logger/-/logger-3.7.0.tgz", - "integrity": "sha512-z7g62X7bYxCYmeNNuO9jmzxLQG95q9QxINCwpboVcNff3SJiHJbGrarxxOVMVmAh1MsrSfxWkVGv4P41ktnFsA==", + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/@docusaurus/logger/-/logger-3.8.0.tgz", + "integrity": "sha512-7eEMaFIam5Q+v8XwGqF/n0ZoCld4hV4eCCgQkfcN9Mq5inoZa6PHHW9Wu6lmgzoK5Kx3keEeABcO2SxwraoPDQ==", "license": "MIT", "dependencies": { "chalk": "^4.1.2", @@ -3764,21 +3895,21 @@ } }, "node_modules/@docusaurus/mdx-loader": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/mdx-loader/-/mdx-loader-3.7.0.tgz", - "integrity": "sha512-OFBG6oMjZzc78/U3WNPSHs2W9ZJ723ewAcvVJaqS0VgyeUfmzUV8f1sv+iUHA0DtwiR5T5FjOxj6nzEE8LY6VA==", + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/@docusaurus/mdx-loader/-/mdx-loader-3.8.0.tgz", + "integrity": "sha512-mDPSzssRnpjSdCGuv7z2EIAnPS1MHuZGTaRLwPn4oQwszu4afjWZ/60sfKjTnjBjI8Vl4OgJl2vMmfmiNDX4Ng==", "license": "MIT", "dependencies": { - "@docusaurus/logger": "3.7.0", - "@docusaurus/utils": "3.7.0", - "@docusaurus/utils-validation": "3.7.0", + "@docusaurus/logger": "3.8.0", + "@docusaurus/utils": "3.8.0", + "@docusaurus/utils-validation": "3.8.0", "@mdx-js/mdx": "^3.0.0", "@slorber/remark-comment": "^1.0.0", "escape-html": "^1.0.3", "estree-util-value-to-estree": "^3.0.1", "file-loader": "^6.2.0", "fs-extra": "^11.1.1", - "image-size": "^1.0.2", + "image-size": "^2.0.2", "mdast-util-mdx": "^3.0.0", "mdast-util-to-string": "^4.0.0", "rehype-raw": "^7.0.0", @@ -3803,17 +3934,17 @@ } }, "node_modules/@docusaurus/module-type-aliases": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/module-type-aliases/-/module-type-aliases-3.7.0.tgz", - "integrity": "sha512-g7WdPqDNaqA60CmBrr0cORTrsOit77hbsTj7xE2l71YhBn79sxdm7WMK7wfhcaafkbpIh7jv5ef5TOpf1Xv9Lg==", + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/@docusaurus/module-type-aliases/-/module-type-aliases-3.8.0.tgz", + "integrity": "sha512-/uMb4Ipt5J/QnD13MpnoC/A4EYAe6DKNWqTWLlGrqsPJwJv73vSwkA25xnYunwfqWk0FlUQfGv/Swdh5eCCg7g==", "license": "MIT", "dependencies": { - "@docusaurus/types": "3.7.0", + "@docusaurus/types": "3.8.0", "@types/history": "^4.7.11", "@types/react": "*", "@types/react-router-config": "*", "@types/react-router-dom": "*", - "react-helmet-async": "npm:@slorber/react-helmet-async@*", + "react-helmet-async": "npm:@slorber/react-helmet-async@1.3.0", "react-loadable": "npm:@docusaurus/react-loadable@6.0.0" }, "peerDependencies": { @@ -3822,24 +3953,24 @@ } }, "node_modules/@docusaurus/plugin-content-blog": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-blog/-/plugin-content-blog-3.7.0.tgz", - "integrity": "sha512-EFLgEz6tGHYWdPU0rK8tSscZwx+AsyuBW/r+tNig2kbccHYGUJmZtYN38GjAa3Fda4NU+6wqUO5kTXQSRBQD3g==", + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-blog/-/plugin-content-blog-3.8.0.tgz", + "integrity": "sha512-0SlOTd9R55WEr1GgIXu+hhTT0hzARYx3zIScA5IzpdekZQesI/hKEa5LPHBd415fLkWMjdD59TaW/3qQKpJ0Lg==", "license": "MIT", "dependencies": { - "@docusaurus/core": "3.7.0", - "@docusaurus/logger": "3.7.0", - "@docusaurus/mdx-loader": "3.7.0", - "@docusaurus/theme-common": "3.7.0", - "@docusaurus/types": "3.7.0", - "@docusaurus/utils": "3.7.0", - "@docusaurus/utils-common": "3.7.0", - "@docusaurus/utils-validation": "3.7.0", + "@docusaurus/core": "3.8.0", + "@docusaurus/logger": "3.8.0", + "@docusaurus/mdx-loader": "3.8.0", + "@docusaurus/theme-common": "3.8.0", + "@docusaurus/types": "3.8.0", + "@docusaurus/utils": "3.8.0", + "@docusaurus/utils-common": "3.8.0", + "@docusaurus/utils-validation": "3.8.0", "cheerio": "1.0.0-rc.12", "feed": "^4.2.2", "fs-extra": "^11.1.1", "lodash": "^4.17.21", - "reading-time": "^1.5.0", + "schema-dts": "^1.1.2", "srcset": "^4.0.0", "tslib": "^2.6.0", "unist-util-visit": "^5.0.0", @@ -3856,25 +3987,26 @@ } }, "node_modules/@docusaurus/plugin-content-docs": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-docs/-/plugin-content-docs-3.7.0.tgz", - "integrity": "sha512-GXg5V7kC9FZE4FkUZA8oo/NrlRb06UwuICzI6tcbzj0+TVgjq/mpUXXzSgKzMS82YByi4dY2Q808njcBCyy6tQ==", + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-docs/-/plugin-content-docs-3.8.0.tgz", + "integrity": "sha512-fRDMFLbUN6eVRXcjP8s3Y7HpAt9pzPYh1F/7KKXOCxvJhjjCtbon4VJW0WndEPInVz4t8QUXn5QZkU2tGVCE2g==", "license": "MIT", "dependencies": { - "@docusaurus/core": "3.7.0", - "@docusaurus/logger": "3.7.0", - "@docusaurus/mdx-loader": "3.7.0", - "@docusaurus/module-type-aliases": "3.7.0", - "@docusaurus/theme-common": "3.7.0", - "@docusaurus/types": "3.7.0", - "@docusaurus/utils": "3.7.0", - "@docusaurus/utils-common": "3.7.0", - "@docusaurus/utils-validation": "3.7.0", + "@docusaurus/core": "3.8.0", + "@docusaurus/logger": "3.8.0", + "@docusaurus/mdx-loader": "3.8.0", + "@docusaurus/module-type-aliases": "3.8.0", + "@docusaurus/theme-common": "3.8.0", + "@docusaurus/types": "3.8.0", + "@docusaurus/utils": "3.8.0", + "@docusaurus/utils-common": "3.8.0", + "@docusaurus/utils-validation": "3.8.0", "@types/react-router-config": "^5.0.7", "combine-promises": "^1.1.0", "fs-extra": "^11.1.1", "js-yaml": "^4.1.0", "lodash": "^4.17.21", + "schema-dts": "^1.1.2", "tslib": "^2.6.0", "utility-types": "^3.10.0", "webpack": "^5.88.1" @@ -3888,16 +4020,16 @@ } }, "node_modules/@docusaurus/plugin-content-pages": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-pages/-/plugin-content-pages-3.7.0.tgz", - "integrity": "sha512-YJSU3tjIJf032/Aeao8SZjFOrXJbz/FACMveSMjLyMH4itQyZ2XgUIzt4y+1ISvvk5zrW4DABVT2awTCqBkx0Q==", + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-pages/-/plugin-content-pages-3.8.0.tgz", + "integrity": "sha512-39EDx2y1GA0Pxfion5tQZLNJxL4gq6susd1xzetVBjVIQtwpCdyloOfQBAgX0FylqQxfJrYqL0DIUuq7rd7uBw==", "license": "MIT", "dependencies": { - "@docusaurus/core": "3.7.0", - "@docusaurus/mdx-loader": "3.7.0", - "@docusaurus/types": "3.7.0", - "@docusaurus/utils": "3.7.0", - "@docusaurus/utils-validation": "3.7.0", + "@docusaurus/core": "3.8.0", + "@docusaurus/mdx-loader": "3.8.0", + "@docusaurus/types": "3.8.0", + "@docusaurus/utils": "3.8.0", + "@docusaurus/utils-validation": "3.8.0", "fs-extra": "^11.1.1", "tslib": "^2.6.0", "webpack": "^5.88.1" @@ -3910,17 +4042,32 @@ "react-dom": "^18.0.0 || ^19.0.0" } }, - "node_modules/@docusaurus/plugin-debug": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-debug/-/plugin-debug-3.7.0.tgz", - "integrity": "sha512-Qgg+IjG/z4svtbCNyTocjIwvNTNEwgRjSXXSJkKVG0oWoH0eX/HAPiu+TS1HBwRPQV+tTYPWLrUypYFepfujZA==", + "node_modules/@docusaurus/plugin-css-cascade-layers": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-css-cascade-layers/-/plugin-css-cascade-layers-3.8.0.tgz", + "integrity": "sha512-/VBTNymPIxQB8oA3ZQ4GFFRYdH4ZxDRRBECxyjRyv486mfUPXfcdk+im4S5mKWa6EK2JzBz95IH/Wu0qQgJ5yQ==", "license": "MIT", "dependencies": { - "@docusaurus/core": "3.7.0", - "@docusaurus/types": "3.7.0", - "@docusaurus/utils": "3.7.0", + "@docusaurus/core": "3.8.0", + "@docusaurus/types": "3.8.0", + "@docusaurus/utils-validation": "3.8.0", + "tslib": "^2.6.0" + }, + "engines": { + "node": ">=18.0" + } + }, + "node_modules/@docusaurus/plugin-debug": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-debug/-/plugin-debug-3.8.0.tgz", + "integrity": "sha512-teonJvJsDB9o2OnG6ifbhblg/PXzZvpUKHFgD8dOL1UJ58u0lk8o0ZOkvaYEBa9nDgqzoWrRk9w+e3qaG2mOhQ==", + "license": "MIT", + "dependencies": { + "@docusaurus/core": "3.8.0", + "@docusaurus/types": "3.8.0", + "@docusaurus/utils": "3.8.0", "fs-extra": "^11.1.1", - "react-json-view-lite": "^1.2.0", + "react-json-view-lite": "^2.3.0", "tslib": "^2.6.0" }, "engines": { @@ -3932,14 +4079,14 @@ } }, "node_modules/@docusaurus/plugin-google-analytics": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-3.7.0.tgz", - "integrity": "sha512-otIqiRV/jka6Snjf+AqB360XCeSv7lQC+DKYW+EUZf6XbuE8utz5PeUQ8VuOcD8Bk5zvT1MC4JKcd5zPfDuMWA==", + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-3.8.0.tgz", + "integrity": "sha512-aKKa7Q8+3xRSRESipNvlFgNp3FNPELKhuo48Cg/svQbGNwidSHbZT03JqbW4cBaQnyyVchO1ttk+kJ5VC9Gx0w==", "license": "MIT", "dependencies": { - "@docusaurus/core": "3.7.0", - "@docusaurus/types": "3.7.0", - "@docusaurus/utils-validation": "3.7.0", + "@docusaurus/core": "3.8.0", + "@docusaurus/types": "3.8.0", + "@docusaurus/utils-validation": "3.8.0", "tslib": "^2.6.0" }, "engines": { @@ -3951,14 +4098,14 @@ } }, "node_modules/@docusaurus/plugin-google-gtag": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-3.7.0.tgz", - "integrity": "sha512-M3vrMct1tY65ModbyeDaMoA+fNJTSPe5qmchhAbtqhDD/iALri0g9LrEpIOwNaoLmm6lO88sfBUADQrSRSGSWA==", + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-3.8.0.tgz", + "integrity": "sha512-ugQYMGF4BjbAW/JIBtVcp+9eZEgT9HRdvdcDudl5rywNPBA0lct+lXMG3r17s02rrhInMpjMahN3Yc9Cb3H5/g==", "license": "MIT", "dependencies": { - "@docusaurus/core": "3.7.0", - "@docusaurus/types": "3.7.0", - "@docusaurus/utils-validation": "3.7.0", + "@docusaurus/core": "3.8.0", + "@docusaurus/types": "3.8.0", + "@docusaurus/utils-validation": "3.8.0", "@types/gtag.js": "^0.0.12", "tslib": "^2.6.0" }, @@ -3971,14 +4118,14 @@ } }, "node_modules/@docusaurus/plugin-google-tag-manager": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-tag-manager/-/plugin-google-tag-manager-3.7.0.tgz", - "integrity": "sha512-X8U78nb8eiMiPNg3jb9zDIVuuo/rE1LjGDGu+5m5CX4UBZzjMy+klOY2fNya6x8ACyE/L3K2erO1ErheP55W/w==", + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-tag-manager/-/plugin-google-tag-manager-3.8.0.tgz", + "integrity": "sha512-9juRWxbwZD3SV02Jd9QB6yeN7eu+7T4zB0bvJLcVQwi+am51wAxn2CwbdL0YCCX+9OfiXbADE8D8Q65Hbopu/w==", "license": "MIT", "dependencies": { - "@docusaurus/core": "3.7.0", - "@docusaurus/types": "3.7.0", - "@docusaurus/utils-validation": "3.7.0", + "@docusaurus/core": "3.8.0", + "@docusaurus/types": "3.8.0", + "@docusaurus/utils-validation": "3.8.0", "tslib": "^2.6.0" }, "engines": { @@ -3990,17 +4137,17 @@ } }, "node_modules/@docusaurus/plugin-sitemap": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-sitemap/-/plugin-sitemap-3.7.0.tgz", - "integrity": "sha512-bTRT9YLZ/8I/wYWKMQke18+PF9MV8Qub34Sku6aw/vlZ/U+kuEuRpQ8bTcNOjaTSfYsWkK4tTwDMHK2p5S86cA==", + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-sitemap/-/plugin-sitemap-3.8.0.tgz", + "integrity": "sha512-fGpOIyJvNiuAb90nSJ2Gfy/hUOaDu6826e5w5UxPmbpCIc7KlBHNAZ5g4L4ZuHhc4hdfq4mzVBsQSnne+8Ze1g==", "license": "MIT", "dependencies": { - "@docusaurus/core": "3.7.0", - "@docusaurus/logger": "3.7.0", - "@docusaurus/types": "3.7.0", - "@docusaurus/utils": "3.7.0", - "@docusaurus/utils-common": "3.7.0", - "@docusaurus/utils-validation": "3.7.0", + "@docusaurus/core": "3.8.0", + "@docusaurus/logger": "3.8.0", + "@docusaurus/types": "3.8.0", + "@docusaurus/utils": "3.8.0", + "@docusaurus/utils-common": "3.8.0", + "@docusaurus/utils-validation": "3.8.0", "fs-extra": "^11.1.1", "sitemap": "^7.1.1", "tslib": "^2.6.0" @@ -4014,15 +4161,15 @@ } }, "node_modules/@docusaurus/plugin-svgr": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-svgr/-/plugin-svgr-3.7.0.tgz", - "integrity": "sha512-HByXIZTbc4GV5VAUkZ2DXtXv1Qdlnpk3IpuImwSnEzCDBkUMYcec5282hPjn6skZqB25M1TYCmWS91UbhBGxQg==", + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-svgr/-/plugin-svgr-3.8.0.tgz", + "integrity": "sha512-kEDyry+4OMz6BWLG/lEqrNsL/w818bywK70N1gytViw4m9iAmoxCUT7Ri9Dgs7xUdzCHJ3OujolEmD88Wy44OA==", "license": "MIT", "dependencies": { - "@docusaurus/core": "3.7.0", - "@docusaurus/types": "3.7.0", - "@docusaurus/utils": "3.7.0", - "@docusaurus/utils-validation": "3.7.0", + "@docusaurus/core": "3.8.0", + "@docusaurus/types": "3.8.0", + "@docusaurus/utils": "3.8.0", + "@docusaurus/utils-validation": "3.8.0", "@svgr/core": "8.1.0", "@svgr/webpack": "^8.1.0", "tslib": "^2.6.0", @@ -4037,25 +4184,26 @@ } }, "node_modules/@docusaurus/preset-classic": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/preset-classic/-/preset-classic-3.7.0.tgz", - "integrity": "sha512-nPHj8AxDLAaQXs+O6+BwILFuhiWbjfQWrdw2tifOClQoNfuXDjfjogee6zfx6NGHWqshR23LrcN115DmkHC91Q==", + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/@docusaurus/preset-classic/-/preset-classic-3.8.0.tgz", + "integrity": "sha512-qOu6tQDOWv+rpTlKu+eJATCJVGnABpRCPuqf7LbEaQ1mNY//N/P8cHQwkpAU+aweQfarcZ0XfwCqRHJfjeSV/g==", "license": "MIT", "dependencies": { - "@docusaurus/core": "3.7.0", - "@docusaurus/plugin-content-blog": "3.7.0", - "@docusaurus/plugin-content-docs": "3.7.0", - "@docusaurus/plugin-content-pages": "3.7.0", - "@docusaurus/plugin-debug": "3.7.0", - "@docusaurus/plugin-google-analytics": "3.7.0", - "@docusaurus/plugin-google-gtag": "3.7.0", - "@docusaurus/plugin-google-tag-manager": "3.7.0", - "@docusaurus/plugin-sitemap": "3.7.0", - "@docusaurus/plugin-svgr": "3.7.0", - "@docusaurus/theme-classic": "3.7.0", - "@docusaurus/theme-common": "3.7.0", - "@docusaurus/theme-search-algolia": "3.7.0", - "@docusaurus/types": "3.7.0" + "@docusaurus/core": "3.8.0", + "@docusaurus/plugin-content-blog": "3.8.0", + "@docusaurus/plugin-content-docs": "3.8.0", + "@docusaurus/plugin-content-pages": "3.8.0", + "@docusaurus/plugin-css-cascade-layers": "3.8.0", + "@docusaurus/plugin-debug": "3.8.0", + "@docusaurus/plugin-google-analytics": "3.8.0", + "@docusaurus/plugin-google-gtag": "3.8.0", + "@docusaurus/plugin-google-tag-manager": "3.8.0", + "@docusaurus/plugin-sitemap": "3.8.0", + "@docusaurus/plugin-svgr": "3.8.0", + "@docusaurus/theme-classic": "3.8.0", + "@docusaurus/theme-common": "3.8.0", + "@docusaurus/theme-search-algolia": "3.8.0", + "@docusaurus/types": "3.8.0" }, "engines": { "node": ">=18.0" @@ -4066,24 +4214,24 @@ } }, "node_modules/@docusaurus/theme-classic": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-classic/-/theme-classic-3.7.0.tgz", - "integrity": "sha512-MnLxG39WcvLCl4eUzHr0gNcpHQfWoGqzADCly54aqCofQX6UozOS9Th4RK3ARbM9m7zIRv3qbhggI53dQtx/hQ==", + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-classic/-/theme-classic-3.8.0.tgz", + "integrity": "sha512-nQWFiD5ZjoT76OaELt2n33P3WVuuCz8Dt5KFRP2fCBo2r9JCLsp2GJjZpnaG24LZ5/arRjv4VqWKgpK0/YLt7g==", "license": "MIT", "dependencies": { - "@docusaurus/core": "3.7.0", - "@docusaurus/logger": "3.7.0", - "@docusaurus/mdx-loader": "3.7.0", - "@docusaurus/module-type-aliases": "3.7.0", - "@docusaurus/plugin-content-blog": "3.7.0", - "@docusaurus/plugin-content-docs": "3.7.0", - "@docusaurus/plugin-content-pages": "3.7.0", - "@docusaurus/theme-common": "3.7.0", - "@docusaurus/theme-translations": "3.7.0", - "@docusaurus/types": "3.7.0", - "@docusaurus/utils": "3.7.0", - "@docusaurus/utils-common": "3.7.0", - "@docusaurus/utils-validation": "3.7.0", + "@docusaurus/core": "3.8.0", + "@docusaurus/logger": "3.8.0", + "@docusaurus/mdx-loader": "3.8.0", + "@docusaurus/module-type-aliases": "3.8.0", + "@docusaurus/plugin-content-blog": "3.8.0", + "@docusaurus/plugin-content-docs": "3.8.0", + "@docusaurus/plugin-content-pages": "3.8.0", + "@docusaurus/theme-common": "3.8.0", + "@docusaurus/theme-translations": "3.8.0", + "@docusaurus/types": "3.8.0", + "@docusaurus/utils": "3.8.0", + "@docusaurus/utils-common": "3.8.0", + "@docusaurus/utils-validation": "3.8.0", "@mdx-js/react": "^3.0.0", "clsx": "^2.0.0", "copy-text-to-clipboard": "^3.2.0", @@ -4107,15 +4255,15 @@ } }, "node_modules/@docusaurus/theme-common": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-common/-/theme-common-3.7.0.tgz", - "integrity": "sha512-8eJ5X0y+gWDsURZnBfH0WabdNm8XMCXHv8ENy/3Z/oQKwaB/EHt5lP9VsTDTf36lKEp0V6DjzjFyFIB+CetL0A==", + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-common/-/theme-common-3.8.0.tgz", + "integrity": "sha512-YqV2vAWpXGLA+A3PMLrOMtqgTHJLDcT+1Caa6RF7N4/IWgrevy5diY8oIHFkXR/eybjcrFFjUPrHif8gSGs3Tw==", "license": "MIT", "dependencies": { - "@docusaurus/mdx-loader": "3.7.0", - "@docusaurus/module-type-aliases": "3.7.0", - "@docusaurus/utils": "3.7.0", - "@docusaurus/utils-common": "3.7.0", + "@docusaurus/mdx-loader": "3.8.0", + "@docusaurus/module-type-aliases": "3.8.0", + "@docusaurus/utils": "3.8.0", + "@docusaurus/utils-common": "3.8.0", "@types/history": "^4.7.11", "@types/react": "*", "@types/react-router-config": "*", @@ -4135,17 +4283,17 @@ } }, "node_modules/@docusaurus/theme-mermaid": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-mermaid/-/theme-mermaid-3.7.0.tgz", - "integrity": "sha512-7kNDvL7hm+tshjxSxIqYMtsLUPsEBYnkevej/ext6ru9xyLgCed+zkvTfGzTWNeq8rJIEe2YSS8/OV5gCVaPCw==", + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-mermaid/-/theme-mermaid-3.8.0.tgz", + "integrity": "sha512-ou0NJM37p4xrVuFaZp8qFe5Z/qBq9LuyRTP4KKRa0u2J3zC4f3saBJDgc56FyvvN1OsmU0189KGEPUjTr6hFxg==", "license": "MIT", "dependencies": { - "@docusaurus/core": "3.7.0", - "@docusaurus/module-type-aliases": "3.7.0", - "@docusaurus/theme-common": "3.7.0", - "@docusaurus/types": "3.7.0", - "@docusaurus/utils-validation": "3.7.0", - "mermaid": ">=10.4", + "@docusaurus/core": "3.8.0", + "@docusaurus/module-type-aliases": "3.8.0", + "@docusaurus/theme-common": "3.8.0", + "@docusaurus/types": "3.8.0", + "@docusaurus/utils-validation": "3.8.0", + "mermaid": ">=11.6.0", "tslib": "^2.6.0" }, "engines": { @@ -4157,19 +4305,19 @@ } }, "node_modules/@docusaurus/theme-search-algolia": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-search-algolia/-/theme-search-algolia-3.7.0.tgz", - "integrity": "sha512-Al/j5OdzwRU1m3falm+sYy9AaB93S1XF1Lgk9Yc6amp80dNxJVplQdQTR4cYdzkGtuQqbzUA8+kaoYYO0RbK6g==", + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-search-algolia/-/theme-search-algolia-3.8.0.tgz", + "integrity": "sha512-GBZ5UOcPgiu6nUw153+0+PNWvFKweSnvKIL6Rp04H9olKb475jfKjAwCCtju5D2xs5qXHvCMvzWOg5o9f6DtuQ==", "license": "MIT", "dependencies": { - "@docsearch/react": "^3.8.1", - "@docusaurus/core": "3.7.0", - "@docusaurus/logger": "3.7.0", - "@docusaurus/plugin-content-docs": "3.7.0", - "@docusaurus/theme-common": "3.7.0", - "@docusaurus/theme-translations": "3.7.0", - "@docusaurus/utils": "3.7.0", - "@docusaurus/utils-validation": "3.7.0", + "@docsearch/react": "^3.9.0", + "@docusaurus/core": "3.8.0", + "@docusaurus/logger": "3.8.0", + "@docusaurus/plugin-content-docs": "3.8.0", + "@docusaurus/theme-common": "3.8.0", + "@docusaurus/theme-translations": "3.8.0", + "@docusaurus/utils": "3.8.0", + "@docusaurus/utils-validation": "3.8.0", "algoliasearch": "^5.17.1", "algoliasearch-helper": "^3.22.6", "clsx": "^2.0.0", @@ -4305,9 +4453,9 @@ } }, "node_modules/@docusaurus/theme-translations": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-translations/-/theme-translations-3.7.0.tgz", - "integrity": "sha512-Ewq3bEraWDmienM6eaNK7fx+/lHMtGDHQyd1O+4+3EsDxxUmrzPkV7Ct3nBWTuE0MsoZr3yNwQVKjllzCMuU3g==", + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-translations/-/theme-translations-3.8.0.tgz", + "integrity": "sha512-1DTy/snHicgkCkryWq54fZvsAglTdjTx4qjOXgqnXJ+DIty1B+aPQrAVUu8LiM+6BiILfmNxYsxhKTj+BS3PZg==", "license": "MIT", "dependencies": { "fs-extra": "^11.1.1", @@ -4318,9 +4466,9 @@ } }, "node_modules/@docusaurus/types": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-3.7.0.tgz", - "integrity": "sha512-kOmZg5RRqJfH31m+6ZpnwVbkqMJrPOG5t0IOl4i/+3ruXyNfWzZ0lVtVrD0u4ONc/0NOsS9sWYaxxWNkH1LdLQ==", + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-3.8.0.tgz", + "integrity": "sha512-RDEClpwNxZq02c+JlaKLWoS13qwWhjcNsi2wG1UpzmEnuti/z1Wx4SGpqbUqRPNSd8QWWePR8Cb7DvG0VN/TtA==", "license": "MIT", "dependencies": { "@mdx-js/mdx": "^3.0.0", @@ -4353,15 +4501,16 @@ } }, "node_modules/@docusaurus/utils": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-3.7.0.tgz", - "integrity": "sha512-e7zcB6TPnVzyUaHMJyLSArKa2AG3h9+4CfvKXKKWNx6hRs+p0a+u7HHTJBgo6KW2m+vqDnuIHK4X+bhmoghAFA==", + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-3.8.0.tgz", + "integrity": "sha512-2wvtG28ALCN/A1WCSLxPASFBFzXCnP0YKCAFIPcvEb6imNu1wg7ni/Svcp71b3Z2FaOFFIv4Hq+j4gD7gA0yfQ==", "license": "MIT", "dependencies": { - "@docusaurus/logger": "3.7.0", - "@docusaurus/types": "3.7.0", - "@docusaurus/utils-common": "3.7.0", + "@docusaurus/logger": "3.8.0", + "@docusaurus/types": "3.8.0", + "@docusaurus/utils-common": "3.8.0", "escape-string-regexp": "^4.0.0", + "execa": "5.1.1", "file-loader": "^6.2.0", "fs-extra": "^11.1.1", "github-slugger": "^1.5.0", @@ -4371,9 +4520,9 @@ "js-yaml": "^4.1.0", "lodash": "^4.17.21", "micromatch": "^4.0.5", + "p-queue": "^6.6.2", "prompts": "^2.4.2", "resolve-pathname": "^3.0.0", - "shelljs": "^0.8.5", "tslib": "^2.6.0", "url-loader": "^4.1.1", "utility-types": "^3.10.0", @@ -4384,12 +4533,12 @@ } }, "node_modules/@docusaurus/utils-common": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/utils-common/-/utils-common-3.7.0.tgz", - "integrity": "sha512-IZeyIfCfXy0Mevj6bWNg7DG7B8G+S6o6JVpddikZtWyxJguiQ7JYr0SIZ0qWd8pGNuMyVwriWmbWqMnK7Y5PwA==", + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/@docusaurus/utils-common/-/utils-common-3.8.0.tgz", + "integrity": "sha512-3TGF+wVTGgQ3pAc9+5jVchES4uXUAhAt9pwv7uws4mVOxL4alvU3ue/EZ+R4XuGk94pDy7CNXjRXpPjlfZXQfw==", "license": "MIT", "dependencies": { - "@docusaurus/types": "3.7.0", + "@docusaurus/types": "3.8.0", "tslib": "^2.6.0" }, "engines": { @@ -4397,14 +4546,14 @@ } }, "node_modules/@docusaurus/utils-validation": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-3.7.0.tgz", - "integrity": "sha512-w8eiKk8mRdN+bNfeZqC4nyFoxNyI1/VExMKAzD9tqpJfLLbsa46Wfn5wcKH761g9WkKh36RtFV49iL9lh1DYBA==", + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-3.8.0.tgz", + "integrity": "sha512-MrnEbkigr54HkdFeg8e4FKc4EF+E9dlVwsY3XQZsNkbv3MKZnbHQ5LsNJDIKDROFe8PBf5C4qCAg5TPBpsjrjg==", "license": "MIT", "dependencies": { - "@docusaurus/logger": "3.7.0", - "@docusaurus/utils": "3.7.0", - "@docusaurus/utils-common": "3.7.0", + "@docusaurus/logger": "3.8.0", + "@docusaurus/utils": "3.8.0", + "@docusaurus/utils-common": "3.8.0", "fs-extra": "^11.2.0", "joi": "^17.9.2", "js-yaml": "^4.1.0", @@ -4598,12 +4747,12 @@ } }, "node_modules/@mermaid-js/parser": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@mermaid-js/parser/-/parser-0.3.0.tgz", - "integrity": "sha512-HsvL6zgE5sUPGgkIDlmAWR1HTNHz2Iy11BAWPTa4Jjabkpguy4Ze2gzfLrg6pdRuBvFwgUYyxiaNqZwrEEXepA==", + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@mermaid-js/parser/-/parser-0.4.0.tgz", + "integrity": "sha512-wla8XOWvQAwuqy+gxiZqY+c7FokraOTHRWMsbB4AgRx9Sy7zKslNyejy7E+a77qHfey5GXw/ik3IXv/NHMJgaA==", "license": "MIT", "dependencies": { - "langium": "3.0.0" + "langium": "3.3.1" } }, "node_modules/@nodelib/fs.scandir": { @@ -5325,15 +5474,6 @@ "@types/ms": "*" } }, - "node_modules/@types/dompurify": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@types/dompurify/-/dompurify-3.0.5.tgz", - "integrity": "sha512-1Wg0g3BtQF7sSb27fJQAKck1HECM6zV1EB66j8JH9i3LCjYabJa0FSdiSgsD5K/RbrsR0SiraKacLB+T8ZVYAg==", - "license": "MIT", - "dependencies": { - "@types/trusted-types": "*" - } - }, "node_modules/@types/eslint": { "version": "9.6.1", "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz", @@ -5534,12 +5674,6 @@ "@types/node": "*" } }, - "node_modules/@types/parse-json": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz", - "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==", - "license": "MIT" - }, "node_modules/@types/prismjs": { "version": "1.26.5", "resolved": "https://registry.npmjs.org/@types/prismjs/-/prismjs-1.26.5.tgz", @@ -5664,7 +5798,8 @@ "version": "2.0.7", "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz", "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==", - "license": "MIT" + "license": "MIT", + "optional": true }, "node_modules/@types/unist": { "version": "3.0.3", @@ -6189,15 +6324,6 @@ "astring": "bin/astring" } }, - "node_modules/at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", - "license": "ISC", - "engines": { - "node": ">= 4.0.0" - } - }, "node_modules/autoprefixer": { "version": "10.4.20", "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.20.tgz", @@ -8423,28 +8549,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/del": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/del/-/del-6.1.1.tgz", - "integrity": "sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==", - "license": "MIT", - "dependencies": { - "globby": "^11.0.1", - "graceful-fs": "^4.2.4", - "is-glob": "^4.0.1", - "is-path-cwd": "^2.2.0", - "is-path-inside": "^3.0.2", - "p-map": "^4.0.0", - "rimraf": "^3.0.2", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/delaunator": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/delaunator/-/delaunator-5.0.1.tgz", @@ -8505,38 +8609,6 @@ "node": ">= 4.0.0" } }, - "node_modules/detect-port-alt": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/detect-port-alt/-/detect-port-alt-1.1.6.tgz", - "integrity": "sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q==", - "license": "MIT", - "dependencies": { - "address": "^1.0.1", - "debug": "^2.6.0" - }, - "bin": { - "detect": "bin/detect-port", - "detect-port": "bin/detect-port" - }, - "engines": { - "node": ">= 4.2.1" - } - }, - "node_modules/detect-port-alt/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/detect-port-alt/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "license": "MIT" - }, "node_modules/devlop": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", @@ -8625,10 +8697,13 @@ } }, "node_modules/dompurify": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.1.6.tgz", - "integrity": "sha512-cTOAhc36AalkjtBpfG6O8JimdTMWNXjiePT2xQH/ppBGi/4uIpmj8eKyIkMJErXWARyINV/sB38yf8JCLF5pbQ==", - "license": "(MPL-2.0 OR Apache-2.0)" + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.2.6.tgz", + "integrity": "sha512-/2GogDQlohXPZe6D6NOgQvXLPSYBqIWMnZ8zzOhn09REE4eyAzb+Hed3jhoM9OkuaJ8P6ZGTTVWQKAi8ieIzfQ==", + "license": "(MPL-2.0 OR Apache-2.0)", + "optionalDependencies": { + "@types/trusted-types": "^2.0.7" + } }, "node_modules/domutils": { "version": "3.1.0", @@ -9388,15 +9463,6 @@ "url": "https://opencollective.com/webpack" } }, - "node_modules/filesize": { - "version": "8.0.7", - "resolved": "https://registry.npmjs.org/filesize/-/filesize-8.0.7.tgz", - "integrity": "sha512-pjmC+bkIF8XI7fWaH8KxHcZL3DPybs1roSKP4rKDvy20tAWwIObE4+JIseG2byfGKhud5ZnM4YSGKBz7Sh0ndQ==", - "license": "BSD-3-Clause", - "engines": { - "node": ">= 0.4.0" - } - }, "node_modules/fill-range": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", @@ -9503,134 +9569,6 @@ } } }, - "node_modules/fork-ts-checker-webpack-plugin": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-6.5.3.tgz", - "integrity": "sha512-SbH/l9ikmMWycd5puHJKTkZJKddF4iRLyW3DeZ08HTI7NGyLS38MXd/KGgeWumQO7YNQbW2u/NtPT2YowbPaGQ==", - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.8.3", - "@types/json-schema": "^7.0.5", - "chalk": "^4.1.0", - "chokidar": "^3.4.2", - "cosmiconfig": "^6.0.0", - "deepmerge": "^4.2.2", - "fs-extra": "^9.0.0", - "glob": "^7.1.6", - "memfs": "^3.1.2", - "minimatch": "^3.0.4", - "schema-utils": "2.7.0", - "semver": "^7.3.2", - "tapable": "^1.0.0" - }, - "engines": { - "node": ">=10", - "yarn": ">=1.0.0" - }, - "peerDependencies": { - "eslint": ">= 6", - "typescript": ">= 2.7", - "vue-template-compiler": "*", - "webpack": ">= 4" - }, - "peerDependenciesMeta": { - "eslint": { - "optional": true - }, - "vue-template-compiler": { - "optional": true - } - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "license": "MIT", - "peerDependencies": { - "ajv": "^6.9.1" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/cosmiconfig": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-6.0.0.tgz", - "integrity": "sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==", - "license": "MIT", - "dependencies": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.1.0", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.7.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "license": "MIT", - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "license": "MIT" - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/schema-utils": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz", - "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==", - "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.4", - "ajv": "^6.12.2", - "ajv-keywords": "^3.4.1" - }, - "engines": { - "node": ">= 8.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" - } - }, - "node_modules/fork-ts-checker-webpack-plugin/node_modules/tapable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", - "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, "node_modules/form-data-encoder": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-2.1.4.tgz", @@ -9843,44 +9781,6 @@ "node": ">=10" } }, - "node_modules/global-modules": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", - "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", - "license": "MIT", - "dependencies": { - "global-prefix": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/global-prefix": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", - "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", - "license": "MIT", - "dependencies": { - "ini": "^1.3.5", - "kind-of": "^6.0.2", - "which": "^1.3.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/global-prefix/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, "node_modules/globals": { "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", @@ -10656,13 +10556,10 @@ } }, "node_modules/image-size": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/image-size/-/image-size-1.1.1.tgz", - "integrity": "sha512-541xKlUw6jr/6gGuk92F+mYM5zaFAc5ahphvkqvNe2bQ6gVBkd6bfrmVJ2t4KDAfikAYZyIqTnktX3i6/aQDrQ==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-2.0.2.tgz", + "integrity": "sha512-IRqXKlaXwgSMAMtpNzZa1ZAe8m+Sa1770Dhk8VkSsP9LS+iHD62Zd8FQKs8fbPiagBE7BzoFX23cxFnwshpV6w==", "license": "MIT", - "dependencies": { - "queue": "6.0.2" - }, "bin": { "image-size": "bin/image-size.js" }, @@ -10670,16 +10567,6 @@ "node": ">=16.x" } }, - "node_modules/immer": { - "version": "9.0.21", - "resolved": "https://registry.npmjs.org/immer/-/immer-9.0.21.tgz", - "integrity": "sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA==", - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/immer" - } - }, "node_modules/import-fresh": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", @@ -10770,15 +10657,6 @@ "node": ">=12" } }, - "node_modules/interpret": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", - "license": "MIT", - "engines": { - "node": ">= 0.10" - } - }, "node_modules/invariant": { "version": "2.2.4", "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", @@ -10986,15 +10864,6 @@ "node": ">=0.10.0" } }, - "node_modules/is-path-cwd": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", - "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, "node_modules/is-path-inside": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", @@ -11037,15 +10906,6 @@ "node": ">=0.10.0" } }, - "node_modules/is-root": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-root/-/is-root-2.1.0.tgz", - "integrity": "sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, "node_modules/is-stream": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", @@ -11311,9 +11171,9 @@ "license": "MIT" }, "node_modules/langium": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/langium/-/langium-3.0.0.tgz", - "integrity": "sha512-+Ez9EoiByeoTu/2BXmEaZ06iPNXM6thWJp02KfBO/raSMyCJ4jw7AkWWa+zBCTm0+Tw1Fj9FOxdqSskyN5nAwg==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/langium/-/langium-3.3.1.tgz", + "integrity": "sha512-QJv/h939gDpvT+9SiLVlY7tZC3xB2qK57v0J04Sh9wpMb6MP1q8gB21L3WIo8T5P1MSMg3Ep14L7KkDCFG3y4w==", "license": "MIT", "dependencies": { "chevrotain": "~11.0.3", @@ -11555,9 +11415,9 @@ } }, "node_modules/marked": { - "version": "13.0.3", - "resolved": "https://registry.npmjs.org/marked/-/marked-13.0.3.tgz", - "integrity": "sha512-rqRix3/TWzE9rIoFGIn8JmsVfhiuC8VIQ8IdX5TfzmeBucdY05/0UlzKaw0eVtpcN/OdVFpBk7CjKGo9iHJ/zA==", + "version": "15.0.12", + "resolved": "https://registry.npmjs.org/marked/-/marked-15.0.12.tgz", + "integrity": "sha512-8dD6FusOQSrpv9Z1rdNMdlSgQOIP880DHqnohobOmYLElGEqAL/JvxvuxZO16r4HtjTlfPRDC1hbvxC9dPN2nA==", "license": "MIT", "bin": { "marked": "bin/marked.js" @@ -12019,32 +11879,31 @@ } }, "node_modules/mermaid": { - "version": "11.4.0", - "resolved": "https://registry.npmjs.org/mermaid/-/mermaid-11.4.0.tgz", - "integrity": "sha512-mxCfEYvADJqOiHfGpJXLs4/fAjHz448rH0pfY5fAoxiz70rQiDSzUUy4dNET2T08i46IVpjohPd6WWbzmRHiPA==", + "version": "11.6.0", + "resolved": "https://registry.npmjs.org/mermaid/-/mermaid-11.6.0.tgz", + "integrity": "sha512-PE8hGUy1LDlWIHWBP05SFdqUHGmRcCcK4IzpOKPE35eOw+G9zZgcnMpyunJVUEOgb//KBORPjysKndw8bFLuRg==", "license": "MIT", "dependencies": { - "@braintree/sanitize-url": "^7.0.1", - "@iconify/utils": "^2.1.32", - "@mermaid-js/parser": "^0.3.0", + "@braintree/sanitize-url": "^7.0.4", + "@iconify/utils": "^2.1.33", + "@mermaid-js/parser": "^0.4.0", "@types/d3": "^7.4.3", - "@types/dompurify": "^3.0.5", - "cytoscape": "^3.29.2", + "cytoscape": "^3.29.3", "cytoscape-cose-bilkent": "^4.1.0", "cytoscape-fcose": "^2.2.0", "d3": "^7.9.0", "d3-sankey": "^0.12.3", "dagre-d3-es": "7.0.11", - "dayjs": "^1.11.10", - "dompurify": "^3.0.11 <3.1.7", + "dayjs": "^1.11.13", + "dompurify": "^3.2.4", "katex": "^0.16.9", "khroma": "^2.1.0", "lodash-es": "^4.17.21", - "marked": "^13.0.2", + "marked": "^15.0.7", "roughjs": "^4.6.6", - "stylis": "^4.3.1", + "stylis": "^4.3.6", "ts-dedent": "^2.2.0", - "uuid": "^9.0.1" + "uuid": "^11.1.0" } }, "node_modules/methods": { @@ -14332,6 +14191,15 @@ "node": ">=12.20" } }, + "node_modules/p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, "node_modules/p-limit": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-4.0.0.tgz", @@ -14377,6 +14245,22 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/p-queue": { + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-6.6.2.tgz", + "integrity": "sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==", + "license": "MIT", + "dependencies": { + "eventemitter3": "^4.0.4", + "p-timeout": "^3.2.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/p-retry": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", @@ -14390,13 +14274,16 @@ "node": ">=8" } }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "node_modules/p-timeout": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", + "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", "license": "MIT", + "dependencies": { + "p-finally": "^1.0.0" + }, "engines": { - "node": ">=6" + "node": ">=8" } }, "node_modules/package-json": { @@ -14652,79 +14539,6 @@ "pathe": "^1.1.2" } }, - "node_modules/pkg-up": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-3.1.0.tgz", - "integrity": "sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==", - "license": "MIT", - "dependencies": { - "find-up": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-up/node_modules/find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "license": "MIT", - "dependencies": { - "locate-path": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-up/node_modules/locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "license": "MIT", - "dependencies": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-up/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "license": "MIT", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pkg-up/node_modules/p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "license": "MIT", - "dependencies": { - "p-limit": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-up/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, "node_modules/points-on-curve": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/points-on-curve/-/points-on-curve-0.2.0.tgz", @@ -16354,15 +16168,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/queue": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/queue/-/queue-6.0.2.tgz", - "integrity": "sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==", - "license": "MIT", - "dependencies": { - "inherits": "~2.0.3" - } - }, "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -16485,132 +16290,6 @@ "node": ">=0.10.0" } }, - "node_modules/react-dev-utils": { - "version": "12.0.1", - "resolved": "https://registry.npmjs.org/react-dev-utils/-/react-dev-utils-12.0.1.tgz", - "integrity": "sha512-84Ivxmr17KjUupyqzFode6xKhjwuEJDROWKJy/BthkL7Wn6NJ8h4WE6k/exAv6ImS+0oZLRRW5j/aINMHyeGeQ==", - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.16.0", - "address": "^1.1.2", - "browserslist": "^4.18.1", - "chalk": "^4.1.2", - "cross-spawn": "^7.0.3", - "detect-port-alt": "^1.1.6", - "escape-string-regexp": "^4.0.0", - "filesize": "^8.0.6", - "find-up": "^5.0.0", - "fork-ts-checker-webpack-plugin": "^6.5.0", - "global-modules": "^2.0.0", - "globby": "^11.0.4", - "gzip-size": "^6.0.0", - "immer": "^9.0.7", - "is-root": "^2.1.0", - "loader-utils": "^3.2.0", - "open": "^8.4.0", - "pkg-up": "^3.1.0", - "prompts": "^2.4.2", - "react-error-overlay": "^6.0.11", - "recursive-readdir": "^2.2.2", - "shell-quote": "^1.7.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/react-dev-utils/node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "license": "MIT", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/react-dev-utils/node_modules/loader-utils": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.3.1.tgz", - "integrity": "sha512-FMJTLMXfCLMLfJxcX9PFqX5qD88Z5MRGaZCVzfuqeZSPsyiBzs+pahDQjbIWz2QIzPZz0NX9Zy4FX3lmK6YHIg==", - "license": "MIT", - "engines": { - "node": ">= 12.13.0" - } - }, - "node_modules/react-dev-utils/node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "license": "MIT", - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/react-dev-utils/node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "license": "MIT", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/react-dev-utils/node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "license": "MIT", - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/react-dev-utils/node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/react-dev-utils/node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/react-dom": { "version": "18.3.1", "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", @@ -16624,12 +16303,6 @@ "react": "^18.3.1" } }, - "node_modules/react-error-overlay": { - "version": "6.0.11", - "resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.11.tgz", - "integrity": "sha512-/6UZ2qgEyH2aqzYZgQPxEnz33NJ2gNsnHA2o5+o4wW9bLM/JYQitNP9xPhsXwC08hMMovfGe/8retsdDsczPRg==", - "license": "MIT" - }, "node_modules/react-fast-compare": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.2.tgz", @@ -16660,15 +16333,15 @@ "license": "MIT" }, "node_modules/react-json-view-lite": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/react-json-view-lite/-/react-json-view-lite-1.5.0.tgz", - "integrity": "sha512-nWqA1E4jKPklL2jvHWs6s+7Na0qNgw9HCP6xehdQJeg6nPBTFZgGwyko9Q0oj+jQWKTTVRS30u0toM5wiuL3iw==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/react-json-view-lite/-/react-json-view-lite-2.4.1.tgz", + "integrity": "sha512-fwFYknRIBxjbFm0kBDrzgBy1xa5tDg2LyXXBepC5f1b+MY3BUClMCsvanMPn089JbV1Eg3nZcrp0VCuH43aXnA==", "license": "MIT", "engines": { - "node": ">=14" + "node": ">=18" }, "peerDependencies": { - "react": "^16.13.1 || ^17.0.0 || ^18.0.0" + "react": "^18.0.0 || ^19.0.0" } }, "node_modules/react-loadable": { @@ -16777,23 +16450,6 @@ "node": ">=8.10.0" } }, - "node_modules/reading-time": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/reading-time/-/reading-time-1.5.0.tgz", - "integrity": "sha512-onYyVhBNr4CmAxFsKS7bz+uTLRakypIe4R+5A824vBSkQy/hB3fZepoVEf8OVAxzLvK+H/jm9TzpI3ETSm64Kg==", - "license": "MIT" - }, - "node_modules/rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==", - "dependencies": { - "resolve": "^1.1.6" - }, - "engines": { - "node": ">= 0.10" - } - }, "node_modules/recma-build-jsx": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/recma-build-jsx/-/recma-build-jsx-1.0.0.tgz", @@ -16858,18 +16514,6 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/recursive-readdir": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.3.tgz", - "integrity": "sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==", - "license": "MIT", - "dependencies": { - "minimatch": "^3.0.5" - }, - "engines": { - "node": ">=6.0.0" - } - }, "node_modules/regenerate": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", @@ -17458,6 +17102,12 @@ "loose-envify": "^1.1.0" } }, + "node_modules/schema-dts": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/schema-dts/-/schema-dts-1.1.5.tgz", + "integrity": "sha512-RJr9EaCmsLzBX2NDiO5Z3ux2BVosNZN5jo0gWgsyKvxKIUL5R3swNvoorulAeL9kLB0iTSX7V6aokhla2m7xbg==", + "license": "Apache-2.0" + }, "node_modules/schema-utils": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", @@ -17815,23 +17465,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/shelljs": { - "version": "0.8.5", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz", - "integrity": "sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==", - "license": "BSD-3-Clause", - "dependencies": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" - }, - "bin": { - "shjs": "bin/shjs" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/side-channel": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", @@ -18231,9 +17864,9 @@ } }, "node_modules/stylis": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.3.4.tgz", - "integrity": "sha512-osIBl6BGUmSfDkyH2mB7EFvCJntXDrLhKjHTRj/rK6xLH0yuPrHULDRQzKokSOD4VoorhtKpfcfW1GAntu8now==", + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.3.6.tgz", + "integrity": "sha512-yQ3rwFWRfwNUY7H5vpU0wfdkNSnvnJinhF9830Swlaxl03zsOjCfmX0ugac+3LtK0lYSgwL/KXc8oYL3mG4YFQ==", "license": "MIT" }, "node_modules/supports-color": { @@ -18445,12 +18078,6 @@ "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "license": "MIT" }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "license": "MIT" - }, "node_modules/thunky": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", @@ -18475,6 +18102,15 @@ "integrity": "sha512-WiCJLEECkO18gwqIp6+hJg0//p23HXp4S+gGtAKu3mI2F2/sXC4FvHvXvB0zJVVaTPhx1/tOwdbRsa1sOBIKqQ==", "license": "MIT" }, + "node_modules/tinypool": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.0.2.tgz", + "integrity": "sha512-al6n+QEANGFOMf/dmUMsuS5/r9B06uwlyNjZZql/zv8J7ybHCgoihBNORZCY2mzUuAnomQa2JdhyHKzZxPCrFA==", + "license": "MIT", + "engines": { + "node": "^18.0.0 || >=20.0.0" + } + }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -18600,6 +18236,7 @@ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.3.tgz", "integrity": "sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==", "license": "Apache-2.0", + "optional": true, "peer": true, "bin": { "tsc": "bin/tsc", @@ -19044,16 +18681,16 @@ } }, "node_modules/uuid": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", - "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-11.1.0.tgz", + "integrity": "sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==", "funding": [ "https://github.com/sponsors/broofa", "https://github.com/sponsors/ctavan" ], "license": "MIT", "bin": { - "uuid": "dist/bin/uuid" + "uuid": "dist/esm/bin/uuid" } }, "node_modules/value-equal": { @@ -19757,15 +19394,6 @@ "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", "license": "ISC" }, - "node_modules/yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "license": "ISC", - "engines": { - "node": ">= 6" - } - }, "node_modules/yocto-queue": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.1.1.tgz", diff --git a/docs/package.json b/docs/package.json index 0886691e8..d44749548 100644 --- a/docs/package.json +++ b/docs/package.json @@ -15,9 +15,9 @@ }, "dependencies": { "@cmfcmf/docusaurus-search-local": "1.2.0", - "@docusaurus/core": "3.7.0", - "@docusaurus/preset-classic": "3.7.0", - "@docusaurus/theme-mermaid": "3.7.0", + "@docusaurus/core": "3.8.0", + "@docusaurus/preset-classic": "3.8.0", + "@docusaurus/theme-mermaid": "3.8.0", "@mdx-js/react": "3.1.0", "asciinema-player": "3.10.0", "clsx": "2.1.1", @@ -26,12 +26,12 @@ "react-dom": "18.3.1" }, "devDependencies": { - "@docusaurus/module-type-aliases": "3.7.0", - "@docusaurus/types": "3.7.0" + "@docusaurus/module-type-aliases": "3.8.0", + "@docusaurus/types": "3.8.0" }, "overrides": { "@cmfcmf/docusaurus-search-local": { - "@docusaurus/core": "3.7.0", + "@docusaurus/core": "3.8.0", "cheerio": "1.0.0-rc.12" } }, From 377dd6cbcd3228bcae3bed1d7c97e1ea75387f53 Mon Sep 17 00:00:00 2001 From: edgelessci <71088502+edgelessci@users.noreply.github.com> Date: Fri, 6 Jun 2025 14:18:45 +0200 Subject: [PATCH 302/311] image: update measurements and image version (#3856) Co-authored-by: edgelessci --- .../measurements/measurements_enterprise.go | 16 ++++++++-------- internal/config/image_enterprise.go | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/internal/attestation/measurements/measurements_enterprise.go b/internal/attestation/measurements/measurements_enterprise.go index 20b05a159..a728e12b9 100644 --- a/internal/attestation/measurements/measurements_enterprise.go +++ b/internal/attestation/measurements/measurements_enterprise.go @@ -19,14 +19,14 @@ package measurements // revive:disable:var-naming var ( - aws_AWSNitroTPM = M{0: {Expected: []byte{0x73, 0x7f, 0x76, 0x7a, 0x12, 0xf5, 0x4e, 0x70, 0xee, 0xcb, 0xc8, 0x68, 0x40, 0x11, 0x32, 0x3a, 0xe2, 0xfe, 0x2d, 0xd9, 0xf9, 0x07, 0x85, 0x57, 0x79, 0x69, 0xd7, 0xa2, 0x01, 0x3e, 0x8c, 0x12}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xee, 0xcc, 0xee, 0x28, 0x3f, 0x04, 0xac, 0xd9, 0x80, 0x6b, 0xc8, 0x26, 0x39, 0xb2, 0x41, 0xc5, 0xe2, 0x58, 0xfc, 0xc8, 0x6f, 0x33, 0xbb, 0x07, 0x93, 0x5a, 0x70, 0x60, 0x23, 0xd8, 0x3f, 0x4f}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x76, 0x08, 0x69, 0x6e, 0xde, 0x02, 0x1c, 0x85, 0xfe, 0xe6, 0x92, 0x50, 0x8e, 0x8b, 0xde, 0x1f, 0xb6, 0x6a, 0x4a, 0x1b, 0x8e, 0x0b, 0x93, 0x44, 0x80, 0x90, 0x1f, 0x9f, 0xd1, 0x9e, 0x52, 0x25}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xb1, 0x5c, 0x35, 0x43, 0x4d, 0x64, 0xfe, 0xef, 0x0e, 0xb3, 0x00, 0xf6, 0x49, 0x14, 0x45, 0x44, 0x71, 0xb7, 0x7b, 0x8b, 0xdd, 0x48, 0xf2, 0x01, 0x1a, 0x12, 0xe8, 0x23, 0x4b, 0xfb, 0x0f, 0xd6}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - aws_AWSSEVSNP = M{0: {Expected: []byte{0xd6, 0xdf, 0x85, 0x53, 0x58, 0xf5, 0xb1, 0x0f, 0x06, 0xf0, 0xfa, 0xb3, 0xf4, 0x08, 0xad, 0x26, 0xcd, 0x16, 0x5a, 0x29, 0x49, 0xba, 0xd6, 0x9e, 0x2c, 0xc7, 0x56, 0x92, 0x52, 0x9e, 0x66, 0x2a}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xee, 0x28, 0x39, 0xe8, 0x9c, 0x40, 0xb1, 0xd5, 0xd9, 0x99, 0x6e, 0xbc, 0x2d, 0xb7, 0x10, 0x34, 0x69, 0xd9, 0x23, 0xfd, 0xe5, 0xef, 0xe0, 0x29, 0xc3, 0x95, 0x7a, 0xa7, 0x3c, 0xee, 0x92, 0x02}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x21, 0x6a, 0x24, 0x8c, 0x11, 0xb4, 0xaa, 0x31, 0xe1, 0x3b, 0xba, 0xfd, 0x38, 0xca, 0x28, 0x7d, 0x33, 0x35, 0x7a, 0x2b, 0x11, 0xb7, 0xf8, 0x12, 0x4a, 0x3d, 0x00, 0x95, 0x95, 0x5f, 0xad, 0xa5}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xda, 0x3a, 0xcf, 0xc7, 0xa8, 0x21, 0xf7, 0xee, 0xb5, 0x3f, 0x05, 0xd7, 0x2c, 0xbb, 0x4b, 0x3b, 0x62, 0x2f, 0x10, 0xce, 0x7a, 0xd7, 0x83, 0x8a, 0x58, 0x79, 0xc3, 0xb0, 0xc2, 0x0f, 0x4a, 0xe6}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - azure_AzureSEVSNP = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x6c, 0x2f, 0x52, 0xb7, 0x44, 0x39, 0x13, 0xf1, 0x53, 0x56, 0x82, 0xfb, 0xf3, 0xee, 0x73, 0xfd, 0xcd, 0x6d, 0x02, 0x84, 0xbd, 0xb4, 0x2c, 0xd3, 0x65, 0xd7, 0x64, 0x44, 0x77, 0x69, 0x9e, 0x9d}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xd9, 0x0a, 0x7c, 0xbb, 0x78, 0x52, 0x32, 0xbd, 0x1f, 0x28, 0x91, 0x06, 0x49, 0xe8, 0x71, 0xef, 0xb8, 0xc7, 0xc9, 0x5c, 0x4d, 0xa3, 0xfd, 0x78, 0x84, 0xbc, 0x62, 0x2d, 0x4c, 0xe7, 0xea, 0x58}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x3b, 0x9a, 0xd8, 0x09, 0x19, 0x7b, 0x77, 0x1c, 0xbe, 0xb4, 0xd0, 0x29, 0xba, 0x40, 0xbf, 0x55, 0x96, 0x1b, 0x0f, 0xfc, 0xc9, 0x87, 0x44, 0x46, 0x64, 0x95, 0x74, 0x07, 0x2f, 0xef, 0x02, 0x3a}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - azure_AzureTDX = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x35, 0x48, 0x97, 0xbb, 0xc4, 0x86, 0x2a, 0x19, 0x69, 0x98, 0x1b, 0xf4, 0xd7, 0x1b, 0xff, 0xfd, 0x13, 0x80, 0xc4, 0xfc, 0xe9, 0x11, 0xc0, 0x24, 0xda, 0xc1, 0x81, 0x42, 0x74, 0x63, 0xc3, 0x4e}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x06, 0x8a, 0xbb, 0xf8, 0x78, 0xb1, 0xe0, 0xed, 0x55, 0xce, 0x81, 0x63, 0x63, 0x8d, 0xc0, 0xe3, 0x08, 0xff, 0xe8, 0x39, 0x58, 0x9e, 0x8a, 0xa7, 0x85, 0x75, 0x6f, 0xfe, 0xed, 0x1a, 0xb5, 0xdb}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x12, 0xd4, 0xfa, 0x1e, 0xe5, 0x99, 0x15, 0xe8, 0x69, 0xb4, 0xf6, 0xdb, 0x0a, 0xdd, 0xd2, 0xe1, 0xb6, 0x54, 0x4f, 0x78, 0x5b, 0x7e, 0x93, 0x40, 0x5f, 0x65, 0x3f, 0x75, 0x71, 0x55, 0x08, 0xb5}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + aws_AWSNitroTPM = M{0: {Expected: []byte{0x73, 0x7f, 0x76, 0x7a, 0x12, 0xf5, 0x4e, 0x70, 0xee, 0xcb, 0xc8, 0x68, 0x40, 0x11, 0x32, 0x3a, 0xe2, 0xfe, 0x2d, 0xd9, 0xf9, 0x07, 0x85, 0x57, 0x79, 0x69, 0xd7, 0xa2, 0x01, 0x3e, 0x8c, 0x12}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xdc, 0xc7, 0x37, 0xc2, 0x6b, 0x53, 0x76, 0x44, 0x2f, 0x64, 0xda, 0xc3, 0xe8, 0x02, 0xf7, 0x60, 0xc8, 0x87, 0x89, 0x82, 0x4c, 0x6a, 0x61, 0x4f, 0x37, 0x10, 0x2b, 0x11, 0x91, 0x19, 0x25, 0x29}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xf2, 0x3a, 0x7e, 0x61, 0xa3, 0xc8, 0xa5, 0x3c, 0xaa, 0xc5, 0x7f, 0x79, 0x24, 0xb8, 0x8d, 0x24, 0xc8, 0x41, 0x0b, 0x00, 0x96, 0xb3, 0x33, 0x55, 0xaa, 0x74, 0x0f, 0xb4, 0x53, 0x9d, 0xff, 0xad}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x9b, 0x05, 0xb0, 0xe4, 0xcd, 0x03, 0xf7, 0x53, 0x83, 0x38, 0x8a, 0xdc, 0xf8, 0x1a, 0xc9, 0xa6, 0x28, 0x5e, 0x36, 0xe5, 0x70, 0x6a, 0x48, 0x57, 0x99, 0x84, 0xf3, 0xd4, 0x1d, 0xf1, 0x28, 0xa7}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + aws_AWSSEVSNP = M{0: {Expected: []byte{0xd6, 0xdf, 0x85, 0x53, 0x58, 0xf5, 0xb1, 0x0f, 0x06, 0xf0, 0xfa, 0xb3, 0xf4, 0x08, 0xad, 0x26, 0xcd, 0x16, 0x5a, 0x29, 0x49, 0xba, 0xd6, 0x9e, 0x2c, 0xc7, 0x56, 0x92, 0x52, 0x9e, 0x66, 0x2a}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x64, 0xa3, 0x2f, 0x3a, 0xa6, 0xc0, 0x3c, 0x8d, 0x2b, 0x96, 0x6a, 0xd7, 0x26, 0x36, 0xe1, 0x6e, 0xfc, 0x23, 0xe3, 0xa7, 0xc1, 0xab, 0xfb, 0xb9, 0x0c, 0x63, 0xa6, 0x69, 0xc2, 0x96, 0x94, 0x65}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x25, 0x4a, 0xe1, 0x76, 0x75, 0x3f, 0xc2, 0x66, 0x84, 0xc9, 0x73, 0x8e, 0x48, 0x26, 0xe0, 0xe2, 0x15, 0x5e, 0x8c, 0x65, 0xfb, 0x4b, 0x18, 0xbc, 0x1c, 0x61, 0x40, 0x11, 0xf6, 0x48, 0x5d, 0xef}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x75, 0xb8, 0x02, 0xaf, 0xb2, 0x6b, 0x1e, 0xae, 0xeb, 0xff, 0x37, 0x95, 0x44, 0x49, 0x42, 0x37, 0x0e, 0x69, 0x10, 0x36, 0x39, 0xf9, 0xfd, 0xc6, 0xcc, 0x4d, 0x63, 0xd6, 0x95, 0x4f, 0xf6, 0xfb}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + azure_AzureSEVSNP = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xd9, 0xc5, 0xe4, 0x35, 0xcd, 0x85, 0xc7, 0x81, 0x8c, 0xcf, 0xa9, 0xa2, 0x05, 0x12, 0x9f, 0xc4, 0xfa, 0x8d, 0x5f, 0xd3, 0x68, 0x74, 0xe6, 0x5a, 0x31, 0x76, 0xd6, 0x7b, 0x22, 0x56, 0xb0, 0x27}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x25, 0x46, 0x0d, 0x4b, 0x32, 0xf8, 0x31, 0xc5, 0xd9, 0xcf, 0x08, 0x6a, 0xbe, 0xd2, 0xb7, 0x76, 0xc3, 0xbf, 0x63, 0xbc, 0xb9, 0xb9, 0x03, 0x28, 0xd0, 0x2c, 0x8a, 0x85, 0x88, 0x9b, 0x7d, 0x33}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x2c, 0x28, 0x7d, 0xe6, 0xb2, 0xf6, 0x1c, 0x45, 0x9a, 0x0a, 0x02, 0xd6, 0x29, 0x18, 0x88, 0x25, 0x2e, 0xfc, 0x5f, 0xea, 0x0e, 0x9b, 0x27, 0x64, 0xcd, 0x63, 0xe3, 0xa2, 0x81, 0x76, 0x98, 0x30}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + azure_AzureTDX = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x2b, 0xd3, 0x1a, 0x5d, 0xe3, 0xf5, 0x47, 0x0d, 0xc2, 0xcc, 0xcf, 0xaa, 0x27, 0x40, 0x2e, 0x31, 0x25, 0x15, 0x8d, 0x10, 0xfa, 0x6c, 0xc3, 0x26, 0x4c, 0x2b, 0x77, 0xe8, 0x9d, 0xbf, 0x79, 0x9b}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xdc, 0xe9, 0x7c, 0x3f, 0x31, 0x71, 0xc2, 0x05, 0x07, 0xf7, 0x81, 0x62, 0xa5, 0xfb, 0xe8, 0xfe, 0x6a, 0x90, 0x5b, 0x91, 0xbd, 0x01, 0x5c, 0x50, 0xe5, 0x7b, 0xbd, 0x88, 0xec, 0x27, 0x09, 0x46}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xf2, 0x78, 0xf0, 0x30, 0x78, 0xed, 0x13, 0x78, 0x7b, 0xe9, 0x53, 0x26, 0x19, 0xe1, 0xcc, 0x88, 0xa8, 0xdb, 0x19, 0x68, 0xe2, 0xf8, 0xc9, 0xfb, 0x2d, 0xc0, 0xe1, 0x27, 0xa8, 0x77, 0x8a, 0xba}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} azure_AzureTrustedLaunch M - gcp_GCPSEVES = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x20, 0x2a, 0xdb, 0x60, 0xd8, 0x2c, 0x3a, 0x6b, 0x9d, 0xb4, 0x25, 0x05, 0xba, 0x2e, 0xc6, 0xce, 0x2a, 0x8f, 0xbd, 0x8d, 0xa2, 0xb3, 0x89, 0x7f, 0xa2, 0x6b, 0x54, 0xa7, 0xff, 0x10, 0xe5, 0x00}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x71, 0x32, 0xd9, 0xc0, 0xc3, 0x78, 0x11, 0xd3, 0x62, 0x40, 0x9e, 0x51, 0x6e, 0xc9, 0xe4, 0x29, 0x8c, 0xa5, 0x1e, 0x8a, 0x1b, 0x45, 0xee, 0xb1, 0xaa, 0x7a, 0xe1, 0x2e, 0x42, 0xcd, 0x56, 0xdc}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x6b, 0x4c, 0x8f, 0x10, 0xf5, 0x93, 0x66, 0x8c, 0x9a, 0x58, 0x66, 0xee, 0x07, 0x9a, 0x52, 0x38, 0x31, 0x20, 0x19, 0x3b, 0x37, 0x8a, 0xc0, 0xba, 0x92, 0x01, 0xd5, 0x72, 0x89, 0x94, 0x74, 0x7b}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - gcp_GCPSEVSNP = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xb2, 0x48, 0x68, 0x16, 0x98, 0x13, 0xb0, 0x1a, 0xf9, 0xf5, 0x4e, 0xf3, 0xd5, 0xd7, 0xdc, 0x33, 0xbf, 0xcd, 0x08, 0xe8, 0xce, 0xec, 0xa8, 0xd5, 0x31, 0xe9, 0x04, 0xcb, 0x8e, 0x62, 0xe9, 0x69}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x50, 0xfb, 0xb0, 0xcd, 0x2b, 0x7d, 0x8b, 0x88, 0x44, 0x9d, 0x6d, 0xb0, 0xdc, 0xad, 0xcf, 0xa3, 0x39, 0x44, 0x06, 0x94, 0xe0, 0xdc, 0xd4, 0x95, 0x1b, 0x93, 0xb9, 0x1d, 0xeb, 0xec, 0x5e, 0x1d}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x86, 0xc6, 0x08, 0xf6, 0x09, 0x57, 0x5c, 0xc2, 0x7c, 0x3b, 0x90, 0x9e, 0xce, 0x0e, 0xff, 0xdd, 0xbb, 0xae, 0x2b, 0xc6, 0x0d, 0x16, 0x10, 0x15, 0xb9, 0x46, 0x6f, 0x94, 0xff, 0x45, 0x2d, 0xe3}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - openstack_QEMUVTPM = M{4: {Expected: []byte{0x0f, 0x6d, 0x40, 0x85, 0x02, 0x5e, 0x34, 0x4c, 0x6e, 0x41, 0xcd, 0x0f, 0xb9, 0x39, 0xb2, 0xea, 0x14, 0x48, 0xd4, 0xd2, 0x3a, 0x4b, 0x93, 0xb3, 0xe3, 0x8b, 0xcc, 0xc8, 0xdf, 0xca, 0x72, 0x20}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x21, 0xa1, 0x59, 0x89, 0xc8, 0xa2, 0x3b, 0x6a, 0x52, 0x96, 0x3a, 0x13, 0x9d, 0x41, 0xa6, 0x2c, 0xe6, 0x72, 0xaf, 0xee, 0x80, 0x77, 0x02, 0x8f, 0x50, 0xbf, 0x8b, 0x64, 0x0b, 0xc4, 0x1c, 0x57}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xa4, 0xd0, 0x28, 0xaf, 0x39, 0xdb, 0xcb, 0x33, 0xa9, 0x9d, 0x8c, 0xeb, 0x2b, 0x07, 0x8b, 0x71, 0x90, 0x1b, 0x9a, 0x9a, 0xfb, 0xb8, 0x0f, 0xb0, 0x45, 0x9a, 0x05, 0x3c, 0x8d, 0x5e, 0xb2, 0x79}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + gcp_GCPSEVES = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x86, 0x12, 0x5c, 0x59, 0xe0, 0xe0, 0xf4, 0x5b, 0xb0, 0x47, 0xcb, 0xb6, 0x8e, 0x41, 0x3b, 0x83, 0x54, 0x02, 0x51, 0x11, 0x9d, 0x50, 0x1c, 0x27, 0x54, 0xef, 0x78, 0x5d, 0x29, 0x2a, 0xf0, 0xf0}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xac, 0x6f, 0xfd, 0x1c, 0xda, 0x12, 0xf3, 0x34, 0x45, 0x40, 0x08, 0x2d, 0x4b, 0x44, 0x3a, 0x43, 0x1a, 0x9f, 0x9b, 0x6e, 0x70, 0x94, 0x35, 0xea, 0x47, 0x86, 0x04, 0xe9, 0xdc, 0xa8, 0x09, 0xde}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x3f, 0xf5, 0x29, 0x49, 0x54, 0xd6, 0xca, 0x26, 0x77, 0xa5, 0xae, 0x9a, 0x34, 0x74, 0xaa, 0x26, 0x95, 0x61, 0x7e, 0xff, 0xe8, 0x74, 0x2c, 0x11, 0x60, 0xfe, 0xe6, 0xa1, 0xd6, 0x29, 0x43, 0xc4}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + gcp_GCPSEVSNP = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x10, 0x96, 0xb6, 0x79, 0x58, 0x15, 0x5d, 0xf4, 0xf9, 0xe7, 0x8a, 0x63, 0x2d, 0xd8, 0x3f, 0xb7, 0x6b, 0x82, 0x33, 0x58, 0xa2, 0x6a, 0x0e, 0xe4, 0x19, 0x13, 0x7a, 0x0f, 0x63, 0x79, 0x6d, 0x3a}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x7f, 0x36, 0x9b, 0x84, 0xe0, 0x5b, 0x78, 0x31, 0x91, 0xfd, 0xcd, 0x0c, 0xeb, 0x78, 0x1a, 0xad, 0xb2, 0xa9, 0x63, 0xde, 0xee, 0x5e, 0xa2, 0x91, 0xb5, 0xf0, 0x00, 0x94, 0xd9, 0x15, 0xd3, 0x2e}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xe7, 0x00, 0xec, 0x36, 0x1b, 0xbe, 0x81, 0xf4, 0x8a, 0xf5, 0xa0, 0x44, 0x90, 0x28, 0xa7, 0x0b, 0xd8, 0x01, 0x50, 0x31, 0xad, 0x7f, 0xc9, 0xea, 0x3c, 0x0c, 0x94, 0x33, 0x77, 0xac, 0x5b, 0xea}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + openstack_QEMUVTPM = M{4: {Expected: []byte{0x44, 0x6d, 0xf5, 0xe6, 0x7c, 0xff, 0x2d, 0x7a, 0x40, 0x6f, 0x7a, 0x24, 0x27, 0xaf, 0x65, 0xe7, 0xd6, 0x29, 0x20, 0xa7, 0x0b, 0x06, 0x28, 0xcb, 0xd1, 0xc1, 0x33, 0x53, 0x0f, 0xcf, 0x7d, 0x89}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xd3, 0x08, 0x34, 0x72, 0x24, 0x57, 0x0e, 0xb6, 0x8b, 0xb6, 0xd8, 0x73, 0xac, 0xa7, 0xa4, 0xe5, 0x25, 0xe9, 0x12, 0x97, 0x24, 0x75, 0x13, 0xf8, 0x72, 0x56, 0xa8, 0x65, 0x22, 0x18, 0xea, 0xfb}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xc8, 0x98, 0x8c, 0x3c, 0xef, 0x47, 0x93, 0xdc, 0x97, 0x36, 0x54, 0x4c, 0x97, 0xc5, 0x6c, 0xf1, 0xf1, 0x46, 0x80, 0x33, 0x27, 0x83, 0x82, 0x64, 0x06, 0x6f, 0x11, 0xcf, 0x4e, 0x40, 0xcf, 0x5d}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} qemu_QEMUTDX M - qemu_QEMUVTPM = M{4: {Expected: []byte{0xd5, 0x74, 0xd9, 0x7b, 0x82, 0xd1, 0xed, 0xcb, 0xc7, 0xb4, 0x97, 0xc0, 0xd0, 0x5e, 0xdf, 0x14, 0xbf, 0x7d, 0xa1, 0x58, 0x48, 0x39, 0x18, 0x95, 0x1c, 0xb3, 0x17, 0x38, 0x94, 0xf0, 0x50, 0x9a}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x8b, 0x00, 0xc5, 0xd3, 0x57, 0xeb, 0x63, 0x7a, 0x25, 0xc5, 0xd8, 0xee, 0x21, 0xe5, 0x31, 0x09, 0xd1, 0xf7, 0x19, 0xc4, 0x53, 0x1f, 0x15, 0xab, 0x80, 0x78, 0xa6, 0xa4, 0xa2, 0x94, 0x7c, 0x7d}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xcd, 0x85, 0xd0, 0x47, 0xe4, 0x58, 0xec, 0xa1, 0xba, 0xa9, 0xe0, 0x33, 0x57, 0x2b, 0x3b, 0x4b, 0xfb, 0x66, 0xaf, 0x56, 0xbf, 0xf9, 0x03, 0x1f, 0x18, 0xf5, 0xa7, 0x3b, 0x68, 0xff, 0x23, 0xfd}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + qemu_QEMUVTPM = M{4: {Expected: []byte{0xb4, 0x62, 0xed, 0xfc, 0xf2, 0x07, 0x5a, 0x9f, 0xaa, 0x56, 0x9a, 0x22, 0x41, 0x06, 0xa4, 0xda, 0xdc, 0x1f, 0x9d, 0x65, 0xe2, 0xa4, 0xc1, 0xd4, 0xbe, 0x52, 0xec, 0x3c, 0x86, 0x5e, 0xfe, 0x55}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xcd, 0x90, 0x17, 0x4b, 0xc8, 0xdc, 0x83, 0x87, 0xd9, 0x12, 0xa9, 0x4e, 0xef, 0x7b, 0xf9, 0x1a, 0xe4, 0x3b, 0x77, 0x59, 0xec, 0xdd, 0x7f, 0xaa, 0x06, 0xa7, 0xc9, 0xf1, 0xa5, 0x1e, 0xe2, 0x61}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x5f, 0xe4, 0xc9, 0xff, 0xf1, 0xd9, 0x95, 0x10, 0xce, 0x07, 0x6a, 0xa0, 0x02, 0x24, 0x01, 0xec, 0x55, 0x08, 0x1a, 0xdf, 0xd4, 0x50, 0x76, 0xec, 0x7a, 0x20, 0xa4, 0x69, 0x28, 0xc1, 0x55, 0xd0}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} ) diff --git a/internal/config/image_enterprise.go b/internal/config/image_enterprise.go index 9748f1001..0495b71c7 100644 --- a/internal/config/image_enterprise.go +++ b/internal/config/image_enterprise.go @@ -10,5 +10,5 @@ package config const ( // defaultImage is the default image to use. - defaultImage = "ref/main/stream/nightly/v2.24.0-pre.0.20250603090307-36241455d508" + defaultImage = "ref/main/stream/nightly/v2.24.0-pre.0.20250605130559-98067b6051de" ) From bd1e56adfafcf23e8742bb55982e850fca51beb5 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 12 Jun 2025 16:00:15 +0200 Subject: [PATCH 303/311] deps: update dependency numpy to v2.3.0 (#3859) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/actions/e2e_benchmark/evaluate/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/actions/e2e_benchmark/evaluate/requirements.txt b/.github/actions/e2e_benchmark/evaluate/requirements.txt index fa4ee448b..09136ce81 100644 --- a/.github/actions/e2e_benchmark/evaluate/requirements.txt +++ b/.github/actions/e2e_benchmark/evaluate/requirements.txt @@ -1,3 +1,3 @@ -numpy ==2.2.6 +numpy ==2.3.0 matplotlib ==3.10.3 Pillow ==11.2.1 \ No newline at end of file From 328b921c4031731b3a0ad6ab504c1aa9ce1464f2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Wei=C3=9Fe?= <66256922+daniel-weisse@users.noreply.github.com> Date: Fri, 13 Jun 2025 15:42:12 +0200 Subject: [PATCH 304/311] deps: bump Go to v1.24.4 (#3864) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * deps: bump Go to v1.24.4 * deps: bump github.com/cloudflare/circl to v1.6.1 --------- Signed-off-by: Daniel Weiße --- 3rdparty/gcp-guest-agent/Dockerfile | 2 +- MODULE.bazel | 2 +- go.mod | 4 ++-- go.sum | 4 ++-- go.work | 4 ++-- hack/tools/go.mod | 2 +- 6 files changed, 9 insertions(+), 9 deletions(-) diff --git a/3rdparty/gcp-guest-agent/Dockerfile b/3rdparty/gcp-guest-agent/Dockerfile index e55a85e58..d985595db 100644 --- a/3rdparty/gcp-guest-agent/Dockerfile +++ b/3rdparty/gcp-guest-agent/Dockerfile @@ -6,7 +6,7 @@ RUN apt-get update && apt-get install -y \ git # Install Go -ARG GO_VER=1.24.2 +ARG GO_VER=1.24.4 RUN wget -q https://go.dev/dl/go${GO_VER}.linux-amd64.tar.gz && \ tar -C /usr/local -xzf go${GO_VER}.linux-amd64.tar.gz && \ rm go${GO_VER}.linux-amd64.tar.gz diff --git a/MODULE.bazel b/MODULE.bazel index 568b3e2f4..901104bd6 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -23,7 +23,7 @@ go_sdk = use_extension("@io_bazel_rules_go//go:extensions.bzl", "go_sdk") go_sdk.download( name = "go_sdk", patches = ["//3rdparty/bazel/org_golang:go_tls_max_handshake_size.patch"], - version = "1.24.2", + version = "1.24.4", ) python = use_extension("@rules_python//python/extensions:python.bzl", "python") diff --git a/go.mod b/go.mod index 35a403e65..b5feb1f99 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,6 @@ module github.com/edgelesssys/constellation/v2 -go 1.24.2 +go 1.24.4 // TODO(daniel-weisse): revert after merging https://github.com/martinjungblut/go-cryptsetup/pull/16. replace github.com/martinjungblut/go-cryptsetup => github.com/daniel-weisse/go-cryptsetup v0.0.0-20230705150314-d8c07bd1723c @@ -194,7 +194,7 @@ require ( github.com/blang/semver/v4 v4.0.0 // indirect github.com/cespare/xxhash/v2 v2.3.0 // indirect github.com/chai2010/gettext-go v1.0.2 // indirect - github.com/cloudflare/circl v1.6.0 // indirect + github.com/cloudflare/circl v1.6.1 // indirect github.com/cncf/xds/go v0.0.0-20250121191232-2f005788dc42 // indirect github.com/containerd/containerd v1.7.27 // indirect github.com/containerd/errdefs v1.0.0 // indirect diff --git a/go.sum b/go.sum index 3aa43f0cd..cc614b2b2 100644 --- a/go.sum +++ b/go.sum @@ -202,8 +202,8 @@ github.com/chai2010/gettext-go v1.0.2 h1:1Lwwip6Q2QGsAdl/ZKPCwTe9fe0CjlUbqj5bFNS github.com/chai2010/gettext-go v1.0.2/go.mod h1:y+wnP2cHYaVj19NZhYKAwEMH2CI1gNHeQQ+5AjwawxA= github.com/chengxilo/virtualterm v1.0.4 h1:Z6IpERbRVlfB8WkOmtbHiDbBANU7cimRIof7mk9/PwM= github.com/chengxilo/virtualterm v1.0.4/go.mod h1:DyxxBZz/x1iqJjFxTFcr6/x+jSpqN0iwWCOK1q10rlY= -github.com/cloudflare/circl v1.6.0 h1:cr5JKic4HI+LkINy2lg3W2jF8sHCVTBncJr5gIIq7qk= -github.com/cloudflare/circl v1.6.0/go.mod h1:uddAzsPgqdMAYatqJ0lsjX1oECcQLIlRpzZh3pJrofs= +github.com/cloudflare/circl v1.6.1 h1:zqIqSPIndyBh1bjLVVDHMPpVKqp8Su/V+6MeDzzQBQ0= +github.com/cloudflare/circl v1.6.1/go.mod h1:uddAzsPgqdMAYatqJ0lsjX1oECcQLIlRpzZh3pJrofs= github.com/cncf/xds/go v0.0.0-20250121191232-2f005788dc42 h1:Om6kYQYDUk5wWbT0t0q6pvyM49i9XZAv9dDrkDA7gjk= github.com/cncf/xds/go v0.0.0-20250121191232-2f005788dc42/go.mod h1:W+zGtBO5Y1IgJhy4+A9GOqVhqLpfZi+vwmdNXUehLA8= github.com/containerd/containerd v1.7.27 h1:yFyEyojddO3MIGVER2xJLWoCIn+Up4GaHFquP7hsFII= diff --git a/go.work b/go.work index c137fb60c..0d9909f84 100644 --- a/go.work +++ b/go.work @@ -1,6 +1,6 @@ -go 1.24.2 +go 1.24.4 -toolchain go1.24.2 +toolchain go1.24.4 use ( . diff --git a/hack/tools/go.mod b/hack/tools/go.mod index b74c40781..211115cdb 100644 --- a/hack/tools/go.mod +++ b/hack/tools/go.mod @@ -1,6 +1,6 @@ module github.com/edgelesssys/constellation/v2/hack/tools -go 1.24.2 +go 1.24.4 require ( github.com/google/go-licenses v1.6.0 From 7c5eeee7a4ded67cc881ea20dcd018d43994e079 Mon Sep 17 00:00:00 2001 From: edgelessci <71088502+edgelessci@users.noreply.github.com> Date: Mon, 16 Jun 2025 08:37:43 +0200 Subject: [PATCH 305/311] image: update measurements and image version (#3863) Co-authored-by: edgelessci --- .../measurements/measurements_enterprise.go | 16 ++++++++-------- internal/config/image_enterprise.go | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/internal/attestation/measurements/measurements_enterprise.go b/internal/attestation/measurements/measurements_enterprise.go index a728e12b9..5e73b5b74 100644 --- a/internal/attestation/measurements/measurements_enterprise.go +++ b/internal/attestation/measurements/measurements_enterprise.go @@ -19,14 +19,14 @@ package measurements // revive:disable:var-naming var ( - aws_AWSNitroTPM = M{0: {Expected: []byte{0x73, 0x7f, 0x76, 0x7a, 0x12, 0xf5, 0x4e, 0x70, 0xee, 0xcb, 0xc8, 0x68, 0x40, 0x11, 0x32, 0x3a, 0xe2, 0xfe, 0x2d, 0xd9, 0xf9, 0x07, 0x85, 0x57, 0x79, 0x69, 0xd7, 0xa2, 0x01, 0x3e, 0x8c, 0x12}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xdc, 0xc7, 0x37, 0xc2, 0x6b, 0x53, 0x76, 0x44, 0x2f, 0x64, 0xda, 0xc3, 0xe8, 0x02, 0xf7, 0x60, 0xc8, 0x87, 0x89, 0x82, 0x4c, 0x6a, 0x61, 0x4f, 0x37, 0x10, 0x2b, 0x11, 0x91, 0x19, 0x25, 0x29}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xf2, 0x3a, 0x7e, 0x61, 0xa3, 0xc8, 0xa5, 0x3c, 0xaa, 0xc5, 0x7f, 0x79, 0x24, 0xb8, 0x8d, 0x24, 0xc8, 0x41, 0x0b, 0x00, 0x96, 0xb3, 0x33, 0x55, 0xaa, 0x74, 0x0f, 0xb4, 0x53, 0x9d, 0xff, 0xad}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x9b, 0x05, 0xb0, 0xe4, 0xcd, 0x03, 0xf7, 0x53, 0x83, 0x38, 0x8a, 0xdc, 0xf8, 0x1a, 0xc9, 0xa6, 0x28, 0x5e, 0x36, 0xe5, 0x70, 0x6a, 0x48, 0x57, 0x99, 0x84, 0xf3, 0xd4, 0x1d, 0xf1, 0x28, 0xa7}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - aws_AWSSEVSNP = M{0: {Expected: []byte{0xd6, 0xdf, 0x85, 0x53, 0x58, 0xf5, 0xb1, 0x0f, 0x06, 0xf0, 0xfa, 0xb3, 0xf4, 0x08, 0xad, 0x26, 0xcd, 0x16, 0x5a, 0x29, 0x49, 0xba, 0xd6, 0x9e, 0x2c, 0xc7, 0x56, 0x92, 0x52, 0x9e, 0x66, 0x2a}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x64, 0xa3, 0x2f, 0x3a, 0xa6, 0xc0, 0x3c, 0x8d, 0x2b, 0x96, 0x6a, 0xd7, 0x26, 0x36, 0xe1, 0x6e, 0xfc, 0x23, 0xe3, 0xa7, 0xc1, 0xab, 0xfb, 0xb9, 0x0c, 0x63, 0xa6, 0x69, 0xc2, 0x96, 0x94, 0x65}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x25, 0x4a, 0xe1, 0x76, 0x75, 0x3f, 0xc2, 0x66, 0x84, 0xc9, 0x73, 0x8e, 0x48, 0x26, 0xe0, 0xe2, 0x15, 0x5e, 0x8c, 0x65, 0xfb, 0x4b, 0x18, 0xbc, 0x1c, 0x61, 0x40, 0x11, 0xf6, 0x48, 0x5d, 0xef}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x75, 0xb8, 0x02, 0xaf, 0xb2, 0x6b, 0x1e, 0xae, 0xeb, 0xff, 0x37, 0x95, 0x44, 0x49, 0x42, 0x37, 0x0e, 0x69, 0x10, 0x36, 0x39, 0xf9, 0xfd, 0xc6, 0xcc, 0x4d, 0x63, 0xd6, 0x95, 0x4f, 0xf6, 0xfb}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - azure_AzureSEVSNP = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xd9, 0xc5, 0xe4, 0x35, 0xcd, 0x85, 0xc7, 0x81, 0x8c, 0xcf, 0xa9, 0xa2, 0x05, 0x12, 0x9f, 0xc4, 0xfa, 0x8d, 0x5f, 0xd3, 0x68, 0x74, 0xe6, 0x5a, 0x31, 0x76, 0xd6, 0x7b, 0x22, 0x56, 0xb0, 0x27}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x25, 0x46, 0x0d, 0x4b, 0x32, 0xf8, 0x31, 0xc5, 0xd9, 0xcf, 0x08, 0x6a, 0xbe, 0xd2, 0xb7, 0x76, 0xc3, 0xbf, 0x63, 0xbc, 0xb9, 0xb9, 0x03, 0x28, 0xd0, 0x2c, 0x8a, 0x85, 0x88, 0x9b, 0x7d, 0x33}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x2c, 0x28, 0x7d, 0xe6, 0xb2, 0xf6, 0x1c, 0x45, 0x9a, 0x0a, 0x02, 0xd6, 0x29, 0x18, 0x88, 0x25, 0x2e, 0xfc, 0x5f, 0xea, 0x0e, 0x9b, 0x27, 0x64, 0xcd, 0x63, 0xe3, 0xa2, 0x81, 0x76, 0x98, 0x30}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - azure_AzureTDX = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x2b, 0xd3, 0x1a, 0x5d, 0xe3, 0xf5, 0x47, 0x0d, 0xc2, 0xcc, 0xcf, 0xaa, 0x27, 0x40, 0x2e, 0x31, 0x25, 0x15, 0x8d, 0x10, 0xfa, 0x6c, 0xc3, 0x26, 0x4c, 0x2b, 0x77, 0xe8, 0x9d, 0xbf, 0x79, 0x9b}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xdc, 0xe9, 0x7c, 0x3f, 0x31, 0x71, 0xc2, 0x05, 0x07, 0xf7, 0x81, 0x62, 0xa5, 0xfb, 0xe8, 0xfe, 0x6a, 0x90, 0x5b, 0x91, 0xbd, 0x01, 0x5c, 0x50, 0xe5, 0x7b, 0xbd, 0x88, 0xec, 0x27, 0x09, 0x46}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xf2, 0x78, 0xf0, 0x30, 0x78, 0xed, 0x13, 0x78, 0x7b, 0xe9, 0x53, 0x26, 0x19, 0xe1, 0xcc, 0x88, 0xa8, 0xdb, 0x19, 0x68, 0xe2, 0xf8, 0xc9, 0xfb, 0x2d, 0xc0, 0xe1, 0x27, 0xa8, 0x77, 0x8a, 0xba}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + aws_AWSNitroTPM = M{0: {Expected: []byte{0x73, 0x7f, 0x76, 0x7a, 0x12, 0xf5, 0x4e, 0x70, 0xee, 0xcb, 0xc8, 0x68, 0x40, 0x11, 0x32, 0x3a, 0xe2, 0xfe, 0x2d, 0xd9, 0xf9, 0x07, 0x85, 0x57, 0x79, 0x69, 0xd7, 0xa2, 0x01, 0x3e, 0x8c, 0x12}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x4e, 0x72, 0x4e, 0x5d, 0x6e, 0x39, 0xeb, 0x39, 0xfd, 0xb4, 0x4c, 0xa6, 0xdb, 0xe6, 0xe5, 0x7e, 0xa5, 0xd2, 0x41, 0xc1, 0x0a, 0xbb, 0xe9, 0x6a, 0x2b, 0xe9, 0x8e, 0xc5, 0x68, 0x46, 0x7e, 0xb3}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xa2, 0xa6, 0x32, 0xf6, 0xa4, 0xa8, 0x44, 0xef, 0xa6, 0xdf, 0x61, 0x3d, 0xd2, 0xae, 0x6e, 0x71, 0x9a, 0xe2, 0xe8, 0x2f, 0xef, 0x39, 0xe4, 0x10, 0x14, 0x97, 0xa6, 0x26, 0x78, 0x8f, 0x39, 0x82}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x27, 0x03, 0x70, 0x25, 0x9d, 0x5b, 0x67, 0x48, 0x11, 0x51, 0x76, 0x6f, 0x13, 0x52, 0x20, 0x6c, 0xc7, 0xcf, 0x2f, 0xdb, 0x19, 0x47, 0x22, 0x4a, 0x2f, 0xf7, 0x09, 0x83, 0x1c, 0x0d, 0x53, 0xcd}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + aws_AWSSEVSNP = M{0: {Expected: []byte{0xd6, 0xdf, 0x85, 0x53, 0x58, 0xf5, 0xb1, 0x0f, 0x06, 0xf0, 0xfa, 0xb3, 0xf4, 0x08, 0xad, 0x26, 0xcd, 0x16, 0x5a, 0x29, 0x49, 0xba, 0xd6, 0x9e, 0x2c, 0xc7, 0x56, 0x92, 0x52, 0x9e, 0x66, 0x2a}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x5f, 0x78, 0x2f, 0x81, 0x33, 0x50, 0x49, 0x6c, 0xa9, 0x68, 0x6b, 0x97, 0x95, 0x15, 0xb5, 0xc8, 0xdd, 0x90, 0x4c, 0xff, 0xaf, 0x2b, 0x05, 0x55, 0xd8, 0x22, 0x09, 0x5e, 0x2e, 0x66, 0x24, 0x27}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x6b, 0xb4, 0x08, 0x5d, 0x4b, 0xe7, 0xc7, 0xa3, 0x93, 0xa3, 0xe0, 0x1c, 0x70, 0xb7, 0x61, 0x5d, 0x94, 0x18, 0x03, 0xd4, 0xb3, 0xa5, 0xf3, 0xb0, 0x71, 0x49, 0x7a, 0xee, 0xc0, 0xc9, 0x72, 0x7d}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xa0, 0x94, 0x69, 0x77, 0xf0, 0xed, 0x3d, 0x1d, 0x79, 0xe3, 0x92, 0x05, 0xd6, 0xe2, 0x8f, 0x68, 0x92, 0x1a, 0x14, 0x8a, 0xf1, 0xb7, 0x44, 0xc2, 0xe9, 0xdd, 0x95, 0xf0, 0x57, 0x73, 0xb8, 0x99}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + azure_AzureSEVSNP = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x60, 0x3c, 0x8f, 0x66, 0xa0, 0x6c, 0x29, 0xac, 0xf6, 0xed, 0xfc, 0x79, 0xeb, 0x4c, 0x96, 0x00, 0x94, 0x64, 0xb7, 0x1c, 0xc5, 0xca, 0x7e, 0xfd, 0x03, 0x06, 0x64, 0x78, 0x40, 0x5e, 0x9e, 0x8c}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x65, 0xcf, 0xb8, 0xdd, 0x4f, 0x2c, 0xd7, 0x68, 0x91, 0x82, 0x5a, 0x50, 0x32, 0xa3, 0xf6, 0x13, 0xd1, 0xa8, 0xfd, 0xe0, 0x58, 0x02, 0xea, 0x2b, 0x7e, 0xdd, 0xec, 0x67, 0xaa, 0x1f, 0xba, 0x06}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x3a, 0x13, 0xcf, 0xf9, 0xa2, 0xba, 0x0a, 0x41, 0x27, 0x26, 0x0b, 0xac, 0x4a, 0xdd, 0xc4, 0x1f, 0x55, 0xd0, 0x90, 0x77, 0x26, 0x79, 0x4d, 0xe1, 0xbe, 0x6f, 0x39, 0xb4, 0x03, 0xb6, 0x62, 0x7e}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + azure_AzureTDX = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x2a, 0xf8, 0x9b, 0x35, 0x59, 0xa4, 0x60, 0x48, 0x03, 0x8a, 0x87, 0xe3, 0xf1, 0xa9, 0x60, 0x31, 0x74, 0x9b, 0x73, 0xca, 0xfd, 0x0a, 0xbe, 0x32, 0x99, 0x36, 0x07, 0x63, 0xef, 0x10, 0xee, 0x84}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x1a, 0x3e, 0x3c, 0x09, 0xb8, 0x2e, 0x91, 0x3d, 0x3b, 0x92, 0xfc, 0x27, 0xfc, 0x3f, 0x4a, 0xda, 0x27, 0x58, 0xc7, 0x09, 0x55, 0x7b, 0x5e, 0xac, 0xd3, 0x27, 0x28, 0x63, 0xaf, 0x57, 0x47, 0xf2}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x48, 0x53, 0x67, 0xaa, 0x3c, 0x81, 0x2e, 0xf4, 0x1a, 0xbf, 0x01, 0xd6, 0x74, 0xa7, 0xa0, 0x79, 0x98, 0xf8, 0x19, 0x08, 0x0f, 0xcc, 0xe9, 0x47, 0xf9, 0x30, 0xfa, 0x6b, 0x83, 0x4b, 0x47, 0x5a}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} azure_AzureTrustedLaunch M - gcp_GCPSEVES = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x86, 0x12, 0x5c, 0x59, 0xe0, 0xe0, 0xf4, 0x5b, 0xb0, 0x47, 0xcb, 0xb6, 0x8e, 0x41, 0x3b, 0x83, 0x54, 0x02, 0x51, 0x11, 0x9d, 0x50, 0x1c, 0x27, 0x54, 0xef, 0x78, 0x5d, 0x29, 0x2a, 0xf0, 0xf0}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xac, 0x6f, 0xfd, 0x1c, 0xda, 0x12, 0xf3, 0x34, 0x45, 0x40, 0x08, 0x2d, 0x4b, 0x44, 0x3a, 0x43, 0x1a, 0x9f, 0x9b, 0x6e, 0x70, 0x94, 0x35, 0xea, 0x47, 0x86, 0x04, 0xe9, 0xdc, 0xa8, 0x09, 0xde}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x3f, 0xf5, 0x29, 0x49, 0x54, 0xd6, 0xca, 0x26, 0x77, 0xa5, 0xae, 0x9a, 0x34, 0x74, 0xaa, 0x26, 0x95, 0x61, 0x7e, 0xff, 0xe8, 0x74, 0x2c, 0x11, 0x60, 0xfe, 0xe6, 0xa1, 0xd6, 0x29, 0x43, 0xc4}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - gcp_GCPSEVSNP = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x10, 0x96, 0xb6, 0x79, 0x58, 0x15, 0x5d, 0xf4, 0xf9, 0xe7, 0x8a, 0x63, 0x2d, 0xd8, 0x3f, 0xb7, 0x6b, 0x82, 0x33, 0x58, 0xa2, 0x6a, 0x0e, 0xe4, 0x19, 0x13, 0x7a, 0x0f, 0x63, 0x79, 0x6d, 0x3a}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x7f, 0x36, 0x9b, 0x84, 0xe0, 0x5b, 0x78, 0x31, 0x91, 0xfd, 0xcd, 0x0c, 0xeb, 0x78, 0x1a, 0xad, 0xb2, 0xa9, 0x63, 0xde, 0xee, 0x5e, 0xa2, 0x91, 0xb5, 0xf0, 0x00, 0x94, 0xd9, 0x15, 0xd3, 0x2e}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xe7, 0x00, 0xec, 0x36, 0x1b, 0xbe, 0x81, 0xf4, 0x8a, 0xf5, 0xa0, 0x44, 0x90, 0x28, 0xa7, 0x0b, 0xd8, 0x01, 0x50, 0x31, 0xad, 0x7f, 0xc9, 0xea, 0x3c, 0x0c, 0x94, 0x33, 0x77, 0xac, 0x5b, 0xea}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - openstack_QEMUVTPM = M{4: {Expected: []byte{0x44, 0x6d, 0xf5, 0xe6, 0x7c, 0xff, 0x2d, 0x7a, 0x40, 0x6f, 0x7a, 0x24, 0x27, 0xaf, 0x65, 0xe7, 0xd6, 0x29, 0x20, 0xa7, 0x0b, 0x06, 0x28, 0xcb, 0xd1, 0xc1, 0x33, 0x53, 0x0f, 0xcf, 0x7d, 0x89}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xd3, 0x08, 0x34, 0x72, 0x24, 0x57, 0x0e, 0xb6, 0x8b, 0xb6, 0xd8, 0x73, 0xac, 0xa7, 0xa4, 0xe5, 0x25, 0xe9, 0x12, 0x97, 0x24, 0x75, 0x13, 0xf8, 0x72, 0x56, 0xa8, 0x65, 0x22, 0x18, 0xea, 0xfb}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xc8, 0x98, 0x8c, 0x3c, 0xef, 0x47, 0x93, 0xdc, 0x97, 0x36, 0x54, 0x4c, 0x97, 0xc5, 0x6c, 0xf1, 0xf1, 0x46, 0x80, 0x33, 0x27, 0x83, 0x82, 0x64, 0x06, 0x6f, 0x11, 0xcf, 0x4e, 0x40, 0xcf, 0x5d}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + gcp_GCPSEVES = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x06, 0x59, 0xa6, 0xd4, 0x2d, 0x60, 0x1e, 0x98, 0x2f, 0xa5, 0xc8, 0x87, 0x72, 0x49, 0x40, 0xb5, 0x73, 0x03, 0x2e, 0xe3, 0x8e, 0xb8, 0xe1, 0xc1, 0x1e, 0xa4, 0x7d, 0xdc, 0x93, 0x24, 0x15, 0x1c}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x0e, 0x9b, 0x95, 0x4f, 0x80, 0x17, 0x32, 0x20, 0xff, 0x6d, 0x58, 0x88, 0xd0, 0x83, 0xfd, 0xa4, 0x61, 0xde, 0x1f, 0x06, 0x4b, 0x63, 0xa1, 0x9e, 0xda, 0x2d, 0xaa, 0x63, 0x76, 0x8d, 0xcc, 0xc3}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xe2, 0xb4, 0xaa, 0xe5, 0x8f, 0xeb, 0x67, 0xd2, 0x01, 0x1e, 0x71, 0x14, 0x03, 0x25, 0xa8, 0xd0, 0x23, 0x42, 0xf1, 0x62, 0xd9, 0x7a, 0xd6, 0xd8, 0x36, 0x05, 0xf2, 0x90, 0x85, 0xf5, 0x79, 0xbe}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + gcp_GCPSEVSNP = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x9c, 0xec, 0xc9, 0x43, 0x9a, 0x2c, 0x7a, 0xb0, 0xa5, 0x43, 0x39, 0x19, 0x1e, 0xc8, 0x6d, 0x25, 0x43, 0xfb, 0xb4, 0xb5, 0x5e, 0xbc, 0x0e, 0x5b, 0x48, 0xc9, 0x2e, 0xe0, 0x8e, 0xef, 0x40, 0x52}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x8d, 0x28, 0xff, 0x08, 0x80, 0x89, 0x24, 0x38, 0xe5, 0x66, 0x4c, 0x9a, 0xab, 0x8d, 0x92, 0xa9, 0xcb, 0x41, 0x33, 0xf1, 0xa1, 0x50, 0xd0, 0x23, 0xbf, 0x8e, 0xd1, 0x25, 0xf9, 0xdc, 0x1a, 0x17}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x58, 0x52, 0x4e, 0xfd, 0xaf, 0x27, 0xcb, 0x1c, 0x4f, 0x15, 0xbd, 0xf6, 0x5d, 0x3a, 0xeb, 0x4e, 0xe4, 0x7f, 0x76, 0x71, 0x22, 0x0f, 0xad, 0xc9, 0x9c, 0xd5, 0x7d, 0x51, 0xbd, 0xc8, 0x52, 0x0d}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + openstack_QEMUVTPM = M{4: {Expected: []byte{0x06, 0xdb, 0x47, 0x83, 0xd3, 0xb2, 0xe6, 0xa6, 0x44, 0x27, 0x0d, 0x67, 0xfa, 0x3e, 0x2d, 0x68, 0x90, 0xb0, 0xa1, 0x8a, 0x0c, 0x63, 0x6e, 0xf0, 0x4a, 0x85, 0xd7, 0xfb, 0x77, 0x27, 0x9a, 0xd5}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xe3, 0x01, 0x1f, 0x38, 0x26, 0x33, 0x52, 0x68, 0x95, 0x5e, 0x42, 0xa8, 0x5a, 0x3f, 0x29, 0x55, 0x69, 0x08, 0x3c, 0x97, 0x7f, 0x75, 0xcc, 0x98, 0x85, 0x40, 0x9f, 0x2d, 0xb5, 0xd6, 0x5b, 0x74}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xc4, 0xdb, 0xb3, 0x30, 0xf3, 0x0a, 0x65, 0xb1, 0x2c, 0x6e, 0xa0, 0x76, 0xf8, 0x65, 0x98, 0x7d, 0x44, 0x49, 0xa0, 0x35, 0x31, 0x77, 0x60, 0x68, 0x1d, 0x64, 0x18, 0x16, 0xc6, 0xdf, 0x30, 0x1e}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} qemu_QEMUTDX M - qemu_QEMUVTPM = M{4: {Expected: []byte{0xb4, 0x62, 0xed, 0xfc, 0xf2, 0x07, 0x5a, 0x9f, 0xaa, 0x56, 0x9a, 0x22, 0x41, 0x06, 0xa4, 0xda, 0xdc, 0x1f, 0x9d, 0x65, 0xe2, 0xa4, 0xc1, 0xd4, 0xbe, 0x52, 0xec, 0x3c, 0x86, 0x5e, 0xfe, 0x55}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xcd, 0x90, 0x17, 0x4b, 0xc8, 0xdc, 0x83, 0x87, 0xd9, 0x12, 0xa9, 0x4e, 0xef, 0x7b, 0xf9, 0x1a, 0xe4, 0x3b, 0x77, 0x59, 0xec, 0xdd, 0x7f, 0xaa, 0x06, 0xa7, 0xc9, 0xf1, 0xa5, 0x1e, 0xe2, 0x61}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x5f, 0xe4, 0xc9, 0xff, 0xf1, 0xd9, 0x95, 0x10, 0xce, 0x07, 0x6a, 0xa0, 0x02, 0x24, 0x01, 0xec, 0x55, 0x08, 0x1a, 0xdf, 0xd4, 0x50, 0x76, 0xec, 0x7a, 0x20, 0xa4, 0x69, 0x28, 0xc1, 0x55, 0xd0}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + qemu_QEMUVTPM = M{4: {Expected: []byte{0x0b, 0x64, 0xf4, 0x3e, 0x54, 0xf5, 0x7a, 0x04, 0x53, 0x4a, 0x58, 0x71, 0x98, 0x5e, 0xc8, 0x3e, 0x8c, 0xb6, 0x48, 0x28, 0x64, 0xbf, 0x76, 0x94, 0xfe, 0x6e, 0x99, 0xa6, 0xc9, 0x8a, 0x22, 0x62}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x73, 0xb0, 0x60, 0x69, 0x56, 0x5c, 0x0d, 0xb3, 0x10, 0x92, 0xea, 0x58, 0x95, 0x48, 0x76, 0x72, 0x9e, 0x76, 0xcc, 0xb3, 0xe9, 0x40, 0x28, 0x17, 0x80, 0x9b, 0x13, 0x3b, 0x8a, 0xc2, 0xf5, 0x3c}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xe1, 0xdb, 0x32, 0xf9, 0xa1, 0xe3, 0x70, 0x6c, 0xce, 0x41, 0x17, 0xac, 0xbb, 0x7d, 0xb5, 0x77, 0x50, 0xba, 0x87, 0x49, 0x12, 0xdb, 0xcf, 0x0e, 0x84, 0xd9, 0x64, 0x11, 0x53, 0x80, 0x5d, 0xbf}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} ) diff --git a/internal/config/image_enterprise.go b/internal/config/image_enterprise.go index 0495b71c7..1c817132e 100644 --- a/internal/config/image_enterprise.go +++ b/internal/config/image_enterprise.go @@ -10,5 +10,5 @@ package config const ( // defaultImage is the default image to use. - defaultImage = "ref/main/stream/nightly/v2.24.0-pre.0.20250605130559-98067b6051de" + defaultImage = "ref/main/stream/nightly/v2.24.0-pre.0.20250612160015-bd1e56adfafc" ) From 541e77969755678cb5682bf02cd3687a0c6c43f9 Mon Sep 17 00:00:00 2001 From: edgelessci <71088502+edgelessci@users.noreply.github.com> Date: Wed, 18 Jun 2025 07:40:07 +0200 Subject: [PATCH 306/311] image: update measurements and image version (#3865) --- .../measurements/measurements_enterprise.go | 16 ++++++++-------- internal/config/image_enterprise.go | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/internal/attestation/measurements/measurements_enterprise.go b/internal/attestation/measurements/measurements_enterprise.go index 5e73b5b74..2252543a3 100644 --- a/internal/attestation/measurements/measurements_enterprise.go +++ b/internal/attestation/measurements/measurements_enterprise.go @@ -19,14 +19,14 @@ package measurements // revive:disable:var-naming var ( - aws_AWSNitroTPM = M{0: {Expected: []byte{0x73, 0x7f, 0x76, 0x7a, 0x12, 0xf5, 0x4e, 0x70, 0xee, 0xcb, 0xc8, 0x68, 0x40, 0x11, 0x32, 0x3a, 0xe2, 0xfe, 0x2d, 0xd9, 0xf9, 0x07, 0x85, 0x57, 0x79, 0x69, 0xd7, 0xa2, 0x01, 0x3e, 0x8c, 0x12}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x4e, 0x72, 0x4e, 0x5d, 0x6e, 0x39, 0xeb, 0x39, 0xfd, 0xb4, 0x4c, 0xa6, 0xdb, 0xe6, 0xe5, 0x7e, 0xa5, 0xd2, 0x41, 0xc1, 0x0a, 0xbb, 0xe9, 0x6a, 0x2b, 0xe9, 0x8e, 0xc5, 0x68, 0x46, 0x7e, 0xb3}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xa2, 0xa6, 0x32, 0xf6, 0xa4, 0xa8, 0x44, 0xef, 0xa6, 0xdf, 0x61, 0x3d, 0xd2, 0xae, 0x6e, 0x71, 0x9a, 0xe2, 0xe8, 0x2f, 0xef, 0x39, 0xe4, 0x10, 0x14, 0x97, 0xa6, 0x26, 0x78, 0x8f, 0x39, 0x82}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x27, 0x03, 0x70, 0x25, 0x9d, 0x5b, 0x67, 0x48, 0x11, 0x51, 0x76, 0x6f, 0x13, 0x52, 0x20, 0x6c, 0xc7, 0xcf, 0x2f, 0xdb, 0x19, 0x47, 0x22, 0x4a, 0x2f, 0xf7, 0x09, 0x83, 0x1c, 0x0d, 0x53, 0xcd}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - aws_AWSSEVSNP = M{0: {Expected: []byte{0xd6, 0xdf, 0x85, 0x53, 0x58, 0xf5, 0xb1, 0x0f, 0x06, 0xf0, 0xfa, 0xb3, 0xf4, 0x08, 0xad, 0x26, 0xcd, 0x16, 0x5a, 0x29, 0x49, 0xba, 0xd6, 0x9e, 0x2c, 0xc7, 0x56, 0x92, 0x52, 0x9e, 0x66, 0x2a}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x5f, 0x78, 0x2f, 0x81, 0x33, 0x50, 0x49, 0x6c, 0xa9, 0x68, 0x6b, 0x97, 0x95, 0x15, 0xb5, 0xc8, 0xdd, 0x90, 0x4c, 0xff, 0xaf, 0x2b, 0x05, 0x55, 0xd8, 0x22, 0x09, 0x5e, 0x2e, 0x66, 0x24, 0x27}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x6b, 0xb4, 0x08, 0x5d, 0x4b, 0xe7, 0xc7, 0xa3, 0x93, 0xa3, 0xe0, 0x1c, 0x70, 0xb7, 0x61, 0x5d, 0x94, 0x18, 0x03, 0xd4, 0xb3, 0xa5, 0xf3, 0xb0, 0x71, 0x49, 0x7a, 0xee, 0xc0, 0xc9, 0x72, 0x7d}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xa0, 0x94, 0x69, 0x77, 0xf0, 0xed, 0x3d, 0x1d, 0x79, 0xe3, 0x92, 0x05, 0xd6, 0xe2, 0x8f, 0x68, 0x92, 0x1a, 0x14, 0x8a, 0xf1, 0xb7, 0x44, 0xc2, 0xe9, 0xdd, 0x95, 0xf0, 0x57, 0x73, 0xb8, 0x99}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - azure_AzureSEVSNP = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x60, 0x3c, 0x8f, 0x66, 0xa0, 0x6c, 0x29, 0xac, 0xf6, 0xed, 0xfc, 0x79, 0xeb, 0x4c, 0x96, 0x00, 0x94, 0x64, 0xb7, 0x1c, 0xc5, 0xca, 0x7e, 0xfd, 0x03, 0x06, 0x64, 0x78, 0x40, 0x5e, 0x9e, 0x8c}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x65, 0xcf, 0xb8, 0xdd, 0x4f, 0x2c, 0xd7, 0x68, 0x91, 0x82, 0x5a, 0x50, 0x32, 0xa3, 0xf6, 0x13, 0xd1, 0xa8, 0xfd, 0xe0, 0x58, 0x02, 0xea, 0x2b, 0x7e, 0xdd, 0xec, 0x67, 0xaa, 0x1f, 0xba, 0x06}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x3a, 0x13, 0xcf, 0xf9, 0xa2, 0xba, 0x0a, 0x41, 0x27, 0x26, 0x0b, 0xac, 0x4a, 0xdd, 0xc4, 0x1f, 0x55, 0xd0, 0x90, 0x77, 0x26, 0x79, 0x4d, 0xe1, 0xbe, 0x6f, 0x39, 0xb4, 0x03, 0xb6, 0x62, 0x7e}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - azure_AzureTDX = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x2a, 0xf8, 0x9b, 0x35, 0x59, 0xa4, 0x60, 0x48, 0x03, 0x8a, 0x87, 0xe3, 0xf1, 0xa9, 0x60, 0x31, 0x74, 0x9b, 0x73, 0xca, 0xfd, 0x0a, 0xbe, 0x32, 0x99, 0x36, 0x07, 0x63, 0xef, 0x10, 0xee, 0x84}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x1a, 0x3e, 0x3c, 0x09, 0xb8, 0x2e, 0x91, 0x3d, 0x3b, 0x92, 0xfc, 0x27, 0xfc, 0x3f, 0x4a, 0xda, 0x27, 0x58, 0xc7, 0x09, 0x55, 0x7b, 0x5e, 0xac, 0xd3, 0x27, 0x28, 0x63, 0xaf, 0x57, 0x47, 0xf2}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x48, 0x53, 0x67, 0xaa, 0x3c, 0x81, 0x2e, 0xf4, 0x1a, 0xbf, 0x01, 0xd6, 0x74, 0xa7, 0xa0, 0x79, 0x98, 0xf8, 0x19, 0x08, 0x0f, 0xcc, 0xe9, 0x47, 0xf9, 0x30, 0xfa, 0x6b, 0x83, 0x4b, 0x47, 0x5a}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + aws_AWSNitroTPM = M{0: {Expected: []byte{0x73, 0x7f, 0x76, 0x7a, 0x12, 0xf5, 0x4e, 0x70, 0xee, 0xcb, 0xc8, 0x68, 0x40, 0x11, 0x32, 0x3a, 0xe2, 0xfe, 0x2d, 0xd9, 0xf9, 0x07, 0x85, 0x57, 0x79, 0x69, 0xd7, 0xa2, 0x01, 0x3e, 0x8c, 0x12}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x3a, 0x20, 0x95, 0x1b, 0x69, 0x63, 0xd0, 0xeb, 0x8c, 0xe9, 0x4a, 0xec, 0x3e, 0x95, 0xe4, 0xc8, 0xa7, 0xb3, 0xc8, 0xa7, 0xe4, 0x1a, 0xbd, 0x67, 0xeb, 0x49, 0x8a, 0xd7, 0xcf, 0x45, 0xf5, 0x4f}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x7f, 0x01, 0xe2, 0xd0, 0x25, 0x0e, 0xcb, 0xb2, 0xa7, 0x08, 0x0e, 0x81, 0x27, 0xb3, 0x66, 0x7f, 0x7b, 0x47, 0x5d, 0xc4, 0xe5, 0x58, 0xde, 0xf5, 0x45, 0x41, 0x97, 0x5c, 0xa5, 0x00, 0x3c, 0x47}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x2c, 0x28, 0x45, 0x13, 0x5e, 0x82, 0x1c, 0xd8, 0xec, 0x9a, 0x27, 0x85, 0x14, 0xd4, 0x18, 0xaa, 0xfa, 0xbf, 0xf3, 0xea, 0x26, 0x9a, 0x11, 0xee, 0x60, 0x10, 0x13, 0xd7, 0x56, 0xb6, 0xb4, 0x9c}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + aws_AWSSEVSNP = M{0: {Expected: []byte{0xd6, 0xdf, 0x85, 0x53, 0x58, 0xf5, 0xb1, 0x0f, 0x06, 0xf0, 0xfa, 0xb3, 0xf4, 0x08, 0xad, 0x26, 0xcd, 0x16, 0x5a, 0x29, 0x49, 0xba, 0xd6, 0x9e, 0x2c, 0xc7, 0x56, 0x92, 0x52, 0x9e, 0x66, 0x2a}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x93, 0xf3, 0xa7, 0xce, 0xc0, 0x2b, 0x30, 0x9f, 0xed, 0xda, 0xe7, 0xd7, 0xf4, 0xf8, 0x55, 0xca, 0x7b, 0xa2, 0x0c, 0x9b, 0x68, 0x75, 0xb2, 0xf0, 0x98, 0xba, 0xb8, 0x51, 0x82, 0x74, 0x53, 0x0f}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x73, 0x4a, 0xfc, 0xa2, 0x88, 0xe4, 0x7a, 0x7d, 0x5e, 0x45, 0x00, 0xb6, 0x72, 0x0a, 0xe5, 0x08, 0x59, 0xa4, 0xcf, 0x3c, 0x8f, 0x4a, 0x90, 0xeb, 0x3a, 0xb6, 0xc8, 0x12, 0x94, 0xed, 0x31, 0xdb}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x4c, 0x8b, 0x35, 0x77, 0xd2, 0x64, 0xd2, 0x6c, 0x97, 0x10, 0x90, 0x12, 0x78, 0x5f, 0xd3, 0x1b, 0xca, 0x06, 0x54, 0xc6, 0x3b, 0x35, 0x24, 0x65, 0x91, 0x38, 0xf8, 0x33, 0x28, 0xa0, 0xf0, 0x6a}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + azure_AzureSEVSNP = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xd3, 0xee, 0x64, 0xce, 0xfa, 0x38, 0x4f, 0xae, 0xfe, 0x1e, 0x76, 0xb3, 0x79, 0xff, 0x47, 0x46, 0xb3, 0xce, 0x95, 0x65, 0x62, 0xe8, 0xa0, 0xb5, 0xea, 0x6d, 0x4e, 0x08, 0xa5, 0xa4, 0x05, 0xa3}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x2a, 0x3b, 0x53, 0xbd, 0x97, 0xee, 0xbd, 0x93, 0x18, 0x61, 0x99, 0xa7, 0xf4, 0xaa, 0x77, 0x82, 0xe0, 0x8e, 0x7c, 0x72, 0xc5, 0xcb, 0x19, 0x87, 0x1e, 0xcc, 0xa9, 0x37, 0x04, 0x7c, 0x05, 0x2a}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x5d, 0xda, 0xa5, 0x94, 0x51, 0xe0, 0x48, 0xb2, 0x7c, 0xb3, 0xac, 0xa2, 0x14, 0x19, 0x7f, 0x4b, 0x53, 0x87, 0xdf, 0xc4, 0xcc, 0x89, 0x4f, 0x8e, 0x49, 0x13, 0x1a, 0x8e, 0x2c, 0xa2, 0xc4, 0x8e}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + azure_AzureTDX = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xe0, 0xa0, 0xcd, 0xdd, 0xe4, 0x38, 0xd9, 0x87, 0x25, 0x5d, 0xc5, 0xf6, 0x1f, 0xb0, 0x53, 0x65, 0xfe, 0xf9, 0xb6, 0xec, 0x99, 0x33, 0x4b, 0x33, 0x67, 0xb8, 0x89, 0x9c, 0x86, 0x4a, 0x06, 0x22}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xe6, 0xa3, 0xb5, 0x64, 0x5a, 0xf0, 0xbe, 0x35, 0x23, 0xe8, 0x33, 0x7c, 0xd8, 0x42, 0x4a, 0x96, 0x22, 0x81, 0xd1, 0xe2, 0x1f, 0x92, 0x19, 0xa1, 0x8a, 0xb4, 0x5b, 0xe2, 0x6f, 0x1e, 0xbd, 0xe0}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x0e, 0xd0, 0x44, 0x4f, 0x88, 0xe9, 0xf5, 0x65, 0x37, 0x9a, 0x77, 0x2b, 0xe8, 0xd2, 0xb4, 0xfb, 0xa3, 0x67, 0x18, 0xed, 0x2d, 0xaa, 0xae, 0x98, 0x89, 0xae, 0xb7, 0x50, 0x6c, 0x0c, 0x18, 0x0b}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} azure_AzureTrustedLaunch M - gcp_GCPSEVES = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x06, 0x59, 0xa6, 0xd4, 0x2d, 0x60, 0x1e, 0x98, 0x2f, 0xa5, 0xc8, 0x87, 0x72, 0x49, 0x40, 0xb5, 0x73, 0x03, 0x2e, 0xe3, 0x8e, 0xb8, 0xe1, 0xc1, 0x1e, 0xa4, 0x7d, 0xdc, 0x93, 0x24, 0x15, 0x1c}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x0e, 0x9b, 0x95, 0x4f, 0x80, 0x17, 0x32, 0x20, 0xff, 0x6d, 0x58, 0x88, 0xd0, 0x83, 0xfd, 0xa4, 0x61, 0xde, 0x1f, 0x06, 0x4b, 0x63, 0xa1, 0x9e, 0xda, 0x2d, 0xaa, 0x63, 0x76, 0x8d, 0xcc, 0xc3}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xe2, 0xb4, 0xaa, 0xe5, 0x8f, 0xeb, 0x67, 0xd2, 0x01, 0x1e, 0x71, 0x14, 0x03, 0x25, 0xa8, 0xd0, 0x23, 0x42, 0xf1, 0x62, 0xd9, 0x7a, 0xd6, 0xd8, 0x36, 0x05, 0xf2, 0x90, 0x85, 0xf5, 0x79, 0xbe}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - gcp_GCPSEVSNP = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x9c, 0xec, 0xc9, 0x43, 0x9a, 0x2c, 0x7a, 0xb0, 0xa5, 0x43, 0x39, 0x19, 0x1e, 0xc8, 0x6d, 0x25, 0x43, 0xfb, 0xb4, 0xb5, 0x5e, 0xbc, 0x0e, 0x5b, 0x48, 0xc9, 0x2e, 0xe0, 0x8e, 0xef, 0x40, 0x52}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x8d, 0x28, 0xff, 0x08, 0x80, 0x89, 0x24, 0x38, 0xe5, 0x66, 0x4c, 0x9a, 0xab, 0x8d, 0x92, 0xa9, 0xcb, 0x41, 0x33, 0xf1, 0xa1, 0x50, 0xd0, 0x23, 0xbf, 0x8e, 0xd1, 0x25, 0xf9, 0xdc, 0x1a, 0x17}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x58, 0x52, 0x4e, 0xfd, 0xaf, 0x27, 0xcb, 0x1c, 0x4f, 0x15, 0xbd, 0xf6, 0x5d, 0x3a, 0xeb, 0x4e, 0xe4, 0x7f, 0x76, 0x71, 0x22, 0x0f, 0xad, 0xc9, 0x9c, 0xd5, 0x7d, 0x51, 0xbd, 0xc8, 0x52, 0x0d}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - openstack_QEMUVTPM = M{4: {Expected: []byte{0x06, 0xdb, 0x47, 0x83, 0xd3, 0xb2, 0xe6, 0xa6, 0x44, 0x27, 0x0d, 0x67, 0xfa, 0x3e, 0x2d, 0x68, 0x90, 0xb0, 0xa1, 0x8a, 0x0c, 0x63, 0x6e, 0xf0, 0x4a, 0x85, 0xd7, 0xfb, 0x77, 0x27, 0x9a, 0xd5}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xe3, 0x01, 0x1f, 0x38, 0x26, 0x33, 0x52, 0x68, 0x95, 0x5e, 0x42, 0xa8, 0x5a, 0x3f, 0x29, 0x55, 0x69, 0x08, 0x3c, 0x97, 0x7f, 0x75, 0xcc, 0x98, 0x85, 0x40, 0x9f, 0x2d, 0xb5, 0xd6, 0x5b, 0x74}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xc4, 0xdb, 0xb3, 0x30, 0xf3, 0x0a, 0x65, 0xb1, 0x2c, 0x6e, 0xa0, 0x76, 0xf8, 0x65, 0x98, 0x7d, 0x44, 0x49, 0xa0, 0x35, 0x31, 0x77, 0x60, 0x68, 0x1d, 0x64, 0x18, 0x16, 0xc6, 0xdf, 0x30, 0x1e}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + gcp_GCPSEVES = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xe7, 0x52, 0x58, 0xfc, 0xf1, 0x9e, 0x0e, 0x1a, 0x72, 0xd7, 0xd0, 0xac, 0x78, 0x15, 0x63, 0xf7, 0xcb, 0x2e, 0xe8, 0x6e, 0x27, 0x1e, 0x13, 0x56, 0x15, 0x47, 0x47, 0x83, 0x1a, 0xb5, 0x62, 0xd5}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x52, 0x63, 0x4e, 0xc1, 0x31, 0x3d, 0x5f, 0xcb, 0xc9, 0xdd, 0x9a, 0x3f, 0x2d, 0x80, 0x30, 0x84, 0x65, 0xfe, 0x98, 0x48, 0x9a, 0x15, 0x2b, 0x57, 0xf8, 0x9a, 0x35, 0xfb, 0xae, 0x16, 0x2c, 0xd5}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x30, 0xa5, 0x82, 0x57, 0x12, 0xd1, 0x62, 0x75, 0x74, 0x53, 0x43, 0x1c, 0x74, 0x92, 0x84, 0xa9, 0x37, 0x92, 0xb7, 0x51, 0x65, 0x0f, 0x3e, 0xd3, 0x7e, 0x21, 0x9b, 0xb6, 0xc5, 0x64, 0xf3, 0x10}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + gcp_GCPSEVSNP = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x03, 0xbd, 0x0e, 0xba, 0x03, 0xd8, 0x96, 0xab, 0x9c, 0xc7, 0x09, 0xc3, 0xc4, 0xb3, 0x3c, 0xd3, 0x4d, 0x31, 0x25, 0x0b, 0xda, 0x6e, 0x17, 0x82, 0xbe, 0x65, 0x7c, 0x1b, 0x35, 0x04, 0xc5, 0x2f}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x67, 0x9c, 0xdf, 0x51, 0x0f, 0x7e, 0x8f, 0x76, 0x41, 0xb8, 0x8a, 0xd5, 0x9c, 0x54, 0xdb, 0xfe, 0x92, 0xd7, 0x2d, 0x54, 0xbc, 0x14, 0xa5, 0x48, 0xe8, 0x07, 0x66, 0x19, 0xfd, 0x42, 0xee, 0xfc}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xca, 0xa8, 0x5b, 0xba, 0x53, 0xab, 0xc0, 0x3f, 0x1f, 0xad, 0xd0, 0x27, 0xaf, 0x29, 0x0d, 0x67, 0x50, 0xe0, 0x39, 0xc8, 0xe7, 0x63, 0xb9, 0xc0, 0x8c, 0xdf, 0xf8, 0x42, 0xbd, 0xa6, 0x19, 0x58}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + openstack_QEMUVTPM = M{4: {Expected: []byte{0x3f, 0x8e, 0x88, 0x99, 0x4d, 0x07, 0x1f, 0xc0, 0xfb, 0x04, 0x3b, 0x31, 0xfd, 0x57, 0x59, 0x65, 0x97, 0x99, 0xfa, 0x91, 0x85, 0xb6, 0x1e, 0x1d, 0xf6, 0xf1, 0x8d, 0x2a, 0x9b, 0x52, 0xfe, 0xcc}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x58, 0x76, 0xf3, 0xc1, 0xf2, 0x85, 0xce, 0x69, 0x02, 0x4a, 0x23, 0x5a, 0xb3, 0x61, 0xfe, 0x80, 0xb1, 0x38, 0x09, 0x55, 0x55, 0x67, 0xaf, 0x8b, 0xc4, 0x5a, 0xca, 0x80, 0x52, 0x2d, 0x53, 0xdd}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xb6, 0xd0, 0x89, 0x2b, 0x77, 0x66, 0xe1, 0xb3, 0x58, 0x68, 0x92, 0xdb, 0x5b, 0xb5, 0x99, 0xcb, 0x04, 0xc0, 0x92, 0x1c, 0x7a, 0xf9, 0xf6, 0xed, 0xd2, 0x3f, 0x40, 0x9a, 0x8c, 0xbb, 0x78, 0x4e}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} qemu_QEMUTDX M - qemu_QEMUVTPM = M{4: {Expected: []byte{0x0b, 0x64, 0xf4, 0x3e, 0x54, 0xf5, 0x7a, 0x04, 0x53, 0x4a, 0x58, 0x71, 0x98, 0x5e, 0xc8, 0x3e, 0x8c, 0xb6, 0x48, 0x28, 0x64, 0xbf, 0x76, 0x94, 0xfe, 0x6e, 0x99, 0xa6, 0xc9, 0x8a, 0x22, 0x62}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x73, 0xb0, 0x60, 0x69, 0x56, 0x5c, 0x0d, 0xb3, 0x10, 0x92, 0xea, 0x58, 0x95, 0x48, 0x76, 0x72, 0x9e, 0x76, 0xcc, 0xb3, 0xe9, 0x40, 0x28, 0x17, 0x80, 0x9b, 0x13, 0x3b, 0x8a, 0xc2, 0xf5, 0x3c}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xe1, 0xdb, 0x32, 0xf9, 0xa1, 0xe3, 0x70, 0x6c, 0xce, 0x41, 0x17, 0xac, 0xbb, 0x7d, 0xb5, 0x77, 0x50, 0xba, 0x87, 0x49, 0x12, 0xdb, 0xcf, 0x0e, 0x84, 0xd9, 0x64, 0x11, 0x53, 0x80, 0x5d, 0xbf}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + qemu_QEMUVTPM = M{4: {Expected: []byte{0x5d, 0xbc, 0x9f, 0x13, 0xa5, 0xac, 0xd9, 0xbf, 0xb2, 0x2a, 0x2d, 0xea, 0x46, 0x30, 0x82, 0x26, 0x00, 0x03, 0xd7, 0x00, 0x0b, 0x5b, 0x0b, 0x81, 0x01, 0xcc, 0x52, 0xc0, 0x46, 0xa4, 0xd1, 0x9f}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xe7, 0x67, 0x0a, 0x9d, 0x81, 0x19, 0x1c, 0x90, 0x95, 0x82, 0xef, 0x41, 0x97, 0x25, 0x84, 0xee, 0xad, 0x1d, 0x13, 0xea, 0x8a, 0x06, 0xfb, 0x4e, 0x02, 0x8e, 0x14, 0x35, 0xd1, 0x3e, 0xf0, 0xea}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x79, 0x4a, 0x34, 0x41, 0xa4, 0xf4, 0xbe, 0x97, 0x6d, 0xe4, 0xd8, 0xa7, 0x0e, 0x9d, 0x7b, 0x27, 0x7d, 0x78, 0x70, 0x4b, 0x53, 0xb3, 0x92, 0xa4, 0x0a, 0x9b, 0x6d, 0x7f, 0x51, 0x41, 0x2a, 0x65}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} ) diff --git a/internal/config/image_enterprise.go b/internal/config/image_enterprise.go index 1c817132e..45f5cefb7 100644 --- a/internal/config/image_enterprise.go +++ b/internal/config/image_enterprise.go @@ -10,5 +10,5 @@ package config const ( // defaultImage is the default image to use. - defaultImage = "ref/main/stream/nightly/v2.24.0-pre.0.20250612160015-bd1e56adfafc" + defaultImage = "ref/main/stream/nightly/v2.24.0-pre.0.20250616083743-7c5eeee7a4de" ) From e2aa7934f9948eeb429cce833ec45d7664aa6635 Mon Sep 17 00:00:00 2001 From: edgelessci <71088502+edgelessci@users.noreply.github.com> Date: Mon, 23 Jun 2025 12:53:04 +0200 Subject: [PATCH 307/311] image: update measurements and image version (#3866) Co-authored-by: edgelessci --- .../measurements/measurements_enterprise.go | 16 ++++++++-------- internal/config/image_enterprise.go | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/internal/attestation/measurements/measurements_enterprise.go b/internal/attestation/measurements/measurements_enterprise.go index 2252543a3..417e67ec9 100644 --- a/internal/attestation/measurements/measurements_enterprise.go +++ b/internal/attestation/measurements/measurements_enterprise.go @@ -19,14 +19,14 @@ package measurements // revive:disable:var-naming var ( - aws_AWSNitroTPM = M{0: {Expected: []byte{0x73, 0x7f, 0x76, 0x7a, 0x12, 0xf5, 0x4e, 0x70, 0xee, 0xcb, 0xc8, 0x68, 0x40, 0x11, 0x32, 0x3a, 0xe2, 0xfe, 0x2d, 0xd9, 0xf9, 0x07, 0x85, 0x57, 0x79, 0x69, 0xd7, 0xa2, 0x01, 0x3e, 0x8c, 0x12}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x3a, 0x20, 0x95, 0x1b, 0x69, 0x63, 0xd0, 0xeb, 0x8c, 0xe9, 0x4a, 0xec, 0x3e, 0x95, 0xe4, 0xc8, 0xa7, 0xb3, 0xc8, 0xa7, 0xe4, 0x1a, 0xbd, 0x67, 0xeb, 0x49, 0x8a, 0xd7, 0xcf, 0x45, 0xf5, 0x4f}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x7f, 0x01, 0xe2, 0xd0, 0x25, 0x0e, 0xcb, 0xb2, 0xa7, 0x08, 0x0e, 0x81, 0x27, 0xb3, 0x66, 0x7f, 0x7b, 0x47, 0x5d, 0xc4, 0xe5, 0x58, 0xde, 0xf5, 0x45, 0x41, 0x97, 0x5c, 0xa5, 0x00, 0x3c, 0x47}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x2c, 0x28, 0x45, 0x13, 0x5e, 0x82, 0x1c, 0xd8, 0xec, 0x9a, 0x27, 0x85, 0x14, 0xd4, 0x18, 0xaa, 0xfa, 0xbf, 0xf3, 0xea, 0x26, 0x9a, 0x11, 0xee, 0x60, 0x10, 0x13, 0xd7, 0x56, 0xb6, 0xb4, 0x9c}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - aws_AWSSEVSNP = M{0: {Expected: []byte{0xd6, 0xdf, 0x85, 0x53, 0x58, 0xf5, 0xb1, 0x0f, 0x06, 0xf0, 0xfa, 0xb3, 0xf4, 0x08, 0xad, 0x26, 0xcd, 0x16, 0x5a, 0x29, 0x49, 0xba, 0xd6, 0x9e, 0x2c, 0xc7, 0x56, 0x92, 0x52, 0x9e, 0x66, 0x2a}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x93, 0xf3, 0xa7, 0xce, 0xc0, 0x2b, 0x30, 0x9f, 0xed, 0xda, 0xe7, 0xd7, 0xf4, 0xf8, 0x55, 0xca, 0x7b, 0xa2, 0x0c, 0x9b, 0x68, 0x75, 0xb2, 0xf0, 0x98, 0xba, 0xb8, 0x51, 0x82, 0x74, 0x53, 0x0f}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x73, 0x4a, 0xfc, 0xa2, 0x88, 0xe4, 0x7a, 0x7d, 0x5e, 0x45, 0x00, 0xb6, 0x72, 0x0a, 0xe5, 0x08, 0x59, 0xa4, 0xcf, 0x3c, 0x8f, 0x4a, 0x90, 0xeb, 0x3a, 0xb6, 0xc8, 0x12, 0x94, 0xed, 0x31, 0xdb}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x4c, 0x8b, 0x35, 0x77, 0xd2, 0x64, 0xd2, 0x6c, 0x97, 0x10, 0x90, 0x12, 0x78, 0x5f, 0xd3, 0x1b, 0xca, 0x06, 0x54, 0xc6, 0x3b, 0x35, 0x24, 0x65, 0x91, 0x38, 0xf8, 0x33, 0x28, 0xa0, 0xf0, 0x6a}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - azure_AzureSEVSNP = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xd3, 0xee, 0x64, 0xce, 0xfa, 0x38, 0x4f, 0xae, 0xfe, 0x1e, 0x76, 0xb3, 0x79, 0xff, 0x47, 0x46, 0xb3, 0xce, 0x95, 0x65, 0x62, 0xe8, 0xa0, 0xb5, 0xea, 0x6d, 0x4e, 0x08, 0xa5, 0xa4, 0x05, 0xa3}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x2a, 0x3b, 0x53, 0xbd, 0x97, 0xee, 0xbd, 0x93, 0x18, 0x61, 0x99, 0xa7, 0xf4, 0xaa, 0x77, 0x82, 0xe0, 0x8e, 0x7c, 0x72, 0xc5, 0xcb, 0x19, 0x87, 0x1e, 0xcc, 0xa9, 0x37, 0x04, 0x7c, 0x05, 0x2a}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x5d, 0xda, 0xa5, 0x94, 0x51, 0xe0, 0x48, 0xb2, 0x7c, 0xb3, 0xac, 0xa2, 0x14, 0x19, 0x7f, 0x4b, 0x53, 0x87, 0xdf, 0xc4, 0xcc, 0x89, 0x4f, 0x8e, 0x49, 0x13, 0x1a, 0x8e, 0x2c, 0xa2, 0xc4, 0x8e}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - azure_AzureTDX = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xe0, 0xa0, 0xcd, 0xdd, 0xe4, 0x38, 0xd9, 0x87, 0x25, 0x5d, 0xc5, 0xf6, 0x1f, 0xb0, 0x53, 0x65, 0xfe, 0xf9, 0xb6, 0xec, 0x99, 0x33, 0x4b, 0x33, 0x67, 0xb8, 0x89, 0x9c, 0x86, 0x4a, 0x06, 0x22}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xe6, 0xa3, 0xb5, 0x64, 0x5a, 0xf0, 0xbe, 0x35, 0x23, 0xe8, 0x33, 0x7c, 0xd8, 0x42, 0x4a, 0x96, 0x22, 0x81, 0xd1, 0xe2, 0x1f, 0x92, 0x19, 0xa1, 0x8a, 0xb4, 0x5b, 0xe2, 0x6f, 0x1e, 0xbd, 0xe0}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x0e, 0xd0, 0x44, 0x4f, 0x88, 0xe9, 0xf5, 0x65, 0x37, 0x9a, 0x77, 0x2b, 0xe8, 0xd2, 0xb4, 0xfb, 0xa3, 0x67, 0x18, 0xed, 0x2d, 0xaa, 0xae, 0x98, 0x89, 0xae, 0xb7, 0x50, 0x6c, 0x0c, 0x18, 0x0b}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + aws_AWSNitroTPM = M{0: {Expected: []byte{0x73, 0x7f, 0x76, 0x7a, 0x12, 0xf5, 0x4e, 0x70, 0xee, 0xcb, 0xc8, 0x68, 0x40, 0x11, 0x32, 0x3a, 0xe2, 0xfe, 0x2d, 0xd9, 0xf9, 0x07, 0x85, 0x57, 0x79, 0x69, 0xd7, 0xa2, 0x01, 0x3e, 0x8c, 0x12}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x84, 0x9d, 0x2d, 0x6f, 0x8c, 0x59, 0x89, 0x78, 0xad, 0x0b, 0xa6, 0xee, 0x13, 0xdb, 0x86, 0xe4, 0xd4, 0x2f, 0x93, 0xe5, 0x57, 0x56, 0xd3, 0x8d, 0x80, 0xab, 0xe6, 0x26, 0xe0, 0xa1, 0xeb, 0x85}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x3f, 0x10, 0x4e, 0x9d, 0xb6, 0xb1, 0xb9, 0x3a, 0x78, 0xb8, 0xa7, 0x41, 0x99, 0x3a, 0xab, 0xdf, 0x3c, 0xbe, 0x88, 0xd6, 0x7d, 0x58, 0x94, 0xe0, 0x91, 0x2d, 0x22, 0x40, 0xc9, 0x5a, 0xd8, 0x70}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xd1, 0x52, 0x66, 0xa4, 0x06, 0x5a, 0xff, 0x9c, 0xf3, 0x8b, 0x30, 0x95, 0x87, 0x83, 0x1f, 0xda, 0xbe, 0x85, 0xaa, 0xf4, 0x3e, 0xff, 0xd9, 0x06, 0xdb, 0xf3, 0x8d, 0xb0, 0xac, 0x85, 0x8e, 0xa9}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + aws_AWSSEVSNP = M{0: {Expected: []byte{0xd6, 0xdf, 0x85, 0x53, 0x58, 0xf5, 0xb1, 0x0f, 0x06, 0xf0, 0xfa, 0xb3, 0xf4, 0x08, 0xad, 0x26, 0xcd, 0x16, 0x5a, 0x29, 0x49, 0xba, 0xd6, 0x9e, 0x2c, 0xc7, 0x56, 0x92, 0x52, 0x9e, 0x66, 0x2a}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x42, 0xe4, 0x35, 0x9e, 0xa7, 0xff, 0x2c, 0xae, 0xe9, 0xe2, 0x40, 0x9d, 0x19, 0x7a, 0xa6, 0x54, 0x77, 0x3a, 0x2e, 0x74, 0x6c, 0xe2, 0xd0, 0x7c, 0xbd, 0xf7, 0xd6, 0x1e, 0x86, 0x67, 0x7d, 0x40}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x10, 0x53, 0x76, 0xc2, 0x59, 0xfe, 0x9e, 0xb9, 0x8b, 0x8a, 0x68, 0xb7, 0x5b, 0xa0, 0x5b, 0x7a, 0xab, 0xa4, 0xe4, 0x2f, 0x1b, 0xba, 0xfd, 0x65, 0xe0, 0xb7, 0xfa, 0xdc, 0x37, 0x9e, 0x63, 0x0c}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xfd, 0x04, 0xbe, 0xd6, 0xe7, 0x7f, 0x19, 0xfd, 0xf4, 0xe4, 0xf5, 0x3b, 0x2e, 0xe6, 0xa7, 0xa4, 0x01, 0x00, 0xbf, 0x79, 0x4c, 0x88, 0x7b, 0x93, 0xd4, 0x2e, 0xde, 0x73, 0x0e, 0xb8, 0x38, 0x70}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + azure_AzureSEVSNP = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x99, 0xc6, 0x70, 0xce, 0x3c, 0x0f, 0x8c, 0xb9, 0x7e, 0x9e, 0x9f, 0x7b, 0xe0, 0x65, 0x37, 0x6c, 0xe8, 0x1b, 0xb8, 0xe4, 0x76, 0xc5, 0x43, 0x02, 0x79, 0x80, 0x56, 0x9b, 0xba, 0xc3, 0x33, 0x84}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x35, 0x63, 0xfe, 0x8f, 0x44, 0x86, 0xf0, 0xea, 0x94, 0xdc, 0xa4, 0x0b, 0xea, 0xd0, 0xea, 0x99, 0xe8, 0x59, 0xc3, 0x30, 0xbb, 0xb5, 0x11, 0x1e, 0x50, 0x84, 0x3e, 0x36, 0x52, 0xc8, 0xe1, 0x96}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x68, 0x96, 0x89, 0x37, 0xab, 0x75, 0x99, 0xca, 0x54, 0x59, 0x1a, 0x3e, 0xae, 0x01, 0xc1, 0xb5, 0x6d, 0xbf, 0x3d, 0x15, 0xa8, 0x12, 0xa8, 0x4f, 0xeb, 0xe0, 0x49, 0xe8, 0xfd, 0xea, 0xfa, 0xed}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + azure_AzureTDX = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xc2, 0xcc, 0xce, 0xc3, 0x7d, 0x1d, 0x06, 0xaf, 0xe1, 0x42, 0xc3, 0x09, 0xe1, 0x98, 0x59, 0x33, 0x53, 0x7b, 0x55, 0x6b, 0x45, 0xd3, 0xf4, 0xfa, 0x8f, 0xc2, 0xf7, 0x9e, 0x74, 0x61, 0x25, 0xa5}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x39, 0x0c, 0x99, 0xff, 0xe8, 0xab, 0x09, 0x7e, 0x06, 0x86, 0x48, 0xcf, 0xc2, 0x3c, 0xb0, 0xb9, 0x9b, 0xb1, 0xc8, 0xb0, 0xbb, 0x55, 0x86, 0x24, 0xff, 0x94, 0xce, 0xbb, 0xe9, 0xe8, 0x15, 0xa2}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xc0, 0x9e, 0x19, 0xc8, 0x23, 0x9a, 0x44, 0x94, 0xb8, 0x36, 0x6b, 0x2a, 0xf3, 0x3b, 0x76, 0x2e, 0xa5, 0x3c, 0x78, 0xc0, 0x61, 0x38, 0x5d, 0x66, 0x01, 0x8d, 0x91, 0x22, 0x96, 0xae, 0xe2, 0xe5}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} azure_AzureTrustedLaunch M - gcp_GCPSEVES = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xe7, 0x52, 0x58, 0xfc, 0xf1, 0x9e, 0x0e, 0x1a, 0x72, 0xd7, 0xd0, 0xac, 0x78, 0x15, 0x63, 0xf7, 0xcb, 0x2e, 0xe8, 0x6e, 0x27, 0x1e, 0x13, 0x56, 0x15, 0x47, 0x47, 0x83, 0x1a, 0xb5, 0x62, 0xd5}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x52, 0x63, 0x4e, 0xc1, 0x31, 0x3d, 0x5f, 0xcb, 0xc9, 0xdd, 0x9a, 0x3f, 0x2d, 0x80, 0x30, 0x84, 0x65, 0xfe, 0x98, 0x48, 0x9a, 0x15, 0x2b, 0x57, 0xf8, 0x9a, 0x35, 0xfb, 0xae, 0x16, 0x2c, 0xd5}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x30, 0xa5, 0x82, 0x57, 0x12, 0xd1, 0x62, 0x75, 0x74, 0x53, 0x43, 0x1c, 0x74, 0x92, 0x84, 0xa9, 0x37, 0x92, 0xb7, 0x51, 0x65, 0x0f, 0x3e, 0xd3, 0x7e, 0x21, 0x9b, 0xb6, 0xc5, 0x64, 0xf3, 0x10}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - gcp_GCPSEVSNP = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x03, 0xbd, 0x0e, 0xba, 0x03, 0xd8, 0x96, 0xab, 0x9c, 0xc7, 0x09, 0xc3, 0xc4, 0xb3, 0x3c, 0xd3, 0x4d, 0x31, 0x25, 0x0b, 0xda, 0x6e, 0x17, 0x82, 0xbe, 0x65, 0x7c, 0x1b, 0x35, 0x04, 0xc5, 0x2f}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x67, 0x9c, 0xdf, 0x51, 0x0f, 0x7e, 0x8f, 0x76, 0x41, 0xb8, 0x8a, 0xd5, 0x9c, 0x54, 0xdb, 0xfe, 0x92, 0xd7, 0x2d, 0x54, 0xbc, 0x14, 0xa5, 0x48, 0xe8, 0x07, 0x66, 0x19, 0xfd, 0x42, 0xee, 0xfc}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xca, 0xa8, 0x5b, 0xba, 0x53, 0xab, 0xc0, 0x3f, 0x1f, 0xad, 0xd0, 0x27, 0xaf, 0x29, 0x0d, 0x67, 0x50, 0xe0, 0x39, 0xc8, 0xe7, 0x63, 0xb9, 0xc0, 0x8c, 0xdf, 0xf8, 0x42, 0xbd, 0xa6, 0x19, 0x58}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - openstack_QEMUVTPM = M{4: {Expected: []byte{0x3f, 0x8e, 0x88, 0x99, 0x4d, 0x07, 0x1f, 0xc0, 0xfb, 0x04, 0x3b, 0x31, 0xfd, 0x57, 0x59, 0x65, 0x97, 0x99, 0xfa, 0x91, 0x85, 0xb6, 0x1e, 0x1d, 0xf6, 0xf1, 0x8d, 0x2a, 0x9b, 0x52, 0xfe, 0xcc}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x58, 0x76, 0xf3, 0xc1, 0xf2, 0x85, 0xce, 0x69, 0x02, 0x4a, 0x23, 0x5a, 0xb3, 0x61, 0xfe, 0x80, 0xb1, 0x38, 0x09, 0x55, 0x55, 0x67, 0xaf, 0x8b, 0xc4, 0x5a, 0xca, 0x80, 0x52, 0x2d, 0x53, 0xdd}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xb6, 0xd0, 0x89, 0x2b, 0x77, 0x66, 0xe1, 0xb3, 0x58, 0x68, 0x92, 0xdb, 0x5b, 0xb5, 0x99, 0xcb, 0x04, 0xc0, 0x92, 0x1c, 0x7a, 0xf9, 0xf6, 0xed, 0xd2, 0x3f, 0x40, 0x9a, 0x8c, 0xbb, 0x78, 0x4e}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + gcp_GCPSEVES = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x70, 0xb9, 0xaf, 0xb7, 0xb3, 0x9e, 0xcf, 0x07, 0xbe, 0xd5, 0xf8, 0xd6, 0xc8, 0x4b, 0x67, 0xde, 0x5a, 0x1d, 0xc6, 0x3d, 0xcc, 0xaa, 0x6d, 0xcf, 0x74, 0x52, 0xe4, 0x8d, 0x85, 0xaa, 0xdd, 0xf6}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xef, 0xd8, 0xf7, 0xe4, 0x63, 0x39, 0x9d, 0x60, 0x9e, 0x17, 0x36, 0x05, 0xa4, 0xcd, 0xb0, 0xf6, 0x2c, 0x8d, 0xe2, 0x2d, 0xde, 0x54, 0xc9, 0x6a, 0xc0, 0x34, 0x7b, 0x55, 0xeb, 0x0a, 0xb4, 0x26}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xb5, 0x8e, 0xd6, 0x09, 0x7c, 0x06, 0x8d, 0xe7, 0x5b, 0x2f, 0x32, 0xa8, 0x84, 0x7b, 0xeb, 0xae, 0x7e, 0x7c, 0x4d, 0xa6, 0x75, 0xfc, 0x0b, 0x4a, 0xf2, 0xc0, 0xbc, 0x7a, 0x7e, 0xfb, 0x93, 0xab}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + gcp_GCPSEVSNP = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x47, 0x13, 0x73, 0x1f, 0x47, 0xe5, 0xf0, 0xda, 0x50, 0x06, 0xde, 0x5f, 0x0f, 0xc5, 0xbd, 0xcf, 0x52, 0xd3, 0x09, 0x13, 0x46, 0x36, 0xb1, 0xbc, 0x97, 0xb3, 0x89, 0xc6, 0x10, 0xe7, 0x9f, 0x50}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x66, 0xba, 0xcd, 0x5b, 0x0b, 0x67, 0x3b, 0x19, 0xff, 0xf1, 0x39, 0x01, 0x30, 0x10, 0x06, 0x61, 0x97, 0x8a, 0xc5, 0xb0, 0x57, 0xbc, 0x69, 0x7c, 0x64, 0x31, 0x2a, 0x7f, 0x38, 0x50, 0x77, 0x50}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x2e, 0xfe, 0x7d, 0x40, 0xfe, 0xf0, 0xb8, 0x56, 0xf6, 0x11, 0xe8, 0xaf, 0x18, 0x69, 0xce, 0x82, 0x07, 0xe5, 0x42, 0x29, 0xc5, 0x4b, 0x53, 0xcf, 0xf0, 0xdb, 0x37, 0x1f, 0x39, 0xc7, 0x01, 0x3d}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + openstack_QEMUVTPM = M{4: {Expected: []byte{0xa3, 0xc0, 0xc1, 0xba, 0x47, 0x76, 0xf7, 0xc2, 0xcb, 0xa5, 0xc0, 0x20, 0xd5, 0x62, 0xfd, 0xf4, 0xd9, 0x46, 0xae, 0x0c, 0x8f, 0x42, 0x7b, 0x91, 0x9b, 0x0d, 0x55, 0xa3, 0x69, 0x8f, 0x14, 0x5f}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xbe, 0x00, 0xb0, 0xe9, 0xca, 0xbd, 0x8f, 0x95, 0x27, 0x91, 0x16, 0x2f, 0x36, 0xc9, 0x61, 0x1a, 0xda, 0x86, 0xeb, 0x46, 0x1a, 0x19, 0xbd, 0x6f, 0x86, 0x2b, 0x8f, 0xaa, 0x7e, 0xb5, 0x3f, 0x9f}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x22, 0x3c, 0x88, 0x75, 0x9c, 0x08, 0x77, 0x38, 0xe7, 0xfc, 0xbc, 0xaf, 0x9c, 0xf2, 0x76, 0xd8, 0xc9, 0xe5, 0x22, 0xd7, 0xa4, 0x72, 0x2d, 0x92, 0xf9, 0x1e, 0x58, 0x05, 0x5b, 0xf1, 0x12, 0x45}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} qemu_QEMUTDX M - qemu_QEMUVTPM = M{4: {Expected: []byte{0x5d, 0xbc, 0x9f, 0x13, 0xa5, 0xac, 0xd9, 0xbf, 0xb2, 0x2a, 0x2d, 0xea, 0x46, 0x30, 0x82, 0x26, 0x00, 0x03, 0xd7, 0x00, 0x0b, 0x5b, 0x0b, 0x81, 0x01, 0xcc, 0x52, 0xc0, 0x46, 0xa4, 0xd1, 0x9f}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xe7, 0x67, 0x0a, 0x9d, 0x81, 0x19, 0x1c, 0x90, 0x95, 0x82, 0xef, 0x41, 0x97, 0x25, 0x84, 0xee, 0xad, 0x1d, 0x13, 0xea, 0x8a, 0x06, 0xfb, 0x4e, 0x02, 0x8e, 0x14, 0x35, 0xd1, 0x3e, 0xf0, 0xea}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x79, 0x4a, 0x34, 0x41, 0xa4, 0xf4, 0xbe, 0x97, 0x6d, 0xe4, 0xd8, 0xa7, 0x0e, 0x9d, 0x7b, 0x27, 0x7d, 0x78, 0x70, 0x4b, 0x53, 0xb3, 0x92, 0xa4, 0x0a, 0x9b, 0x6d, 0x7f, 0x51, 0x41, 0x2a, 0x65}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + qemu_QEMUVTPM = M{4: {Expected: []byte{0x34, 0x78, 0xb5, 0x6d, 0xe4, 0x18, 0x28, 0x86, 0x4f, 0xb1, 0x0b, 0xec, 0xb9, 0x4d, 0x7d, 0x01, 0x9f, 0xa4, 0xba, 0x51, 0xf4, 0xe3, 0xbb, 0x4c, 0x7b, 0x2a, 0xb4, 0x67, 0x0e, 0x12, 0x86, 0x22}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x49, 0xe6, 0x48, 0xc6, 0x06, 0xee, 0xb4, 0xca, 0xf1, 0xf9, 0xf3, 0xc8, 0xdb, 0x59, 0xde, 0x8f, 0xcf, 0xc8, 0xab, 0x80, 0xbc, 0xff, 0x73, 0x07, 0xea, 0x32, 0xef, 0xa6, 0xcb, 0xdd, 0x13, 0x40}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xc2, 0x7f, 0xb9, 0x7d, 0x12, 0x79, 0x85, 0xff, 0xa4, 0x25, 0x58, 0xfe, 0xd5, 0xbf, 0xe8, 0x3e, 0xeb, 0x48, 0x0d, 0x6a, 0x3e, 0xac, 0xe1, 0x4a, 0xdf, 0x83, 0x3a, 0x4d, 0x70, 0x2f, 0xd2, 0x29}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} ) diff --git a/internal/config/image_enterprise.go b/internal/config/image_enterprise.go index 45f5cefb7..0cfcdd91c 100644 --- a/internal/config/image_enterprise.go +++ b/internal/config/image_enterprise.go @@ -10,5 +10,5 @@ package config const ( // defaultImage is the default image to use. - defaultImage = "ref/main/stream/nightly/v2.24.0-pre.0.20250616083743-7c5eeee7a4de" + defaultImage = "ref/main/stream/nightly/v2.24.0-pre.0.20250618074007-541e77969755" ) From 78959301fa448465427913e16d9b12c87263d364 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 24 Jun 2025 08:27:30 +0200 Subject: [PATCH 308/311] deps: update module k8s.io/kubernetes to v1.33.2 [SECURITY] (#3867) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index b5feb1f99..b19cb1ab5 100644 --- a/go.mod +++ b/go.mod @@ -134,7 +134,7 @@ require ( k8s.io/client-go v0.33.1 k8s.io/cluster-bootstrap v0.33.1 k8s.io/kubelet v0.33.1 - k8s.io/kubernetes v1.33.1 + k8s.io/kubernetes v1.33.2 k8s.io/mount-utils v0.33.1 k8s.io/utils v0.0.0-20250502105355-0f33e8f1c979 libvirt.org/go/libvirt v1.11002.0 diff --git a/go.sum b/go.sum index cc614b2b2..a19c87aa1 100644 --- a/go.sum +++ b/go.sum @@ -1033,8 +1033,8 @@ k8s.io/kubectl v0.33.0 h1:HiRb1yqibBSCqic4pRZP+viiOBAnIdwYDpzUFejs07g= k8s.io/kubectl v0.33.0/go.mod h1:gAlGBuS1Jq1fYZ9AjGWbI/5Vk3M/VW2DK4g10Fpyn/0= k8s.io/kubelet v0.33.1 h1:x4LCw1/iZVWOKA4RoITnuB8gMHnw31HPB3S0EF0EexE= k8s.io/kubelet v0.33.1/go.mod h1:8WpdC9M95VmsqIdGSQrajXooTfT5otEj8pGWOm+KKfQ= -k8s.io/kubernetes v1.33.1 h1:86+VVY/f11taZdpEZrNciLw1MIQhu6BFXf/OMFn5EUg= -k8s.io/kubernetes v1.33.1/go.mod h1:2nWuPk0seE4+6sd0x60wQ6rYEXcV7SoeMbU0YbFm/5k= +k8s.io/kubernetes v1.33.2 h1:Vk3hsCaazyMQ6CXhu029AEPlBoYsEnD8oEIC0bP2pWQ= +k8s.io/kubernetes v1.33.2/go.mod h1:nrt8sldmckKz2fCZhgRX3SKfS2e+CzXATPv6ITNkU00= k8s.io/mount-utils v0.33.1 h1:hodPhfyoK+gG0SgnYwx1iPrlnpaESZiJ9GFzF5V/imE= k8s.io/mount-utils v0.33.1/go.mod h1:1JR4rKymg8B8bCPo618hpSAdrpO6XLh0Acqok/xVwPE= k8s.io/utils v0.0.0-20250502105355-0f33e8f1c979 h1:jgJW5IePPXLGB8e/1wvd0Ich9QE97RvvF3a8J3fP/Lg= From 1216a2af72d0989bdadd993cc1561a27de8e17ba Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 24 Jun 2025 10:39:49 +0200 Subject: [PATCH 309/311] deps: update bazel (modules) (#3857) * deps: update bazel (modules) * deps: tidy all modules --------- Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: edgelessci --- MODULE.bazel | 8 +-- MODULE.bazel.lock | 168 +++------------------------------------------- 2 files changed, 14 insertions(+), 162 deletions(-) diff --git a/MODULE.bazel b/MODULE.bazel index 901104bd6..013e0d776 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -1,6 +1,6 @@ module(name = "constellation") -bazel_dep(name = "aspect_bazel_lib", version = "2.17.1") +bazel_dep(name = "aspect_bazel_lib", version = "2.19.4") bazel_lib = use_extension("@aspect_bazel_lib//lib:extensions.bzl", "toolchains") bazel_lib.yq() @@ -10,14 +10,14 @@ use_repo(bazel_lib, "yq_toolchains") bazel_dep(name = "bazel_skylib", version = "1.7.1") bazel_dep(name = "gazelle", version = "0.43.0") bazel_dep(name = "hermetic_cc_toolchain", version = "3.2.0") -bazel_dep(name = "rules_cc", version = "0.1.1") +bazel_dep(name = "rules_cc", version = "0.1.2") bazel_dep(name = "rules_go", version = "0.54.0", repo_name = "io_bazel_rules_go") bazel_dep(name = "rules_pkg", version = "1.1.0") bazel_dep(name = "rules_proto", version = "7.1.0") bazel_dep(name = "rules_python", version = "1.4.1") -bazel_dep(name = "rules_shell", version = "0.4.1") +bazel_dep(name = "rules_shell", version = "0.5.0") -bazel_dep(name = "buildifier_prebuilt", version = "8.0.3", dev_dependency = True) +bazel_dep(name = "buildifier_prebuilt", version = "8.2.0.2", dev_dependency = True) go_sdk = use_extension("@io_bazel_rules_go//go:extensions.bzl", "go_sdk") go_sdk.download( diff --git a/MODULE.bazel.lock b/MODULE.bazel.lock index 31ee038db..bfc4a242d 100644 --- a/MODULE.bazel.lock +++ b/MODULE.bazel.lock @@ -13,8 +13,8 @@ "https://bcr.bazel.build/modules/apple_support/1.5.0/MODULE.bazel": "50341a62efbc483e8a2a6aec30994a58749bd7b885e18dd96aa8c33031e558ef", "https://bcr.bazel.build/modules/apple_support/1.5.0/source.json": "eb98a7627c0bc486b57f598ad8da50f6625d974c8f723e9ea71bd39f709c9862", "https://bcr.bazel.build/modules/aspect_bazel_lib/2.14.0/MODULE.bazel": "2b31ffcc9bdc8295b2167e07a757dbbc9ac8906e7028e5170a3708cecaac119f", - "https://bcr.bazel.build/modules/aspect_bazel_lib/2.17.1/MODULE.bazel": "9b027af55f619c7c444cead71061578fab6587e5e1303fa4ed61d49d2b1a7262", - "https://bcr.bazel.build/modules/aspect_bazel_lib/2.17.1/source.json": "18435c8f4914c046d6483fae4300d4b2eda06aed6b3cb99e682509dc2bc7e9a1", + "https://bcr.bazel.build/modules/aspect_bazel_lib/2.19.4/MODULE.bazel": "d39e4b18e594d81c526d7cfc513e7ecfa8ca9eb5b61488d1d790faa94b34f2d9", + "https://bcr.bazel.build/modules/aspect_bazel_lib/2.19.4/source.json": "506fa924e19fd8a33d617e33a17e4fce845f9ff9acb3a2aa7cf7300650698705", "https://bcr.bazel.build/modules/aspect_bazel_lib/2.8.1/MODULE.bazel": "812d2dd42f65dca362152101fbec418029cc8fd34cbad1a2fde905383d705838", "https://bcr.bazel.build/modules/bazel_features/1.1.0/MODULE.bazel": "cfd42ff3b815a5f39554d97182657f8c4b9719568eb7fded2b9135f084bf760b", "https://bcr.bazel.build/modules/bazel_features/1.1.1/MODULE.bazel": "27b8c79ef57efe08efccbd9dd6ef70d61b4798320b8d3c134fd571f78963dbcd", @@ -25,7 +25,8 @@ "https://bcr.bazel.build/modules/bazel_features/1.19.0/MODULE.bazel": "59adcdf28230d220f0067b1f435b8537dd033bfff8db21335ef9217919c7fb58", "https://bcr.bazel.build/modules/bazel_features/1.20.0/MODULE.bazel": "8b85300b9c8594752e0721a37210e34879d23adc219ed9dc8f4104a4a1750920", "https://bcr.bazel.build/modules/bazel_features/1.21.0/MODULE.bazel": "675642261665d8eea09989aa3b8afb5c37627f1be178382c320d1b46afba5e3b", - "https://bcr.bazel.build/modules/bazel_features/1.21.0/source.json": "3e8379efaaef53ce35b7b8ba419df829315a880cb0a030e5bb45c96d6d5ecb5f", + "https://bcr.bazel.build/modules/bazel_features/1.28.0/MODULE.bazel": "4b4200e6cbf8fa335b2c3f43e1d6ef3e240319c33d43d60cc0fbd4b87ece299d", + "https://bcr.bazel.build/modules/bazel_features/1.28.0/source.json": "16a3fc5b4483cb307643791f5a4b7365fa98d2e70da7c378cdbde55f0c0b32cf", "https://bcr.bazel.build/modules/bazel_features/1.4.1/MODULE.bazel": "e45b6bb2350aff3e442ae1111c555e27eac1d915e77775f6fdc4b351b758b5d7", "https://bcr.bazel.build/modules/bazel_features/1.9.0/MODULE.bazel": "885151d58d90d8d9c811eb75e3288c11f850e1d6b481a8c9f766adee4712358b", "https://bcr.bazel.build/modules/bazel_features/1.9.1/MODULE.bazel": "8f679097876a9b609ad1f60249c49d68bfab783dd9be012faf9d82547b14815a", @@ -41,8 +42,8 @@ "https://bcr.bazel.build/modules/bazel_skylib/1.7.0/MODULE.bazel": "0db596f4563de7938de764cc8deeabec291f55e8ec15299718b93c4423e9796d", "https://bcr.bazel.build/modules/bazel_skylib/1.7.1/MODULE.bazel": "3120d80c5861aa616222ec015332e5f8d3171e062e3e804a2a0253e1be26e59b", "https://bcr.bazel.build/modules/bazel_skylib/1.7.1/source.json": "f121b43eeefc7c29efbd51b83d08631e2347297c95aac9764a701f2a6a2bb953", - "https://bcr.bazel.build/modules/buildifier_prebuilt/8.0.3/MODULE.bazel": "4791b031727d1183c183a0b8fd5fc0fe8d8834c45f9a22efd26be6c962b9cfee", - "https://bcr.bazel.build/modules/buildifier_prebuilt/8.0.3/source.json": "68ee16210562f325ff961aabeb4d46ed10e6638b5e842cd48d8d83dea220dfbd", + "https://bcr.bazel.build/modules/buildifier_prebuilt/8.2.0.2/MODULE.bazel": "a9b689711d5b69f9db741649b218c119b9fdf82924ba390415037e09798edd03", + "https://bcr.bazel.build/modules/buildifier_prebuilt/8.2.0.2/source.json": "51eb0a4b38aaaeab7fa64361576d616c4d8bfd0f17a0a10184aeab7084d79f8e", "https://bcr.bazel.build/modules/buildozer/7.1.2/MODULE.bazel": "2e8dd40ede9c454042645fd8d8d0cd1527966aa5c919de86661e62953cd73d84", "https://bcr.bazel.build/modules/buildozer/7.1.2/source.json": "c9028a501d2db85793a6996205c8de120944f50a0d570438fcae0457a5f9d1f8", "https://bcr.bazel.build/modules/gazelle/0.32.0/MODULE.bazel": "b499f58a5d0d3537f3cf5b76d8ada18242f64ec474d8391247438bf04f58c7b8", @@ -99,8 +100,8 @@ "https://bcr.bazel.build/modules/rules_cc/0.0.6/MODULE.bazel": "abf360251023dfe3efcef65ab9d56beefa8394d4176dd29529750e1c57eaa33f", "https://bcr.bazel.build/modules/rules_cc/0.0.8/MODULE.bazel": "964c85c82cfeb6f3855e6a07054fdb159aced38e99a5eecf7bce9d53990afa3e", "https://bcr.bazel.build/modules/rules_cc/0.0.9/MODULE.bazel": "836e76439f354b89afe6a911a7adf59a6b2518fafb174483ad78a2a2fde7b1c5", - "https://bcr.bazel.build/modules/rules_cc/0.1.1/MODULE.bazel": "2f0222a6f229f0bf44cd711dc13c858dad98c62d52bd51d8fc3a764a83125513", - "https://bcr.bazel.build/modules/rules_cc/0.1.1/source.json": "d61627377bd7dd1da4652063e368d9366fc9a73920bfa396798ad92172cf645c", + "https://bcr.bazel.build/modules/rules_cc/0.1.2/MODULE.bazel": "557ddc3a96858ec0d465a87c0a931054d7dcfd6583af2c7ed3baf494407fd8d0", + "https://bcr.bazel.build/modules/rules_cc/0.1.2/source.json": "53fcb09b5816c83ca60d9d7493faf3bfaf410dfc2f15deb52d6ddd146b8d43f0", "https://bcr.bazel.build/modules/rules_foreign_cc/0.9.0/MODULE.bazel": "c9e8c682bf75b0e7c704166d79b599f93b72cfca5ad7477df596947891feeef6", "https://bcr.bazel.build/modules/rules_fuzzing/0.5.2/MODULE.bazel": "40c97d1144356f52905566c55811f13b299453a14ac7769dfba2ac38192337a8", "https://bcr.bazel.build/modules/rules_fuzzing/0.5.2/source.json": "c8b1e2c717646f1702290959a3302a178fb639d987ab61d548105019f11e527e", @@ -157,7 +158,8 @@ "https://bcr.bazel.build/modules/rules_shell/0.2.0/MODULE.bazel": "fda8a652ab3c7d8fee214de05e7a9916d8b28082234e8d2c0094505c5268ed3c", "https://bcr.bazel.build/modules/rules_shell/0.3.0/MODULE.bazel": "de4402cd12f4cc8fda2354fce179fdb068c0b9ca1ec2d2b17b3e21b24c1a937b", "https://bcr.bazel.build/modules/rules_shell/0.4.1/MODULE.bazel": "00e501db01bbf4e3e1dd1595959092c2fadf2087b2852d3f553b5370f5633592", - "https://bcr.bazel.build/modules/rules_shell/0.4.1/source.json": "4757bd277fe1567763991c4425b483477bb82e35e777a56fd846eb5cceda324a", + "https://bcr.bazel.build/modules/rules_shell/0.5.0/MODULE.bazel": "8c8447370594d45539f66858b602b0bb2cb2d3401a4ebb9ad25830c59c0f366d", + "https://bcr.bazel.build/modules/rules_shell/0.5.0/source.json": "3038276f07cbbdd1c432d1f80a2767e34143ffbb03cfa043f017e66adbba324c", "https://bcr.bazel.build/modules/stardoc/0.5.1/MODULE.bazel": "1a05d92974d0c122f5ccf09291442580317cdd859f07a8655f1db9a60374f9f8", "https://bcr.bazel.build/modules/stardoc/0.5.3/MODULE.bazel": "c7f6948dae6999bf0db32c1858ae345f112cacf98f174c7a8bb707e41b974f1c", "https://bcr.bazel.build/modules/stardoc/0.6.2/MODULE.bazel": "7060193196395f5dd668eda046ccbeacebfd98efc77fed418dbe2b82ffaa39fd", @@ -205,156 +207,6 @@ ] } }, - "@@buildifier_prebuilt~//:defs.bzl%buildifier_prebuilt_deps_extension": { - "general": { - "bzlTransitiveDigest": "iJF3Ti5GHJEiRxMrIeawImDqrsi/K3YJ2iOANQ9PgTY=", - "usagesDigest": "7usdeKzpXVqoKoZ61Dnl/vDdUwqpKKsBnVxdfeIzpH4=", - "recordedFileInputs": {}, - "recordedDirentsInputs": {}, - "envVariables": {}, - "generatedRepoSpecs": { - "buildifier_darwin_amd64": { - "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", - "ruleClassName": "http_file", - "attributes": { - "urls": [ - "https://github.com/bazelbuild/buildtools/releases/download/v8.0.3/buildifier-darwin-amd64" - ], - "downloaded_file_path": "buildifier", - "executable": true, - "sha256": "b7a3152cde0b3971b1107f2274afe778c5c154dcdf6c9c669a231e3c004f047e" - } - }, - "buildifier_darwin_arm64": { - "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", - "ruleClassName": "http_file", - "attributes": { - "urls": [ - "https://github.com/bazelbuild/buildtools/releases/download/v8.0.3/buildifier-darwin-arm64" - ], - "downloaded_file_path": "buildifier", - "executable": true, - "sha256": "674c663f7b5cd03c002f8ca834a8c1c008ccb527a0a2a132d08a7a355883b22d" - } - }, - "buildifier_linux_amd64": { - "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", - "ruleClassName": "http_file", - "attributes": { - "urls": [ - "https://github.com/bazelbuild/buildtools/releases/download/v8.0.3/buildifier-linux-amd64" - ], - "downloaded_file_path": "buildifier", - "executable": true, - "sha256": "c969487c1af85e708576c8dfdd0bb4681eae58aad79e68ae48882c70871841b7" - } - }, - "buildifier_linux_arm64": { - "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", - "ruleClassName": "http_file", - "attributes": { - "urls": [ - "https://github.com/bazelbuild/buildtools/releases/download/v8.0.3/buildifier-linux-arm64" - ], - "downloaded_file_path": "buildifier", - "executable": true, - "sha256": "bdd9b92e2c65d46affeecaefb54e68d34c272d1f4a8c5b54929a3e92ab78820a" - } - }, - "buildifier_windows_amd64": { - "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", - "ruleClassName": "http_file", - "attributes": { - "urls": [ - "https://github.com/bazelbuild/buildtools/releases/download/v8.0.3/buildifier-windows-amd64.exe" - ], - "downloaded_file_path": "buildifier.exe", - "executable": true, - "sha256": "63a242f57e253efe7b9573d739c08a3d0e628efd84015c8dad17d87b6429e443" - } - }, - "buildozer_darwin_amd64": { - "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", - "ruleClassName": "http_file", - "attributes": { - "urls": [ - "https://github.com/bazelbuild/buildtools/releases/download/v8.0.3/buildozer-darwin-amd64" - ], - "downloaded_file_path": "buildozer", - "executable": true, - "sha256": "7aa7929faddcee5a879135356bb4d38af3e895893c78d361e7cdb8dfb3e7d5e4" - } - }, - "buildozer_darwin_arm64": { - "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", - "ruleClassName": "http_file", - "attributes": { - "urls": [ - "https://github.com/bazelbuild/buildtools/releases/download/v8.0.3/buildozer-darwin-arm64" - ], - "downloaded_file_path": "buildozer", - "executable": true, - "sha256": "33b776862c31bfb4e2e6e88186cae02746d9084da8b7341930e77d42718277cc" - } - }, - "buildozer_linux_amd64": { - "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", - "ruleClassName": "http_file", - "attributes": { - "urls": [ - "https://github.com/bazelbuild/buildtools/releases/download/v8.0.3/buildozer-linux-amd64" - ], - "downloaded_file_path": "buildozer", - "executable": true, - "sha256": "775d17118aecd023352e75611dbe7c12a340e23615ffb270a1dec3f339239949" - } - }, - "buildozer_linux_arm64": { - "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", - "ruleClassName": "http_file", - "attributes": { - "urls": [ - "https://github.com/bazelbuild/buildtools/releases/download/v8.0.3/buildozer-linux-arm64" - ], - "downloaded_file_path": "buildozer", - "executable": true, - "sha256": "058ad60f279a7b1db339bb287aed2056a992eddfe1b5d2e56d86256bdc9a93b3" - } - }, - "buildozer_windows_amd64": { - "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", - "ruleClassName": "http_file", - "attributes": { - "urls": [ - "https://github.com/bazelbuild/buildtools/releases/download/v8.0.3/buildozer-windows-amd64.exe" - ], - "downloaded_file_path": "buildozer.exe", - "executable": true, - "sha256": "5ba106b25230e0e321b7259bee325ae6fa5b5771e54163ad865b1d18856f59ca" - } - }, - "buildifier_prebuilt_toolchains": { - "bzlFile": "@@buildifier_prebuilt~//:defs.bzl", - "ruleClassName": "_buildifier_toolchain_setup", - "attributes": { - "assets_json": "[{\"arch\":\"amd64\",\"name\":\"buildifier\",\"platform\":\"darwin\",\"sha256\":\"b7a3152cde0b3971b1107f2274afe778c5c154dcdf6c9c669a231e3c004f047e\",\"version\":\"v8.0.3\"},{\"arch\":\"arm64\",\"name\":\"buildifier\",\"platform\":\"darwin\",\"sha256\":\"674c663f7b5cd03c002f8ca834a8c1c008ccb527a0a2a132d08a7a355883b22d\",\"version\":\"v8.0.3\"},{\"arch\":\"amd64\",\"name\":\"buildifier\",\"platform\":\"linux\",\"sha256\":\"c969487c1af85e708576c8dfdd0bb4681eae58aad79e68ae48882c70871841b7\",\"version\":\"v8.0.3\"},{\"arch\":\"arm64\",\"name\":\"buildifier\",\"platform\":\"linux\",\"sha256\":\"bdd9b92e2c65d46affeecaefb54e68d34c272d1f4a8c5b54929a3e92ab78820a\",\"version\":\"v8.0.3\"},{\"arch\":\"amd64\",\"name\":\"buildifier\",\"platform\":\"windows\",\"sha256\":\"63a242f57e253efe7b9573d739c08a3d0e628efd84015c8dad17d87b6429e443\",\"version\":\"v8.0.3\"},{\"arch\":\"amd64\",\"name\":\"buildozer\",\"platform\":\"darwin\",\"sha256\":\"7aa7929faddcee5a879135356bb4d38af3e895893c78d361e7cdb8dfb3e7d5e4\",\"version\":\"v8.0.3\"},{\"arch\":\"arm64\",\"name\":\"buildozer\",\"platform\":\"darwin\",\"sha256\":\"33b776862c31bfb4e2e6e88186cae02746d9084da8b7341930e77d42718277cc\",\"version\":\"v8.0.3\"},{\"arch\":\"amd64\",\"name\":\"buildozer\",\"platform\":\"linux\",\"sha256\":\"775d17118aecd023352e75611dbe7c12a340e23615ffb270a1dec3f339239949\",\"version\":\"v8.0.3\"},{\"arch\":\"arm64\",\"name\":\"buildozer\",\"platform\":\"linux\",\"sha256\":\"058ad60f279a7b1db339bb287aed2056a992eddfe1b5d2e56d86256bdc9a93b3\",\"version\":\"v8.0.3\"},{\"arch\":\"amd64\",\"name\":\"buildozer\",\"platform\":\"windows\",\"sha256\":\"5ba106b25230e0e321b7259bee325ae6fa5b5771e54163ad865b1d18856f59ca\",\"version\":\"v8.0.3\"}]" - } - } - }, - "recordedRepoMappingEntries": [ - [ - "buildifier_prebuilt~", - "bazel_skylib", - "bazel_skylib~" - ], - [ - "buildifier_prebuilt~", - "bazel_tools", - "bazel_tools" - ] - ] - } - }, "@@pybind11_bazel~//:python_configure.bzl%extension": { "general": { "bzlTransitiveDigest": "whINYge95GgPtysKDbNHQ0ZlWYdtKybHs5y2tLF+x7Q=", From dc9fca34a961441ff673d8449c443a1b3e53c519 Mon Sep 17 00:00:00 2001 From: edgelessci <71088502+edgelessci@users.noreply.github.com> Date: Wed, 25 Jun 2025 08:09:37 +0200 Subject: [PATCH 310/311] image: update measurements and image version (#3869) Co-authored-by: edgelessci --- .../measurements/measurements_enterprise.go | 16 ++++++++-------- internal/config/image_enterprise.go | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/internal/attestation/measurements/measurements_enterprise.go b/internal/attestation/measurements/measurements_enterprise.go index 417e67ec9..71e9f182b 100644 --- a/internal/attestation/measurements/measurements_enterprise.go +++ b/internal/attestation/measurements/measurements_enterprise.go @@ -19,14 +19,14 @@ package measurements // revive:disable:var-naming var ( - aws_AWSNitroTPM = M{0: {Expected: []byte{0x73, 0x7f, 0x76, 0x7a, 0x12, 0xf5, 0x4e, 0x70, 0xee, 0xcb, 0xc8, 0x68, 0x40, 0x11, 0x32, 0x3a, 0xe2, 0xfe, 0x2d, 0xd9, 0xf9, 0x07, 0x85, 0x57, 0x79, 0x69, 0xd7, 0xa2, 0x01, 0x3e, 0x8c, 0x12}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x84, 0x9d, 0x2d, 0x6f, 0x8c, 0x59, 0x89, 0x78, 0xad, 0x0b, 0xa6, 0xee, 0x13, 0xdb, 0x86, 0xe4, 0xd4, 0x2f, 0x93, 0xe5, 0x57, 0x56, 0xd3, 0x8d, 0x80, 0xab, 0xe6, 0x26, 0xe0, 0xa1, 0xeb, 0x85}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x3f, 0x10, 0x4e, 0x9d, 0xb6, 0xb1, 0xb9, 0x3a, 0x78, 0xb8, 0xa7, 0x41, 0x99, 0x3a, 0xab, 0xdf, 0x3c, 0xbe, 0x88, 0xd6, 0x7d, 0x58, 0x94, 0xe0, 0x91, 0x2d, 0x22, 0x40, 0xc9, 0x5a, 0xd8, 0x70}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xd1, 0x52, 0x66, 0xa4, 0x06, 0x5a, 0xff, 0x9c, 0xf3, 0x8b, 0x30, 0x95, 0x87, 0x83, 0x1f, 0xda, 0xbe, 0x85, 0xaa, 0xf4, 0x3e, 0xff, 0xd9, 0x06, 0xdb, 0xf3, 0x8d, 0xb0, 0xac, 0x85, 0x8e, 0xa9}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - aws_AWSSEVSNP = M{0: {Expected: []byte{0xd6, 0xdf, 0x85, 0x53, 0x58, 0xf5, 0xb1, 0x0f, 0x06, 0xf0, 0xfa, 0xb3, 0xf4, 0x08, 0xad, 0x26, 0xcd, 0x16, 0x5a, 0x29, 0x49, 0xba, 0xd6, 0x9e, 0x2c, 0xc7, 0x56, 0x92, 0x52, 0x9e, 0x66, 0x2a}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x42, 0xe4, 0x35, 0x9e, 0xa7, 0xff, 0x2c, 0xae, 0xe9, 0xe2, 0x40, 0x9d, 0x19, 0x7a, 0xa6, 0x54, 0x77, 0x3a, 0x2e, 0x74, 0x6c, 0xe2, 0xd0, 0x7c, 0xbd, 0xf7, 0xd6, 0x1e, 0x86, 0x67, 0x7d, 0x40}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x10, 0x53, 0x76, 0xc2, 0x59, 0xfe, 0x9e, 0xb9, 0x8b, 0x8a, 0x68, 0xb7, 0x5b, 0xa0, 0x5b, 0x7a, 0xab, 0xa4, 0xe4, 0x2f, 0x1b, 0xba, 0xfd, 0x65, 0xe0, 0xb7, 0xfa, 0xdc, 0x37, 0x9e, 0x63, 0x0c}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xfd, 0x04, 0xbe, 0xd6, 0xe7, 0x7f, 0x19, 0xfd, 0xf4, 0xe4, 0xf5, 0x3b, 0x2e, 0xe6, 0xa7, 0xa4, 0x01, 0x00, 0xbf, 0x79, 0x4c, 0x88, 0x7b, 0x93, 0xd4, 0x2e, 0xde, 0x73, 0x0e, 0xb8, 0x38, 0x70}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - azure_AzureSEVSNP = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x99, 0xc6, 0x70, 0xce, 0x3c, 0x0f, 0x8c, 0xb9, 0x7e, 0x9e, 0x9f, 0x7b, 0xe0, 0x65, 0x37, 0x6c, 0xe8, 0x1b, 0xb8, 0xe4, 0x76, 0xc5, 0x43, 0x02, 0x79, 0x80, 0x56, 0x9b, 0xba, 0xc3, 0x33, 0x84}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x35, 0x63, 0xfe, 0x8f, 0x44, 0x86, 0xf0, 0xea, 0x94, 0xdc, 0xa4, 0x0b, 0xea, 0xd0, 0xea, 0x99, 0xe8, 0x59, 0xc3, 0x30, 0xbb, 0xb5, 0x11, 0x1e, 0x50, 0x84, 0x3e, 0x36, 0x52, 0xc8, 0xe1, 0x96}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x68, 0x96, 0x89, 0x37, 0xab, 0x75, 0x99, 0xca, 0x54, 0x59, 0x1a, 0x3e, 0xae, 0x01, 0xc1, 0xb5, 0x6d, 0xbf, 0x3d, 0x15, 0xa8, 0x12, 0xa8, 0x4f, 0xeb, 0xe0, 0x49, 0xe8, 0xfd, 0xea, 0xfa, 0xed}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - azure_AzureTDX = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xc2, 0xcc, 0xce, 0xc3, 0x7d, 0x1d, 0x06, 0xaf, 0xe1, 0x42, 0xc3, 0x09, 0xe1, 0x98, 0x59, 0x33, 0x53, 0x7b, 0x55, 0x6b, 0x45, 0xd3, 0xf4, 0xfa, 0x8f, 0xc2, 0xf7, 0x9e, 0x74, 0x61, 0x25, 0xa5}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x39, 0x0c, 0x99, 0xff, 0xe8, 0xab, 0x09, 0x7e, 0x06, 0x86, 0x48, 0xcf, 0xc2, 0x3c, 0xb0, 0xb9, 0x9b, 0xb1, 0xc8, 0xb0, 0xbb, 0x55, 0x86, 0x24, 0xff, 0x94, 0xce, 0xbb, 0xe9, 0xe8, 0x15, 0xa2}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xc0, 0x9e, 0x19, 0xc8, 0x23, 0x9a, 0x44, 0x94, 0xb8, 0x36, 0x6b, 0x2a, 0xf3, 0x3b, 0x76, 0x2e, 0xa5, 0x3c, 0x78, 0xc0, 0x61, 0x38, 0x5d, 0x66, 0x01, 0x8d, 0x91, 0x22, 0x96, 0xae, 0xe2, 0xe5}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + aws_AWSNitroTPM = M{0: {Expected: []byte{0x73, 0x7f, 0x76, 0x7a, 0x12, 0xf5, 0x4e, 0x70, 0xee, 0xcb, 0xc8, 0x68, 0x40, 0x11, 0x32, 0x3a, 0xe2, 0xfe, 0x2d, 0xd9, 0xf9, 0x07, 0x85, 0x57, 0x79, 0x69, 0xd7, 0xa2, 0x01, 0x3e, 0x8c, 0x12}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x27, 0x57, 0x4c, 0x9b, 0xb3, 0x66, 0x0f, 0x3a, 0x51, 0x4f, 0xa0, 0xbb, 0xc9, 0x5a, 0x51, 0x1b, 0xd6, 0xfa, 0x6e, 0x3f, 0x04, 0xd5, 0xd1, 0x64, 0x77, 0x56, 0x3c, 0x9a, 0xee, 0x91, 0x49, 0x35}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x80, 0xf8, 0xa3, 0x2b, 0xd1, 0x99, 0xab, 0x47, 0xa8, 0xa5, 0x37, 0xf3, 0x32, 0xab, 0xdd, 0x31, 0x51, 0x66, 0x7b, 0x08, 0x7f, 0x1e, 0x08, 0x22, 0x16, 0x29, 0xa6, 0x49, 0xa6, 0xfd, 0xcf, 0x14}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x23, 0x17, 0xfd, 0xe9, 0x53, 0x27, 0x0e, 0x4e, 0x1d, 0x3f, 0x61, 0x5a, 0x3b, 0xca, 0x89, 0x34, 0x0f, 0x7d, 0x24, 0x7d, 0xdf, 0xa6, 0x85, 0x18, 0x40, 0x92, 0x4a, 0xa7, 0xfb, 0x02, 0xc4, 0xba}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + aws_AWSSEVSNP = M{0: {Expected: []byte{0xd6, 0xdf, 0x85, 0x53, 0x58, 0xf5, 0xb1, 0x0f, 0x06, 0xf0, 0xfa, 0xb3, 0xf4, 0x08, 0xad, 0x26, 0xcd, 0x16, 0x5a, 0x29, 0x49, 0xba, 0xd6, 0x9e, 0x2c, 0xc7, 0x56, 0x92, 0x52, 0x9e, 0x66, 0x2a}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xf1, 0xfa, 0x3b, 0xbe, 0xbd, 0xed, 0xd3, 0xee, 0x8f, 0xc9, 0xb8, 0xb0, 0x39, 0xba, 0x42, 0xe0, 0x85, 0xa4, 0x20, 0xe9, 0x8b, 0x1f, 0x13, 0x2d, 0x1e, 0xe3, 0xd0, 0x07, 0xc1, 0xb0, 0x6c, 0xb6}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xf6, 0xf5, 0xb8, 0xfa, 0xfa, 0xe4, 0x19, 0x09, 0x39, 0xcb, 0x3b, 0x28, 0x87, 0x49, 0x08, 0x8e, 0xaf, 0xa1, 0x71, 0x98, 0xdc, 0x1f, 0x41, 0x75, 0xe8, 0x6b, 0x6c, 0xb5, 0x2e, 0xb8, 0x42, 0x0b}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x4b, 0x02, 0xc7, 0x9a, 0x21, 0x22, 0x8e, 0x3a, 0x42, 0x1a, 0x46, 0x22, 0xc5, 0xe0, 0xd4, 0x4a, 0x77, 0xfa, 0xad, 0xc2, 0x17, 0x07, 0xd6, 0x7e, 0x75, 0xfb, 0x3d, 0x9d, 0x4e, 0x9f, 0xc4, 0xae}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + azure_AzureSEVSNP = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x82, 0x47, 0x78, 0x2a, 0xf3, 0x5a, 0x14, 0x19, 0x15, 0xea, 0xa7, 0x3c, 0x40, 0x2b, 0x8a, 0x33, 0xd1, 0x46, 0xfa, 0x47, 0xe2, 0x57, 0x65, 0xec, 0xe6, 0x23, 0x42, 0x76, 0x97, 0xa5, 0x04, 0x75}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x8c, 0x0e, 0xcb, 0x46, 0xaf, 0xf1, 0xa2, 0xe3, 0xdd, 0x07, 0x96, 0x7d, 0x11, 0xc0, 0x29, 0x70, 0x66, 0xbd, 0x69, 0x4b, 0xfb, 0x5e, 0xaa, 0x6c, 0xba, 0xcd, 0xe7, 0x2c, 0x5c, 0xc9, 0x99, 0x21}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xc6, 0x43, 0x0d, 0x6e, 0x29, 0x01, 0x30, 0xe7, 0xfa, 0x2e, 0xd5, 0x86, 0x23, 0xfe, 0x1f, 0xe5, 0x76, 0x0c, 0x70, 0x6c, 0xa7, 0x25, 0x24, 0x43, 0x11, 0x3c, 0x94, 0xaa, 0x96, 0xf3, 0x46, 0x40}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + azure_AzureTDX = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xa9, 0xe9, 0x93, 0xc6, 0x54, 0xf0, 0x24, 0x25, 0x3b, 0xc1, 0xa7, 0xcc, 0xfe, 0x4c, 0xdf, 0x40, 0xdb, 0xde, 0x8f, 0xdc, 0xd1, 0x25, 0xd5, 0xd2, 0x38, 0x51, 0x88, 0x51, 0x89, 0xe7, 0xee, 0xce}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x17, 0x70, 0xc2, 0x4f, 0xa5, 0x60, 0xd8, 0xa5, 0x38, 0x77, 0xef, 0x36, 0x66, 0x3c, 0x44, 0x67, 0xed, 0xb2, 0x0b, 0x1c, 0x63, 0x1c, 0xc3, 0x04, 0xc5, 0xd4, 0xf9, 0xdf, 0x97, 0x2b, 0x12, 0x1f}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xbf, 0x8e, 0x05, 0x2e, 0x73, 0xff, 0xb7, 0x53, 0xb7, 0x5f, 0xcf, 0x7f, 0xde, 0x0e, 0x7e, 0x3d, 0xd1, 0x34, 0xff, 0x25, 0x6e, 0x42, 0xc9, 0xda, 0x1e, 0xb5, 0xc2, 0x64, 0xfc, 0x4c, 0xa4, 0x59}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} azure_AzureTrustedLaunch M - gcp_GCPSEVES = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x70, 0xb9, 0xaf, 0xb7, 0xb3, 0x9e, 0xcf, 0x07, 0xbe, 0xd5, 0xf8, 0xd6, 0xc8, 0x4b, 0x67, 0xde, 0x5a, 0x1d, 0xc6, 0x3d, 0xcc, 0xaa, 0x6d, 0xcf, 0x74, 0x52, 0xe4, 0x8d, 0x85, 0xaa, 0xdd, 0xf6}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xef, 0xd8, 0xf7, 0xe4, 0x63, 0x39, 0x9d, 0x60, 0x9e, 0x17, 0x36, 0x05, 0xa4, 0xcd, 0xb0, 0xf6, 0x2c, 0x8d, 0xe2, 0x2d, 0xde, 0x54, 0xc9, 0x6a, 0xc0, 0x34, 0x7b, 0x55, 0xeb, 0x0a, 0xb4, 0x26}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xb5, 0x8e, 0xd6, 0x09, 0x7c, 0x06, 0x8d, 0xe7, 0x5b, 0x2f, 0x32, 0xa8, 0x84, 0x7b, 0xeb, 0xae, 0x7e, 0x7c, 0x4d, 0xa6, 0x75, 0xfc, 0x0b, 0x4a, 0xf2, 0xc0, 0xbc, 0x7a, 0x7e, 0xfb, 0x93, 0xab}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - gcp_GCPSEVSNP = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x47, 0x13, 0x73, 0x1f, 0x47, 0xe5, 0xf0, 0xda, 0x50, 0x06, 0xde, 0x5f, 0x0f, 0xc5, 0xbd, 0xcf, 0x52, 0xd3, 0x09, 0x13, 0x46, 0x36, 0xb1, 0xbc, 0x97, 0xb3, 0x89, 0xc6, 0x10, 0xe7, 0x9f, 0x50}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x66, 0xba, 0xcd, 0x5b, 0x0b, 0x67, 0x3b, 0x19, 0xff, 0xf1, 0x39, 0x01, 0x30, 0x10, 0x06, 0x61, 0x97, 0x8a, 0xc5, 0xb0, 0x57, 0xbc, 0x69, 0x7c, 0x64, 0x31, 0x2a, 0x7f, 0x38, 0x50, 0x77, 0x50}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x2e, 0xfe, 0x7d, 0x40, 0xfe, 0xf0, 0xb8, 0x56, 0xf6, 0x11, 0xe8, 0xaf, 0x18, 0x69, 0xce, 0x82, 0x07, 0xe5, 0x42, 0x29, 0xc5, 0x4b, 0x53, 0xcf, 0xf0, 0xdb, 0x37, 0x1f, 0x39, 0xc7, 0x01, 0x3d}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - openstack_QEMUVTPM = M{4: {Expected: []byte{0xa3, 0xc0, 0xc1, 0xba, 0x47, 0x76, 0xf7, 0xc2, 0xcb, 0xa5, 0xc0, 0x20, 0xd5, 0x62, 0xfd, 0xf4, 0xd9, 0x46, 0xae, 0x0c, 0x8f, 0x42, 0x7b, 0x91, 0x9b, 0x0d, 0x55, 0xa3, 0x69, 0x8f, 0x14, 0x5f}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xbe, 0x00, 0xb0, 0xe9, 0xca, 0xbd, 0x8f, 0x95, 0x27, 0x91, 0x16, 0x2f, 0x36, 0xc9, 0x61, 0x1a, 0xda, 0x86, 0xeb, 0x46, 0x1a, 0x19, 0xbd, 0x6f, 0x86, 0x2b, 0x8f, 0xaa, 0x7e, 0xb5, 0x3f, 0x9f}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x22, 0x3c, 0x88, 0x75, 0x9c, 0x08, 0x77, 0x38, 0xe7, 0xfc, 0xbc, 0xaf, 0x9c, 0xf2, 0x76, 0xd8, 0xc9, 0xe5, 0x22, 0xd7, 0xa4, 0x72, 0x2d, 0x92, 0xf9, 0x1e, 0x58, 0x05, 0x5b, 0xf1, 0x12, 0x45}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + gcp_GCPSEVES = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xe6, 0x80, 0x78, 0xd7, 0xe1, 0x27, 0x46, 0x30, 0x3b, 0xb4, 0x56, 0x2e, 0x34, 0x96, 0x42, 0xb1, 0x10, 0xe0, 0xf0, 0x18, 0x76, 0x75, 0xd3, 0x99, 0x0f, 0x39, 0x16, 0x9a, 0x18, 0x04, 0x7c, 0x21}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x9b, 0x36, 0x38, 0x0b, 0xd2, 0x61, 0x33, 0x88, 0x93, 0xdd, 0x2b, 0xb9, 0x63, 0xe5, 0x54, 0x77, 0xbd, 0x1b, 0x7a, 0x27, 0xd3, 0xe3, 0x43, 0x16, 0x16, 0x0f, 0x95, 0x2c, 0x9a, 0x20, 0xe1, 0xd6}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xd0, 0x86, 0x71, 0xf5, 0x46, 0x4a, 0x98, 0x8f, 0x63, 0xa7, 0xff, 0x75, 0x1c, 0xf8, 0x18, 0x29, 0x38, 0xf9, 0x45, 0xad, 0xa8, 0x03, 0xd0, 0xa8, 0x0d, 0x6d, 0x9d, 0x65, 0x7b, 0xe8, 0x7c, 0x58}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + gcp_GCPSEVSNP = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x26, 0xbb, 0xf2, 0x30, 0xd8, 0xf3, 0x53, 0x5e, 0xd7, 0xec, 0xdf, 0xce, 0x05, 0xc1, 0xeb, 0x57, 0x4a, 0xe3, 0xed, 0xeb, 0x9c, 0xd1, 0xf1, 0x32, 0x50, 0xd0, 0x3e, 0x48, 0x72, 0x12, 0x84, 0xdf}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x91, 0x93, 0x4c, 0x69, 0x1b, 0xc1, 0xea, 0xe1, 0x48, 0x37, 0x4d, 0x45, 0xa3, 0x24, 0x35, 0xb3, 0x3b, 0xe2, 0x11, 0x7a, 0x17, 0xba, 0x1a, 0xd5, 0xd4, 0x7d, 0xf5, 0x8e, 0xbb, 0x3f, 0xc5, 0x69}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xfe, 0xf3, 0x72, 0xd9, 0x62, 0x0f, 0xff, 0x0d, 0x0d, 0x89, 0x36, 0xa9, 0xab, 0x3f, 0x44, 0xda, 0xfb, 0xb3, 0xb8, 0x42, 0x4c, 0x86, 0xf4, 0xfb, 0x8c, 0xaf, 0xb2, 0x29, 0x79, 0xc9, 0x4b, 0x97}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + openstack_QEMUVTPM = M{4: {Expected: []byte{0xed, 0xe1, 0xb3, 0xc8, 0x42, 0x4a, 0x1b, 0xb1, 0x7b, 0x82, 0x01, 0xa9, 0x50, 0xc7, 0x59, 0x8e, 0xbd, 0x2d, 0xd2, 0xe3, 0x68, 0x2f, 0xd7, 0x52, 0x7c, 0x49, 0x7a, 0x0f, 0x72, 0x4e, 0xf2, 0x6c}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x81, 0x27, 0x19, 0x90, 0x0d, 0x86, 0xad, 0x4b, 0x8a, 0x7c, 0xd5, 0xe8, 0x54, 0xb1, 0xc7, 0x81, 0x45, 0x80, 0x00, 0x86, 0xaf, 0xca, 0x1b, 0x5a, 0x44, 0x6f, 0x82, 0x02, 0x0a, 0x4d, 0xe2, 0x06}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xbe, 0xbf, 0xdc, 0x50, 0xb9, 0x7b, 0x38, 0xe5, 0x3d, 0xb0, 0x18, 0x45, 0x99, 0xfd, 0xe8, 0xbc, 0x08, 0xd4, 0xf9, 0x5f, 0xf8, 0x51, 0xe0, 0x90, 0xd9, 0x1e, 0xe6, 0xb1, 0xa1, 0x15, 0xbc, 0x7f}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} qemu_QEMUTDX M - qemu_QEMUVTPM = M{4: {Expected: []byte{0x34, 0x78, 0xb5, 0x6d, 0xe4, 0x18, 0x28, 0x86, 0x4f, 0xb1, 0x0b, 0xec, 0xb9, 0x4d, 0x7d, 0x01, 0x9f, 0xa4, 0xba, 0x51, 0xf4, 0xe3, 0xbb, 0x4c, 0x7b, 0x2a, 0xb4, 0x67, 0x0e, 0x12, 0x86, 0x22}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x49, 0xe6, 0x48, 0xc6, 0x06, 0xee, 0xb4, 0xca, 0xf1, 0xf9, 0xf3, 0xc8, 0xdb, 0x59, 0xde, 0x8f, 0xcf, 0xc8, 0xab, 0x80, 0xbc, 0xff, 0x73, 0x07, 0xea, 0x32, 0xef, 0xa6, 0xcb, 0xdd, 0x13, 0x40}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xc2, 0x7f, 0xb9, 0x7d, 0x12, 0x79, 0x85, 0xff, 0xa4, 0x25, 0x58, 0xfe, 0xd5, 0xbf, 0xe8, 0x3e, 0xeb, 0x48, 0x0d, 0x6a, 0x3e, 0xac, 0xe1, 0x4a, 0xdf, 0x83, 0x3a, 0x4d, 0x70, 0x2f, 0xd2, 0x29}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + qemu_QEMUVTPM = M{4: {Expected: []byte{0x94, 0x46, 0x8c, 0x7e, 0xc1, 0xfe, 0x8b, 0x6f, 0xca, 0x7a, 0xbb, 0x7c, 0x70, 0x7a, 0x1c, 0xd3, 0x30, 0xff, 0x02, 0x32, 0x57, 0x51, 0x40, 0xcf, 0x9e, 0xd3, 0x0f, 0xab, 0x3b, 0xbf, 0xa6, 0x2b}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xf5, 0xeb, 0x46, 0xfa, 0x20, 0xb8, 0xf4, 0x4a, 0xa6, 0xbf, 0xf8, 0x17, 0x58, 0x97, 0x8b, 0x20, 0x81, 0x66, 0x11, 0x6e, 0x8d, 0x1d, 0xf9, 0xcf, 0x4d, 0xc1, 0x95, 0xfb, 0x5c, 0xe7, 0x1e, 0x84}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x72, 0x95, 0xb7, 0x61, 0x41, 0x3e, 0x15, 0xfc, 0x18, 0xb0, 0xd8, 0x37, 0x46, 0x2c, 0x4f, 0xa0, 0xf4, 0xc2, 0xac, 0xb5, 0x65, 0xdc, 0x2b, 0xc0, 0x83, 0x4d, 0xb6, 0xb8, 0xe1, 0x43, 0x4b, 0x95}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} ) diff --git a/internal/config/image_enterprise.go b/internal/config/image_enterprise.go index 0cfcdd91c..685986a36 100644 --- a/internal/config/image_enterprise.go +++ b/internal/config/image_enterprise.go @@ -10,5 +10,5 @@ package config const ( // defaultImage is the default image to use. - defaultImage = "ref/main/stream/nightly/v2.24.0-pre.0.20250618074007-541e77969755" + defaultImage = "ref/main/stream/nightly/v2.24.0-pre.0.20250624103949-1216a2af72d0" ) From 95f17a6d06230243f08c9a1565c3082d0cc24dde Mon Sep 17 00:00:00 2001 From: edgelessci <71088502+edgelessci@users.noreply.github.com> Date: Fri, 27 Jun 2025 08:07:32 +0200 Subject: [PATCH 311/311] image: update measurements and image version (#3870) Co-authored-by: edgelessci --- .../measurements/measurements_enterprise.go | 16 ++++++++-------- internal/config/image_enterprise.go | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/internal/attestation/measurements/measurements_enterprise.go b/internal/attestation/measurements/measurements_enterprise.go index 71e9f182b..97e76e972 100644 --- a/internal/attestation/measurements/measurements_enterprise.go +++ b/internal/attestation/measurements/measurements_enterprise.go @@ -19,14 +19,14 @@ package measurements // revive:disable:var-naming var ( - aws_AWSNitroTPM = M{0: {Expected: []byte{0x73, 0x7f, 0x76, 0x7a, 0x12, 0xf5, 0x4e, 0x70, 0xee, 0xcb, 0xc8, 0x68, 0x40, 0x11, 0x32, 0x3a, 0xe2, 0xfe, 0x2d, 0xd9, 0xf9, 0x07, 0x85, 0x57, 0x79, 0x69, 0xd7, 0xa2, 0x01, 0x3e, 0x8c, 0x12}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x27, 0x57, 0x4c, 0x9b, 0xb3, 0x66, 0x0f, 0x3a, 0x51, 0x4f, 0xa0, 0xbb, 0xc9, 0x5a, 0x51, 0x1b, 0xd6, 0xfa, 0x6e, 0x3f, 0x04, 0xd5, 0xd1, 0x64, 0x77, 0x56, 0x3c, 0x9a, 0xee, 0x91, 0x49, 0x35}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x80, 0xf8, 0xa3, 0x2b, 0xd1, 0x99, 0xab, 0x47, 0xa8, 0xa5, 0x37, 0xf3, 0x32, 0xab, 0xdd, 0x31, 0x51, 0x66, 0x7b, 0x08, 0x7f, 0x1e, 0x08, 0x22, 0x16, 0x29, 0xa6, 0x49, 0xa6, 0xfd, 0xcf, 0x14}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x23, 0x17, 0xfd, 0xe9, 0x53, 0x27, 0x0e, 0x4e, 0x1d, 0x3f, 0x61, 0x5a, 0x3b, 0xca, 0x89, 0x34, 0x0f, 0x7d, 0x24, 0x7d, 0xdf, 0xa6, 0x85, 0x18, 0x40, 0x92, 0x4a, 0xa7, 0xfb, 0x02, 0xc4, 0xba}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - aws_AWSSEVSNP = M{0: {Expected: []byte{0xd6, 0xdf, 0x85, 0x53, 0x58, 0xf5, 0xb1, 0x0f, 0x06, 0xf0, 0xfa, 0xb3, 0xf4, 0x08, 0xad, 0x26, 0xcd, 0x16, 0x5a, 0x29, 0x49, 0xba, 0xd6, 0x9e, 0x2c, 0xc7, 0x56, 0x92, 0x52, 0x9e, 0x66, 0x2a}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xf1, 0xfa, 0x3b, 0xbe, 0xbd, 0xed, 0xd3, 0xee, 0x8f, 0xc9, 0xb8, 0xb0, 0x39, 0xba, 0x42, 0xe0, 0x85, 0xa4, 0x20, 0xe9, 0x8b, 0x1f, 0x13, 0x2d, 0x1e, 0xe3, 0xd0, 0x07, 0xc1, 0xb0, 0x6c, 0xb6}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xf6, 0xf5, 0xb8, 0xfa, 0xfa, 0xe4, 0x19, 0x09, 0x39, 0xcb, 0x3b, 0x28, 0x87, 0x49, 0x08, 0x8e, 0xaf, 0xa1, 0x71, 0x98, 0xdc, 0x1f, 0x41, 0x75, 0xe8, 0x6b, 0x6c, 0xb5, 0x2e, 0xb8, 0x42, 0x0b}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x4b, 0x02, 0xc7, 0x9a, 0x21, 0x22, 0x8e, 0x3a, 0x42, 0x1a, 0x46, 0x22, 0xc5, 0xe0, 0xd4, 0x4a, 0x77, 0xfa, 0xad, 0xc2, 0x17, 0x07, 0xd6, 0x7e, 0x75, 0xfb, 0x3d, 0x9d, 0x4e, 0x9f, 0xc4, 0xae}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - azure_AzureSEVSNP = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x82, 0x47, 0x78, 0x2a, 0xf3, 0x5a, 0x14, 0x19, 0x15, 0xea, 0xa7, 0x3c, 0x40, 0x2b, 0x8a, 0x33, 0xd1, 0x46, 0xfa, 0x47, 0xe2, 0x57, 0x65, 0xec, 0xe6, 0x23, 0x42, 0x76, 0x97, 0xa5, 0x04, 0x75}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x8c, 0x0e, 0xcb, 0x46, 0xaf, 0xf1, 0xa2, 0xe3, 0xdd, 0x07, 0x96, 0x7d, 0x11, 0xc0, 0x29, 0x70, 0x66, 0xbd, 0x69, 0x4b, 0xfb, 0x5e, 0xaa, 0x6c, 0xba, 0xcd, 0xe7, 0x2c, 0x5c, 0xc9, 0x99, 0x21}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xc6, 0x43, 0x0d, 0x6e, 0x29, 0x01, 0x30, 0xe7, 0xfa, 0x2e, 0xd5, 0x86, 0x23, 0xfe, 0x1f, 0xe5, 0x76, 0x0c, 0x70, 0x6c, 0xa7, 0x25, 0x24, 0x43, 0x11, 0x3c, 0x94, 0xaa, 0x96, 0xf3, 0x46, 0x40}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - azure_AzureTDX = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xa9, 0xe9, 0x93, 0xc6, 0x54, 0xf0, 0x24, 0x25, 0x3b, 0xc1, 0xa7, 0xcc, 0xfe, 0x4c, 0xdf, 0x40, 0xdb, 0xde, 0x8f, 0xdc, 0xd1, 0x25, 0xd5, 0xd2, 0x38, 0x51, 0x88, 0x51, 0x89, 0xe7, 0xee, 0xce}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x17, 0x70, 0xc2, 0x4f, 0xa5, 0x60, 0xd8, 0xa5, 0x38, 0x77, 0xef, 0x36, 0x66, 0x3c, 0x44, 0x67, 0xed, 0xb2, 0x0b, 0x1c, 0x63, 0x1c, 0xc3, 0x04, 0xc5, 0xd4, 0xf9, 0xdf, 0x97, 0x2b, 0x12, 0x1f}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xbf, 0x8e, 0x05, 0x2e, 0x73, 0xff, 0xb7, 0x53, 0xb7, 0x5f, 0xcf, 0x7f, 0xde, 0x0e, 0x7e, 0x3d, 0xd1, 0x34, 0xff, 0x25, 0x6e, 0x42, 0xc9, 0xda, 0x1e, 0xb5, 0xc2, 0x64, 0xfc, 0x4c, 0xa4, 0x59}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + aws_AWSNitroTPM = M{0: {Expected: []byte{0x73, 0x7f, 0x76, 0x7a, 0x12, 0xf5, 0x4e, 0x70, 0xee, 0xcb, 0xc8, 0x68, 0x40, 0x11, 0x32, 0x3a, 0xe2, 0xfe, 0x2d, 0xd9, 0xf9, 0x07, 0x85, 0x57, 0x79, 0x69, 0xd7, 0xa2, 0x01, 0x3e, 0x8c, 0x12}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xa0, 0x56, 0x77, 0xba, 0xde, 0x83, 0x58, 0x5a, 0xc9, 0xa2, 0xec, 0x5f, 0x76, 0xbc, 0x6a, 0x7a, 0x8d, 0xfb, 0xb8, 0x57, 0x0a, 0xf4, 0xc2, 0x42, 0x79, 0x2a, 0x26, 0x66, 0xcd, 0x63, 0xe2, 0xd5}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x8b, 0xc9, 0x49, 0x09, 0x67, 0x84, 0x39, 0x6c, 0xd8, 0xa1, 0x7d, 0xda, 0x8b, 0x51, 0x1f, 0x99, 0x89, 0x48, 0x6b, 0x97, 0x1a, 0x1a, 0x1e, 0x89, 0x6b, 0x46, 0xb9, 0x8f, 0x09, 0x3e, 0x44, 0xb6}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x86, 0x04, 0x8a, 0x97, 0x9c, 0x48, 0xcf, 0xcd, 0x2f, 0x18, 0x1d, 0x2b, 0xf2, 0x0b, 0x81, 0x1a, 0x4e, 0xcb, 0x40, 0xaf, 0xca, 0x92, 0x18, 0xcf, 0xcd, 0x82, 0x1b, 0x3d, 0xb7, 0x4f, 0xf4, 0xab}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + aws_AWSSEVSNP = M{0: {Expected: []byte{0xd6, 0xdf, 0x85, 0x53, 0x58, 0xf5, 0xb1, 0x0f, 0x06, 0xf0, 0xfa, 0xb3, 0xf4, 0x08, 0xad, 0x26, 0xcd, 0x16, 0x5a, 0x29, 0x49, 0xba, 0xd6, 0x9e, 0x2c, 0xc7, 0x56, 0x92, 0x52, 0x9e, 0x66, 0x2a}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xf3, 0x89, 0x4d, 0x25, 0x3f, 0xe4, 0xbb, 0x57, 0xd3, 0xba, 0x2e, 0x05, 0xfb, 0xcd, 0xcd, 0x24, 0xd4, 0xc7, 0x2a, 0x62, 0x86, 0x9f, 0x07, 0x0d, 0x18, 0x30, 0xf2, 0xf8, 0x4f, 0x00, 0xa1, 0x2e}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x32, 0xd5, 0xc4, 0x5f, 0x94, 0x64, 0x5d, 0xb0, 0xe6, 0x43, 0xae, 0x6c, 0xd0, 0x7b, 0x3c, 0xc0, 0xfe, 0x9f, 0xcf, 0x60, 0xa2, 0xf8, 0x7d, 0x75, 0x49, 0xad, 0x21, 0xda, 0x0e, 0xce, 0xfd, 0xbf}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xd3, 0x90, 0x7f, 0xbe, 0x5a, 0x53, 0xd6, 0x72, 0x03, 0xbc, 0x07, 0xf6, 0x0b, 0xe2, 0xa8, 0x16, 0xd1, 0x48, 0x7b, 0x1a, 0xe8, 0x90, 0x5e, 0xa8, 0xf0, 0xa6, 0x0d, 0x77, 0xb8, 0x7b, 0x4e, 0x12}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + azure_AzureSEVSNP = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x70, 0x89, 0x4c, 0xc8, 0x6b, 0xa5, 0xe3, 0x84, 0x93, 0xf4, 0x97, 0x56, 0x40, 0x4e, 0x8d, 0x73, 0x90, 0x87, 0xab, 0x62, 0xa1, 0xc2, 0x3d, 0xd2, 0x0f, 0x7d, 0xf3, 0x1b, 0xd7, 0x5b, 0xd5, 0x27}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xf9, 0xf7, 0x8f, 0xf0, 0x42, 0xf6, 0x0c, 0xd8, 0x70, 0xff, 0x38, 0x88, 0xe0, 0xa8, 0x89, 0x71, 0x85, 0x02, 0xfa, 0x23, 0x13, 0xb9, 0x0a, 0x4f, 0xd1, 0x37, 0x83, 0xde, 0xa8, 0x0c, 0xca, 0xab}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xa4, 0x7b, 0x72, 0x2f, 0xaa, 0x83, 0x63, 0x49, 0xaa, 0x66, 0x89, 0xc9, 0xe3, 0x67, 0xeb, 0x3f, 0x0e, 0x4f, 0x7e, 0x92, 0x63, 0xba, 0x9f, 0x29, 0x84, 0xbb, 0xc6, 0x70, 0x10, 0x46, 0xc8, 0xc1}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + azure_AzureTDX = M{1: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xf3, 0x92, 0x9e, 0xa0, 0xea, 0x11, 0xab, 0x69, 0xd2, 0xfb, 0xa2, 0xb4, 0x27, 0x07, 0x7d, 0x0e, 0x85, 0xcf, 0xe7, 0x0d, 0x95, 0xcd, 0xb0, 0x55, 0xfe, 0x08, 0xd8, 0xeb, 0xe3, 0x7e, 0xe0, 0x2a}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xa8, 0x0f, 0x03, 0x33, 0xb8, 0xe0, 0x3a, 0x0c, 0x5a, 0xad, 0x41, 0x3b, 0xf3, 0xa9, 0x61, 0x2c, 0x60, 0x0d, 0xc1, 0xd2, 0x8f, 0x06, 0x95, 0xb9, 0x3c, 0xc7, 0xa8, 0x0f, 0x01, 0xa5, 0x62, 0x9b}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x19, 0x42, 0x0e, 0xc0, 0x95, 0x2c, 0xed, 0x30, 0xf5, 0x02, 0x3c, 0xd8, 0xb3, 0x2c, 0x45, 0x9e, 0xa0, 0xa8, 0x35, 0x95, 0x33, 0xd0, 0xea, 0x9b, 0x5b, 0xf8, 0xa9, 0xc0, 0xa5, 0x4a, 0xaa, 0x7d}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} azure_AzureTrustedLaunch M - gcp_GCPSEVES = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xe6, 0x80, 0x78, 0xd7, 0xe1, 0x27, 0x46, 0x30, 0x3b, 0xb4, 0x56, 0x2e, 0x34, 0x96, 0x42, 0xb1, 0x10, 0xe0, 0xf0, 0x18, 0x76, 0x75, 0xd3, 0x99, 0x0f, 0x39, 0x16, 0x9a, 0x18, 0x04, 0x7c, 0x21}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x9b, 0x36, 0x38, 0x0b, 0xd2, 0x61, 0x33, 0x88, 0x93, 0xdd, 0x2b, 0xb9, 0x63, 0xe5, 0x54, 0x77, 0xbd, 0x1b, 0x7a, 0x27, 0xd3, 0xe3, 0x43, 0x16, 0x16, 0x0f, 0x95, 0x2c, 0x9a, 0x20, 0xe1, 0xd6}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xd0, 0x86, 0x71, 0xf5, 0x46, 0x4a, 0x98, 0x8f, 0x63, 0xa7, 0xff, 0x75, 0x1c, 0xf8, 0x18, 0x29, 0x38, 0xf9, 0x45, 0xad, 0xa8, 0x03, 0xd0, 0xa8, 0x0d, 0x6d, 0x9d, 0x65, 0x7b, 0xe8, 0x7c, 0x58}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - gcp_GCPSEVSNP = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x26, 0xbb, 0xf2, 0x30, 0xd8, 0xf3, 0x53, 0x5e, 0xd7, 0xec, 0xdf, 0xce, 0x05, 0xc1, 0xeb, 0x57, 0x4a, 0xe3, 0xed, 0xeb, 0x9c, 0xd1, 0xf1, 0x32, 0x50, 0xd0, 0x3e, 0x48, 0x72, 0x12, 0x84, 0xdf}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x91, 0x93, 0x4c, 0x69, 0x1b, 0xc1, 0xea, 0xe1, 0x48, 0x37, 0x4d, 0x45, 0xa3, 0x24, 0x35, 0xb3, 0x3b, 0xe2, 0x11, 0x7a, 0x17, 0xba, 0x1a, 0xd5, 0xd4, 0x7d, 0xf5, 0x8e, 0xbb, 0x3f, 0xc5, 0x69}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xfe, 0xf3, 0x72, 0xd9, 0x62, 0x0f, 0xff, 0x0d, 0x0d, 0x89, 0x36, 0xa9, 0xab, 0x3f, 0x44, 0xda, 0xfb, 0xb3, 0xb8, 0x42, 0x4c, 0x86, 0xf4, 0xfb, 0x8c, 0xaf, 0xb2, 0x29, 0x79, 0xc9, 0x4b, 0x97}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} - openstack_QEMUVTPM = M{4: {Expected: []byte{0xed, 0xe1, 0xb3, 0xc8, 0x42, 0x4a, 0x1b, 0xb1, 0x7b, 0x82, 0x01, 0xa9, 0x50, 0xc7, 0x59, 0x8e, 0xbd, 0x2d, 0xd2, 0xe3, 0x68, 0x2f, 0xd7, 0x52, 0x7c, 0x49, 0x7a, 0x0f, 0x72, 0x4e, 0xf2, 0x6c}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x81, 0x27, 0x19, 0x90, 0x0d, 0x86, 0xad, 0x4b, 0x8a, 0x7c, 0xd5, 0xe8, 0x54, 0xb1, 0xc7, 0x81, 0x45, 0x80, 0x00, 0x86, 0xaf, 0xca, 0x1b, 0x5a, 0x44, 0x6f, 0x82, 0x02, 0x0a, 0x4d, 0xe2, 0x06}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xbe, 0xbf, 0xdc, 0x50, 0xb9, 0x7b, 0x38, 0xe5, 0x3d, 0xb0, 0x18, 0x45, 0x99, 0xfd, 0xe8, 0xbc, 0x08, 0xd4, 0xf9, 0x5f, 0xf8, 0x51, 0xe0, 0x90, 0xd9, 0x1e, 0xe6, 0xb1, 0xa1, 0x15, 0xbc, 0x7f}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + gcp_GCPSEVES = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0x71, 0x75, 0x9b, 0x19, 0x9d, 0x51, 0x14, 0xb9, 0xa1, 0xc4, 0x35, 0x24, 0x87, 0x06, 0x36, 0x90, 0xa8, 0xe7, 0xf5, 0x8d, 0x6b, 0xdd, 0x8e, 0x60, 0xef, 0xf5, 0x60, 0x6a, 0x15, 0xce, 0x11, 0x4a}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xa0, 0x92, 0x6a, 0x34, 0x0b, 0xaa, 0x35, 0x03, 0x8e, 0x2e, 0xa9, 0x02, 0xec, 0x31, 0x09, 0x39, 0xee, 0xe5, 0x8e, 0xcc, 0x16, 0x65, 0xf3, 0xe2, 0x16, 0x27, 0x53, 0xb2, 0xe6, 0x95, 0xdb, 0x48}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x1d, 0x66, 0x41, 0xfe, 0x1e, 0x19, 0xd6, 0xd4, 0x26, 0xad, 0x54, 0xda, 0x8f, 0x29, 0x08, 0xdf, 0x66, 0x66, 0xb8, 0x4c, 0x73, 0x7d, 0x81, 0x24, 0x3c, 0x0c, 0x0d, 0x47, 0x33, 0x59, 0xa7, 0x72}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + gcp_GCPSEVSNP = M{1: {Expected: []byte{0x36, 0x95, 0xdc, 0xc5, 0x5e, 0x3a, 0xa3, 0x40, 0x27, 0xc2, 0x77, 0x93, 0xc8, 0x5c, 0x72, 0x3c, 0x69, 0x7d, 0x70, 0x8c, 0x42, 0xd1, 0xf7, 0x3b, 0xd6, 0xfa, 0x4f, 0x26, 0x60, 0x8a, 0x5b, 0x24}, ValidationOpt: WarnOnly}, 2: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 3: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 4: {Expected: []byte{0xfb, 0xde, 0xb6, 0x4f, 0x6d, 0x54, 0xc3, 0xb2, 0xa7, 0xa6, 0xc9, 0x65, 0x94, 0x03, 0x82, 0x8c, 0x65, 0x8b, 0xb2, 0xc5, 0x6e, 0x67, 0x9b, 0x4f, 0x99, 0x2c, 0xc0, 0x21, 0xa1, 0xb0, 0xfa, 0xbd}, ValidationOpt: Enforce}, 6: {Expected: []byte{0x3d, 0x45, 0x8c, 0xfe, 0x55, 0xcc, 0x03, 0xea, 0x1f, 0x44, 0x3f, 0x15, 0x62, 0xbe, 0xec, 0x8d, 0xf5, 0x1c, 0x75, 0xe1, 0x4a, 0x9f, 0xcf, 0x9a, 0x72, 0x34, 0xa1, 0x3f, 0x19, 0x8e, 0x79, 0x69}, ValidationOpt: WarnOnly}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x47, 0x4d, 0xa5, 0xa3, 0x37, 0x59, 0x1d, 0xb0, 0xf8, 0xa3, 0x36, 0x23, 0xe8, 0x9f, 0xf4, 0xb7, 0xda, 0xee, 0x82, 0xa3, 0xd4, 0x37, 0x72, 0x35, 0xb4, 0x45, 0x7b, 0x86, 0x32, 0x80, 0x4c, 0xca}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xd9, 0xce, 0xd5, 0x5b, 0xc6, 0x30, 0x28, 0x7d, 0x83, 0x73, 0xc0, 0x3d, 0x7d, 0x80, 0xef, 0x11, 0xef, 0x7e, 0x7b, 0x90, 0x6d, 0x3c, 0x1a, 0xbe, 0x0b, 0x0c, 0xb5, 0xc1, 0x61, 0x42, 0x95, 0x77}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + openstack_QEMUVTPM = M{4: {Expected: []byte{0x5f, 0x96, 0xec, 0x27, 0xdc, 0x1e, 0xf8, 0xb1, 0xe7, 0x40, 0x61, 0x3e, 0x01, 0x43, 0x96, 0x33, 0x8a, 0xdf, 0xd9, 0x6f, 0x14, 0xae, 0x90, 0xb9, 0x76, 0xd5, 0x14, 0xfd, 0xb0, 0xdd, 0x71, 0x58}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x02, 0xc7, 0x71, 0xcf, 0xd0, 0xa3, 0x8a, 0x53, 0x52, 0x38, 0x77, 0x11, 0x43, 0x8b, 0xb8, 0x43, 0x3c, 0x84, 0xf9, 0x9b, 0xc6, 0x4e, 0xd5, 0xa9, 0x9a, 0xcb, 0x69, 0x51, 0x0c, 0x56, 0x10, 0x74}, ValidationOpt: Enforce}, 11: {Expected: []byte{0xf3, 0x4c, 0xe1, 0x4c, 0x00, 0x44, 0x4d, 0xdd, 0x99, 0xb9, 0xed, 0x78, 0x5d, 0x5f, 0x1b, 0x1e, 0x8c, 0xa7, 0xc3, 0x5e, 0x9d, 0x03, 0x07, 0x56, 0x9e, 0x22, 0x5b, 0x12, 0xdc, 0x33, 0x5f, 0xde}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 14: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: WarnOnly}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} qemu_QEMUTDX M - qemu_QEMUVTPM = M{4: {Expected: []byte{0x94, 0x46, 0x8c, 0x7e, 0xc1, 0xfe, 0x8b, 0x6f, 0xca, 0x7a, 0xbb, 0x7c, 0x70, 0x7a, 0x1c, 0xd3, 0x30, 0xff, 0x02, 0x32, 0x57, 0x51, 0x40, 0xcf, 0x9e, 0xd3, 0x0f, 0xab, 0x3b, 0xbf, 0xa6, 0x2b}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0xf5, 0xeb, 0x46, 0xfa, 0x20, 0xb8, 0xf4, 0x4a, 0xa6, 0xbf, 0xf8, 0x17, 0x58, 0x97, 0x8b, 0x20, 0x81, 0x66, 0x11, 0x6e, 0x8d, 0x1d, 0xf9, 0xcf, 0x4d, 0xc1, 0x95, 0xfb, 0x5c, 0xe7, 0x1e, 0x84}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x72, 0x95, 0xb7, 0x61, 0x41, 0x3e, 0x15, 0xfc, 0x18, 0xb0, 0xd8, 0x37, 0x46, 0x2c, 0x4f, 0xa0, 0xf4, 0xc2, 0xac, 0xb5, 0x65, 0xdc, 0x2b, 0xc0, 0x83, 0x4d, 0xb6, 0xb8, 0xe1, 0x43, 0x4b, 0x95}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} + qemu_QEMUVTPM = M{4: {Expected: []byte{0xd7, 0xf0, 0x42, 0x1a, 0x0c, 0x67, 0xc2, 0x8a, 0xc9, 0x7b, 0xbd, 0x4b, 0xba, 0x9f, 0xfc, 0xf7, 0x32, 0x1f, 0xa2, 0x2f, 0x2d, 0x86, 0x60, 0x36, 0x42, 0x1b, 0x3c, 0x97, 0x57, 0x4e, 0x66, 0xc2}, ValidationOpt: Enforce}, 8: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 9: {Expected: []byte{0x15, 0x82, 0x03, 0x4b, 0xb8, 0x7e, 0xe6, 0x31, 0x91, 0x5d, 0x8b, 0xa1, 0xd2, 0x82, 0xe1, 0x4b, 0xb9, 0x87, 0xcb, 0xb2, 0x2d, 0x98, 0xe3, 0x8d, 0x9f, 0x5a, 0x10, 0x66, 0x0c, 0x75, 0x8d, 0x66}, ValidationOpt: Enforce}, 11: {Expected: []byte{0x6b, 0xd6, 0x26, 0x01, 0x9a, 0x81, 0x94, 0x08, 0x6b, 0x50, 0x6a, 0x92, 0x9f, 0xaf, 0x2e, 0x89, 0x5c, 0x8a, 0xa1, 0x1e, 0x07, 0x1f, 0x87, 0x76, 0xbc, 0x8d, 0xfe, 0xef, 0xe3, 0x13, 0xec, 0xc6}, ValidationOpt: Enforce}, 12: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 13: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}, 15: {Expected: []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, ValidationOpt: Enforce}} ) diff --git a/internal/config/image_enterprise.go b/internal/config/image_enterprise.go index 685986a36..6a0220b88 100644 --- a/internal/config/image_enterprise.go +++ b/internal/config/image_enterprise.go @@ -10,5 +10,5 @@ package config const ( // defaultImage is the default image to use. - defaultImage = "ref/main/stream/nightly/v2.24.0-pre.0.20250624103949-1216a2af72d0" + defaultImage = "ref/main/stream/nightly/v2.24.0-pre.0.20250625080937-dc9fca34a961" )

          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%0DqbVKh%x8 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 literal 0 HcmV?d00001 diff --git a/docs/versioned_docs/version-2.23/_media/example-online-boutique.jpg b/docs/versioned_docs/version-2.23/_media/example-online-boutique.jpg new file mode 100644 index 0000000000000000000000000000000000000000..026f0d86593411ba20b8c39e15f6158ef6ce381e GIT binary patch literal 263458 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%0DqbVKh%x8 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 literal 0 HcmV?d00001 diff --git a/docs/versioned_docs/version-2.22/_media/example-online-boutique.jpg b/docs/versioned_docs/version-2.22/_media/example-online-boutique.jpg new file mode 100644 index 0000000000000000000000000000000000000000..026f0d86593411ba20b8c39e15f6158ef6ce381e GIT binary patch literal 263458 zcmc$`2|Sct`v81q#xMpM4B28vWJwDV3XKtsEn{CR*$N?~&^Cl3dnh|)U$aD|MI~!d z_9V#?QHtzYzB4V)^SsaV{h#;${@>^KeMh(Z+-JGZxz4p;*R8dlwE=+B*3{Aj2m}I9 z;15`PCn%@k5IcxuDu580K>@0#E8Z)F)=YS zW3a4vHdYoERz6NHcKil@VWAEDf`SCmt>Od`>5YPd5(<*i+hyeBOqKPeQF0fk00Fu>7gVLxEtKywmh)EK!84l{{(;AQ=zGcX&;rH{A` zUw#qYVe1*djOAI+%f~OaNnAowN=|;Kf}+wc^}QOJ`zTu4M#d(lX66=_cJ>aAM~*r< zd!6t;dCJGv??PZu@Wo3Zp)prto*bP~`iObs4#O|pww^DsJfd>%#HQ$=eTVFS z2Ux)W39{b+`yH-cz=}dZ}HaB*9DwN<;3tx03o5bJTZM-2_Fi;c6z_YOQL-#vds8lQrh zo+F$0_i3Gy&uZKEUbDKYZa;ffhy6L*n_C`;ICX3Dn!gpfro7UU7sfjjZ5F&oMoX>! z+m;WlYIeusGZL-h5*@#_)@<-RzN0VgtH1fp1#xoli`UX+aSgqeRPCV1CaU5mq4ga@ z;^Lyy)rZubwY62Jwq^{u?$PUb8u-OJf%lUcwOYq^V^xW@Hv2N-KI4gs`<~rq6~TkA zqT>zXSfus{-7(xZ(P3Mj^QAcM#HvGQNBi^p_Fp%=z|{~K4wD248+NBzc2rhG^uDqE zcBU+DY|`#cD(y@9iJ_c{=Nri8BfbV4Xg=jltS*FLHVZn$F z#E!DM>QwTLj=>wDgOW+dJWCZ@utQ;}zSEH{7ezFBKd@}Op}KE6lbZW9UXeS(Q{8X& z(?0<&S#v zWra%g$!Wxs53K8As|er@VIs_;GK#QSE;&6G`l4M^*L5UqKi`gddablYU-`<6;5w=P znbqml6No1Z(&wM5KAi0=$f&>NyCuAHfl^7-Ns+AZy*M9Dt zZAM_pg|O9R;f5u%`3^ zcf3|wGTi4;w2SBL{y|Q`Iv$HxI@{|=^L!gTy1PnO8_&0dtKNMWmzv_Q$&}?Acx53# z2`P{?t>bDac1ET}ak>7zlv2s9f)kpFOH&G*!0DQh%;(Q~4xFd;Q1xQ>EXK`+Vr~3P z4oLRui8Q{syjzXW(Jn^Ips~PvxJkL}=%@YTgEoE!kPZXG`C(cbN#ZgRRm5j>A9}c8?3yNCfi)R&`j@>g{H4-biDk5om zSo+9G5>wc>bJ=;tA%iAcHEuRnD>d&uUY{p8mFBK?Fj#MsONyg6PbkN?w8g}Gf(NJ1 zpI=7#^B)Pla1polU5gj{L8YbT8)?oZ9`8Qm-ryW7SUs(XLww?SipptT2QMe;wp$b# zPu>u&Ud5zh+4qUhM>&B+Pwk>NO->n4J=REJpPq!Nn zySgzm^;V9huRGD0UzaqRIA!Nl%y`)UKsP4`2IaJx=_`Llcdfl=O;^RMdV+YCs&MsMFdd%Ra?%vF{2v9h*dov@-|W-1x=XjV|L!{|W< zXP;u~!tQ-6xzi}LpqsE%CG#*&!A_~(+yuNR`uXWOdA$QmdvvKsDI8F;b=@Jnl;TeGOkdAx27+|%#8_HGRX39G$otjX%# zo#>pr^{f+%nN04-Ey7#&-M!)sbf((|gyPnXo1EbX@u9oEPG|u0TWjFJf=O?d(`xmX zf{JU8^ZRrkRTArVCEha5UIW%0;KlU$R?X!PkA_#jo%0ryt(QAI7O}mP?gFOW~8TnR6Q7mdx3Ujkvc?<@6>*u`NE$>7{rd+*U@BI4hw)xjzOE!Pm zcIjA=Dskb-{=3zoM3oOds7lm!M^?m#)a27K5$!RNl}|YpJ#QqUU=gK>nNSp}~itiMcuY2aXSvJXf1D+U3%pHiJ#|`?lj*zj7sGFO>)-j z*1+36DO=}PrrX2o`)y|W7&sXo{qIOPBzts-5x}3mpTw<&F+~oPzuG3 zo40W3`;NquLci{O;X4jmc_;n+%)E1*x|ZU?x~@t-;4^b!9V|U@2<>Dk7;JU)O_s86 z%uXxe_AeQT3#T$B%=))SOpdF0bx`4w-hiGjhG|voYwB4t zrvz$P^HlUJD3&>OgtSyEO5~meD8y^-Z!(YCgLOAZo=r!rfv$A6HNbH2ZI4g0o~!&^ ztLOwrLxWT;D*8jjdF;|4;%nHFS+g*Ut43?>0WouAX*p%z%XNFK%{n=R`y;b}&YqhpI(FFGXyX&tFM#UMTKG zaQ?2!B*ucHhpz?;W?slwu$8j*es2}78g_5yn_Kv7@gcpgty_xgt`tn2V4BQX<*Q%l z);sE1GMm4Dp!2evfd*3XJkuIzc<^xcWx?s|UF;Xu0G%YpJFAH`PrdEV_lu7|J9-|g z8ff3nVte~7&+@)@W$`?*pw3$z<#M)%-uQ=SMk$FGYk1lXg%=2&uwYub$G*DhPI#o% z7OlkTnT5_9AD>mO*X|E(dizcfii#=^&#*2b-g_xb`&etwDIS{8O!tczr}~tzRWFnd zTJ$_Z2cB$`c^v0|nf=>X^pbIW|Bi*Qu#%Oyv&U1za|9Iz^CfOZx`*E!tSC=b$bIgs z5WMUeQVGZiNN3%SGRFz^{9#@IVpT7Tx)eUuOu_(Y9DZ8MZ9-$?&J>(LHRE z6Lk4A#2mL{`DC#-uWH*1bC#59i=Yy&rg?OXI{UsdL)`wSV(hnYsJoj_2l+#PzeAmNw+v zH4cB8Cw5gjsg637efn!Xw^&7)o?DC#bI>*W8-md!p*;hwf&3-G$~rCu`gyPKKB+!o zu($rWl&0+2FXyqd3$_koNf&yIXQ(K9y)m<{Jl;&B@W2(R&L_GzW&G83>R$MH=a=>! z8rd69I`ei1(*~svt!@&ClZ`8N%XwJ(@BHTlEng;YU)r}xziHiZS&t>#>~z+IEy|;s zr_VmSC}DB#!>mx;4R`h{LhSv@iSeO8;(90;Jj1^uJ!j>Fb8i%P`!MChpob2 zd1SYpqe)*4C!ox6ODG|FG$nxUyRs;lzJGZysu#5F0Cqlr&Y>((OdreKaNhO4$lqVX_VV= zzD087a_+Do`-~at>r*dLm(wZ79;n0vF5UKzuGhy556K={xyIg>`!LK~NsNYo%o5!qDK5w=;?N}%ciS9bc;)7uJh<%F3br4NsmC&;0o$i-a_{j5rF`!SpC zb^Q-l+?xttY5=@}2H=jr>pET6yi%}98_iZOrZ21@Ub11~{Vj=fjH_)7i+6-Y;t{^) zn~#(`It)l?ya5UKMnm)kKEjC0&FHotl3Dl?@3Qm5o??&4s)uCN&uie&@;9%f4l0Ak zMonJ1py}GMIiWZ)JQbnw<6;sR$Ud~N&qRND*7W+NAIbWjCZf!@u1i>rp54jlewDIt5()GvOe|2 zE|Do-p0m4r#hRbLs9L#LEZN#yWVN~^JfwYB^ZtwGBa!p3mp7+#?kQ5Ftlrwo>vDZO zeE$8#FDIc^jXSaV;o#k{a}1p+`wZgoKGIS8xw4LmUNxGNWD~=St?eWa){PX0zHBN{X=^|w##&vc!POl*x{vh>!Fi+&`~yg5*VPx>?!8SL(C zU3JT5Pguo?jV{du6>NR?*GI*tYtM7feBy8Bne%GQrLe~_+_v`HVH3kt#n3i-Y0={K zq4D@cdm-OLe(h)?Aa?&@4KJSrMtp6qa7otjYH1N)ARU1zM$c(d7lN(gCS zx*n-TXHpdBl z+$gKPveSFiTJ|L5i{8K8=DuWh_0Y2WmtoG>s))IFYW3Hma5-Netw_1<8C(Mw-7m5E z+>}}6d!&0#JhF?Xve|bo!#e)aQ?HY%GA~Pd#2(ym-JJGL%OrBl#jR~*tFTORq@|6u zEw`2m+Du`cJ{HX9Ij#X?XCMitb}V5J$*(+=8abmsw8H*4MtXf&qgXTRB?7fI>_~DH z)8Oe)_uvO2M^(ksKF*ctu+=e&+}6un!H9Cz7Xj~cUQ5^*@gqzp6>}q`D1Q7lIvRLG zRLB?i<;xS$4(6}yzq!0&4T$`(tLuuB-M`hYSVRaf7|bZG0S@j&(OcfE5iGk>)i!KD zzpH@fvNF$09jC2hwFj-twV9&ENJG2>Q;&wd!i=lz-;9Ud`1V+4;r#5x!STudI(gYj z*^`=~vMp!v>$GZCHb2YxY!X{76r_JL)~>Iq^#0KsCuw@p9LYMagq4-jnKf|q)aQD# zCfedM)%5_=ob}~7#|dAW+MHV7w^XKwB6EloQg9Y6l52Rj+?e{IJ2(&uw)9Z4l(II5N zeeArWc$IGHz;P9{$CnTDJO`y7q)wXpX7#RGruF3>i^*kI*(d(Mk9F|w8=_6ssZg6C zLyrVYTbAaC@qK9D0aiO@nx4H+HWyF%;gh$YNQQ*K{R@67l-YxBN!~UkeNswYs%)hT zMAoHBr6z1k$sxa~={=9Vd#gfN&PeI~9s8HI-7BZwnK`HYaQ!e+sX0ehG7ih%jHBEz+?k%Q&n0}Y(qw(!FtK@Kt)*7i z38#-HFIkf)N5UxS!K|`50g6R_n86CdVt2i&aQBQ4F{GVxbTn2<+$poq-JQQ4?{dpT6CiUOkx2rMhjsUspD&O% zuEcldJ?u;@G!uzx6-?5vco;nS&7{i0O-R%Gq?q=e(haI zo&36BmhKbzxZ8};N!pw{HvZ`A(pl~cISc9r7B{J-avQ^2Lp(8N%^AP6B255n6LXu?ruIy_I;* znjpzVcQ+F}nKGgx`0hU#TLUhjJ1y8W=v#_U!oiatx21R$ovAFG>-F6uH#8D+c(s1s zY^6A-Qqj5cgbUA29kD9&cVUx}&5PO!^RW@?_Nji;XPpP+-W_04ig;pM6ki&GyNNr< zes#+W`^ej?Ltw7X!+dp{LZzQQ^5}4NxSQSdXt?I==t9kqAp5m*>Uk3*p-R_}W@-5J z9gYiD6ACollz!#IoLAkq$rD{<#3Luy)?@Q0)b@ER^CSo-VrS zN}p5DuvyL3XZ6oIGBoylZQ;6omRWISv;O`srb&mlr|Qk`h+K4%X&v5$?Y?lRJmsZ{ zJtJkgqiI(EklV6pm~6cVgV(+$N=C;wjzmr!d$vkriPB;`P{|X~jB%(L5WHeGS2DkE zL>ne?Z1V@P5`_~7Z2KpNUyIznrYYL9Z#Ttg4U{7&>rU5OdLG)By_jTSx+EN1eE!m@ z;tUMsaRlJjlTTvF*vy;IwO%l`Pi^DIi1aT$<1#I52g>gTtRm#3P72zT4JpwB#2`E~ z$7-`&u=+e{sK4;zp~=Xml>GxcHTnYA-Lg_tl$Wpl;EK}OD0O{EED3mpUFk6)7QWh{ zeeVj#lhp0^jzD|qTr4elFv;KKnD>Ov7%J0{aZ$@KC1EbYPx$MY)21nO?DmQv=30kK z12(jE>={a*KaI;Gj@_~d($3a5qV~Lbbl$CsXT0C)2>PniK$MSiM4U4XD{-BsxCfJb zREMsh@+T&^SC(Eq3!vCt_R1U6Qa%?@wTy-u>+$(+v*OfS&(cRNJ@)rrMjIFfI=GB^ zbamkhqpd4!T1r2fZH!|W_WzK&V}|?OU8&8O`glo^k*!WUTYRtv2hiMmui@Jdu;CFS zC+CiTu>91=%xj*R^!#-M#@+dI1arffFL#lK!~Uxq-M%H66nx@rw+%{z@y?Q$8qT)d zXQ~C)9==4n&91>#s?UE z;hpO+iYiJfQ%kc&SPA6)s@@Gddm}r9J*NMZ?q4T&v2&NnsmXJ0IW5 z4iif~edkZXY_F6Whc=Y9c9p#RZpPA0S^6cs_6n>GB5!J`s~@5o>T7E0YQUTz%;%*a zvvc)g*bacJ+X+v@ePjYmPZ5~j!?fOdzz!q;<6%3m<7!l@?yn@-U+;5W-&2U7eGC0v zf9?O<7B+haFFTlABfwE4yW^fGVBH4Rcb+v+4PhwWj#5Z0wV;Ra#7hu&`c zqyCXzKk~hfgjIm|G&WR+u;F2yaO4kl+dtIpj(WPnF>-K>sJ*Kjd_U6sN8O%YKSQs( z9`lBK`(EftLRJSi6C-#Rg_j`M2eg15paKH01>V3390Mo77I=4qEndJ7_LKjI`TXDK zQ{gOIILisx!5MpjJ8%Vuzt0DB9KbQK{C>7xjyq((Hz8Qb0HFKV*1n1Xz;p$Gm8i9~ zZy9TAE7xH@w-10Cx8LWxrvsok3)`c9Zxc-efISd^%G%%CY_9@PbrAsGSH}-~9{#=# z3jRhq!W{E-4ghQx0C2qk0BiN*++ZKQAKd5$z!;vD?sEVV5&_tB1ist)e}J2wsQ&HT z{&vjI^ZTAdMj?^(f3PsXe`pLn8;iy=F)?CTv8=2tSQZwxb(}c1bsXzhSa3Wz4lX=5 zH#aN$dR`tpFDITG|2>C{f^!(q%xE+-o{fbK{~wpN$1sPCHf4H@LcsLtuN?9QIuFsa z$n>N5QGUy{!c?pPJ-3X6dCT7m0*OX3Ffy(E%xB_II7rJ+CRFi$RWbcbRag3HzmNUL zYm55-KP|+Tdf;4DPy4a26VrlcA2fIOO|($|Yv_&&YLR|_Nq^FpUk`r<^F->~q_H<| zWnSI=ma+zf-7k-f%}$=xzcI0L@#w^4&97-OP7(u%%Oc{vGkKDIMUcXR3ME_1C@2;t_ zBiBBsEW8!IecyA@`LcDFE89msb`0?U?74Y>7Je&WpFxCnT{9(#K%W=S#F|F0Z z_O4EdcA5mcn3~R8e7VtiFMhuBUg``0LrS|2>X&~>JjH&v^DNWZi$~XSC0V@RExf*> z`9j}`x4O@x7HCTnixNv<(Rv;guDEgh#>>{{MiX4a8(-^XbVn9Osw*$U-Rnk@l$V8Q zzKdf_q}_`zFn);cN8PR8+y1bj|5X)H%D4bdT*x-NMFPHBKAr1`xpDwFpBdh zB!|)f9WF$dzM#sBDZAeNbgcZDraT1iu7RCBK9euI-h5exb!zwN!(8=q4^=;(-DdFq zv@qYNyXP~AjM)$K;jh{(?ZTH0x*Hzb# zy=m8d*LBzUxmEXiCGS?f(fh(%wdLYVKcR=sI}Zx<%J12S8bpoV7``!v$`_LLQ+gz9 zA{24XIn6wUbxOT`-MzE+etZxzp>yp2ECzjNeP4d|s0KoQ-YBk(0g|s<1m|rK{?KxP zj0wO%WE{Je@{6Top9Uao!jdaT9!Hu^TfH@%J`EMB@7vQ2pUU5TTygDIpIkg|)%oo$ z-|I6Io$?PxTX(PO-14qUY0ev?EqoM`I(z&C%GqNd!>K17`Vsnt`-45+*G$xBq=ues zf5EQ8lp*A2@An((m>9iiVBKAxJ2M7f z?|i%nO(X#RBxq6l-;E?~W6wE0xVX#e*>3(*g72+Id79hgS8LLbkNR(znG`>uWLGS( zqafwlyH*`VuPeJ2OLsN4q>QyIT{-D(7q=VHwx9Y*oYhMl>p7~kv));8C}ekO8(U*f z3+2~7{(CA)%?%j|36;n%=GD&Z^QHH@jb?usn?Mi6avsLMbk0?GVrn*LJbf}L^T{T3LlkE zZe!R2H~^Zk^-fdMe+73#r>etJYmm_8;rY~%5rtSh4H<=uLhz)60APs60R#nl9?;h1 zg*||ZL8u`}1kioZlKNk*D!hd*I5ehDx9*)j-E53RMx_Icg)w9dBr*n60JtzSAQ=L{ zAc=)85DiaDM_KqP=o})E8o30zd5fT6 z$ux{1GAdKPJ1+LWT9T=muD4&_%l`WEOe$pI%%5+A0OQgj$Ox<&b}zsO5hNJU0G=<9 zzxofYmq&4U3HoU04|+= zr~rpU(lAs5B$X4-5M;O)WTF9<6a<3Mc?dOJ-!@5!|LSzvYP z0ci%8DM?2vm4%a5n~u}S2*XMu@d)E6{AIF6K8YF2-!@$axAU<&Pa(D+ zVpW0xaNA-_A$oC;WYK7U2@+tS5hMr_=v*uYOQ`@za$do<&Hn_rb{+H8LIwBGq7n?2 zID7yyY752?qLz}043Gf0kAB7TwjJ{j$IK8u9$FBQ1lb1{efyx{KftlHKcCrmu@OF^ z5CGHw3ClvwB4PoWsKc4gpujop`Iq5;p8mJb-w*jOBW4as-kWh3zefWU6H!Y*;mN~L z5hO_f_?sJtNPijrpEP`z4}Y29w+*6s8y(HGbYO^UpaBGlvyeA7Q+{N4>Fb>Fz$Zh;X9Xh4=2y&X?-gC4G&e*K{6*4VU)o9op*JlP6KV{`Z5w*cd3QLU~O)Ahy2?w-AP;Pu37q2h_l zs&-jDUrV%dhjv>Fl@Fil*PE!=E7+}5-ZPuhaw?;D!fO9j*Y^3P__rB#Cl^lMyLQs` zh*xU&+}*nFtTEM7uEVNN)Sk@y)%=D*!eufBn;ry!VV#_82nhhqvVVq$R9qU|mv3~9 z9dGix8rSc!;laIPIySna-mY&vd+tKH^S66xW@*(&=d9gbE#dpK?TELG z#R@rY-pdN7iaxAbof_@GY*acrIO?~daO&P?^;<17yH#~2W>kxY=kKwfFL-)#L2gHV zsY~@4*f*T|Q0;?|i%0wXhIM~LCIa9XB#%OwDQQc+nQI6Tb|$_`5LSA5sj8}44;C7} z$pOSIx$p(BVExfCx;HYXiQcO!ubRJ`USYy|k?8k-SAGZ(rE_U^FVFP9b$VXkJ+ym<2E$MU+x zBL!_oJrCa<9G(^4T>a{+2c&UFJ5j6nR4(vbPvGZb` zc(3N2kecLox&Q7|;Q7&wlJxK6KKZ4>xJUO09jd93wo{2Oew+TwP!hGok#P7RbUHxN z%sFYL5-d>CYX2C<=s(3V&&%|<{>{FYoMeHa7}a>ytuiXtmI$bKMw97h5>G3Ab!tt? zoGl;OQJo_Fjdvt6QV)eH7IqQlPxD5-=jw=PJ9FlgU1pk<5UWqZ_`dFoPnkS+NzRr2 zX6yg9pTAVT+mN*H&G(<^y=^&|bhrC=Cj|u!uCFhZQ@z_s; z#!~ft;pIcONwElL8i|~MK~Q2Ph$Y*^e#$(4rrINYHp1968(|q?y9@7kylla|R2cwt zIsvM}s+|f)9*e(mJhET)_-=##Rx763i`_@+a^8rkTB+D9&Me*hND}mbyKUGNJ(v?G zY@PD#Pn-CEdHfsID14Du? zK4t1+ve+d#^KO92MkRTH@(uS!c#E)gnnKF*+|MQcUv~Vf>Bl+God01p;DcnKt%kf7 ziv$Qjz(JE6NMcDODwTx5T9PV2CYG6m4k58Q{U(!Yrciw}Wr=yCk~HNcySFU^M^iCg zqov@?+*u4zR-P+2uK9wxAyj;tpd2=3SCx`HJ9O;KfEznycl4`PF6EjTRDYG)yO?umsq?UjBEG!|*}GXk7|hD#43pcw!lAxI1o5@>WD z%%sxIyuy2_a{uO~f8YJnJ6eX`(Y@4ZXud$W2!IwOiohZ;hEX)A3ZZQa!-ND9)sjRP zL0KUr7oEoM>frBR{WraTJYL9X@Nn_8K)4bCdPr&%5*Geopnd|uBc2K7~0=L^6xtT1yV8|I=OH`0*QPr7TS#fW5h*(Fe9U~ zWYF|=B_JEA#gU`%omXT35&xb}!O*`a(;!Mg6rF?#P|DCP)*uED1n@wefY62>wNXO761nGc^HN?Y{mplqx(9S=E z7EmZ%n0AGW&@TdG9tqwU8v4Ue69UFHpo+Z* zqYRLqE{RIw02zscl7UFEC)1!CY>osHXc%XS!eiNDsm=5?J zgc5*3C;=FRLL$)&(SV3RuwE5yDuWgl37ChN5GeT+%b*|@hY(j?U0b?}qQYc6Kw19g z#4{)cwM&w;EAS!O>Bi}JLy2@e0A#^cF)HclJ3 zq^jmp6N9NT1IRcWz&3;hCh*VonlGB8L~i8Ldw#K$zn_#uRO3so zalW%9oATfxwYcK|kc$vIDyfZ4kjkfKLV*If2^cb!GgFB4(#0~P`8MdH(oI|(=t>GrN~9*Bkd(;-Lxv1!1dqd3lQ_do+X)0n$hhoO> z%a0?aXP}`t(56E37o-yuN+Atc`@GGG`{q(Mu5qJDy0RB}t4Lx}gT95*f%S5(1-U9oO;qB(>yWU*U3#WWRR$B z)8Bb0+$c%)Yf*z385ewH2R!WBcU`e~-0OY%?^-Lo4mZ5Yx3{O75J1@@1OmfsD8nd! zFMRmt{(p)L82`RZ4`eapXn`U(I4o!5MTYF57=`gfe4r#0Yf+NMWRXIXMoE|5k~zpW zA}fukK|sWj6Mqjpy{dbuVQ5JXi3yQ(D-3jy3 z@V$Z1%E%@_{XnFUgSZJSA{{{-vUxEbmG;hE93f69&H$Qa08xkJ()`Q9Vr)B*_?kn5 zg{Q_c&QMaioHEtCJ3{G{l_IO>z@$o7m8J&T5bsY3R0t*kL|tp^n;00vDNJKGzTU&dV5y_35P@$5MKr9m(LcvFqq6~SW zL<_jJbPKaJ?>j;Ipkk=x`1Ek^Uj_xrNx+0h%z%=$1-mz!Vf)VMQAdwBgRQR=cign7 zwls{*1OhPh&9p(9hGvj!y)s>2+fDt(B6#0b0vT9V$QQ@O^258i_!}Xa_Lya_eWg* z`l8C{b!Y^lI5})h>I_&7b&6s;)Iu;A62vXC2iQ4k6GSy&M6WK7(8V)qMirAmvGbKt|C#Y_KSiRj<#j=EnwpIx1(rn|afF8Hgd2GNN>y!R@kZ z0XQ5D9|&bN1NKq{E|Wn!9TQ+68;@<0-I5qQSdq>`-YbbkU_nvsz2sluY;?XJAn2Ot zIsLRS!vSF*L=Dl-3?zn>UM+gnQ#g{pQH$k_l8Y^Xu$FJoUty>w>#PCYpw z)tiOazU%bW_iJ9Pv(?N6;q;SO#WO9u{gv)3Yna-9@}G!-FPBa8q2Gn|_79+74t;HuBeeF!ki^cdL@g zPp~hr!Ejn3IB|oKTqUY4UMAy;DlP)~_T(b9dr*C`#om5OAckc6IQlG?hd(#*FXDxN zmw)d=&kge3Pss-LC~Dgd$yQ<84YghQ2-XO=4C^|1C*459S1~Uxa9^wRTz=Tq`p{+3 zw=iepQy;N@x4ZpU8x^|j5mI~eI5R?6)&7E1h)_CGF=TXLJnt)JzODCbZOOP=Jf0Rz z$V3~kaM%D*79)OKE}9@+Ml01*->qPhO#x)+iLy|;f3t_#GF|Z&rs|v<#CE5cH?&wv z1O-d-7|ZN0^L_blasQ*_zT|9$w=(yy%Sbz0MaP)*XG7$cU*$#OUhevohI{o?w_H#D zscZqS<<1W=S5ODEw4D-Z7w_i0(7iJu--NOE+)h_>1<_>tiZUxF!$%%rQ@-N*@v~k} z1m}DDxs>I0FCQ%J9U7TV2#5+6&9x;<>r&iqoczIJnbl8UD%H)X{O4j@r!I zHMsVJLapJ&Drj%9_VSHN9*jHfZ4UGCnQposQ!F7ezG+}dTP5aBegm#y*am*pI%Fmi zTj~tu7e&i)D_22dho5qi?x?^vuC3M!-_|u>xK>VWzy-?Ws&nFMgU8;~{Mg=41^6RI z=!;>N=4Q1M5G_5m6K4wt@@=Kt@D_)$Xgh2Mfj~eL5EQ9*5)Br)_AUa6FZWtTL66&( z%35&1SNZ6V7Ye95ZBZ8urJ3#9Ke2_9c{wE1*3Ml^nZM5}{?v?2wUB3jM}9 zvqJ=#97Y#R&co)nbp4G)Vl$=7*CRTI2bS(E&hdF1n`+*6xc9`jL!0=6H5kO~aB(5f zm^tA#@MCj7jTwCyGub14565X?D5lO^`>g9Gn=A^4C4<{>vINeWQdtXoDGUaHP;zai zC5E!4T&~fZ?UPfcC&*}Rjc(ltnWePoRcMU#^Qb*xPfMC8iTT==h zk2Gh-lDR1a25b;u6ydhp_3YUjzOFgWoJ)l zWHCZFG}IdI$Q3b{>o(yCCtpiQO*v$poS}yG#C_*p-B5dKY(tiWA;Zn!o~ekEJ$i$~ z!#nEVRG)P_B$;Q7gX%N{W9v5bSGK)4JYUMf%wem}#iuzcp_WaCAGq+sECYf{6^llL zKrA^1jmzWa$q>q_fEqbTMS;M0ivZt|`;)4UtwN>A9TI4{ zktGyMze8^;!UR)cd}v#byC=$K~*A&DRQtgYnxL zJ)EPD>oyp@Z6Et~YA~8LeEB;%+eKotw2edp@(@~VJ6yMgc>6BpFo|z}Fm!X=^VLwS zy_z|cPBMS7>gX~UM#wLbZ7;JPtF0GE)q5H(BSX9dO>vH65;P4QLpqXUFN3HdMylu% zj?$^py=y1L{olG(PjH zycGzn+@ik2^tqkst&JO%P_93AGG>2lEDQd8SIUp4ML<3$BNlGZsMGjZg~`vjUi!6iO8NfDguMmAV>pRfT(3m zpmwDOH)m6{T3+n4=L#+`NKBd^i%tATnE6x&XF1G4r*_eYzy?&|Wwsu)};WuJJhh(>T@cs;Yzz z2FZue9kB7ZtP4%sJku;R$h3?KW)$a+I4Ius@r&oQ^6k?XT}qlqWF;6yt&O0^_~HkI z{~~1XM@w;9*oV3BdCDJSsHw$eA`Y`=1!@@6Xfz2L%@!MT8ObGyk;IqfAw>(Mo?AYb z5C3#`uNnnGq5M(mXq~J;1BT#Dj0v@`-Y+VOebnl6cw6_SkH0P>)<`723P; zG7Jca(?W0L;@W@vnC#TLl0EB#tuJm88tNSwDNDdZb-8IyA^it%KjkTurDNxG{KAgf zN^RO4=FHba^hW>|26CZTtSFj@CEW~sYQk9vWW;ncwaGymoH2%$tRFkdsc)q!+ME03Ah@fwWjVWB z@YWUGY&oj7d0UZ5O^7yzRZn~Nj%sODRG~jJD(aUva)A(=-hfAjLT@(2|IyIZi{87} zNlyxk zP2+tcKw|2@Y;2sabx1o{ z@Zp;zB(=%@WK66QrUAMl)9Dy>(t?iiF5Twil&-4%lsi#vL*OU zDZbNV2X#&(LO3mCZs$LD<{*ZI0E7(zgC>}hF;RGb2VA^1ik}dx08k7J{FqiSh9!K6|(4Feoc)FkLRbh)3XpL#9@JeEOB# zOke5h-r&yOiGgW??W}4EpS5OEs+Tf}A^Z2itegMSt)whT7(R>Trlbc!JfL*neQAE` zcOd-Y`c2l!=i2)x=2)km;o=_96~*`RBcOC~xatAC%C2kM)|JNdS>zcq?zANXQv@US|4_SGuxY?6VXVDWgJnQKKxq2j3`7Vk+m6usZ9HRhK3jJ`Y&yN|bV<*h?G3RC zFB?cdR{mGaU@malc@(;sHi>YS>XHc9s{)cZ9%NL2XgVT1#vkS;p)-umM6eLm4dn|P z`d=6D?_@@HN^94_Pey-zfVMOErG|tg6#yDE#(6TSlALWA3iYBmAJoZ#Wl^H)k}S)}WNNPtE|ixH#(sALWeS$Vy^eM!wH$3$6-Z*C{*{VomMj`76e zGrmVG0D{6vOAiDz!9oB~S{^X)PgXt9Dx5Y|9b>v_Q%16#IW8Z5!OI$^XY@gFzA)*g zc5QG*!ywG2ux6M_8Rj?h(5~Y_CJ5vX3A431cC)#~Z~1;z>64zXH1)VYYb5vwR_m|y z*VbjoXgN4o#_Q_F$dn_IIEhVS1ga>;mWN<~g}MhuC78LnHOexHJelT>i3Pcd^+dOj z0HSe|7^}@6gc?_@ruZ8lT=l|oY zUv>EB0_5q_9d-sXfn~R(o3eL0h}xNF5*Ve(wRKih4H;wUI0TOVF(rWMG%Ja$vTOpn zjypQvc~iziD@zJUFAXyMJ?H>-vQ$Y(Flz%eG79Fbu>b}FJ!K#Yko-DedpOrSmq?8R zo^_65xi*fFdyRuYFrj94v1mXaWPAg0z>= zV8-$eRu*>3>$dw;UvamIjzie-{~?LPD9(F3ATVDW3y?t}6l1t~Kw^6YtucTI$-YUe zT_jH}hR(*_?%OQ(h%q6XO&!?VJ0tP!dd_oJkzK5_x>}B#A3nW9A78(o50AixOeh%bGaMMlON)IT5? zIm@}qQI{hsL+gQvt(|Wb0uRn|x*}=atieV#U72aJOy*8tCtBbOST56T7@&f}>(X-1 zpQ4~dpex$bRub|KyO9~20@;`8j~3`oJF-YxOErUNfQRKGL(LOHFz8f4A7UVAn2IT;NR2YnD~Kl0Bne84>JO<(P$o^# z0})`MDuvR6uz0mf>DQ&q8Cf}4r)ssPgmx+ouo>8~3J6=6HUKr}RYK>Fk-WUp0LBN7 zEk)4fHDKAN1>S(3ryfM8sO`aU=kgv1WJ6(k`2kpE3Q+k3hA*#wq<@(S>988YYGWR{ zG!x;3C`cB`UdL5PN@QgskY(ePWNkzNrh(uz9CbaVCSr|HRk>+Z8CR!tJ5%CDR!ySc za_z4t|CgVCP6>u{5HmAPjX}BBjP3gD%(O|b$fnTg*Q68KL(rvzLDD#=1i(_Mk;0`^ zs1+=yrK1SQ%5|bBG%AgLt&ME8H81q>fE8$V{P1AJzr^f@($i51RsZwLwr;mU90p_lBt!Z1&9(K zmYSAEst5mX64#ygi2zz+YsqeI#w|cZGC+4r%}58^f?c|i6=;4rg+kQenZY&Q9HtyR z*wbN;>Ug8($DQD|bV3pVJB=1RIE^L?pA#1axZ1GTA@)p-Tg_-nK-0Uc*uj)I^bcqP znyL50!Msgi-gq7F@ry^7pW>en5esAcAaU=L$rP}-%8qp}Rm1NBXlT$l1uC;W4B=)| z&pRH^YG`tPXI@?X$?3FH9dM+oN+I};k%~e_MxF2y*W7)BVVNhfTRxCk*Q~G>JNfr7 zDYraEN4lDQC_}@h)@oKcS8H~>Xb8vdwr-WizBLv!&@tntttR9~v4{$@vT1Klgi~Y9 zXk3Kdns@GOwatE(VBC^GOe`<(hn-RLb=;;0WcdM(C>tCA@FBuQG#x$MdU9@VmB;42 z@op^fnyjPQb}jfx`wbik{=;XDxda>duU%kGROhd00-dc2$MV!XWfsTm|E?honO&9@ z=I(Ld+p$hp`NH`dcSO)W{K1_c1%CsFpW4HchA`efkTk(ye+exeoiw0&;cMQq zH|dIZ*dcQa59xw@sxeMnvMjw+A4*hziZS$n+PF>VJiU9>{HTwYW8er$nJ z*}9ay9t}QhbwQH3+`nZ&Pf(caIGGx!?*mCn&Jfx0QCOj@bWK+E)T$%Oz9EC?KA_QW zoUXN4;eNlUFJ(zM>ht#m^Zr5pjR5hAjWIH0oYwJVPwwM0$v>&~@j;gR(oM%Zi$|>D z4{LT(zx*@zHYd%D2SRq2MOv(*Sy=O#7`R>R=1S0?MS$yHwa&W~!OzGjGNsK;&EoXR z@)QWUg_rap)Vgel?uCLw2^Tl3FpB%>Yznx(-Wex8}|Rw z4N!02$z58`u_^N^E~1W@5`DULEjw?}jrR8geq8-Adzw7(qs^KhBBO9c=s`(h3_>y; z;-fCa{n*k?p=UA12iIJnrx*+RQ^}R{upI0e&Dt`L;hTcC3Z021X8N+Vd@6}0GU{d8 z*l2v--G%VFESKxEc430^{8fwf6sN96?ceHW;R$PFn`36Vwq+fI+_9#q>ZE^wZ2{kd zezVx7igIP8I2Zve-4BkzUuWIX0>EHUqLqcdnS1NIx00(frd{ZlHl zsC8KY#P6-qsPKRbpUN$*G+Q+E8NQ}jI_qLhe%f#zab!k?QQ5Q0E;$<vP z8$Qj6w!tGT+u+w#_0S}FISr|>sq54f;jbOAm4=r9wdXRH7xm)O7b3M`&Vp+=)$C{X zG*gz@@c6H;&vIp!6}Agiw}Q(!!!&hF)P4??|3KM4x%KC=B(|9BmUibQ6bv15uCa$g zMdSutpeMMWzZSE-G;D|i=IM@bnu+CVPRju|NMa;0VK8@Q62#HfHZy}s&%)vv8Y)*C zHoK`^ofWCA60Zuk0k3Vj&CrRvMUH@1FSm)j0ZepMV05%I@wrOrEw<|a6$i8XS9?F| z{W?uUHe6lwj3rCxhzdKzvXl4F8!_PqgC6Bdukf$}QB#+^JJJ%2CW%ztq*P@m_2dYq zr29v&qt3P3f+sAKsq}3U-BhHvOQl!!NO`e`*S{!=h#OgY-4#FYb~AESRThXHaI`X1 z2KNtZ8vO5ZUFJw^8OAsg8PYxj#?>Su>7!^HKSXS&xuks#^P&`}qcU1Y>K)d!a&$nR zTh?W{F7!9X>P$HE8>xnwN5s>CSrPAVDl8l+knO!D63T-HC)(HpT= zfZujUZ0>&bPaD+{(do3C>72BSvS5Dxx6<>U^pXEi=1Tn<38-HISU`48$^iHdI8C;h z2;0RHxhqb|&CS64a_PFaypfK`QDn0*Z=$WFCdc&{4XvcAikRw~1Z+&2jM0&qOh)!q z{mS-1gUmL$y|6Tz822!Ved`b6RP*z>u!lm-Ew**tU9ywF6!{Ah@*imVC%1mj@mqH_ zeQI^UHJWHdWMRxiT-bpR$Ln8h*mS8jzA|d>$Q!d9G4dWtkxMhedR~gHBtvwkkx6gl zmAQH&ZxyaG`4oZC?xbv~eqv&+%XD*_<=y00mApIikaxm9Ej6QYm34MAl@*;$d%KgW zzx`YO35EZm%+<^S82g2D36wLa7E0>3oQpW09lks}5C*{f=?x^bQwGIQLrT zNGG%!&@$@H)@o{dY`kg4`h{`(57hjVTR(SQ`7Avr^(;MvBbwMQU=;-jH*Q0E^+=%e z`ujEBE_4L9pOvAClg*=tkk^K@)efXWR_`}0HzBD)jd)_ts@R@0w(_xE?u$BubGigM z#?Ix0k5MU*+}+RJY~XM>RZaKX4xx{{(GI+7J_45ON1ie!ptMzLBm0z3L1rPK6| zrT>K1|FO)^N&po&iD&6fB~s~6jEsz0jfF0gdwM_MUGID4NPQ-@r*o(xgF6#y7-G}-wk@*#@YKz|&T)R`yNZL{8yM?3W$zlqy7PO2CfcpkvITeyWl2f%p6m5^UjBDnJ$g55NTPT;G*|fZqam?=GIxh`#5f975W%n zVKZOOZKYUj&_0*tSzwoHQdv7LFEV@S9)EkLg$Ux_2lTwqk`LYc{bjv7>;NT6JWSD<@Vt(*BPm{gaF<$$8>y-q}QV-YG#ujfy6b8vm@cNhyn(Nucm? zcBadxN<-P*q>mlKhWy2L28jh`jx|}EnN^){s~+ooG1f$fHVEA$!qAVbvZ<@A$&zQ{ z<>Mb2v7Blam{c)!IMQUC+Ynp#6kg0uHk#(ES*rz(HDjx=mHb8AojXm}6`o209ylQE zqy#`utdJ>WKZw^5!J*#xPx2Z1gTO@Lb#NFerC zpSzlQcz~IQW9Yz?j!;WUngB)_l}_;{w&(+;!NSbQ7O8V3tZZ0Ne%Z4uSazwdqmp^U ztinbov68uHKlW%pcEnCc8R*OMg&~ip`2+^Dhdk_fb=HK~250H0hK8VxNe0!432Z7c zF)>MXzeE@`A{n;WN{oV}AiyC86-6aMsXF?Og^VC0qUP@+zd zMwz^Ju12PEVxmfvl_uk0(J#6uYpFuyo`)(*t5=m^OQM5h3!W!RF=5Gg{2&}N>m`U4 zuo@EsUVcRE36kt+H}%qlE=72-Faq^WK|uk4BzPWF5Gjd;Ek%$bB;5Avxj*G%zzhX| zBQ_|eb2$kjBj`{fQm_ewLZl0d=o?Yd^|0upD%7JTEwIvpNI=9S3YgkT7Me_D8tWDo zRu<}6@|!=OhRGZzNvc8em>mc3=#WG&q)*`FhiKH&>$BpGlWJX>q1dt1l?rgM2ugwz zF;G}RbQtE?3M-}nod{i(Le}a_kDF*obx;XADsd1_B94amDp|FZMgVr&)Q5F<%V z=*Kn-Rxd&i0db{B&nb|A*rg20s(&Ye>^36>6lI1H#1wm?); z)(SlWNg%Om;Gk%L3sJgX0@j0$MgxuDkW#=D`v!1+q6GzM5maE|dHHwHBh?3oTR2h4`Xkjf=&-J9k+N3N7A4ZMKgB^oNkB(uD#B)0l10Y=X)9?DGJ7Nq z_D3okO#F?^#iM#E9UL6VRn*_mf~ECTfx>Qm+2jctV!YIKOcYVe!^G3!ys=9?*585EJ0~k#foPYgC<9a-dQ+X&f9J3_9rqkTgh1 zx;QZT`|1~h_zREF0rnm=n^SImWpMeNh__T$jyO*3gB;=s#t4+P}pCF5(h=l zf{h$C$qba}<><*W2}7gJJa8x3OC{Npo*Dm*%!D=!4iHA$s?$AgVpR`bWJEDiBlky4 z?Rx*^W@d;pIGyh58;&2)5#N5+*}ajJwlBN~@K_+BM_|5OvQI0e$ExFR!5C>OTkdW3Up#!=(^9Fg2s3nKAd0fu1VE~Dc zm}r~HR0M?Qko;{6z_p`FCLk_KRL~-3Qg5nAW7-zi|5`h{`N1ezBO0by(e=zL&Uo=z za`t$1_tBwWn^RbS?HD;QWG2(Ft}7}?M!TroLLYER;v~KaAW7M$N((@#>~ccw09Hm# zLb4QtO-fw@HI%l1G@%fv9c_gjwEJh}ev8QAfXj})+HWZ-zCWp=v# zB2dI>eJp}KCITlK12E^|EdA}P3mAhX*$8k-DhvoiBjt)mI={Z)b~*9@TnM!6i`h3e z)-Cs_{m%nUxD?Jz4j#2`#0YtBNP^JRw4@Vs=)guQ9BQg0ld61bMz&bP&3t?+d!u~3 zY|2^$T6BrMK;JZXfdj5psTi#2v^Y{q8d1O!gC!|rGz&EIWx84bfoK4L>L~A{f)?~O z*-L0+i~>Z4%pl!*0DgShY(2hnMx)$wysX<(ds|=m9TQ+@4zpmhO$o)oROc-*x0!{1 z?mlL*-8%c$Jnkf1yYeh-(eBd&?Y`s|jwhw4{P5ij}HTW$kJ?Pk$$&Od*vZ|P(3i_-@tyPQf{dUJDA zn=BuGA{$B>JMQ2udD_;MhX)v9hSLd zJ9yLvShu2-N@!`(X$4}vuj>CdR?jH_!0M5J*}1{&=Bc<4ibO12*S71^oyG?=GY;p0 z+%Vle_ja{e-H3VHfX4XRMGG`uf`X!^67`3q6>Lfl@uCz8;&nTnV>-7GhF zvLSxDEHp>FYvV(_y_R!`MQ*F^uHq-uQI>;>rG~*Dt;XYVvl2Uo14LGK@bBX`0pnTR zl^~26yTpdlP_$RGJl8;&DBQr+nvZI|d!#$Xj$*T;qjn%WYF0o~rF_bQ`JH>e(Jh{1nB5qwQ-a{Ww-FP=G)TPw{lmASt^A)Rp3a5_%;|zeVN|Tfe zi6m1GsU+(M7d61gTPWk&>K6`(?nh@o8JczadXRbgr6*USs^z_f2I?C*E_E(N^Rz^} zpu5fwBoL z&vU%(_@mo`1X6PEQ^2k2@$NkjA+gchKI?rPQ40zchGvhO3JRXH67IlDHpx-@U=*h%ne2OIv;3H(n9;V|>?w+WUeg_qKeF>E4 zdK++aqes_s_vG_lYjK0yN4HjYF>&6W*N-GQEl?B;47l_Zm>%B`F2C_e77o{7>h!io zh^iv>mTZK412$*F)8BS}U5dA>oR+we`$^nwqZ!87G%SUw6B<%Vr&595c{s#+#YqBa zWsFB2=a)yyjjtf-SO9`1#U}e}xpi~Jp{qR~tl!T_!a6mBv7rE}$R8SZrMK(hZW|Ec{EZsI3 z&DWpW7nI0*fyd&uR@rXeqikyKAJK0#LKhnDF zenVZ0g=9O#|3J0#e8;SQJE#3ZFx>B*@6y+Jo*O*P(_YkRFQ^*F5H3}zisaf@O=z^1 z(up38e~)Yc+_`Ba-i4ok<Lom#ND-758okmf4yP)A!EztIljUk)i7FNxv7mqFhgb zr0w)xj=SYD1mj#Lry!YbwskdYgnmOyqv?Q$wSzzqZg6DO7W2}P{~_W_?#ipVwMA!Z z-VA0vllt&`naFsyFn{Q+0Z)pzN-`=hiK*t>s$9eEA2>de6w=Pj?73Vs?X^iOSg~&r zf4CpEnwHa@waZZkez^pzK6G_EAHNHywp;+O?xZwtQUvzeJ>i8@i5Z6|5*76tK!u!)*lkXskuvG6(_o^?H zlw+vRXdlX89rHnJz7XtlWN@LI_HYz0pDVY_Zs#mLk@0z=J1X22Pe0fKEd6M|O)+$lxN1E-At!!4UGda8?G#o?M~X|$i21saH_*>z57_oS&iJ@x zDCZi-GX~mB>`0ro5ovLJy2)7CksiER+WorPo3M$Joo|5;ly_bH(uHW=19M=SG7*}> zVtt0|;pg4%TB}aX1yzh~Lib4bC>&W%FkNC|CVXZc$uVdDDHO?IG{vRq7X<7B=c>4_ zCaUBreKArgCPdYMf&GN!;u`tc;ST@agj)uz=AGv(p z&+U9vTZ4Gq-YouqX#_DK=p2$TgQ>}mm8TUUp>7~ zE91@@XAin^`5OD4kwiY`Wzv{eN70#9V44*Xk-Q=%jJE&fv5JWJv&w}7e@$$#v523J z-u}KQNwXl7@bfip388F!H>wU5Cpxmlv9)Cvq{X`jKq-JF{U|qIC^x3`LrxC`j z*)qLrNNsZbVgfoEobvKJ46j(fLauoW<-9u zne_(|Oo%#)c;9=}oR1%X!1d{~v)VK|f=RxOrPxm9!QDOFq5M4RQ{%(~OFN?+K@OC3 z$k%4uFS7`?3Ee7MO_y66&l%8dIR-WbLNp(Mg9=1s2`2f|9jqTd5Uz{!XpRxQM&JUY zbp@9CO~XD|yRiHdj7A0o;+NtWJQiLzazEP*4(K>ha}cp!g?_ggP%4K5O)D z8ZIiw;ZaU2?H7hDw+v-6>mMb%JL0)7TP)4kWU5rVQ6^lm_NScm0MJAN>lGp35=aP+ zOv-YJ!7%N)t=YELa=~qw{LFG@&(Rf@y6=8L3fHY%+>z(yAIGa_Y~Jd2@?d+4ICZBg zfAe|8(a3HXFXbrt<@hew!M#U~ zXP=gv?ds;3QezP+zDk08)YS4HoXnLY`?L)GP6F#2W&-@EOmILs|YBUBte+W zuhfBnE2&Rk(U63B-FAOwyBgQ;8|;|wnzhv~bS|(vGC14@ z?zkfUr$Xp*-wBvs2C710)Eg4x6cnJewRz+xs@%uiGyxO#U%u5Iu-p)PH+!5-?I`}0 zF(l@JV117LS!DnqS4{4HR64~vKIVHj>qVZ_#HB!~xp^Us^X1tsKCa;thr92FzvPbf zb-#6^v7XwWbL!~)3Ue!85faS}g_aUW84^n=p`?O~W-9-d-Dzn-3kZK$@qC7HsSlD7 z+0YYBS!#u3YilMu-w`s|e8pqh$GtVXv8(@H)sH_m&#lrG@s1Z(e~5gA@FV3`^wM!? z^2(ciG^_d^m{*HX$!2nFvgA`A&lh?3Y8EYScuPD;$KUCL&u#4AqR|=MaKw`VoUK5_ zDRi-T`=Cqty(ozbB{IZ*^3|R7mq=dMR(o9wmvYo3V>Tghw-9t>q28jo6TDovJ1fNY zqIOf0kAZzz9{8;v>6fL#>2eB?9U>&uQ%c0vgWe%|`Ke3d{)5hUP%8iSRe0CN>Yg8$ z4zgz=C&yJ;gATv>(H&j?2L+9t?~f6ioaH6A6_h(~rd~(YMfLBocC0UET9O=IX?wfx zlb(Olb8p)FJ4oX=FaIvS@qy3{hJ|gf+TQX9`QhZGOe7@s#04!lZ6x5KTB?$QE2^YH zD9@qiPBJZB12Zn;qaDn;G-qK(P4?9Wh>m7c_@)Vr2F@vB?{<<`FJuSD#T(5Mbn$7& zH@S=8QALcwz|jfD(@870vg4;kynC$LXhA4|zaA5Wj7%r7&}!NLHm9%B`52GEvRzkT zy!GO(RzQs}lv+!!BL^r{aiHKDB_}{v155!}q>1cg6fSF@H~Qft^JA9YeRcOA39mPH z3qX>LKiQN`n2cMCxU4j-D0T{Y3^E_HWo9OJ{DK+%68sQD^xh~g(TBtQ!+G|r9Xyo55z3hlO$Im1Kjd!xAY+^Ow+)YTtw@sBD*{@ zNjU|%YU6QBuI)Rafe+RttLd&L(|O{NovNDb1qDGtDPS;|r1#~eY{djJNU8~A&U^#z z;ln*6SCd{QdX`?(xVodGCTH$?{Y4VHn3~=}>|uACAM;;h(rth%v4x}RzivV=Cs)AD z2V%;kkfvw}As|axgrqA@JDe`7&3sWUzh>u>C*EdPIe+S#O9Mj_hAK&-5viOHkAv&A z;tNY>*0sx4^jg8vk&Dv> zwIjS?#xpkkz9}@JQQkSFgs;%Dp)_G8{nx~btAJ8Uqxp8v43@TFLhXMnRJiJ&o*g|c zeDrRw*kEMq3Kt=ZOpJY`LHw9$*~l+$$|W;yIC(5|ZSR6#um*nQ71^9y|j zCS%o*szhaV>B2IXx9i)xTU$j7nQJj&|vXy#-v~2y(Ztgwu2VT*d@e*yi=mu5pY{nqOM6h|KZHTjX_ZPCEBzPcdbgMH;`6`o z2<`mkHsQqE_hfF{O=2b8V_`>-9AYn7%%+ZGDUGllDU|{=u0Qu#WC>)jq?0ZKe|C1^rXUn;kOJUCUGi9G`mVv4{l;;O@%AGC9b~!dgLt9(DpRrog&iw3G7^{7 zmF$w4!BHSagRsmJ_Zs6HRHqrsdQa zTG+||l2!lqi~MpsdHEG*inJ`aQf~lEH`8f6)?B^h+Trr}qbC?K?gkHcTCf%H%T@95 zUem)NgHf7bFqiu6cJ)=xAI&__fL^Rt>CrsS=e62HPR}iWvd}B3QHiMZ4Xn3(`9FPCgF}YXPSrDM~8oKx!H-fKgJqYG6!8x=mv>*rOdc zyPLurh#g(3&U|hfCpc{9tB5C=4o5@#hxx?B$l{zGk+B=u@fo!X$2EQ=uweT~%PrGK#$&AuN~}go!y~q3+LjH~R!jhh@uztjl`QvmJse4WckC3* z)>fNj)x(pFA3YS`_z^i?H~0Ry&zQ3+GEB2(bK8F@ppC6t3=h^gKa!K{wBu!P1RTJ9 zjVlfq-Iz*GuWJBtR74lcrp_M;j*2f*4#FnLtl#Y-k6^yG(>F1&q|qqIGBPsWtT$Zg zO@P=$xGK1KM76oMaoaPURTwDU?Sv8;H%WfV;06XC9yW?j}jbR<4%oG=IoI zI$){yPsHc*=DGVm@0CjVVs|SbondVE2>`Ab9x&O`zOH&m&5nTg}sFqdJp* zqkX-|9Z%J;uIAlNaW|@(5~D`ebT(xjL(+lE;FQ1mBFn8X6Q(zNj*W0E9qgzNWz+7v zlXbqrJHjK4@3^aMGzM}FSyYg)u8pwIyP1&r$qW&y>_vf5jRB=bS`mNO5#V&V0u)7! zJN!G24w@Ug$m=w2u_tn;Ij#p=qZ@I%Qw2ca9c;i0m02K21VH9tG7rcBQKllJ)=V8n zQ*)iyHdZ$lp6LrE4(7zVVh_%oEM>J+SO5nMjCx=3?dRU;5;F_DWSJyolllm8?myZ- z?M%z}7`BG4ZoFCDTsk^DH4f`aJaFgl_?%8`?%{^amLNOTo{7Si#D$pqKTFy9bYk!O zmkohJfr zs?o+)Vt?HP0s>v~2K^ukCD#3J`Mqq9^R|qlHADW=m*i!6nwD0zSxq0x1h}Wrziij5-;%_E_6eSrim}2vsu(be*+?3rmJJ^WoS+sac(SES?YdzLQlzuXq|I8BvV9Y==O>|4?p7HuNC+vV zk@j)Om#KG*QfH+n*tUkBt9|t?dBJZf5hu|`nX6aElBkdL^jqpFbR#G_F}}N4wk2`R zcxmfmzZudAkM|jU1^4VUo^+_4*j#(9EQ?dfCdpf+ZpXtA`?K$(jffh@RSv+LOr%wC zaaRo)98#uKN0OGsxDqCY-R+Ndx--tk)VR$NiyY1K@cEuv2xCc!0xCf`-;eRB0UX5u zXvG~JAg^5W9>d4TE(C8a=yqGi{nZi$3{4dEpfJW7Tom~GOPw$~o8+aNCAb-lh=>r4 zeV8p%2`~ytVmUJWlv;iUW4W5n+MW?KgeWMwpbEBcymjvyZF|%*a^&nFx?Bs@a}sIy zGnv&cUECgNT(vk~8FN3&^s>@6*9IjmT^*F z#@@lMAZ6b(<+e=|>uHbL*8H9mzl*QjXW7pZcRz`Fj_ddCdz>b*rxLSiq!lV@WWfg! zl2?qH6h9~*pZVM&==y<6aJ{w%3U%FPCRfVT5mA%yKM?;U(%uC%GWwL;I@Xu6zT<4m zgwDiplOW_8IL;sl5Uq=X5=zX?4CH62Iw~b16m?Mn>WQ<{4t*P&yR6e#f8m{0o-(NCT6R2|`54jux@w zDJq!!#>xJjir^B}MV;E+2W@~}g3IJx^D89wYTIp334Ehay#fna!N%k1+-odT!Yi}n zq+v_v<80H#+vGlj!05F<_t3B|FYeM{stGB^P zO?zM-?4Hax-g%7$5JN(Xj$JZ@E)=3C7iSGPSmOl)p6M0n>e2jpU?NC@~60O8wAJT&K4HdL}&9R2bu)a{kx2dHU20@6jWn zEngis?sv*>o?irv`5V^3u2~-J_<4>OLXB+MquGdPEww^<|KJi>*yDV$5;)j?sSk~s z2u;fKI#lzb=`PKKv=!(MleaW7)b0-2m#JCd3DSbJjbcuR;ioIP=uh@<xC|ZZ}|BB8%xK|o?LNV$le3x zR@cKXZ*!DNpDF{YSHxxxvKiKLDjjrNjTOffLba)N)c z{_gg!pqMI8$p;C{lA&!ETL6{uo^X`;_E6VWLSBnR{ z&pR=xy2#TovuyQy+K)TT#*wh`jc_aDPdS<0s&*c@(M%}j(qxN7goJdl<}zNf8%#h* zTJ|6y^c)e!LV50ns6d`(*b@zy-LNC>u(`BWq(%W9O5{@@)WMMXiX;%1Ai7A4iw!5p z0E7i_2Z;HLf+d}kqJBlfADsvAvr17YVisUx)TeT~AtZJDS3LI6oQP<4AU@OwG3Y6} z91p2o6U$XIHb6s|6rd%h5OS&+_Dj*zTuxgVwUQWcEC&Ky0pVnU-a)Vo1yq7R(jVX#ABpue zebi(^wmZ<;9nrtOgYLim!flsdIS5`nbaV6(?g%`%pFL;yardJlI*2qC3L81Kuijd6 z642q&NMmIseu^(~*S0OG`9rtC5i;o(aUIz?=Z6l<4-`G+T{d2n$u9Y~SQfTU1Jb&3 z_df}*cPQgvwc;2Q6#U*kf|!&-N+GDUAqm96ARv4}7^XmEBm*H?#w=6pyGyAFgZ(8D zA;HVHf-URk4=DP0Dm8PO)rVy1*ctVd`a^(KTGn;0dSS?TFW$Y(nMK2cPG9h|GB`V;Y9|DB4 zcp57$&&()7?$vZz22(jogCOJ%KVGd5MxJuqBTW__gD_dZb-N)o1_%O*O_r(4_RQ$= zVUH;dNE9%D3tAu!uLf-;dUTc3TF_+^>llCIZmYN5vGXZ)SeI_klw}Au6B@;l>_^UgnYB+$W5c9OoZ6+JAdtG!5u#6X z%XcqhsY2oPJBdk0VQTKPbmWfOUDa`xTXf^omt%kR`K*ImAEsbMg%?NE-Ktpt3CtDREL4Zs({TWC z&SdE_J7ae(emtdrkwP0dg$qTJ78us3XcSGh+?&7l@xOv713?^sKn_myNd&3j2C~Ke zlM53EWRDO-{%xV5=?MfNySg~}NjSQ_cmwa6inLEkQf|5HJ@j_>%QMP_qDfY6`nSYD zNY_fPKK+v?ze<#Ek;JNbNB%6F<4st|a&9^rRdN8bE zi2i5gW93JNMI?1zmCEOVYco=&53x+Rq1Q?FV5YP5HKbygM0^C)4@!|yK4c;u|J zi?NN2DR>wNq%+g~yV-t`^xu76b-ic678dA!iHhu4(e#GpVaC^`UTlBED|g?w10yz? zc8~+`Ghe@NX`RO(^+LptdhLh(wEQeOg5|iSEm`ReHP|G%K&<4lie?4=$3}Sh%F1wP z3Vg)>ta$E3(C{xcJb%iuz+T`W_?caaeLy>N;{CO;?Iu%@egX#TZ#>n1NBG~Rf68M1 z060iI?IVT)H)BNCT^c9;W0P$1q4|z4qT)suF(0SL@vS>1miGkGlVd5Y!*mlj?xw|^ zb8%`AYd156MuUJr>(AM+G&ERMbYTx}HE+3fjC2Z?J58S~e%o7}>f<_N!92(h&pEK` zikmcU-gv!aE7vc}^^86^Yv&iZ5HqvLF$hHMzCH@5x_&3jm+!LC0&&#{kdnd-xxeoN z5!;1{a(RKs8(35yKy%p$Q>RybIhj??_eK9G^mBVm18k4)D*Lcv$EL;*ci)ofK$<+6 zIHvj*2;s&P7x8cuTM4Am?RvXp-!jSR-F{xpJTYE&*ga)HN<#mpManeM6@wL1i}o_4 z9%FjJZNb^D+}Yyg556}ZbU;nSy5V?$StfJeT`X)?KOYh(C#?0w3j4C3)lp9^UzNCgM_Ik!nMdgN^v&3*dvl;GQcDzj z*P6n0;F`ABs~P-}U*a=>FwDn4@qo;!m3boSax#ZSF;&I}!I|jH(@Ihwa{=c!fY4~oJ^D6=_w}q-x{(#I z@}-$>zeu6(C8~0}@`cl^u}57~^YegW$DFBXB*H@TH=uC`rYxa#KDAf&{)5#uMpw+2 zi&PKykP$S`eOZ6=g9hY@HX5%d`fwi8FsfXZm_;sAoFBU7j-{2siq|FLUWB=tov8Ra3eiuK zm;>-oP~ml3sMb?fy%sDi`m_Y}IKf`)wvaXCr+0kYLOJ4H^Fktru06f!5)HF%T{O|0 z+#|juDhn-iVP3L>j#?RyHjFxFRAp$sVjEEtwo>i+)vDc{j!Py<*vGh9R-rc zmSDFWY%L3e_Y71NsQdOFDDQSsR3{gLM%<$&HWEt#c>fT zaWCDj8HuuOhxPAUOG(WA{k1D)h}d@!5U%f9^2!>0qFD^N%Qwd-{KtX$_eI{*ln?pQ z#CvTSbMGIghiC4c^r|n|ecp#X+E#J0jAEZwWF=&~o}$D>m{6UF10fvN9t6(4(2&Dq zUJi6w-8ibdU-J0uuhObH$8+Hh?s3hO#jS>elP*7wG(kGfr;n9z9B=*KANwfIe_H%& zm;IaQf4lmDABg+5e%A9HG;~0Ku4P)|WH`Gkej)RrO(L&6>dS43y}zCW%zqqD+T5}4 z%DtD`M)9IVl_IfO=MIm2?&p8HtJ^qz!Tii;&~gAU@vUC~h`i@Bt`cK)3$LZ4P?)mY-&mPI#Vsh(d5BR^8li5k@r*s>DJxdSbWCHlf7ksF-gs7sv>Zbu z%}#Q7>fR@@TTdR%ol;Y$=`AwR&(TRqwf`N8NA&#od^cQQKY)b9C{oKKW_Dq?B@4tKeY4dX7d!}I3s7A4#`?KPrW=o5zN*i)WI7|?55 zNCz{eYDuCdm0(L}l*G*P74CTU5Gihn7zv+!Ms#ny2ei^AZaouw7ZRTEWQ?>m!w87J zJ`T`2`jS__k9d%;_LoO-I-hWIH`UG8REPaED}NH{?ly3ve4K_)m~VNUNwi}HKgw_Q z&r`%uZsd%8v5%vgk_b7Pj1bYRyDby+=l3tKuS9{~bBTk1Bf|kE*%}>)Z(Y45^2;Nc z@l(;9{yuzeW0i97{MIq0grmfMDn|8n_JxE{J#}s1*oPs)2}=UjRILQo3Ms-$tf+Cy zzK_S}xAQ(__r73Z38P&4+<_0%Oa~gWY*xQ;92T2t^tiu}y#$yDpBG$F;tY$(OK>iS zh<41YX7<;RQK9D{&c~kb25yy|o)!SKqvPzcvN6zkv)NxCETLbhA z#}Z@VE(<$e0eN_>>d-kh94t+JA0Ns8gOdN|#?|OLNM7+eVCo@=rtJz8|C&GgCGcK+ zb(mhM7H5OLj-<4*ZR&LpCq(aM ztA+-nEsylfp08l>o1-P76c z%3fi*Gyph<#*Y)y|H%5^z5M@w=>IW4|9{r~e}Hx0`$3ndDq^CbqG4j7p<$o^2@ncV z(SQiwHwmv15fjkT-2qF|^YRI*laM+y2uR&xG7o6 z1q|`iZPhi$bT@sgNo1f*n5T1+@~zt9dlEx0G~0DhE`uZ%q1Jlh5`0cXu#MneF-tIq z%4!9+@L&BYWSum~+Xyxec#q27<$IaRz5kX! zRXF}8WMfAE9uWdUdLsCtw}RB)EL0zoXt4)*?(98^YO#0`qOQ3nE*GD!Z?U8v9kcYL z_G9QZlC?*M|``+kgDsVt%Dm>YvfLhcHf#GkWjO z_blPf@@z+}1(jsxmw4QPf&3kD&iD1p;`$e};g2kF>-Y0mp3MIBjH&q>B-EeeqCDz5 z$PYoqTHjq*ys905_nfB}b>g907cohgId92H6HnkK`N0B2?83tOk^RQT6pWrR&Fn@s z%v5Q|^!+27D5tJF?>>JAy>xrAD)k){da!*lQ3Mu=V?(@XW9fU%t9W>Ca->9mwS!CB z3n$8L?jSq(oYZb(_GRoeoYxh%LL*sF$f0{bj1em;m#zQEM7piKIVRuBxocOAF<>wC zJ81Hd!?()FWV~wC8Y6IPZG5F$^n%s$iTk10UoWB!Ty0rvzSI$Z)ZNeH_;%3ut{I)D z7qiF8<2&eLHTyg0anD7D^$VMrgT2JufaatpUgS4Uas4hZF-|keE}HSagW|tl6Z?z! z_Ge?b7;Mrk-h!9I^vpZaOE5S>&v+CP(Ke4)(wzi-$M{;e->zet!j+>vQP+#LJl8nz;jUh(@m+!G3^Dnj^}lU`m&vk{Z1cNPQS#wp!mkMD@6Vwai#iT zJ^gmUL-UM1!TYyQ@d;QDbJ(L^bGEX8H{bWlM6eisUQ={sfc zQ9^LH;K3yX_uv}bofmg^_uvrR-Q9yb1b26L65K6FZo^vNK6{UI&$vI%-#ePoUCb`) zS+i74nix!F@^8D)vdmWzV*XeknbLLI(oJ{O>&V+oh@fYmn-uN%r^8b+1-K@2Kp=W=Bmo8tg zLaL7A9-p1RVDH8O>4bj4vSS|!bhhbpK@3UArFY;ONFTBrOqUDA1z8ukD#AnwbbPgwHT9>22$U?zT9Tl zfafaK&|tQe*2fZI}^qcpmh#1OvMEAYh&vM67JK$plBr zYs$J%bZ#T?%`}++53gxizNc;rNHWdyQJ5X5oLd0|6C@NpAFT`^*r^v7G5so+MzzV?$1!szf<*MA4!=F#;)o|eP2 zGL66&E7w1mzUVt+;LY^;f1kLkNsysq(+1TC$#<+?PeCa-kaWo157=vqC(d5A?{QOP*$TQQ>&$XEaSvHCgX^dN|j<* zRRQ&r2|HX%5`!~OslB{Q1@(M$@4CCurn#@9N5vUY>SZ)IO=e@zVlC4*%+?OutmRRfJ9 z2_U7vwkVJYpY~s5pk;veR^*?2|3BgXmLCvZNUGMPf5D;+4*!B-=<_{5c^6%X{4W9_ zK&ZM9AqH}oyybW$0673c(9E#Op$~@sKUuzh?K}{=bA4XtbBS7i|8HV#2S{uJl>eD{ z%>z)rz1{ksng6}@Pd#s?{wHNScjHEx1uGE^-IY4_#1y#+Hk48;Pp6V0&1CQ}x+sUe<)iY7}E-j5X zL8u|hMad|qrYBbAgnM6pu}^78JO=gmchu~`WGrbOsB0Y5IQHXef=bQ0!JsFhe6n#%<*xY82U(5E2AW~3Gmj18&zg?92P}!7bGeQ~>RR#ynr%{joQL4k zA`yt;jw)X}KnM&hPuf79CU<*HTH@^{`@93w>2->wpfUdaJnbD#W#z^YpTGq8wuy3J z*oE?TtZ0c_y2fJ>pojMcTB?!(U7cAoG+ZJ}kwpR-p)!DC4^zN9H_c_ZsJd&1H()_r zM$$&jDyNwtoPtsBTxNARs+WvTV84G|n(kH#m-0&wa(GE$??<^r?2O#Pz@oQ&2gXNWSjq;ra8Q2x@CHse$#y>@~6YOk-37R%B8c%ViM zzRir?uge2O@!Fg=-CTOCD*1Vk%Fh_{x@MErULUB5*;|`u0vxYjD?L%|9^`6$ek3bh z>DeYZb}9;z7+dc{MR;X$L|4#X29CFHnB^&L54)Vd#8i;!wTjt@A#n!Dr3aN*kdkAW zuUpmP|MUFo3ZbyvK_%2yz1-if6PIj)kbItlc{=(&#fnDHp-paUiM}*qIU#Bp&MCwh z2`Ez?(R2tBHr}}gZ!Z7I9QzBF*TdI#LtKI=X1jAH-%CK$toh7`WX;3^vdx@sFDDJL z*OP1wX#H#%2mYgPbH|nJsgMAtrxoA%u7UD7YN>Cf&}e*X&i&|uj)L0QBF4~pX)F=e z4>YA?^dR}A!qPP9>1+BgsQoy3TKX?;CgQezHx_3k%pB|}$2R+4w~VfL=`dw`=Jr$G zyU|ASJo|@ixZm34{n~0=QinYDbgno^TK!rh3sq>J8RgTHa^E04E~^-KK0WSK0g3+b zA?gp0J^UZ5bscq+g_6zL4oP&nFLqAg7S0TvH`VrKFoSW46R}Y`ZXqv-StZ9Ce^`_z z3^9Fv-wXo4i%L!J6@LT19s7U(hwmm9%|-!5Un-Ztv{-h7gT9 zD^2w5nbVm1nv^aENhX`J?h^4N<_LJdWa+meR1p?g2W8uRPHB}g@pqP>;?}5B;v_(o zW0Mye&6VU(=KIZle|L*S>UFf#AC(ofVPqFHB(r?}lG5U7XviXE=;T_6KThGyw{ow3 z=NdmDkDJ&n@*#Ha0xEKf?S4*0j=F5IH1G-QKaar8^f=KNOz6I6g||2XlPT%OXM(dX z)5d7J($my=I|1#zek%MItokus_Hmf^!OzeiZ-$iWqeC4>3rp{{5b!R9h>UQxjn9Y{S+H+DAaP9XAa>fZR7bi8}hgE2dMz@jV zHQu!};j4s{d?|vz9K^WL)mZ@XybAcK9pBlftP4@h>iP;bXcYZ)Xj(m{1=QNY%9tJ+ zGe^gVb>8wY!k^5@%QJe5ebp9ZV`bHg^GsyYNl`w!+iMCtI(j(e)aGT}u?;!l4cj8( z20b=4O+^uO%ZRP>r4!!be}&Jlzt$sXY(YB6r429PicUlm2_XNAKTS@`8iJi?&vm_JmOT zC9bE`@3D2chsjtCx_&be^xS(qDooU8;tW}QIyHP^ejc))=8%TWq07Asurq4OL|Q)U zZ!!XpSsyJ6X0WH!+Cm)0`r3`8u@sCHMUtX{vALiz)7S2=*VRmRq63Y;znjjdzu$;c z_}nhW#Ebc}(ea+kqQgI6a+6b7oH+J;zm+(K&_9DaCf@cCO86-KV;%X_d0_GxF{~Nk z!!h4qFrtasmrp%^!7dS=Ww*osL+IuE=YJs}!@~bthW}my!)yOl=l{!%IFOh_G{1GLJrJ7{_?+uXwEr;UwM(T?)k|xKDitUp* zpaFzgfWQh6{zu<9-cgf#c)qd#Sc=zu?ZFcZyx$Sh#}~wc=YQ%-$?CK@bhB`b#<)zl zhk4mRxdS0W`3uyUvPA%w>`7CWlbJ@DTOc{J#(cw58ZSnP&&~${Xke$4Zxf1VhpbmO zxDSZWvQ!Iy!5|4&wh2}Q>a6fY{AEeC$2?e%7aHZOl8Ty44n2f;U@g{t{A5RVIrqEI znu!}iT@X+UyQtabis@;(iZ%8VX5-YxsmancF!#_rJx-ow$?triUu&F_N} zlR0%`aWDMTe#HYT+N?DL#{=vU7@opn?pUHIQrTNM59;zLI0pirX^9%0yQj$6goZ?J!^C4(Nk!#Xzl12c^TkedQ^8(k(Upjmr&@zlDANh z%yFy5-sPxC)g`0Og;>NL0;Pr4wdeDVXZzhQJ5Do>rSZoIo)W8=$KuyckU!i43sB7Q zX^pY@!kmtfT%a1PW2v`0C3Cb9^ZWYa0EGQ{{BlE9|qp zUuRXjXY^WRJZxIk+-sJDHt8mLuG#IQJ~km95J@|-ORwh0OP__LS@Y;>3MoPVN)dlu zUZCwN_B;k9fuh3lmE=rERa%F4x{~N$u;#yDrs)nMr_nCd9K%%2YHhe+zbU@ideQ}0jGuoV5L?tu@6xaCrVMAypjX*qW@S9c4S zZs@v=94Y7N-wp%GZzn}duo?|kwt3yX<~wGec^ z#(JvCS@7M{_kJ+YvUfhV!mE~G1NCa=e%Jq23J{9FU@dW~&uR@TnV0`?DW`XVBZZ30 z^oy3>pxfu!wi2X*e2p>Xh|mZZ1e|UAAMIR253NTJ+$DAz$zur;76i^7GeNvNj-_G5 z$o0jfx8cBy9jEU)+DDDjF?={H8pF&H&ncR5DcH@T9VOgp!Jxuh(83Q?qED9R?}VTj(Ws$ro~dp0xsIqa2_YqOm3EvqgY zJvMnOBoYdz*->K)%{~b|IaD)+hV-xF4P9sHY=z(*n7P3#|I32o}+Z%5T0f{rv!v|*K0@nejVLoB=hONaj6dHBe)e_ z)xob`2{ymW8{7zy-0pdDMOF3PFqB@$Ix7Sjwns1_`6}CXuEU!%oJh)b42gD6pZ*RA z4Zo0Squ<`dB{ifW4>bEd>U9C=&0}FDF2r@w*6NaKs-a0C7j$DzJWd!h5*_2YE{t_$ z+Hb7Xp%?f~V3|RkZ2eN9^{&C-m{y;=xNJ!MS%rYrwqz1lCA;mGr-O9A=#mQZw|Cd8 z@L%%Ptlnbz$QRF=vtl-r!TEO#o!|tlniO(J$6$vnL<)UL@V6y5XT`lO0w$gIL2`4W zeqzV+)JpT-?+OGm-+bcF%!|gX%dAiauB_P1kQa#D3J5nuSt!Qt*gaJo;oZry zveG)LlEz4gV`p-JZ`t&2YpIhHpwB0!l*hCWb`rZCdw7bD$?iCvW_P#yzYg)PI=}V! z2mCtzpgg+1kbIApQ^KN@_{W@A@ z)Z;(H0d!6iuZbkjkaG{u8)MPd1kf-s2k7i>ohi6x1Y zFLHy#gOSWZPOJB6?Z&giDU70UO6f3mC#XA#yV(Xe{Y%MiJG7$dKg`3bs-^c7pg>*( z7SXg9>8X!Wy(v^YsSzT1+7lO6$;z|2Ba96#4%kE6s#KwD9J+%Siwp z;eE-8*9A!5EArd(OSUigHJ=X0+kk5dYJEiy)}XAFuQDpsQBi0B$pMknB7Z_bL`nShm@>6#*EC=&x&U%tf#>;?z9l zDdEX}L02vLeJJ^u?5+#@t~zN#9#Zhwabu;yM4V(m))@RR*V4nWA)@H;rXf~Nwk zRAgATexoTi$c3D#<7416#a}w8bcwUYATl4^T_zTq48p8T-OVxd1VmWRdBiDTd?NZy zntZcDkFsT2P|bDF1n#3`CN9oX4w`H)v98tWk^UKHL%sRfLwYJz(5YWb*YLuo8aq!E zW0Xy(o9PMPK$01@Y|fvD@@E}D10==#d=^Q2mdtdjo~e#J%kDLeoE9i1Xitrj6NC6B z4xugRtqq7Bf}IRitB5iB!8XhdZc1uAyp{_ND$Q+v7qwn7g%kFlI9U5@&(pp4U`_wrpB$LMs*ViB1nus*4O=H=50lxF|O3brv9)Oht-( z&R&X%5|lr5KLq*B)b7FYU>LK`RP%OxYXeWp4GHNo_xdiMEDuf}jBj8-n-pxv$L{4r zU!U{=Z7BKF5#D4^$)UiiqgilKkK%~g4SI9iG23Z(`L-)y_t zI(d1DKBeRl+xb|K9}cV`Iar7(3oaseK48?{oMLy_WJu-B&TL|cWcD8F)~%eUx|oV! z=n=vK2szd6ujeVhk?k;pOBJ{U!0&^L%Pg{tq~_<**8l<6896EHvUWh*s!Y{Pk&NDR z3ahVDU1aCUq5!Nv&-^>&^VA5>?qe}}p_?n5w=e*;KsHP0jotBLOwWBUpYCC?tCpvb zbvqSoxG>rj3K=+YQD#xR%x09FusdN0^K3|z7R+FWm8Wv?4Xsr0UoedZ zf8uR4ZUIxFpIx4mq5X%}*?AUU|LxMT#Y$#xv8XcZFNJC?!nD3=R%!MsvrnXw8 zMLHldpt}vtd3=WBjkU?(w+RX*SgFnYXhrgZ5B`D~4-`4Q${uAiBPYBAsJg=beMz{8 zyiqIUVVUtUXrUErWm{XqhfXU1bz9=!QSSbSmqKCMY;g1u?Fcutp3uM!>uxwsjGy@X z8JF(@#lftchgdncn0elL@+Glu{=q}@@VptbfL40S+rE(Y@g706v7j&HpXM%e#q%mYlx$zhHk#=_ANMxG+R*ER)nf`+ap#W<7J0Vd@}{d=sN_u1^8Wyln3-cAG@eSy@KVu}zr3L}k8}OW(s&@;vpi z8*&Y?cHB@>L{rHJr%&H9cNL~OtwP-(A7YQiWOLg+3jw!6 z-kQFv4pcR$>ewBOzVXX&2=XH9VL@RT=1EYKp!6>onKy*)6S913y#((xHhv!4A|KKb zFFKcxY1ZCA z1NOwD>H0^hM*u3Pg8ogbp%Sek)0@17VO5R+m|H)h&jK>(9k#&y8^}`{#y2f>L z2j;8kq!lo2GbKQ*5Nu*s^Ih01xI9akIjG^?3gYw*Kphv$54|ufdftkBs;fBW9OC$~ z{~w1Rz8`)-q@XA4Q8eIuIP4X6Akt`zuCsbRh8vJy zezABSIcHa^y`9llS`-`mWH(Tvb84q?^1157_iHor`B3zxJ`4IKr$q7R3g5HDjDxMd z@PaJV6P>F3t@he^*S}yW$K+1JAe6dv<%Fh_furlS6wwuK)<^1#`=oTQ8cNX+S);iM zJRD1`1WMA1?IEvT5)nv|& z*kilS9jjuD2d;YV>@w2SSXHE){VD(tty|07Z2U6!x!eef13Sq$mn0)?|Iz(-XU?FFO4igc)o!4$0`6p2*0nSMq*VfjC0wwCf5X6EuDtO4s&10Q?Hz$K@+#KysW+6`3(k~#d7 z0Z!YlzVdt@amRI)9q@AGo2&tU-ged;PcTCTHnLMGvKtoh5B)+1AbBo_soyO{SwbCD z(?`Nwe1IR3meJ5lRQ~DT%`>3Yt#i_*@u(4UwGa>Y!}Gm0jb=+} zC@s-2T!AZo+JMnqZMGplfGiG=`fFvdtdu(vRzHJC93ttM^XE~FWf;FFUY#*#C3 zV?+60u*NTC6iSx*wANTiMM2a;DTK%!``fBZ>MqafBoOIDM>KgW-B?*mt{S)QyG1D5 z%;Gd2+2osyVT?&Z(VPVW&aygu5TpC6-DX(QxW1io!*-x|_OGyC&X| z@u&y4qX!!18aG6K5K2t;;u$&YrJ94%WTX7i|1N64$IQwHY+#oM4G)EM#UPe-VDeHyOt!%~5}obr$7-SaPgCp|%tU;un`_(B{3VtCra*c^U(O1~6)E>{ zZ%8ee$VZ)%blw7gry%8RjOz)H*3XOc=SLQ#iam8Dp-xB; zP@lI}c9fHH(%DkEVJ^}_aoPwXQm%9ds-y70vqPSeD@MaKG;lLN1d>sU^F{Wy7HshD zD}o(W3HYDPnxnBE&zi&ZZxt^zH<1?<&uGy8T<6k1w}7p6WbR2BAw1|-C*Nth)*I|o zXO-w*AuO9G;&5N?KK&@CwcCf(VX;;E7)sp6`J!eKj2VV--X~CruaeE~uaF%RGR^iO zbee|8Prie2D?=k!7A{fX^rIFFR@h?QrvtSJl9Jw{CVszn_eow^C8vAB#ukJJ`#hui zT=MEqVHE}YrKKbaz^2d0wpRDm7vHFtJm{Gpj|h*fFc;ce#jEV*mh;l_I6c#R6jmYUvAWTyeZto(KP-xR{)vG?HMcwd3iTQMs)FFU-^## zq*DUado7|KPx>IB(@I3Fe$#c>1Eo8uctZTM#;nH|NSpzX%iWediHbE?8H!}oAvfZz z7i?`&&vJhJO(iH;AM}2AP^fV7c`JOnSShU9Mj_(&lOpY-JX(K)6KM55H1i?H5liYx zm++4g8k#>aLvTZ#g7j@O6?!}wN`vATww#I{J8>(K?F1R2zhn`0--p?5n)lE&LI>?8 zLM^}-R!E&!$HHz!n1OHAbD+7pNJOiBB!7=?({pqI~94CQyf>|k(VFR0ifRAyBZAt)F=XdGcOI8h z{*)2w>6Buss@C$lk=!RNopjZ)wExtOQr8mJmiqzi@CuvFf%Y_4Uf6{1oAnDH+9~Du zQ0}!0&4NVcE-$W@B-7T3va7KQj-17|;g{b@y&kGP59H<9#=8mq{T0SAZEOvm!dn(( zB%ATo5Uz4tXay)S(SqNLn3fxQQl6RKr;C^H>tN`iID9XG+s^;?3;h@atJfkh@K=%~ z+=$iu$EMVK#bH(B_U;RqfXBjhF5`0>*cMy%p4NmoO{N+-lR!Yk`@zNWISR#Okq^+& z1E#aRr;3TnW%38lhm9aM>k8dGvnEl+3YryQu=K%4dfHys?)t3qnZk8#b~k?IV69M5 zcNOAb!#R}dW0f(ct5afPG3iPTiDzj+ie=l-w1QA1u|UE}nkz4sJ`RfVM5{+a^d#e+-;I$Vm0`K}M@C=}$5~ezsVm z`U_TP>l|lbmZ{3B7p^npY|UqpINhn(!@lN$PE{^vvify!YdAE8CVLmhSX`0QA1Z!# zR2I-|wrzc$;zf`0}B33{o&k3W~as4~D45Ohj^k2iQSUekA{zjtbczOOQn%yoetgn^=%fmp{L7k z2}6*U3|u)oBCAwv3X=q;xUGE}9v;Lnf;}EfNzmXNe%-+|91{i-6F4baR3Su{#mEI) z9WA7=1%4<%9Uj$q?W7x(vE6x4tp>*S69*LR9 zfLDSefmoX$&xfNmz)KRPHfZO&h^97}XTNWSTfD9Q3&tAiTr|qGDy`ZR?oo$7x$`I3 zilpD(+CUXSc3Y8nWQB`F$v9q%#vWDy7S3^udo8$aS{kPq&6m{9lL}Tls8PxC>&+D&w1eM=)6f}`PD=5F-p)xH zmj{jIq(0Z?bPyubBChc<9|py;Cve^36~d)ea%Jz)%wqTp3LGU<<{Z6U@omI9yd4EbyKHa2FG0cKP-5#7 zT7_UEjw>XVUzDx9IV^-8Azv{mGhUPsV`bsCG@NYC(-1jX%(lOWu*1!#%Lckg@n+)U zAB$Okz8lgf2g^1IfIUgJylzSNwn~l-Vy;NoKor;xcVd@NJ+Sd%ix20QlZQ;?7rE!<|v zo70FFHs@KXhvf@XIy7d*O%>T{6%>psY!x~CmUMo_p4lq$rNX3be9yFiZ8os3LAm{7 zJ{sV3(jqs#?xXj%!q+`j2{_Fb%Ade8%aN|abi0@u zOOP_=oGknV;?eLt*`tFIJ6HBrTPMjo~eKH+?*p0>JqXN`rcqN_1z*7^gP-go9Hc!k$=kL69bZI84Ch`7X0`5+?<59oKJ0 zh-o>Gho~yC^w(do#RAceZUOScxx)oBa9GG~30mZT`$N{o-4?MYgxM(lx&Mmzd*Qyc zw?~8!8Dt9dhmwx`8dZz}#30sTC?8xs5 z{U^z~gSKA8x)SsCw7)a(hnT}WvGO3?kTOATEgfoS53-2p7fKil*VR8$urgPUB&qz0 zG6RP|)9by%`IFU$9YU`|PdUgZX)T?*S0S5HAf47lYbh}ycduG@Y6FVrhK>w?LH!Nm z4vy=01Eo8P&EiiA1&Tu5D$LV@{>I}-P_U>QCB(!`z!h$hJ!`R;cRcHpg)(JcuCGIj zY=2`_r!rU(lM{1~C;$!t;~pDVWWlF+pN9rZcW{@^Q#?psX#|8nKN$$}1tjk8mUCia zXym#k&jz(;zW<3rI%&=$S?he-hpiA|v1wAwCv*W_tXg~yxyfz{Khq;fkRyWdV41H)_)%G zj6$SdtOZMv9`6#sp=uyC+kV5FjTma};y$+Q;xxCp=M&}$;8BpGzf#R z9wzd~vY|$*9SqV^!CKf+)e?Ozv8b20AVi9Y!9fKV&%Z_Ww-O+#7ti{hLBe!lIg2(O z&H=FsH!%GtA)wcB1gcmtPo6)VLtOm$f(&sN_%JxzVV<3E#-GefyfDRkKVM6{SRs2s zN0PPdfbH;PX6D3pZMrQKF(Q6nY}pGLygh6Ny}sY%sGM_q`q>>n3LwiB^3rS{zt35x zKnzZfOK7O_DS+zeoC9Y~ISv_QPgyxO70}{-9ePAbA2N>9a`YR`n#0cF#6%3_aAcp$ z?Xww;(iUEdGIucz2^S4^btKM=6OZBVOlFc}7UVSVbedAuG4Y|_$D1?3fkGyF(chVp zp*H8DR{loxk*3-sOSJwH%^!j$fI@PLB0BaYA9Ux4i^wH~?Jj_#nF~!0NBv%KMH_p~ z*L!deUy3zGJ&K_>Y373Cw+@WTHVG)C`4IocRK^-k-P+2iRe{NNaC)Qg28A5g-x#w1 z6*USnVjZHEfK-vOm=%RR=%T2%DuA#T!vo%333TWUtFjxB<~K56uOtErBvl|Q4(>J< z!Kj5r!ub@Nff#?en11GO^&6Hb8kQ&)meh0^fb#hAcJ^W0_z3*4?`psp4(!7{22~AE zijowV#XHip6qKMQ8%sK1+jZ-u4soqY1`;E;50R@8L;s0od6s{FqXP*-kGI4o77r{RP8sb!rjW~zm+EZh+?g4BjthwaCZo7BuhrVu+t#%PO&hX(c z6rwb*C?dcu`PS~$zm4D3)_;XJY6FP;6<+_v>p5r#aPph}7xmwpqYemfhm?a9R;b(S z2Jzc2JAefEuf*0{eBkwT(Po1;z<{2~t5+P0c!__7zw;)uZ@CexTpD{k z$DlGwjo=B3`ib_WRADjfKx}sV1`=6O>D8o=iFpptjbhq_&H|(M4`hya(y=@0*$>mH zaMiYcR=3Ct3ORq41++0I78Lla#QbW&XYQbbkAhI0N?xjqr5olb)PU$+!`&mEKh-zQ?HquDlf|@wtouZ~HRroBH$}w@b z{cMwS+BoaqVfTUFD_5(*(sEbuES2$_RBb9=K7d{z+CB4lz}K0d;CVMtc;32_}f@qmyeO*!>R>?KKo_$^r-l080aY+tL`g&MaE& z9wG|!XRdadniRF!%`)+L>>cb9ZjLMr*?CNyOFeo@HW#n6N3X~6QR)mH0-%Qfh(V+t z3VXOkF<`(7UEDGK67>t?-b0LEy;bxruNF~SB8fkSPuwGPZ0Ez&?hqQD?1Y*Cwh<$G zlGzbGmVr?8zZF@W{3rEaq_;$SOGJD+?!XuxC{v8F{*|&$8+k8g*FOJ%f>zUl6N+EqRZii&4A~i&X$40)+nlyA)gO z|I-=}4*a+IRd$ruc;Ud0c1JvsOi2LDQMR(URISo4o!rc_EA1?w;tCES!2ABggWP3u zf~=v69Txyp@^=2G+T&S^UszQ;xUUecRRcF5%o}GoDyaVl!|z#wF3>|eJMGhVnCRtE zQ*P0ai{shXNThu6D$sNf5S&C5*=n*O{wL(N&}fJ9Dm7g{?EAZZSX}{L*XVQoso)s1 zOA2Z2E>7wMzaiUw3`9OLc=1?M@Al$n4T2zXoKLOrGfRNt25NeZ+%;LhaknZ_yZy$q zGr$Je)Ej+fD)B~1-u>ExV9=wt!Cqd>Qx4CD6776RQ+3;M-pYrSKxDM2ZX4( z=%p|fwoC)$1({nPH4AnW-II9&4}QHe`R6>M?kYZDQoR0+;{TL<3yZVjK2W{E6(T#v zfFXP2kld?h+(~nM@-u1;d!Jg7L$&Jah!!e;idiG*pfO#WL>u2Q&#YUN9#WmuSf^G$ zBW}bsLFnKpYYv10On#lw&9w#fmNk$TKC(FV7s+bY-^L1pSfR|F*s^0`qWxeE?DFq; zTDMh7X%xJd{zM3R>#)lgvm$oMKyrT|!jHBW82%`B_>LF$T-MJOJv$v@bNw}l{I8VA zy}^OTXDybRe6bg5b$B{~9&cmH1pX|;bFQ<>He!DFaB8AceGHs zsbe9AlRV`yCIs$Wx-v^|KURhFk*nx0AvfWBwnE~`zc}g zEf`odwc-Kxmpis|F|;D{Dpqkg&1UGF%ikYO8_X8Q0jc91|Mff=ibF%(vs%Fpl|ri% zuzXfysdcD9-O+&17Tyes1o@QguIU%wpvsp!FtkGO5Hba@-Yi8D*){J8; zme$;8CU#F94M7vsfH7pmSY=C*fVD;!UZJe??;?wknuYJRp0p^t_(++1hVKV;2w^XnMtY)?qvp3kUt^`+knzYudH|+ zLdr@v6XKodCAkk9e4blYjk~{9a5G|o7Vk*W%jBle! z`X4>}O1|7$j6=9TR6Kf$F7Z}GjHr}4UH9s#OI4O~l|+xg%x?L#4u7^|CUJL4LQngYLsk$+`DWmIbh1n7#-r_K+C-zfjX@|J^8sW9220c{Bkkx1m zflAAx2(U5DyFDu=9bPY{Jgk%-`vkA-j1%~Yifo4=)!jU2mhJI334ao86S<9TGaW&x zJSBg801?}KP9i%5QJvixror)v>dlyFw&?fz$vQOc1I6G`$vQ57AIe1C0o43f%(aD& zuJ%g0c}VFPb~AyDTSG*a{)Tv9OZa(sN&@tp-&ADtNe-@|F3n&N_wDgu$Jbb@)3{0Z zxdJr(Xuc&mL2ObAerRG7fQ6wC1F&`@)j!M|XzRnnaM&g|a8ccRRC~{=9>gIj6%?Fk zyznv=IOz1%Wu<^+!|Ii9YV_v#JjzL&R$U~ZjKWB}qaA|p{TY&SR91>M5Qf-!n7`+H zFw=w*s*PiLJnwc%IGLn2S2+=wzP3i|GQZ1Q;8u+Ox~}H1>-*<{&$IJ(;Uoxo=b1pz z=7@j_g(vNGiL>9=AjZK|mkfQ|aDca=xplKR}7A9~=L+%u(6MynGp2JI1r6UPoANtnS zJ0VB}M+#2Tk2wBO*|GD}GXnyEUN%DvKz!XRe%&7qh|C}^mb8NjstdqR>~U6+iv1;P zt7q<}B2|O3NCNx1cmj3@Jb9CHU1Hk@Gl*XzOv`pk9%*Iq4@LN%y_&Rl!xNZ4%1xK< zOLOB@B$ZQNAoba`EUf_C-+uf2a|h{hdHS4ok(JV19)sQQNz5tNMZT$-UHX?$zwIUX zc!eb=dNvwr>>B+u%mk5B_S8dZ?xeV-Vm^xXQ&vf~C5Yoh6;^+C7-F(mx~;H=&Js)W zD(?nRN?rRx!pCX58pI!~x2fM()!s166U`~~g&G}H>bT0A_Zpu~(YjEsQE+ydF8s~t z5Mo2EbHv%^`TZ?m5Nhk8GvqBDCHY__TXs0)`#|suq(GOtSToe zMs~K~5ef}6=m~K|9w#0heL{sPt2RRI>X)kw#{7sx!zbGpn967@{h+iuTN-FJ{G8qL zybEZ_Joz?j;DfHX9s22e}c;CX&fUDz#g>ISyi6aJud{zLwXF6a;vGUeI4Q zT&4DuFN0*3Cdpsm6e<&pr$P%P>H0kdE04p0M2!1oeX<==YNs-JX2|Iu)oa||-wyCr zlLwvABYxOP-H%op_F~YX81!Xb_54>e;sCi`9Ewl*=dGj3BZ8!Ds{X0c=P3Oa9JGqZM$^U4YA09=>O49}|B))1lH4FoS1)xOw^>10W4h!M8bbN{0G>A^b+f4(WFz>CLezXl3$+d?WmsKM0t_B4ccl48L z*3~WQGn+Cc(rS<{bbi*b!y9x69Oef6z9BneR>aEZu~qXg3lA9SenPImu12@P*ENoe zK3PaxY|9>rDcgin6%h3j>kUuJ9YT;|Sng6&;xv^?U?X|0$hUT9-1zZu){<1@UanlU zYO2`id1>Y8wrLlrw)f`vW9V2rAd!>&851JHP_rh>$=ly7n9c{`EiFYS8^B9Zvap0_ z1TzAH?sV)=HZ)z)W7*AA3d9w8JO@yhgH95}^Vmu=Xj!ZcFs5vg3gHwav#6jv#2G3< zHcI02@%OZPl^t3VeP$@4?Rg`J{wCse~RwK@)4KH5MN7nd7NVr&EL8>seTLtztDm?}u znHLwEkmsnDgWr2obbFH}7A(=>F((h5511o=943?JQMDjgXE!{&wZv)ZBbVoj+#j-K zxzv`mKO&Bh8Vl@wD%55TVAVv+=n#=i63rD3MW;70XksE_r>%<2@PZPc;*9eSA&Pom zrRLc||BA>rSz|e*tKPRlWlHqszLrYC%R3;-&7ln~J6K^ymVSZCV-T$;t5nw%5?pbr z%((tU)Khsca*wuXMsaae>IwZ941}WXH^14(%VG~FTu7~Mw_r(N#Yr~OA3;L@qyw-R z3EbB($}Lg(_pmmogUGra;rDqlC@wb9CK| zWsC6FeFYJkF0*99l^9 zAy^G*)I+`5W5p7QGytbmkSXp^ z!bXZqjWOJi3lK$P7Jdf($s1&voUZtJ!*JCqkmsRlMm8)EX*?ZuQTbVV#tQ!mmi~h$ zsTO#`7H`*3Vx24q|>(hox70O08N%q>O z&MD?-`JspCP+9ZqV5RH+Ro6t^$yF+N!D!RPfU7l7vw@I0fQFlp@KXZ9hvET*PFaBE z4f}a{<%RMCA6gr{Y$*8_;t#LmBqZa_40C0cQ3E#N%aiv09WAD74;oHoHa!9d9A0$_ zp{7%m-9FLqRh9mX113<&xO{4}sp}~{#lvz-^6Z5NJ?Nq{YQi@}^6-cULpww+qylrJ zf1w8OaZAupaT>FnyY8|mq94nf#ySrxIagH->k3lS9)j|Jn9Z_pj{W%ywvJW@%j_nv z!JdSZAr2uXvW9%%&yzD3i&ik$>Wlz0TV1r;OvH??Xq3w@A+iA#E9q8^{6d+Q%>)%~ z2E{*U2NPNgdWhDrY+hUqnnd3&t_YIPdE?;gi)62kyvzge(v4?_RJ;Re$9ho2d-);5 z$6yL%PG-yg$Un2kE_Ymz3xcTv?DcgiuBmwI#*%O%n-6ft&Qug=y5Xn+P>&U_GhK}% zhrV}NW_})xKS0=2^k}^;JHoYZ45F0kOM`WBPLbS|SIXDbPcdrNLXkUI@+*lwgH9hG zJ(6dut1iV=&$btZ65j>kg)dl*Xe>J6&sVE|{8%1v;znGHP_`XZp|EAz3A{~m$7D!C z&7^HVwuf0@J0)Qy?rv0{$0OA=6^D&ux?WWJVN(aYCR&Aj^n<%pJot3)`fn^)ZGPt!Dh>MSer!7BYyox@C(7- zCb>zhoyPM~#pkKUrT?O=9jRqe1!C1R(U~$Iw469cHJj-<_q-?E{w;^r@JYd?wG%1 zlU$fFyA(07obB0bsscx3|AKK|>^aCq2~!K1xtGHA`d!=t$US4Pg$-fjf-&WhtWJ5uO(g9X|`Z`oqde*e1^pMm&RMjjDv1CCwn!(hchhSyqmuC2@0^&U&hC;)W zR+;P#)nn6zE_2hcB8k2>1``omC9|gzQ{0ltU0t4LGu&q!}@nNnm}K9qUwYE$h*xb~&2t zQ_*(=>%D4MY~^RSu^M?NUJf*&j_o35nCLqlDQ{BVgrPk@Fa;KKebpOO)~o7sY(2bS zRhnP;R`ggHr_3pw1sX(56d0|Jnq7J+w&vgOI;l!$f~pK{ zUhQXP+Ok1wSWM3t&vxBVc}NJK;buwqNPr8BrIm0&`3_nKb5ux$2ojp+7SggHeIcgY zEwW;05-_ng!Hkd*pb~9w=u<0Hj!hlc@mtar8-L!QsU`CaC$9%C;NFXlb$zx(}# z8(K3mO__#}kQE&o5ndyp;gOW(U9Vnp1_L4m>|{)CFVy2jiErid;0NN?y)GnW#)d;c|HQIxQ;~v ztupj*I(WQI+MF*sq*^?lZ*Apmwuq98Y2IwD40Dl6x1b{*J}tSp zVa76%;;ulAbtz+{y!Um7HhYRvi^Ma9&Lc|a8jt<`V zXRm&&FmgVpby~@lt=}b~Q&HekSZEtfU5Td|>vhwcvGlS-qy@rMfR>_;i)uv0bbNp< z+A4N=SQ2n9$#Kgs5pWd}!%CKQVRO(Fah)pqC2(7Oz4>C**69@d4(kusZ)j@jJ&4E2 zQ7iJ5Nx5rjhYywl7T||b*wd9{AZYr~urzU(SlSH*xonY3PAi&!))@H{R*W*rvJ9*& z02~Q5QXVS}xy*`D0te+rSvFm5N}t-^P-P}MV7?^U1Oakmm@GCvIwS6zIq8mmT>Ll6 zz<5X^5P+R}xtpsxKVwwD-AEuC2omwp7NaeTNv!xOq{-BE@GGS?L7mrv2ZSLGTx1xh{JSsA3ukWgHpL=~<%EXPt ze^IE`jJxZ~6E3wt8Q0F>HT6G*KR>n=id8I?n$rd>?d7gz|7W~R^;E@n`()Gmh+|jn z0JmkH1)0I3P1A7nQ#Abq0o2#bz2Rn%m7HRh%4FMCPt%g*0h99k9B|H!y4o?;C*>D~ z4Y6rs@H|VjbfV~zpdO`s+G>8{#nHEFtk0K~7*iYy`}w6NTmVAw!}#epdme;{f$=BL zi0gRzp(g~@o^-lbOsLMqA=?zE zc)BG(=koprn7?Lgd30pb^jI)}aX}Ho+M{3FZy>;!e%igqn@N#G;Y=5%U-pRGPCE0) zup?fzEKJM%J+BIds!J=4dps5&h141yXPDI7nBv$W7Avb+=h)cug$L4K4{Cm2dg&q} zQn)OOi-FF|#Ec6{iapBmiyu}MO1q=p5g2T^%<#PEO+XV6%j*5W^t0xkxvREUw<_XS zjFR*#aC({M60pAm3&Rve4EsKZCzSu)p`ow$xm$};8^^}x_=nW^Z*e)#&q(#o>YbQo z)rMNr{7GVcp-3&Gr@lX9$dIG>=&K$D>a2s;7Q>!N3*C|+@24cgQ(nA?n=j<7`wiRY zL}u1(F(aw8%9J00whSd5T_Y+;n<^`HBH-MmMfsp@xO_*vn>@44(3k)eYW$-*&jMR; z5CR^KAWbZhrDG)zu)h%xjYP(sH2AS@B+yNO`e5uMIahDZpHgi7g!I%5EYuDgT?FFo za}z*U*Q7f@vrbM)e~7YEyyg#>xJ=lw>Yn1Tx!tlof1+P~Am%mb!+A}P0^f9pV)Cm>@&yE@Vs4ciy z7(R{JX=bR86xVen+fQ4!x!C}2FtG7dwA__MO;|7m51#a9Y@>K1^l+Y6=%Yqn%c{T( zTOoc&8-;Hw>nQ65I%iZGrqW-y9mO&mGuZ^15812=Zv%%$y(gPo`XRN6hGda#bZN9O zNu0m`@To5n6RYK|$hk02wRrN7t6Hs~GOK-Pkl?-XNpbZS8DO{a#ivQ04MjNHOlxY4 zjuF^&;`Jnp82yrs8tpK~_{pAo?s9CUJv{0eAT;&;g%fbR1SZk!`x_06Tzce$ZejmR zb?URC4fvGaVJqWydZH{kE~-g`R>qnPRZfWg=5v!Rx6tTr$FS7>EG&5~w{53sr~M#4 zVs7%5n8VoX`k2lp<_O~OENQh!2Ca@iI4{k#D@CCZw=)Pqh!?=UTpQ)qr>~6`eBC~(hc#_St1!ax$ZBA*9}$6MuLv~4 zTA&e<`~u=IRbj)>c)O=V~H`w3^y3b@yDJT|OrPWt`pPOU}t^xlv0W0(*d&u%p z=f?d)X2fqNzamTnTN`)>S<|hliRkp~bxn?TSS&AxubExEMEGO<$Qp;QIx+?H9)0*T zk>#96WR`c0s4!(Kq;X^vS))0efdN@yB=%5sP%ts}QUQzARvGXyfIGW@%$ z-}cq3VqD)!gAevQfq4PXIyZ`qCw_W52kY`>sW_hrkc}E>mik8}49cVS7{SID5B_a5 zxM)$-D7Z8ngDftV*Mnh$_t_UNn|&9d&zc$A0{0krJrBc7JH?gxdG(L9tHLhzeYi4W z2DFXLf8m(oWfq3k^SfRQqe0=TQpUv!MfauIgcY!xtXAX-f>#e%FH_%l{gG{DP9Sa8f|6&{J^Jq=DTy-(jtG$f=z zU+%f3OcMA_HN=>ucZRzbbIR}EF{3z9j7NHJ#jfq%W|lWSf1iq%qvpjOHAcPM7m2kp z+2XE;J!c`RZ5lwQf}ViRnD#r7vBZUxcW#5gkvl7<_bb!RwCUmx>beF+yBp04Pqd2@ zrId9&Pv@<%?X)P9`#6q3PE6|6E6Qa5`SF|O$tbQ|K2O7|=j02GvKFR{hFtgA<)E{e zQrZt(0>#j4DilCcfv!DWDK?tDtOIt1V9K(rrNUrh<#8K@l2T(lhaxl**I8**R)!pR z^`8W*vKH8}6!?OS&PvOvZSkwS|NimO_Euv$uIfd#&dTqm zY}U)8-h+Pv`|HK=NU|xG8uZr2bk@W>urh`cS521&`thoD#aZTx==MxlA*#Z~YjS}b zi|)|U7BwSl(Mmrv%?iJCpkCy5Z&&+yDUpsTZsgpLCD<56-}Bn{)go*UA(kCwy~UkI z-A@X8@TL`HoPEfpB-NJlS+i-s3}cAS-|l?RDR5+TI8lpIkF1i`U!EALv|14hT8wNB zp((An;$OLD98h3j-%bjwxPSJvbe2+;b2w{oF=+7y+XsVI!*Yt{+mGo)Y)iH4nat%% zd;&-S%AdC@`YEN$k7(0U0mv_3Wa7tvBtIwo%zBkl`SOZxD$#s7T0$T`IIH7~jh=to z)ZXB$3^eG}pgPm?=RB~@jbU;`NTC?1X0%IUM&P>}YU77-U=q6e?f$-%j>2yN@;k9) zLfgG(L)r2|B$N3q?0TJo9}%t8NB=1Ax?EGRe8-dCo_%cvbVz=fxt)$2&N}#^WY$jf z=k09qiIj%jW0EeW9=13dQ9f4nQzd%cTuPGdrjr&^kx@Br*1nJQpGde2#oTeS^hZvsu2jp%Tuk0@^!k z_n@Qq&S@<%IzRsS#cg-4>YA-F{qp8En_^LHY4Mro-nx^tPS?vHr~XIpEK6>ly_<3wT^LrSkpM5HgowO#OSALb)}5(uW2Gaid6meW~yh|FUcn$qTg} z8!cChRl73_mD-2Cq+ZmBmc=6$G>OemXYZD>D1mLGY*28Rz-BnQ1Ui(e+k^rJwnPRC zHf)w=f8n^YcYt3=_Ku#j%2f5ntiixwaZV3n)O7_rNH0$oJE(~8p3~P3TSv$xZ3AMc z?USUr#q!MKolWv|#G?3ML1g2G@ZEKTTugyjm``pIa0ZK=xEHanQ_8B2iJpaarP{FZ z&5IzD;OFT8nC>l_iqY=psqr=IawW-TMuX_ZHK$ji?SY+W6$6fY-)xpI0>$3P>KQeJ zxX*g`@OxZZfAe2=`iz#c{AQ$gNG$uA+>~G7mm;h57PQQ1!COZDl&}RCT;+spVL7eO z+HY;G42%dLUzeNlnSs2CIjnwMr_UeMjGENFXvxc1i>{s9&d9MJct)UXYiJ|zlkZP( zk^JQ&UXc#?d#3P_{QBjTK91{gD+%wl-@Cd=_s8^@6m~}siS}2Dz^>b_b~y)E3(g)g zd{~xVt}e!df8h=(+SE;SG#HwxX|NB9UG@K6>cv#wrtN1A`qr;*iGq?zB52%B+w7JP z0Ch30TR-GGMPOT{CeQt`g_rOi3X~D<4^ZcyIVTT=;$1ls zV4;|}4o3tUM}lHN2v#VW9C&#QgV@A`Oco}R=viXHshFsvXA9Qvym6SyK1j$)1TV@K zYO4kOh5MuNjD^6YCq|6(>bfzVXR<+}K|L~E#<{(h9XmiJu2>Hfasv*|oGPS`rb!Q> z&x+!t3~_19ZS)!bvdvo$DTQcnHku0iKBOP!DA~*Uy__d8s|U75(7boUr7;;w@Wmra zzMo?MvD#Z^qE`h@yq$-rdfbX^H^hI19ka@DSzYqV78s0-)VYs-QlHMqo6SQQ@RDo5So!N+^yR~E~3C% z`kFj2Jh!BITrtGPU>jvN!iB_Ml|}XAXV0ovjk;Z?GO@rRUV4_Mb4F) zrSAQXDyR2Zs{u)o2scJtv1zE+L&TMio6n^KZ`18g%YRBmmHdhm>yW5!{n#QBsH1PV zVx(t0X+`>0Lp=x~oda^Ag~{?EHsR}NlONlMz)Jj_aYxIKSqe@>meel=CAeO_fA=wT zy#D9g19ID+(E6f%Yhhx76Az}`UDeO^EI;~){mA65Nr-iYvV{ck8<`DEwm}R_r}|zj z)(gv52U_2fm2d`=G*(tdb&)UELD@Ywidj@Q3ye%o`O#J*PT z8qz7NyG2&aile0 zriv=txy0#}T5q$wzx#T?+v9MPouzZQ(sbu(XxaUpxX^u}qNi-TsGsW5{b({t*mN~F z^cqndlW*i32pRb(?)ltbI0q1aeKaUyFd^i5Q`ANR`Skj`do@>%HV+)8;3+odAVE(r z$P7x1E{R*ygi^ zlF*df(YysPOB9y~e$M9Nfy!Oo)tQWf12H06eL;}v7Cw}1dyjr(Fg{X$aOBXuqSW?b z6Gcz^EJgBQwqX1CJv~SO_^@^Ov(FTkNdF59xoc;WW%!q z!_OcwUs+skzUiH~dV#4ZJJkFmvg6TFuXnPb?RJ@L?apSU*=3koo1p_*zR-tVj4;?J($VaTLEsb(E@191dD`D?+O6pMCO6$zbdluW3sR?rYNghv0m9PKfn zU$V$O`BwqM&98rb*aQy55XS=!z(7DjK}SRaju%A)PVs<;LqNnsLdK`#3B~1>(Q@x2 zAflz0k~S~hA_QCV@>zH=Xg8noLl~`6pAN-9gol@epVf2OnNAk4{c3#u8+NNto{9li zpr|a-6(%XGYy#+%rIXXrC0wf8P+*HWdEy+q;o4TW=Yh384zopZD3acbLlqy6&$RXp z-ad?|ZukJf(Urrp`LmTE?20A%a*2bul12LT^Ssx@~6A#E?CVe44#)!sF4HRY{8;W%X;Hi>f-yR{Z9Lrit_*-H5Yt z4=gKs-flJFF7G0xD;_w^Pq_H66Qc%jzm?1TfY<^CYdMH#N|aY>gZcJ1{q`_w$}XJu z3SI;~8>hU$TR zaI{Yw+U%g%8@;0Y#~~)rp#S9NyE=>_dZ1LDzW5-~N{O0^&Wo?P=qDixvw_i&5x;{J z9mf`AnjSYX$2!6DUkxtA6bz)_35Lf3;dvDRdo_~xzkOS-{kq6c!wFdT{wySNF(mq9 z|AFMd=9W+K*2!u2^y$^LiQRS3{qxp)@kf%EkJNwRF#o?#S~FiiAuf|PNCS92%p1g7_-joah#Kyk!F!l&^sCXu2$|@ zb#U&qu0rUaXRX4l3AiM)GhWFX|{Zrf=Ps8B`BYX0N6Oh-kLPIw?Q-NI;2Kb z9S2n%{~n=Id)>s6>Jz&w$s`zxoiKnStR0L7$2^sF4mto{c2 z@gevxT)@ZG`j8+d`1-QGy^UCfVrnmiNfE4_uNaLFe^ei?K$0gyce=?Z&-SF8SepXv zEWy>o%obqFjue;FuNeP}!;c0;wB^2rYP1sW20{!vWh3M*T4eS2=g`clnnc zx=6rQy+mAB>oxrzdB7K%FI9du6Aah0df_fZ+L8gAo3=1{BltG#jk@aSH>Z6!mujX6 zpZ$S8QYHEensZmFqTfxy&xe_Kl$_5zuB>2M*%R^oY~{W8^`AhT40{`|(dQk-yj+sg za6)BJ#_}^*lXwPpc%fz*#v)dMF2sq%yKcSm5xZPXJNOLPSb~1F{9cN$?$dWK0;M}f z#)L{r5v1FG{33bxZr5r;2vxv4BhVa(6iu1QBAHsUX5{Gjdb<-MvNo_BLyw)dC#(EG z0!&#Vq|01oVQzTO!BE^S*^}fdKGcS5RXTMdb!}!i`9cc(;Gi z`bwF&&nRpvln4|fX*eESuSa@)BEG!zl21LjB<8LrWyk+35m4tt5Laj7?~Miz^tbJ$ zGe2Xpj$u$99O_ZWqA0&bwk+7#fYrL7aDvU%8As7WM!N@P;9^ubgeBWA3q2hfB;-Dv z_L}vuq>!|$zHqL-I%!vJQMLRC=Yx3Jb#fDSI^W@C>^;GB9>%HHb z@L$wos$%l!jq+gJs%z?{n&H`$nwBPzQ}u-DzCZqVuF2w;STh>dv-sl%T?<@5gQYGRAxTGU8IT^>kAz#K~aH`WKJyUvB*;*r3o%-UcEE zL%qzB>VbWL@HJ#B%4K7-|0uUmR#l}X_5udrH&?x|Hp2ckAcK)!Tt@@D z<7!6(vOT-BA;t{wg{aa&T~jUtxY|^8nV6VtP@rsd1A#Dh!a<2_9mmtMa(x*qDk{rV z3}JsmFfk3Ngw*b-t$nB|H-DkorwW5ADwaNfz!3%w zN??B5q^8^-uLa=q9Rzk2e#W7Ik@+-D`)FG3p7M@wR$N*ApQ7M7@ekG2HN7;YX75kG z!ldg>LB@rq@_eGsJv?Ndj8f;?~$uwmZ8fw9f<$7aqo#^4hA~I*EgNx0o_oa&JHr#_ALxUGqT{nmTy5Ccgb(%)x ztRQXRfP~xe@IvC>>ByXz;Zwi~-7Q=JH)3+hba1u3;svc zgL4soXz7DoC8YW7eMNpJoly+K_#GO>ti$8!%PUI=N%i!V5Om1U@9G$TvnSWfJ;BUZ zj<12fy@RWCyx2Y7b?q4D{#&*Ufu&P;9hcms@%L8-|ECtp?>kWiov31A$@uZg$s;e! zg-6~^o(R0b9p~wpz_syd4DHQ!{X-j-xfK1Y_XhMXY`#A;Jmvo+O~4kW z^!3L~9EeTh?85G4ApM+mGH@Usc*7y48tKf_{iAOv|E!%39^VYf-jP}csy$0F7XdNB z2G!g1ufLvb=P51%3DW$$jx23)fa1siFNmydrM54!nYre9zIB|t20mE+t_i)WV=5FX zgpF|V{BY7Lu2-{_Q7!d?bmI?9{cK62FCoqIE3h8J)x6CovcPf9D-qF16QM50UW#*a zE?;IXn)~^N3Er+%nCk}=x|`N(s5jnrLhe_(?gPtzIyfH1SR9b%*oR-9aWo+9mzJ>R zOb33S>Sj<@P!^xMq2~Oa{ya_`&{&rqA6p#^A$l421~b82u(o4{#9XgpE-&(}jAE{N zonJ_Km5p<^e3E~HzJTCVbHuy3w~-U|rSM+S57Dxq4*<=J-m!8TAkD866qHePC>rfhp3rYE;&B7e`aQQ%fI==oNxtWQ5)d!tIhDR&t1gbTVMYh3z%#A$AGK zd2f{!6qR95;@q`&DC@o69Ynk+vrF1_;N(M}#caOV0MvrG3t4RFi^;KCL;8##8s9OZ z_L?El*9-7VxJfag@@U5|$1j%9idQ)p+5=m3Bbg&C`5B15D&>CfR$(}9GIZ5K? zI=)H_8;qNypGhom>a2NIwMR#enj^~ktv5kgKi zFRm5m1YlB@VQa{im=+(Dq9`X*;Kw~84`=vl?)7L{QQ0%iWObMpS_D&glF-}Q=HY38 z=rq=c59a8)x%PBagu|E*^;X$NBXJq_z9m<|Ec^Z{vo2K&219+PELfvYoYGGm{i`9B zN1mrI`Z%p(G|W2uaiobAv==F_t7sSbYn#hI!AyT!Co2 zfwAw-4hMKWBW&m8=D5f)JY#^J2A`53E7*L7YgU&l4-1S<+Qo>w>6GdkWI_7ztqjTE z4aP~GKHicJX+YJZ(HDDqdVKVr+4vFWo*pX4f^=GjbW8zLY75{s0F)idO-^dnNjbKk zM+=JH1v$2aY9tx6nwseMLNF1mEfbo=B1qWa$D27Xqv(WCS=WjVta0ycUo7-RWk?=d4KM+g$7}V(V9T$F z3e%A(quM~fG!ej_L%&w1=x5s!7k%>W?ku#{ye}xm*t#)dbY$P}y5$qo1<)516b~2z z?Kik%yF^f3gBOi9F1SyuI=66B=2b$vMp!`sV;Rnqv-mIFiT~LxFgyr^o+W|MGa@_^ zDl#e}A`&7T5PJqf&v?LL%=mP;JW{e+p?$R6(&p|2MD$=QAo$Gd!EbTOklH*eAfwI5 zr}GqiMtBN7hq&Hc{Q3E~@q6!J^5Oljx%W=0?R0j2aSuXQ3R7E9T%*Rtx;ww=Y9Eb+ zpF4D+6tb^K_Cs2TqY51n`=P2RR{9M>mnX#iN5WJx#y;1#Z17Ty18ou zN+CC6M6lh*&R4g7oVav)gA&Y*j(_3uE*o$DoBzsqtS(*rfdhFM5bvs(w#1i>*jXYj zzws68tlhDv~8|^2o~*F za$k(}B{YW1aKR=|KM?-fZU%e(<=iNG@iUBejW7~vnz{kd7xiqu{}3!5@X_zpZQ$?M z$1vhQJQ4p6zM8m0Q}PX1^0h;nhJiCVE{|Z%&Yht6{os%6>t>Ln8`JIEVz==t zlKH#W`tLqeubuY}{gK$rJm!L4-Z%a~lGy#>e+_1u{~^p6 z*3Dn?Z$N(3>wR2=T&7YjbS&M9y#B%>pitdWwOTAO31h?j-Piej^Ot)Ep3NH>^+(9t z#)UHJgTkeHExJvs@T z-xyrgPaEmdEb&>l{V@C?vvT>+&0DVBxOk4{*JCPAuG!mGMCuvlcP~^SUstUNCXkj; z6V!R}=*m=V6m;+hSaT*CmtIzhm*~&pw1i27T-KY-K^{?UVaK=@IsjeiCh!3RxBUp2@Yc3sQVdA%%Hwv{*WjZ3I;_URE|UtPTABy@QF zi(PzDz5&?ipSK~4!8~3)XJ4m5rZW2v&DtYT*eK_9198D`{meC$L@pOaR(+GAn2Oay zvJ@E7lcpV=FZZG#4^w(UMe#-gzdbvaL*yhOwmcYEG zApe7J=G#iu{)JmZTXNj4!_sCNZ=Ma}l(8()`#bjUw~+ftzYt}0qmU}-J&|XKT1fG& zUUw!Jrv9EoaRl@FrPeaN?v^dol6sWPV$$GaRrNj2zwveiSZUG8JG=GhEftMU&NV)O zY5!XTX(J%y{H->29_qBLgy?$KU$|WM&)+(~1hv}$t9-b4kyFp#R#`S%_?CmlTm(@i zvX9*^b&q@+c@A0mnC!|}wO#1GJ)vqQ``~D65mfu}FWgMXl*5v`KAMjg&95sxQOP~~ zIEV;Wx3zh_7!gK8qneIeQoKn=W&*JHm0|G_hnxSIW0z!=sF_(Q~NJi&0n6i zx+OVYqF#g?zFj{|&^xEFfl4y{gRs6`pKI-s)AXaa*<0$N#IsDx$GqZG(I;&KInuK= z+`AL1q6l6)wHRDD5jD|_Dx|!ry$W`-bke=9C9<}DnKP1%|U{^o@y74_-VwY2zM4){Ohhxp4_D+4-#3zj(T9& z@7!-RCUM&N@)2~=@)u4r)9&qObslhBB6-+vADKBC0oN8x8x9ExjKY=`OX~3kG4P|4 zCh_~(zPGL@A;rhg=C)PR4Ow|Z_4)zz+c-j(PN(GN>zv*r2VudaR|^!_Wh?q?YXYw_ z8!8w5+CMURLxM$xpW)?oE<4_tExi2bdDT#Z#hg4e`O;bUi0Chzt`jg@$DxFiuuus= z^T^NbRUnvwfMd(*5!Qn| zxcChXlQnXOFXB1XlTxnJuQR@5XsUa=B)77rVIJvkxZ4t*rE-82)*&yLHaBiOoh+7Oe zSd`obs~sfpYs(K8X4V2OUkABGV+SD)J6yzL!1J~_Nq;&$fZ4&~c1KxB#;(%UxxK7R z`0hE7T^?!_3_;N^(b*`I_cg1U&o~DQHSlPeEf=-;2DpH_3ir;>AT2Uys|aF>IFwr? zB-R9)Ei`xv3+Lz^TioCB!HxKH{ZE$FX(?+2L$Gu(ZmcWfdqO?i1Tr{J<8jnI9#(b! zvuO)NCj{`eyq>qz%oaNy`J9(dl9GE6?4$L~`ZHF2TfwTa(cR>{VmK(}%(p8T%LEUO zzpGu^jinSziE<~RMzY8%qd=%){>hc!PQA|h#XFH;hd@o#5UTp4so$xo#4a3W{KYmJ zpAWKvm&J2edtOYn{Zxp0kAdRP3G;2bBy1(c;oRMD_#yddRl1z4l*afl{rvN^4ELz8 z$D@Tw*O^VHz)*|t(+S`(;1sqCf6ZYZ8`R*(fWT z`YT$yH!xr1h4l@w&M9~#CPR)28}h7XGFtEak<^wthMv+v!tYp=gyMq*;TsGh2GE-`4ddS|^3{9lK)|w40X-hD{={X)j zgLn>DC$zBTal>nGcO*JxH1m*8-QIO2#I@_At?_6{qA-1bYn2PQDauw%J9z;9 z6Q>fgRGHGotXp1kv{|>zf^?wgfR62kc|X8}g6T3!Y8~kBi`_zks#lpI$6XiS_{w~h z|6u%wiyASWDPp4$!;WsCgB-y@XJMd66j9GI2NSWXG4TuNQGdT4LK6p_)T}rZD84=e z8D2_@kYTSE2E64b;9F*>1tyvSLVptnCc>vCqBr%(7C>njpY)J{51a(eOi+A zZ<3|W8?I6%6BHB+168|HV^y>2>hhpi{ml_i8KHe71s03V-p~U8f0#l+Mq~_!isslW z6^!uT20E+;dMbv^k%?9Y#~;wy|6>(oC)TQRj$nvoNr z0l++`CJuOW4D!lSE6i0cdp#g;LcP55VIM3na-;<&rk){_O3}~i=qKPczFo-*U>FkK zhh4|@{nir2CuWMNzvz#Qw9smbgqH$1qmn5;tODQ*z)ciWFK@|?r*@qH9O<&L*Zw5M zRG%E!pIsTqj5=h3d;_$DMzu<6*wNMh!l@}k{z+m1Qk=BHBp>uQP$#R6GWm!6O2r{U++v8b!w?sGa?hii7Gj_tT07A{OWd2Q#08%yhIj`B z8F$reg*W-!I>C4|Bf2%H(fj;j5hj97@IzF4fP2#YYZhnu@Blni`0r1r9tx3(ma;s1 z4KObCq8;Lv$|T~JJ0r1(&c(y@a}X%VKP;t!4MUH%nf_0#l|kGfK>B(cD|Rx2ET&jX zgRqpAS#mm=L^3u^T-X~x9CV-;`!F_a3bpwh@m5+I#HE*sD?9;j*MxOAyI%<-llfpX z8{|L$cH5oET`H3_;RkNf3`ULUkHjEk)hdDpt+U zxTuO?_zqQSVpE6~P&AN18{ny`t8ym!x2a7;#bGE~d!3dWU^}e|SQ=y;omWRD=KkUS zL8#$+Ow%Y!h5ES~fYJEYIoX$`wlSNXm8(YZOT1)v?QO<5(FQ0K$JG%bnO3AaT+7*y zMaaP-^_M6BYtzOL1gUolI7*8_H*^? zn$&Z39h1mUrMUS6AX2Ku3Z$wQ(H0B2pF!$qIg^Ouf8nC$ee4r+E^Snb7C)fE6!Wr5 zo2V>^TqC7+)l8ppLCU|%Rz~!tUNcUn)OW|X6FQ@M!8VnS++n3U`?68G551pe(UU&u zHLtL=n4tNFk=YhP`Sf24u<+I&XjGl^8i2x)>WL(ru;t`+ilRoq zciQV%@b@8>>y3c4?ct3`3~YT9-BJT06xt;wBt>ogOy46kj`}uq=mOu zOox{MqT!gDI$*q_;q2$V@eO=Pg~R>k=JE}ge3o_BE@Z2@KbZw)R|P4gHB8a>pyB*8 z(cZp7j=B;UX;4Zvy(kM0G}^oxYD&3k9=sAixY0wx?=V0xwV4Pii)1N9o`6{N&a5vh z(9-EQmvsRxE_*gh5?B}kE@?+rq|~9Jt3RB|V*3^09Z>a|c#d>Sl>i%L*|m`_Q9|Sy z`cpf4#!VzQohO1&K_GbN1UW43(@+d$p#&f(vfkb2+$k;S@Rxq!7ZtvkqTR9+|?>l z{5sj(CT|{B{YYkD1s>lpg*R`$RmaFgQUc4g01daP=jq$V>*$FFlIFoqxEeBC!;z{kc95dt zgdrCesq?ED?#(1PJZ5Cm{XKvxO?^SZsG7St{k;cLW#mbJpQ z@aiJ)Sh)jSVXFG;DrJGz81xpQia?8?HR-etVzEE`TEN8>QdtR6U+B|tn2f~WSF|K# z1-uwBZ$&f=JL#3=RG2$ixTU+9N0tFe0elM!ZW}S;)lDLsvHcmQ<`U*AkX^W3qwSMl zXU-09Kn&MZ0}}LV*(o_38O;V<4vq7=(%RBV2-&U(X%2xL4tj%Lg(I3yO>esZyN0wV zi#>W=>iLcAXCYYHmBUpNcyY*BO-Wc40jeK`fe2?60`#{uQa`kqD?_XmW&@7L+ujQ_ zIN}y)sbl1*9hWD4K=bK^b4(B|p#Mm2KLaGC*nOtdoxqqU+6-IKM107Bs7 z9%OJPF9b$=m7=aQ$Dd5AF^{)gJw^fxsUE*Ch2AdkY$v_R$?fM<&nnCDQUpM&gh&)T z74#m`!!N{KUcy`}+ewL1l2sdqk)tb6k_XXc0Q^yy#{rtz^CZgv&k*Qx8q?OvTC7s# z1M@0$>7yFeVf}!@1zC6CdyNLU_gRR)cjNbP6tKkiz0n+SPfuFkM_ zQWi7TCs{RjCs`Zl?VLa(sk8uht>WC1&)})s@RgjNTofB4WfB{2tqAUN8>5$ZAa5RW z?i-acq;!S&t%wg(}5u3|We@K2;#YN~~*LL-pEaP&;8@ z8tSiqJjiz-XjFABDBeR@ptKC3qYWdBpPw#8Cm)-j|7?pJlCv5{Nz^j6Dn(op=Gf|= zAs6WKgD@fR>G}3%OKyz3xwXmhZ zb^M8KNS~ky*FJjNj{Y;etjrnx(1MgB#mc28k<+VIZR?Uj57nlWm|6A|COpDc*GaDG zgh|C(0w~J(%_O0gI$$|M2aeRwG|+cx0jfO}4}_Ni7=iFI&?WZ8H4fepL=jN5N2<;=JW#E_5()J8X zEp0~OGq-g2@-AetPa2Zqv+tQKIFsZaHRDry;(e)wGkQp~XCR1((V1oAJA!Cc6T;9ayB6KL1WU zvBeA2T|o1~*cMhhDZO7u_zh}02{W(MWCyRe%w?f+mKm1m*NT>ZRJrrRCB2?Gl;S*~k!S8n=tR}!wZf8BfkdZn!H-Si`(NX0jJcvZDdn@WZi+hJI2R$l^p63L;Ndpx;zo>Og2W=%Kx zrH`Po^FBQZAOAO(ioK-?ft-%%zF%IZIIn@d2ycbHP-YoDADiaqd~RqC)>-8LFVwwd zRGZ(|HV9Op6nCdM!HT;(!QG)qQi8i%akm6_2` zS1$23F-~7FOP4abV(i+N1ncHn@7RcnfhB(YIJ`d%+N8|qV%e3S#WP@0(rEgaBe!ay zY!rf%tP3zeCY{Jkp~_AZR1w_*u^uW4B+sCwj9)!bX55Elv!eeB zKo$?Q_$AwuAu7eqi#jjz{wi$D#F%aNi;b>+lJM@w{bbJZMc{A%fT%?yPfp}pkO0aF z3=Y>L7@uSS3Y6r#dv#cSnxj0=xNslwE9J50hcOW2@n+cM5PmwN-?LjcdM~1$qx4uP zB<-`*=L5uq7rj8@U8rRQX&kk(oPVEjS;TnN=ox?^asm)ZRMV^UR3Y?PrgpHjJGFhZ ziO#Qbx*P`HH{K>37(7^Q#tj6zi6l%d!jHi7b;4ijS{S>B>xQFpu8kj2=nr$V5kNjg zGeEX4ezax*747L1*7FRWhzJm=_Njd!lK>f@vtdt%Se4j4cBe<+i8S8oK^mo+FE%+D|2ynpFd_WvFvuC{WA6sQrRPJ zs>HFI`JjX(lv=OOUHP|Bz}Gj~57G}H9`12BjHL(?^`{gW92UPvUBA z^qBj?%(OtF?v`9hBQ>9OY?Ywn_QapLk2_$Oi*Ps67IF@%)ANK3ozutl!Px^7exCEx z8QL?^pW9^t*autG5}X4L7Pg}4<`wt`_X^0_E4z5wJ>>=9u&1)6c&u zx!>RA59xr^#U#RH(^ud@Y20DU!@3Uole&c$jikORxj$+k2MD~`fby&dvK}(p_s46G zTq)hvPju~R;>*8wIX81A)K$w!LCxlTdXe1|pmu4m*-8RxJ|OC*?f;l3Zv6$1+=+@C zehK{S=z3r45*P)Y^kSjZv8olq*$BEi=eikn+9?&s3_!qc_v!8ZD!iR*=lWS4L`t6c z+m3oz)}P|R;tB5;clt`sBO|xdO7tuTBa$DIxEVp2Va<7gknhINGTakQlqW$-rLNs7MgxujOz`4nB|R||>_<9s zkh197uj_(pqAT&r!2OOx=?%6uMRYo7Ep3e7q2WY===R_Y9VV^ymVP9l{;41sHpvaA zKyvoH4ze+K5_r?$rQ<~4PiQ0Fmi75gYOtP*cKa1pW%la!7rT>$$Mio)I8izt!GRz zdnvqKrdhy1j}F6>@t_7PeA0wUOgym^v-lh#sMkHo`dELNrIz|unVxBCQ+tinQdghR zR#UNTiulQe?}jgsS9W><(cjDvVECxu#uiY2F>KKzlyR%d1gu!GUb$`^5?_@!fHCyh{ZAn@8Lxoi5R2Qf5h|772&6RjNx)<4TzJ4?tsSv0_Q#jI9)`_}g&>kKvj8 zwg#{GTgMkM2oNC62|;k?W26TQA6iS(QgguD!UH?7wYU7knS~LQ`gbD&(%mJoMLCF& z>(cHd{|UX7=@a&F?r36-)$Ql?pc8{9Zn~|*HSEjuc3Ahs;WigEaAI>Cm+t6^&(WV2 zu~8SII|XDmkdfk$zp5=D-oIEECoDbab%21oT^0I+^!trIbpfI;PrrlVsYd*KVWNU| z6`XR+)-lQ}Mpd3ZIv1_lDO(~QQ>dRK0tsrNTSp)@-Y_8YmeQ^VvRRJi%*&H)YrE|o z84h(}nG9NJh7C+4{Ht|3)*kfX^!qPA(^#ha}{#rc+n^WbWY9p`X?VuC!I z=Z}^gdIuIvfd?XV{vug#_4l#f_QUa8$mC<@PtR~~to;^9c^;>CD!CD0>;1IKr?Wld zq{b6Ycf|nZ53=upGY3`vV&DI-Ib-arRnR0U&7`=`&^KHk z%eS)nF4TVMGLvX6xG4oOPfC1RK>$a#jjS>B#AMv^{hUVR$c>?2BX`yIMi%QItsN!) z$^hI;x3kDw<@GUhu-j$EXb;%wGAjAUA0)C?aoixpdkA;gZ#BEy$ZvR7#|!7tK~?IV z%~{YfR%Ml{0FDM`KL->FfBHzH+Eh%cTV)|j zJx68cH<}J<-XmGWmkE}-qX7QQ2_XMv(ZY4bY=8?7AAe@WX((^9b!*S5hy4tebzCef zmjoBL7CSgbV*}GxX@wd!!^5+a$N~oNJuTRzocxuipR|Tv5v@`$#JCrsoK%qtddP7x z(aq z=igc1EmE67fb11Xm{NT3LlYI1!s6U4FYo29W0dD`y9^mjeGA37ngfBy85;3qx5>2B zW{JBS*`?)$+ZlWbz0K`tAyg2fi3{vY1(A)@8m1x_E9YDSigXT~gK&w|>MSvk2lH-X zSnrzr$tEQa<#3g~$~H*mG`g<7>U$BBD57ZvDO!ja#HhE6)}Ry1E54kbWUB>grQ$_5 z&3fH3tn)xl9X&Y_&l3O3GLkXxu4ppsK_@^H%Bb(gqr#!K2%iUtcd)wAThBY?`Z{0( zB(B!@qi>MsNa+AoJ0%C56^L2`82%Y~ob`;~+#F^L?D0zhJTDmQ|HN-}5?hLsg@;1P zz68D~RWnGT8qTy#IN6&S3Rc{S0K2ar@UDK=LYi7lLy`rc`fjt@9P}l-7C=_1pOh2z zFl|44e11}40vJ7QaS6-+f;SPCC#Cu{VF|sVOe4ytuS3`@e+>ek>b&N(fg^Z*!H(ER z?y$W%wX_eIG+9Rk6?OcFXRm}xv$TUzHGaCAYAU9Velv9D&N3EO;uD`6P`js|?1h!< zGVUPi*Nw@3I>btlETxodWxZh5y-|yDG}wYBeA3J{dL5%qDEhsJS3V5mjTk5M*RcH8 z%_b!$GzY{54}*BaT0W(ZsRgWS?yr&^9qnCA{rZ+^Mp4&|RjWfGU5^-$xjjpi<=C?RO7MdAeDE zdp9mCtacJ}jb`-DzT`2smOm|xT*me}`dl2embosBr^S5*0?Rjza^@r`qvX%^Suk=L zn6hx4Q;jq@^b^gMWAWF66gA3e zd0a`sU?T$;Lzh?HbQuV*MB7P4L_)M=qDS2%&-gEe4?-ADLwn^r*z|1%npuTa-I zu%~zr$o}E`q=;RV*`rXm7ySS5(5wBu!(2a{?vwcSkAxo&)3YLT7ZQpW>RrG8fBcns z*KeAy`&sqs=*{0r?)4D#d6XAVE&WZ^gPRD4AjmXm^{t8HGYC~V`BMO#Qoe{yd_}&v z;4&(IdT~J{H?RBanhl!Mxa&5t3ZGfV`PmH9i`c#h!{+yb1zE?zQ*I(Ut2J59!1p3q zMeKT$76%SSljWry4~GA`bN%Q@?<7ySb2T$>Gtb)s#vRY067e0~Y8Hz0F|3xgqOE2! zdrnycNV8y#5@D=zsymZu?wYEyVADyXyXHaK%w2zWZeMDrI=$SLllz;DrXQU(Oz1Vw zWvCK+T<5gT*~K+fXB0Ax&73#RL#kW5^(A;&jC6fU$-gcT8^uZuh1;P=!nvVQ{rhbY zn?M(i;DV3oy-l0~{o>_*6B=fgOO_(){OEcqshBU>cvo}uQ$A?Fc&#KI0njK6hK0b% zgUKw%Yii(Daxrp96$?b2xT`)Nk9E*>$OI^hn8cgSo)(>EP7q{eb5Rm)aU9aO-TkCeKl$Z_NHahjK5paWwtmHFlm{y zYf84Z{cVw`u=(2KyPjcJXh|O)%p%#>h8w{*x}vky}8h%fWh{yGzwMWl8>G z*(Tb3;RV-&+@5hj->0Kqxq>DJakcymy;*02BdM!I+srBJ2k*M&hlP-vV5OepddvX$(v>j~byj8^E)l0KF<()iBlA9n%mQ zC~isuJr?sm09*CeeSk_|Srr^jGkjXeNNN@gpOvETgUK=_d09Xf(w``+*Gp=(a+@mP zEo+cW4GLT2IDasry?Zn0ZrHtwxg7g$WfP>rsLzh1rJ6U2GOBdf&myQ3kSl&oDsVda zgxe1`$WIHnxLosL(XZN<^y&No5Z8!1_p1l1@$pJj8wD|k#7lm_9ILl9lWWSoI z9+z%Aj@xJFuS(1Kd!ulcpG-f(Yp`FnBh2*QrmsD~RfZMoGLz)2QsrScnx}@z+j@D+ zOt=)sp0Hxok5s^zp6@&6hk07zVS9XWKcNg3!zjk^rdvr z4(6!lFS#ZVJv`49yX85oVV0~=YtyJgS9Ufl7;Ii#og9}y@-mj{WaObC3oYJH)8 zYrF9@$34-rSk1Ia1S$g^5LT2)w*pc6rbNTmeSM1@XM>;ST_pIpBn#BJ&TtWt3PgL^ z1}q;!gPzfp4k?K-Kf965bY5`KtvnU*0}!wfuAjQAer)}N)UO;|wa})wGaH7XQ!GXF zQX9&0C395Q&4MX4x2mZOR2N!TSed){m$OUR&cgdlDHatl8g4sX+I@>I9Wv`)GVjPP z2l*PaiwTfVmA(+6+r>Xwr_Vwz8488%^>^jm+g${gFtanEK(E?EI;%9W#b^$%ZC%RV zqAON&ZaLUEG=~GMwU}eCZO}x5ipLrM3jPGe!z@b$tNh>_1bo;NSt~J=+w!zKKf&Ky zg4b;XtkS`dba21k$6|DMbl2yrd2ndI2_j$kA~UTf?CUiwF>0oKH+ods}6LY zIITZ-#J~awONDnFhmcD)!6{KNYE?MK$Dp8BcDs~M&GH`WgB_^>)NTQ%FY#_!@D{rJ zYZ^S`ao-BBx>=9ISrt+$|LwMpiD=&9cc$=*JSIbXCZ1>uS5{*C9f2=d^*+2PF*4$s zq@O8`6xB793qDN2ft-Y~tT?a;5Rj{ipk><|m=g{^rpjxKp#^GiHv_&9G#izj_glkZ ztCSinRV5$Xy(SVb>YkQ2$qb1z@Lb`h3GfwAunl0Jb(2s?Dd{4GocHH2=)K>twr-VU znLz|&CLd()MOoRtvuaZp>TSqJErJNUCz77DNnf!*I*R0J-T^J{V`)m)CJwUK;a1(& zK>a%f@e4A+0Mce&YbkQT;;|TG^{QkD=2hB&o8F&d`*8ml6SoolAyD^XZ-A4gYHTwr? zmlV##92~R{{?vpMUEQRGgXu@gIHR9q8M2KZXcrVFTdb&v#g06pTchBzXs4shz)tU{ z-px?5hGd|2dk38LqV}Bjf}NM^3xuCW-=TPgBman(H3`^Vzyub2nG}-qLF@?>KyzAs z>>vyWXVr!9=AY>8ta>01FS1pz^hRZ;s1FtD%K1aRAL+USnmRiy0bFZ-5YCHy3+V)_50ALgiWQg82I&N^hj^S9BL+d!` zfU?3>l`()qea$NcM(=};uFF#QvT4%w4 zR>SDW0WSvn#e6B~zf_9bBo|%%bg!REE+U?VshNtC$CYN@L8&w}3Stm%%Bxw2Ek*Fe zNSsAW`}48O{EFkcX?h|Y++0oER<}*O&;NtOWG8UYdMnFwfbF^W-Jox)JLVa(5}#5R zN^%sUWUbH$Sv0fXBlHIj~Ci z6EYYTn3F5;(N3sg{BD)$&AvLbm23G+qI^QuG^@)lbV!9iNdGYoTopv;@I)vcQJY4; z=3g$npw}Uf3ahCmH**QkA&NJZ$16R+8GpjZs*FLceGTP_k9oJMtD77064F7888K7X zvMw!oRQWtAPc7%1eiPoB7&09X@CSv@bG?h}_3tmr0UID(?7TStiiXS?i_R=y5X( zA!NkAvD^)j@xiwQJH`M6;lj^_$E6$DDNbYz$;5OcL1idm(2*dIvnta!BJ7-N--L~I zEj)a%C%y5`DoeZW3*FrKrd06Ginw}Ytv4G5Ze;~T)b_cTH~sfE&P$X(KK7I5A=HLU z47>w^W15)*LGq^2)m)}ARCNHf>r#yKeR-Ma;A_Pcl=&zp<2HNL@(6dJx7553bmlhG zG;>I@9UpoAI7d1^(NOyMv0hP6ZPbl)Bu(DsM%Puoz~bm`DbK9|lBHb5tss^|cerg!pM==TN$ij*;+| z@WdQP>psJ~sMMr14}7ea0~cHSdB$U{dWSx>&pv9U9p$L{qj&#!SbH&Q^@^53H|f^k zGcN>G**tE1ZQ!gqbKvasfy3V~7U-?)@}0-0nsej<;&^Hw-`!w5*vfz4M58N_JgvAP zS9na)3up?7mVYQ}yWsd)<>DZmv};GCllo4UaCEAj8M*}!>g6}18SS1vtx_eb2HQhk zc3D+5sp*^!H(EM1@OY|1Y@5zZ^M4mF-}NSEPZ+^pa5baJ^UDbkgd<8Z2>^m5+U>$t zA4i||EoX)KqmgT=V^Ig`^6(L82 zTwS!8HK93zZ67phiUgo3F>1|(&(6a-VF!MU`Rh&0(58NkurN672Rh`dK!lfa_eMMh zj8Oh5&%TxZzdua1A{pk2`@ek=l_2}yI7@H_czOH3b2~0Crhoi;EX_}`(^06X{-*Bc z<8!THi&pwkgrf)lj0&nVA`lh%LMqODhu~}ru`6~|>c4+USsD!eaJVIK0`$zdoxk5X zr>+O<9C%I^TM(iMG}@4PJ#6~Zw-gjq^^ti$KijHK#I1r(-irm%qcSw^NcAoS2U_f> z3h#`vd_Y5IkZaHm!WMQ$Ye>B5i{`4JK=Hh7Hp%;kph67(KtXh86h`tv_&&O?g3EV= zFs+Kr^LEj@|MVl+4%6)o_IsqMDfstyi$?uv*{Mf#OJ%clQs{b`#w1 zjUKrqg(W`b<*T*crNNlJYlQX~MIJ?sRzUJ5(h&u?TyRxVJB=xrW5TeS!hAo+(W)Z0 zV17lhj^cTV8r*U`V6#}>00Yb?aLGr#hDa$2;*Kr+hZ;=DrKU}p6${@DoN9TdtZyis z9_il(kf!SC*(tv@@j=?cMw#Yq`;}3OGZm|=jYw!1N6R)a2foT&>^q(iZcX9`V zO(p;@XXQg1sAN=|cJ#brYRN`K>1oq+6JodU$No!uENPu0yyTMJ(L0j&=B6tf&#Z|} zgzlE!y6juEgDnbl3oZAtGPLxr8sZWXziZz0y1>JW4YnhZyh*JJ#uEqMnc~^b%JRthOSyqCqnq8Rz})I%hz5xG?8RR*BG zkR+Cb!XZi2M(C$PHG_!XF zH&MP61*}MXa(eoP#r<&yE4eQL>5_Xu{#_s)N^@xKw{*fyel{w?zZs9P=D@Lhf9?2b z#U2u;Nz|2I%r4}uSV#0@;iB>MlJEMp7(|O9_b-WOlL(-4?=)PL_749$w(<$!+j_A3 zMwfZc8)envdT@D@^FW;Fs(FuIBiKT3L`jv<&dCf z-1XX@E5I*f3l+)J+16oxRVkc!(GP)Kkz>WjoHE!=Ixx%y)J5mh+i)fb)$rl^?-1>O zjLqt$L2bfz(K6C?OPKZF)3b{Q?_jmD`p7#ml@VhP^9nr{678GI9Nk3*BmRhMOcR5r zm~?h|0ADFO#g`BwO!r|?yatoXksi(lPkepH9qm`PfmQ=FyvrKoe z4%&Nz@uFFJxI6PNjF*4%el~iUpzx{iA{Q z-$B{C?#IDh1>HNCn#`NHA|Au4U|_k=2nV45*!fwo=(D;un}`%WUz)@8VHdggO9tJM zZhbKgMY&c|!Rf~@ks-B=gzB@1WEl`1GxfOt`?|C!pp*7j8n zeR4w0=E2g2Hy86Q}0QpQs?{j^D&7cS*+6yGx02?bj@7kAj1(9 zwgMa`OGy6g26aPASC|$&4d+QgPJjQ5zrI`CX6A){&5#+q^2&?SGoAa3IhI+qzvz>%e&rqhzEG4eI5M(!U{LLpMTuTQv5;0VYZV}R zQ3QF;0$R{Fj(97uWtqweX^%6ZNk7x1(6tXv@pI{=A_-x|;@uHw-#GilK%K)liA=(X z41ZHWl8d8LbJ{QP*~lNiC~2Uo9Z0@CU6z!mjxhQVqe*fm=m!Sq+sbS{nLSYrT&ZTxDfJ3wLJRS_y}lKQ@!XtG zPEhW=B-8Og^K^W7vFMBR<++vOh#Y6kY<)bPulp>YqY20Q3dQ$HB<)H*+n6t=l)5p) z#CBYhWQA<(rVI5R{`4af_JYp_N_`_%@ntGgKYR+o(^@|4=86>P+;!%SF~FRY{O}q3 z-|9tC5EYcu#%59&qZW#8Yk9N+0_Rga=?x^lT0UaQ$(dniW3MaI39|LJ_R;=5*xvMg zwT2Q$1^`KiK$MLtkDIeEBDq7mfGZZLed;#s2|HQrlUew4y$MJ+Qz|NgWT1Lo=3c`p z*Rw4CN#{e+ORi9Jd$+z>I(1Ro(zb(x7;{twUiYJzc}E+@m+>E&otB7k(N~NM95xIK12~_L0iwOPqGWS(plvG*Q-<8-$b&nFIG1 zB@p6PlQcC8pB2028frWi#RuLU2N(V=4MCu&&?Wt6F(o;(NcU>#FiXv0?Y)n8qZ48) z-fpa#8EBz7YO3k`y(aS0?@bw#;>)=ww$Zu2*( zNQ)c-yX15>3nXTAuM6T0`tIsaVJ@wLD~tN{Kk8VvZI8@ht!{!YxV zaO?oA?d+OyO~U69RyNl4K)Z0>{zTixH2`G&gM=_xGDar3OfXF4+~r2lkWRnFP^L>U zo*WTpv_-8=0*3{Mc%uqLFY!?&*9bx{;+zg*KOQ79seTV!UZ{OBXpZ$s`3n*y=id>@ zONUF%kS-1xNSv)t3C!j?Q`rBo-A0%NpZ=PlDOecIVG)|TCAJQ~>1NlBF=~fZK{}le z3wE)cmT(tYV;_F-fnRax=zLy+q@aD)dG5W~Fz*K0E>%?jH@$N8Y6Tqq4YCix!j{(w zZQWN^m8>o+?TxagmAA8WSwg#6LemY{KMjTn&LfGv6cFow6rG3#8WpSfDfGiadyf6Q zx6%^w@U(m_p-G{J(88Ccn;OhM2T4FiTKz{{%wYeWvz%j0vGyl|q z>|^Nfvs%91f}0WXt%deV&N&y{VtZ<9%4ZuWti^c%cWvZ2`vv0c3Lx5?VrP6f zpR`X3>RO2+@b&DR4?of*js5lNT-Ce6Buqe^Y6Dpn(zuROe$Hy> z0SLF+!k;I2mt>V15IR2 z)3_MDkM?+k*iA1+?%nlKY?Iuw4NhoOI(i7@cN5jkDGyD(OlIw z4lcQtbYpS7=W@-v;a`ZdR`f$_QNDOH{P!<~vrROmXU|);O{p}AW`+Ch28nQ%924LW zFbu?AZERB8n+UzxF2%2D#xjT7KwQZXlFM6G1uq{1+bh~n#XF3%V#0)T(ld*Zy) zOSfTU;fhVH+I*Qlw8RJ~ISOO`Zu~+cd2$U4=_({VJ_5<7YX^DYwe*X$PzZ?@$`?n$ zcxR%}nO=mq;QQBGpr>M>;N#oCYVs!}c(BUWYt#F+K-SV*fM|D4j;!VE=0thb4|tCO zA?NLbWAa9IZM3QO^PR<>pTx`pit61>OBo3d%33LqSH^(E389s2q5?UqvILyO;O5FL z_D0WS#MnLKO;FnZV+-wQ4(z{l`q~B8&e&`(xBZ}8tjddzgluL5e-#gjiR#DtB$8iZ zR!$AG?ZhRX&vm(z?`wNYEC(s2(uZB>I|{zA-`aoG?QK zb!{rscl<9adc&OeH@{~AN7^0=PL{|jP>TRIzQyR9aqnt$LrqwV1l!~QgbglnZ7~r6F0?As(UkEk=-1Ct&r(4p*WFzsBxbYBTlwz- z{LZ|+_p($cXydtjUis2#?9Q#gMkPlVTIVKewp*3!C1fw|ja_U@Z%49cRL8l+%aHE` z#MeW@G{rTxzixJe^`;Co>J7So*ob@>jwgI3Jq$S0{g1H0#!H}5{5F9w@rRa&p_Sj3 z45|$mNVMvW6h8LFhVwhx#%mTaTYl?cjpvhF8e)q|JFK`t+)}g&Zdru6;3O4W*f8l} zw}jGmgYd-6{(53pv{G-r8`3}huw8#<&Wpa$fc&esG^573|0BfTg3O9+7*|#FyAkfo zlTY;xw`-Id&M_MXO^^l#e(klLRgxNBKBr~j;a(s7zUZ^WRv?=A`?COAoU-9;ORz*@MXExSm{bP5~}1boM4zHUdM3Kh_Tt%Bv|` zhhF@QjrSl~K{a_N{7$x4)H2C}DZ9Bu`@`XP%9>{|)qfb9p+tL-PtcV#a&I=X#YEEp zS;wIEqh;;h5e&Jc#qzt%wEGLa>vrX0Y0j&VFUs;om~T;M>kkaBV* z?bDlp9gZ>VL@7>*)(L&nu%YWlrWq9{CNQ2)zls+|NqB&j`!6|+(~nf?`_$iGD%^oN z^3r~?yyz+z^Pk5je}rpZ8~(OJ$c0bQiZN89OlEFBV)xhGrrn2DxIz!nN8FOq%rP`#-^%}nw4T@n$lrU>xgHE zOUv{mmmYU$WTrfG>%5i!{U;ZluI=S=)#mEN91GSu3?cf#*$Wx=iUCzgJuEFh zwoWKRS`n$G)=8wOvUPPKcXb&Z-*;_vwL7N#54XxU-OabL;$MyOlU0*=w9audaz2-B zV`*b@es&hh*Hs-oy!*17un$=;BFZwzG%d&rTnI9Wg5AUXTG47)OBv0nU%6Jss#dta zrF>>DAbQx(Rz3@ZzXk;8w4Fu3)45Mqlg&=QSEdH$nQ431EXnJQHqK#9OpH!wt&Oqp z4yb3JMXW$w9Hvye(z4krW0t%+OVJr~jG zxiMSQxIslFEvo7GzuiaPO>m#9j!|!^V0e<;iX2cMtdDKliGRz3nank;u(yXa!$akS z8;d%^#p(g6t~%p)A>SO1yofdGj+1j?x{>BC>Ny|0OM-NNN@m}3rRuMID|~$#6Yet~9UWE@I3t6y=y*xEjeEwqb~1L+ zp1MwG)VTJ870hWgj!m;<#F+R(ulz9bkbBWcHZI9f84tyReWONW9$^4KHbsZM2>$UQ zQ~3krphUTcwz*+`Y|dfN5{7GVnjd;+Is_t!RdSbzzFRFaQ8zg4%@Q>3&GpY`4M_6K zj?_+(_Tw|2uaHlZha&BphY?+6lK;XumIAg{kt#EM;%Ay;?B3c$7XU10q+n}Sys%blXf1BjWa$3NfEF{b+ zSw*SHKagD`QA0?^gIwB?+=nek3Z`hrHNWKHB+L4T&K8dj++lB;S$MZ;QfYB z%ULDY{akrQb8jtB6MGq?WM!C#hbLitFWLhZk-@KAIXHjZjivWlJF%F{ui?CMRwpAh zSF(Xhu1Yu|d2A}8A*V;K5CJfBGpq*N<$)UUyuMDL9wjxCd0Cdc!hZG?^GV}6qZvxl zAc_b^-iVh2#_)F;{iz)U2)b}gMgJfzMyYAuilpPOu(KJZ;VZcb@}vE(KGvhORq0wF zbgr}`b+rk zNmR~gB5u)6%F&tpKocihXH{PeAeRK)3aPlwvhmm_=G82j6$Pe=Rser8Bo#Q}l3JPi zOSV=gGfiiA`=g1feM;8%Pdc1T>Q+E@rKX}tH=zAd`ENRwv9<>&o@$#>y3d4t)>B?v z)+nhbqFAVCymagUX|pT?!EA#~C3%XlF}J$f&!8A5&kUH%ibMmqTN(E@h2HR(dD#N? z{wt*j5H%2e)uigSO0p5pNsW+wSJT0uTyJ;us&xgmz3pjA2UfEc3G~mR>X4>>8a$yP zoD!^379+bWX0K@xA%q8)@Bs~#1pMf>y%6};xu3@*_7R=~7gW5`_;RqtbTo=XQFv8^ zU&E#|j;5krpC_)31#1t1K(qeH$naDjc$<}xd+sWvL_RWww2`RZC4GRg`<7+ud&@dH zs~E2EX+Mydm%^L=j^8nS?`Q;{rKn+7*~>RIUf_q!758+JqpJ-#WsY%CgjQN}Emy{G zyFB~oY~P28?Tu3jSgz8C=?@as^0=Xc`O~@OfX5a7Z)_cFw)PN1FYfPDO263=3Hw^C z6BwgT_lJ8#_TFy$St$RPl16ooF}^2TVLY37=#IxbCUrHDz+;th5x zf?!)==xCI=%#ok_1)b0Ec-N;1;g&vi)XehnpBmuC|W35 z97r~M=li@oN{8AOj;jK(O%?^xt3Izh;4y&LgfE|sA|Cj%wL;c6x1=Dohn zMF*{;rEbn#qixGo4Zh809VC*0acye6U0Jb$u&_4DiAj8@oxfk&xTR28(A=okvX}k& za)VO`g-R?#SetFhA%UDHe%r3vYtsf*`Dex!nwG6zNXW$QF1C8 zi!eQWSEu^OSKh13nzG5dAjK{w&k$zh%b2;Kh}0UP3ukZo74I^Yiq6jpWO6{xy{H<= zCqA%0S;cUzU#Y3vJyt$Uka4jja+`9ENc%4)<(1zq5d_*hkz{Kwmse)GNSK@n?*^V= zo*8oTv`e}zJBk#~Vg2|(c?!RqB0&H;xA-4t^f2+w7+h#=W;CMmKb%p8Qm>SKseO;H z*d8Wwz$P`V%$~%>g0s3VwB(M$fm5a6@9i>9FfpL$14k@|P@+Fb;G%BdisNdAQe$OR zdQE1@0xE7}J3{I36rtk!lB|h(V?77_AobB`L8;JH)ExUoL@T?_Oh3F%66Zb|S%Xg22ZY}ervx&& z=9(e6>)dwC^Lj;A-lZA$Eq{;%i{~zI%USZi?bIyTS9<|a=Y{6f{hhKQiPdgb2^XTX z;x#WcdvXJe@t!-y4P={?>3HS#h*|eeBKqSzmaCm`U_M2;wRaG;ImOK>&fHqGP0-5# ze1nUkI=+`2(^X&MPw>&npL;cpG>A+h1b)JgjGs~GnS4WMjn5u1#sh7`#IG^h=2V&K zi3zp5E&lOCu80{M0&uEz`g%`85Xld_brM9*kuTO#pIhRPWx~s6F?nJYShT*rR{4w^ zh#7@Iq8`Eq*t$wI^4R=A8ci>28gWhXG4l&na7%)SyN<@t)z2I>6GF5>5?3?tjVv~iMue>isZyK z1dZX!1}9%TuJ;R!y;`;Em{u;%7NqNu?iz%W&pt$Eww=3jR81M+t~dAwAgVpzvL%H0 z?(SwgP1sA-YWU6YCLHnK-?UlzE3JA95Y!y&6gkDVX^v6^>>EIuQUMB*(E^|b_nFa3 zhoOVh(z#x5D{FyN7V8T|b|C^c++c2D3W?q}0M^=hkeMJ+)o!}|mHtPR*8 zouS8s)>iY&HEW;Dp#7Vsz4`UNhKWwvN|Tq|og7VOnZ~LrIBd_%V|f=y+fxO1=bN)Y zgm3%`CMP?ytbM0>=^8*xdxnNZU`Ehsi|;!eTMYhz_N9ZIPu#QLTDHmQ>e(cign-dL zE!VbmSv=PX%S!xONR==TWK2Xcwg|MbG|JT_7END0n)*FG_eo5;4|^vs(qyO^!|ic& zlCi5A*m!q;lR%3`i`!?3fPCsbkU4}^xhklE+~FttXu4p^DdSwsw=kga`jmR6Id1!6 zqi2isLFooYL!6EUi?3dwo}q!tCk~mwHsF_n5@sFdcNQ&qQzG0Kc&1^-E~Ys2<8F97 z*1BwJeA!wpQkgkkyc;&Wsg#m3kj(Vl(QnQ(Sd;Y@sAa?W2!EJ1$2NO)RmC7J-DBT> za1mKsF`^=}Dk>fP{)KQ=TioPltf1t)R<@F=}G?dPE!iix&`9#dcbwzEs zxX1pkTru`4ZscObJ=@36gsWRqMBSm5If7F2Kq`JOtnUvJ+t4g4l?w`s5roRENThi7 z><5%`iJ9If9&ts0A2aRaeM>v#d9#E2&@8jK3!}vL>3#7N)pVuEka#2I$kd?HH zwNxC3=dIhh$^-+seNR&uKeViB<5d}f$sMF&&BjMl%>D|{hA9;Xd>%XtC7p&z_L5`qHZzs6(}O%$ z4=0+p@%tT!HaFSLyv-e48eubsmr6gx$-OU3%R*Z)vKmb0gR_gl;DAny;=FoRj?_b~ zIVDN+RH-&(CvtI|toTD%0_W*ze{i zia@CTP#Y)3Z_&|5IM0uevBOKpLv6l=2h9cLai8mZ8)xv?rb~&V;1~FbX$r#=jyOWD z?PgQ5&l5vQ^+3%MEMsfF4sY}o$nttjgkh6BqUKW43|ahX+k&q-`zd$1o10k6NygrS zq)BCW6;BP*1q+b7Ro!LlN2eGaZ8i6L@~u~uWv~Q<;4?|CIjiUmR_F%KvxUvLu8BX3 z7~v!tcFZa&{91EtMQu{RF8lK&xB+|A`JlHr+U zxtGxnzc2o@M9dlFtw31VJm1?Y!m?SSOF75N^hM$1nUL`DAEXJz_$y<>#oe&s@6l4t zTwSN`)LBWihuSBxX>_<0HY1*uMw(4S*Q(emaw6>co4EeF&mQ~8kM4pt6P~25rMNbA zeqaEbnNtBxCC1J%8g^lY_3~fXN}P*RRG!A&1VmpL^Sf2xUflT2*Y*(w;#n^)kDX_@(UwXDO#8O#M|ahW(YD)#u{ zy8c?*JqrfFt6CL|eMHXqRJca@t~A#L#$A1F7+qboWoEszib_C@JFZI5&Xr8C5t%e+ zA=i9obc9bzD{tziT{m4b&&qG#l&#yO7F+lu)#yzNYn?wGEr@7;iGMJ*<*P-#u2!f& zDzB>I=a$FEy#Y|kI6T}$ts@>c8U8-yWSV2J$3?Z0g~!KC37-^mP!}8Qmf3u)qxg9* zT4hlo-CIRPoOH5Kr|*qy=j7O{mDf7i_O!F7b~rbxw>-3|YHCcp&8_TN%1VN%WU@^~ zZaE=2j8=T>8o z{~(E~SKLr~(WwjNWAkPkrXD?)ZcvkUSPA9&7We8S2AqqOg71QX*i4tX5?&uvmi zGl{eXQc}M8+FGz3tiAE3%OeRi(@`4>pM?};D^H%Nh|yizO1@=QE#pFVw%6S1!}F01Dsto&q8JKZ{j({3_ov?WgoV|dqUb7A40qPYnkS$$J#MB#$v zUx&)fSv9-cGKecYa3Tg26>G*`_2Ut+24K)uw2_fny=p^i7o_B@YVGYW2TZ;mu*TEk ztj3Z5Ke&49s3!YAZk$d*VuMLZ!{~02?vBx&qerKL^a$xj$nzBdb9$9OLW+qnKHD5sP0F3a?k5*;yx34pWuZx zyj`zUreR9`4h$gmS<2a20~8kR>|_$6Al@i+I6qu%4wz36&DZN0EJ;26HeA=BBEFcq zJkqY9tS*6>EU;0?rGX(MuwOsT+x@8}Ba06WKVP}6<#>z5)_0Z~1dY>$o8=XFOD&Yt z8YPW^g1?{v)170V)C10u7w-0aJV0qTldoRPAf3r%dq<& z(|(F7%)q6%_EmOV8X!1jm!h!Rl}Sn&Y^q(?cbO#hiIpT+LHQ6q#=jdo2TbAi5$Fy6 zS!&^*fHpj3otvE#8QOx>+$t;IDv{vjDM0(JekeSvpZVWXcP?KWh%87-B!zjlVh$Im|dS`lsQmV@% z2IPjZp;?Z!qIabjO*!%ma@6vH-T&tRjB&$*uxsMlMf>>NrtH7ML`NN)=;Okaa>SLY zQ1tvfP}koQu=`reJ2U@gw~pB%U$9S{73A&o>)69!78nDkSyE!ez&$)2_8F%c)WM-y zY)-)U2o~q2Oy&;H5K%bR3sk66{A_CFebi2>m#NHbyiXc-4cf0??>x?Qq*gG}M%YT@>yfr7_GepesY~%s0oJ-LOhxM?2@W zK-iDBT(gu&RyR&-De+9NcE%Vm2+GmU;7UpQNJg#O-BpAi|mocAd| zMxeWOA9E?aD67RhUu~4h+(9bwpnIYhW7i>^&F%T9RV%>REI<3@M@RW{Fiz8E51HSo z8chb6NKaWr!LRU?K$o_F0^D+}Ome$G&;T35RAWb+l{jdeqG-M@&_GR%YxlzW4$O|? zxwHcmCVt3^)1>I}>(DTobzk@ttnLouKCb2Orr>Yz?oY%00or2_U6Nm`1qcjS@>8OS zM-`ff??A-ua-wSi_CFmEQUSv?$k;tV4+%5wF6DtA2xsd>?HCGQ<%4nM({Nii9E}yo zy{J?T=Fr#}R+G$?o;${6^nb7TxjVaBatzhyIm)gr`Nw;UwJ`DlGv0xMt zfW?Cb5@UyV6XWletU|_zcMO^0 z<;Dh4pF|UtFmxI;=)tY1_tbPHMiKZ&)T`q(!!;2<9Z2&;NAgC3IL)-ZW4JXk7%Qqk z-Axkm|3+t*OCzogr%}*&1|3n`*-^g)F%I8S1`Q;0{!s_-DzXw9WrVB@Hyz`f0aKsO z*@+W?l(og=sM#OTtq1G@%_h5!0W}of;XR^H^8$Ah945O5=FNB|WA-Q!rvf{NVO;`+ zmocmc?I-|1L@;XHl5>;4g0Euf4VC-(7%6#N!f#uLSq#YOkboEPFgcXbAqKMx0en&P zh>pZgvrS)VZtrWN6Iah68g5!9kvjm2)s}J(hQQ@!2_;C<_y-(Gnl&~o882q> zeoK`UY}KaKGtLmq&f+!IE6-HR?2>|1RXPWE8u3IC3DkpRV&giUsASG9jiE6Thcd2+ zOK`HmgY6%S0^C(`d`sdI8_hk?VG>X6j64D6$AoTbn8hkz@=e@LRqTHl91*SS!fhDy zS{*l}0Qs9t{TX?k2YFw;brFjZq*N|p&<+dNeF`hP{*kSW&lkTDyv-SFa4M#R|CTlDvCsLE7i2`)<+?=EakHA{1_43AW z+`C1*NVXQG&=bRUsJ}2y!~tIkWSufX!{P`Lyan|bvC1{>MAOskm0NE&*ai$f{P0Pd z;>Jly%gL}TgX>YG7{eQmuHG>SPX>5BEGTD?z`q*V`Z)YMVRj%#KlrU5%NTuAc6TO` z<0t^@n;yZx(2I|&LSMUzavPP?tU&@N zacav>1-+W74s!Zw-+o`l+44d_mPWt`?pdw=DyDt}Of_-iG9j+7<`p6y9UVR~b#AUuN%v zM_<6o1hBa94xrQsegJvERheX2r}FNdsCHiW)wF%w-Dw3uWv1!)3Kcv;UqgAKa}19F zy96m5|wbNM*HKpfepz zP3V5EM!nTSLMWJQW!hydaQJ}??_Ih2fa1HjvRL_UAZ#iV7Tx8q9*d~vLzE- zs2#qvK(iO7Yh-m6r6}i<915m0ud*~rqUO5W3uDaic`YTf0UYC#7^lH2I3b7E;9ZL$ zalHF3+c8sSjQka{-yP3+&z$YRl9lxBxIA_rfmecvq1S5gn!p%yz2g`_2X3_a*mBDw zNT1*sc_bXL@=CW&8A^?`f4_m()=h{e5=rju{!~dA?y*0&zr_q{l-TT>G=kvzq%hxg z&fJW_&!QvT8^LdmBRy;RZpZ0D%MQL7@EegZ+EG_4FS{ih>$plF!64-1njt`h#Rx_^ z3mh@FFNSH^x<(-=7{#Psq_{jI?I#A!0&unKCKXCOKdl9bZr1WcRb7+BI3;&K`U8>_ z0qaWU@rkoUrS&%G+G7&R4z$}}Yp920_W>~Nigfi%~eWl9X-cw8BDbc*{+>LPSLJJn`8C$OYPTI5g z;-g516nS7WcO!|Ll!a=@Ur1MQxX zy~-i`vxQVw5OREpfpm!4;XLI!?nBq4D$RT3VH1A|Dm>g?%9vUz>nH50S_I|BXFW+Y z)DmB`JQ3}zfv&uhQQfWJ@>@y{q3ef&u{26g<$RtFyH1sl>YrcWhr+IvkQN4_-*iW&F`^UoUislb=x z_%et2a7K*P%l?J>YpTaoZ~o)*p+Wx_C9kE&qF)_eJ^7bE0hy7F*Hd8|gA8s>ZW3uxr(kJMj}ljE^ z+wiF3*Y1td=|vHc5ZG|lCk7!I!@BgbY~I7%Mg65r^{d7hPeuVX)M{-FSR$CUuec!cN%M9q;rEX^ zr(r;oZd^!&4}U+cb@N0#95UZb>~Cp#X?Q>Ue*cx5`dpYHK#fagHiEJZsW1~#NAez~ zzuu%ho;3BOC1}cOwp+$j0(;l+FX6dgMavAyxlY*l%?m?hSew&iQe8sDZXij1jH1Hf zNyDdn=|8j`Ky4L3v_Fv@?f~nx-L8zvmwS0>+w_47aI=bq#LDPc#py-u(U&m*O^m_C za4AxU44MFkq^0P5CEb|a9U5d%PS|((tIG&aQK5f1DcCQ9Z{%%IdZOxwMlm!ssUS%o z;wy4ImPNdad|y?jrHKw#I(`=!&x${zP`VwSX0qEo@6!g~?-oaVbnWd=pRQ6sj zuQ(RGdeONVS+Iw3tv`9H%@Y3e8SEDKb!x#xA&}hyxvBUdV^Ymg+T#LqCYG&aqO$< z#X}JhMbrR}38-?Z8|__+k#l@@&25G$YiP2)1O2olc|VhdLpZoaR;c(pS~$~*{8)~><@U2z&U(YW&2O+ z8_>TKIGui+!3N08t1tQP@}!J5fX)~`ti*FiF@-`9=v52UBw{Kix(VwVbqFdnlhHwK zuZ7~KVHXPAh7KB^fdV}2r~*rg;st{DmF$#LSR9~5&o66~Z1dOyj#2RHQx2GTbdd0kaGnzx4x%8R`RBltGZ)LSh|Dw-2W_1XH_0#fY$9O^WYa~6fr7?@h6R$Dq=U7@ zDGXkzbl$c8y6PjO)wWM4n0j4EdtUPOt74RH&5T7a=TaM5b#>}R=J%2;T8Sk5vZSmG zT)h=Y*2ap{of7U;r=_=UfA%TdjMgD_M&>Na-q)Zz>wrb#TOVQo>AI@3gTH6wK3m(Q z4K+`<(l4j2p-(=oy-^ICena-(AT;z5+X1(}$}GeB8Zbp& zYlR?ixnF2WirWHJ_9&fRIOhrZ8TsdAf26Hu>lQIu%K>xUM6p-gyD!X=@=|wv_Nxao zXp|0!_{>F`h!BoU#yvvSBkVu>x9vvNdpn~IQ!J6h=Pw(p@4mnML6mxj_CWQm{+jdr z2Rj8ObmKJ-GE3uYz?PcygnvD8LyeKlOj+vwZDDj^gUQBFOsv82-LL~zs6+VNKqy7d zib0k?gy>`=hf~+YRRVkHkfN6NJbby+flw^A@M0yVnwF4}0WNQ7HRho9Flxbj1Q6it zRk>G1NX!%+fImN7apuh&Q_xldpD%mdg9R0J*^6dj)CE@OaC3=WfyAJU;P!4s!x=czA0JRhbK&l z2~pvMFk`21^{xZ8sPZMp+eyehG7B5N(BbH}ElhDsyus+*t*;cQ(jLKJH0xa=po$`D z4HlS!>HG*RO7o4c{2asgdIhyMS6JwCatQx|TI&k=qCO^y^ba%sB*h}6T(MI?y;1Vk zNPp_*T_w1e;|?s`6^T0Aj z;m2rwLGM2pnV%$gc+i}t&Xg(>8H`Q#Yb_ZuMQhicN?G5}-GFuniylYA$?Z$@WTF+v zGK1DQ&-JG*9AX|IH=wX5I%sI&Us#+VdG%C406u*pT4z!oJcfxWT=SAXDSK z)U`x|PMoV-vJAx~-{D2bLiBSKTq#C%S6f}cy+!mSvSOu1>Nd)Jiz>+#o8AXYj&%nJ zY!OYs52+Pjct9ikhiK~=0r!E1-LxX^dKK5=8?GuwN~2--$z?uC0QBNH};#G~`!cb9sCM&?1GGrJ-JWY#vmfNJ$II<|`M zaxxCdoFNKn6})xuobos;NcXYwHC&?IodWFx^+9@{irU*`tcW<`35JNxRGj5JbsO|AgaZ{DXROVIYGqp&HqBXT47Of}o zFd3s8g+8CYw50+GX8?r;S?0^IVjXT&B-)(dYX#_m1Y#XqOU4B;-!pOW_* z*4`3yn{qzfn6|{=a2O~{qt%Oq<1#VX@+Ps#05h)nvS(?vwTac*Kdd?kTF5svCJAa+ zb)JdNb}(%5R&Zu$#HvY&k8F@0u^TQ2PF0GJGc?#g(V)@ubTzo)B*gkK_@>{LU<#}* zW0Ym}veF+IXedVEvG7d7W(rpgZ?KZu(w4LF!>q;ct3D44>z@nXZ7cl^3pCpNhdf)f zZw&_C9V>8p#ixaf{DPfrfByGaOd^i4jyMp9e7uM^hk()hcxVs!0IISz&9m9@_(?hD zNx&+NN_sb96Kx^gDNJE(!Tj@)A!dH7leG~p>wI9P4u3?cU;&g1{C6=ubUhz$77W6$ zP-Z~0A|}?Ta^38HkWA3)vAekLPctzPF+pE##%=&Fa7@xujof&;O6`d=PN!a5xIL7M zOGWbya1RNte=rY7Xv19fAJIXDl#)sTU1UQ zR#V8DR;u}XrtBAzq;plR|17HMZNwNTH)ME6#60?=ZvEpkNA?k~2Hvhzuc=DIl~i_s z@H^%Wigw(>!P$P0N`TpTp4yknkBopja6S7+ZPqQ7xhSJkcCuVv);lK65nHlC#@J1g z<)2?)@h+>dF@7x@j>>fzmId%QSHrDrBA9DN_Ykz>;lQDP!LH^wA=|(9qR!e=h>ekgLP-NRUz2rEuBMaDNNaSW2&+tPfz{#w8 zbGPX@GAF%%t~_zum^(8Y`U&v8A>FQ|%F6iEyv;AK`b#Sp?U62IC(aqKQ!%ms^n3fh zLv~uJsbQkz+d_@#St8H03URCN?Fu>NPJ}>q;V3qeu6{L%bUgiVLD&MNPSDT~%m`4ybuljwjg(^aWg284atz;? zvQr$v2!y`p z#o;BY#&{zr+D$g!VUio*W`#*YLJyMD%+%_h_MHpr@NO6-e}XFF1|1LV}l8m|Rd+lPpr{eLV@yt!ZgyKff zD8Vc)%2aRlHB6EUHWmyCT&e33&nh5D=-NqZ@&uBNRQ1iFb9oKve5A=d>0ivX)(yl- zHhj_w7jM?lku)=(!U1+`7?9oyaCxNo)VOGbRqrnTG!XXvDl%VkkBE1R?=4P3!TFHy;BKj6zVD~%(}E?dVZI@ z7A`*~rKM+(xDd-igd$0M;U^+Ucrc6*UnsAo}?9uNsNek7H26BkV~^kEz$n1ix`U7&N2^{2ivG4ya$VI_b* zZzD;1E1CB35fMz7U+r)zXrk5)uNgC6oXrNdc#|V&ESla(t2IJWb6VqG4y`P3JB;=g z%vUfh*7=56rz2?lNg!*}gRFr8z}@rsdXC%L6&DvOx+fK(uWaty4fZz$lw49S0rm_b zb5-MX)W5;;za_hnK(b^C0C`B+&YF$*XBkdzt%F!2*ie zf%4Jt4~(OVM$qT7XAjC>=rYsQ=%5Xp8zw7RFs;bI7%a)Je<)H_(-{^XxY5mW&HTBV zEc~W&i4*-!%Nw5Q0oU6iY`nhoU{Poul>?06p&~^F2P=V!uV1ZH(0FGf7NBtnuz-di z%0CD+J<){&gqCJR0`i~8YjkDNGG6^hKe^KaLLMF=AA4+*U z(u06)%2lL8C0+quD5BkvQXQ7QN@Ui9 zwYv&fdo@lL(Orjso#x?c)V$MXs6Njr#_f|DTQ;Py*sFxS&EwMK0M=2qU~7wEygEal zkSA#znvW*Ur-=)=#56SEAfP~mR$0^wq-TzcXwC2GsAHYP}5Ith4xSwkLEbLq*n`#Plh zS|uA@q3v6hI!kz6$-PwklOTDbQdS!AlGI=Wh4&x3d!k4Xb7hn2=(O2|;32sq`y?fd zM#|RD&o$XyJ5}Ek@ zV?r&RtJ!h&6L>D=8601@Za#s85!_)?K5WTWVJj$|urfjRnvKP0xRR$3<+ZrI z?+__N!;W82O(VIR=aF(v(U1#jsw8gHVp)G_TCHGx19@p`?6{ci4*1Oyn$2ST^5!Wh zud?=>+~;=en@K@iGS{94L8Ed@M1hk{g7pk~duwThr`%5vnrK(%H$U__N7<;#J%`-gZ=ZnH9#yq1E>7-Y;g4q0#++PDNL z5Y!P%mbr}(F3IZHi$Xvvi07+4Y2;$yXh9WI>zI|q*`V^+!h@4%lETlZ4Il!|z1O!8 zQK(;!HoqA*!j+q)t`aMDOX8%T?zx2uYBKRA)w_~U3m&BeMwAyJ!{7R2D(uyEkyHT{ zvMSdK^va4DFs=>n$1cBtwpft>EVP*)V@rc)-WTtVqs21mjmnTl1O9Be)$<@#TGy8! zwY8`!_4{Rlv=1@Xb*9yR2v*RK_gB5kK+hR>*E?)F|_C z>~b!C9)0=d9Qzol=Y^P0h)=5uhWu zg1cW?!mlsT1!XqR8GMJX3}0%OJ|1F9Fr`^OZMMf9RnJQ^8c6WOqm3dj+SJE>aqaLx7g3EkNTV$$>yO5zm6r`@pCeF|fQF<<7`_hZ)XFwJ@Y>p<{hr&)ksL~Yt{hdZlsknKhSg`k-T+PY!Jcx z?L3K4thiF8BE^~bokkBy&@nMsH352VP&S{(zuwU59Xi&)8SU0gj9E`qZlY8SZLOdHyHKnGZ0bbXj<+o`CI#C!HR*9wZ?OGywJBM6 z2p5Rkk=Z-~QaHp9)mbJ|CsH3wc~a+C;CA^uGS>xjHJAE{xHq_PJ@na;ghY{fpxY-2TbRK=JgjBTG^>j ztFGTxh6Xr1EJ8FQZVPZ;`;a}Iv~Q#xp`q+}w5Y>jm2eI{tyDP8Lpz+ti(>`RhTG@m z2C3^Dti8hAXUXJ6Onob@Z~=G%H@VCGev;o?QK`_RgD`Y{CidP8Q(LnbwZP&5%4aYy zMXI=#GJhNFW#dRes4@8Hhy2#zY(<@XYz*t+*_aXF^fGkMJig5{<${3DoHm&~FBr%$ zsd`j$8i~>I^AB%hL>QBwFuqj5*Tg@!=Do8xg%kg4IRSgK2E3alU;X!yGJ<*llYWvW zXzTlV=18CMf0x9_;z^`?m(FsHTMG_2pXHAunlhO-J6CUv*`Y@v?fchxt}_||6wS;q zn&xuR2=r5d#fE&4F_t^0O46zJUVMk`=)A1)CcvadRaH`e3f){tRJrqsxr*lnF?m5A zuGZO%Er35_{}K(H1_>c zUBjHLFr+I%g(eqkT7jZ?uy2+&Z$@Y!== z&3`I06#Zn2t?XG(bb3lJ=0331Wh&+LwHE9>zf8=3`6bkQE?C$FmM~8xM2A3&?PU7& zYi5ZuMio}oAsva>TY{0-lOLUFBp&t}`NZWi711?PP-wHXw`dEkWmBoW7FLa{nf_>U zbfjD8Hwmv;df&K@qM_3+orq^^EfrYHBN(`OJuR79SFRlLuK)R$6qh4QZjkYSUIh`& z>q4wL4fisleqQFDTjigE`rTZOoYK2qYDe%oRZ#7=I-5lFj#lRlxB4jZ{X#FDN@irtloOeS3!t^q z!j_FwtMvozI4#57lx)T-@1YE=(D^unZbU@9tgyilEUKD2~t zk-GwV@#;P6*8L*smj=`ae6}DDnoV1#Vby7JSDTi*D&-&NuaA`lX6bI1K<12)J23qx z6D6X}0kfmX;40<1dH;0aEwvybT@AkwcmmqN)~JCu>x~X;fA9LrMINyJTSc0|2zTJz zi(2{XK!3hT^nIQt58|WxZD#$=HQ;Ll=FVszWi=4VqyG;v+(GtkYWs-Ob-`IFB@6Lept z%#BX+R>{x3fdTJU9FV~QrvmvQwOzdNQcQd;O&tqS^fihNOK-JY4(2P{WLS@5TE!H- zLd+i-v-g#*tIxX=*ko~cGRj4UVC>gP39bM~iZ*qXSQ!Los;g)91Ib@2dE=`mYfF|# z$eUL3jYNQeq+zivG)oV%5u(wr2*;57^sxPmz%+*sHLFTb@qQKr3m9FGK+g`Bh#qC~ zjmKO!vIfZM6XoVez3dHgF8xgC*@m~O3nZNFif2S`@v*pO7RG35sU03lyDghdb+|o5 zI+4}h{)<|1FXk2aUyPTu(mycT_l{G3`dPI~M)37%ISV--qA-9$H} zv-Ytwy7;a=#hMlI%=QC~T7uzo=~MJm53AoQ*K+L3c5Z@3hh{H~OokV|1uNe8eWuRf zt~S)7)hWfE#@4bCi2k&3wT?~--@uh8ob{y^-Rys`bG*)&Q-7M}o$)E}ejF{;k2H#% z=AV3-^s9;2RzPh~g*=`aJ3}WY_`Z)}Imf8Z6_ybxU+L*LJlbBsRLeD3(qLa0BKA4$ zuLT5=9e6R!$?;xOL(vus4;a%YykT=RsEm(euKcv<$b;91aWIU#sP&N<&B-{uVALxuAr@Yxy%{(WtNAi`^vgBiTjMGD>q zNLIibf@~VhM1dNQg1Sqz(R!BivU&j8>yDmof6(j;%7t1drHIe-+pJ>3_8vQ~SATT? zi2F9?qi!|ZI>pYAMVR|`1M|o#fJMh!e>acNP?^?W;r)+v;pCO#=`oqA<1RdI)}z<(!bkONtkWhhH2I{9@iSxJ7*(Uu~eX( zy;%=<&cDu^6v0kQD$;;QJY_s#!>@r3P$|LBj9Vjpc3*!|fW+dKDwI@VuYpM!IsJyP zca4#$uH6(t-ccX$Q!eO2WU_ZVEM<>_Z{CJ;q|Zs-N!`U4X8jGcnASA{NVdH32P7w= zk&X^eR$@&iSP23KauFv2&~lLaUss9Sii;u#RAxBGgM z;-PzZCZaIR_Dr42K!m`+gVyrWsI^}}vWxMm-8i*TpO54>a)jvlqQDzvdAbMQ^?|~_ zh9==p*40jSviX@6TS3$^03@ZCv)u?9a4*0-8TekFQFE_Hn?G7L&Yb+wDom*!WvbhOZchZKDeC89P<(kefV9lYcoSK#k)a zz*!whN0E`8!L_lojm85TGR{zCoE{aK^oYHYLAVxa`8HhG55wDv-iM%$pLKythiHY+ z?x(P1onqm0zQw+3nV8_Zf4dJ8L@=ldP{GdLq2DyiZ3|MurXSX^dRynpE_7n^TEijU^e{eT1xO$rJpFlz%p z?mq%4o_)bKi6uF-_L=zpvCeYGZq~0e5wiUH3akwzkE_n6DPlto)^2HFXGqcRYq5w{ zNeB``C;Pbfmp1;U{?)&Gfgrm&U!ODn_j5S5gNFk?UMB5-IY6U%M*TX*%iyn*!Uo5D zJXcvhw6^?vh*Z8}TFKBuRy|((4$+&cH^M1E_Bgmk->AyB!!0`J>4PAEIP?QPtHEMP z46Ct*ehC(K%U7{qs<>@+a^Jq67(L86U0li6aFi$-8ho4<*se8J;6A%zQF~#B0GzZe z!|d2x3a$5`d3n%S36Bzqrb5+1{~DD@YxUSJ7J>X2CWx_|@?%{nKjY0JJ3^MXha&>D ztFzks_|t~ODs_hp z`%{mdiWl~j{9=lJQovG})l{>ZOpLEq)pwWYgo)23KaT}rXQI?{)rV($&&l(%-g=Jf z5HMC0XRq`0WEFPsiDBAw%DvG4rX>>2N;6t<^SSaN4@KqHk)_=5BU&fe%U)SsD6T_I zJ3UCmIXA1Y{f46Qu_+*Cfamn7lPND=8Hf3KMWye{ryhV9|2)_V^~gmj1W-aSfFR~` zV!w#iJ~b*m!%B;<+|Zoj`__P0a{cwyKN#+R9KFJ6&_*kEI#O*NtI8T#t~kyE(D&|E z*@jCRat0b!PzUm0z4+|3NQ(Pap2*Vvs_DeUbg9S@;wg#tR|VY0m-$^LiW!G(Rs}rF}8iH(9wD11@pv~|H!$xM6Q)xyVSM^P@jd4 zQCt1lTiXm?z1QJfZm{)_ge6?1vd3Cy?<(_+Sve&RzwgBf(5M)At@OOeW)1yNA#npQ zS5r67o+8n$4I#`9>;RO=8GN$SX7iCT~2%xGD|W z;@F?QQJ{?wTkBlaTXF#z>^r9mP$qy<6AV$Lr8$}KMOPd=eRS7(ZK2(|KU9P>-QZu3 z+59YhNPkn5r_>X=2#Xx;*YngVd}Tz$eMSpkdHlPPJ$ zm3-#SV`KlVZr<*H)PUktn@{tk&Yf;-NKx(^ZA+UspJsX|OT5>2ZVTt?+`ETX^E zd(6*k-*g*L?73^ER2y@tR|^UXap-~ULaL~m43*vbDMdLCLt-IGr6A7(6naeKYLAkv z24+2*b4)6rhZRLQX-KfzqE7)@W-9;N7c`UyACoWp>pLVIBL$sC_eRZw>!QH2b!tO= zMJmhHy>yQVo|Qxf>rV*1{ab&P_2KCGll94b8!)3*T=A5^$J|O5m%24dVXcqv(df#n zYkDU!o$o)b2t(ccnv&|XdW37^V!ol)u*?lvr<~;YEGJoqTjLQzMZKAi)j#x3`)kS; zvT zk{lWAv>i10UQ@B~7tJ}V1?U!XpXN<-rSdmfv=7x}YgsSY^puxuc8O5a(fYXZ#NhQN z)lJLyxg#xEU!$v{%z%$}tV?16Va*3y_!N^jx=&t_wQxHw00jTRs74p2TrIy&j{ao= zW{zNYH6?Imo;qp7qWN8(1!Q55=LK^D`HJ0m<$ChQWjSXit zAcQmx7PRWBq~hv)1*;jVKNw8Fw2m_LAVqTQ|6n-2bjXBOnzedm>(e@b9f4N7g1^g5 zu5Vv}Chl>?KWe^oEqLg&f#XzstN(N!lO&gDW@KKQfLGzx59B!-N-oPHm(yp?$~x~C z$`q~+AhLUJ;VqRxl0>b*QMF15uT7hy@8d;ucPx^vK?yvuCJl-(4$Pd0?!HZV|AX<) z`aF5lw9q2KBS@ww#{B)~FSkk~YIo12`I_KuKkOkT|{#EwfFQr zNy1`bNi~^-Ee#+#W_7yNXT=WXj3h6s`C+B^qn|-SJNfTpz@l7$+Kjkj} zV7R@W6iP;N7epXY4$%1PLjwgD7j}AM;<8dkH?pF3##P5ECpz_x53R0{bbb+K;`>~1 z8-#V1uPk;7Z-t9NyKtvNnk2WVb%P#;sqBIfqBy{Fwsv;n`b5fQ1Sm*9BhP4YsE(Lm z`{A;h1GLCpe-qd*Kwv*YUKH(MVbKRG|O z;NSV5hwZI(pi2}#iE6POcgyU$Buy+0zd%0lrbpK6^7=MTIjSRFu#@3A$^2~lPbA|_ z1bbmWD4jTU@_whYZCE*hMV@ZbLb8`A=D5=ey#jJZB9h~p^%BQhqC@g?4>V)nF?zc` zGfLELdFor*uKxC-rEa?Y^VDy*$W8rpw4W1UmsZ@B%&f3<7Ws09`&XzjM>t+9LYCsC zxjni*B(`B&os%57mC0cC$2mh@T~;%gWI;R&_W?Fn%@go@t`Q+0|FF=E|9W*&5;mJ!0F$&rByKs8| zCwF}xm?)}$Ev0>ykXDcKRENQt$dm1WU&@5QZyN%OW(Tobj zq0lQN*@`0*!BD{zVswOXw94kTR@gU#vXyddhrbZ@`H8FU zj1IWR3ul`sLFD^?8=82wdA6?~o38bpqp^0K&A<|U(q*WD-Te_?N5_wbn>;6Bop^+T z3d~jysL-K^K3ACRsO+C<0u>G+8ItwvPbXG1%#K>1W)_qlXtfCKLt^+xCjZ51W^ zuPT@Qk;K(dTed4Vsn->Re(xuk%`%=5Yr9UkqCqFe?r9V znKuhv>PA;f1N!2u3TCdx)-(_0yRF2YrnIH+X|- zyj)K6GHD(ev5=wIsmhQ zxq3xk7Ki0j3pJ8v-p+5J?ch4q!@{yOmjHlrQh4sg#-^2Xfdg$fH@h8nPBqHOgxSwz zp8Hg!+Sl8C`y>K-lkL+guK`H9Lz z^CqdJooN#*qMX90S|;uw_^Jv!o3l&R>SPOFH;unDwuV=?GBZNxr9HoRx^4O0^ond-S%z z-$+bE&ppoBH*3$#guTX&v|fnD!Wb3EGU|6Tty7bz;*!ZTU+!>3a@_}e#w4q?r%h~t zss+5i(chFu&K@qxQ+zBIIl4u;BF(PVo|%{4LZ4?5f~-;16XeejDxcCtK#44b zdEeU^gJKC@IBmh5aFHHlMJ1bh4y;XI?(=;H{a5}r^+dipfr>$9W!VyNvKFqhr3H z)|@#uBOadK5=zAYy#b=>PVIjRbNY=~Vnm>(k`*=FJliF=O=+fGe%dKT4VRM@7IetF=Cq z-@*V8PXAl}yMmK(#(^`PS_?-QdxFe?#Q3n**+yFZnVr|%fn@*t3t46_1G~%hUy2g5 z(81jFY01+2HMKVroJAJiOg1zmwdVC~P*HUt9w;+s%Q2r?v6Yg6I0?iguqdy!=WDj( z=4FSBS@xa)&N*!N`1-XJr*K_0dhVyKx(dd0e@qOhw9YP>2NnI!qzQT1LA#ss z3LWGG6UP(hP7oR@vwW>V@368NLD~Jann1^iSAX0SVu9?5^jPeL6B#K^mIXJJ^BvYC z4P`K(6wCGv>b~Qx`GUQErn^WCJVPfVwAV=(odN@_8}yd%i4s(hqcO~(RJDgJq@NC) z#$FUO(I6`H>4Q@)ts892Sc&7v?=-Q#=odWSXvN@=K^(|=5~Du(dH=^jA(h_wN4II5 z&ynb-^M3GypvPoiltQ7c$tTdQ#Kq@P$$*LxK{SCM&U za~n>b$E(TQQu!T*NKnrR?(=jR6J;kbu$C{vD!;{2rm$`l<91x%8Y#1Fmej zro?y)NC{^;1HBdeHfQoECOLV!`%KQ&JEm2CPlE*!aQX2wUCRij1E4noE3hS&h9k3qJo-3LB)7OwaO28}YS^FC3Yu8;s1axieH5Cp6E#F3F_g8^*osKA*mshp#8@h%NGeKt^$9*cl~?yPy|?}yc~QJy@kpa|+viJ1 z68)`;a_6uI<3z%|be`TMt+dRzTuG!V%MF*h1scZLhCaPvLU`vmQSm>_MGV`DWX|Hk zOu3&_7O(Typf4ku=<*9P$zf9ndRWF+NLOxE=|}6v&+});mVd`x-PpZT9(-P;^Tz*Y z<%NH}fF2qEgTPQ26bu1@00;m8APk_SkEXc#<0F{)mBc$;tK{d@=`}iyk=OL^Er8^A z1MOA%2Q2&p&Yrpi4vQ1&J`qR2%ceWDB4SitZ@cu=b^c0!eZmkv2J-8izqZTCt?>W; z;aDdd`J*&cXQeY~!3bR3-_@>%Yq?T>T~NLu*46&}vH&AmQRA!0)hW+SjMKVDo9Vk9 zUnkTU1yy^6DB^O#!q+eE>su&4XGHEFz?@d%O5yhB9dTg-=bJuYalRTaEdTdVo7PtK zT&jF0&h@b!Vs4|KgTX*V*lOVU_P!$;uyN)CW z1~HFYx*z($P9d*jewf&ip1gmrfjYj3W)!yn&gAI$MQD&p4f3^=q0`A6w00_ftY=g| z3FfHbpcv?SCH-<k|z#Ln}ey;pp^gn=` zrp()+1_)nJeO=&tN80G=+>I5b$;+NQaVSZ{@@ax|UM;!+5&hi@MF6({a0 zE#37!Y5&JoC`Bz;V?WT+Kcu8cwiuB&fR{%O6%uP6#p;wg^kjj};eM?}*%GXEJt4ky z-~PNS<>QA?kSdap#gh~hPWvHuwxsO>vQ#`?Y3{>Tnn!paO|^5 zi0~#$t147$Vnq?(lB&f1FnFi7{{g;vx#CCU`q82Fz&a7sAflS?wOw97K6HFT$=}02 zFQjR;tMi)?-T%SQ%VhKYLnzVU=tkq%CR6G5o_)wp>80D}Kfc-0_t=x?JQch7@$`ki zxYVhziiqmu#PCkjh$$P2rSihwmyNjR{!+tMVg^zkvaou#)hW4ak9xC>3`M${UlM61 zN8%WOtbBAeU3TA3*`|CtN=0|&*gSYl!o@NiEw*-U z=o%NOjv0Rj7J2M8&EDnbD+e0>_WN>d@%3T1*B63LYE1qEvY%8?JjLD=M~If*s}3?S zc#*+g+<6q>0Cpq?`3oCZ+*{UhJpLOD9t@5>W{OY#eK`MGZoI$)X!3GSTOp6n&TiOjuQlK=CZk`8r+;}Ng7t&5QW<)DPT z$KmR?lqio4?R1=kd~)Hi37##&6JQKl`8CeXy(X4s_R;eTl!V^^Th-ACUWxDlTq5 z?7O23E&>f|IGb+I=b%h>zB_I{?2fT$ybZ~XODRhHG+FNWVl|-tEWWgLZMlOFJG-SN z+WOLR)*iV?JHDZKvwHDp^pHi5{M7qT6PLbs2QtLPWQv^8%itTSN$`cxk5A{+Ph8X~ zqO4q`-r%0s`eHhk)txlu&b2xuD!d7{l985PO~Mrqt(Tx<^8|9qm1pD+2!Mj7X}=W@ z7E5x}IwvT=9FU9yc%`T>)TL9Xrn6t-L`nW+_f8cL| z5r7ck{7Ny2+`ji246m1=)KC#RK&lP!{Km^lYY%C|_ktW5NKr>SD6S}uVmo1xMQTUH zfCQ`cCXDId1C<2*uYBLcF2`gp0mf1Z{d|1S_UFQ1<7Q+m#?!s6{XJW{`MkjLfoFAO zkMDNbkrAKHBLMdU!x>quq$*SuBg zXpnYS1Ani#ra##SzZ%i2VKjx5Jnx%!YQd%M{5*86rN~*gAB+i#M6}?(={Z*=ad7R} zo)0DR4dx7dG9*u2^HqcLPc)XLU4L+G>sa40eHcjM*@GW!*!`F`xyr`t(l()h z3e~Ez5DyCrSx#)*l@u4d!UI$-XA9)UZs|gP*j|j&xU67T1K1{pohSYQw_f2gMX(|0 zate^rTU56$cNs~ZwR*LaMlJ68K_Q0_p`wf1q2))vr6nI)JY`toHl)`Q`Qpw&T7<0K zwaMIrD+U=I*{Wz;3e+8a(w1h7Lzae##aAkexoI-Vh)*Dq-Cu02kZhArYt^?Ij;@dE zEQ4&}n(T7u^<6R0j#*~C@llFiYY&Gu38CAdus@oW?1>?j%89%5N@o4-#MRwZTSOQQ zXN3xVN;qe0wLM@4)JENR(dXilq;DlrJVC;U-PW#V&dY4W>vp*&pxM1!7^qL~Fskdu z?3SR&@Z1637C=GCvV{aq$bT+SAFIs$sTGXdhi{*bxP8Suahfh#WG4EHiBfTeMz&wk z7dd6WaP!GCopy`+o-@`gwwjEc$7;wrZ?V(HE9TR1jEZF!-{ukSE)z|4Y zF3O)xsy_3(|4%3Ne4|W$RVaUuOWi#a{)yu~lk2_wes8Z}15VleH}Jm}fZuS(ME$>p zqv{i{`EBy{exdxX6K}5^3_JDT*#AGCG6S)%?y>r8`>QetReiP+LNG~iCQMSS@0=E6 zhUjCt@NVbu3B+d+T*hDLnXYqM$u!P}gi7wmKNrSM(OSiQFVFIWP5h$1`~!51f7xTZ zNeU25`m|qO@Zqm<1(LBoMTTeEQd>yf!q z=45oC{Dd?LS-$+!B=AV>d*>_fH}Wp-KIheaB^0D?d*A6h`gmZeSn&<)CHshqpIS7+bs=n`-jiNUoO{#l*tF7pofAbvK<1 zx`;g*^P?R~9CXF}vG8M@9`n81^Pay)u3&eS>4hwXbM(#Y-RBRC;{@ipFVemLer|W6 z=4jW0Zly7M3y^Z@`GZg5unC807PF5FkAo*3MJ5Tbz&G9*Vv4|`YM zqT`>ea+;v{Bo}Ve^NfpH1Z~kT^T^uW>v~lcUNyh>2yC1qK1}I_82eY_)MZ-;0tzP- zSWj-Gf2_hfE~-5c{M5iMOorJe*|)Vgg= zUiAmDTDk#w&NW}9LdsE;z*WYH;#Tryig}O91nra^P)NR&3`#cPswhj8Xk$G{hsXsz znx7{9I}(P;*62vw4jSIf2UPme{aH&x2=5>|i2#Ic+h8lfZFsO0<2YC3Tt9a+gyqE9gQGuq4Ia+^%(+}U?FHU#! zZCm$Q1IqkO3KcK4Z2r0J;LCS>Z_576Zczq%giFcYC&4JmmI2uU4wgv_%yd7}DoxaQdIUF7d37uz(N zSFayF%^V87=2ym2R%j)jb9<)$Bk50> zW}Ve8*B7yZNhfJvyRVJveZENb;%k6k1o2U1L?kWuCE*du#-q6gFl)J$Ww-poX=y7Z z6#A02`>uxPw?pNOoZjx!G?=1$#y63hXCdUbf~NtwO54`~aGsYNAouoAf6!i>(9IbE ze+;XjuJa|zqK78K*^&R4KEU1qw(ZI^|4z}GtYjq~zlcQYApmp%qmB5xCTkL0^#fy3 zvnnb*AV-E0rar|gb(g#u%j^%y6e(6fp+!P@^Cbr&((ISA{YFJ zDJc88DW%1t>Twx`ujcQLIb}`U({deFv{EMLLCE7xYDvvUVD83yI55~H^arblR9(n3 z>E4Yr6O0ef1MV>Ig&-es9XA+xp3nr#Q;T7z8ue3k#6pu;_XOTlP|BVfevShy7#f~# zY0o}<3z1SfV0_bm=#|3hopO$b6unTJ8Aa8dSdNj)S)Yo9J9L9wz5venQ9Dc}wJjR@Uk+qx} zow~~{Ie%ZI)6y#lw^rS@iyf`=fN%zMl=RFlgEh1;?XW7c=!SN#x9X_`ee{6xGMwDsKaJum zghys9ul!|h%Fu6qKMv1EN>^*j(@oL2AxH0!43OY4afN{v3C)J*iVBU#gN^OqRD-kb zERkc0rZB)WOQZxi?U9fqZtF8u{rU&v>bnuP!eSg~sd@!$bp1@Yk}<98l(k>lGqxY1^yE-@ z+`i=d;ncRN57>LAOM#BmxCW?PLwk^AKNfi9`f=Q>vGN7v4H!K%bCaAJQZJhazElYW z?~?FN{3$dM86x-&a=6sny}(J3@?mVEyxO5!|GMoaI*J;=&n>FJNOGQ2Ud-3VwwUkY zz=muemFIvCUI!vYk3plktCvrR?CaVbg%!W8q5O=?%4GaR3EdHP*5syAEDkqOop@?D zJLw5oB!&6uV4L0Sw#W*#X5VmZo_|_PxRbJ^8Wn$exR10o0h&{VmI_{2Ul^9Pc#jV$F{npK#|FHq8_&WsHIC+oPCv72-n?CgUeKOEH+q^Ht|*&uXMM*p_3#Z&80J6(NS7;pg%Es-FV?_p&MQ|1SU2iWCHE zpLZkUYKE?AOrm~wRe1h4ob$g|%=^Et_~pN<7U>`V`y;<86%POPqCIPn-eg;@27f^P z>8gk|{02V{aLEnh1CzqNBJ@=4KfQmFe*bSt1wUEAt|$~1P{e8i zit%6L+bX?VzCb_~!&ZkCVJq%xDWP{*#DV9p7GgFa`RY3 z_=G3=_4$y~eJGxPUK>^sI`NOmPJ))&Hpi>;MwFnO_Zu~`Fh5!_>a)`C)x4==n1$sX7Uo!JW8*VbjrOzN(>yez1f_Z@>1;8|(&Zx`ii zO-M^GV!Qukubl_bSCCN>34xbS z5NtwpqPLPF|MY(p^x7Ru3{lR6v8D}P*B(wjP%k=ld_{e%-bQvaL#nmizUtG0ziw>5 z8NF7gw`$t+Nb1ZEd?Y~widKrh`L&2x?z;J--b?=VXoo1g4W5egAJhRn0Or!G_TobZGRQZ93ih<#>T z-r(-}4%AzfiIWgw%=k}lb*7lgA-L1}tCo_Apj<>Icgi%;{LPDFM|tu4lBnPeu`(I)t$GcX2lTJ^%n#76)XNF6yU!`?%VONt z%t5)wi?<_L8oh>PS?m+GpNF$PKCZ+HHdN9`lUiA835s3PIl5?T=FELPgaWjW&(rcV zd9iFcI0R+`L*190@i~C7cr}x-!|MKPC){da1NC>GF{^lcV%F-daCIgsY_tkKn&EKa z#=Ml+;>l?JS1;EdiyHN@`i{wJf`;yU3_TEW0|D3c9GuJR@4t-UHQ_?)TE@SWac+h3 zIkiG+-V8O(#_D#Ll}o_OV!a7v(Pp2dvC@?QavFX^QY;nLx0-mg^}w|#mjAb zbn|V2^xACH>ru{D+=Ail9^N8N|F@-S<@`Ab=aC#&tKK6dNh$nQXn<)T<+Q^v)Eb?v zw)c)I#k#41;e%ws*OtAC=w;@nmDA;FOmte>v4FYS%pc^ItH~$@+lIUTyW=iBIqDA4 zqY)`f`F(3UfhDgnq-3?G2;TOdzOHhS-TQic6yPXd4TJ*l3KY9PFHoIMtKyC7?&Z^? zB_u204vEm@%IDk!r|ou=(bM{#CZeU`e@^gW>k~~YKb@24jnF)D4`1os!oY}w;0FlG zku(q=%{0$?BMax2ng@Fp;$EuW`&WE0%J^>5&_qV(y%bmfgt|4Ih+nf~>z+(LNq{NJfB5aczQOvd7_E}RB6O0)EV0fbCyx;1L+AD}vlkmS;dUaUOcYGNDLda(oO zm9t%aBJ~^vvQKBf_}Q8MeGM0=M>Aso7B+lMhm&Txs|`L8yujnC&GMANulR|0m9LVW zq;OPQ0AtOJKdJ0FF_f&@#}8Viq}_o`=79%{T6k?OXI=~D$hc?4IE@$wN?PR-a7dGY zOZkfa8!|oMDI90e8v~30u#!rhMhw?B_2#b}k-g^pIfntbw5l$5kJX$i^vNG89~Dj) zojZX#(j5>a@L-=+7~`{G34^DvPmA3T^>CEKD)40p(nr)A)HS$O>6V>)2(Pd&)D62>{u@2Nx*E56uo3-!{_tq z>b8swF6R555+P7M0M=wi#P0b9mE%*kZshP#1T3{&)u!4+82&WhDCRSET|2 zY$lXq3dJoBOr^dsg1U7MUKLyEJM#qjvk3DIIb>wH-mB5@31jjJmpaQ_q6N1lmAM8V z_4)lh32r+NUvof9tX=I2ZUNPxqTWJC?owOrYm0Fw?PW5chzJZ^F5=ke{Sc)#D~j)} zs08~jcou;V+{v5XRcwEE#UGehV&788faj^eEg{{pBJg%a#ZPgm<3u>kP439B)NIm| zJ`p`eRZ%JJG+eSMd)1q?B~G6%Qiiay;Cm4t|0HTW<@%%h@0N1N9TZ>x32V3Ps&FBx zG;>i&xdbIn^e*$v^1SQ&JbvJe=cEEq?RQJndpWB1?u2E~zp4YA+58dKmWHRnH2;fmal;v@_P-^2qhxanMji^S%-Lu zy%**#gOR99b1>H#FX|hgIVyz_;%Cy-E!0Sz?yr7>6x28rmb5SECPI^_4QnYoR{69B zEnRO4_Z_pc9rH5!f|NY^a#(6E`V;7L_?TT&jhw=T%Gna49G+g+!l>&Z8u@8?cN5cm z@}}=(byY!v`1Y*C)mV28lKO6baKb6A;deF7A~hj}DTu~b?`k_6-YF{j z_E=sa=Ve|NM3 zih@RWE1!FY&@o+mt~pW%v=t!OZjDDj{vN1!Zq|F(=ciM9I@8&(NySHI8X@pVDXIoj zW^bn{HE+;_El5;jm+On5~asddZE zmts=2iv$DTOp=xmtG9GxyBZ2#-PW31gsp5^s9Qr^T$ zpimM%7TPuUTfvMsECS+Iv61XO0nY=-?3#U;YNhKrV@X(L9xXC>F_yN^Skz5Xd4*cyTn$N1yk!fiyA0BhZ&~*re&-OagnnQ%;So`>wQ!~S(EB1q9ju;+{=cb|Zju9|8 z1{5qv$<1E$S>OgX`5!?DE*@+L@b1R4w$L)4)-#l9pJ4Eiz?sM@@sw`&Lg_q~200*4 zlOVDxCa8I1*#Y)?&!=1S*6v=(NVoZgA1sFUH<`X`U4tL48?c7l4o-$Uo%p!RmeFH> z7@2(H)(%feNM)&|uua@6vwQC`uXb(VUKkDOEzmlO6ceH8g5p~lZ1ymp`)%1lvH7ls zNr3uJDRV@^zw+eX)-SrhGOa<3fu14_(ad#o1)Pou9FCCi(IrJFJlas?RQ7Th!((Ns z4L>_Rrhosfj)hvXXujFuy`s!&X#umlfl$lB0ZoyR3BP6i)7NB0`g zvH%)WyLq9(T7{M@BelC8>M%|`dRyD3{+c|pa>rJPNq%KnkOzu5(l%@(f#yGrLH^T_ z>GexH2ge|pb~5^D01l8RK^qk)x>?}U^=mc=VlH;EZ$bh z=o?_?X0N8?W|2do+Q76_xn4Y92*vdFFhX{R;o~T%JCIofgq62Q^aV#a%&q*9ExDft zCJO^>0!hP+3zfnMf`FOT$3kVc2GA(KR#h46iZn_c6`L@c&(;l^N%@FoVk}mZDZ`7? z2HtU(-+QL0MIN^BOkxK7SVn@#yVo;>>POr90Rex9OUG*o4oXDnr6lmpx^bB_Y^&EN zR?^Ya_fy18?>o1!ggk=IO!P9u1tnWlgIzC6wl9K)tQihq=|ic@MXG~VC7lN`-Rl;j zsM*t$-*61dMjA%L?85v(kN+C2;YJ^|?2_M*&FYO9kTd3y5)=y-l6p{}61=^@#uo*R z^qqrTUQ!xkK(LpN;v4z+nlMueip0R7lo9LWF!_M^=YcA47S?iEhyd7%-3%{Dh!-dNjn;Ni)9~r&Uyek%lb* zt7g>egkXL<>RJs%B?76*kPQTyD)9v#Dup81W>HD1Nbx2<Hm5w?(iT^;N|yook)SpBsjK#SQ*Rb}-m? zIF^wFAU3ipqxQj^Q9q##X0`8sXZ6BKt8|`!h2-3BF0V2L4wmwmHCLV4*7&^J9M)7L zWhv4s5Dv|{Z5xrKtnfd)RI3SYJAhR#KapCLh(Q)|)GpwK)i5O5s&MBOnf z%@YM|w2N9TV7IU2C=sRxkxm5;>xvV!X3%TVQh$_lsF(YlIOjzYwOK=T1lnw@j3ZEF zuIya_?7FK;s>NSy6s!$}yjZmmDpN-eoQ{;w*z1+VHwzWqf+Eoh#bV#>qdTqY zF(J_$=7AsZQXM}%bdhds5mYjw5bu5*fEbpEfF%#MmDa^Oh(pZPuPJ*yum@cOnZ0v7 zBvkl<6w@Uv9SBO%4w(=GVLiV8N!Ly*ZOf>n21PQnWe)7^SnJE^uzj`!R=|`WsQkoX zgZj71)mbtlP0D~8{j2Lp<>_wbGx55M9Xz+t#HhVBT=QE;r^>o?t2kQT6b0zYcM2St#YDQP>bt;2R*!50>M)aU0;IX z*@uo!h+9cZScAvXJQ2=scBaL`Pif{d6nQ*EH^2Y`ssP*C>6F6} zXi{Da1L8jaAumfv;n~z31gPAv@{@i71l6h_icl0tfz}${gb$uOhz@|Bs-6GdTs}li zL%RF6QPNfod4D^7;6mmI=4iX#7^%aQssC9H`n#I7NR?v4u;6x4M$Z2V4^<+X7)ij@ zcF9~mVr^TfOapX+Eb$e3$?A!P9qc^c-;)Kp??{E}>D6<|5=u@4FmmKhp}-c?s-HC) zO$PvhdxjR*JhXSNfg<6J4q#dghLdb08BrqLF!gy9=SIQ5*+8SARUtHeRlc1oU^h+6 zJB+iYJ}HYFbF(TB+||+9>Ug~N8u>?|#v)prlHT(~A+=!BC)Qj+b;h3w|MW`*pWygmXuSB)^3mV%O^ z)ilP;75)M5)+`f2UBxmP+7en5Qd_fQZQXQ*M^o4tJb9@O%t;P)7`%jXSL&d`0b77` zZF!Oka(nX3(Mr?Ic!~?>RqZn)GwW?H=P5;~d8^_v$aVxgb+daOb<`^Yzty{qvRr>Bis82^`cp9OlTX$8w?S)QysEn9_ zDX-oDIL$D--&Wu&Za3eGLu;(Aw-lr8orLEYmjRd0f_sF`_A^IHtlh6-oQkqC;+>Hg9=Wc{OIl`)G-7832?5HO7FU3@9+>Rnq#e&DXMVb<>2abz}Q!{-kLhNVBa zg3@iMLwZaZ=c?*5Ix#Zt+E69o9P#%l`Cy0fK@7@*6Qc7$I>cnJL9JXLk_-l5y63AP zd4mh$Mma?bg*epX-Um$mnO$!?l6k~XgK2R&U2{dDE}nlcPlnlr&%WuaLKBrO7Cw0R zlNWcDV9X<~%K7NG+X+~?=H%Bd%SCj1PDczZqfqn!9+8vms+mWP{g&JL(X~uHV;J$#jU`bS{pG zdGQ~MX^F|vLohb85)LqDquUy*tTBhNs6e760}XBU0N9ezGV6t=*_azkt`8mX-vgRC z83c^n&Sn}JEW#XpZUqP>HL7U6MYmtG?WpwB6qj&fIyl&fIeZyM)fO0!Dsuq)&jR;O zPDpU{1?!DeMrBKyAit}FtcOOa!9@8eex|rx%jg{*+NIgoAW|e(ZyhzJsr`Is`W}ZR zhr+YwQA)+t{>^+)^mbnnOYCBqR^ykyH#8v37U~fQlSkZFVrP>4TXa0)cK~VYJNKAS zF9w#TFC~XUm-1up#MKD)q|~Zy$zFQI-)j#x-uuG%F<6x3kFr%B-DlxACES?clI0{W z<7INHLrn;vS5xH@enPO43BI5FM8&rjS{z30pnINJ_yQv&0|M_H4%Ig%UHqA)frHUEeGjARueKxcPuqN%SMC*x3PP}Q)@HLW zUM2t7c(0PnTANvo7|@ZU&p3-cZb0gYj&AC5`E(jFOrz^}AL9IVz2>mx1fx9r5~EmooE2fQTI^}a}ku&3UKG~0?-o38cBW`95F#*qql zzdCoBN(jgCHSN4ho%)^VKfp@lx_(9`U9gN(s{-6QbZnlDzu;r!V0p*&_b*BFA#P0N zpAsp%D{1-*h>qdIE@21aGGav6x|ErL_`BwE2J5UJ))RQJF}m$pI3&4C@%mcCfIuo1 zTikvGXI3%totc^vAt%r~sVxeRoafsBb6-UKwnJ{ob(qZvB#^-2hDJSK=eB0i`XXAM z<6@f0-P>me0%9(Ce`pIi$fVa+_T9jV`@pesgJTm<-yLpr-MaWO*XgyT*34E$h`=7( znv0a!B&A;+bm9jXN%-1YthvAd$=NtJYi5?O7ABbRi92UEMTCTk+*(Lpg(KZQ9}*_n zgUWxdlW`*0<83ZmAG7~IkJsO` zcSosDUr9MF-5#`dB_+JHQ})h?MPL?U`r|;&g2>%SQ&>j}#Z5 z{S5wd_d-XQNDzz+IsGh3CW%Kvk$lZg?pN($^Z#}3M8phjMs9y_PY9K4a2xnIM*q9> zas38K4%IN@&n=0S(;t~`2qQVil6dBN$=%1g`2OF4OkNA!7D*HiNWk;NT1emx--UNO zp7WN{Nj=QIG-skuENM$FmW02U9=jjX-Q-IC9t&VlI9*Hadzn8DL9TZ8X1DXE?*wd(v&cD6G@1G?~&Y%@1SFFGEU(1*7EL4sY!4oQs9!@rP4#fK)qKFeJ#p;=-M6uU=Fl# zK_^mFpGGA1FuQmL-*4nY-bRuAh6@u0Oyi{oV|Tc$shWy6y7n?i{(e2)X_YzP%N6;e z={4oEnhLKASh3O`r{FP>iY0xGbv@Q!6VnnH;=kXbr!23KE$zWCJ4(AIDvp5kSTUyy zj-gG9-wCI`coxURbKcK46*0Q=)J>x`oS%_A_a$X!Y^FwYXtgMRXXyqtccPBYBuvm^ z-#qvZaI?jLpX76BCG8R#=?!jz2vD4;o^1)v{1A}zM^PkXPXEyx!?L%2g4WE9*gMO3 zTi!KmjXq$opG?rHfDYOMb#^&6zV)iA$k*eSS^IXYB?QEr4>`D~yeGKD;bba{y5;re zG5JLK9d1!I(tohE(N>rio>}N}t)Tp_8z_Txy;^Ocn^Qlpr!Cm z`jOs0mw&&2LXk%(L9A98(lzB~n72q^I#Kd*KgxF=1tKMY)c z`s9d1#l(qLE!Hii_YuB@x`0Sw+{@6w2E2Km(DJuk z4X%Ury>Nq|bzhMCvp8^*LeD`OQ(lVc$$=_o^YG!F;j zQZJLKBse_2v)9|*Q4%~XTOhS8wwuT>5u|+y(a;lYAcW-f#_%NspwDZ=@Fn)CuQ#|( zT{<aNJ8#ptWr-^9VbeX$A;&y9h`mUflu%UK;-1ZeYNIf+buHr^<6lA0MQ zg~9vIQU!(PbtE`Y5pP4u5Cztm!V*puBez6x3^eQ;2hrKSZA$NWzjp(#3jpq^wXp5gd6NeqIef@E;_A_{le6l|iA4Pm}Tj_Es_x5R* z8>&rJ6R=;5={eJzhWC!N-TE5r7=w$cG_82rBie9Kq-GH>4N{F#_cS=OKLt%n+tVLw z=jv8ll|;*G-XjuA7IN2?$6wnvQmSSiA!)Xcq-3d4+9uEs;E)3F-@8BXf776hkiGH; zPmQK&UJMDuilY%$sLJ=a3bSd9E8APg)tYm;=y1YiW!NdLr%kI=96lWS;O7*`t;v)D zx4Pq=`B*J5{6;Mr;nGy^UYG*4Rcm!nEqLls>Sl|3=34myRMLR-W+nZ8N?*R<8*;~W z9Fg+(F6wqg37DXtM0RK5z{r=yx zo$g(hsK&k=pW>}(Juh}%jEQ26B*o^6FkH`KhVx55thV|fz>2j?Nq@7a^M&I3S8=^+ zgxI0KdWz^sw?^|yo}e819WQa`ODu* z3fD`_DL)T?JA?x@So!*Jz;Ax+W2$=v%C>kP2tl;$EE?tg1CGx1$qRfz$LWOl^-@7$ zlJik?%y(e)e#KYAe504@c9pk$SEbA?>$xXoP^p(H`9>WohtN5%Hwr(BBKDv(uqa{* zQYnqP^bLNhnBd<6mC|r*(`2|w+MnHSB46}m{E_KZ9m3%ix*_kubnT^ptr|!r>&XwX z42TMktiLmL{;`vkum8Gpd;zJt*x+L_y41Fs(QAx$k=bGFVRz)C0m$P*wrf|j3qe==l*0ZP;}6O7o~q5*3)`cBD7;Y3WpMVL=cRg6sLr6-U&I@;Ladb zaF&HoA;uB}Cw^a?Mr7Y;JW~^!K|*wm=>v^nOV7{!7Wh$c_~L}B=K({=du3&f3k*0y zx(0prbf~*ZV=|J=free3kTkhx=)NDFrYa!=`cYx^HP1Nk)1T6xEp1%Cw=JxM#`3q# zvFr~2BXxe`_U{Yg$+m`f{sF}I_N4;$4*Pw&hJA%954~jdYC$aV9P6@Ab!LB{qX!`9 z<=;QL(GNJszS@YKeK2d#`?;eVizqB?e10l$cV%7TjQ*nDh?#HN&N1ut8{dQ;tzu2J z2TW?gOg7q0#WrUe;ueuQtSx(auoN^@=)E=M5NBduw5V;Sjp(4LK%e^=%n{r*{E^X{y z%tfKZhO=cX#ho4#|30V&rbW%H6vwt+|ZqT$Qjto8qcrt^SG>VMq-WeSK2ii#VY zxN(oH0QU@MYG$}cX=+;9WT`mQQgc)Z4}%0h?84Clx=P@t1pdt2x(7uMU@P?aPo?LB7`dhO7qP3YOHhz+g1A&)oVob9{9 z^hA8!^z*Hwnm;*Tuh@QL2fYbnHvJm$V;{g|I$4avF$w|){^scyXvN}hJ)54tqt2(u z*kycU;a*qX%W=9tdH1l7G?fr3hR_XHRF(ZvV<=%WPbiVr!}A^nx58jl!Zkf`^n4Lf zL2*wQlQ0Qt zbr^|^$a#Xg=<0J^&@^yc+}9292M3OwwYZddq`9T)@XtW2^V{n#2QSe$v8(`uP4GrF zD@NB>=iAbD%Ut$}gMTnZ90Wg#^g9m{C`(z}bb-Vk-;dKPVzvx@J8b{R=9uLb$c9|X z1={C49;(=JQ+Z6OE??!c-73Roc6xF@)U5Glpvu@SZ=!&IqXFf9FBIWyc%aj)a?ic; z9C%2_oSC8Gec`)y*?ZPO<~QBWGrl%6nq)~C;yZ_|cSD%{IQ2c!#9@Fn{fwxxSkupE za;y7hSd>23`eUPD#Lt}*o7mloUcCloG}TRti&)1ojja#@vF#p;W^otuT0cQ`g%IXP z$aZsNTJBg2(0goks|9fNGiO;&`yahMQiAySlN^)}XJaJiC7!Zlt(=Gq(p>#07J3j)ngom^ zaJhDeE@L2Y%&SwWJ+^FHe? zftz@On00|XrH!n~i~-3tEw|+&$onLU*j)jCqTC|WO0^5x)gH`#wLuNn{fV&!tqv7g zsg3_E#V3j8&0I&EI+_`Y6|;68h5TT@QXxrK4frJra@OTJUmp$Nq_Jz=ZCid>&Y-$&Dp{Qt&RP2Fh7}Ph5>6QyB+&I)01hV^EORGg+ z`+|`Lq8t9XqcBX?xAzKsP2R<~)*E9*yLuMW7}8Da^_P?vbnBLA{Nc9;Csjm{zbLJu zd?$aH>R1?7eRuai;RN_mdwL21XjAlUkM&R-i9c~?F+?g3@CjV4>6m_>NGFy)I4c$< zJKRulZRg|xk~PL>+Zv|GY8_05W>wxD2c(xg@p5{L>(o)4RjnJc4RH$ z;%J2UWA?6cv=iOb3=|L5Na>vW3z7j)hluF;@6(EHRWLh z9sd>pO{0_l0bOoi6d!(E9I6z0{hG6DfDqT~n^v2uMWEWp(&wu?*bLVGT~8&v>6hQn zAPiQH|2dT;3x&`pukmgZYxmE|`Qfi6bVLubn|`AkrskN0?;Knt|8IH)z3l2oV~^Yu zcT*Pmx$4pmvGL%^Uki0QW|u#;Qc7y}@9SbUmftxl1R4d3_lEZ3rV_COMd4#V&lQCw zK>i+LxdW2ioLFgvzc@{Z++9{lvAt&1_Y$Z}nbLZ?k@91q>AfTNyK)>DP|{Bg5g$?_ z3IT1zpvrNb1uu(3p!iICysT&)&`KaA&STN)%5qRz|LXwRJxkarP=^jG-z`BIH4WYVYQWqt z^SuYreD&$bisF3G*oWmFiXs+ml@RutRx<69uilD%tggKW4^@wc~= z9T)fZCh1K%OSG)t2Zd&a5^$kzvA^pNSUEi(SJ9t2Pv}m|_W@ziU1~Ii45tZkzsY|C zH(4#1395B{F{cT0w_n&qI;7HwXP7HEjxMj^^e3}kfxg7IT#Hz+tXu?% z>b-)|1^J=5;fKzLvyrKn)cv7qo5YQNIXFJ~q!wc9h7FaO{cB5+XDfFzF51io)|+1P zN11tX)|5GZw0{Qa|FL5qR9cQkhFG02#>!T)6OZsfirv43)CY%-^>#r_U&m4t{r~j^ zXTR&I>3+WZRYS~vuRWB4{{Xv=!h(d)2nO)@dWj_qfPX7(0COWxl^kb0|B^x3qu4##rtYJ+=kq9$J6=>3~IOzeE`87>Ys-P|%zvsiPcKyA})aI)@ z+o6$DiYI>$lMv?MJ$-<5#ikv`?1Pu{~xf=atP5 zE2{!=vNzu=+8sDme7$*VL($z`@os29b+FBHAL^XxlG zIs|{}rtWABg)i&E45kOxzOpMJH7d2^wMeMTB%)@!I%EZHlMF7;L#=M_jkdl zSFFh4;KCBF^cPvDW@&o6b9T0v za0_@&%8{o?F11tih9?z->U{I!Z<&g*g4p}Zp{)bQK*`SlOI?@~tuq`K%~B%SYsv*& z(UA3#e-x1nahwgMXIg|jaKYKsm^^AGf;zpq66AWm(q(h|YX4weIsl3Z9Et0sdT+wkERfO$n}zUgaH!Fqek4}9rz&V(0*j0Sa^C}COY^4R>)wZ zS~p~)9S$9Uiq^2dTpQ;=2FP>DOa*SwEeM4v&Ggf^R?oeF*$;|NV+#_`f(zmwTBpTs zHWP#q^%7CV1#cMNNeLZOe(w7;jw4y5iFpVtde0=W8jTT$){YI@lB515I2<8h$JR~z#Drri;X$l!;zs->v=`LX6 z!AnbF8i$LZ?{WI1+3D7^VTeRG%G9Njly-E93OKvSyPG{TF;-igtd@qMS|_K|uq1L{ z)c-uC=X6A}AVfciSFhNQLibs#8*xA^w==Kubp^Fq0*YpIcfA7z5>^l{7Ize=jc#f8 zZYmOph0S<7JDPsU8flyfmT-4jE`dN!wz4C7z@mY*s1rVzZXE4_0C)4U)43}1s7$2o zaOoHx4ocFE)Ez8$`(nX;RsA))KFyRVVK^SI8UuAM4djAqZ=8*_Kq1Js!?f@9niMc+ z3K%zPP>{ELJf#o}JZ|7CX-^ce6v1f5PeSG1cm-v+B`%Cg+EW_-n0+4fLap4}#@N;x z{M0_1Pgp$gg_-L(Gmi)LzwRR?VG#HIcAfYS&{dW6&{md&_JtRlO&3y;1Hkj^Oe)4Q zbCMbVW?rMHIo(3vr?`OWnYj`Hltn;9jKl#+Ik*E}{-57vaG13WI;otoz@B%)ToNz0 zhgLNH-I>6`s*rMpegC~`K!7z*T8Sp=ty?dk<;eLIlMqN z*^uj&>l;rse+F*pCgvI+FgW-$U9P8=8QXRRuj_h5g4)6Ylo~slwWFn%U$Iy;8`IPM zSIfPE+n8fi#w3o2m^X68UCr~xMa7|c$RQr$OGKmXA&mhK`y%LfGUi3E{u7LOW&Q$8 z+#6(HqpY9C%}jdiJ!caja7`^?z35`HDzS}(WzeCLSQl<)g}=7`+gPqycU)Z2!Wu~D zPzS+fmKU~d>Z}uC+K<@#KhK05>D|udrZAECvxXRShRcQuN6yR`=u(aDyEQy7fjjFS z1k*LyC;_h@cPN$+4=9iO5>4ROl^Rf&`K{ryZof-x)?5!F(3}q?+kAxMldtN-dF5-a z8jcRNoWK`M?q*hV4S0uVo$o#k3q}9}ktm%8(=9H0Wd05TMck~P_y?``Hm-)Xjz)Ua z0E7e27{rnh1I{^(7Alp@=(>lnfe$`@3)jo)2=d=_>v5m#w%KJ()<1Jz>)Ws z#4Bok7|9!P=sy1j9N&@aKYv{gEF>zAex#y3q9mTEHv@Zo%?cmm%YbLD+zH+nyhEa& z^6cUS!q(*202~u*!3LDl)YA2WJ>!5;SE`yxX4I{c8~cH&sFM!ZjKm8L>J`J~5YKQB z^FSyRr0{OkT35N0NZE7AoR`HNh^qv}JN4-;qx59=mJbqA>H)&*BxTiSC6+glZpYPY zp$KVdiJf1%y&YLO2%2sAzR&1(dxLg7KIwh0LCeO(nOT!qnfQ9=BzwvNmTDS=FZHsZ z0*-TN0BS3juM!1~2VlF;_iG?>yJIlc;?DLYW+wGGpEB+uLx;INDp7(E{P3uJNhg?l zVKRzKLe!6#`@>cs;hEqTbqiQtT3MEQ&zqbaf{p>PgdPyDXA{jgpuh(tY87iR45vZb z{w0FGMuXdMX|=GHU7J>`0a=rZJ?QE;hTy4O4{Q4hLp(bEFXhZxOTiAJi-RU50OtyV zGn;Ap?vpJ~=36^)k&%TdSE6W;lD=kw$+!%JQ5%N@Cd0W3-c=EVds#rg2vb>mnNzkhpWIT8VO2qgVns>UVbO)KHB&eTSAvS zS(eagnOHBs8PS`=3z-9+#g-1{D$at*ppooz**}xJtNzcLJQ^~HD>rb=5dAQKc6V)@^AD9n!)Ai(p{iCI|tlEfS&PB(oZ0+aotQ2XIAwy$mwBv zU?pg%6k1nmLxYh*GXx*S&o&2o-uG@}j<%;pYIBZwTLC0P;q-ByxV6U7-l4`ivhycD zYCTH3RZ;iFuR?Kp(UcDl(*-~0qscpzbm7agKr?kkrc|Qw1b?`R^=KesCoQhQwHvb||iN;1#dL88e0@FwQ zpLO>_MtB~GeLuVl=Phz(hS!QrFuuaAN7r^VE^OW*i)$gN4aNhl`2YFzg(5S3?xM(M zs=U$;A5|4&&A(ajPLj0n9I*8%sC&0=Ci@opjq%9%VheKpbyJA*Q`b|g21@(SeLJVh zo3Fm>6Obx&krsPuZF>LPl=s}J2*A&)?mJ~0*EX;aSVYUe2^62dqb0iZR_`PuEjhjP zxwG40KSPhy!|}p|%k?62|9gQ$;Ga`xe>Nlk@zwi<3&Mx2c`Zh(wcw73eE6VG*osD} z=jA+Png}CKLzqH_iI8E90EWD2HIF{~ZTX4l1tNf3t`Ur#i-ab(>wth>XuSGj=g4E@ zfs^;nug;{%UJoQ)_jY`51QXW$x%m;wQTWcWg@o(-OX|pTgbV+tj_DKO14J(O++jyK zeb@sJO_5@z1+M8*tO0f591hA3tkEC;A2?ygNcMlYgsn+m>aDMKnWG@yY_09djb6W0 zv4@|OICg{E?3o55|CXbp;VrWP+rjidI%@L@Z;zVGj)Or1UARC&?bkx_&2y%;5DY~| z&e}`TP6}pc+4VnF&qVTbu9^d|QA1qV?#-JA$w*diCzwFBO02Ru>&rj5St94Y2t0tw zCA9`ZkG4~+$VLE4&kFMCnESnAsUDw}8Oh=x0o9=Tl2@IYI`Zl6kW&#^4~;4B-*<@w zPm*?$JLFmOn|IW3y-5c0^U%6;XuuAc8OD)zC}fMy>B0g-P5S#plt+uI2J(cww;flN3>##K5jCEk{Ak6PnvXhI7%ML4niI)1n@LCo@e*#5dBS2-7~_y_ymWT7jp zvk&99)xOskxsS-|P#*sO{^{htPe)b7nv#>}MXJ_|W9WWidb`kTk5g!PoTgT)q=%+H zGDMmd-P}E2%f|9Jpv=Xs1Y~9$%>A5}zhGF|eZnsQgINdM&GS-oGMcn}5yqTBg$jO7Nf4VmR?$l<)tiSC=MO$y zWILR8?p-;m3MU*jvi8y#$0~l;FboY;#{9MW4>0N+NJ{F*(dUye`6LjeGNhz`sfG2m zH8wP4q96;eupf@Xh%8Ux*8Ta8IPhnbPh^RfzWFJc-KeKagu(p`?v*F>x8^Pb4^p1g z>pLkf>caNKN8i(iEf@j4LPOS8nfkGd19tlX3oV+!o*$coqz@=JU^wo>a!mRQ+A6L2 zqP1)**wMXeMiIUx_g;K>f3Us7y-6RQ@q9pF;HP`M&M@OYAOWWQ?wC21H&XmTc6)=J zAMBOvEgzk=Bi(wvz<+>3P~Q(#aFRJ3AwEW+vN0HNE7A1T#b#+w#+K`uT+mGB$1w(j(8pu|1-6|%~y=ZU1Gd}#9`Fm4WRp4yWQUf3ixObT#12@ z1IjziJsBqo;oHHKNk&$t1zdA*aMvD2Su`e9kFL8Gd1ydf?X81j#N@;b!*}MO@5TH`DCKS#kR%4L8tx<%ww(CHM2od%m0Inph?AiVk1S$5tj-UD|q8^+Rbx zvG>-YFf|eIV*Y4kUv!0*cL!u;yWMc)<_Y?Gkh`hnU%ty;hddqYc$`&*aJ^YF7kj$< zM!)s$HBYg?kkjwb_P8R)k#p8$D26J~utq0u+?&5FTJJagfe-Jk#eGuicy0#q3|(89 zQbSQnQtJC4|GcT2;FBAex2@`Swbfx1=9!eyWHbcyAPk5U$Tr|KLKa*n<6M2wKB6pD zK9LGt;@Seds1?#?;Va^q0RW_m_6bGS-pJ1V8G8&4fEbfU!;R+=e1aLuG}XK+JKay* zA&R6F>?WIUSwGe+f+pq}!hTbCAX~Y;1 z$AC^-s-f+mkLm!j=?JNfXFA3qk8K8uZ}u8CnClz<2Mo$Ot#r!&8?^vANc>W~nBi7S zB+L}arhp6X@9eGRAARSXJGLY`uUF7mu@Kv_SP5l7LI2)1_g4 za*-pL_hva}mKDas@;kau*Wd{C+8}A|XIPh%<%8)aXgPJ6bdOn0ti6{AngZb_%V4H) z;uqNdfy6UEq}%=YnSpOzJi@8=Q6X}d_Nbu;bO90dUT-)zL-SC#>}Nf_A_hekh-+mh=Y>Lzv+1zjVvd-bpu?srX9MveFyb zWy%_wdv9#O`IHwSY9Hmz&d6zv{@5Z>^g@^}t(jpe(N~pAy$)tMPQU%c0GO+^5AQ@< z8Q%9)>T=&{692+X{zBC3P(>{8$}D~ z_<5oHVmfS!)y;J9x>mTN)i?2PV4xP12 ze)cRykNyRd90M$lfPT7!Wtuu0N+-b%!5>c_ffFa7ewwdHvWOY{r#{(czA)^W6EAXS zcVw|N_3WUycQqcCI=nh)GqESo&NWv38RqF}hrwPrG7BV7$KW6jdJieHio^SiH?(Xd zj@KL>hE7WC$?7))kuWbJZ`4O?{pDX0tUZywaNUC{($Humo#!gPgj?^G;jviQTv zFWG*@{2et8=%v#MgJ zq}*&O_evXE?`s!>yp@-Bf!0+b%X|zr@!n-Nu|e)pj_j4}FRQryvPXnwTTMjkMVfTO zxix9tE@qRc+b^HbsSz&aZe1HaZtp$T^nSnOGh1&}xO7a&Q*dL$E16g*_6jWiKn;Ze zqu+Q`{v>YpVYJi89${;3Utvth-}jQ+t0FbCTL;?4L;>CN%p~jo0P|yuPTJNH6^qjk zbuxzi%g#7IuljD~&@^Rc&cgvi;Om7z*T7(P zoX6u-la5;Jy|^2a5Kg)%Q6XJ4tCA5>lGH;Z0^vS~0~Bv&P0H7A>w5yuajK-5gKdOa z9X7%zPG1vH%Y!1R3GLjt=H7SUG2gp6)X4G)g)V{T-(DzMy^JT-EabwEB~38JE!BIPJBD_zy@dI+!c{$!Pamc-UUy^SvI!^q^gBPbVIM zi5N0#Y~xMyx7Y zM^)!1r#MGAACWC%vuJx&$85swDI#QU_h^!3oX!e5uxDLN#z5i~M?ZZ>Zg#|uud?x$ ztRRmv1hWrt)CTRMvO2E91W=8xZ)~`p37E7Ywh>ukQa}#*Qt+ne{1^f6h6LdPRl>Bv zVMeOEvu@3R%P($~l5<$IPBu{zMw&Mu3F@tW#ZGw>Aw>c4x;8dmdDHker^VpvM#>u^ z5@SC3A>uS3xcMt<=_r2nK*?E37simM7(IbriOlD|x4f!N@mhQ^a(yLL78ny(>JN2_ zqlah|eXF3-gHm}z->%1Tsq=g{*MPrs%B8*(D%{Y*evd}TXfOm&j4E1y^DIijO|MGE z4rq_(!8zYM5EP!u;P-!gf@I0czkAcXCU`F9#5}my5@z(S?#~>;T4AmF(IVNp!LNgNf@ihkIm{EVE)Vt{rmQ1+*-AFs4AP8FH=JwtA4)lj8P=9?1?=|w1$GU zCt}J|R@95o11HGy{NfkVr@Lf6i+%s2WvQ*`U{|8XmVq8Kb4l7mQnoG=;W_3-osIgp z4`3O`;>P#;X2aZz^1Po5IW7MI4WbmoBFWaA9rGqbwupGU$G_Opt1fA6J~y-FdiBEl zT0JvQT-v(2W+UygM{(a*y2|{M;wd}9gK+OFsp=hyd!qrBHZi*aO6is1*l%mNA{Nm< z^sfA%ltDo2UmskMWu2F z$M;yvVG;8AB^6p+Vy|3@@iQqgznPbkeE~PB9~4>T9sa}(SFGhBf={22jV^|~Y?hFY zHc2W6#7OZBo6OqaazK3k51qkEnlZphdz-)d{Air#DaJp2uF(h-b22!1aX1-10t23X=oG;o%-jM8*z@EQv z-^$6}30{^hktR@jr8OxmaWzqovK<^|AE2|OPMnqO56w~&UsYZPo#m%FMb!e`E*^=pJtG#Qfb>G)-A=Oowju0q(fuX}6l{806v)>4959bPnI_Kx z!?{?P9C-iMxX+a+gSnF$N&!ir%b)xcC9dy8zax0$dXEo77p^xJ4u9# zbBrg@ffk%z*wAM{On*Up(FwoUMVsFgO#_%oGE8>j+fIh}o+r1~CaIckH&+{86w)OH z#p?R*-0e9%WFS&DjPnw0ZqI--iy2cr zUo+E>-+bK!qzy_OiQ(SuVQ@B`Tj0uG+N$EeaDiU50BX(gjeHF0s`ha>@;1Bg2izuh z>~_~&!s&-qHOz%{G=C0j5)(kYTjZCIsuWR+c9+4!hZUGHjsR0gYsPoUe;cDXA3!~P zhY7pylRm|k)+_tgP?3w^;XX{?B>&ZNmrAV#Iy{kY;v#YvLTnbVnEs)sr}pnEGShL< zx<#SJ$zHgnwpF$7ShWF9U1GCSR}zYVwd}%Ns8!OweY0?b2~99H)eMlScx+b5Yh?Rg zB>6Jjuv$@b1c(CE{#MWoz>NI6D4XL3do+OF?#T(nkehRtP?S_Cr>grSl6)XSczl4n z7Gx_u`F%S-FO+(i<1ThR6AW^q@4*K5gI67Mg5 zC!wCX$h*E5JTb`?E7^H3HURwe-PX~1`#y+6T^KkK^l$#!p0Xz$;7Xx0&eYV*iX(@2 zu_jAfZy3mFXI#i;3DePLjPJa;4+Tya1<^rqzehYOf{dmzX2|6O&d2Afu0V#{9u?DU zUzQ*YnoT$RfHhHb?}Ey`=g^T9dSZ~k17ZEDT=!8x4u-OkuC(4UPKTN;0pEjy6TaEkqI zeHfFk8zj8%h)y?%eJA4KOeYxF`&Tu-2dp|Q$7`V^GY0RCPiZS+7BX<2MwJ)>E4H=` zICBc+HC`!EGx8u!*3P_L(h%`RTWW1m5URGY2^8dKDxLG`v)EvmFTDT<2cGSA)s)!hFYCkb@)kf^ z+TQ4}^af=Sy@$*ub&B8gY?ov;J)kCqhWmMY2weST?p5>sb7*|ZpF7JYFgL}2FDeLh zN}Mac)x-yViDfV}p5LE*;2!Y7mZp~ws`X?VG5<|kHD-Vf374)@-|@ECQMJJ*_V>R3sF z!sEfL9y(JVHQw#ac=?DIJ0Uz*s#EaFQK z8LWu-H1dm0IpP6}8iAGci-C|(z2&d}R=B|R&z)pyrCZP3>y9fb{oYW_$-or@v~`c9 zCf{Rr0)V$3c$~Rk`Yr1;iblR0*JdTAf$AQ6b*7OY|M4ydcJ`cXn}Sn>jwZF=f7+yK z?44KrK)fFFX(jaDC*PU^yV*D+YqTcl{q2rnN#@K1)?M+|`nw%am=L|Rgl=o~)RO?+ z4$;PVF=I)e&5!aIlp)Hk_}>?Yr1m~Gv7o;d9%7 zvbTIffPM!7+45Y&bcxb~85y1|Q~r`wIk6^xm>|T$W#=2x#767*hMfWO+<3P#*?-4I z$nPbX73iDfCc-tmmvZ+}#%=g`Jt&s&$^iyefq zVV{5c3Z{q^hDeaY%=OY9Ns<7-m(5@ISFZWhPFv_=NyI77AEP1MSP4td-{QaccXn#i z_9F3@JC%gi)STk@XSw%7_zHV(g$1(glA+1*&y~wrCV-T49e8JTxkaAM=trH#Q$98mX{uQ>^!lHYh+?}8W zEa(V#n`S-c_mu&_?i)de3(3Z#9m*@dyJ|P>1E#lob_w$T10s!7mXbfi=&96CM7_iz z@Zir0zOB+I-Uog@=g}gej4i$k`$LSG;y6uAeX_FQv?xe4lpqMzw+h9iwoPnUiy<*u zDt(}drLf$lDhNi$?t2+0@EH0QsTPv>pj7e;k8{IS?0a?kG8;DE+bpA_KCFHKYJz^3 z{hK?vEn>X`b&wl*KFinVa^SL2aon>*y~;ZJDt;IQ;ZOG?h2D8BL=3xT+Y>b>40@3` zq>HnX+@S-66Ojzh=9RqgXP=X1VJ_Fc%y}EE+m9f($-g(DDyw5EJbmdCMbLdD+BY%} zS<;aDSKSZKzZK!zfeoyDe$MA4L3+B`)5VLyF%Hm;C275oD7iPPeI;lrjGQ358@1&q zN^?UfqR*CWSDX;*`a2GIxs6>6{J@O#5ckxKZj4u3W@I(wp}CiTHp?>8EbMA%Ppilo zGB`whjK!|>rd+51-G9OXxvcllW!AYsG5hkZr3lk+hZX-g z3Hoo+rwVOBrlh^KPpbn3eE-{(k3efeB*)`&m6;30)Lpzdswj6cSN+;5Y&06__U`ZO z){QR7V9C`Uv%tF$MoPYoy_rl&ZAl_X^6vU~CKck+x)GWc60HjPws;+zHw?BNLEH}` zQCRQrNoFEAmy`$gihToAcWTVH#^iFJkv*4E@0#@I!67h4tFq|Ukrh8PgVZD7gy~FQ1AE7$DRj)7Es_&Btx=|@yPt7BNb_&82CH+774% zyPC@Y%b%Hgz=V?(7|yt}ka2UTdZN7~5gTk(?@guUO$%J8C{X8Jm7o1AsNj9g?-bc55S^1r*>Q0x?mfK%toQ=W)o*zikyAX0k0Udm^S()TNsN&Qp{5q%VJ^AWxx+8Yo+2 z%~r#LNKiK1Q!;;^ z>rvLp{Y;9eW1+Rb6qB4%{%D5P8T<&*OF)#4Tlid`8Byx3l&AZiL11vbju!R>BR+%u z4@zN9+f2ERvfQ3$o*5)e-6m$1F{+Rtnr3$$f(GnTf;wR z;b7|>=L@PlTYPoF&x?jG{5x;XbVIQpg`ucaJpYWs2O`v$WHT)V8Lea6vQoDjI+Eyq z3LG#c>edAC;`h`ZAP8>nnXmE;nt%3;q5~mz?7leg_9G-oFX|X|>54gvafAko^bCzQ zqwJ&X6ym`RDg`qIrl;Yn88rh1S4NhnCOSSLvvd=SQAI>wP+(kMcJEPlZhuZhwbp3!VZywLSi*t*jl9wPZaCy zNe3Gb|K!6<40X}blhY+1Wn=)(57|{WdzNr|_)&4T&*URHB~gRH$+4qhX{W(^!@P!3w$X(avJ z$Axk1SvJ%U2Y`%~>thY9V&KVec2lsY3T-rDxOJ7M*{~XN9N|j{Dno|Ndfcia1UTNa zfDzhRRwLO{2bGmm=$~&_6V&Zvd>@3Ay}9gFDO+Qr)T}t3$Ce{(sF6O zu3+k?RTc&f{WgD_-ySj@AAFZW-!Jzh>+II)^a#D(XAK{+Fe5BcYEMypy9>YG%NwuD zmX~L5CG>@L*nvFGt)F|<3e$JGT~reO5MFdbUR4T$)=s}>FBD}i&`cmCqG+`)`x70! zOTQ$ws+@W2EWUA&#w^)U9OM`!FRES{j`KYF$%OY=)nd}&x+RTnGoc)AIvRtT6Bj zRCjyRy{TAh3(#9JM@Tq1c_G&Dbeesgq}%z{Fp?HfiD#1J9t(-|vim1Z)ZnM`Oz-cp zSVv!P(o4b07Is+BM=IvFj6M*C8(v`5?lK~R``SY967IV!xtbO_bc@ zQ})!g@(w7V=XC#VY~mB&fcaFU643Fq`k)x4gYfc6EL5Kd@w#H|G{Kd1f!lD<&?((4 zW}a#oQ(^R(^i6VjZ|l^s%+c8zSxSfLG3T>NMH6q&0O?N6%WYnfqwQp_uE7%nU1>vX ziJ$ZxDeUS6Ghx61*>}ntn?tM@s-K@yj$$7o@6Rt}$w;+{`UFoJu?e53v;i_d&|9zV zEmp5uq^^y`bUCkF*dV`2gkt-cf#+q!ce{87IeW(v`-Nc}!qEq@ff|q^=bA0*CA%L? zSXY2H{q^%B9nvK$f2H=mHM(_@Jo9;fi6*Eun)ulCL18ms`R4k|?_4OwjZKyl{?*jJ zIe}L+*se11YQ*m`a3CGGjuq6dO3~s-RgJL>|0f(>ENZ8R+MoiFwPhNg?F%N7M7{!Tobf@~<;HI#viVB(0+ZAelDvTrBmb7N7k>3q$CD!qt&B)46i7_z^p|yONip$_>Ghya zSlE~Z6d$Lj4$bd)-iMiJfG%pptb>?EAbACohx#Y)#bv((KB(*8fxYzY0h2(>0#brU zenwl|#4@pW9S=0T(Y z+4L-F$Y%J~{n$qAFq5usDmSAj9&NWWEDiBS%2L0BaY&&a5Aa(>@^vWN`HA)}W4k|q ze@_!ZO%<8`(&GY*hWJhCM#ZwQ)ZikwBX-Y>9>?XbqQvR!(!mTB!iVQ=e+xHq2PhQj zq9kdAH_aqOVd2eA=o>^%j7mW|n?SeNRXUi8Ne$_Jx$bB(f(Q_MkA4eBS z&pRkT2Ok2I$l@wvM41vQS#XyvdSje?(@V*U@|_sT-Hq4ubWH)Xp~Ml1#i! z#3m;uwQqS%vD}f*$&?yEPfa6s{sy6n*9A5WQ-ggg087f=^gUxClj~cqZ@3K+z9e;> zS7&Zo8a}IYAS)Zx_d_%)R~46LEt=2TtJiEEu2OJN=sbIMn}gu`9r0~Z;IfW# z!;+Qc>}Mp(n^0$_x6ki;B?sJAnw(t-W*S1*o2PN=;$K;=F8>yO<(ztn&D~j71?eFv zuRI=%n?tE!#ES?AS#JOq7~z*UVYhAm1olCaWf`T~rEK{xA!62v->5w5o|3S1do#}v zi4iNI2u-wQl#fUDg^|lWnpaQq$ZJ_(_;&y zG23Gtz`7}eES|p*$nP!{Wpy$icX6hSi-jYV(gzzv40q3WNNEmTR~Uzzir9aB+4NjzmdSynOaB+q_)cTD$I=Mkz1hRkpajV>W*erzuSRPmcVOo!Id$6%r1-SaabLi^m z+FQvr3?)eiGO!_{-kDr~{bIG@>(^_Xtx)-ebT)Gw44D48Xtzs-bHVRPmy!Z4w;yw5 z99BJt8yYQel`{qjtvRL`Q9$_W&WwjUU#KzJ2&C(@4FW1+z={N;^Y5l#-hAixkCRfk zM|(8?hPhfgHUe^v=>UWynIG;fyoCSE`H^*9sXc+81gD|HBH%Oi=5eM>$@6attv9ssl%;WiDK6!dXRv=wQu#kX%IfK62tyR7R?(_0 zwQBEB1Kc!Odgj(yp{$>6hOH`NMu$CzPMr7s!OC^xvfNrGtT22{3BJWiTMAh`|?02zqbE-##qLZ zF=VS48e3TlDY7p!7$lV?J4H-Xl58`UL@HwlQCYH8DqBO8t+@fkTH#$o*-{wEqFEd`=k1WIMT~^Sg+*MaXzNjq!B#ivGdu@PQvBTFJ$Awj=ULf zKaQ3-Lmq@9zhnw0+#^2)zFJg9hy!5~gK8KET!c`> zi@nN&DDv2_*V*_WUU?{0vdFG~PhLu5uwtW3>isCa^58o$$2nriXoxH1G;g0~_!D@T zjUtaB=c$nFe$Ul0WG|Z)I&U-{NMY{?i*f0G`o3Sa8)Y%PgMi@`k-ji2tR{`IblsB( z?@agIb9R7_Vra5G>Fxt=dewD>?P3jkRE7q2^GzJqZFWGpNx{jA703q<4yV9nM5ClP z61o$3vW4;@B*H`0t~Pw&8_?r8v+@vMv#CsQlZV}l7&E0JF4gAdK=Tz@jcoxvcH^It z;s=6tTus_tFTLj|sAE}`?gOtz#a(()lU1~W2ULuuW9Yl?!!P6$(DCbGvCie0oF4_P z^tPYfH@vR+`oOsX8$qs$$+FvNI_m-yAMOdf$ni$%lTRK7tr8d=1DAYC`VyKBc3Jf` zs^&;C0&82$MAhIj6R85*X!+Hpp|pgOtbP@K)Es#cO4Jd#wj=f~JV=6vBJ_Ck0daD> zOQLY;B$sS%uERE-coSSgswR7naXP2V^>Ab=H+&8x4C9}fwNi0)QXiN0^Nm4PrMg0qf>%B$Ept)<)S9eu2=GYG+?s0$LzL}=ViwNUMihliC< z!Zx>wE7%@A$1$|Y#+@*LM5!AEt&A$sl=Un8qeOMt49w=M4X?6aa z0~QKA=VT7r!4zS}4dVrF2V;x|&KZ6xVQ`NtH`aBG{-2*+V6g5 z7nxEevzCPJ4W`8-e!O zG`D()=UNBr6eQ@&3wZPiyxIL31^sX0X{TD(!RL4(z%3gTpX;#k>;nbnDoNJmEo~)a$Fs(r=VaE;Sp;Urr8) z!#>)RCYhZakci=LhSm{uA-E+ z_JFs_;l`^Qxhfx!(-(R=z3iOv6mNl`w{yI) zHQ=G~__|=>)jGE%2kvH`N2OzOj&C-UEfyx<_SqQ1p%aA@*m30J@qJurRlA|QZ)>b{ zYOPnRSYZ-o;=_8lR|g5Jn2Stu>j(Fy@a!BocE0b*cL|dr4teB35&g+aDoTN}7LMOn zkHJznV($inE!kIxNgo(xLXK9HV4uoJ^>}rj?J3oYKoR3>wz;(#3eZ6i< zFKQpmVRe36zT$ZEB1kA{_I*8>Gp%qxX#Mxdu|{cQj)^g)$rNMX)yMkxI*59 zzQ9|um8-Xk>=kg}&2_qz>r~8BUCO^AK7WOr z-pQja=<;z%Dv@Vn!Q8hp_cxAfjKq%N$`zcPaCP8t8i`d}X1*wcD}yvQw@VArz;O&SqKj#+{|sAN>| z#>=_-j8aFty*|YJesoPU_b9aOSg^9GhOr3jY5AcOkM+!y_-*9*&40X1{DG(SL%BXb z#Utojg2QLeiSFZQZP6=;;FxS7*DNsO(>RIg1;ymIrFJzHC?llAPQsAi@rq7$i=CL^ zz(FKBLM^^t&wtIOh@*5(CU%7~Q{{Pv_@6e-+Z)IuhjIRHpZMpQPu-zHOJ0h0m)wd4_uB2ImmIjhyOhL?9k%Z9Wl6mE3cyw=(Cs zba~Za{J2%6kou9>8wOc2O!eTq-P*0D@WMo5RbEP;itlcx9d{$wpFMf(8AZ6=kk{g< zy_ZjNAXnnV5n%(A@fR^0hdh-D2)6RXd5?YY_{#McQ3VfBt=&hDy)cwTc7Dl}^{~v^ zxFJKdf2U2HaZ}sryF#0lj8QVD-v`O)UsFANdkns&g!}k{g~GXYy>5p@s`A$I%I-?m zlx}trdLSk6@RPWQSi)gP-MjGKRNhSFKA3pVb~XMl`bMwy8DLSXf()146c4E?j9Vx! zX0S8$gsi%d*UV!*H!gQ^iB+fg{gnG6P%Bpirfi=)FIjddiT`fCwp~2mU1*SeGGljq z?N#~rZ}gAfo|@lwS2L?PW?M!27RCj*UvsY3=}w% zYV@#tb^Z#zD?;`+v!8AmM&*g96fHDyA)YpEtDdc>s94qX*3A8RYSjFFHATfT~Ca1F1($Qs}*X#Ba!pU^WsXm^Tn638se)`6OqN~&TxK5 zqf;T(E?P%#1Q~RWLUpk@xrv-Q=b}%XGW0$T9x5Q~$0dMwy`Mx^m^Y(*(K*K-_K7&ajFw}Kt)SUNMuF)x_WEnH3a%XtLn z`)(l|saIFO_iOE7eKR?RzUTQIZ|+n4SW%YTy~Eu5tdT@%3f)bxv>N{I<6#|9wV3hO zst8#juY$qd3S#7wGSt=AYT;bk`jz+edHa(mjYT`c8|Cy){ zrnGN5b}_!-l;P#ftoD`GP0-WY!zV(z^-f;guUy9MbU|EhU_4A`s_8+~Z6OiIGIIs; zz2@D!9vP{argM0RBln)WQIQC}c2dY!AHoc)QBWW64c6X%QZtyIavb7()WZF>WS54g zK-(To)`kb<6Jdj$;-VivhCAjS1)^p`76^zVH!zQz_wYMxQ zbTv<5(ruoqj$OUkGawIPnpsF_yjej0ny)na6jp=lR`J!RFkxJ3+1o8Hso5*6 zsPC`lc0d}amDoF3r)AobVKNCA#KES%oyTrKoVurtUY)JG*23Gf?TF<>Wxe7?Wb&s+ zPSBB)h;0yrDG#(5H-6(EyTdBYXjP(-5xm#j#`DDIAl%?l$6EVCQCIx7TFbz&ymBV= zux}|x_XvH zc)ZdQyuo`B@_Tx}&okQ3bo7qPZdmf$NQCJ{uouM``0hzObyN1ug->n;uVxjH{Jw=J&GLrO@I8+*#SX?%g5Q?vOKI!IxYi~4UA?wv z=dtv8XuFwlPZ>1!)Hri6wkGF3Rj2i|51!lE7&4LG>!jkEnL9-8Unr^Lmc z?7jiNUT6PQO9*a6wUC=f`&{uZ3MY3c)&xCsSg~ivD_h4p&N43NO&Oo7R$gMHNjRAu zZW$SQoa~crY?xNEkz>%#;;B%WOGjOT%kTGj5x;4+eqNqMag+LX+oJR~@9ZofruPL|^E2`66JpDeL`c2iN)fn8ddwIVwa zHI@aO-%ngCR_38PLWhg-t;7?RJNFs!?Iv&_~!%#UJ+L1{>mFUyqW7w(e9a8fS3 z*SIS4E#s`fyww%q>zvsqZ{B_MtZ5rg+?2zptfIy#TlxNL;tESxao*{RPBVY` zJ5+volc_T#)LI>~woIhjZ2OwK!X;g<64x~a?QKfJBGz1b<9EAFIhrEEFDvlO*MFgL z0O!RS>n*SK3KyjE387rLVvTe5`y;&}MXUL#R$(d;Hb+e-Srq9w6W9&ueBm3I`(VXx zxS?xtXhQq8VeV}~_w6_^t)$e`=+^g_pWBY?UxYqnr!;c+gq!x7ZJXr=K7=!~sDNY7uI~ zQt|&=NAB$Z7BY}I4Qwh*#moCD{V@-te;`nhKd(ve063>h;h$RPH*hL=aq^O_ZRe?Y z&Ivl$xE%1~!J_aOG9H0~VadPPFVX$mGY;{0@-0GCyqpge-))4Yz%XFBEByZ!_wN~F zV%g~i6L>7eNk$llg+o|0g#D5DQ?tL%_}~1BOQ*6m$9(ybi_AVNu<+P~t8$km5U~(~ z42~s0!~X{1U$K*?;xMtm0zYWbKhEsxPEj*W-i)E(AaMMh@%~dz_IPY8y9WL^c-Uul zb+-XSD=Y8?q9P$Q4g&{7$e%<@r2pBO_ct=ik9xCI-~IVKe1PC^2$Tf|#e+qIru-Y} zf20uX?*wAkce!AJzx(O`3je>Y?|+Q^U&Q#;nDFfC{{I^NAAs!Y{=bH=uploJkLQu6 z9}e)P_334_5ouO(i_oL%(;b?Xwu?|s6Z9v4h=ra<3TdATCys8aalJ}=6*NUBf_=os zYCycT0c?{)TZCADf)7Et4gUJ|c;8n7)l^~$>*%{|;?_n6kp=Ksbka1F*!D-ZOPeOp zYKYnl|7-PQ#ko;h-Gq{C&}*_kB)|r!K&tp72GnSxc0Z9uAEotJ1@_~MbBOXe0oPd! z60i&idV(jvX@7=qOP`|SwJ#jSx)6NmF4{DFF~drZMPI0iAhGCCQ}6z)W-$w?#A3RC zG1Xt59&otFDkOt2xd<^Arand0&{g_p{tVq9gc_uoW1HTMFU}=Yce|FQ`ELTf&~?@; zm0nx*sPy<30xuuiZ^l`@=Rt`ghELZHcs=M|*N?HR*?G*@b^p5kN1;0u#|oA7IxR8MUQr z@ZYz#Td)1K=}wy82sJ$+f5ZmdB^IK(-4~&UwtcgiYYK#K=(E}26{uG4atN9eBdX4p zf5yOI5xS5NyKD8;w#=%pHzET*GeAeaDb1x2bTIX=RbUB}q$7uc>tP21Q9!i}E&KRIBjNDLZa0Jjue0MFD2 z`yV)`21<<#tvUj&J3yfx059Eq0VihE^a3fj?FK8r{%_>^XG#CN6ouhz#zGZwG6#>H zW{cjy1U?XxG{uOTV(z8k3+euqe}s=^%{c{4EfiAmB{giH2Nd-p1dPN0wT#uc2!V#{ zTJvWdaxc(}=vKhpA!-BB$5@QfDF%_oSODlhyp-rndiBVEr~iMHp2q5sOY<+RB>MC+ z7NIHT=oFn@1f#%W#2RMQ>si%j{}Ik|RrqIhqwz)c1i9D#S~W|xcLrE$5o%-xO*4X6 z3}7ziR6Q`^A26|f655Tg?zi1K#RyvB(a4NyV2(C`f?gm_k2HS!!#l|Ao(zBGY&-~X zvl{|~ZJUK@=GZio?Ja(9WDZxl{gDEA1I=#ywQfAy7)vfXgYBV@HPYEB3yq)NU6}3u z6AR%LhU(jBnMZ4A%u_&tC>CRZ{a+)K*Z?XkXwaFnmA~+LU}=V2{Y0QqM*ojQ2)Jo@ zEV!h5XtMP*)P~7r(1{scKGZ&?<#JnudaP)3O4HNyF&1#n8-R7_3xpr0ifW_>PK_!2 zfCAYmZ-@il+MW2y?J8WU{_O19d<1PQx=&?8o7@ll;3;$EbcmDMX2fMiT*lAsCsa42 zVy8hJZD0g7;2s|+bng1c`!G7tc$&{7*w^cT9;6>`dGw#|0(j1WbQ!0-aADI8e6#DPlk zm+u)GZJ6uq1e@V@bGJ1rQgA-0vF>A2pfT6Dm*gyqLhTOZu)|SN7;a)Y-Z~vbO72(M z%2NqEIOj%z3@ZSS_UDN3KJz8xMPN-Ig0>8AJ5rc4qQ-iGI`AC(G(OMpB^3riM<0!W zme#<(EXqlhD8w|I&q@l#y9s5Vq8UPdb|Y6wT5!q(KEDsMxATamwftknq>eR^Qk z%f$EHKdeK=&lY7w7_jC~kb~|`oy<)z0sEj(xL%+^-2uHG9sGN}EQUim#)z{p3lHZZ z*5hPBB7*sKuAERw$4vXdbL2qnK~#3Z5WkEjv++0M)O1|f7Xz*vNus3xF?UWDK} znLO=H?~ukH_ZZ`1G!179$PQuU67k3aL1y zN_(Pg3`vMbnf~T7@T(CdWSkwt(Mv8pCUu^p!Z% zv;fum4T+84CJz*#7%(6EOFVrkP|dm9nFz`Q#?@EhfaipnS0|NbTPZEq3Rcc+(7cX* zP$SzQp!)$`QPtQ{6GSxqJLtb7pU*BV0(2WNw3>gJtY2Lq?YWHJUjF-bIFE-{^rvjRx1-Y-3>}Tr&EP zpTAqPw%wEyJ}665Dt;|VE>C1ALx^YVvDSiCfNzf=XI&ix7oM`b zgt}#X+YwUDj4H4N+d~1y2aWbLHr56q@HkS9#ctW)uIaF>>n&T(d$?SVKng4lE`b1v zK~W5?!3)jKW~VjO`;b^F!Cxd6chC`dyqF$kYBylTKA2Hc{S#ceqmA?hV343`KC01> z*JIryk8PtG8Bx=YOX$?_A%XK8t*Vfw5o|YJ1|;TGGqkFBn@c@JViNjgKoh%O-RYC? zA=wxQWe3W)FQXfbO}%_u5k~@&jIq$-967C5kySEOF4zu(;hl)h8ar z3*{3(pI=w3c?iSHnU|xqWF0K%nqQ9Hty*XV-UEY(Qy9}(J339@hmSX>(LsTLqFKgY z-MhF;*vB0`dy1f^^i7_@+`vnp|ZA2nf zF-LDKt9jjzbAP*Lt8PtQ6qSqw@Va}2JgvfvFi2UB6e_zk>yX$czRvZA5Uj9E8FUyw zGDa^#2YH%~Pq90Oy9&PWEdPC3vc)~7gJ3`C9~?!C_e8d(X@`oR)j zK6AbdP2~prCHe78n1a@vJe}?R97uRA8Oj`isj=`2H>lZvs}hE@FY>+yE90vobmf~ z((SnzUx^66yB|E%{oP$Ar-fn!XP-P<)py}l7)G>juC?umZptn4zG ztICB-N#X7rvoPBf`C~xM*Pat`?hx^Nmxnwe5eUjrE~8IT7H`exv4=v;bnyo%>|-Go zGQe$@*3=NJ?`FTt?R@Z^OmkENw+%?F4)zkyxrNle9%H z8}C!?f*ogzj>RPUU`#wDWwCQjRL1Z!dhYy$=W+T1?L`VCw!oU(cnsa)$=KVszmJx` zhiXMkS|XF<if_TDw)b+zftpn;!ityAiXGXsmE(mUQDHDnhS8Cznsd$Z`$qmJkm%x?~Lbb73peVKz zX=e>(l4AM%Pe!N!f*heR=N|g*@DlvE`0?(^VFI8Q@LMAOj^y|Wx5uA zbSjp@FM{^4m-hp*DHKiLn|e5Z(Gbg(80&<@QsG3+4s040)#X#9n zNzL2=W^(PE#>8ka(0k8!VN>)W`i<8!%VgUjN-_rBg@jBYvhqnZ9-HZY`GOrxR!N2; zfRT!ij5cC>AYs;P~38^EMAjy^?0*pZVfoMaMs z1-Ps{sqDM&kBqt1P=xea!u@z6d4mo@cYy`&AB)f|%29o{UBmRZfWk}5gm5PxAxJyc z6FRGs!R||N)`c5|&@cqfPVA(j9RN$imGSu|Jn<`VA)Xid)!lz9rDBiA%)BR>t9f&R z&L22|EW=a}yeuq+J35URa&{S>vPu~xr%uM9w}aasTR6Ew*a3?3qfL*38kI%Zvf?V8 zOiur09o#UHmrQ@Hye0hEWd>@)>Y2R-l^FxoU2%gPRbosy|gR?+zFP19h8knZg6%tB4ys z6sKfmB3|)UrSt2|N6ylI#&;+%hyo!1!q4m&I1B*>gg?Ksq5h%SFALeyk((H=`Rk)L z-{g>8I9kNJrK(m|dFp;2G|SzGy%6$y_J6wmU2-=5KOM}~ri+j_bhGQy6B0vz-x=rd zcmoTc6T9S&=EpGOU;T9I|0d@@WBqfA!33PXb4p9=shaZC>+jCNWRdH|m^BcbCe^;H zrR!4n5-bjj!XbW_jEscff8`hp0@Hs@0XMNR7@cL4=L((GUyF|~mDYJV)Mn)Ns*le- z`&K}|*Op~^4BQa<9h`#1kd1y96+}uh@~`t12vT;*&2^M)vX67GyuTW2sh0^b3P4-_&|gPA~jdd4IRm-(K5x8)k@o zSo?M0<4u0SSJn66LY-cp=RdC0Q!YNnoFV<|%KmTlnlqaF$cV3gmDh~_%26Vn|J%TpJquxBS|66_k z(?o^u)}75?A0L(XmVfCjzWGbhK9dVz_K?fd@?`krp^4pd|0&Sl+i0Fn+Po=F{sb6l z7w3WvMQ2Xz%Ir$s;fGmKy765{!%FbduRk$P?knfdQ*ZIY)e^|;)3W9 zL(%T%jZsaP{s=s6hGbncsC|f-RQtek)$FHCD2*G$S!Cnm11GAq7ltJM2%Q>Tsj`>i+;ZA|<6-uCvp-;9%Xpm8A3y6HpwC@-Fl=a_<<^BY z`s?!F7WIp-TRrwQ{*S=%Oru;zfKS1Rq%#d~6{dNPZwjf}t2$jfDCQO?7IdNf&%g~n z?O}T4bMl|ulVQ9gDe{6rbi`&ZVpdPNq9-G|ITZaTX2C0r67LVSUh-FFe7d>!>h4;; zPhZmetuDoGzI6j`c9q)l6Fe?NwM~WQf-Rt{lx|}uBA!xl``%SI6M4zVAJ#L{wuG=T zkZ7A6we4rFg{w8^S&pIa5KU9m$>{H=>^7tEB|*a<-?kaF`DDEQNtSdf5qS0VsG0@s zUG$IoB7l`U3*?k(*34)1R$1CX=V#Ubl0J z^DFJXH+@V{kH%F}`;O9Yd7wH;V5D;NT^K ziWx4PR2Sdsv-rX#@H7@GU4elub%kp*4cffVEH&&l+*}Y!A88;EU1?T_mSs3gB*d=H zIXX2mny78d4sxn+wX2Y=&UIkxaeA_n0Nn7_EhDJIhiXX3!1<;xfm2Cu`t%r=LNiFy zP|R%mYCMJtDQT3^LClOEnJL(}uq*_{SF|_5t&)Sjen8C9k6iQk< zSOE_oq~y)JWwFN5LEt z=rz$xLYUI}tgGl_&b6hUUF$m5fx2*g%b^_Q5m*t%TC|nF5DZlz7yfcXsKC$|%+W|J zi>~mI-`iC#X@8q^Jf)!7>@uiS+zvXagTnwA24w6i93s zKdDG|dnFZ$#2O2LGUP0zbCOpXq6`b^DjD06OLoDs2wbZ?GVTx~`5dTpA8MjcLGwQ8 zF^_afm~Ie_@zZZdOYHmFwsY$FBS!)0?axNQEKb^}$F^^1QLptpD1Hiv%WH18COctV zl`x%w@>WXA;JF~|nWa)qSDLk1PirHl^BLxG$lOUTIExbZY-?a_1X8jO`DSAG<{GXq z&jv?&Uc{ckQmr!|71jGmUa?5Fz>cuz84%rO@hxZ+S0GY_9OGN~BNsMpsM762pqpRh5vF{{vJ@RY4BjCwHF@=v-urVAz|78zkbhpR5m!xk z*avr_Js6U}{i*${6A!Zr3`J3a)l2ZyXuAX-Ok5yovSnbeA|=N4EZn2s;utBVtyW!u zp;^6*o{W2P&^z$k@Wk3{qu0DNLC8Pq0s;cQJM!+c3Rx0pOp>PR;s{zUh~y&?Cjx)X zNwrh)1$h6&$kk)L1=NnH>y~^N1aq_b@q$1+bDn-~Nr+UBEum?rThWSkr5=n55LA(8 zvc~g}ShOJ)t|D^XpB*uPWpRme4jx#8K|`WInI9P!dZ5bf9<)xACqX!`9A(~`nQ}^` z#mBOiG!Q}0wpi9s8J5*2{VGf(tg{KnHwY3}6<2X=NZA7+;2y&6Ab4V^p$SJC2-aXX zJjL)Rwl9MlbQq$V{S)lhw&nXCpsUbeSf3U_+td4>+VO0Xt|x9-A|vFPcfB7RI&_?L zsqR!P97KLLbw#dFiRDAY;^c5LKu$i5R+&3IANEXsTSbxSSq4{l>xX!O++ev*viRkM zx(dxm>tG8f?*b zK(tEan($Rd5U&`?!TC&mwgm3oyz?!grtfsp5}7QSXP3OVOfFYswBEr$sH z1=d;l(3-cZcjK|b4z_TIc;ijjjWB8I_QIvYO8fdQxvWsam~bLs4}J8E8!WvCV_~M@ zWZ{cenqrh4Tb2PlajyU61LxDbDTH(r7)WIK1vN?f$)GuD+kIovcr3N&7)+qUJB9x1@BlIYR6#-WdVa{ zv1)4?^>{rUaEdUaPpUf_`Zf?kmSmuKz!lG)j^CXpYBEfa+yaV{q+T6TA!zT3Fjg*L z&(v`Btg}MM+hSxg#(C(W_DhoE=Q#XMBN6JpZMU`u(nj7rqu1lWWNE4uEY4U5R$fi@t?nR-Q1Kkvy)rvocQXWY zjG^HVt>Ll8lseF%bSITqcIVz>EgFwgbzj(g4vSY>2G4E!01qUe3@D7}qvUj78RCVHQc#QJbDE zlL;A+tr$I$S~-rM!0~PSS-=PxT{6^u5P9z=U@5l!oM(l6GjQw`13z+- zD0(YG`kF7sC#Ul%Q|bH9_xN1p5dGjY>ky^Jcz0nL{WM14j76Wml-}yt5#Z%KrQ(G( zWufz^ylni2X2U#yPL;%y(~KS#X7DLj;{VaLzjx$$9J3`)oHO}_pJu;tdNdEmu#%Nd zdvfZj9L=g2!aZ;ra6L0uOX*)wpNno3E&ISO~yvr{!fEp9{t&mEmZ061)X>m0;{5-tW135?2 zfuEDE6W?N(k^LdhXuH43Bl`9l{I8XoI3Zd!f)3VKfl19i_L65yfx<4X*^|`g#~@4P zYJkq&U)rUZ$EUmjPo!EY{m_{0tlc=pktu41>mXKh`4?sZN2xs|YX>9w@!r(wk)n}h zvcy15T67M3lDCrir41x1QCczF?h`nX_#A(BhnV`pVwFF6n@>iYTt>&w*iYKH@V>o# zTkHlZ{1Pr4ugvnui-idYtF305fEUCvw9hYtQ}~irNJkLCB>n=+C6bLUClUki@~-SD z+|XhMS}K-mp~#0VZ&RssQYaKg@cKbXLe%Q2buad>BC$ZLS*AqF(SV2PB3B7~fu%%KKVmOc>HeR9{t`%GuudnXy$r5Ole4be%|mO$ zs>ApjPF9MBDT#CIgIT{NbR6QhsP9r{4Ek5m{h&dEehd#Hg_z&fWhu($2tMB8Gg(2P zp`g`hxx82;rQEmelgzhsA?hzK}ay>gMLrUt=(z_ zrpoJ00{jDWT#O(oYbX|p>Oj%n$pqD0oQ~a5h3vd4NJce+9lZ4y<}b zuvhW^mYy~Zoe+y`ozl=HpxXoxA3Z7JhO*7bydZ=RDVn+PbFDrZLO?j^A80rrD|mYE zANcI$!aN8xSar>Ib$%YCr=Q_25~j1Oa62Ue%D<4g^l?xuKb+@fRjto{L0j2G`-OaU6;J3G9B4UPmz$$rE~EdodVoY=m%lLnt$2S+H{hRHAzo$umRQ)q zxw1$A!AGoY!XRjamJMQ08>fGC~8GIl=Cbgp3qig)lS2Cp>JloF$19S%9 zx&Ch~Sxn{x$+tu5$qO`#F@Qfr-jrMTZ05!^ z`Jjn)x*MKMG~Sr|a`|#G=eUcTdoDfYw#a(}uQ$;o>D@AyX0JassIcDMF%x+F4dcv$ zLAzeg#O>TO;JsciN;ck`j$q|J6t>+Q)OVCLoqFAAPvagrwKLHd9o%tAx%E@6#ji)B zN3MTPI9C>RL3-rD=;u8_AIBGF7H$yb9D4=D`o`uaJf3Xo3v&kxNt*RGSIwscy^))l zJNXnnnfS(El5~x$s$w=N33nMh&b4cDi=J}Hms_NgiA2IzlEvI2w8{G3SS0CF$_9bp->3mdfO8d;pRjny^CK_HdxFrRi)QvaVe*bKLVeP%?pttv> zqVKz2Kt5nKHjW@Z+$>y#G9P@KLT9<}&M!l+IXtI;ou&~EpdCt!>F4`g>Yqo|{t-`|Nnr~H0t8O_jp ztafL5vXkx4{?nge&672p4Hvy*{F4^&B7WO>tD8pW-r{vh;=_X&OP>Mf$QlQ|2^RP6?`q3 z_VUC|e4Ppy2E!cli^mLu-pYCB5*<39zwli%t+ILVXA>|D=HEErY9CpgG6>c^DO|c< z-eT~@`O28Zg3QRgGT7m{SwkRt&@GB?d3`EAKUB71R;S^~P?Gkbu!zBDt&_fnL4E7= zwN4J4tr8(hqCQVrjaXX{51ASn)&Iu`ss)miy%P z_6RWfq~V?UX?V`dkhSXDl=w~s@s5SN0$dDfgOS-%Vo*DNULTQMrm_g#dMmr0SkZPr za;18E`R$6CyDG%a1kB~D4%<;}?H|e(z-db28ad08b zYOF&t4Ig1mYHV}zW;O1e(b0c6pZ3+gZ6;+XZR-+&8X^FzA6{7mX zVtw-!dbSIi=4oLMrewM&vMRxJLFdr(x_O^@i;26DY73f&?&dOB8<&J~%%AIcg*?wZ zJpYCj`}O#T#uw)h7u?n_kml}cOA)lDg;yEqML#*o6ujsk*21Eb@@gC#H!TcAIPV-@ zpz_{yWUcl)41(Xcf*a+n6&^5VE^Li=yeGBl5Q{0G#w__Nyn3_PJHzJ*>uxc{&1sT= zumA~my?N`OUv`M~^}&<0bE02PpU~90p{5rd7Vsq)v0#v`IUKzRy_#5rq?<}!Q1^aE zqj7H-$~PaqS%hroyu)q#<{2M`zYi@!n^2^g9PVDJ*%u6P3F4}eBz?(yE9lbtBVMYxj4?rSKo$ree5i-o==uN-L`@FwOM5V zzW`V^x^qsxl@cBzh55)_uOQWJI=B$|U)tf{x6U`}@iIKdQM^dTwZYYXi5h}VAA+-O zEpvhn7_`TPehblg!Q_1LsOBP)QBp}tLCBYb3EkJ%P0lOanBt2pJQtXIXecP|^`qcK z;oDROkL@_vg<;F~Kn3R`0XJOs+`B^G5>y+B#F?sYNetK2I6x*f--y4$DU&iV4(?-*6QPcs75 zcJUSd)zy{8LzIDOf*Zw4H05T;K!Ie~*8NrZ?zpbB9k~|BqAwTD1%$q$oUa=dJ=^sv z(_CeLm30mGlX{pn19K6J7rTWuCOP zxy?7i%T;7}ZQ6zL-4nJ(t_7+ofzS50;_@}aHE%}0tv~+U6`>lgtnuxp-_$`pS;1Q8 z4KT->itCWNJMS8pAZYrJk`KO^Tfd8btt;e`RZ*W)NO*}LOSaoTbmBmtifwY`$9pB` z_3z9ocGiAzyq~YQ>8N69fK6XGO67WG_A42lV4Iv5%)|Yv=`xx*l&O1Z!!HkC9KBX; z+!2J^O`teyh-728ZXW%TUT2_*ZKX3!wPH${E+6uaf4FjR^ts<@?P}NRx~*4vBCc(0 zP9S+?M<@h*d44*%_tQJqyOL<30Y04k(CHVJMsuYqs);ZVdvQ|;xxs5;$CRY1F&7n_73;k-UU33xhmO2=ubW0ixt@dD*l-u>`G*wsrdSlp zCp{Fb%yCPs>)P~LUvBev3reSdk>bs+Imfl9g!`FwZnq*zeCo{_kYUO@uHMf**fLso zJEhNGGkNbChtke2$Bei(ZKDw$tui6ax-coT&sw^c+t2U0($+N3VTtU#;F#3;^=U)A z@S)GWwbCKSUtH_*=c4WQt9-(bdw;VV$e@}g=H+HuBF`l=VtMG9qvH8pg|F`(x}s#m zclCaw?2&7<7M^fd@v|#AbOyEsZ<4X$)(#K85G%Iti^4%*AJt>tJB$kSclK}i?Ci6T z&#a-Q$PP`ReV53#^@?^l) zB+m0n7B>#hn&0d8lDc9`V{A?CyPp`5ap^&f=N9FPi<5cIw=-*_PIURv8rnh=b3VMd z_ibUt79~_RLFvdfYM*A=TSx1Oe z?H0yAYsmN6+f-prF>z6d7IwMv@y;n}Gye0jAN4Co#moYzu~XrXuu4`><3DfSd^n2l zX;g=cUE9q!>ojD{r$4|f`ntd8BVSx~_o_F$7W!&u(mVO-wF-W7tT&r1P3fPL&n(g=h~Dq$4IehuZw^hy-(D@|9c6Y|Iv_5< zl#px_zR6i_>kZYa9T!JxRXi^1HIKdqk6?a(_VI>S*Cb=ts(dTnjw$x~u$r8{Mky~TXBZQf5(=8~(OZ$CLGRT}lZr-Qaz|K1S?ZwFh> zxU5NW7ipW6Bl?%?&2EgGlG!3m9L;!lbW*2RZI%4&>0U95{)%7^txuEUu0x|@u7|}U z+8!8>JUCc$&82JWp6Mdh@1rkNoVywZ=R`F2F%=0f!zHB&p;vZ2yO2;@FB1~?>F8(C zGE;@C#(kPm_}jNtQ)oFEDFGwbK4y0HejN83M_xFbqxywEu=H4m+(juZ*BzD9o4RF2 z!k^YXz8`pgRps~RAqyHGJHob>Npn5%ustx5E3`X z|A30`7T(L*jY_fEtncN{F*Ty5eGHi!w_<0k#W4QjEat7$UHubt?t(jRuRSHRwXN_+ z78#yaQ&Y2w>V)fSzY6vzh)UO9+1PqzrGRzXORt1^jeM+*%DS^F9M8{gP0&tW_u+fg z%E^!G4jzqvyRvY`;_f!9W?SxNY5$Ix2Z|{~|B_YEK7GZ4*ZywrBGcuS-=qy%^TAOk zQyCP6OME7HnQdPkH-Qo)PreOkzyNFjuP5|5E)_L>zNg4e2~TZ=?K6cIti z_l7Xc2CUk&WhTYCKZL*9NpV)yb{mfI4;hx56~1_gvs)Zuffn!%1c781{CQC0i+X(8oEFz0YZm> zG${d8kluT53IvoQAVFG?BE72nWWVQk&Uemted|h|zb2XX%*>j5-D@pRzOtf1`EyZ& zARwa=)zWy<12**#XjE|!8)thWPp@nC6!$ila2rdrGZk;OL1oGnu&BSUk{K(2y?vWa z14w9$J{mt2^Q$1X1ggXa%}&h)v3>=+CwF8cLMUERBKg@s_I6nj36MC^|2`yoNn`PRB68hi3tKt;Hd#@RLm^a#Z`O&akrkk~@Mh`o(T6lO2l(QX=ZVrg{N-GU7adiKVFy=R+zgF?~ z=|?dl6u(%fSu9>y|E1{3NVKtiDMY6-@+nD-eO8m)nWaJ8u_SFXs|gRgD&1PXW|827 znqcQIu|U3$kjI+oXmR+3Bd1fLdi%>}^p^H%|Ct z9PEJwRgVy+I662^8uNqavkKtYPA_ch@`N?k>sG61aiy&AiWWZnps<-vZj|NO4MA%e zQS91P{2Xc^RbFsUx0jz!$YpYh(Yn?kr7>W5+WBGH+6ShZ36ap=PT*Jys(b;>)@^TH zbYI|{lb|p1!WVt71^zbfo=R+B2isJ0km(d&vk2w-r1@NGA+>-(D7cP+?~yuPz9uFZ z@F@}jU0YFCETrpGrK(B20G)C40uJ?tiA+@7pnF=Gw4YglnX<nIQmWc`c=}vO>CUOba$=HKD3U1Bj12W z3qot}E4=wQGQ8PW_7}ZYIXAll^Jl{rbC%qz<2jiL!EGlhJ45{PjR=g*drJ*#UX9HoXUL+k9v2mKP>6U7j8Vh+P zar5|l&$-qmU3W;jz8?Uy*70CUIcRVle82Sw>TfbF*(gNWRmrXo_ zm_r9WoI(f00#RD0BGt+_JL%HE^K>h85UO6y?rBazk$eOCwCJ?0bk#T_Dgbnw&QW(Q zW;lkchc)gt*S-MCo{UdLfJp|fP>qi+Ss>trw1&=>6#r?uz%UfB-~T4H?6tDnw*vd% z>}GD3`eJ%MUQWretqLK8+V!F9qY3W6=wOCieCHxFbdd?nYwpAK!BG{=+I#|nuQghx zxf2VCmO280bj8yQ7J-tSB@vxEkGs$Livrk}!_~>v@@3QKxP7p#hKCGWCiU?AXrq7y z3w!+qYb=5IT0yqlZO=;V%P-!Ld*BX^QD)}I%J?Va^zu!epsjWx;m8Oj_V8jwbK#mE zO&~(=kx64g8!Lw~-P zeVTV2_`ITGEmA;QdZhpr1x(C_d6YaXcHXc{QK6JC@3@JyPGt*I5nt?hc(4UB^M!Gf zk6$n4s}1w*w3=+cikglnD!w+Gg4EHjU>!wzis~1o6Xx}7Yxj7PG@zFf^W!s;tZBbW zMfGgzoc>$6lzk8v8HF5Aj@SY7I_7$bVlbqiG3f`*3KZ1cYXEx1^#_^Um zZ0Lcia96oJs!zaEhyC)`D5Vl7Ucxqme)I?WYZKHhrXe=3pR7U-vMbU2QOVqF<(>%rn-sk{#YH*qs3=nfeVApKBc!KykuHuI;K-K z)87Wv_BWl;@2ERl^p+4aPStemnBLRsc7->s=^gS}@kEZ$x{ZQ^wAih6lb$q!h|ERG zFjs{yk zYvUGe$lKjMw?xvh^i{*LuYR$2eRVgA9wRKOmWA&hDLqyIzwK^y<-HE?K5ciU;`^I+ z-zHG4&SKa!C%h_MuJHu#ix1b)(L>3}CO9Tf@b^vS3j|>1l8=uF>?K8#cQebPe|G7j zY~E+K-S3}U5YdtNF{pf!*{{N0$byN4=J}|EZRneN#6fHN; zB$M7IaS<)d^Ek`K$J%b_Ko_1ypzv!~5tf42AJ!yYBdfvQX!K}Ss0?_{2qk;^Dh^i| zYZlqA&ZyseO>^pNpP;9ZDLZpt&fPgSaMQhjMspO7^2FC{S}B3XZgaL4(h^FQU77AH zm%Z%;<|5xL=o)stEFs$opV0hba_}qmDU#sPnp_h4EM!vLi5lWr1%3SNU$U|`N_;6Y z#xJaX$%5S19nO!xZ+d-^{+c6;o1!F$RWo9nDhH4b=X3nR58M|-1kv-BFHMJEVU?ic zRFxT^FYBjvJ5_(!uGGl*D>V}3`$KA%e0>Z&h_(A1yjrRGX&2D%yMbjElXDgb^*2=S z$z)h_zqYE|8u$q8jtMW}XYPq(|M|7Xywg`6B3HtC|B1e=exWJJkLwuZk(^-k@Twho zDsz*b*QG5^i{+hl7UgC5J*fNiDmT|xgt@_2XIMb6EG0KxS)}u;p$Y#UkU93q|6zW= zsg2M!IZ3zd8d6Vq?Je7aR+=Itk;$xBC^<-qa7`#hz4~U>^BWmyoWCE*ER`S zCy~}|5&={A8q1CySm6pQqoS0(GTxw4s8g#}L((}p@;F)RKjsP10wcP1R2j&@xmkWP zY;RTf=kx%($>c^=D!TfN_M81*L&L{}ALBm~0~7R;ZVGU9w?yhCT)95Y>*GvxU)AI> z2E1-W^jA3ZP`|1vI#n8vTlE}FE8`e?upB@=BFX@vU*}+kxw@ta-x#kl;NI=bpaW=` zKKuKrv$CZ@ki>%UHI&hINd0QjvA(SJ)(zose8R`%^Wh&hh{7#eqoSW_ZqjRK_t4B` zobL@Ri&ixrs{iNYSudcAzcMAL-V!3JJ(cgjs=wR0O%=5xY<5N;nZOcE7X&;c9{P|#Q_32%I8J~YIofFRi+Laevw;)ci;fY z-SwMa7ZG$0nPVcunMXe$TR1>En-X&z*10azSB`FN4b5CTDkj(~rqcp(`AX4Jd2dAA zhp+1KKl>}>_7q0>M|uU_^PJtC%yHd@eF?sR>FaliA){6$Jt;4+_F-dPDrCvS zF$n{PW13L~?LE{H;dDBJl`Tl{Ypmx@o!I@cO9nSE`9G>1UtUVMU<93QHHT*-WW`#z zBK@01hNkplb@R2yE0Z%E1D@WC7_OfPmtiTE-q#O=-jf0B4Y0?&;9{C! zT$0YyVh0^GtA-7vzB7XUO+yMi4wd{#!c}&t5BWpCW>e!7k><-IZ6a6|KH;Z&BY`{& zJ;{IHtXr>f`_NQ~Di!vDVHaMlN?pdcW|r&*c33OczK%4=&g_v-khw)Q*+4o4EDo{S zsmP@qL)OrWf%J<7)#pmEX$7ih$_W;0Iwb2jh&~~3S)Z=tdJolb&Uatw4@{V7)kr_v zTQ7!fU$Y6Zs;a{UrK(p9sItUZp}QfP3j}NCjHLUW_QTQ!9!11e96t~BPu{pYtmKb^ zDXpIu#bKVH!X~SJ#cwn5IFn1@)lZ|R)~vVbrq^OIV#Jyzs=XxSad${jzk+t*@bg#o zjBs9W&PA5pbmVTz%y(Bm3H#bzjeH+g9;n&mMJOddSy!U=a?HTq|! z&Xqt>5Ssem7aGMv0G{|#&6o~f_M%mvwi%xsN+DV8cR zca&Ekh}|>IYnqPGPN$z*A@ z(~0j=Dp9>QEMpG$Y#puHPrl%3XUPAp?7fDTQuio6MOp=nr1m6I*VnQ__l;V25yLeN zMTTzh!eIRUcE&hLhITt@u6h5CX`+X`Y-sA4$>k%cYjRP4^hphg#by8{&~&z60PcAw&;@7s`J*~ zpYT&8ni613Ek;8j36{qyWk_E%*MtE6^-Ca5{gw_*#bE1KqcPkkZZ^;E69k`ji-5>i z?zB?%Llv*wW4udD_iIQ}YRO}f3^0_yq481Bk|R;1j@Dbxc45d+5h{b@-wC-Lb!;n- zVEPPyz`8gBIKSI~d&^)hiKw0%BpnLg_uniWJU1c7GMMDQS|?I{1ZKw!|2}aqZ+r51 zlY~P*o(Dn8_$`wTK2~e121WmG!Yx<2`3=Xp~%_&CzG@9-OPl zM6|{rc~%OJ)r_!>pTBSI?Q)e4*K+tBr(~wVsT+%R5z-zUnYMZ7tUDa9$W5d5TH4HU zY~T24R&e$PyHiRc;F*f3|0Z(&f#76oJ##)4N{MmVX4Y{zM4D%|L0spR9LJu@>UZ2d z&PGd>B)`4TB|0in2hr&lRxh6Cv87E$)NNLks?s(m)AF7*%pdBBbnH%H9Su50ggbZ* z(c`VP({Y<8W6k3oM3&nPGEf=B~{V)#U-|%nJ)+fXaRFFk%pD5evH?5&~#un zG}9TjoQkr{3at+B>K5BLeOn!ovrWDn;tKs;_vP|4)MMXS=goOYRE0I7V(TJissk^~ zzAPp9bnq+MNef!U@bKN!VQA9hDVx=E#i=v87i?j9Qu)7CMEd=<@6`t}GxNiJow|JN zyJ+s*SYhfoM?N%mW9MGgI&&0OUGWtXzbz^xq+K#|{N%Zjj>RHjrd44wP$`hvX|F7d zDbQSiPg(-|=xGeMymsYe8+)5tDyseXd(P(?PT6wqN`> zTV>(P3XoY|A5PX-hpYx!T?WiACWc2#Mc=cftUEKVkqIuTxOr@&=LMj8_~{TyCD*0t z!@{2IOl(goLZs*^o05!;Y~;dy`Yn{CS?Ux^vwg_K-#)1&_tdu~`ewEiI-a@ZB5(mP z2buJ8AEkPZkykoHgPR>8P%4ZbpIDq=%2O*!D$gOS;;Bo9=?J>3wBz{S{G(KcB65c8 zQ3+Q#!}OflscOwd?3x5?@0y*1@5la)dJC}~vB`hgLCUW?dQaI)&X5(fH35NDJD!MeM&0(W*G^DOc zLP`&+U6+QJu$MP0O*l8H_OR0!+=Kp95fd00+!E=@SPSiY2q#w&5VAq6+3L)&g(oXy z^O7>v&<%_1nz4DxzT-1*JDrD6kztVZ#dbYy%uW^0G6;S6;YTEo+-t+JEpx#Z#|(B6 z8B|kvDNTe(O!Lstvmk$Mo?cm5NXZ4K_#xzJRyVfXu$HN`GgD&@Q>}ML4qMns_2z(u zsmkEYJq@%YQOr8mliQ2befw}|iURf0MqrtFnOY)aXzu!fwKktUNC$U*k34e*W=r5d z_T57`N7q!`J*BkyMInbhA4|d0hD@heuc9g%)~ldOQT@4I=B(x*YU=m=!SvA(t(d`u zh7c)+3>^^r=kc4(NR7b~AMk1mM%V!}Jkoh1kG@;|^C&YB$!i!Q!SDk^VZGN-TPMWO zDOwLQdnJls%3aBn5-8E_2zTTWDd?&xyUCa{_R zsA}yPE+M5#MOf1@0y=ly5FArMb#;|iF3&3Ap74$T-H95|eqIHqRj(qh zzq%bJeQd|8Z$qx)D%&7jA;=b?ycgO$kS7^u)+dT%ZFmB@VAF0+m-6Szf)@^@`@h0! zT9!VT&Q}dxJmwO2Y8faH%;$2m>NU>lI3^qt^_2`SLvi(~xf_qeVB2qhOL%r}eOwVd z3!5Eo^(7{*&1&$UBB&`-qbj(yc#T{4?ej7TkwCdHEarR{^84 zpyA`)_;j`s_j(i8agF@;v8yyvO0FSKuW9( zjJxGNLAw~{v~sz6#&eRLsQTDit>#zNF#wlxYop-#?|ptH*B3k8ks%ANe=#x#u!;IKjfG7E zY`XHk>hCIq1vUSEZPVyT)R_PcItQ zA}sQEFP5EuH5gxX(rC+ztxL(Qf5xxr7Pl;w6!hbMFDxdU+%`LE+FdErEH_cO+W+UT z+`zHleSZ=up_<%@lzuA+JouyJy%;3;bI;bI>v`Dh{)6Hx+vcvYwazQ{KQ}I({i-tf z<9*3xA`>P_umH~mxfb>&F*Ir1!FwMz54$Fv#(7CyKX0*hT?n83p}M1L zT9_t2dx3<{b%o#$CpP~1>&;j?|GC1S{dn&8`)OTY)z$-TR!xqVdG&c-D3`6Ph5aPW z0S`d#2MTu2s?WAUaDUhi)dDhVzex?P;!@`sVm%Gz4q9DKO09Rd2pzVZzb+->l?ONX zQteV+eG7y7No6ie{c$lBS`Bmk1-<=E;Ea+z;Ge%jN9yvH$xg2X@u6BMZ{q&xe3hE)qXJSvf7kFUETyYlX#H8qqr*V~zpcZ9Jw7ix zuV*VD#F5|?-AhD$Q@N4kSyYl_ zQ@V{!XtS_TigDl6*tyZ>r%}%8R;zX}?swXg)6IQpaTC{;jW2s~mm>nNy*jG;*RloE zcA5V;{R~_QeRY26J-qrdbo%^x=&-*3=GUru!7x5ukuJNEIA=FWo}dFpK-- z4u!V|$L|Y#P+b~%!j%Un(}l9Cs;wuJ=a)wlNma_{mjPoZvqQ6x)_=E1gMcs!>Sf1E z+2k%|!O(v#p8WqKKUZjBz?A<=I)c|;R!a*e4Zt`$f@!s2vBUo(BWeeKY;G)mh$7zd zJ+YRs{@59mjeR~IA#(l$=7u5qRL}cYg3LB~3zdkXMQ2w2n?7{-A#xK79G!*fkGY0g zD;;i<%HP0q|5)tcy`!koAgNGN<2!aKQ?U&LH{HU5$-zbWw^UblTom3rv$ zOYfx5ADX^2N31z0(U&G_$c$`K>a7Hf-w$?kr%TxX&6^LH7lj5giDa4UgglNG#((Xc zL8P^BvVCZ{P@*r7gVJiU;)guqDJZ#=dT8!iZEKxO$h{<)2dcQSU0%{1gZg{I&a z?faflp9B0*G2^|GOV3nbQZU`InM+J@ihEe$ z^C9-ENNwIXmE!Onh{%<8)p+Ipeg+5ChjZDW{r)lUZ*uGYX>+8GG-WCj+l`d(EAB^8 z;~ChPS;ypb(yzpj7U84kotq1mlUJRDsRKRO>7!!NK$d;eG#n$@!lrn&-tkl4a>N$N zl8Ya2f$&qJ`sXjm>n+u!XrbPzR{C6sW@8EX6oA!EKW7&>4B8g5P20PFoWnXK2xw!A z!4|eRN+D-&WGr+(aLq@J+9vdW+=eTG2fmeAlcns)Jz3z`oxl+ z`$yQDx?aWJ)!LRUf~cvKq3O?z!WZ6&vm^~=dQe5)WbB#3B?oHnT-RymMAF@p&iRyl zHx;(%D@X>+EV)mHy*V1ATc{n6c%si5t1NW&WXPQc!5`@d>L^~UN?KY{G6>)-;}l{u zdr7}I)SxvorXUKG`%(C8JZAaq`b#>NHOPaP*^O@#spRreXJDRm)q#Vr`*!FHksJd% zadCR%Yqz(h_+MT5e_*s3U2{t#c0yQ@(<7v^`)p4pbl<&6$+__~-il;t78&H){#PFP zL*&o-6$wR1(70B;tbnoQ*Q}O*2Ng{auHld9)=PB_ip>-Fs1v8ki%KyIISvL5Dy?B` zX(eoQf_x=ZNBx0@BaRI29y*CoFR`~BeS+P2lkw?L``gIjtBqCd#d`e)j8HyQx>XWj zjy8wy@ZPDS9w_3dp+q+Rz4Eh^y!@n261SWF(~V=%u*NXOx78(dTytr1NSi@FWKifE zQ#w!@RkGw7UmU{J;nM6an)0Q@hkts2$up~gY=Zic(eGf+TOq3!aZm}>FS+@Q z0}mSJz?5;6UU9zU8Et_*zlCGtW-!;oM!&w>o95A^O^Soky$BYG3SRflH@?@LXM{=* zS%9m5K`MNEx>RSn|0uZ;STnh{YW33+B-I$u5j8#d7C#&OqDmhSRXuxyNd{WOVxq`l zpm*SPE2amuNe8MAmY7e9T$L*G7mq4D{pgm;cHvI04mMLs8$s^e&41dcs4Ycb zG4sCY`L{e=Only@vDGf;ZS<3f=4iGF$(`Nr2& zf3I=&AvnHM5-*AdPP9LZ6F@{< zCMdKx?5tHxBcO5a&=0>4Pa86h9DK2({G2FjrybKxO@Oi21Tr-{m)BYNw8$^hhqh6u zdS0uml9!M^lz{^)52XTyuf4h7T_O}bOu6rU>WAUVa&73+oxnqOzV6CtlNbYopTyM! zlb_gpt+vks$ovnC;zoLFm(OK)QRa z^_wMw;EpFA4~lBjn2Z&zj!PS27AsVgp+S9f-ZaZpjzZ;!^#Rz51X>Km3r>zKFDB`8{APepaXM?~&Cn zvFfhWp3MYLMzo~Z=+sqo5RQjRVpik#$=yP~39a~BC>6x_`yj??jGnG?w7E|L4>u^S9nARS3Mhf zEEPa=X>k3t{B+h#NY5Xvzj}u$lc)oTz$7p|s-o}LeGEzLpjWy*6x zYa`R_BTd|-j>;ge(*4j-7$4we_Zt-8<1D-58ecYHv=vrtZ6i)E!~NVAlJOQQ_en(m z!OG^4SHr>kgwdPLoSzYm5Cz`n-)QAo0sZRRA@tarh{V`K0f9C)Z1KzS;1kxEOZVRX z?0xH>#K2je;tt_)R=?bI+ z^G-U1u3no)i1W!=%gi+tBc$4BhG z8Vz2tXFy%OV0g#kl7LY@c|Cb>w%aoH`x=|UCt%tsv~48Ha3|M z7aQT_PxSDi)Dt_0Gg3kl;g)VGApLC%W1J46ZDyIr-!JFG@mw^bZ86ocm!mnke?Qvb zqkdWL9t>2otiXsjnOJPwfNh1aeQTHWwi=iX(j#ixBFsCpMf7{p<`Rq@q|m=3-HAN7 zsC2XArZ26t<0X*S%E?v?nmS%*8ZBgz88)l6b!6Izz5cY8hJIqO)ZzviX{tVAJ*da6Sy+UIrrH#Q0I`U-ML?>jf>-J;@WNHYwO zWzb30kz*35s0`AZIznBIA`~fX0?7YOC-Bj~ye+C9)thdTZgyq)|6>^tqyi(YxLhMO z9C*rN3Rw(_kVJdUp4!Xp&yOCdn{vTGq8h(*f7o!u9KX+Ml>gihb#24pYO#g&Cklnf z#rzb5J`e~3Pz?J90V3HNd-$m^{RhYdi5fmvG)5?kqMK4m@Nv1g#NI7`e-q^0olSbv zkyUryB%}cS3rz4GkWer=s4ga8E`6sg6Z1p zHdH-8J4uc~{BsL^s>n6=kLMGZnox@)$9{Z|$%?(+=$KZ(0A!tuXZ@3?g)Y7Gxw2sc zsN>0TQ+f5`NCx*R5n%H8P-KYY)k_)52vh~nO)e-Y?%(nA>3Jb8F~NaeBtV!wp3v%> z%$#3Z=+iUkIUU94TR8x9Trl8!*?NfDbV9!)Kfe-4;O;{h9}vjMM5H6<>-^?s3Z-QIHaBUs`z0p!s%<%BKRpwF8XLhomGzNU*)66r*(^ zZcU4#$BDro3BTln*27GG10m*LFE|G~fvUhzV6b-mMZ9l+zB!H`W5T7MDSJ4y0zcs? z2`+w?+BBXu3R2YWi{FqMQ#}Z-O?7Vne!|PEcd_Dv?9Sxu{Uq;r4Bkm<-trLO<#IgN zRMh^PF*hlPtyvplzoJGe2rt6~)1IfCPNZK9{^SomKxLE8jZqz0`1zf?8vBpQa|$Ar zIXN3pq1eGC)%z1kgh!*}nk7+L)kC;&ZN6(S7y}B8Q=|oZ6?ESE>bS2kEO=Sa&WFYy zBhElO7j(4WKQL9-VeBGC(N)0Y`1vQb(U?H_{W@OgA>hz>IIcxLN;j2LnI7j!pP;Im zDa}0D-#a;C%pk0HFA73sHar+V{97OSGR>hv3+~X5MnM2X9+mT_;Yl`ESf?T)B zM*G5O(65_wkQ_AZ^B}qU{PM|1ONfB#E$I%d8CDS%gam1g`LyjTT!2pPv<1LW!(l^! zWw3k5o$9FSZE;|yk-bIiB5Z7OfPyZJ8y-WSrEoJ{=gr15rkumP!`tNr%qdPEIk5(^ z2EYDYDn|9p4q~Ntl;crSRaRa?jUb8HcUgV2)W?Fe895v{!&Fg6iW|umZ)$vzp^KGv z22qxtkUW@VB@$l;830L6P8<8|Nz&`}t!_Po$eQohvxagfefCMt8xuSf9E^o0LaCC3 zm0*iHqy=TRM?z-yn<8ifx7VP3k7iC;-5O_%a*h4LaaHD}?N3_s;8-UP9cHv^`XRQ% zLD_-Jf!F~&A4)i%NTrxi^ZXR(^?J%DZsR@cgg;*l@4X5XG$Vyyw2{E zAnCswhV|{neCXg1G0E5v zUd6ANE#p)#o9Ox}*RuOc#ODYvWyx`bEe6HP!RD*ik1!L=H4PLec#L#j`P*h#>Qf3KNk>)xYgOxiE z=UD`%7tilB!$6FDKsq`!__}#I1}sWz4A&5tt=}t`orVmsTIdwT4v*d?(iLq~^kwi{12DoPY_)v+JMy-SxqK5@9_t$> zMmf7vC3%&7B-m{8#V%2!e^kC5U?;$ugNaq{yq{JW$W2}@X=}4BIo2jFt}-Mq@TMs2 zRLvjqDjl*OWqDaqvsgH>BCHPWkiP8|FklWDa~J>kbOiCd@ZYA6it7EMy>boioFbcd zG9H9%Esu~|S!0F}&g%YuWVKWYdl`e=#~0j`emUbQy)!TbSh?hh&W*?Knsg`{J|Yll zVT?-92R*B7@bxoVKN!(4&g2|4Hn#eHT+~m0x>-|fI%plu0|LA^ge1y!fWCQ%bBSuT zE^>eG?8V=EU2x}}X|XdthKMkKF~BR=)0Cm0@hR#MWwL&F)oPMsvQ?JKjfbzCcwv;M za!>I56G|ODKFP-@b0GjSrC$w(88yNGr+JP5X$hkB@bDO?`mZ{HaH`$-5mL1I2+Ww= ze+mg8H>S4#En`-pTm6h*H@-8f=O|7>)$XzCc$(o*PEvyEgZTJFe_LFZoyy2c<=7cU zS$YMDldI+8tAMZMXFin~ke4$RcU zugI$S4i(V>OFX<3XOl2L-x2kn`W_qn(uGtc@?~}(;R_GmKeL7oB6c<(vWWxB`91RvsCNJ9-W&OC-KmJjVFnNMOtzbwHTzbN>A!@0u^EIi$tb&M^R;nqN*LBZ47IhY2vIa3L>rp% z`_YFQHlrC+Por9!*P!+_t~T03F0EsJ4)*me4uw0c!+HamCU~NcJ@(}-nl0L~&AI?e z!){uO+4x%m&iCxur!{u$d~{cxH^o7Z$W))x&|;eHDEL2r0a}0Krn$%gz37&T=3+ps z3a0Dt`bL3HiI)ms2f4K4vAc%?JYt-Os7u-qg&~)QgW-#wvJnWXU5a`ol%uX@rZ0cT zhdE9H>Lo`rd4SrY61>IADJ7NPBSX4il#qw;-3^WOhov_Qncxk@#+TaSQwwOHj|mT_ ztwZ7a!z)ELNBZ%_5#*3h{I43I4`K@U<>hwwWrDx)3Uc2$y9p;xErIBinI7lR1&NIE zISlKs<&HL>rp73NgW!`{+1|nRg_VgFeo|~K9-cjNrTzC`-f)rcLoO0}P1n37G+^AA zQ;~~pF?nk?0&4OcH#|J{n(`|5JXr8t^Eidsn)kjG?MsSCa6k9ah>frR%)`aj)U%4{f}Z~(RU4*Dw@0_o+XY*z=CO+S?HJ&iS71^6Dbw) zEW*3?ZG&vJLomEltN0YWw=ag3i|G#|PuS17{es_DJRtr>fl~)j z8#@)fqgJjWP2ehFLbJK{jP0+b`4onCVl9wfRuHe@={72*mE1v#7K17n`|uBoxt)3! zB;K3Bj7+XYp*OgpCCt-6y@=20lo6_&s# zE7z#t6w%-JC{1V|n(PuS?4W$9%fjs46F8yxA@XwpGoFP&?geD2gIS}&_6KwAD*H{$ z-oArgr%1SPisXSTnnDN{r=V4Pr6}Q;!r1xfA3Cwe=H{0Cv12#oUQQL%$Pp;Gioh3< zRJfVWJ7wwT0_GlE{%EFq4rq)rT^fP12SpKFn?Iil$p-N~lBi0Mo!L$Wu}@|KJx4Zt ztqTQI>b%>RdJds4I--71PCAz6qD=-1_bNRb+A8+C;ia{7G;*>Y@qob8^g%Jxtf_D( zp6WGkNF3C@!|)izV=9ka(2V}*_AD=@R%xnU(CDTh{GE5rhr5jqFz^lPUJj_9^zpE} z7tuZa4Ud6-xH8YJTgJKaa)wMyv7*`vYrX6l;=tY;q?icKZ}bmt_dZijPGa%0r|U~$ zvz)9MSuJlB_le$)nNP*7ac-66>Grt5_e9B#rcCfDMk~-uvQP2j_?q6k%{-Wi=Fh|) z*Si^;k+@88K>rbAa>h~yBhevNl`IK%iRvM9GUYL*?? zm%;cHB2%SZECE+D0SCs#*!#j5Jt!2Div!Kc{ihPwbdqTsN$f;ebG=>m;=|TX{Tt#62Vuh5~FLr5O}UQ zs!6rBws?mz{VG<0^t!47TeKNP13uCwdF93@R7w@1&bOw%OL7r+23qLvbw<@Pt!e;9 z`S2q8FkYW2dsmIIPs%!tD|Pl~teRM29OCKvoRt*^2b4&<;M$*sY{^aX zIXwdETr?Lxu?I2DjpShaLeH2Xw;4<&(>Y`LDM^1gytPQkSs{rQDHNkZQt4L*w*k$T z7d?I@p6U22z#O7k5k7$A%OQ=we$Qq;^WbA%br)n`?^68Z*&Yqw{d4k1gu9E&5>E?6P0^zh+kD2% z%KEgf=f+~={$qP4wtLO!rBw%y2zkXmjLiaQ_>z0yBQ8;^G<{|GGjm&A_@05VKVP$; z<0)jg8vI%4jN6uH?QQ|$V4*Q{=W9FPYO1Pw*Qjt>Jn#KbJ|hcSL5(-F-Ixe^Mntiy zVzQtWCDP^CX3-_RRLVg#ls*9*53q91T@jBpP`&@hzu~1h-lrTDH>6Lhussk-j;54r zbt4bNL}e+XwJU<|qTjscUcAftFy@1;e*LH)qr00Px=MJ&W!t-x6zeTEW|tV;oEuUwK3%h*CEy zO>ffEoU+&X2h2>=_@3{+9RVCsZUKU^M)7;}4tst@jD`{skqBNC8e@nBHfdD0b4}v$ zl?*Lr4h?pWLX`uj?FmK&x3NRiopU2SL+R$e{Q1SZhCbNR@4y;?=sk9fpc(zUaUZIx zM;ByYD0u5AT_UR=8;u*&JR(Tc4cFWl@~B6lIW;)J_od*wGg!I|`Vb~sf~Xm3$>lrz zNj2ufQ&#Y^m$izd)~Ck=n*I&W{*$7R;XcEyO-{+v0v<yD79DChOZ2Z9YCD z6Vo8YU$EvY*Fs0sae=cU8hP(jGAqdM+IbB+EP9rDqN3&E3~L(;k2%86h2SW7z@O@0mvIrc84m+`5jmr5Le31Vt48|OUANYtv%7<%Q7 z(ghbqC?kYCE1WlLPWuNw-i;pYFB9as1VTiH_)Y0G<%2VQ!D6D!5yM3hp}3V*_~bdO z>wV)yq6eSOV2!x}m{xco5c}tD`WZq>=YkGYexlN*QDKndA+#*~H@%6xIovjhD&*Fk zRFQ$GF6TxFua5zowUZ_m=_qkyF>r&&zD84w`)JYvw=YODYMN`KyHXs&&5b=r8hT;2 z`d-!dB6>wdaXpW3QD;mCzxc!qEen4i`7H@^t|Lk6nCny*+Ygi%(0h(oZ`1ht{C1N| z6ZLR|1O(Fu9;*pt`@wqJ=jp`6$a^C-O^jv!l8dJU^QL}|54>&ep_j|J8j+0oIGL@Z zY;90q-Ex12)8Kny5QisVfpjRDJ)C&oJMoKC3J^&5(!=Yt!rEU0KAutdeY~RY)2BUN zKkMC??uuTK%FUi?MvKu?Wo?PP{-isCYlEaEKIX}RoGf@`q_doCuc@z$gC1w!L-YeS zQDq@%M!NC%)y4*Tja^or(w`ntLof$LqAX&)?TZavV$hSt-N}3)&A~{GLq~rE7tD~@ zsZI<)_I(+C=bJ3V}_un+;daE*FYW}LH*@a+(TmYz^vyX4XBKw@ z50W>XdR&6jA;SAL!U0dujlJR|Lgm@~RnGZGK|b#znat4i_QwTxdL7(pBZWPtyO;LR zT$uX4+$Hf~^Wa-SRLAGL5YeDPb1Pf{Kgj_i#i)^HpCk;_D7#6UZtSzpAKn%_efv;4 zy;W2{Q_>ncu3gAtxi8=trvR4xp=_zFHKklbpKw9$e9&t4f08HPW)cz~@fBs@9 zty!f-7x7X}1~qzwY6H71ZbE-NRJe!5V-!jO^DHGwU|G{hXZ6_jxZy{J3}2-9AE9rw zJ-raR@a|(%VH=t%4OnbJqpg93{K#1UQ<%2or+r)aWCn9265Y!F=`tsM5zeEa+Kc1n z(JU{n?oZ>uHGlC8{}7{`%l78{(()5xb9i(o2=Vk+;!?EXjG(`HENy^pT?F35X@LD$ zw-6a@{ZaVlT+>x1j=T6NE414_=~}m2A<4o{(Q=trFWY3LrI0ZP_1TeKR$D?xC+;Z^ zTN=g8doLly0T0(0Vqe4v<;BNI2rGd@u(&{l@TUh?oHwnLI2Azh)MPz-?`VV@1!(l< z=XAK>?CWFnx|gk9165h+w*75CKCBacEb(E95u@;vzPRSlFZ!?_B}smTP=tz^t^8f+ zAK$X6KSKfgntc(QDM=jos8mh`$M(4SU8o3!<^3&Q)&80;xV^`IYmOkQoR3!EnO`L^ z3xNlL-MQ>3&3k!KNp~wcV``F`H%QND=_FjpYh_Qa@-Z-?v!uk;TpCyz= zC$2kR$_sgMNls7W7l+>GvNMJlpI1+@03$lq%*OILYnGP{rC^-$Q|z_L4TR} zbcBZ|-NUcZx;s*=C1a)rCd(9?V;i$FcNw^Da#P=6=!8OwFU^co?Q=eI zFef=Cf1;0snStvZ3Ov0vhNwS5L~<0IzZu4jnvh+U;fYam$j5A?oCw)d(1LxFd?su@ z-MHvahMademwoL2#ok*5w9!T3qQM=4yB7;?MT&cY7I%l@Qi2qBOVA1-p-^0c6p9rs z8a!wzZ7D@U3DQDKaqY=}?m74IKAng2aG&;MCX>BqXU*PAzV)paEwcd@miG^+`Xmm6 zp3q9G((5axIJbTjgam{L5R2y&o}s3-7uyViwUewRb$L$6egr;0Dqp~;sukg?DJh&s zL_{R~2UiB-0r2thamy%;y%4iU*&o8_sgddJE#!^Pe<$(}V}hOEUVLoLnSaW~ulMJk{*@ zqa~h0f@K;nymc8;Z@3UTO(48$-YETaLw_}poM7|EWdDxr|G=db>lpu=d2vV-#%AiK zz#9ioHF{OhRiba=Ikdg_>QT+#*D77`9VL>V2C-sVmBu0_P{Q?+-vPWaXU~mZKgxT| zYC-Cjl-6u4d#FTn=SZ2z)SzLg{kntbta8s8cJ-SkIa5uyasR62EP#dI|8sPeW~2I$ZZK~_puCswzyZg$d@=co_p~G02_TQzXC-`K@I>b$o?G{;>G_or zHjNZLAJ@*Gy6Spw!@3*i_ripIkBJ`y6|E5A75P(G)+^GzW^*6NH*{BY>ulFT^l1^B z+H%n9a3FO=6giIBiUh@8iJGtHi-b;-CKV8uk*|0P*JUV-CumAhkhK3`tUd?y0DHa` zOQV_3p8HumpbC~6^pUUOpoFi;-#4}sw5}cycC9Et5Zj6#sQ2A1F#lF<)s|q*-B`c` zoI1HE%keBsZg_5Zxc4NpuiVoyqO7rTBV_&*t(64o;;DL9{P^2fyZ2+h`2q7~)DXF$ z@>Za&z>DY1!pJ6zy(H5b#NrldTp8~s^L1+er09e`y%qz9N$fN9!SPoZCZc+_Od%_pQwlP4Fit5`X504&im%`W$CdC zHen{A@W0Ql(Q@OzI}A^Goy~}y??ujdSL1r~sqc_9n-T6AdB3#z*j3=$<3y@X=^s3f zVNQ*Oi<3(UU1wacKF09 zkz%bJni)!&P6aTcQ$sNeS^9Il@yLTI-Vuq;jb zJyCXxxZj<8`PMJYcXH(9DSVn~)_Rbjz3}Ws!)uJ?C)=m`doOINMeB9B`=0%98tgtW zd)cM4DfK4zCa=&80a#%<<9=C^@JCA^V zL|ZXeevMbTfeU5Sg+cjxqj8Ufr@p}O$y0W$=Ks`7-s?coxYIf-1w5w){T+)E%RE7H z4O0+N%e#DpwouxwppcD_IiezOi!=LKo#@6uxD5HNH$oDAa!1w^Eja330 z^dt+MuqIfbQ-e%^dnen+M+`UR&Ne3#W0`q0{AZ5>u3vCRPHiU2UW;Z7hfDqx$o6r* zPN1nPV64-KU_5>q9=dOLQVF%v2;uhn-d}4L+-^egu%+WF@gLxezvth^j!@m(y8eYA zPU`i3Fs@e5Z%lCz!rI8$+4L-;eQoiPy+RAuTr;%$gk;>viAmXQV0*Y7Pt&Mr!k)rl zUNkw!tz(U+`(v9oUxA=(^us3_=JvDgf{>0YE`ebU&+mH+Li?&mkKJljSl~Hhv-jdZ-0D0c{aafY>O)jP0G$z9wqo5eMM}bALWf(X8!cLcsQS5_g+0*%=L% z{v|(A8ZOOukDC#^nb1A*!xhtR1at8$wW$4wKhgc+=`>fWPur^7`kL_t>%&HF5i3>M zUDJ|xLRWy2oeOOTNm$iKFhIyP7J;LIB*_H#xcPQuei7yGk-zxg;@0%O>ruWc zmVdbsGdBfXD)IdyDIP&1@mZG7fXhZ!lFTwvWB&k0A1Un4T&1m;^S$$EnxW07X#oOE z$N=6NhF^SN{R)%Tm&`Loeg8C>Dm=99`j|Kx1;_hbe7{r!Jt}_E%sZMW?Sj`bt~)Y4 z6vUILqtB@*o0sGsS`w%Mmqih(lmxzQJD=o^(%OnpzkQDyuO5yt$9A000X?-i@^t`{u4sL@Gz02q%NY)6?f_&K_`&7W4e%>Rs`w_ud`q z+C;`>VBq&_)0H1@BccVQM`fo_t#%H~v?P?vbP`V->TTc5U8S0Dmlxjxl_&kGF<9cl z)wyfl;;i|1eG4Ry>}TXV;EIr-TV!B}b?*ndBsLa`Zs8v5D?V!0#(Rzvot7>3`c@pw zGDNd?5KgIDH@Ym#Rl$no-M~`;7xE)In-}bXb|nVNi4XW_>K*jNd>jbs?4C0xC71DJ ztBcglv*^yG4fiIy0_q1LjUUBK-CD5tO9&k^RxJUjYR3KfGkUU@Y% zv0uo|L5WRD1 zfJDwlebA{{=J?L>EME-Mai;S9qu57aG{6{XFntSiA`3FwTeRVbP zGQs9APR)II>oTd{aQT1YlHi9w`TqcTt-O~Q>j5Gb9J4<$AFI{fNfssSJau@?p&2zw z^_*#I_#z8ea9Z>u=GpCYsywI->50(!i{~a47DGoWG>}tzmtV!S`t>d=;PKSbFFG!p zGJns~aM@KuWDOfv+{S&Jk`Rrz`sZ~0bZ4YJ@sqdSivoAgzf*;?#Y1mX>qR#iamrKA z-2}sZZ;Y0a2{-*qO5nE}KGTFDdIlKHqVX?MUy+QvsIY{G!eP*aD&RGj1?r+i2z8_; z1U*tQfns7!=rNI{^#A|K|4S!?vq$SqoGz-cET6KeMv$6s$5g-pOm+aVAU_sGk;S4& zOo{UMEs%hH#wBg!o27<6LoTvi9_6B+bj2v^7LjO(s*Z@@Lx?8_Ps9m{SB*Y>23Q5C zcGQTmAS5(a%w2?&V;QB5E3iakLZBq`K1)2hFR2=n!c;&KsP_1Z$FltAl^7nnw?krN z`4YDtoj`YMcM$JVMH^e44u|?83}jhnUTye)P2+OGq+^Fx*-j1aw&`Nr6B&yy#0Ht` zFM_3*6hhk6{x-SctF?VnJOuCTs{IMt3|CuhHZR$hLX&S{SrYy*|E6Cti$ep`t**|M zrW%gK>{FaZTN&i*tU_9kz`_sS)EAof4Xrl$CD@3vT+E`m%Zz>rnGkVy8oQ6?FKC@luN0mq%cBp zDD%R-A!Egwg^I5JSXAZ{)|vt@yi@k zDszRJflJ+vn%OVgPHbBn6V+1WNuW$jn+-HwCJ=kkT<*#sZQP9!r25bf6~x{GlL`PC-XuXdycr^QhFxxqj+{H)6! zFA2zW$fYT1WhKctr6#3hknlZb=_N&&ixm13)*+l)aEKCqg7wW*8DU;BoSopwGJZMw zxt+#0e3j@jv$Xa{yvt23%e#GsASqO{uNe$6>{yQxpLGuvfjTcj<5>@+FiO}m8<`4k zbkCAacWbp}IM&G;q%znr%eONQ?&`ogMCTf~I}IYIVR4oLe2skTvJ{Zh)xco%nyoLQ zR2I_4a%k4|WnV&S+%zDE)NpRW(&)oGT;lRAzXQf@O_1ZpXo*c5MeFsk_Zp>Q{6_bE zS8{R};vc|k{RRnVS)H2~J63dE{kconsIQ}2mSjdR)BebMM*&!D#3xl1YlteVb5xgo zdcbV{YSAVqj%w%u47tx>#KN$56_89uC%_7MkWz}_i5^#5ye!J=VOf0^E)%Ug%U4@9 z^C|%MvNb+7z&OiNwziNV{ddJ4fhou$D1(&HW!<$aZY%%K^jyQ#<*&j|Ttsg2UG>Pr4Q~{UbpCK?_mg#cQhAQo zr7KyFYv#&Evo-8{UqkwA=8?QUsNO^|;}MsI+JAtC<;v{uaX`?U?^G3rO#U8Ea;h(zS4AugKgLA1X+^848>8^*KzizzKQ5yj<3GIk#@& zIcq9BG44R@-ofUq2@T8FD4M_V-jq=aRteWZAzOPI8P83mv&=t-uHNV=-A-P+OGC>t z7LPj1gMKO(L5aJHputv4SZ5(w^eW|%q)cTUJh)O8bMI~^12-<2v@(0H%(_z=TA|6O zrZP=`EA2u$DO+s%Lx0PdC)&_#+K4oVEf8^J!__~Xo z$k|n)@cq5-3Tgfu`~f4eJQMPo?;M^1j?z<`!-CkIM4pV9idV4)|FXP~bxoA2;Pq~v zC+7w}uqab1_~2PUdg^_^oUyXL*s8Jb!%Muv1X*PpEO}0QnmjA&=tFE3$s=RnWXM3= z7`mCuKWY$$_ueO>M{D3C1ZL@f%KzdYVBu{AIL;8IJ>Xlkq`>J;Wh_(epvcI=Z8)UF z^KA4y9gSs$>W4B*$GjN>Im&|k3+gE3c+tBoufV+j}a#r)sM~!Xtclk3V z#M2RJpVgk%RZM0Di)e^dlmMJL7+=B6OC1VA1Id_f^UNLx`YLNmm-aT$G)prv<=cc*ov`=C)v1L-9FM^q^;u**dEf zhTbuyPcMb;)6~BBLaIWL2A?{z-|!7kWckzrA;)~tkTSJrCq{sW8?$h1fKf|_P; zl8kz0eI}@sO`8#0MmZWp+mbjM{C|L7J_!AQP?cM{7#w0QRn}(JD9AJ1LZL1)7a}cU z1s>^QHa*ETNc#nQ14iL^5s})3;Wsm_jrjsHh+1~F5! zi0F+l1Ks`lOOZA%nnZ6_kU~FQC?x61MeB~VqHiU;LRK_F*j&5>_-ujs$pvoBWwcB? z)MRQ|&dnbegi%zbfUdbD;&++cwA=U0_OyS!I8@Al#gJXulUkElYVY>%?CB9~IK>TI z&(Om|?U!(cXvQdm2uwv4L_dHjdR)2Omq5OVJjf3NeW}X3Ey$BxQ=U~+L$?i`U-j0m zJ7#X`M!m{w_JzT>dkzBP%LJB$ZKUcK56-bqNVF)VQpWGT)(ZyXYx)s&o8~!J^^qo4 zSiF9WV~l8izcLbGEk~lim^jR7N%`%WX5cPowFmh%qwya?Vqgm=|5e?#!Y{QylH{|} z{{W|q2KZyIamip@z_r(Z0K%V4FQ@k3j%u@xxkmSLyI*C*@__x`^ZsZN3tkN0>1?%Fgw&J`dbs)FYS%GI%_Ho7!U>#iLhD z*ZK!rNZn^Tojq&OXdg^!NM3sqx-2BbksJRJjNE!pJ96mPXzn=6GC=N2L)nnl+?&0|yz@Qxfb3lSkJB8fbrAyp^%-c__6s9Jz%5=xZ9ijNAqHP2A4$ z)sGsvY>#)$MfV#Ce)WIqXHuQU*%N+xX_QKA8_JC2@$@^3CYB{9$jk14mkgzLRF&9mSb{JaG)(Vm!jGpYsYLmu1j zeL}MqBos-C*WpAjt54YJz$?kddri#!56~oIkz4YM5vPov#t8~N17&@++9*#Bd15JU zOtA(QziVz0a>=B5p?K@wT%q(@m+T=7=3QFZZM-vHTJ~w`7{6?czLmX1E$OyDZs zsZrmle(~S@ZCSh^(|@PWaQ~h{lQOK|`~$|xfJ;}MmfH4@vr)xsL^ z5AdVa5g=9pw5qP&^NjQ_`#|(0XlB!e^s(Oqf>Pi8?XV{fd_Zxz&L8~cVP6t9D*plY z9^|!VC$VU}o7}E;rXuV}%mTN6x;D%je4;rCH>z}wmo9nkwzx{vgvVaPa?dIp#U7=_ zk+#U=ztzI;8c9WZOm^^7j;Q}_9N9-VBR0yMK6e*(afh{+r0CYQZ^{C2?n>of7 z`h0kvln2^!?(Rd1H`w!-R{gF64;Pj}g#o1|w?7OICoex!5!u(qDtX!$G$%B!`SV>F z`MD(fg&B0a}mK6K;MKfnmuMHZ`^UOwiI3o>P#lrB9> zsZ6qp{8erwkK1B4mBTJfjE_+0^-z{{(;}*5JxV@txxe|k*Ie<=qaS3M1l1ApWX#Y+YWR3?{-Jt zGShNB4I@*}@T!A%NMGiYxJ$be%5XnpN7nIX>X{IHSQ)4I35 zAl1P|=V5b-t`0*Rn?kC(4gB9Th~1a^4?# zt~HV`Bdc`rT5Q5!e`8l&c)@q-8R&1Xe&LSnnst*zdv=P-?7J9)If~$QNSIW?+83j% z12PkYJjwpZZi!oJFGhYzfn*)GOWaj<-XUfjjn84S%MEJ|U$^|qf5$gHF8em}9eN3H zWbI|X8n6`T?>eKi-sixCBl7`u%@mB|>dx+zcTX7F@@8P< z%4GjR!d~{Lli)xizOWa~H&#(%J9HzRh8oMke+T*RH;YIV(M)r)^VCE4J6m z*A3d_Q$d`0c~djc$lO|Nr<~+&DAbtR$WJK#j?9#vD-iDS5KXkXz&#amn4X@6vr{#l+n}e(JKS2C zVuVt7Pg(fRcir`ka)_T>lX`2_IfPgyxDJ%-3wwD2>QWq>6zc|;{A$1IE&H_B+J<1_ zHRwg@=wr*L!wi8|q-NE}9lp*%-u@Vx@5f2@3{LIfDv4z(`!{8SiHV{TlAUWRzcxmP z;B1NQNP9kg8CSDZMy;2giuBoofggHmBU6SbMLh=@s(<+UU`BqExZ`slM z#c0l%aqYApTJ~-roP*pipwUanj9~Hfb4hd$Jou?};A$_1d8ucu;=*&8KR@`GvZ|S` zXieaAu=~FFkn@X%e5osi3B$SI&+`f-E=Dk=Vl66mI7#Re3K4KM$5Lp)Gwsj_GulG7%$JN!wXilE1*A1 z^+>acO(#eJySbL#S2PRen!sT`7^kjm^Ta|Fm-k;$BdD#_vp(;iVRA&*(Fpg`gv;x3 zkly$0YA3HqdU01~NB`ZhcZGi1q?!C(nG+MA0U4XkL@bF1D$CBTNoV+&Cj+{RIeg5g z!*Uio8NJj2ZerEJpbtqWwoeI{Bz6V95N+tbSG3}GCGto4OM^)X$^)Ife1)il|DL~& zt>DYt!UP1f+^CZBF5#8_Dop`rt4QI0wfyqQusa1WMSE+p7j82XM?0J+1n2YbIGa5P z9LPLg=e>BNuZKj^P`%c|Kcmrb1uUG*bu~=dPNODNz9CZZU~IQkpPXXiWG;>y-W9Bw z9#?&yMo{lZV94s4CpNjd!2LX?8&8mw0042rKfo?~j##|}*SpxM%zpp_IERMIL#r+< zq8;n*)8+N$b_XLt`k?ss0h(Ldq~b`T1|%*~!?M}C`mqZOS-_b{<_!oBdU9(X{bk3k z&~C(lZmm>Za6;z^>(hBKnOzCQ79P+Yf&R@PfZ5D{tLL?~w6n;Cr0ef3mW8P8{O5qv znJaJ~cXk~KU}{qpn65{pH$mW7PNJwhOHF?OI;c0-Z@thn$e9llh5B5zt{{)Khna$o z*t83mnyOoW<&>0p*MaxYK~B2mfm6A>qmK6JUQr(MqD8Oww~yr98nUbk4^QER`i15{ zrJOfbWmAHE4Uy6K)N-V(AMU6vyVl>S=dtjhP5;eUirkG1n?J zJXgY(kX6%WRv3kN9vZHebHhhd`N*UD?)Un)*BeLf;ds$3chI3=c~c=uB*af{D^!wO z!%ReC^QGxlVPf6e(Z)CqMre#udL;?tlC$x-Sox@|l<#YOvvJ^I+0c|xF8jXn>!bTx zSBSc{kNX}#F&KkVO6;gS$ypdqyNBCOH4y~`j`7#nBr7Fl-(o8ZD{Umd!f!pqV=axC z+Q{Dyw;9)zdGA&A1V1W%;TL-Ht~ie3AD|^%0t?j%WnaRw3Ji5yNkBbMnbxsjMp;JJ zAISEubt(C!#bZj#)@?kC<-4q|maV&w=G1Pa{JxV(^CZUmw}n-wa;X{@d-B-57t2rCc; zJCG-!dKc+X@J!3ubv!sZWVZZ272+QNCbRU#2=f#nUl-Nj^?ml#RL?1#0?gzO+?Hpu zr_b0mXx(15)o0C^@0%HghjuT0ceIrrml~qPVh4Uqa+I%rtYJm|NO3eOsn6Z1>YEdZ zC@kPXb|nR2W*QKWt~9ljL`y3vKMeV!2B+B8(ef)y8Q8{TX)HjzS<-r%QSF*$#ONIkdac&5%KUn+C zhc1RGkTFn%D7|UMz47b&IG+QkMt5u`$l3i_A($K^3jPPEo56|^dw0D0Zi;S@;{a{i zDfwQvgXY`mF}|mT?LFy7l(VGUt5YtBLKw-U*uIM$+-y~y9r*yM)T9PBg!)}9~B38Sx zU7h>)9Xqn@kQu3r)|HO>=1F?aWmBPYi8{Zf=%HPC1|5#i177oVV1=N6czyca`m3#9 z#u)koS)NN%-70psQbeZ&M?!w2`;yS-shiO4i{9m^-&8+JJd}G?N^2H;sPv#vWa*p8 z+qtlse*hmuy5~PYxA73@T**?F{76w=?TGHG)Tdm8ga57J5pe=oHlbbf8+&U}Va>PX zf+OHDpo`C?FbiDRl~E;aSCo~9ey^AkcuO21cSw#U_V|GSJq`Y(A-PXDZsC_LjT(}V zGqU8EZnkr^!PuSyBGDpPd3nY*h+=-OtX#_CoyjM6wx2$wM=q$lQcUtcKm;bi=E&sm zPULod6bJ6BJxO4=o5Q3e=wo(f|O4n~J)X(Fp6TV-- z5^ON`ZwG^1o*t8Uoz;t*v;+*?mZI)DZcGkv&kegV+52A&>usfamFqvi;hoTVGlu4_ z@$RT}S@voy!F2AB^>#~zJ3S$CNc}tRK9-FC9{ztlwde&DNBMeDx{5nRaq-5end~aJ zJNAgpLyxAt_X>Q1JOzm|1B1*kR+_mTrYI9>(_@JpIz;`cM2!yjPvUNbh0ITM$f5Ww zgb__~ELW0O=~Iw@D$zP>B=g;fwfdxBuP(-Wd>P-7{st|u4*l8PM#z2!XJK-bS3>Bk zj5v*PPS0Ikk=mUoK@qRyyOU{cas}1Sx33}qR1Fg1s?F~9reSh8zk5R$ldOGOscc%J zbF~7dy4i}7N6QA`UD#gdYjeURU4YpOcWc4Z`0m51%nWhL!nKOmmTJdZJ;kJg8ai)bhT$r z36O%^epRzJ1twz8@RKt*u^Z!uY59|7^(b4ID8`bxQAg0@JWKLRHk~_(PD)5F>8oJ0 zN8v5^s~h_QkR#2v%cP=Ez_#!~68<^m$ZwGSG1Y(%%bG|1YiSw&hKxKYdeLUFI(po6 z-Auxw+wNFZ&7F3qYYJ+at@>)#`z+?Jyspk9QhJWke^@0{T5^&|0sk&bWwanTa{^;O z+T^wHFbEHLdZP8gl}2rzT7XKU+Z>wg(x@p0;WXYBO?Vi1TOB*6b23~@|5fai`i1vJ7 zIhKGX{{iZV+{@KOX9RjnYrd_=Ngn*XjtNhW$}Sx2!QN3J-41SH*zCAs<`k9R8+XSdbb1L^S5~Q2|rhmm(D8c zjXMIU20I}{($yV-zB&tNs|i$?rO-91Wx6YlfGXdbP;{*@98*>pS%zc^a>0-82n~~$ zqe0ZUW!~KfbnmBNOe}R@q9QW^m+h^rJb2oQ1hlS9lb%Oe`(+(kX+&d@fHSyzI^h?X zUH(Ih7Wyt+tP*;bGL~FgoSZ zZ_g6a>()sM?Kql(SYl0VwSkjRTU9SdZGNw6Z`3@7%heEeSDCIrQbEL4+NZWy+vwq= z(`|FDwbLU6rtQted>JZjlyqhbM1h&FI>|@jOk4ie?KhgWi-i%yk?! zg3%PvT3_8#o-_XVgFC0=v~8xC`F2KQXYk|6sMWq8r%T8s+$3Z;Fr3;9%>14TeJhW4 ziEluGSH^QN719cI8rI_1rD+v3(jJ;FN4xlB07z`ZNcUs8#xO zg?|8dMk+rV)LF`5Joh4XmxNMCb$pJ-hgp}3pmL}w$Wle?c3Y!%e8IHoSlZdsyP@c@ zfCq3@1_lOM)-TmP&#$v!GNV;n$JvWS9NXV^HNpubc)WLYqo4=U!%RNR$FkJc0H54H zR2vvlF{+$S(N70tENa_Zljp-(awC|m~w_j`Ab|sFYXHr z>N&k&ehuS(GK7Sq!DtB!a^vAb%mai5tkA>JIP?>VNE#H1l&3oxJOXWKBY@BI8aal# z+$}BHD!uA+d=fNL19fTm&30nUVmu3N#8}?f#SVkYhfCxx4l zQ^g|t{;oDVn!CKDrs39>)u}@_VGLm>VuGyC?i&OcmYgyqdN#ao^J2ug6Tcb|jI`pf zEMLhpoY73X_`&2)1m4wPbn?*Z%R4s|x;@zii&F!bpx!HX)o8;aS;~4_t`?(oHyWrj zjurkD^|oVU_Jz>`7!-!vghfYh$-rO7rTmx4{VEHQ`8ubiUw>a^Myk`UhG)0Fo~9`@ z8^hrzZ3;cu_+xeF!0C+N@axOAkkwe(m$vY=t)Il{h=!~zX>kl#qNpI1t1Z-`4C}_! zcCu=g(Hf2T(w+5P=VRBa2VGnc1|47!iHNWO4ZHSdC%*J5lI`=Jp8GPU2-xi_4hz1JM$cq|(-s=h%h@o$aowH?t$ zIN&*rft=3!Mo#W9)q0mt?=BNE6>c;zKn|JO@2a%zi&i>k8ML0PI$*Yh9NR@hWQ%=p zAJ|GP$M@MH_fLAdM2|&cS*RUk9RknRzttlZy=KL|O(Qke+M&V2Oj5@RH{-UM*BbAY zRr*QiNdlDr{8E~^5Y%wxDP2=c*9me@T55P`D~*pYZ^n2aZ6QsGiB-`iT-9^?$<78v zT$|X!fx+V>W)x9xrew|dfC(lpOIArzvRz3E5u~Ft^ky-bXlaJ;dRWgsnKj2z;%qF~ z3Qr|95G&@8N%spOv*Nxk?Z+1`QsDLn{-mk42D2a%H~JeIvD)>{ORVpf<6Km|-TW$( zy*o(l?>v7<&I-SzQFl@Ivvw(M1}lEf*lXLcNgz(`D{dtM;8^b48?UF{Th>#1^Htlh zBzq0fWsQ?7xO@mV3lILmA@j5W4} z?;D<#6yK45+5ZyS6Z(Xo6GZZ|n?t;H`IT6v*jsxk$mdL^Kh{eOHYYT;{hl<8qM7;2 zeuT};^lCVTOBvSGpQ>jq(Lzi5vMz_8C=2vPr*A4J2GxR=*XBOGisSS0;}}GN8E2Lr zMm1#lFQIG;KGPfPB3rTBW^~!j*Qw?|aoa!QP>FBb{FtMtVDVa~4CDIBQCmeL>KyT) ztKCnrSlj#vk{ML4321-JE0&*o#0(632Oe*C@cd188@Js65k*x3$3upn95X%kY>*pe zCeMl~ApMPea^>t{|Jo2*7+KmUoX`8>O1)$AR_Ht?&W{yQcMi*tsyanv{tgh4Cx;=n z*dPP6p7q5_R@pPXwd4nmja(j~Xwd?z@JnL}QZ1b)ZAkBEl6*qFy%R zEr|VEY8N%HmBu~E3x)BZ9RUL5x@2g0zU+58R)6M{}qQ^X)0tNJ3Np)hl+lAG#%- zj*hBr6F}jAtK@_I@uzYQa=Q0}x&o3f^y~4}Aq6en7WRR}boxeUC=^N8o7;TE(V6}L zMz5+jCukZr8E?vo{lvH0W<&z&nHy2ClQ(tXjupunGUcEvODB=wbf2F>A|ha?COoV&m_ zjyZ{rSvs@m9KJ&4XsFwp_Qohi^W3x3dGYVP$gZ|-ZFtCjQ1yrEYqV~ogH#*7H?km( zRh~f$g|!0u0oyfJ5(HrB*dfCRlGu@3<_-q3j!rc~)tCC* zB&1wP>_E+{y{!3c=&3Y|slz9*`_lv;OPIfqJ))`$FYEjGnVBg~i@oEQa{YO7d1D9# zm7%9&oTn2;?PW`=eQ%*=41xy5;-?1Q*sUE&)fn=l;i2+S0Kd#;`|$PRGvXz`{*HRz z;-nRw4ccI==Y#fbZo<%Qt*NCH>Y!Wa@c>;Hl< zBr{)1M(3}-V@mw?(T030TrO<6D1>wBP_QG^2P1@26~<~@Mnokl^L`{xV(txk7;xOV zM?n7j^By3x)HPA=s}7lU$POkkBSzYS?{%r}eJokVcHmC4R2LwLZ2{GEBbMmLc;l(# zn)?z5TGdljDr5m{)=4<0Nzffx@U1WrF8+frBYT?l3}xX4*G1%fRy(+5gx&PkffPPtE>;R3laaS7^r zYR6z03E0f+=Yh%;Dn#e|&=MzrGy5UFvjKjx3b09pij)l17pOWK_NR!N?xp#~`l&i9 zM__GRa0K@T8nF;eN?gL>Qa*=H1D%V|Zs-}!_yx(_&D6Q4W1V?7OgXo-%I`kAkcic~ znWz(yqI0wS99P>tI*?U}a|p5V{fjhcnIpXNmmweXNrKckJtUjB!@NOSMQX^s&+v;4 zMke-xX3VRiUfh-b5$Tt6#3&4#0hz`P^GM}ay zs4>?@64mpsc`>X+OFj`|;5l%`fKR6fH%Mg&wW464S$)hx3}o&`Spv^bJgn<6=MXMy z3$!FFh@wm4YgDbX7hVO+M<(E{fjV7M1=$NKF>^C(%dmlqq( z4_9^9{Iu+9=eK0Q07NOf%dq0UKnwbt73i2Y-pz+edzi|QzhewWEB=DRM3O9)|0~yb z{h=h=oDG86ynC|y%xMs*^cs+5#An%G+#BlZ$M}SAr*MQr@?CZ4**xeJ&K#jau`$)$ z@AogoSb07Y8e!@CSs~{}G(%wX@mw#7R^UazNl8nkdY{@tv+C4<6jt`3wlk1OKat`< zPL(PUW!FZ#d%cGk?$@_F_Xxv)60I2iG%g{*hYT)g0`K zJr>VFfKzKIf}%Fhz;->frZQkWIR7628JPD<(wl6RuKJnPR{7LZRt7rlSkTAQ?+4Su zX+h+x1V83o6qDMZU)~IIHNGoUFg=3om)DJXK=v!lQ79kJ_6A!C1u#c1)YzEx+UUJp zaZ&Q^RVsdh-L0k&*bKsQ%&41Nolj+K>06hpHe(gxcmhFPmiXM^}?^9jza?tU55_2 z)k`j4KjLDqXDQ_IS@0UCAg-^7XK5`&(?vlNx%AHS;h>;^P-^;s@p!=(y>snq=l4GZ zffa>J!?bA{Lz*gSdc?T|?N`GuGhWWOI`X{iitH?mCaLDC$PY9sYI`z7vf|ih)YEm# z9e`Ve4{;?>(mi!hWV0ScIfiuRfzRax{$A|r$+@|;ehqiru))I95vVqO=}_@+h5iiBeOa;|%V?^MJ^s2 z2#5fGo5u$(`$=DVy{O7^L<1w*K`$0ON09=-$G7i8x~>qmJUK zXkSo-l~>{)59)Lo1yJfSN&RtDtPUDqrlB*;?o~RA=0rDRH?VT)JPS@Da`a5=V^O#D zaDxr;7B=h4)sQ+7%@Bd1`wx*5ff(PaddJEU(d0eqHbARW!R_~6FY;=VaOP|lQFg!1 z0P_rM@nZ-myIv^5L^7^%ID(X`*>VpX z0%K;m5N&U|maf3bLc7?hE{bfsNQm$VY4*d;;Kn-2q}R?qKKLu~bFoC8&IDoxq=X6_ zt3n=zp}sB;_frf6lhK`R(tfXt2ATT%M_7FD(BFd}n@u#iB`HjbF`k#8Fx!1&`{184 zhZWa)ja!hd0iPC(xNNeMzQW@OuG-U>yEm58Y{i0*jqiqKH=}ihsHH#@*o=`b*_1pv zNBg(r%m+Op<7xCXWUQ=Gs`)0fG909e$o&3TH445E?^zQOQ{)Z(Qy{MESTE|9p>zUW zta&q1!2){~lM5y^8>i`;PS9sXyT}KZF_+4uD+n)fO_&8<>GchcLn`gWdtp@e)1}I= z_?916Bx0o4?Ij#1!|z?J?eJz(g_r2=oe56OR4mGCT)nPT^xVQKz)2cR2G~b}HjUr+ z$m$Qy|H=g{jTFA7U~A>gVS6 zmF7mVE11OF*^CXwG;exDSY_Sb^qb)`rz2;auK`Ps;fTtgpg(aoTU4K1B|_KA zMxF@hCYiiy+N!`V3cf`(X7|AU>MZ+foK6xxg%o5MVt?(7ZOG`0z7N`8c}p^lwA_`J zd)w&%YW(ZiFC1jPbTJ;zlEcO7*V+MR-ea&zA_8K+)yt1vrvCJ?mG&s_IK~6mIYB9R z=q5JCVzsQp>7{O5<}TEm_L-ii_;`0k8=Acx!q9D4JxB_i5hO8V(t3q(8rO6W2b>lI z3Eyf|V_s`P%nk8tdbnO+c1SInK9F&AnWWPs{=n4SXKw1$5c|{C#+^f+Dua67ure9- z=T-a&vawhtB9!~k-0Eh8DM)#Q1Adl=ik;GbXk(9x`Y>+A&dl=Pnil%RxXErc6#1&( zbJZ5B2=C28=4>oknvm9e13ilL`9hSF*E9DWBbX{se^GRMXOMnZ28nMZRc8YB#@K4I zCm&zY%`XJoyw0{~Z}xdg9!g8(xMu$CNNHMb%+>4srvj6KC+W1YHS?MP(BSXO8PVlv z#qWhm0@(_rn2qV&jg69cxbc|iuC&+JTS>{qgot(?x(<2*wTTtwJ6Fjk77kC%_-5|h zKSSWgY-g!#r^k}g>HmYJ_l{@#d;kA!HEZvhwF$BJR*I^o2Tck{}Bw>c;dXKUw_Tiq&7GdS|f-dPUGCkt8v)H<3*kZzEP=Z0*-5 zXJt>2DPY`}u3F%y3t-gi$(?Y;d*}%rb7YzYOc3O@C4y%+jX2nk4wfD=L?$YfS58|i zrt40PRO&|Sw13O&lR89Uw7b(vUkzkA{V0p2VSIet%chaTo$9rn0iSm0W9s&;?aX1D z)R{{8k&u|o$I}72YaX<^8$LqJh-J>_F$o($0UC;m!IBsyWEgwLe1BY^hUxP0i;7HV zbM~8r41)ACxPIO`I;N`I@Z)(y3o3t#AlDyqIDn;Lb| zFGR#{KA{7iC4+^st#ds_1y&Px92R#3{-TrIND5N=aZ}@j*J}}ki*qKDD32c)Ft~v+ zmK;pR932Vu`#$;pMg<>fS3)SrcqYgZgvIGT(n@n4Ll=~1giShc8@y1r1UwX*(dVx@ z;A%VK+(EG~29k#?fyad`l3oQs*#nr}$>~0$B25Pl7s4sKgI*M?;y4yZ)}sI(c_S{> z0h(J*+ItzKjv4{4wgF`;Yr{sl>X%}ZWV=a~se@&cF)xSu>8M)>;#5C3>2${%_4RC9 z3Z5OT)vhfjeSl3a4BvOdBUnuZ{LV1z-@f!*bOr^qP?Pzq`)V6sZp%#aUrKy{*!O_g zkUAT)%~OL(MeHtQGmZYyIsP?9rg?ANdG(h1(9)(yn+@&6ye@IFc|U!t>CZg;Lqq3e zOMZg_MVc2<(S9NWnu@?xa6$TV?td7RTs!-KC~99!59w&&XWGg4f%3q21KfO`_+Qj8 z+c_jK>h+TXN*U%H+*jo)hKwH3VaW}QEoH{w``IC#o)Eaq_>U4JEwc0@^nn#0Bd%1LV{gZhE~{wGfuJXM_tAxQoZ%!VeRa8JIW>dcW#c%v&n$%98f% z%a66k34ibHmt5Q+G zgRV$6T_~CR_A24d7Fj&*En|Av&DOa1Id&Q7&{A= z3gqZA_`Ph7+Il0x4S;C>@;~eRlU28|JYR6D_d)Uj+oFp4og@1Pny5tLl zcZmEZO@y9@g#$dyiya@(C-^;}G-I1;p7CL5jgK!P@djuUsi?}Ato8Kqe&<(k9yx<7 zuBLxv*YJ6BaFQ2Zw1$2h4RtTxuoG~;gsU1xJGkI`rj zDgMudv6df|`yvS4ZM3d=Eqx;tTp(<{e90sZyB|da>5t6Yt}b0u4TyB-Be@kE)=J4u zuSE8tCFL-_%$ba`&gysC(~c(!KcJ94Ri@Do$S*^NAnj#uZch)^02Et_CDf@MshTs) zG`6DT^&iH7Qmx$@%7f~W5n&0jva(DRQ~-URJjMCppJFuVp4YC$E-We1?=Y&&gY$KI zd(>;*&O{U@f8m~lButs6|J3D8XrSNam9M^SmXEApy`=th$87t*Sg-UD-~SSgE#y?s zlMwulw*fH)Q+6!Cn&iOXf9WpV#3fs4eLJdt72|R`4Y+@v%PR$mXo_%+sF!$yB#&p| zb*KXN{T6eBgh9Y>(i#FGk)jd85*_%+pvi%c#O^DYzYc$%4m4VmQFKixmtK9P0W)Xt zgW5&zx{~l8JA4cd@2hhHaHD`ufZ-?^+uckDy5?|mhSYxC)M|BR*H4|A3W*_EjltP8 zdxIlwQK!^SnJ}?kd`+lgl4D8VAo;ZOCM|Q+@zdx=Bc&s)NP(xWp>f!vnP8#bFRU4? z)wiQlY@CGV9^NMknz>&AF|eRijK_b;sFrx9MuqYWNvgP?i^yZCmcKW-pEAdMCBw>n zc7}5>;By>+~I9`P*b$#{p!G9+&-k^G9N7dW>VI*Y24TTwJa3NbcIVO6W z%yfhLE!RGM*;Rs1Zbvkmy0<}#tINwvC3ut$>;O~*kj0p{7i(}sD9%=Tt>-u|c|^&1 zGen-oFVRWEo@k>`XKWPxlidQnPY0_>l4&ScC(b;{!{G5&wtNYGPrhcu*VDruHy_WU z4Kl*LOq=XLcoIP&EbF#`db8pnA&*Lkh>NyqbCKInfMgeRw4p?-GDO~EeJ4LDb{ayb z2e~QWTnih2(UJl0tTWiD+AfFv&G_HmdnB9Z7fus|(`DVh zQS^Up6@3-9vrDt76X#5WG4{(^q-q8Vk^C^+&n@e9*pSG#;vyfL+TU4R1qsNh_8tlp z#Wg3U>i?{oAkDoGXMHFcnOCs&ojB!xR}!Ch)>4^RM^W_BBBmUJ=Z|_C3+HcAmUNCG z>r~$e2JX7@YK_0xL!?g#OxnZufHSKGTTG#}xVp+02!?9qtSXGg*R_X)vhi=xD|gT* zgEwaI7D~QIQlf@M^wp|_AeeBlYL%IP&YE&m<@Z<7MUO@6;S@=p-u-)n#pWN9_Ju(A zV@~;@NWq+#xG7LiczQ)tEzKIG#kxEvahItf?m8uB;ZG~cymzmN4y|RDkA-5CT5Jw} zNcKd($6U^x{qjXk^nMasfIkPnt{&S;DSb4@PQUi*egb@}Zx>bj)f8Wm=*=jm^=v0w z=q3M_S>+!K&Yj@@F#LWf+tGNE#_oGEJa>rK6$o#hwJFE(sk+dL?(|s(mKcwNmdKD3M8jb_{jv9iIi>MxD|lb;5-g z*;k>PeIa=Q7?wdhM}(-oRj^b+IJ@HkT3Ge%2>NR@WB(szgB0v4u#xl0Xl4!#W;qAzP z$*bap6YMV8>tZ*9gY;Uzp?QZv1s@W=-cH`#sGr={L$@L?vU;a)lP_E*1z%yVg4_ME zl77P;mx!MIy8ZaW{6cO7qwj6k)7%2&jIU{2pl~cOTA#nb6U9pacfew@|Jz^A*KJit zjWT74SASp=d9xWE{JUI%juxmnUN#QCG2;!g`?SSd&uZ{ZFOUauwW&`+R*cTj#O&AP zTq4#hT=dzlm9;U*OZ^|rf{IvWJzGSxP7Z8m$k7HdP{GR#JpW@S6reiP$!#Yea=^nl zm!h7t5iF;yN3g82kU;D5p|v~QPOpsz_hPlMZ}N4=W|O7XiJ1r_3G%F;%Iy!sF9+dh z>Zm@t0Jp!VHfm1B82;N!<5r6-zf97y@g^I!4C6cYOkf?+?w_8g4#H9~{j@yh2auCQ z0?UlwY7edx1ptFyCfIiSLA7s&nWf*D5N>@9Ik{vm1eI8dJ0?%N|AsBA*ZX+>!sqeE z;%mZJxw39Fg`=wszguX;;PDT`(Oz^I3{E@0`*+;uqZ52L@C3SN40%Q@j2EcW9|Q9p zU@Hp)S<#zjl{&M3i~l6-1?xWj9wlA%F6d3zmNSiV#R#!J%qhdDw#VeRf( zwE^|Zy+eF(P?-HSZKcx@zJv6-E-FoLhMnC7-6i-Wr_J}K`UwUIe9|pTxFN|?dZl0t z^yYLC?$<0i=NIM^Zg#goS(s85ZAHvp--*3Z1arB@LlYN`w-Dl8EUP(5wy(hD$X*0} zFu3uC<}2{as#81Ep+U@lSc0+Z*so=~9qNd5p}00^4f2ciW%!d-jb5Qa_fylQS-i2= z5&7;yzfbOTW)2be8UkY+xzdmqlL#y699gv`u;%Tp!(CMAS^#y|{WhmLze&J~p#&DJ zPQO;-qG8EnFTPL|8)*yOTS{_pAf4O7|4wQ=w3j}$blz}*Qfp=Zd2CFdz@)sA)dJI{ zU?JGfzx_;h_^Hx(sMhE2U!IZpGGijG_&15?kzwwwSHBvf*3vs&l=O~|lm_EPXKHDN4VOMhFb#tm)K=4eGRC=9Amw~r zR(tD5(LKXHW$iL{MA>1cBh8;e!jPZF%;uV7S?oGwlktCNdje^4LS)hik|{W$F@_+{ z`&trjB7(L267W+h!92JIX?v!>7BlbI`exZ@F=3}C)ZyH?paBBe7Q ztkfO!oec1wEA^5}0e|t3OiJH@TCIKUxlJK%>^TEC)h3}(R7mbgya0^)+U>sYPP~ND!J>U;YdiyziM7TR8wOyzt%3zNtade5}lcCQZ zUWn5%a2~D-RxIy4RIFVI*bXACaPS#nBJV14yfc%z;tej0$?8pcK|`7hmRK469W99S ztw7u7SDvYVM|YutlNEVRHXD6eVZb8l8T|5~F0tcL2yUE2~S;tZFs>%c=MKL;$bPL{q96sMtY?KL<=?nuM}{#yLTBH7a~oRXFW zx99owp<57+5eJnEC+7~$ZWMbRhOhi_QHT1-0yzDkW2ME1Scl$*#w}zfKPRV;YBShh zZ(+#ns}UBq`Fq6;vC9h`v+{@l~rV- zFSJ@IHC{d?CSIX|u-q7ps+=YK#mE4B@>;=6%&zWj4h3I}}H600s+@aCNqd zQKj!L;;L!8V;llQ@dVEEHa}Lo12UIr>Rpd-fEDrU z8tmI_NFsjBUF82IFa7jJZXk&jLt}R3dP7~rOxYus^DMTSkq9!*jXDP1JIEO7 zN76`6#}5AJBoTDIm8gP3R_-&9-R`74Mn*|ZO(pMNP!rK1xseIqRndprc&b(Zt3qLc z^RWOXsqAoP?S2%=oqElYjah4$`VQ>msqm=+LheX0R|e5{aFfgtDH9vDRsT8qN+ta2kQ{$|Cl%*_<}v3>#kESmbnWVTWsRM+!*`Wo~Ad@ zv9;^qTBDmO*2GDM9E%RQoQ_N_a%^FZ>CEHPv%6Hx^b@I)z@k+ddv%)F--h@n!JN>mfB{s^|9`!e#VG@fM2pBFk0zt92d zD|1B@pFchCv%fl$P1p&=x(<2U^@`<0PPdxEKohOyQcBW}F>ltqXe_Urn}n^-a^(8Jm*OjM<9@4*A2Oqom9-Y zuyceIT?1h-0f0&<_M4^{_-D}q~eomczU#O+L{_B4I$V|1^ilzk{=evac93r`LE-lS=vb3j8t zw0KzvE;5+LXvdIX9Xfv03%k=`TIQR`PeNMc$|K8AHs-$eYwLSjDPSh(hqSe~%Ex5a ziScTxo@HNr>&AW~+@dRyfOfz!CPq?-Y%;zm3!zot3zdp^pEjyCQTh z=giGuGfc@DP$pY9wyp7;y!o^C1-YSq?B_gdZ3ShznD$!$uG`u3PJx&KcBisM%U?g` zW3Y8gFoFqeGZ1w!tY(ZlidemoVx1n5Ei=+qN>r#ODAaCrAc z6Uf)|ex2ov@G|!&vB8<-pCR=jj0&vD)>Cjdxem=A_O7twbp_bR6(PCb%Qdlt7?nz2 zYWsO>WZCq)RDO@?5l%7uhY>(^n_%OeIpK7cX73A}B{y2e z)i0riNMH9Nc-`wcoa=*J?{*jMtRPtR$;SP89teP$v!0W8za-xst0&`$Jkic1He04N z`9;r2#EFKNMIFZQ`G@d#S{NqL62f!l$~CJPoY+bw6paxxjdgCjJc29zbXK0-ekJ;D zS`~O&f9_x1h$A!D0$ckXs$9Nr4z?0jY9#hRgteM=BmTqi6yw1SeM8Yd`wLlio3Zu3 zEO?N?g~}Y&!dCA2A>Ki(v)JTqN^ZO1k99&@VWSqCEyp>V=5rwcn`xk8aA!uI-&lo$ zp7{yM#+S)u0eK4LBIyPr%5tm15_i44u zIRM(2TnR`?i7ASR|Fi_Oy*j%(t+Z4~9m>mkm5;D3-6!ue+l*$c5_WEItPTQ?Nqrtw zM)s^Z^$!3SRPWdlp>sY54&r{({m>LYYCuV=Fxw-dZsJZR_tIEmt|#~R1mf9N{+lXr zZLGnmk!P4ZMeSQ8MXL@e9;foe_8ECgPriIs^043|<2k_Fozis9gwtKL`tiBYoZDkp zft?HD2h@j7lSRSdWzc7(ZMF|NK=RB4*K8`CUilL1MLWAU6!00Qa#3A{=s4maF&ple zgrEhTw{S)Xct@l(J%B0T|FqorYXfh|rO*}_&OuYEi_cL&F_Vwrg?cA5_Ixz9+nsaPfJ;fTSzM8pOqFwkBt2`tp%vPO4NVvO5m5XevELL2*|v3Xsg~ z6DoNxtxgby(fUeuU09j%!*?F=g!5YV{Um}hR|uPk_{i$4nAvKN>juV%FS9pRX`BBG{{X~jHWJy|c|-g+DIx{nbHf?X@vtDDNg z3^3TKqm9E_-<`USEiL-ee<+i5{HO-;_4tlrg*oQ^<(zD=?|Mn5dN(b!fLsqwfv}ts zc}pU9jX#V|z?E-Olp|Vc;f&U6?hXSuvTbZ1%Ex^Tqs2xI_%mxlP(V z>%XjNXP}BS2J-CMsS)-wDB2+8dn+s1G4_Ayq7qMQPlZ%hO%_el;&K zTABhzKJ?$Fe}Bf-$6p9S5eiy$5E@<9&Sa6&nbE|Ro{4RD$9=^YjG8nyx%TsL^IEkx z>wWLCO`pX>xaA?(3XlxsAFk0e6PXGj=^ov-SmRrC!QE2q2T_2RwFaf#LXk~9eS?*g z)6@t1sY!eUS2*psV{d=`O|LF@|GGK6_}ue0CmSZ8wR>eNn~I^XEX8!%1f4NMHhiWk zJsfba+Jm9I8QHCBN@#peJC!;~OUu%>_wWBiFCYSF zA&wg*LdTig0@~_E?9SW$HwU(x8uq3}Ab==8Hh~sZuJc?3{z&o&0I`^Rl9Bs`4OMQh zO-)CnqLV9VqCK6J_F%teO!9aDCtxecN6|9ld#-Rmn_C8YNqK)agcw> zZXYNYPG74)zL-wD0+r$rW8PG>RYOkHXn|VOtMyMq2@Ny zrGJTlI7+0CO)_F`@c0Ybor}cCtbGiYD_o71*cv_J09UPXWIy>923|WqE16r(33fkQ z6DPv?$-w9Sb9`)0f&=%6DQ%tByziWsCr)y*QzrD!P|1SF_p+mwd!(?E6vGsQXc<|J zDTk@IZrEt+n`Jz#PmEPk_hf9%>w~@?e`nSy9#Xt&=GHMRed1#%sEp0s3PGaB`b~`= z2*qlWkJGV5cF3|7?c4^^`5aVTzve$*(Oc()Wh4RvsMT*XVxKlPpMJnxyQCf~cF`T{ zH$aOGVar%`KfLFKWRbG59(b2s2A{2FV?Uoh1I?bm_5}O1TSSZkI2w*G1;3&Jzf zXW&R$QaBhYJS{i%rkS#c%f^s;9OpHf-jSBVQ#wTAg~FiBgV{sVOV&hB_!ZSx{X4G^19bzhJO6GoB>YaOEJpN5 zb59H*yDo1Fe=yxo^l6Q!Aj^9{muuZ&$UBn^E|FLTJ=-=v23Rd#(^89@3cZ8_!^=Bi zO?@bt)TiUdKjAxAs47}1Xe7DWgn%G;Pq_9sY-_Pzz5%;ne1*C48BWc+(^avLGa#F4 zzq($A^;;wf6|1u5BvwmNAwn37lvO0)t8xKQg6Y*C0 zCjD&b619x>X#E#!C5zxgN^&QTg07-)bFlbmOmzE7N@FLuq9z5)$(--kCC)S4;9WPg zRbuIk1jcav5RY6zUt+{;E)Uj$D`>o5VhK23!tyE=~0+5^W4Fv_$&X`bY;r`b_&&h^Kdt&|P`kYND&OU2J zIP9ZhFGO(+ngWB)OhI@VxeId5BveZ8c}Aw$v76x{me?MX;PrrBepTbNdL z|5u?e@M4ksZ5#d-zvFo;2kWpmrg`QK9N02Q-nl?0PbljLQPw~x`QI*Qyi4-elhTi+ zCgB#^W&e_qI?dJH&{|xDjGYI(zE>g*Qc2>@8E3d(@Qi*s7P=e##1foURrmQD)d-vV z71HKY04U+>!4#e)aTB)LBf&9@_y|?2{?FKfT`z;(nnrRu+z)Hx1w%@wA#1G-=U9WE6iwS6H8$t98~>zS>= zFjVeorc~b>cjw2iJN>Eq@wi$NOk4|b)4{VoC+gvqU9k#7F728tdZpi69-TA=JHajY z>80i>o#Q9KEBmBMfD1mQtAL#Cz%2d5#n++qC*YoFKhWLmvtgt!r@$2BJzOQpOu!{8o&P)l7Sx*;C>sI+hiS7E&x?XNx{hRXKg1GSQBh;X1@Hkl zMgV1 zQwZaPfpg!8cyDqf%64}0ig=tMA&94N=2@d({N=L)AD~9D8JGb4SA*moG6N+&51g4D zpN(l~KE~P#@_ed-9P-`0Z3EagKNk*LTidr`U6r)enwEE=-_Tpz$or;)p@&_rZ&{20 ztYr?VBjpZrY|vUJiW7GLpY^G2q{zR&kcKM7Hn=*nHvl;|dPM9f5f!b(pg8Cjg8aq; zzPwuW?}EjUd@@)9^m8_BC%xY;+M{C_in`!!4ZH41SUKAIQpW$4;o!&os50FqhON}a z+ys*wxlZ@USV$a{Z}8iYsd2%1m|BV2US@@GK&LojS0?6@`e13x&xqS7tFkPbF2}6i znH7Eb3m$&Z$3|OCe(Hu4k-m+M#ecE+xUYyphBgPxl?Qk!GL`u2LetqOZF0V8&5+!k zva?zcXG;l5j<=bSP_+}12Yn_9&f{^40}TrN8}NokVZx|*Czn9MkXRgSw|9DiUiVGb z#=_22v_ko0hyt)}9cb%oc#d33|40#|vqn@Sv&{IZ&N!+7=E zgy{h&Chhj!r8*dFV z>384>;joAHM43G+7Vb;jy-=qwt`UFw9ETVtGgu6kw^CkYp7SqKra+P&v^)G5=|hU=FCMv*sHr~k?k0r9rXeaZ zi|9DO4vZ!)0U2=NKp~0KtzQ8Qqz#egjj2c*)&Qtj)~S$dC$c-HJO^Sm*%tuFi-Zmz zbcVn+4eq=D+yY2$-A4{G8K2`EW7>8jBA3e624HhJI$zN z#y9E+>T%a2ZIDQ)`Rv%GXE?`o)NpHQmhjDmo>(-idDMrS<8|_Jw2%Aji~?PDirtI% zgHpg(6)!b6{Yg4EYYqY8j=Gxd{I$~~;aZ)_yau(+--77%T2uriHqttO4Jzr8b$2q7 zH1@JCTDq*%c`Y*hu2UxyqvBO(?i|P47c}T3&LsbpFw;>5Ij64kzGayKGV;Mm2=)7x zKVNARih5QSUI&gCy?dqZ@a#@h z@hRJU5Z;!dRyhH~syU}a)_0!dv0!jz?DK4nw1t1yi zl5TVDj@&O1W+Cb33nPox4%V^%a{D`Bf@Ab_RFX6kxpHrp8G@0%w<#4mH*fQlgs5}r z@Xka#Dz@xci73#>CO_tfr_TjnjcTLV#c8{?_sfiT#{@ORaYtf-j(Cr()%n?zq;%DS zdP=K)o2ojkq49G+e(4<3QhOdT`7v4{=9iK}zFoOXgMJ9M5FrB$DokfzAEZ@&?9xlY zrifvP_01iBY2NlQEHL5P4yC1buyWM@p1adR{9K240yfljDHt{pWlDC<4?UADUc7h& zaGhP>Sv#&cjXa-?e1UMcM#GYQ6`cF-Vn1)wukACq5Z53APrBc!_r1_P1{w{f+A6AZ zZoAD7i0m!8OU(B^?)}Sltvh2@9I=xd%YLt+(9DXEWa20!Q;jb68d0*V51Z5^RhIXD z2z^EWXY-|3N@WCHz9`QxE_c75@}aTnRej@F89kwWR)(Y!N^(EEsGldi(9R90kZnUtx`g+@l5XL)2!66zrY2>_4J{mAgIhI7&OCHtF>)L#b9b*BK-v& z`rG&d5R#mN6c1LM`$||X%vwPI z>Zj1NxilB}5ou)(KShx`C5WQBY`$T&%2xQZLL+9`+!E=-P#}iZa$hJ!zDalDm{TL% zK)jp&3W{TyLJlQ9$C+ns{8Kac_@hO?cK-Xkh~+%fNfg)K+=y8Sgz;6=xu7C&95FSC z*N$hMl>?t_OmZFwf$01H4S|FiSvJ0QMDcfrtl1R1_P~xLUGxFR^-6dE8SWY>(N^#^ zZTZY~amM^#R&uXo>i47X%P>`uh>sERusD%PAB5FZW&o~R_7(Yy@SP9*WVJ%X0xw40 zBQ7qs4bI4~a}SV#aI{L-VXyD4kvH81qAIxHPIzPPDOqmXub?2V+Ez!4a|~KWFl-$H z;d^Pcw9fN!PZZgHrB-o{V()VpD!|n?Lg%DHiUwR2QiSIv5wdg))w(`+5fCjQ`H-Z) zg@1L!KB(fh`h}_D%8hCyICY7&&ofN@5F%T9(Ebgr&Sn7pOBGXhxBmEfjHco@^zWTj zdpMI+&ekV<$nAk%+dV?ktl<2G25$Cm9_@HjC--YwBWn9HGpl+*^9q{wVGv$$MNOUe z@?|;{F9nva{4L@Mz@uzMh_gG;U6qkNOVy^WTm0_QdiX1ie+!`N>O4*Pj~$<}ed(gr z_H+r@qXNWfLUoU}bLCf8-%(t5RC3d@;-3l-AX1_!mvnpY!reZOz>3YJ=>nUWaKH;uzTB#>~!eosKEcLXcsW165B~{N;StVY11GVHt~M{MPENaDTwFkF?r{!WQf+`e1YaBYqaJ zoO8vxbG-iCwLk{Y9{RyjiraUV5z50|ag7GXb04;EhEg&@zWk6v2nQnkz@X%L__ST= z8W6ve@)Z~EkbHRzjVPjb(V1hdmp;Pb*Ntp?xzM&Ca^8)7J&1+qLWvAxkY#s(8_~d_ z&5sWhT{BeCS?+U>k7u8LP7h>miTYVu|IlxbpaszABMHH>R8BgtDx-{97ON#i6I-zE*z6#jUf7^ z45?PGF5G~(mPzCEGdq~>{*6#)Ll3%;9#%e;IOdDg{reXCI?aWn$`WOb0jN)g6H({m ztrCxaZ}lSqwWKWAMd)7#|0p8OTjygjuFc2SA&J ztRw-p$R6~T+xjJiVLRfiJau}nebxUG4;BJiLiApzWS~g-^V-b1&d4zX5h5d1`kjT^ zJZomJ>qiH!eGBdc&Vny9&7b0j@+H!V7SY=#5~+W79yBK(MofC?7#E2)SEGT!n``y zHGxhlS&_w{la@s#Ht?7PxJc));MB6*2y~H6fgOkkFm5|AZ42)lL~vRW#vbT!lO;w( z3jL_&&H^;%wFuLDXH_`($xMAvsyX$iKkKfAhd_M8oZXEtrT#)--P@Lo-N>^=tDlgr z$0~ypu1*ql|ME#&ASP))Iw7{VdBehYn;JA<8(Nf6IdBCIplIO8;)bORVQHmSwaxM* z!Qyn(?qoPzGgs%FedUT*8!uZrQ?lKfWSssLhVR7sMy~mz?X!OLLQ+AOfU`wXzU_`} z((s+!?Ugsee$+^7(>`so<0MBWEn|iwu5h~9snK>=H`09J2zUB>ZG9wJ@J#Hr3aZ4B zFHU|lu=T*0hz`l-*5hFOaUr}ihi?)@;HzEc0?Q=Q@}q|sVhR3(1ZNb(*BU9)bfl_H zaTG6z3|}AQ-pvR!DL`K51(0lmV2kpOEteFl-nh#K{ZAjy5FS(v?ouWH;%V6YALCp> z!Ah0oe-H~TBjhE)P&{{#!bKg*nBtghLDvAa7tWN1?vT6|b9liyc5_X?BR{hpxvq$& zbOk?gDXuAkSuR=7y@c>c%BSWBb=!4CaO3|ysQbSMZ|}#?70>?P3uqz*>i>O@`_b{X z_&Q@d^5_3P+dXkVmfuGIhavr-t_Xc%wd!y4{tGj5{b)24& z3wbh}yeJBeTzf0IEU>@(_URj=t7%>z14*gR5T%bh zw<&&i+~!q!Y8iKzlRTR@6iK01L&Dsq5rP+Hl?`fiTeTnTya+s?B5A{ z;xG-`bx9)Qzs^T)08^}jv(bJP#It#sAJmcPZfru6d_By!6SNktjTBo>Z+2*>PJYhmU3vg3aYE$iP&0&iR2AwN3X zhZI~MiuXbSxJqh3ag8Epl6g5J*s}2gsyuMyAURGp^D|{10$h%2|0DVY6jVFSBG;ku zZ{$V8oUkMx63N$&!$etxA~!Psj^t8K@oeI7L6|ZG&@ND?&U>zJ^SdB_x_9SF+^g@7 z5K-o2N~NHl6{?v&A`@AJ+h#KIB8q|T{>~Vyyt)z5atN(!itTc5&Wcm3?oTiQp?8D9 zTMzHYav~n@vg*MvZHKuIg_+WGINI!zz81WgJ2L0|r&fNb|an45k z^2Iq#_ib`6#Jp~(&_R4bm)dBc4*MOj`NK7*kf(viI_>+>7Qd7nr<&wbBhD71H~1?r z$(AYiVjV)+ZbpQ?=AOUTCL3o7d3#1Z5)Ld}c2vss7aCP7@JpY8M#;J$;|(waDR0t* zhn})<^>zpb-UWY0a1XuKF?7vn!xUl>iJ`7~Z8S*yjh|wyaDK2wgc;NwAV}gsAALrB zer2FQl<=1P7uuQxy#w#DZ&ymFlR7~1Opi_-iOsvt4pvFDgdMs*R_Sb}mpaC9U3S4- z3exYAeEEYg>%>NZHr}Qb4R)u`7xl5`tfn+JP@Dk+C6*$RNnsA#ZhB13^d=iER`LTx z+ANOfwqWhhPk(dmF+!I9+MIu8i>ay!IN>3FK3da!A-KwXOdI?rR-cZ9=or~Xoao$u zBk5CR0A&#EVO2)9G0-K?8eQ1&z38xNnoF^V2jbU<#V_0q&c9(YM4jth(DIK4yh2kq zw``WRQ?Q!(C&@@gf@hG{I%cMO2(Ie)FDjZFu-dLcKT+aHBPgP5+vXp#Zhn!iCZ`MV z(aHxg?pGA{#4_ixFN(vguhV2{cMJI0>(_)+J++qv>J9TO&qUSF zOnUz8`z|2qSyr%r&+G`3VG3yYB_@Tijcx<#qQm<$zl{noMx1Eh7%BZT-Ii_Jz79iM zO1Ugnzta!&Xa%=$tptA+_2{gxY2WjvttR<>I42LX|!;p-s*U(L` zpw1leI*7whrN!ghJRiNnbAh1wTc?MIjukrIVrp@yH>0B_ z@bXH$Om+tiJ38cD9bR}m<55i+#5TbNf6ft%Gy804y7Oyze$NK~nDWj$tKYMTx!`s7 zgrq8CAe5Z}Q>Cnol#yA`Bj;y2eI9|j^yjkq$phc_NO3kZ*=5jI2BwYKv5lUu(XLIL zTJ%^H4=UJQG(?#8Dwrp-6B~SLyoWs5D`qk|-vYfjd80P(j7CzEo%C8UTK%XizpT2x zr|zgB;!Cnw$tJhxSV`gcFwLyq641sQ<%!||p7HNn-Tp}zUzmzn^^H-bzQVFSpi<0SMJ8#`1flF0XLI3T4lu{dx$V!9GfHC{pY;i^(jw~-Ru zI)EUik96vR0IEQ`abXtsz||~#;_lzX!^koH2sV|&!cbQvpptL~+4z8=ucrcV7c zV3JvnI57>qwmLgliZGcV%VM?+dp^OqCXAEu%`0X5`h96|f~LSnb}U$KH8DneGHtL6pzuyW6iY7(7_o+u3reQh+DzI0NMDSXG{jXHN5 ztAp3It!?xA`&+E&YxBQ#yc3!||NC669Sck#EZW8QqwFyKRW>3ueY#|KxTwt(e!V z(^D%*DdLh5Gg=F%XV9DD4{ttN^P~i4$1wa(5j5-gaVCgyE)Y! zagX+Ip7FW`6NW!Z)&>;K|6)ywRBRLYINRGMDe3iyY+b`sYKZK2w-ZJF+EY^^^hs0$ zb1P!k6%w7)bt`6Z;g7VLv3D|&n!kSPzrtjF`JS!Ti(>cyt7wz~_JJu%Suk(0qi%6J zs=n;#2ZB)xP>%buxYD5X6|C2l?&_zyuANlnOpR7{<#Rh$DxcL0%y$_tGr23w^cKg; zM$NwmC2@X>Dk*th4uM>iC>znf7r^KHRe^@&vu+ng>FiixwCgu%QcD8@h-~+FO63sDQb`q_ z4wHV8AUO%wK$1F`B{S%j!3>Yi>$z6FnZX}HgCQ5~ithH0B0QWWQI%e(uOkj)z`Kq( zIuWu^;fU~w7in<(VM!#%W|Nz~hV~-(^EVN5hX=|!vX>;NKx35#cl$QjYQ@4%hZN_!tMZdaHI%rs)CR%OB#H8~jh5QVB+W{cIjB+3mBV zlhnLzy4w9R$(z=Jo6fzG>@>g6M^p*Mf&J zTVr4e&OPEG#Zrkf7uMu+F@3EBN;|s4?uF)Jk3NLPIhgJ?-gsCP72_89l0it|g7AY)D1y1oc^_Dt$+Xy9h z50a8HChk4C<)H&j+!lAgJr9%Dvh{2-_e^=&14QlJWaN`yuU1ML!XBqIz49Z<%b@U6 zS5GP%-)0tP3OAMaD_+_(|2wg26lwQ%K znBV5xo%Ac%eN_29L&qLJb~@}LoY(eg>^AIgnFQorzo5doctRBX36ewy-3TE&0c>Fn%wR&&<66zaz(Yi%*m0b2PmOi}n)})m0 zAC&3NEaHcGfnz=|-ZetaDiHi0(55lg!=I_7&&Yb(PJ-*gbU%tJFU@gr`k^1k`9ZA# zBxgM`y0P^L(t%zq+d=*1I5X+XvpRdv!|VwTQiNhKuF!i->pq`F3__chBS2$2MXO^1 z7>IW4z#Dlf)0LCgR+6I@_=3`{3W_i?8}|c2urps&p&M9J<~cUKo3Uto=BOtYb{LXJ z&D0wDINN;iN>!G&CG-z}H)+D9L2NCd+D-(XMsT7o{#)|np{A;JO5Sv1kKKFiHHQBW z)Icl0t8>=KUzE~*Y7wVFbI`XO5BOSg3RG%#x~ssE_l;{B2ERs53M(VN3Sy#ZrVp^F zhnox|9-u4%MB^3XCT01C?3e~L%MAq|!Eq7G4_xsmRSqQ#?cOR*J0 zHX!yd%x-h;&poP5G2C~&t0{^KQmNsV?pqsk}_3T}lr!jn-%6ejol*q}giOrfmr8^&52+{TE_;Oe7C8 z209=RCJ`)1+3AFAE@RsrR9%jZksvOM&D_C|dQ8=A`Hf2;d|mxwp#YgAKoUu7B7iX zdQNK7;zYjj^@jkGQdox{y-F32bo8RIlI$wM_#m2)4tK$YH>d3gKuyS4J<)_ouobUB zMxxbuZdH*_R9hx6BKlfO%FwVq1i(R zkVh5LgX$D9x4Pu`kznA8h;+5eFU&JEdnJP1L@*w3%PCju5)BTf04ubpfFhNCC4?>Q z1m5|Z=3r`08mVpiK}AZ5)Xxc1LxLg% zipxOY%fwLM!zqMud%G{37p2gmNwT%Fv=3+; zv_MS9>>P-jCdm(_CL}O5V(F`wNO3{!P z0HU}p#0gGsHmv|Ea00P=NUmxIDYGyUFd1tD2#AThhv$;PQx#SkQFPVQPD=(3DwRMB zSx}&ZMM{G-ZzNSXGz!ox3i({U008$u+JpciBau1(0Q1!`EMheM6cZ_odAo|3%G=!H z1x3WQ!G2?lfGdNFgpDjp{z%L)r?fV&{_g@ZNeXvW8%$x`K_^;AdX;CZT|pq zGLG)o`7tv=z(MI-`ITkcXvgd-I;_%9v*iaRMsNnwqvfv?&;`ibE%^KbZ@ctwM~~(N__{ zbzH||x$Kh3;;wfE5LW~SIA`AwUNiWANlsV@qhyBYEabQ{bYa7kb5}XO2uzJ7G!v5@ zC=#*}9H1;Bry`+zUCTG*hr46HbE8O+N|6GgfQbbL*4$IqUqtZ6k3&ljN)uXWphcIIT|s9eywD{V4F$AX zgmM6EA-EVXcoo*b4Hm2dp&M-yPGefjWhw}=mgG>I3#GTr0Fa(KOCZq{EZ*QqUc=3S zCSzrVN^{kNw1ZhvmR&L?*8x9N&2L0c*EIXFDEy%p{N5Md;!f3q`j?hiz&Nxu z4NgcS>Xj7Gi_wFq;TV1=;6@jRu0?R`z}T^6U~ls_#drA@Cd6UHKJplc1S83%0~4?V z;6C!RDhv_g{{U(n1C>GSPs{*m1Rp>L+Ff)nt=3s~Yeb{0f;~9iA@It7GIxpOco|PY zypqPia~fG;#nd8nn===VHA(xiq}j>hl1W*cWt@Uy*3{$h%LrA$b~Y=5hXLP5C~2Wa z%GKz0%AruHX|y0d#27i|W1eEvqOF@1b%<>utp*@7a_xt@55M?-NmV96$(T%(!kIS} z_@oB`wG07Js4b{~=wM)Dx`xJq%&Gz@bzqV4Us|SWa289tY60e1Y$e6Pb0eE5pmBy7 zKg?MMgoMQZ0DsPqJ9I8cSOfl3chph?Fwnwg20Rf(g0vV+yG{}ut$Bc@n0W(X{{Z1w zdBK=fv?j1tHiU$9g}`Bun+J5z?W8||tIC(}5hQCzIat7C%LSq&#C6L6AdzcI*g2 zr!y;F`@9mCLY7cJP*o^d*jO3_CLqij@L-6fVQ*(l>F5KCX!HL7=bM=$0;EbHti^X* zmbg4e!|Bu+<~zakMs{;xwKv7oRTU#G_Rx3M6=4cqYtcZc_MDWe{#N&JCkKgVmGeyiiuhA;!WF~(~m+B z7du%C^UO(Jf)=^(-hA;Ap`y?n;;zkJEb|r^IhmcS@m~E#8!8;(of^rUd&JaJH#i?S zy?Vs=R-nL@O7z1R?eGf2n1aWvoF>Jl8c`kWG+OCd=1uIPMc{=zleMnW))c zAg+G#YZltnbVjjGPTYo--5@%VEvao~Ye;VQ#34 zn{{td&=Ii#^ZUl&)T`)F);GB2ObLD6@!}X$wu9J9GJennB9K~Ys@HeS0L>bDbxVM7 zqM&@$LPf?ztIlB|A2EBcL`qP65K5Q5xPv+6RdIk{c835PV757kMvb>{p+p|oe$d-3 z%ug(REce*uhDc&P%LWQqn*Dzd>3D*^#fmPbQ8=&v05`aa<%WXX(1E~z`G9DgT>5|p zuA0rC{^M-a!VHjEzi8?XAf{~+8Dj=Yj^&S-GMdQ&*!Y&rU8o;?ppvn`R33&P218Mh zE#jl@P&V}&K?Ix1JQYv8T&_r$uNy+kM=H|#T*~kxS$V6*ygnr! z<%u@CHZ^bi94peY4b>M$MzuG6F4N@Xb<0N(TdQ%GvoQf00>nu}MdthC4 zwM)Cjb=4jrxIKt%wGTX0u*Cqp!AbJE5F)G_H|ZV-77JF2 z_Z(Cxq7H>>jb@bjlmnU|VYFDDVN4v(14HP+v36a-h*f!(nzG8XzU2VBoaV_$;smbX zUp93(xz?@zAO2D=>6w0J6E|ClsFty|VpC8=&Y-PKu5kpQr@`3cg((A?d5-$e!bAC- zk)n^d{7v^9^>t8BlEsznE%}HB>@I`4<~*?>2;N)IR(nKrDG<`Qsg2p5vk8M70I&iD z=bCQ(M!*mhqn(=X7TWO<1yN)i;BdyX%&lQ0X2Or(glcF_-Spy9#z4Vm5;}Flin+0(uTIQ^mCFlP=P%8 z!c%W>hwGk9eS z*x{wqX15Z_(h#KrE}gg3)xNf-O0;doULI}$6=@A9$q;j8z3Kv41_w|!xZElMG76KC%ha8(vru6k9;r*4aTVKiuKS%x|BlZ%x;6jolO7&%K{j^isu9f zOb>!|$FZ1=0J#F`D`%XKXx)C%mb<@G<9yB3h(Sei{I@SfuXY*%%by5}+z9sqSZch* zK_Vkj&OpD2f&pAC#8pVN%#!BGNjh}zQGib(Ek9Uzu}j_L_(fV%tM=&l`BqS`Lsa~G~Nfj zp3=#N*wLT>((Jp{!WbF@#c_p>71y*?C0%$5f!`U6b)KhXnejmC<2wEpc)u* z>k{y+128*7kwq1l;5bUq%ailP*O^1ahaMOP8It+TaV%+~z}I_^d5dl~7Z<$suPT~q zzO9=f##uMCLtTa8xC+>IU+#WI~s#a?29!KpHot3@=Jn>oElim$8ZCiBN>G1I_%c^{?9{r`Yq8EW;>j8te zdxlml7ZesyZJde(8Hm-};hrzVpz{g`41*^1tjzJ4Gz?d#l+-LCbWu+(^8jmF!4)pX z^~QBIN@EPkuEuiWQ)r@rbBDL=;wc6iCROk44Ac`1couA~Ukpi#;0cXiO7XY?XcFEz zKXeN{Y`J-MxZ(j?intb)$TPAn6fzqX#;%sr4vfsmk%9dn;e4kaKGUTcY zRV&SG4Aq!EYu2CQ0X9I(*n>b#l=D>l%bG5tzn{D~jsX7vlrCV|t9;*>X~P+E=q76= zzMVre8J;gRY@Ge2=rKhsZ&c&=f-`-@6x|=w3AVPD$7jdZ5Qv1Q7kTF-r^zt~LW_m? z2YzKu&9la^m#7{fL=gpRr|gOiIu70_Tot{;5CO*l+vCi*=nPE;f3BDt2ssn}nCe#| zw^m)}$$34YLFv82d{pfyD@Dj=_0AHLW|Uc@9z

      g{W^ePqs^f(GpZy_X2R15ts9*+e`x^rjJHW(EI7LfkBp}%;$Xz6~a zLQPwc&>IM`Fv1ijOm{u|A-(#a4dXkf5Vv6S0||Z+7)h^uVE5C0R-3#dwVXLw$y|4m zvLY*Ziqcp9_SSS<3g4Tybps5olHE!}c3iF=FAr3FzSeJOK;9nWTHzW;0StXs?XOcE z%CdgiDi95_2y%VY9q9#ghY+-}Jb>G6QZ<7GtTicwd2b;Y^S~&z-|H95<&bi!b^c<7 zv&Io{)7uI3(ikEw&Wx6(&(d^=uw;?CkK@Csa+8Y_oh zP0Lx~w{lfV*1A|?to#i#f7(B~>|qzbi$zJSNw5$5L!#a6ZYkdA%*9VXtIx0>!^;n5 z?v@L`6jRw(?B^3VOg<6HFamd^ZB)&5?bf0+JG+@ZJJ;GNDP$3Wb;@=jT^kLUQK(gI zPn-_tDoNhv%;Jn3iTmFRwY$Q)a{rF~-}D~E!Z+Yyg9NDyx!*!*6%$O7q|DI&Rt5m| z$RmI&7k<1q#r!`0k%Lkt?;c9d~8X z3QA)i&V4hp*6{6#0G!$u)ySDmKW&jN#dQ6E1?NCOb1!lXZz2irraK3iZ6f>?tA5(# z|2zyo=Wu>=@FPYnn!rt9M3z)wCa#aw3kzVb1!g|r)Im~a_E&oRKh6E@!J?&mE3~Ye zw%`c!D6|Hy)ab}5exk3}oJPWMECbZUnRSvLKdb)Fp0Nr0Bf>k4giu&CWEJDP^;Qwh zKMVvqvtR4gKO-{FtSH$20@nt^y1C?*65_`WsTBLHa>=9(4mA za22k4A-qEAcBNTi7f@vz01)e3pd#k}O+&wajlLb#eKy_V{&!YE?{mlIn*jnCc>EL` zOd~oYoc(<&?b%;OyL(^S#;nzBuOaIx_437g`(UY;p3(68bkvS8_o=z|41 z4gwzlst6zk1pvQ@q(?2~e;gJ=XY%b6o1*QL+;#?us;ITN7BNw`ukqd*b^Y48AkVrE z@-`6$C*O+BFI|RZJDGR(@9=uK@5wRgB@f+84Y^RJV$3g|1=ZGfXjZC}iJA};m~WM= zb{}!7z3g}BqaC|f=eCXzag|na(w};}z~3YoAkfX?46i zwlHPOED8{~1V9Z&w3x(EyP>~n=PzD|cRL*492`Xtc9cM%5J0j(T?=RlCoYVL@fdat zfBK6y{`wV4`QuoM-i|#BAfrx#GYzOf-z0)%K_H-@E36VO(c)X1D>f1FGxqUTm8YJ8;k>eAO$k4_O=eDs5IY_kOS7fW+&X2grgP(pqMuzg?$+K0R1}X9ugMXSWq3L4M_e5b)FjWO*fj)U1 zE|I>QcQ!EM-pL}ZV!0-9)c%jn^M!X>o(gK=Bm2qfw_Mu1i9)B zDH9O9oo6aHoH~4(M=u^gVQAy{*?_kmgJ&0{Tzuc!Wo457(BPlGa9MgJz-{S46EAgj z|5y;}%O0pU-#N{)Qy)%Axq&wUN|XC4_fH8+xtbUE>ig_jAOrKw7-s{6t@>pc4NTet zEI@UQ&Wuhw0YyQg3sHjv#_VS)vp68=fzQE5=fag38g3d#Q(LIcFBaT1Kof~x_&Waw zDsv?4oYoJ5pwHH^XvB7q{Ubhx9hdkq@=!=WTwH$mgP*s){2DQ$yz?iMdaWF2(a~i+ zkHxyaAm;_qvIykCU(x$xas%x(t|qX-J?AtGjGlqnr$XpYBuyz_STG# zHVlu$=Si|9rSUyd$NJba59s4F-c;Acl*RT9U8s9e*T`>`5eX!EEh;#yBGJml~xwYVuM@9oYxIbG6C zf@Itr;4%>D0?-2a@Cx#@x5j?8?_4$OM@zU?);qI;()3xqij&RSA-bYU01(*Gbxdf!}P&sU7g zT?6>w?iIpUyCwW$NbO}6Q@RKAWft06>_;{()h8!-^$(B5m|u{_D8A^O4r++}*!gT* z7S1KK470Ot)JebDx<5a4JfeO&Gkb^~PKbB@M71K$=P8vmPnOAG>AD_?_b}G^@j@&_+CK{5 z2%HDu^L^YT6tobyi-iP$=Nd*VOq{tRU^GDZu@;c3F)ZoHj#m1^!#{sPJ(o3~Xm3sb zW7UXrben`*01lo6U@0ROuubmDm?y|wcpZkm($WY9z5HWy!;bb&71KI=w~Kz2yPPk- zZ7LA6hh|ym$~KX{A_2_J{7fCesnM+|s+WtZYy!SD z^^+Ua`Kr!Am*p|k(4;$9m|f z)S9XZI~;;9zr46q$xRW*Ld+}wl!QmAKt0uy*z*l;0b@9vhYit%I?rR&0+YFa+4$eS zpbyO_iXIk$04PVb-8v59Ulx2Av<0x#@XQFrFt5LD>X!xBq#;grO=~i5fJJVz5CG3D zW!s46@7f7}HDg{|{?$O__H6cv`lgSpyRmSkq888{BC-buipZYhe?;`lPXFY^B7XIc zTGk<=^w205M}WNgkwzZrzoW4UP7uJ7H7o$F#e&W%x5x!BG*Y4mlpG$=l+6Zq|D=Qe z@R4Z!0q;AJ-NtaAA!-Y>{`*Q00q@v=?;AS}4NWfb^Zz@U`$R^ZlRM@K(E(5ZY7IBs z1PK!rbUa#$WKN*tXuO$U+D7Ug)IY*3@*21;6@G;7Keayb3P!>RiXi({{yQ3s3)Tl|z`Z|q z^l?D*gIg;9J6)dghtGC%(gC=cqt zmj`MKmnYy^GJ?>6djl;I7}<)2VLJ)1&~>-$Us>S1dF(@TL+=DPKOZD4(d(ML^}|Ny zVndS=et!JFavyZ%-MIi&KwT6l+lDt|kthQu*kBy6Byp6&afkdT@B2>`7b&-hU-hHb zScniJ4<(4~LU0E<;s;p>vIM&BqFC-jaol_RZ@IN$70#2J1lGe3k2fG8yKTOWgZuW* z#AJ%VzZ(b!8Hn?|=RjnRLh=N4U-xN)>w7rd$%TEow14A2rg7dL5nYAfS%rdYghmYa z0bLy2w+YhH#C3^Q6z>0v2>w_$qHB5&&Ld(Ta~UH^Sb9d~t98I50EkZ2zWi4PGUhCR zQ7tDS{txU?gIkGCzbv=7KEDAKFz(}q5yQWiMtS*|^9rD*S_l}uNsK^v5lpFYYR(%u z90tUa5&7kG^H?(K6f_51awM{;Wc&fktE733Fu3~H_%N)+Sw`=8lOgi{k8Fb9RD&0{ zMDSN6*R<9=8zMhmc>m8ETLgJP?<0cQ>ybS;Tf{<^^(@#H6y^`CmZ2VpXKP=)8ksqe zfO)1Uo4rghMDUFg!cKc`-1xjT9` z+CR(6?Vp$`y}T-e*&w=oa{m4AlYnYZm*-d8nm_3AXr9$90WcB&P4jz)r=w|?%cr&< zI|-Pq9#_@PxUZm-S8(Wav+WeX9Kb&YoZ81Tnm7%@Yvwz~Da=sTuza|;^nFc>pW$HP z{8P39u1v@d0$^x)p7+A#PN|Kf6A5`G;DU!gOI4bVXNuhf05VAY#Rz&GW)D5Debml~ zn&upw#LJ}Tb!f7G`<23}+82T~`n}5jUC(o2xrNbOS%bj>9%T7F09mU20Js^|00bj= zGVQC4p`$7AS7dH=PVntZ*kq7U0#C6wa_A-JXMT1(qu|mvo9`i8c^+vJ7`hyfz1m_p zoaN|Zp^B;4abvJlS4HQZm{@UH_h{1ziOdgmNmLS2l8dXX+3$6IPoJJE#)-%zeWtiL zy=B=M8r3FWKh4s(SKbUM1-3Y4e@uKc2pG0k_ect8M@KKO&UiIA`;xY-?1StOQsP_Z z1f)%=b5H~cg@Tq(R7!_yp(b548IZCsjnGC4LN%}A8Wkk(>{GBfs-N~i!qT$fLw8cF zZ)fa;T|@LC-{c&XPQ~C&Ct=X4T0Um&j8Q>64udyj%~E9cnf?{00bt56YqQx*TniZ9 z#=VQA8CUd}Kb1IQ&T&RHqqU12lan9baJtXgM!B`Lc@7+DmvzoXdQg#`N%oPR(ml(b zk4Zhm|1lbBt|bS~vT|l0Bnr=@5j_n2F6(jS#I~NNlFe;fM#d~0V+2C8r7dFJ-;6lF z?QL1! zI%QzT<-6~PvaQog@yj{h^-tM5x2Nlw#G2eW-YI=l7vuP-fv0I2qX3J;82KK=>%4gf zjj#)itoqaA48$%FRayh#8VjcZc*_KedFqSW)_#sN`wxi~jo#>Q8NKL|vwdHJ*rVmC zcbiWQmT;QajD?!6Ny~$612)@^SxjM5_Pwa*c?=F0`HQpt<=ZtX?KNdpYg@d>XXMBA zwOzuHl1`L_CR1H=e{(y9c#qK1!rl>?*?lSv%NJ$5DV}{<-Sz%szf;y(q@>{(#k#Cy zT0h}Qm|T|4aj z2~MGEUpC%*TYHHBHZ}@RGMAWT2I~sovvXS?)j85|snyXUsun}Dm>pX`bf?<#eVBG~ z7Iz-Fwza$$)&*#Hipil!IdKcme(P&>t&`)f?IHRGOB>ofDk$eeYq<5T16%gf%qtA= zN805_=myHrUZScTQuzL%q0@Lz63%_B%0xO~$>=!;fwHn01C0X>TAymnZ6&hP9L%M{ zAPJOfr}Xv%i;3mqGIiZk(*@Ji_D!iYabB#h)l0bo`4Ic+j>V)?0e z0K^URr#DBe4V)=!54~q;Wkj_cGq5fAaBXGp@KM@rDzPD~zJbUyyRD_AYg+~t={ksX zIaM+BypAu+Z%1%NC;p1p;Lw-=p13{h-i}pCy_cXk5?bO$^s?vZrBS2Hw^n@^l}N*% z=r66YvkqY*4i?0lHoMFc4R%-zj=JF)rnN_FrYtNHf{+UA+ShOqlu0FpP%#A(XCLnX>e77>wcv-eda`RmyK$-u7PDv?mXu{ zN;&h;<7~PaBPsaL^blB>1#S`Aw)7k0-dHto>}npyZN7G>;L zEf{HQhnd5<#ZHvTEQP_1lhr2II>owaCWh;K#}DX~2Yx|{^JZ&A)$kAGS>^1&l)P+y zZ{W4z(Cj+rFGcT`g*vLHq|=Zsrw65+`7p}mVGH3GfcwV>;QsO5B!GlAV9&m5-+1=4 z^V7NJG;fBb6ij!9h&*Op_vn?Ov9OMl9eCx>u6U35Iq+suAqqAMxHw}s`ctC!Gd-{u@_o;6i|k5FoDTs zFy0X$4S%Lm_5)HykV9WTB6pS<^StO?*HB#MfdJI4t_eO`hIx~FXY#Pj9SPM)Sd7;l zqpVtPeHNhJ!DJ09iJtj~8%@3fULdFqr25ezZ!2wTdRKC*Lw2@fO0c3VMWlO0j)v#v z&}@E&3F3P@NBfSg+a^r}YDoxrzHEuhq_&CIXnr`>nzMk+|lbZL^#jB*O z5-Ed%o423lNcSbmJ)kW+o$NFsljBSy>Tc>83-yqQmDnGZHJKShLP|mndtwkc)+9so z<-CS_SUs3H&#(O8V~H=aHq}|oE)FfSyg)$8vg_ZGi=Yhd;^}Gj@thpIY@6BWekATq z@~E?3gH|TwYdS6P{j{V4y)awL^7MpDGxzj~Qg>Sf9G?v>+eF--5c95e@{;^Md2$!E z5pg>xwQ}pj&dXH*ocPWgB&*w?at1^)u=^E6GGQeY^sC~xpS6(y`vGlns~Y}d3fIM| zgrdjB6vJ6z%YvSYJ3T#8Fbt`9$*-Me+%pOf$-`@jZflwh=U#Ij64N33E2e`filHs^ z7oc_2R3UpH?fpPv(EHl^Rx?w@=0oC&+IJK`oF~ysCJ)Iue(`it&V_Q$u~UgopRnBI!jo`8fFf@gp=3gN0#+R3lD3U^!l zXUv+PmcpG+a9=V^%hW<%k>+^?q=kv=6QyA%e)~EorH6Qkci(v>5L*vpeuoA1G+H(z;G2(yYd-xUk2J8dRAj}-rsh}%~vf*Yf*A_L*N9|q&r zKo&+4BL{?{RN*(?ze@tf`zm+BBfHYEaI-CdhZ7(T65L%;OIIvmb;5s2gB!YO_{$I! zAPd+!l{3C6FNqNaMgAYyVaW2`3$Trh1EI0Ns}TUTnh6^EiGOV)2d(wEzZ#*CCxEIo zNRK@B!LxtRvzqDBR8RHUZ~1+RM4nCGc;HSr0mTECv_;^_0r-zobSh_lwR9xuv>y?> zV1du?6PXt~oE^YaJ_*^J4>!fbqajGRE)4g^B6A|2(`NSKu8D2AzfA@0^|0%S+~!*- zIKM(n9sbiA@N{i6+{1x3x(|0H5zsCtYl8*%{#$-IApAmbah_c~NN%wYeE)?HDEN^R zT!!yRzde#g>vokRg8ybCj3l-}xIhlgkgi&cuL;t^1>Uueg3!7A?zLf+pqo#4*LAuR z0qR&377Y*JLL$%(g<#rCqywVke?$bP(Xhzza=;4aiJ%Z~2*th)3vE%s?@jH<$=@9Z z45L1b9S&Kp{9Wwy<9D?{U9t^@MFH09r2l}3IzohN_czr7o@@xWSiLn_0Sc@&0{e=mh{1SHZ^MJBhV{^+cVTT%-=$0oR9-T@Kt!wlI1_20`o~ z!6>V-5XzdwSV#hBbv1Vg>=S~;(1S1sGdIV+8cdvi@Qkr8uxmWkqD8%|rVVKaFszI$ zi5<#l!HGO$NUr$uruN)ull~LJ{JUb8i!S8V+_rmtr^W{E)1Pr4bap!L5~}~irWB_M zOy__lTW3qCY3Ja{shR2ZND;O{%!?W)k3+sQc~2&1RyC`XnHvsII9nv^4LEFE)RmC# z&YX5PqTy*) zEQCt}8rjd*L?x|4P zZB{X7d@$p}XoNXrX(DyNmgZ20<0Z0~)5k`1(-I8CZ997>EXzKO7(5tUSf<-z;9@P2 zqp-30<1;%QBd6J;nX~e|^tumQ#|(Cu5;cMTn4BWHcvNmjdjAk5@T4Oy6Bl1k!{49D zL&~vZ?rBFT`HfpjU{uoi>8Hh2qH&UP_yWnjl$|;%mI@uAD8;F5p zEfO|z1`#<5U1P3$ueDE(K6o!*?IW){ka(e@p+^v7I!f$%&{9q$Tc21yeoup(P>59I zOnEbHPcbXld~Ca0IW1e9jCXXA>rIt(aS20SgZOECr!(3*y=4h_Kb*_(or#dCTAcnT z`n#c?q?8kSc{~L`;qz1>u zr;QckGn)*^2{|Im)y&8ETlasM*c&aKzBgacnY>&&=d+h(>8r-zP%~H>IwB6Sogc#J zUI_X3+&p2hmJY#>?&$XHd*-Pw{JM6;k;@o{gl~JcQSDq_gc_dftN&s=9ioX6x4qtC zYeX?};BZmJziD_zw^KHW_K*WfbzgdMKF9ptOvaiG+jeqfm3?Y+`aF%19eg`6?v&+X zaH8yXGkpz8aU~s{QB`M_SCqMNUOSNRtiHPuH9(npM|CD4LqaEaw?_6ok@&E@b9Y(X zsWE4NGUfvE0-Ums_ha^Luy%H?yksjFhnHu{0c`hL%sprFQw-0yi)X>#)#;f+jvU_Ns;VKPoHtD`cd@}AdOP$Q(5awNb zK3HSt;qnL8(EY+eR6d-Co~P-=L!Rgsi~F4ux6S$H*%H6U{D1Epx7fi&THfkv&u=o>tsQf5BHOX?3Mt zy7|Ez;H2hYn1Z+YR9eI|36`C_xQc%nQ$|DT+mYU^>8;M@Fe6V<>|jA^nF^d4$#MB_Q@6m8sZ zn*O%d;VxO@?dpTKQ-+d0Pj_sk&CcvQ5#9ZOZbUl`#)l`IW-lt_7)WiWtUAhE=Xcyk zzP-0L40a4IQF7(rMQX~fQa|r|(r-X4Xm)HJOe7$0*fA0*uSZWPaJ`M|G^`)1%OdMf z36x&;-}&^d(bSP0GAA&5Ltwfr*(P1XrGYM^?V&lgG22fxs`{rE7guo!TvF8hf9$d2n2U++}%l#5F{bN9fAf;f;$8a63Cn;_vYT` zo%dVoojcFWnpxj8e@-{G%d2+nefFsXG9|fHi?2H9GkW`m9JXU$Vkb15-aUGn)mx_dFlqM18Bkky_mO?cTY+&1 zKNh(w|D&y9dGkzT>}c9w?!Bw;#qtk-(CrtYTrcy6(-!HaD=e{;FJEEM$Os>&n&nrT=BU=*}F4fwF{C{H46f!v2x( zjatgy_X`+l42_yEJ2lSV3F5yu@;o(sIkB=&9^0{gq|!I*ZCkS-V0Mammf4B29Vk{EDSh8# zyggpNhC@%Raz#;+@$wcEr^gsk)$p>3*V7~w)R)DQ9;gIQ+P=N{? zq7quS&QCZ5W1r%osa~*F%BS`3Uy?VImdt(sxc>m$0yuG%G*MK9h`u*4}ocH0#v%{64qwTFfRO7>UNqi$`rYliaCeTOQ z+<7o~0viJdS7^TP(k>+Q-dJhIxgo|ayC>X3Dim?9HZ~qsJp))=A0V zviHRdxeIRKbU2(e;qE>77Ia%$Q1RK(+(DYBJ6T(Eh`ZX5&K)4yliUupps> z5rI8rosZBd30r!k;zHnXL&zRj4mz@>G5tddz%W=mDgjd&i~uZM{c8Sq*R_@$@Wi{W zwX;SPTIR5T{Kp?yN;C~FxLat#Ap`>5S3xGguK1sIC?Lw^eOh3Bp%PlZ{*Q_LHp^eK zfbO23PFDbK1A}loAyoI(1A*G^-$N#p3J6?D1lW_{41Q6Y@^4{eFag5==1&Tgg#gAc z?VNK9g!`wTdq9c7+a8dAXBk|ee*!Wc&=-p0_^(Wv){ldW0jTVcu=$6C(DWoeYMwqs z`7I6vsPw>XKtBF8Z=*`X1;QxI-ld~|NCXaK44lV;dD@?TMmLr~Q?-NyB--DO7LoAp zlLknxK-2&a|0pD&RDPFg`?cb^^E4VsB)~9P53C3OsW7mNmbV20Qox_mfVl4wa07=* zzy3=fWI$zVkM>%CEdEbFCGIzfKoaQxBRKEK0Co6VfXrPb@vFl#Ocuw7Y0UqW3XlhC z1M*Algt1{B4Lq74L?cNBg|(RZmqyaTu-FN%UzhyHbnd5(o#MYkmj1gquyeA3zq?1v z0$J$aN9T_Kg(RRzKp#-}f15n891Uc(0bCRW;6ORhoaomy0OSE!-)oGGwqLm|xZ&SmA6V52JjP~qpV(?}xZ-y^&8x4i!ue*+R*$;k~IkaV!&)*=xQ0E$2}z5xggRgxqs z6M`(Pr5MhuCcn~-x#RqQthjqhn^$ON5+4EcPy@$W0>QwZGXf>h{+%BiSoZ<18%IU> z^?Gffez<$BHXJemA*VVv4lW)(mEEOqS7Xdty2w$I}F>yoe3aVDd|&}PIw>wn|r zsC|}DspCdQL#EBY=d#vuqopBpWAt&B(0}3byrp4&W9)I3Sgqs#vddijA$Q)zxPVM9*u2&o2Jm1=ED2ndJe8to z&|{Yq8Uo**pR^hrq6;&X^7btQ5lxJ4qnkcy-7k?LMRN_w;g+r z0ovEpYeDD`kQ;Y;Lnt{Jij?}tM8tUc(RgcfxV`H;6umCn3>AaMbwfS5lm)ii#e8=8 zT%zY$_Lg~ z_N<1FnXRW(;4493OW7YdtF=nhF^r@NM7w)RYFuT{P<9At292?w#Fu3ElMTa9v9hX? ztdh)(x$mwu=tIzFH*|JJiiBSk-$#Zh(-B|GH0k%wkIXO>=y1Gpf|16#QX8&qJ7{mm zMhTOjHRkE%smTpf8K%b^@j@GU2X4W}Vv5)0ppmV!jbat{HRt_3Oy#*UI(4WKobQiV zqv(?H>eti^EZeVTiV+l9S=kNN3%a%kkhm-Yee@D&^c#8zx483-CxbonZ-N1<9X`t1 z7L`fTu6032`an_5Jc|VH!BFv0nE&Jj-QEKTQApeAc+VH6H&QA0H|=(o)!{}&elY&Y zugb0R0RAjfhA2y1HR!|Kr|D3mD!8xCq=yP&>^I<6^n4^GOie$k7c zcyjEIL`8-kn1=RMDO4TnqmC?R<-NDNZ&k=mrNF+xC`1`hs0^I&+f1JewMX+lu_Cjy zr&&Mp5_;gxv(6r|T9^}nuF%TU(DJbqM^MmcDtAmJJbiw)jwdqmY??Uy@Z|oOLP}@v{G>bbhw?b|H_-+JfHJ}QeoykPiYQDcI!_%Hl6;7jfc;cxn=;dt~x}@1S+58}C*J#g28k ze)l#rj;It*<9kj_wR#h52iVBGU*>fZ-D`T!=1O_lMIuVCU_3p4b~|P~g+&@`WwB5g zj75J3ZxZWkt}am_^z_R`|1Y9C_NOfcyq68+Dl{}^7KTEA8jqizCt0VK30a0QCHU2f zAEvS+uC;tUJ!(^i;8Lks!eHhojgxD6l2~iRCegVNf+toFPJ5+AQZ?~Z6Q9H`&`ss` z!=$QTXK|wI)Xd&bB@a`cT|HRykg3q2_E?Ox)U~Tqn$v}8$@UXn)jr)2BgE|!2HKI= z$4nQ^RXG$cwYgN_zZbrMCca?7C@${;8gPFno9>0Ee_K9xa#dtI!u(p%0DqbVKh%x8 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 literal 0 HcmV?d00001 diff --git a/docs/versioned_docs/version-2.21/_media/example-online-boutique.jpg b/docs/versioned_docs/version-2.21/_media/example-online-boutique.jpg new file mode 100644 index 0000000000000000000000000000000000000000..026f0d86593411ba20b8c39e15f6158ef6ce381e GIT binary patch literal 263458 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%0DqbVKh%x8 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 literal 0 HcmV?d00001 diff --git a/docs/versioned_docs/version-2.20/_media/example-online-boutique.jpg b/docs/versioned_docs/version-2.20/_media/example-online-boutique.jpg new file mode 100644 index 0000000000000000000000000000000000000000..026f0d86593411ba20b8c39e15f6158ef6ce381e GIT binary patch literal 263458 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